Fixed "Limit to existing parts" function.

Fixed issue #72.
This commit is contained in:
Jan Böhmer 2020-06-13 22:19:03 +02:00
parent f32ae8bc6c
commit 50cca40f77
9 changed files with 998 additions and 928 deletions

View file

@ -20,6 +20,8 @@
namespace App\Repository\Parts; namespace App\Repository\Parts;
use App\Entity\Parts\Category;
use App\Entity\Parts\Storelocation;
use App\Repository\AbstractPartsContainingRepository; use App\Repository\AbstractPartsContainingRepository;
class CategoryRepository extends AbstractPartsContainingRepository class CategoryRepository extends AbstractPartsContainingRepository
@ -27,11 +29,19 @@ class CategoryRepository extends AbstractPartsContainingRepository
public function getParts(object $element, array $order_by = ['name' => 'ASC']): array public function getParts(object $element, array $order_by = ['name' => 'ASC']): array
{ {
if (!$element instanceof Category) {
throw new \InvalidArgumentException('$element must be an Category!');
}
return $this->getPartsByField($element, $order_by, 'category'); return $this->getPartsByField($element, $order_by, 'category');
} }
public function getPartsCount(object $element): int public function getPartsCount(object $element): int
{ {
if (!$element instanceof Category) {
throw new \InvalidArgumentException('$element must be an Category!');
}
return $this->getPartsCountByField($element, 'category'); return $this->getPartsCountByField($element, 'category');
} }
} }

View file

@ -20,17 +20,27 @@
namespace App\Repository\Parts; namespace App\Repository\Parts;
use App\Entity\Parts\Footprint;
use App\Entity\Parts\Storelocation;
use App\Repository\AbstractPartsContainingRepository; use App\Repository\AbstractPartsContainingRepository;
class FootprintRepository extends AbstractPartsContainingRepository class FootprintRepository extends AbstractPartsContainingRepository
{ {
public function getParts(object $element, array $order_by = ['name' => 'ASC']): array public function getParts(object $element, array $order_by = ['name' => 'ASC']): array
{ {
if(!$element instanceof Footprint) {
throw new \InvalidArgumentException('$element must be an Footprint!');
}
return $this->getPartsByField($element, $order_by, 'footprint'); return $this->getPartsByField($element, $order_by, 'footprint');
} }
public function getPartsCount(object $element): int public function getPartsCount(object $element): int
{ {
if(!$element instanceof Footprint) {
throw new \InvalidArgumentException('$element must be an Footprint!');
}
return $this->getPartsCountByField($element, 'footprint'); return $this->getPartsCountByField($element, 'footprint');
} }
} }

View file

@ -20,6 +20,8 @@
namespace App\Repository\Parts; namespace App\Repository\Parts;
use App\Entity\Parts\Category;
use App\Entity\Parts\Manufacturer;
use App\Repository\AbstractPartsContainingRepository; use App\Repository\AbstractPartsContainingRepository;
class ManufacturerRepository extends AbstractPartsContainingRepository class ManufacturerRepository extends AbstractPartsContainingRepository
@ -27,11 +29,19 @@ class ManufacturerRepository extends AbstractPartsContainingRepository
public function getParts(object $element, array $order_by = ['name' => 'ASC']): array public function getParts(object $element, array $order_by = ['name' => 'ASC']): array
{ {
if (!$element instanceof Manufacturer) {
throw new \InvalidArgumentException('$element must be an Manufacturer!');
}
return $this->getPartsByField($element, $order_by, 'manufacturer'); return $this->getPartsByField($element, $order_by, 'manufacturer');
} }
public function getPartsCount(object $element): int public function getPartsCount(object $element): int
{ {
if (!$element instanceof Manufacturer) {
throw new \InvalidArgumentException('$element must be an Manufacturer!');
}
return $this->getPartsCountByField($element, 'manufacturer'); return $this->getPartsCountByField($element, 'manufacturer');
} }
} }

View file

@ -20,6 +20,8 @@
namespace App\Repository\Parts; namespace App\Repository\Parts;
use App\Entity\Parts\Manufacturer;
use App\Entity\Parts\MeasurementUnit;
use App\Repository\AbstractPartsContainingRepository; use App\Repository\AbstractPartsContainingRepository;
class MeasurementUnitRepository extends AbstractPartsContainingRepository class MeasurementUnitRepository extends AbstractPartsContainingRepository
@ -27,11 +29,19 @@ class MeasurementUnitRepository extends AbstractPartsContainingRepository
public function getParts(object $element, array $order_by = ['name' => 'ASC']): array public function getParts(object $element, array $order_by = ['name' => 'ASC']): array
{ {
if (!$element instanceof MeasurementUnit) {
throw new \InvalidArgumentException('$element must be an MeasurementUnit!');
}
return $this->getPartsByField($element, $order_by, 'partUnit'); return $this->getPartsByField($element, $order_by, 'partUnit');
} }
public function getPartsCount(object $element): int public function getPartsCount(object $element): int
{ {
if (!$element instanceof MeasurementUnit) {
throw new \InvalidArgumentException('$element must be an MeasurementUnit!');
}
return $this->getPartsCountByField($element, 'partUnit'); return $this->getPartsCountByField($element, 'partUnit');
} }
} }

View file

@ -21,13 +21,23 @@
namespace App\Repository\Parts; namespace App\Repository\Parts;
use App\Entity\Parts\Part; use App\Entity\Parts\Part;
use App\Entity\Parts\PartLot;
use App\Entity\Parts\Storelocation;
use App\Repository\AbstractPartsContainingRepository; use App\Repository\AbstractPartsContainingRepository;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\HttpKernel\HttpCache\Store;
class StorelocationRepository extends AbstractPartsContainingRepository class StorelocationRepository extends AbstractPartsContainingRepository
{ {
/**
* @param Storelocation $element
*/
public function getParts(object $element, array $order_by = ['name' => 'ASC']): array public function getParts(object $element, array $order_by = ['name' => 'ASC']): array
{ {
if(!$element instanceof Storelocation) {
throw new \InvalidArgumentException('$element must be an Storelocation!');
}
$qb = new QueryBuilder($this->getEntityManager()); $qb = new QueryBuilder($this->getEntityManager());
$qb->select('part') $qb->select('part')
@ -45,6 +55,10 @@ class StorelocationRepository extends AbstractPartsContainingRepository
public function getPartsCount(object $element): int public function getPartsCount(object $element): int
{ {
if(!$element instanceof Storelocation) {
throw new \InvalidArgumentException('$element must be an Storelocation!');
}
$qb = new QueryBuilder($this->getEntityManager()); $qb = new QueryBuilder($this->getEntityManager());
$qb->select('COUNT(part.id)') $qb->select('COUNT(part.id)')

View file

@ -21,6 +21,8 @@
namespace App\Repository\Parts; namespace App\Repository\Parts;
use App\Entity\Parts\Part; use App\Entity\Parts\Part;
use App\Entity\Parts\Storelocation;
use App\Entity\Parts\Supplier;
use App\Repository\AbstractPartsContainingRepository; use App\Repository\AbstractPartsContainingRepository;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
@ -28,6 +30,10 @@ class SupplierRepository extends AbstractPartsContainingRepository
{ {
public function getParts(object $element, array $order_by = ['name' => 'ASC']): array public function getParts(object $element, array $order_by = ['name' => 'ASC']): array
{ {
if(!$element instanceof Supplier) {
throw new \InvalidArgumentException('$element must be an Supplier!');
}
$qb = new QueryBuilder($this->getEntityManager()); $qb = new QueryBuilder($this->getEntityManager());
$qb->select('part') $qb->select('part')
@ -45,6 +51,10 @@ class SupplierRepository extends AbstractPartsContainingRepository
public function getPartsCount(object $element): int public function getPartsCount(object $element): int
{ {
if(!$element instanceof Supplier) {
throw new \InvalidArgumentException('$element must be an Supplier!');
}
$qb = new QueryBuilder($this->getEntityManager()); $qb = new QueryBuilder($this->getEntityManager());
$qb->select('COUNT(part.id)') $qb->select('COUNT(part.id)')

View file

@ -80,7 +80,7 @@ class ValidPartLotValidator extends ConstraintValidator
$repo = $this->em->getRepository(Storelocation::class); $repo = $this->em->getRepository(Storelocation::class);
//We can only determine associated parts, if the part have an ID //We can only determine associated parts, if the part have an ID
if ($value->getID() !== null) { if ($value->getID() !== null) {
$parts = new ArrayCollection($repo->getParts($value)); $parts = new ArrayCollection($repo->getParts($value->getStorageLocation()));
} else { } else {
$parts = new ArrayCollection([]); $parts = new ArrayCollection([]);
} }
@ -112,7 +112,7 @@ class ValidPartLotValidator extends ConstraintValidator
} }
//Check for only single part //Check for only single part
if ($value->getStorageLocation()->isLimitToExistingParts()) { if ($value->getStorageLocation()->isOnlySinglePart()) {
if (($parts->count() > 0) && ! $parts->contains($value->getPart())) { if (($parts->count() > 0) && ! $parts->contains($value->getPart())) {
$this->context->buildViolation('validator.part_lot.single_part') $this->context->buildViolation('validator.part_lot.single_part')
->atPath('storage_location')->addViolation(); ->atPath('storage_location')->addViolation();

File diff suppressed because it is too large Load diff

View file

@ -191,5 +191,11 @@
<target>Please select a valid category!</target> <target>Please select a valid category!</target>
</segment> </segment>
</unit> </unit>
<unit id="6vIlN5q" name="validator.part_lot.only_existing">
<segment>
<source>validator.part_lot.only_existing</source>
<target>Can not add new parts to this location as it is marked as "Only Existing"</target>
</segment>
</unit>
</file> </file>
</xliff> </xliff>