mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-19 05:30:08 -07:00
Add SetService
This commit is contained in:
parent
3ce40e7f23
commit
cefd66ec75
@ -10,3 +10,7 @@ services:
|
|||||||
service.ldview:
|
service.ldview:
|
||||||
class: AppBundle\Service\LDViewService
|
class: AppBundle\Service\LDViewService
|
||||||
arguments: ['%ldview_bin%', '@oneup_flysystem.media_filesystem']
|
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\Part;
|
||||||
use AppBundle\Entity\Rebrickable\Set;
|
use AppBundle\Entity\Rebrickable\Set;
|
||||||
use AppBundle\Form\Filter\Model\ModelFilterType;
|
use AppBundle\Form\Filter\Model\ModelFilterType;
|
||||||
|
use Doctrine\ORM\Query\AST\ConditionalTerm;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
|
||||||
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Part controller.
|
* 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")
|
* @Route("/{number}", name="model_detail")
|
||||||
* @Method("GET")
|
* @Method("GET")
|
||||||
@ -61,6 +63,7 @@ class ModelController extends Controller
|
|||||||
{
|
{
|
||||||
$em = $this->getDoctrine()->getManager();
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
||||||
|
/** @var Model $model */
|
||||||
if ($model = $this->get('repository.ldraw.model')->findOneByNumber($number)) {
|
if ($model = $this->get('repository.ldraw.model')->findOneByNumber($number)) {
|
||||||
try {
|
try {
|
||||||
$rbParts = $model != null ? $em->getRepository(Part::class)->findAllByModel($model) : null;
|
$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');
|
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;
|
namespace AppBundle\Controller\Rebrickable;
|
||||||
|
|
||||||
|
use AppBundle\Entity\LDraw\Model;
|
||||||
use AppBundle\Entity\Color;
|
use AppBundle\Entity\Color;
|
||||||
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
||||||
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
||||||
@ -28,17 +29,45 @@ class SetController extends Controller
|
|||||||
|
|
||||||
$regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
|
$regularParts = $em->getRepository(Inventory_Part::class)->findAllRegularBySetNumber($set->getNumber());
|
||||||
$spareParts = $em->getRepository(Inventory_Part::class)->findAllSpareBySetNumber($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,
|
'regularParts' => $regularParts,
|
||||||
'spareParts' => $spareParts,
|
'spareParts' => $spareParts,
|
||||||
|
'models' => $models,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$json = json_encode($template->getContent());
|
// $json = json_encode($template->getContent());
|
||||||
$response = new Response($json, 200);
|
// $response = new Response($json, 200);
|
||||||
$response->headers->set('Content-Type', 'application/json');
|
// $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);
|
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||||
|
|
||||||
$queryBuilder = $this->createQueryBuilder('inventory_part')
|
$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')
|
->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number')
|
||||||
->where('part.category != 17')
|
->where('part.category != 17')
|
||||||
->andWhere('inventory.id = :inventoryId')
|
->setParameter('inventory', $inventory)
|
||||||
->setParameter('inventoryId', $inventory->getId())
|
|
||||||
->andWhere('inventory_part.spare = FALSE')
|
->andWhere('inventory_part.spare = FALSE')
|
||||||
->distinct(true);
|
->distinct(true);
|
||||||
|
|
||||||
@ -32,14 +31,30 @@ class Inventory_PartRepository extends BaseRepository
|
|||||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||||
|
|
||||||
$queryBuilder = $this->createQueryBuilder('inventory_part')
|
$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')
|
->join(Part::class, 'part', JOIN::WITH, 'inventory_part.part = part.number')
|
||||||
->where('part.category != 17')
|
->where('part.category != 17')
|
||||||
->andWhere('inventory.id = :inventoryId')
|
->setParameter('inventory', $inventory)
|
||||||
->setParameter('inventoryId', $inventory->getId())
|
|
||||||
->andWhere('inventory_part.spare = TRUE')
|
->andWhere('inventory_part.spare = TRUE')
|
||||||
->distinct(true);
|
->distinct(true);
|
||||||
|
|
||||||
return $queryBuilder->getQuery()->getResult();
|
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