mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-18 21:20:09 -07:00
Add SetService
This commit is contained in:
parent
3ce40e7f23
commit
cefd66ec75
@ -10,3 +10,7 @@ services:
|
||||
service.ldview:
|
||||
class: AppBundle\Service\LDViewService
|
||||
arguments: ['%ldview_bin%', '@oneup_flysystem.media_filesystem']
|
||||
|
||||
service.set:
|
||||
class: AppBundle\Service\SetService
|
||||
arguments: ['@repository.rebrickable.inventorypart']
|
@ -6,10 +6,12 @@ use AppBundle\Entity\LDraw\Model;
|
||||
use AppBundle\Entity\Rebrickable\Part;
|
||||
use AppBundle\Entity\Rebrickable\Set;
|
||||
use AppBundle\Form\Filter\Model\ModelFilterType;
|
||||
use Doctrine\ORM\Query\AST\ConditionalTerm;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* Part controller.
|
||||
@ -52,7 +54,7 @@ class ModelController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds and displays a part entity.
|
||||
* Finds and displays a model entity.
|
||||
*
|
||||
* @Route("/{number}", name="model_detail")
|
||||
* @Method("GET")
|
||||
@ -61,6 +63,7 @@ class ModelController extends Controller
|
||||
{
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
|
||||
/** @var Model $model */
|
||||
if ($model = $this->get('repository.ldraw.model')->findOneByNumber($number)) {
|
||||
try {
|
||||
$rbParts = $model != null ? $em->getRepository(Part::class)->findAllByModel($model) : null;
|
||||
@ -81,4 +84,22 @@ class ModelController extends Controller
|
||||
|
||||
return $this->render('error/error.html.twig');
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/download", name="model_download")
|
||||
* @Method("GET")
|
||||
*/
|
||||
public function downloadAction(Model $model)
|
||||
{
|
||||
$zip = $this->get('service.zip')->create($model);
|
||||
|
||||
dump($zip);
|
||||
|
||||
$response = new Response(file_get_contents($zip));
|
||||
$response->headers->set('Content-Type', 'application/zip');
|
||||
$response->headers->set('Content-Disposition', 'attachment;filename="' . basename($zip) . '"');
|
||||
$response->headers->set('Content-length', filesize($zip));
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace AppBundle\Controller\Rebrickable;
|
||||
|
||||
use AppBundle\Entity\LDraw\Model;
|
||||
use AppBundle\Entity\Color;
|
||||
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
||||
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
||||
@ -28,17 +29,45 @@ class SetController extends Controller
|
||||
|
||||
$regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
|
||||
$spareParts = $em->getRepository(Inventory_Part::class)->findAllSpareBySetNumber($set->getNumber());
|
||||
$models = $em->getRepository(Model::class)->findAllBySetNumber($set->getNumber());
|
||||
|
||||
$template = $this->render('rebrickable/set/parts.html.twig', [
|
||||
$template = $this->render('rebrickable/set/inventory.html.twig', [
|
||||
'regularParts' => $regularParts,
|
||||
'spareParts' => $spareParts,
|
||||
'models' => $models,
|
||||
]);
|
||||
|
||||
$json = json_encode($template->getContent());
|
||||
$response = new Response($json, 200);
|
||||
$response->headers->set('Content-Type', 'application/json');
|
||||
// $json = json_encode($template->getContent());
|
||||
// $response = new Response($json, 200);
|
||||
// $response->headers->set('Content-Type', 'application/json');
|
||||
//
|
||||
// return $response;
|
||||
|
||||
return $response;
|
||||
return $template;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Route("/{number}/models", name="rebrickable_set_models")
|
||||
*/
|
||||
public function modelsAction(Set $set)
|
||||
{
|
||||
$models = null;
|
||||
|
||||
try {
|
||||
$this->get('repository.ldraw.model')->findAllBySetNumber($set->getNumber());
|
||||
$models = $this->get('service.set')->getModels($set);
|
||||
$spareModels = $this->get('service.set')->getSpareModels($set);
|
||||
|
||||
// $models = $this->get('repository.ldraw.model')->findAllRegularBySetNumber($set->getNumber());
|
||||
} catch (\Exception $e) {
|
||||
$this->addFlash('error', $e->getMessage());
|
||||
}
|
||||
|
||||
return $this->render('rebrickable/set/models.html.twig', [
|
||||
'set' => $set,
|
||||
'models' => $models,
|
||||
'spareModels' => $spareModels
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -16,11 +16,10 @@ class Inventory_PartRepository extends BaseRepository
|
||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||
|
||||
$queryBuilder = $this->createQueryBuilder('inventory_part')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = inventory')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory')
|
||||
->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number')
|
||||
->where('part.category != 17')
|
||||
->andWhere('inventory.id = :inventoryId')
|
||||
->setParameter('inventoryId', $inventory->getId())
|
||||
->setParameter('inventory', $inventory)
|
||||
->andWhere('inventory_part.spare = FALSE')
|
||||
->distinct(true);
|
||||
|
||||
@ -32,14 +31,30 @@ class Inventory_PartRepository extends BaseRepository
|
||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||
|
||||
$queryBuilder = $this->createQueryBuilder('inventory_part')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = inventory')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory')
|
||||
->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number')
|
||||
->where('part.category != 17')
|
||||
->andWhere('inventory.id = :inventoryId')
|
||||
->setParameter('inventoryId', $inventory->getId())
|
||||
->setParameter('inventory', $inventory)
|
||||
->andWhere('inventory_part.spare = TRUE')
|
||||
->distinct(true);
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
}
|
||||
|
||||
public function findAllBySetNumberAndColor($number, $color)
|
||||
{
|
||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||
|
||||
$queryBuilder = $this->createQueryBuilder('inventory_part')
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = inventory')
|
||||
->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number')
|
||||
->where('part.category != 17')
|
||||
->andWhere('inventory.id = :inventoryId')
|
||||
->setParameter('inventoryId', $inventory->getId())
|
||||
->andWhere('inventory_part.color = :color')
|
||||
->setParameter('color', $color)
|
||||
->distinct(true);
|
||||
|
||||
return $queryBuilder->getQuery()->getResult();
|
||||
}
|
||||
}
|
||||
|
84
src/AppBundle/Service/SetService.php
Normal file
84
src/AppBundle/Service/SetService.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace AppBundle\Service;
|
||||
|
||||
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
||||
use AppBundle\Entity\Rebrickable\Set;
|
||||
use AppBundle\Repository\Rebrickable\Inventory_PartRepository;
|
||||
use AppBundle\Repository\Rebrickable\PartRepository;
|
||||
|
||||
class SetService
|
||||
{
|
||||
/** @var Inventory_PartRepository */
|
||||
private $inventoryPartRepository;
|
||||
|
||||
/**
|
||||
* SetService constructor.
|
||||
* @param Inventory_PartRepository $inventoryPartRepository
|
||||
*/
|
||||
public function __construct(Inventory_PartRepository $inventoryPartRepository)
|
||||
{
|
||||
$this->inventoryPartRepository = $inventoryPartRepository;
|
||||
}
|
||||
|
||||
|
||||
public function getUniqueModelCount(Set $set) {
|
||||
|
||||
}
|
||||
|
||||
public function getModels(Set $set)
|
||||
{
|
||||
$models = [];
|
||||
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllRegularBySetNumber($set->getNumber());
|
||||
|
||||
/** @var Inventory_Part $inventoryPart */
|
||||
foreach ($inventoryParts as $inventoryPart) {
|
||||
$model = $inventoryPart->getPart()->getModel();
|
||||
$color = $inventoryPart->getColor();
|
||||
if($model) {
|
||||
$models[$model->getNumber()]['model'] = $model;
|
||||
|
||||
$quantity = 0;
|
||||
if(isset($models[$model->getNumber()]['colors'][$color->getId()]['quantity'])) {
|
||||
$quantity = $models[$model->getNumber()]['colors'][$color->getId()]['quantity'];
|
||||
}
|
||||
|
||||
$models[$model->getNumber()]['colors'][$color->getId()] = [
|
||||
'color' => $color,
|
||||
'quantity' => $quantity+$inventoryPart->getQuantity()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $models;
|
||||
}
|
||||
|
||||
public function getSpareModels(Set $set)
|
||||
{
|
||||
$models = [];
|
||||
|
||||
$inventoryParts = $this->inventoryPartRepository->findAllSpareBySetNumber($set->getNumber());
|
||||
|
||||
/** @var Inventory_Part $inventoryPart */
|
||||
foreach ($inventoryParts as $inventoryPart) {
|
||||
$model = $inventoryPart->getPart()->getModel();
|
||||
$color = $inventoryPart->getColor();
|
||||
if($model) {
|
||||
$models[$model->getNumber()]['model'] = $model;
|
||||
|
||||
$quantity = 0;
|
||||
if(isset($models[$model->getNumber()]['colors'][$color->getId()]['quantity'])) {
|
||||
$quantity = $models[$model->getNumber()]['colors'][$color->getId()]['quantity'];
|
||||
}
|
||||
|
||||
$models[$model->getNumber()]['colors'][$color->getId()] = [
|
||||
'color' => $color,
|
||||
'quantity' => $quantity+$inventoryPart->getQuantity()
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $models;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user