mirror of
https://github.com/ToxicCrack/PrintABrick.git
synced 2025-05-28 01:30:11 -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, [
|
||||
'choices' => $this->rebrickableManager->FindAllThemes(),
|
||||
'choice_label' => function ($allChoices, $currentChoiceKey) {
|
||||
|
||||
dump($currentChoiceKey);
|
||||
|
||||
$parent = $allChoices->getParent();
|
||||
|
||||
return $parent ? $parent->getName().' > '.$allChoices->getName() : $allChoices->getName();
|
||||
'choice_label' => function ($theme, $currentChoiceKey) {
|
||||
if($parent = $theme->getParent()) {
|
||||
if($parentParent = $parent->getParent()) {
|
||||
if($parentParentParent = $parentParent->getParent()) {
|
||||
return $parentParentParent->getName().' > '.$parentParent->getName().' > '.$parent->getName().' > '.$theme->getName();
|
||||
}
|
||||
return $parentParent->getName().' > '.$parent->getName().' > '.$theme->getName();
|
||||
} else {
|
||||
return $parent->getName().' > '.$theme->getName();
|
||||
}
|
||||
} else {
|
||||
return $theme->getName();
|
||||
}
|
||||
},
|
||||
'label' => 'filter.set.theme',
|
||||
]);
|
||||
|
@ -2,8 +2,10 @@
|
||||
|
||||
namespace AppBundle\Repository\Rebrickable;
|
||||
|
||||
use AppBundle\Entity\LDraw\Category;
|
||||
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;
|
||||
@ -12,13 +14,14 @@ class Inventory_PartRepository extends BaseRepository
|
||||
{
|
||||
public function findAllRegularBySetNumber($number)
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('inventory_part');
|
||||
|
||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||
|
||||
$queryBuilder
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory')
|
||||
->setParameter('inventory', $inventory->getId())
|
||||
$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.spare = FALSE')
|
||||
->distinct(true);
|
||||
|
||||
@ -27,13 +30,14 @@ class Inventory_PartRepository extends BaseRepository
|
||||
|
||||
public function findAllSpareBySetNumber($number)
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('inventory_part');
|
||||
|
||||
$inventory = $this->getEntityManager()->getRepository(Inventory::class)->findNewestInventoryBySetNumber($number);
|
||||
|
||||
$queryBuilder
|
||||
->join(Inventory::class, 'inventory', JOIN::WITH, 'inventory_part.inventory = :inventory')
|
||||
->setParameter('inventory', $inventory->getId())
|
||||
$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.spare = TRUE')
|
||||
->distinct(true);
|
||||
|
||||
|
@ -8,11 +8,24 @@ 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\Theme;
|
||||
use AppBundle\Repository\BaseRepository;
|
||||
use Doctrine\ORM\Query\Expr\Join;
|
||||
|
||||
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)
|
||||
{
|
||||
$queryBuilder = $this->createQueryBuilder('s')
|
||||
|
@ -2,7 +2,11 @@
|
||||
|
||||
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 Doctrine\ORM\Query\Expr\Join;
|
||||
|
||||
//TODO Refactor + validate csv files
|
||||
class RebrickableLoaderService extends BaseLoaderService
|
||||
@ -24,18 +28,22 @@ class RebrickableLoaderService extends BaseLoaderService
|
||||
try {
|
||||
$connection->beginTransaction();
|
||||
$connection->prepare('SET foreign_key_checks = 0;')->execute();
|
||||
|
||||
$this->truncateTables();
|
||||
$connection->prepare('SET foreign_key_checks = 1;')->execute();
|
||||
|
||||
$this->loadColorTable();
|
||||
$this->loadPartTable();
|
||||
$this->loadCategoryTable();
|
||||
$this->loadPartTable();
|
||||
$this->loadThemeTable();
|
||||
$this->loadSetTable();
|
||||
$this->loadInventoryTable();
|
||||
$this->loadInventoryPartTable();
|
||||
$this->loadInventorySetTable();
|
||||
|
||||
$connection->prepare('SET foreign_key_checks = 0;')->execute();
|
||||
$this->loadInventoryPartTable();
|
||||
$connection->prepare('SET foreign_key_checks = 1;')->execute();
|
||||
$this->addMissingParts();
|
||||
|
||||
$connection->commit();
|
||||
} catch (\Exception $e) {
|
||||
$connection->rollBack();
|
||||
@ -49,11 +57,11 @@ class RebrickableLoaderService extends BaseLoaderService
|
||||
TRUNCATE TABLE rebrickable_inventory_parts;
|
||||
TRUNCATE TABLE rebrickable_inventory_sets;
|
||||
TRUNCATE TABLE rebrickable_color;
|
||||
TRUNCATE TABLE rebrickable_category;
|
||||
TRUNCATE TABLE rebrickable_inventory;
|
||||
TRUNCATE TABLE rebrickable_set;
|
||||
TRUNCATE TABLE rebrickable_theme;
|
||||
TRUNCATE TABLE rebrickable_part;
|
||||
TRUNCATE TABLE rebrickable_category;
|
||||
';
|
||||
|
||||
return $this->em->getConnection()->prepare($query)->execute();
|
||||
@ -70,6 +78,22 @@ class RebrickableLoaderService extends BaseLoaderService
|
||||
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()
|
||||
{
|
||||
$file = $this->downloadFile($this->rebrickable_url.'inventories.csv');
|
||||
|
Loading…
x
Reference in New Issue
Block a user