Files
kupshop/admin/lists/InventoryMissingList.php
2025-08-02 16:30:27 +02:00

91 lines
3.9 KiB
PHP

<?php
use KupShop\AdminBundle\AdminList\BaseList;
class InventoryMissingList extends BaseList
{
protected $pageDivide = 500;
protected $tableDef = [
'id' => 's.id',
'fields' => [
'Název produktu' => ['field' => 'title'],
'EAN|Kód|Pozice' => ['field' => 'notes'],
'Na webu' => ['field' => 'in_store_web', 'size' => 0.5],
'Celkem inventura' => ['field' => 'in_store_inventory', 'size' => 0.5],
'Rozdíl' => ['field' => 'diff', 'size' => 0.5],
'Rozdíl cena' => ['field' => 'price_diff', 'size' => 0.5],
],
];
public function getQuery()
{
$qb = sqlQueryBuilder();
$noteField = '""';
if (findModule(Modules::PRODUCTS, Modules::SUB_NOTE)) {
$noteField = 'COALESCE(pv.note, p.note, "")';
}
$codeField = 'COALESCE(p.code, "")';
if (findModule(Modules::PRODUCTS_VARIATIONS, Modules::SUB_CODE)) {
$codeField = 'COALESCE(pv.code, p.code, "")';
}
$qb->select('id', 'title', 'notes', 'in_store_web', 'in_store_inventory', '(in_store_web-in_store_inventory) as diff', '((in_store_web-in_store_inventory)*price) as price_diff')
->from('
(SELECT CONCAT_WS(":", p.id, pv.id) id, CONCAT_WS(" ", p.title, pv.title) title,
(COALESCE(pv.in_store, p.in_store)+(
SELECT COALESCE(SUM(pieces), 0)
FROM `order_items` oi
LEFT JOIN `orders` o ON oi.id_order = o.id
WHERE o.status IN ('.join(',', getStatuses('notpacked')).') AND ((oi.id_variation = pv.id) OR (pv.id IS NULL AND oi.id_product = p.id))
)) as in_store_web,
(
SELECT COALESCE(SUM(ii.quantity),0)
FROM `inventory_items` ii
WHERE ((ii.id_variation = pv.id) OR (pv.id IS NULL AND ii.id_product = p.id))
) as in_store_inventory, COALESCE(p.price, pv.price) price, CONCAT_WS(" | ", COALESCE(pv.ean, p.ean, ""), '.$codeField.', '.$noteField.') as notes
FROM products p
LEFT JOIN products_variations pv ON p.id=pv.id_product
HAVING in_store_web<>in_store_inventory) t
');
extract($_GET, EXTR_SKIP | EXTR_REFS);
// ###########
if (!empty($IDs)) {
$qb->andWhere('(s.id=:id OR s.name=:name)')
->setParameters([
'id' => $IDs,
'name' => $IDs,
]);
}
// ###########
if (!empty($IDp)) {
global $dbcfg;
$qb->leftJoin('s', 'inventory_items', 'si', 'si.id_inventory=s.id')
->leftJoin('si', 'products', 'p', 'si.id_product=p.id')
->leftJoin('p', 'vats', 'v', 'si.id_product=p.id');
if (!empty($IDv)) {
$qb->andWhere(\Query\Operator::equals(['si.id_variation' => $IDv]));
}
$column = ['Cena produktu' => ['field' => 'si.price', 'size' => 1.5, 'class' => 'right'],
'Cena produktu DPH' => ['field' => 'si.price', 'size' => 1.8, 'class' => 'right'], ];
$this->tableDef = array_merge(array_slice($this->tableDef, 0, 3), $column, array_slice($this->tableDef, 3));
$fields = $qb->getQueryPart('select');
$fields = str_replace('ss.name, ', "ss.name, CONCAT(ROUND(si.price), ' {$dbcfg['currency']}'), CONCAT(ROUND(si.price*(1+v.vat/100)), ' {$dbcfg['currency']}'), ", $fields);
$qb->select($fields);
$qb->andWhere('si.id_product=:id_product')->setParameter('id_product', $IDp)->groupBy('s.id');
}
// ###########
if (!empty($name)) {
$qb->andWhere('s.name=:name')->setParameter('name', $name);
}
return $qb;
}
}