mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-31 19:20:13 -07:00
Create missing parts referenced by FK
This commit is contained in:
parent
254add244d
commit
438497f5ca
@ -24,13 +24,19 @@ class ThemeFilterType extends AbstractType
|
|||||||
{
|
{
|
||||||
$builder->add('id', Filters\ChoiceFilterType::class, [
|
$builder->add('id', Filters\ChoiceFilterType::class, [
|
||||||
'choices' => $this->rebrickableManager->FindAllThemes(),
|
'choices' => $this->rebrickableManager->FindAllThemes(),
|
||||||
'choice_label' => function ($allChoices, $currentChoiceKey) {
|
'choice_label' => function ($theme, $currentChoiceKey) {
|
||||||
|
if($parent = $theme->getParent()) {
|
||||||
dump($currentChoiceKey);
|
if($parentParent = $parent->getParent()) {
|
||||||
|
if($parentParentParent = $parentParent->getParent()) {
|
||||||
$parent = $allChoices->getParent();
|
return $parentParentParent->getName().' > '.$parentParent->getName().' > '.$parent->getName().' > '.$theme->getName();
|
||||||
|
}
|
||||||
return $parent ? $parent->getName().' > '.$allChoices->getName() : $allChoices->getName();
|
return $parentParent->getName().' > '.$parent->getName().' > '.$theme->getName();
|
||||||
|
} else {
|
||||||
|
return $parent->getName().' > '.$theme->getName();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return $theme->getName();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
'label' => 'filter.set.theme',
|
'label' => 'filter.set.theme',
|
||||||
]);
|
]);
|
||||||
|
@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
namespace AppBundle\Repository\Rebrickable;
|
namespace AppBundle\Repository\Rebrickable;
|
||||||
|
|
||||||
|
use AppBundle\Entity\LDraw\Category;
|
||||||
use AppBundle\Entity\Rebrickable\Inventory;
|
use AppBundle\Entity\Rebrickable\Inventory;
|
||||||
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
||||||
|
use AppBundle\Entity\Rebrickable\Part;
|
||||||
use AppBundle\Entity\Rebrickable\Set;
|
use AppBundle\Entity\Rebrickable\Set;
|
||||||
use AppBundle\Repository\BaseRepository;
|
use AppBundle\Repository\BaseRepository;
|
||||||
use Doctrine\ORM\Query\Expr\Join;
|
use Doctrine\ORM\Query\Expr\Join;
|
||||||
@ -12,13 +14,14 @@ class Inventory_PartRepository extends BaseRepository
|
|||||||
{
|
{
|
||||||
public function findAllRegularBySetNumber($number)
|
public function findAllRegularBySetNumber($number)
|
||||||
{
|
{
|
||||||
$queryBuilder = $this->createQueryBuilder('inventory_part');
|
|
||||||
|
|
||||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||||
|
|
||||||
$queryBuilder
|
$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')
|
||||||
->setParameter('inventory', $inventory->getId())
|
->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.spare = FALSE')
|
->andWhere('inventory_part.spare = FALSE')
|
||||||
->distinct(true);
|
->distinct(true);
|
||||||
|
|
||||||
@ -27,13 +30,14 @@ class Inventory_PartRepository extends BaseRepository
|
|||||||
|
|
||||||
public function findAllSpareBySetNumber($number)
|
public function findAllSpareBySetNumber($number)
|
||||||
{
|
{
|
||||||
$queryBuilder = $this->createQueryBuilder('inventory_part');
|
|
||||||
|
|
||||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||||
|
|
||||||
$queryBuilder
|
$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')
|
||||||
->setParameter('inventory', $inventory->getId())
|
->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.spare = TRUE')
|
->andWhere('inventory_part.spare = TRUE')
|
||||||
->distinct(true);
|
->distinct(true);
|
||||||
|
|
||||||
|
@ -8,11 +8,24 @@ use AppBundle\Entity\Rebrickable\Inventory_Part;
|
|||||||
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
||||||
use AppBundle\Entity\Rebrickable\Part;
|
use AppBundle\Entity\Rebrickable\Part;
|
||||||
use AppBundle\Entity\Rebrickable\Set;
|
use AppBundle\Entity\Rebrickable\Set;
|
||||||
|
use AppBundle\Entity\Rebrickable\Theme;
|
||||||
use AppBundle\Repository\BaseRepository;
|
use AppBundle\Repository\BaseRepository;
|
||||||
use Doctrine\ORM\Query\Expr\Join;
|
use Doctrine\ORM\Query\Expr\Join;
|
||||||
|
|
||||||
class SetRepository extends BaseRepository
|
class SetRepository extends BaseRepository
|
||||||
{
|
{
|
||||||
|
public function findAllByTheme(Theme $theme) {
|
||||||
|
|
||||||
|
dump($this->getEntityManager()->getRepository(Theme::class)->findAllSubthemes($theme));
|
||||||
|
|
||||||
|
$queryBuilder = $this->createQueryBuilder('s')
|
||||||
|
->join(Theme::class, 'theme',Join::WITH, 's.theme = theme')
|
||||||
|
->where('theme.id = :id')
|
||||||
|
->setParameter('id', $theme->getId());
|
||||||
|
|
||||||
|
return $queryBuilder->getQuery()->getResult();
|
||||||
|
}
|
||||||
|
|
||||||
public function findAllByPartNumber($number)
|
public function findAllByPartNumber($number)
|
||||||
{
|
{
|
||||||
$queryBuilder = $this->createQueryBuilder('s')
|
$queryBuilder = $this->createQueryBuilder('s')
|
||||||
|
@ -2,7 +2,11 @@
|
|||||||
|
|
||||||
namespace AppBundle\Service\Loader;
|
namespace AppBundle\Service\Loader;
|
||||||
|
|
||||||
|
use AppBundle\Entity\Rebrickable\Inventory_Part;
|
||||||
|
use AppBundle\Entity\Rebrickable\Inventory_Set;
|
||||||
|
use AppBundle\Entity\Rebrickable\Part;
|
||||||
use AppBundle\Entity\Rebrickable\Set;
|
use AppBundle\Entity\Rebrickable\Set;
|
||||||
|
use Doctrine\ORM\Query\Expr\Join;
|
||||||
|
|
||||||
//TODO Refactor + validate csv files
|
//TODO Refactor + validate csv files
|
||||||
class RebrickableLoaderService extends BaseLoaderService
|
class RebrickableLoaderService extends BaseLoaderService
|
||||||
@ -24,18 +28,22 @@ class RebrickableLoaderService extends BaseLoaderService
|
|||||||
try {
|
try {
|
||||||
$connection->beginTransaction();
|
$connection->beginTransaction();
|
||||||
$connection->prepare('SET foreign_key_checks = 0;')->execute();
|
$connection->prepare('SET foreign_key_checks = 0;')->execute();
|
||||||
|
|
||||||
$this->truncateTables();
|
$this->truncateTables();
|
||||||
|
$connection->prepare('SET foreign_key_checks = 1;')->execute();
|
||||||
|
|
||||||
$this->loadColorTable();
|
$this->loadColorTable();
|
||||||
$this->loadPartTable();
|
|
||||||
$this->loadCategoryTable();
|
$this->loadCategoryTable();
|
||||||
|
$this->loadPartTable();
|
||||||
$this->loadThemeTable();
|
$this->loadThemeTable();
|
||||||
$this->loadSetTable();
|
$this->loadSetTable();
|
||||||
$this->loadInventoryTable();
|
$this->loadInventoryTable();
|
||||||
$this->loadInventoryPartTable();
|
|
||||||
$this->loadInventorySetTable();
|
$this->loadInventorySetTable();
|
||||||
|
|
||||||
|
$connection->prepare('SET foreign_key_checks = 0;')->execute();
|
||||||
|
$this->loadInventoryPartTable();
|
||||||
$connection->prepare('SET foreign_key_checks = 1;')->execute();
|
$connection->prepare('SET foreign_key_checks = 1;')->execute();
|
||||||
|
$this->addMissingParts();
|
||||||
|
|
||||||
$connection->commit();
|
$connection->commit();
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$connection->rollBack();
|
$connection->rollBack();
|
||||||
@ -49,11 +57,11 @@ class RebrickableLoaderService extends BaseLoaderService
|
|||||||
TRUNCATE TABLE rebrickable_inventory_parts;
|
TRUNCATE TABLE rebrickable_inventory_parts;
|
||||||
TRUNCATE TABLE rebrickable_inventory_sets;
|
TRUNCATE TABLE rebrickable_inventory_sets;
|
||||||
TRUNCATE TABLE rebrickable_color;
|
TRUNCATE TABLE rebrickable_color;
|
||||||
|
TRUNCATE TABLE rebrickable_category;
|
||||||
TRUNCATE TABLE rebrickable_inventory;
|
TRUNCATE TABLE rebrickable_inventory;
|
||||||
TRUNCATE TABLE rebrickable_set;
|
TRUNCATE TABLE rebrickable_set;
|
||||||
TRUNCATE TABLE rebrickable_theme;
|
TRUNCATE TABLE rebrickable_theme;
|
||||||
TRUNCATE TABLE rebrickable_part;
|
TRUNCATE TABLE rebrickable_part;
|
||||||
TRUNCATE TABLE rebrickable_category;
|
|
||||||
';
|
';
|
||||||
|
|
||||||
return $this->em->getConnection()->prepare($query)->execute();
|
return $this->em->getConnection()->prepare($query)->execute();
|
||||||
@ -70,6 +78,22 @@ class RebrickableLoaderService extends BaseLoaderService
|
|||||||
return $this->em->getConnection()->prepare($query)->execute();
|
return $this->em->getConnection()->prepare($query)->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function addMissingParts() {
|
||||||
|
$connection = $this->em->getConnection();
|
||||||
|
$statement = $connection->prepare(
|
||||||
|
'SELECT DISTINCT rebrickable_inventory_parts.part_id FROM rebrickable_inventory_parts
|
||||||
|
LEFT JOIN rebrickable_part ON rebrickable_inventory_parts.part_id = rebrickable_part.id
|
||||||
|
WHERE rebrickable_part.id IS NULL');
|
||||||
|
$statement->execute();
|
||||||
|
$foreignKeys = $statement->fetchAll();
|
||||||
|
|
||||||
|
foreach ($foreignKeys as $foreignKey) {
|
||||||
|
$part = new Part();
|
||||||
|
$part->setNumber($foreignKey['part_id']);
|
||||||
|
$this->em->getRepository(Part::class)->save($part);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private function loadInventoryTable()
|
private function loadInventoryTable()
|
||||||
{
|
{
|
||||||
$file = $this->downloadFile($this->rebrickable_url.'inventories.csv');
|
$file = $this->downloadFile($this->rebrickable_url.'inventories.csv');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user