Files
kupshop/bundles/KupShop/WarehouseBundle/Inspection/EANDuplicateInspection.php
2025-08-02 16:30:27 +02:00

55 lines
1.7 KiB
PHP

<?php
namespace KupShop\WarehouseBundle\Inspection;
use KupShop\SystemInspectionBundle\Inspections\Inspection;
use KupShop\SystemInspectionBundle\Inspections\User\UserInspectionInterface;
use KupShop\SystemInspectionBundle\InspectionWriters\MessageTypes\SimpleMessage;
class EANDuplicateInspection extends Inspection implements UserInspectionInterface
{
private function fetchDuplicateEANs(): array
{
$products = sqlQueryBuilder()->select('p.ean')
->from('products', 'p')
->where('p.ean IS NOT NULL')
->groupBy('p.ean')
->having('COUNT(p.id) > 1')
->execute()->fetchFirstColumn();
$productsVariations = sqlQueryBuilder()->select('p.ean')
->from('products_variations', 'p')
->where('p.ean IS NOT NULL')
->groupBy('p.ean')
->having('COUNT(p.id) > 1')
->execute()->fetchFirstColumn();
$across = sqlQueryBuilder()
->select('p.ean')->distinct()
->from('products', 'p')
->join('p', 'products_variations', 'pv', 'p.ean = pv.ean')
->where('pv.ean IS NOT NULL')
->andWhere('p.ean IS NOT NULL')
->execute()->fetchFirstColumn();
return array_merge($products, $productsVariations, $across);
}
public function runInspection(): ?array
{
$errors = [];
$duplicates = $this->fetchDuplicateEANs();
if (count($duplicates) > 0) {
$errors[] = new SimpleMessage(
sprintf(
translate('duplicateProductEAN', 'warehouse_inspections', false, true),
implode(', ', $duplicates)
)
);
}
return $errors;
}
}