1
0
mirror of https://github.com/ToxicCrack/PrintABrick.git synced 2025-05-17 12:50:08 -07:00

Change NumberTrait to use id variable

This commit is contained in:
David Hübner 2017-05-17 20:21:08 +02:00
parent 1c39cc1f81
commit 78ce9a9e64
16 changed files with 199 additions and 160 deletions

View File

@ -3,9 +3,8 @@
namespace AppBundle\Controller;
use AppBundle\Entity\LDraw\Model;
use AppBundle\Entity\Rebrickable\Part;
use AppBundle\Entity\Rebrickable\Set;
use AppBundle\Form\Filter\Model\ModelFilterType;
use AppBundle\Form\Search\ModelSearchType;
use AppBundle\Model\ModelSearch;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
@ -24,27 +23,29 @@ class ModelController extends Controller
* Lists all part entities.
*
* @Route("/", name="model_index")
* @Method("GET")
*/
public function indexAction(Request $request)
{
$form = $this->get('form.factory')->create(ModelFilterType::class);
$modelSearch = new ModelSearch();
$filterBuilder = $this->get('repository.ldraw.model')->getFilteredQueryBuilder();
$form = $this->get('form.factory')->createNamedBuilder('m', ModelSearchType::class, $modelSearch)->getForm();
$form->handleRequest($request);
if ($request->query->has($form->getName())) {
// manually bind values from the request
$form->submit($request->query->get($form->getName()));
$elasticaManager = $this->get('fos_elastica.manager');
$results = $elasticaManager->getRepository(Model::class)->search($modelSearch);
// build the query from the given form object
$this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
}
$paginator = $this->get('knp_paginator');
$sets = $paginator->paginate(
$results,
$request->query->getInt('page', 1)/*page number*/,
$request->query->getInt('limit', 30)/*limit per page*/
);
$paginator = $this->get('knp_paginator');
$models = $paginator->paginate(
$filterBuilder->getQuery(),
$results,
$request->query->getInt('page', 1)/*page number*/,
$request->query->getInt('limit', 40)/*limit per page*/
$request->query->getInt('limit', 30)/*limit per page*/
);
return $this->render('model/index.html.twig', [
@ -56,20 +57,20 @@ class ModelController extends Controller
/**
* Finds and displays a model entity.
*
* @Route("/{number}", name="model_detail")
* @Route("/{id}", name="model_detail")
* @Method("GET")
*/
public function detailAction($number)
public function detailAction($id)
{
/** @var Model $model */
if ($model = $this->get('repository.ldraw.model')->findOneByNumber($number)) {
if ($model = $this->get('repository.ldraw.model')->findOneByNumber($id)) {
try {
$subparts = $this->get('service.model')->getAllSubparts($model);
$rbParts = $model != null ? $this->get('repository.rebrickable.part')->findAllByModel($model) : null;
$sets = $model != null ? $this->get('repository.rebrickable.set')->findAllByModel($model) : null;
$related = $this->get('repository.ldraw.model')->findAllRelatedModels($model->getNumber());
$related = $this->get('repository.ldraw.model')->findAllRelatedModels($model->getId());
return $this->render('model/detail.html.twig', [
'model' => $model,
@ -87,7 +88,7 @@ class ModelController extends Controller
}
/**
* @Route("/{number}/zip", name="model_zip")
* @Route("/{id}/zip", name="model_zip")
* @Method("GET")
*/
public function zipAction(Request $request, Model $model)
@ -100,7 +101,7 @@ class ModelController extends Controller
// Create the disposition of the file
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
"model_{$model->getNumber()}_{$model->getName()}.zip"
"model_{$model->getId()}_{$model->getName()}.zip"
);
$response->headers->set('Content-Disposition', $disposition);

View File

@ -18,7 +18,7 @@ class PartController extends Controller
/**
* Finds and displays a part entity.
*
* @Route("/{number}", name="reb_part_detail")
* @Route("/{id}", name="reb_part_detail")
*/
public function detailAction(Part $part)
{
@ -28,14 +28,14 @@ class PartController extends Controller
if ($part) {
try {
$apiPart = $this->get('api.manager.rebrickable')->getPart($part->getNumber());
$apiPart = $this->get('api.manager.rebrickable')->getPart($part->getId());
} catch (EmptyResponseException $e) {
$this->addFlash('warning', 'Part not found');
} catch (\Exception $e) {
$this->addFlash('error', $e->getMessage());
}
$sets = $part != null ? $em->getRepository(Set::class)->findAllByPartNumber($part->getNumber()) : null;
$sets = $part != null ? $em->getRepository(Set::class)->findAllByPartNumber($part->getId()) : null;
return $this->render('rebrickable/part/detail.html.twig', [
'part' => $part,

View File

@ -4,6 +4,7 @@ namespace AppBundle\Controller;
use AppBundle\Entity\LDraw\Model;
use AppBundle\Entity\Rebrickable\Set;
use FOS\ElasticaBundle\Repository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
@ -23,12 +24,22 @@ class SearchController extends Controller
{
$query = trim(strip_tags($request->get('query')));
$modelsResult = $this->get('repository.ldraw.model')->findByQuery($query);
$setsResult = $this->get('repository.rebrickable.set')->findByQuery($query);
/** var FOS\ElasticaBundle\Manager\RepositoryManager */
$repositoryManager = $this->get('fos_elastica.manager');
/** @var Repository $setRepository */
$setRepository = $repositoryManager->getRepository(Set::class);
/** @var Repository $modelRepository */
$modelRepository = $repositoryManager->getRepository(Model::class);
// Option 1. Returns all users who have example.net in any of their mapped fields
$setsResult = $setRepository->find($query, 5000);
$modelResult = $modelRepository->find($query, 5000);
return $this->render('search/index.html.twig', [
'sets' => $setsResult,
'models' => $modelsResult,
'models' => $modelResult,
'query' => $query,
]);
}
@ -39,25 +50,33 @@ class SearchController extends Controller
{
$query = trim(strip_tags($request->get('query')));
$modelsResult = $this->get('repository.ldraw.model')->findByQuery($query, 7);
/** var FOS\ElasticaBundle\Manager\RepositoryManager */
$repositoryManager = $this->get('fos_elastica.manager');
/** @var Repository $setRepository */
$setRepository = $repositoryManager->getRepository(Set::class);
/** @var Repository $modelRepository */
$modelRepository = $repositoryManager->getRepository(Model::class);
// Option 1. Returns all users who have example.net in any of their mapped fields
$setsResult = $setRepository->find($query, 5);
$modelResult = $modelRepository->find($query, 5);
$models = [];
/** @var Model $model */
foreach ($modelsResult as $model) {
foreach ($modelResult as $model) {
$models[] = [
'title' => $model->getNumber().' '.$model->getName(),
'url' => $this->generateUrl('model_detail', ['number' => $model->getNumber()]),
'title' => $model->getId().' '.$model->getName(),
'url' => $this->generateUrl('model_detail', ['id' => $model->getId()]),
];
}
$setsResult = $this->get('repository.rebrickable.set')->findByQuery($query, 7);
$sets = [];
/** @var Set $set */
foreach ($setsResult as $set) {
$sets[] = [
'title' => $set->getNumber().' '.$set->getName(),
'url' => $this->generateUrl('set_detail', ['number' => $set->getNumber()]),
'title' => $set->getId().' '.$set->getName(),
'url' => $this->generateUrl('set_detail', ['id' => $set->getId()]),
];
}
@ -73,6 +92,11 @@ class SearchController extends Controller
'results' => $models,
],
],
// optional action below results
'action' => [
'url' => $this->generateUrl('search_results', ['query' => $query]),
'text' => 'View results',
],
]);
return $response;

View File

@ -5,7 +5,10 @@ namespace AppBundle\Controller;
use AppBundle\Api\Exception\ApiException;
use AppBundle\Entity\Rebrickable\Inventory_Set;
use AppBundle\Entity\Rebrickable\Set;
use AppBundle\Form\Filter\Set\SetFilterType;
use AppBundle\Form\Search\SetSearchType;
use AppBundle\Model\SetSearch;
use AppBundle\Repository\Rebrickable\Inventory_PartRepository;
use AppBundle\Service\SetService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
@ -23,25 +26,19 @@ class SetController extends Controller
*/
public function indexAction(Request $request)
{
$form = $this->get('form.factory')->create(SetFilterType::class);
$setSearch = new SetSearch();
$filterBuilder = $this->get('repository.rebrickable.set')
->createQueryBuilder('s')
->orderBy('s.year', 'DESC');
$form = $this->get('form.factory')->createNamedBuilder('s', SetSearchType::class, $setSearch)->getForm();
$form->handleRequest($request);
if ($request->query->has($form->getName())) {
// manually bind values from the request
$form->submit($request->query->get($form->getName()));
// build the query from the given form object
$this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);
}
$elasticaManager = $this->get('fos_elastica.manager');
$results = $elasticaManager->getRepository(Set::class)->search($setSearch);
$paginator = $this->get('knp_paginator');
$sets = $paginator->paginate(
$filterBuilder->getQuery(),
$results,
$request->query->getInt('page', 1)/*page number*/,
$request->query->getInt('limit', 30)/*limit per page*/
$request->query->getInt('limit', 24)/*limit per page*/
);
return $this->render('set/index.html.twig', [
@ -51,16 +48,23 @@ class SetController extends Controller
}
/**
* @Route("/{number}", name="set_detail")
* @Route("/{id}", name="set_detail")
*/
public function detailAction(Request $request, Set $set)
{
/** @var Inventory_PartRepository $inventoryPartRepository */
$inventoryPartRepository = $this->get('repository.rebrickable.inventoryPart');
/** @var SetService $setService */
$setService = $this->get('service.set');
$bricksetSet = null;
$partCount = $this->get('repository.rebrickable.inventoryPart')->getPartCount($set->getNumber(), false);
$partCount = $inventoryPartRepository->getPartCount($set, false);
$missingCount = $inventoryPartRepository->getPartCount($set, false, false);
$uniqueMissing = $setService->getParts($set, false, false);
try {
if (!($bricksetSet = $this->get('api.manager.brickset')->getSetByNumber($set->getNumber()))) {
$this->addFlash('warning', "{$set->getNumber()} not found in Brickset database");
if (!($bricksetSet = $this->get('api.manager.brickset')->getSetByNumber($set->getId()))) {
$this->addFlash('warning', "{$set->getId()} not found in Brickset database");
}
} catch (ApiException $e) {
$this->addFlash('error', $e->getService());
@ -72,20 +76,22 @@ class SetController extends Controller
'set' => $set,
'brset' => $bricksetSet,
'partCount' => $partCount,
'missingCount' => $missingCount,
'uniqueMissing' => $uniqueMissing,
]);
}
/**
* @Route("/{number}/parts", name="set_parts")
* @Route("/{id}/parts", name="set_parts")
*/
public function partsAction(Request $request, Set $set)
{
$inventoryPartRepository = $this->get('repository.rebrickable.inventorypart');
$regularParts = $inventoryPartRepository->findAllBySetNumber($set->getNumber(), false, true);
$spareParts = $inventoryPartRepository->findAllBySetNumber($set->getNumber(), true);
$regularParts = $inventoryPartRepository->findAllBySetNumber($set->getId(), false, true);
$spareParts = $inventoryPartRepository->findAllBySetNumber($set->getId(), true);
$missing = $inventoryPartRepository->findAllBySetNumber($set->getNumber(), false, false);
$missing = $inventoryPartRepository->findAllBySetNumber($set->getId(), false, false);
$template = $this->render('set/tabs/inventory.html.twig', [
'regularParts' => $regularParts,
@ -105,7 +111,7 @@ class SetController extends Controller
}
/**
* @Route("/{number}/models", name="set_models")
* @Route("/{id}/models", name="set_models")
*/
public function modelsAction(Request $request, Set $set)
{
@ -118,8 +124,7 @@ class SetController extends Controller
$models = $this->get('service.set')->getModels($set, false);
$spareModels = $this->get('service.set')->getModels($set, true);
$missing = $this->get('service.set')->getParts($set, false, false);
// $missing = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getNumber(), false, false);
$missingSpare = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getNumber(), true, false);
$missingSpare = $this->get('repository.rebrickable.inventorypart')->findAllBySetNumber($set->getId(), true, false);
} catch (\Exception $e) {
$this->addFlash('error', $e->getMessage());
}
@ -144,7 +149,7 @@ class SetController extends Controller
}
/**
* @Route("/{number}/colors", name="set_colors")
* @Route("/{id}/colors", name="set_colors")
*/
public function colorsAction(Request $request, Set $set)
{
@ -173,13 +178,13 @@ class SetController extends Controller
}
/**
* @Route("/{number}/sets", name="set_sets")
* @Route("/{id}/sets", name="set_sets")
*/
public function setsAction(Request $request, Set $set)
{
$em = $this->getDoctrine()->getManager();
$inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getNumber());
$inventorySets = $em->getRepository(Inventory_Set::class)->findAllBySetNumber($set->getId());
$template = $this->render('set/tabs/sets.html.twig', [
'inventorySets' => $inventorySets,
@ -197,13 +202,13 @@ class SetController extends Controller
}
/**
* @Route("/{number}/zip", name="set_zip")
* @Route("/{id}/zip", name="set_zip")
*/
public function zipAction(Request $request, Set $set)
{
$sorted = $request->query->get('sorted') == 1 ? true : false;
$sort = $sorted ? 'sorted' : 'unsorted';
$sort = $sorted ? 'Multi-Color' : 'Uni-Color';
$zip = $this->get('service.zip')->createFromSet($set, $sorted);
@ -213,7 +218,7 @@ class SetController extends Controller
// Create the disposition of the file
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
"set_{$set->getNumber()}_{$set->getName()}({$sort}).zip"
"set_{$set->getId()}_{$set->getName()}({$sort}).zip"
);
$response->headers->set('Content-Disposition', $disposition);

View File

@ -80,4 +80,15 @@ class Theme
return $this;
}
public function getFullName() {
$theme = $this;
$name = [];
do {
$name[] = $theme->getName();
} while (($theme = $theme->getParent()) !== null);
return implode(' > ', array_reverse($name));
}
}

View File

@ -10,24 +10,24 @@ trait NumberTrait
* @ORM\Id
* @ORM\Column(name="id", type="string", length=255, unique=true)
*/
protected $number;
protected $id;
/**
* @return string
*/
public function getNumber()
public function getId()
{
return $this->number;
return $this->id;
}
/**
* @param string $number
* @param string $id
*
* @return mixed
*/
public function setNumber($number)
public function setId($id)
{
$this->number = $number;
$this->id = $id;
return $this;
}

View File

@ -18,10 +18,10 @@ class AliasRepository extends BaseRepository
*/
public function getOrCreate($number, $model)
{
if (($alias = $this->findOneBy(['number' => $number, 'model' => $model])) == null) {
if (($alias = $this->findOneBy(['id' => $number, 'model' => $model])) == null) {
$alias = new Alias();
$alias->setModel($model);
$alias->setNumber($number);
$alias->setId($number);
}
return $alias;

View File

@ -36,14 +36,14 @@ class ModelRepository extends BaseRepository
public function findOneByNumber($number)
{
$model = $this->createQueryBuilder('model')
->where('model.number LIKE :number')
->where('model.id LIKE :number')
->setParameter('number', $number)
->getQuery()->getOneOrNullResult();
if (!$model) {
$model = $this->createQueryBuilder('model')
->leftJoin(Alias::class, 'alias', JOIN::WITH, 'alias.model = model')
->where('alias.number LIKE :number')
->where('alias.id LIKE :number')
->setParameter('number', $number)
->getQuery()->getOneOrNullResult();
}
@ -64,7 +64,7 @@ class ModelRepository extends BaseRepository
$queryBuilder
->join(Part::class, 'part', JOIN::WITH, 'part.model = model')
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.number = inventory_part.part')
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.id = inventory_part.part')
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory')
->setParameter('inventory', $inventory)
->addSelect('inventory_part')
@ -79,10 +79,10 @@ class ModelRepository extends BaseRepository
$queryBuilder
->join(Part::class, 'part', JOIN::WITH, 'part.model = model')
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.number = inventory_part.part')
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'part.id = inventory_part.part')
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = inventory.id')
->join(Set::class, 's', Join::WITH, 'inventory.set = s.number')
->where('s.number LIKE :number')
->join(Set::class, 's', Join::WITH, 'inventory.set = s.id')
->where('s.id LIKE :number')
->setParameter('number', $number)
->distinct(true);
@ -95,48 +95,29 @@ class ModelRepository extends BaseRepository
$queryBuilder
->select('related')
->join(Subpart::class, 'subpart', JOIN::WITH, 'model.number = subpart.subpart')
->join(Subpart::class, 'subpart', JOIN::WITH, 'model.id = subpart.subpart')
->join(Subpart::class, 'parent', JOIN::WITH, 'subpart.parent = parent.parent')
->join(Model::class, 'related', JOIN::WITH, 'related.number = parent.subpart')
->where('model.number = :number')
->join(Model::class, 'related', JOIN::WITH, 'related.id = parent.subpart')
->where('model.id = :number')
->setParameter('number', $number)
->andWhere('related.number != :number')
->andWhere('related.id != :number')
->distinct(true);
return $queryBuilder->getQuery()->getResult();
}
public function findByQuery($query, $limit = null)
{
$queryBuilder = $this->createQueryBuilder('model');
$queryBuilder->where(
$queryBuilder->expr()->orX(
$queryBuilder->expr()->like('model.number', ':number'),
$queryBuilder->expr()->like('model.name', ':name')
))
->setParameter('name', '%'.$query.'%')
->setParameter('number', $query.'%');
if ($limit) {
$queryBuilder->setMaxResults($limit);
}
return $queryBuilder->getQuery()->getResult();
}
/**
* Create new Model entity with $number or retrieve one.
*
* @param $number
* @param $id
*
* @return Model
*/
public function getOrCreate($number)
public function getOrCreate($id)
{
if (($model = $this->findOneBy(['number' => $number])) == null) {
if (($model = $this->findOneBy(['id' => $id])) == null) {
$model = new Model();
$model->setNumber($number);
$model->setId($id);
}
return $model;

View File

@ -6,6 +6,7 @@ use AppBundle\Entity\LDraw\Model;
use AppBundle\Entity\Rebrickable\Inventory;
use AppBundle\Entity\Rebrickable\Inventory_Part;
use AppBundle\Entity\Rebrickable\Part;
use AppBundle\Entity\Rebrickable\Set;
use AppBundle\Repository\BaseRepository;
use Doctrine\ORM\Query\Expr\Join;
@ -60,9 +61,9 @@ class Inventory_PartRepository extends BaseRepository
return $queryBuilder->getQuery()->getResult();
}
public function getPartCount($number, $spare = null, $model = null)
public function getPartCount(Set $set, $spare = null, $model = null)
{
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($set->getId());
$queryBuilder = $this->createQueryBuilder('inventory_part')
->where('inventory_part.inventory = :inventory')

View File

@ -26,10 +26,10 @@ class SetRepository extends BaseRepository
public function findAllByPartNumber($number)
{
$queryBuilder = $this->createQueryBuilder('s')
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.number')
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.id')
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'inventory.id = inventory_part.inventory')
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.number')
->where('part.number LIKE :number')
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.id')
->where('part.id LIKE :number')
->setParameter('number', $number)
->distinct(true);
@ -39,28 +39,45 @@ class SetRepository extends BaseRepository
public function findAllByModel(Model $model)
{
$queryBuilder = $this->createQueryBuilder('s')
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.number')
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory.set = s.id')
->join(Inventory_Part::class, 'inventory_part', JOIN::WITH, 'inventory.id = inventory_part.inventory')
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.number')
->join(Part::class, 'part', Join::WITH, 'inventory_part.part = part.id')
->where('part.model = :model')
->setParameter('model', $model->getNumber())
->setParameter('model', $model->getId())
->distinct(true);
return $queryBuilder->getQuery()->getResult();
}
public function findByQuery($query, $limit = null)
public function getMinPartCount()
{
$queryBuilder = $this->createQueryBuilder('s')
->where('s.name LIKE :name')
->orWhere('s.number LIKE :number')
->setParameter('name', '%'.$query.'%')
->setParameter('number', $query.'%');
->select('MIN(s.partCount)');
if ($limit) {
$queryBuilder->setMaxResults($limit);
}
return $queryBuilder->getQuery()->getSingleScalarResult();
}
return $queryBuilder->getQuery()->getResult();
public function getMaxPartCount()
{
$queryBuilder = $this->createQueryBuilder('s')
->select('MAX(s.partCount)');
return $queryBuilder->getQuery()->getSingleScalarResult();
}
public function getMinYear()
{
$queryBuilder = $this->createQueryBuilder('s')
->select('MIN(s.year)');
return $queryBuilder->getQuery()->getSingleScalarResult();
}
public function getMaxYear()
{
$queryBuilder = $this->createQueryBuilder('s')
->select('MAX(s.year)');
return $queryBuilder->getQuery()->getSingleScalarResult();
}
}

View File

@ -10,11 +10,9 @@ class ThemeRepository extends BaseRepository
{
public function findAllSubthemes(Theme $theme)
{
$subQueryBuilder = $this->createQueryBuilder('subtheme');
$queryBuilder = $this->createQueryBuilder('subtheme')
->leftJoin(Theme::class, 'theme', Join::WITH, 'subtheme.parent = theme.id')
->where('subtheme.parent = :id')
$queryBuilder = $this->createQueryBuilder('theme')
// ->leftJoin(Theme::class, 'theme', Join::WITH, 'subtheme.parent = theme.id')
->where('theme.parent = :id')
->setParameter('id', $theme->getId());
return $queryBuilder->getQuery()->getResult();
@ -23,7 +21,8 @@ class ThemeRepository extends BaseRepository
public function findAllMain()
{
$queryBuilder = $this->createQueryBuilder('theme')
->where('theme.parent IS NULL');
->where('theme.parent IS NULL')
->orderBy('theme.name', 'ASC');
return $queryBuilder->getQuery()->getResult();
}

View File

@ -115,7 +115,7 @@ class RebrickableLoader extends BaseLoader
foreach ($foreignKeys as $foreignKey) {
$part = new Part();
$part->setNumber($foreignKey['part_id']);
$part->setId($foreignKey['part_id']);
$this->em->getRepository(Part::class)->save($part);
}
}

View File

@ -57,7 +57,7 @@ class RelationLoader extends BaseLoader
$this->partRepository->save($part);
}
$this->progressBar->setMessage($part->getNumber());
$this->progressBar->setMessage($part->getId());
$this->progressBar->advance();
}
$this->progressBar->finish();
@ -72,7 +72,7 @@ class RelationLoader extends BaseLoader
*/
private function loadPartRelation(Part $part)
{
$number = $part->getNumber();
$number = $part->getId();
$model = $this->modelRepository->findOneByNumber($number);
if (!$model) {
$number = $this->relationMapper->find($this->getPrintedParentId($number), 'part_model');

View File

@ -24,9 +24,9 @@ class ModelService
$this->resursiveLoadModels($subpart->getSubpart(), $subpart->getCount());
}
} else {
$q = isset($this->models[$model->getNumber()]['quantity']) ? $this->models[$model->getNumber()]['quantity'] : 0;
$q = isset($this->models[$model->getId()]['quantity']) ? $this->models[$model->getId()]['quantity'] : 0;
$this->models[$model->getNumber()] = [
$this->models[$model->getId()] = [
'quantity' => $q + $quantity,
'model' => $model,
];

View File

@ -41,15 +41,15 @@ class SetService
{
$models = [];
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true);
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, true);
/** @var Inventory_Part $inventoryPart */
foreach ($inventoryParts as $inventoryPart) {
if ($model = $inventoryPart->getPart()->getModel()) {
if (isset($models[$model->getNumber()])) {
$models[$model->getNumber()]['quantity'] += $inventoryPart->getQuantity();
if (isset($models[$model->getId()])) {
$models[$model->getId()]['quantity'] += $inventoryPart->getQuantity();
} else {
$models[$model->getNumber()] = [
$models[$model->getId()] = [
'model' => $model,
'quantity' => $inventoryPart->getQuantity(),
];
@ -85,21 +85,21 @@ class SetService
{
$models = [];
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true);
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, true);
/** @var Inventory_Part $inventoryPart */
foreach ($inventoryParts as $inventoryPart) {
if ($model = $inventoryPart->getPart()->getModel()) {
$color = $inventoryPart->getColor();
if (!isset($models[$model->getNumber()]['model'])) {
$models[$model->getNumber()]['model'] = $model;
if (!isset($models[$model->getId()]['model'])) {
$models[$model->getId()]['model'] = $model;
}
if (isset($models[$model->getNumber()]['colors'][$color->getId()])) {
$models[$model->getNumber()]['colors'][$color->getId()]['quantity'] += $inventoryPart->getQuantity();
if (isset($models[$model->getId()]['colors'][$color->getId()])) {
$models[$model->getId()]['colors'][$color->getId()]['quantity'] += $inventoryPart->getQuantity();
} else {
$models[$model->getNumber()]['colors'][$color->getId()] = [
$models[$model->getId()]['colors'][$color->getId()] = [
'color' => $color,
'quantity' => $inventoryPart->getQuantity(),
];
@ -135,7 +135,7 @@ class SetService
{
$colors = [];
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, true);
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, true);
/** @var Inventory_Part $inventoryPart */
foreach ($inventoryParts as $inventoryPart) {
@ -149,10 +149,10 @@ class SetService
$colors[$color->getId()]['quantity'] += $inventoryPart->getQuantity();
if (isset($colors[$color->getId()]['models'][$model->getNumber()])) {
$colors[$color->getId()]['models'][$model->getNumber()]['quantity'] += $inventoryPart->getQuantity();
if (isset($colors[$color->getId()]['models'][$model->getId()])) {
$colors[$color->getId()]['models'][$model->getId()]['quantity'] += $inventoryPart->getQuantity();
} else {
$colors[$color->getId()]['models'][$model->getNumber()] = [
$colors[$color->getId()]['models'][$model->getId()] = [
'model' => $model,
'quantity' => $inventoryPart->getQuantity(),
];
@ -173,14 +173,14 @@ class SetService
{
$parts = [];
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getNumber(), $spare, $model);
$inventoryParts = $this->inventoryPartRepository->findAllBySetNumber($set->getId(), $spare, $model);
/** @var Inventory_Part $inventoryPart */
foreach ($inventoryParts as $inventoryPart) {
if (isset($parts[$inventoryPart->getPart()->getNumber()])) {
$parts[$inventoryPart->getPart()->getNumber()]['quantity'] += $inventoryPart->getQuantity();
if (isset($parts[$inventoryPart->getPart()->getId()])) {
$parts[$inventoryPart->getPart()->getId()]['quantity'] += $inventoryPart->getQuantity();
} else {
$parts[$inventoryPart->getPart()->getNumber()] = [
$parts[$inventoryPart->getPart()->getId()] = [
'part' => $inventoryPart->getPart(),
'quantity' => $inventoryPart->getQuantity(),
];

View File

@ -47,8 +47,8 @@ class ZipService
public function createFromSet(Set $set, $sorted = false)
{
$sort = $sorted ? 'sorted' : 'unsorted';
$this->zipName = "set_{$set->getNumber()}_{$set->getName()}({$sort})";
$sort = $sorted ? 'Multi-Color' : 'Uni-Color';
$this->zipName = "set_{$set->getId()}_{$set->getName()}({$sort})";
$zipPath = tempnam(sys_get_temp_dir(), 'printabrick');
$this->archive = $this->createZip($zipPath);
@ -67,18 +67,18 @@ class ZipService
public function createFromModel(Model $model, $subparts = false)
{
$this->zipName = "model_{$model->getNumber()}";
$this->zipName = "model_{$model->getId()}";
$zipPath = tempnam(sys_get_temp_dir(), 'printabrick');
$this->archive = $this->createZip($zipPath);
$filename = "{$this->zipName}/{$model->getNumber()}.stl";
$filename = "{$this->zipName}/{$model->getId()}.stl";
$this->addModel($filename, $model);
if ($subparts) {
foreach ($this->modelService->getAllSubparts($model) as $subpart) {
$submodel = $subpart['model'];
$filename = "{$this->zipName}/submodels/{$submodel->getNumber()}_({$subpart['quantity']}x).stl";
$filename = "{$this->zipName}/submodels/{$submodel->getId()}_({$subpart['quantity']}x).stl";
$this->addModel($filename, $submodel);
}
@ -107,7 +107,7 @@ class ZipService
$model = $modelArray['model'];
$quantity = $modelArray['quantity'];
$filename = "{$this->zipName}/{$color->getName()}/{$model->getNumber()}_({$quantity}x).stl";
$filename = "{$this->zipName}/{$color->getName()}/{$model->getId()}_({$quantity}x).stl";
$this->addModel($filename, $model);
}
@ -137,7 +137,7 @@ class ZipService
private function addModel($path, $model)
{
$this->archive->addFromString($path, $this->mediaFilesystem->read($model->getPath()));
$this->models[$model->getNumber()] = $model;
$this->models[$model->getId()] = $model;
}
private function addLicense()
@ -149,7 +149,7 @@ class ZipService
$text .= sprintf('Attribution:'."\n"."\n");
foreach ($this->models as $model) {
$text .= sprintf('%s - "%s" by %s'."\n", $model->getNumber(), $model->getName(), $model->getAuthor()->getName());
$text .= sprintf('%s - "%s" by %s'."\n", $model->getId(), $model->getName(), $model->getAuthor()->getName());
}
$this->archive->addFromString("{$this->zipName}/LICENSE.txt", $text);