209 lines
6.8 KiB
PHP
209 lines
6.8 KiB
PHP
<?php
|
|
|
|
$main_class = 'OrdersOfSuppliers';
|
|
|
|
class OrdersOfSuppliers extends Window
|
|
{
|
|
protected $tableName = 'orders_of_suppliers';
|
|
|
|
public function __construct()
|
|
{
|
|
if (getVal('print')) {
|
|
$this->setTemplate('window/ordersOfSuppliersPrint.tpl');
|
|
}
|
|
}
|
|
|
|
public function get_vars()
|
|
{
|
|
$vars = parent::get_vars();
|
|
$acn = $this->getAction();
|
|
|
|
if ($acn == 'add') {
|
|
$vars['suppliers'] = sqlFetchAll($this->selectSQL('suppliers', []), 'id');
|
|
}
|
|
|
|
return $vars;
|
|
}
|
|
|
|
public function handleUpdate()
|
|
{
|
|
$data = $this->getData();
|
|
$items = getVal('items', $data, []);
|
|
|
|
if (!$this->getID()) {
|
|
$this->setID($data['id_supplier']);
|
|
}
|
|
|
|
$items = array_reverse($items, true);
|
|
|
|
foreach ($items as $id => $item) {
|
|
$item['id'] = intval($id);
|
|
|
|
if (!empty($item['delete']) || !$id) {
|
|
if ($id > 0) {
|
|
$this->handleDeleteValue($item);
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if (empty($item['id_product'])) {
|
|
continue;
|
|
}
|
|
|
|
if ($id < 0) {
|
|
$this->handleAddValue($item);
|
|
} else {
|
|
$this->handleUpdateValue($item);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function handleDeleteValue($item)
|
|
{
|
|
$this->deleteSQL('orders_of_suppliers', ['id' => $item['id']]);
|
|
}
|
|
|
|
public function handleUpdateValue($item)
|
|
{
|
|
$this->updateSQL('orders_of_suppliers', ['pieces' => $item['pieces']], ['id' => $item['id']]);
|
|
}
|
|
|
|
public function handleAddValue($item)
|
|
{
|
|
$ID = $this->getID();
|
|
|
|
$this->prepareNull($item['id_variation']);
|
|
|
|
$where = ['id_supplier' => $ID,
|
|
'id_product' => $item['id_product'],
|
|
'id_variation' => $item['id_variation'], ];
|
|
|
|
$data = [
|
|
'pieces' => $item['pieces'],
|
|
'date_create' => date('Y-m-d H:i:s'),
|
|
];
|
|
|
|
$items = sqlFetch($this->selectSQL('orders_of_suppliers', $where, ['id', 'pieces']));
|
|
if (!empty($items['id'])) {
|
|
$data['pieces'] += $items['pieces'];
|
|
$this->updateSQL('orders_of_suppliers', ['pieces' => $data['pieces']], ['id' => $items['id']]);
|
|
} else {
|
|
$this->insertSQL('orders_of_suppliers', array_merge($data, $where));
|
|
}
|
|
}
|
|
|
|
public function handleDelete()
|
|
{
|
|
require_once 'stockIn.php';
|
|
|
|
$ID = $this->getID();
|
|
|
|
$this->insertSQL('stock_in', [
|
|
'id_index' => 'future',
|
|
'date_created' => date('Y-m-d H:i:s'),
|
|
'id_supplier' => $ID,
|
|
'date_expiration' => '',
|
|
'date_issued' => '',
|
|
]);
|
|
$IDStockIn = sqlInsertId();
|
|
|
|
$stockIn = new StockIn();
|
|
$stockIn->setID($IDStockIn);
|
|
|
|
$priceBuyQuery = $this->getBuyPriceQuery();
|
|
|
|
$SQL = sqlQuery("SELECT oos.*, {$priceBuyQuery} AS price, oos.pieces AS quantity
|
|
FROM orders_of_suppliers oos
|
|
LEFT JOIN products AS p ON p.id=oos.id_product
|
|
LEFT JOIN products_variations AS pv ON pv.id=oos.id_variation
|
|
WHERE id_supplier=:id_supplier
|
|
ORDER BY p.title DESC, pv.title DESC", ['id_supplier' => $ID]);
|
|
foreach ($SQL as $item) {
|
|
$item['name'] = Product::getName($item['id_product']);
|
|
$stockIn->handleAddValue($item);
|
|
}
|
|
|
|
$this->deleteSQL('orders_of_suppliers', ['id_supplier' => $ID]);
|
|
|
|
writeDownActivity(sprintf(translate('activityDeleted'), $ID));
|
|
|
|
$this->redirect(['s' => 'stockIn.php', 'ID' => $IDStockIn]);
|
|
}
|
|
|
|
public function handleClear()
|
|
{
|
|
$ID = $this->getID();
|
|
|
|
$this->deleteSQL('orders_of_suppliers', ['id_supplier' => $ID]);
|
|
redirect("launch.php?s=ordersOfSuppliers.php&acn=edit&ID={$ID}");
|
|
}
|
|
|
|
public function getObject()
|
|
{
|
|
$ID = $this->getID();
|
|
$supplier = sqlFetchAssoc(sqlQuery('SELECT * FROM '.getTableName('suppliers').' WHERE id=:ID', ['ID' => $ID]));
|
|
|
|
$priceBuyQuery = $this->getBuyPriceQuery();
|
|
|
|
$SQL2 = sqlQuery('SELECT oos.id, COALESCE(pos.code, pv.code, p.code) AS code, COALESCE(pos.ean, pv.ean, p.ean) AS ean,
|
|
p.title AS name, p.id AS id_product, COALESCE(pv.price, p.price) AS price, oos.pieces, pv.title AS variation,
|
|
pv.id AS id_variation, '.$priceBuyQuery.' AS price_buy
|
|
FROM orders_of_suppliers AS oos
|
|
LEFT JOIN products_of_suppliers AS pos ON pos.id_supplier=:ID AND pos.id_product=oos.id_product AND (pos.id_variation=oos.id_variation OR (pos.id_variation IS NULL AND oos.id_variation IS NULL))
|
|
LEFT JOIN products AS p ON p.id=oos.id_product
|
|
LEFT JOIN products_variations AS pv ON pv.id=oos.id_variation
|
|
WHERE oos.id_supplier=:ID
|
|
ORDER BY p.title, pv.title', ['ID' => $ID]);
|
|
$items = [];
|
|
$price = 0;
|
|
foreach ($SQL2 as $row) {
|
|
$price += $row['pieces_price'] = ($row['price_buy'] > 0 ? $row['price_buy'] : $row['price']) * $row['pieces'];
|
|
$items[$row['id']] = $row;
|
|
}
|
|
|
|
return ['id' => $ID,
|
|
'items' => $items,
|
|
'supplier' => $supplier,
|
|
'price' => $price,
|
|
];
|
|
}
|
|
|
|
protected function getBuyPriceQuery()
|
|
{
|
|
$sqlPrice = [];
|
|
|
|
if (findModule(\Modules::PRODUCTS_SUPPLIERS)) {
|
|
$sqlPrice[] = 'SELECT pos.price_buy
|
|
FROM products_of_suppliers pos
|
|
WHERE pos.id_supplier=oos.id_supplier
|
|
AND oos.id_product=pos.id_product
|
|
AND ((oos.id_variation IS NULL AND pos.id_variation IS NULL) OR oos.id_variation=pos.id_variation)
|
|
AND pos.price_buy > 0';
|
|
}
|
|
|
|
if (findModule(\Modules::PRODUCTS, \Modules::SUB_PRICE_BUY)) {
|
|
$sqlPrice[] = 'SELECT COALESCE(pv.price_buy, p.price_buy)
|
|
FROM products p
|
|
LEFT JOIN products_variations pv ON p.id = pv.id_product
|
|
WHERE oos.id_product=p.id
|
|
AND ((oos.id_variation IS NULL AND pv.id IS NULL) OR oos.id_variation=pv.id)
|
|
AND COALESCE(pv.price_buy, p.price_buy) > 0
|
|
LIMIT 1';
|
|
}
|
|
|
|
$sqlPrice[] = 'SELECT sii.price
|
|
FROM stock_in_items sii
|
|
LEFT JOIN stock_in si ON si.id = sii.id_stock_in
|
|
WHERE si.id_supplier=oos.id_supplier AND si.id_index="invoice"
|
|
AND oos.id_product=sii.id_product
|
|
AND ((oos.id_variation IS NULL AND sii.id_variation IS NULL) OR oos.id_variation=sii.id_variation)
|
|
AND sii.price > 0
|
|
ORDER BY si.date_issued DESC
|
|
LIMIT 1';
|
|
|
|
return 'COALESCE(('.join('),(', $sqlPrice).'))';
|
|
}
|
|
}
|