sort sale products list by stock_address

This commit is contained in:
Michał Zieliński
2025-11-08 12:54:24 +01:00
parent a39ebfd84c
commit a3bd40889a
2 changed files with 134 additions and 104 deletions

View File

@@ -1,120 +1,150 @@
<?php <?php
if (! defined ( 'sugarEntry' ) || ! sugarEntry) if (!defined('sugarEntry') || !sugarEntry)
die ( 'Not A Valid Entry Point' ); die ('Not A Valid Entry Point');
// require_once('modules/EcmGroupSales/HeaderMenu.php');
global $sugar_version, $sugar_config, $current_user, $app_strings, $mod_strings; global $sugar_version, $sugar_config, $current_user, $app_strings, $mod_strings;
require_once ('modules/EcmInsideOrders/EcmInsideOrder.php'); require_once('modules/EcmInsideOrders/EcmInsideOrder.php');
require_once ('include/time.php'); require_once('include/time.php');
require_once ('include/json_config.php'); require_once('include/json_config.php');
// add jquery // add jquery
echo '<link rel="stylesheet" type="text/css" href="modules/EcmSales/css/style.css"/>'; echo '<link rel="stylesheet" type="text/css" href="modules/EcmSales/css/style.css"/>';
echo '<script type="text/javascript" echo '<script type="text/javascript" src="include/jQuery/jquery-lastes.js"></script>';
src="include/jQuery/jquery-lastes.js"></script>'; echo '<script type="text/javascript" src="include/jQuery/jquery.tablesorter.pager.js"></script>';
echo '<script type="text/javascript" echo '<script type="text/javascript" src="modules/EcmSales/javascript/ProductSummary.js"></script>';
src="include/jQuery/jquery.tablesorter.pager.js"></script>';
echo '<script type="text/javascript"
src="modules/EcmSales/javascript/ProductSummary.js"></script>';
$json_config = new json_config (); $json_config = new json_config ();
$focus = new EcmSale (); $focus = new EcmSale ();
$db = $GLOBALS ['db']; $db = $GLOBALS['db'];
$data = array();
$categoryArray=array();
$id_array= explode(",", $_GET['ids']) ;
//var_dump($id_array);
$where="and doc.id IN ('".implode("','",$id_array)."')";
if($_GET['product_group']=='1')$where.=" and pr.group_ks=1";
if($_GET['product_group']=='2')$where.=" and pr.group_ks=2";
if($_GET['product_group']=='3')$where.=" and pr.group_ks=3";
$query= "SELECT
pr.id,
item.code,
item.name,
ROUND(sum(item.quantity),0) AS quantity,
ROUND(ifnull(x.stock, 0),0) AS stock,
pr.group_ks,
pr.product_category_name,
pr.product_category_id
FROM
ecmsaleitems as item
INNER JOIN
ecmsales as doc ON doc.id=item.ecmsale_id
INNER JOIN
ecmproducts as pr ON pr.id=item.ecmproduct_id
LEFT JOIN
(SELECT sum(quantity) as stock ,product_id
FROM
ecmstockstates
GROUP BY product_id) x ON x.product_id=item.ecmproduct_id
WHERE doc.deleted='0' and doc.status!='s10' " . $where;
$query.=" AND NOT EXISTS
(
SELECT NULL
FROM ecmstockdocouts t1
WHERE t1.ecmsale_id = doc.id
) GROUP by item.ecmproduct_id
ORDER BY pr.group_ks DESC";
$rows = $db->query ($query);
while($r = $db->fetchByAssoc ( $rows )) $positions = array();
{ $total = 0;
$row = array(); $stock = 0;
$row["id"] = $r["id"];
$row["code"] = $r["code"];
$row["name"] = $r["name"];
$row["quantity"] = $r["quantity"];
$row["stock"] = $r["stock"];
$row["product_category_name"]=$r["product_category_name"];
$row["group_ks"] = $r["group_ks"];
if($r["group_ks"]=='1')$daj='TH';
if($r["group_ks"]=='2')$daj='WG';
if($r["group_ks"]=='3')$daj='S';
$row["group_ks_name"] = $daj;
$id_array = isset($_GET['ids']) ? explode(",", $_GET['ids']) : array();
$where = "and doc.id IN ('" . implode("','", $id_array) . "')";
if (isset($_GET['product_group']) && $_GET['product_group'] == '1') $where .= " and pr.group_ks=1";
if (isset($_GET['product_group']) && $_GET['product_group'] == '2') $where .= " and pr.group_ks=2";
if (isset($_GET['product_group']) && $_GET['product_group'] == '3') $where .= " and pr.group_ks=3";
// get stock addresses $query = "SELECT
$result = $db->query("SELECT stock_address, is_not_full FROM ecmproducts_stock_addresses WHERE ecmproduct_id='".$r['id']."';"); pr.id,
$stock_addresses = ""; item.code,
while($addr=$db->fetchByAssoc($result)) { item.name,
if ($addr['is_not_full'] == '1') { ROUND(SUM(item.quantity),0) AS quantity,
$stock_addresses .= " <span style='color: red;'>".$addr['stock_address']."</span>"; ROUND(IFNULL(x.stock, 0),0) AS stock,
} else { pr.group_ks,
$stock_addresses .= " ".$addr['stock_address']; pr.product_category_name,
} pr.product_category_id
} FROM ecmsaleitems AS item
$row['stock_addresses'] = $stock_addresses; INNER JOIN ecmsales AS doc ON doc.id=item.ecmsale_id
INNER JOIN ecmproducts AS pr ON pr.id=item.ecmproduct_id
array_push($row, $r); LEFT JOIN (
$data [] = $row; SELECT SUM(quantity) AS stock, product_id
$total+=$r['quantity']; FROM ecmstockstates
$stock+=$r['stock']; GROUP BY product_id
} ) x ON x.product_id=item.ecmproduct_id
$data['quantity']=$total; WHERE doc.deleted='0' AND doc.status!='s10' " . $where . "
$data['stock']=$stock; AND NOT EXISTS (
SELECT NULL
FROM ecmstockdocouts t1
WHERE t1.ecmsale_id = doc.id
)
GROUP BY item.ecmproduct_id
ORDER BY pr.group_ks DESC";
$rows = $db->query($query);
$edit->ss = new Sugar_Smarty (); while ($r = $db->fetchByAssoc($rows)) {
$edit->module = 'EcmSales'; $row = array();
$row['id'] = $r['id'];
$row['code'] = $r['code'];
$row['name'] = $r['name'];
$row['quantity'] = $r['quantity'];
$row['stock'] = $r['stock'];
$row['product_category_name'] = $r['product_category_name'];
$row['group_ks'] = $r['group_ks'];
$edit->ss->assign ( "CREATED_BY_NAME", $focus->created_by_name ); $daj = '';
$edit->ss->assign ( "MODIFIED_BY_NAME", $focus->modified_by_name ); if ($r['group_ks'] == '1') $daj = 'TH';
$edit->ss->assign ( 'FOCUS', $focus); if ($r['group_ks'] == '2') $daj = 'WG';
$edit->ss->assign ( 'POST', $_POST); if ($r['group_ks'] == '3') $daj = 'S';
$edit->ss->assign ( 'LINK', $link); $row['group_ks_name'] = $daj;
$edit->ss->assign ( 'IDS', $_GET['ids']);
$edit->ss->assign('POSITION_LIST',$data);
$edit->ss->assign ( 'MOD', $mod_strings);
$edit->ss-> display('modules/EcmSales/tpls/ProductSummary.tpl'); //4
$result = $db->query("SELECT stock_address, is_not_full FROM ecmproducts_stock_addresses WHERE ecmproduct_id='" . $r['id'] . "' ORDER BY stock_address");
$addresses_raw = array();
while ($addr = $db->fetchByAssoc($result)) {
$addresses_raw[] = array(
'addr' => trim($addr['stock_address']),
'not_full' => ($addr['is_not_full'] == '1')
);
}
// loading view if (!empty($addresses_raw)) {
//echo '<link rel="stylesheet" type="text/css" href="modules/EcmInsideOrders/javascript/helper.css" media="screen" /><div class="loading_panel"></div>'; usort($addresses_raw, function ($a, $b) {
?> return strcmp($a['addr'], $b['addr']);
});
}
$only_addrs = array();
$has_not_full = 0;
foreach ($addresses_raw as $ar) {
$only_addrs[] = $ar['addr'];
if ($ar['not_full']) $has_not_full = 1;
}
$row['stock_addresses_sort_key'] = implode(' ', $only_addrs);
$row['has_not_full'] = $has_not_full;
$stock_addresses_html = '';
foreach ($addresses_raw as $ar) {
if ($ar['not_full']) {
$stock_addresses_html .= " <span style='color: red;'>" . $ar['addr'] . "</span>";
} else {
$stock_addresses_html .= " " . $ar['addr'];
}
}
$row['stock_addresses'] = $stock_addresses_html;
$positions[] = $row;
$total += (float)$r['quantity'];
$stock += (float)$r['stock'];
}
usort($positions, function ($a, $b) {
$ka = isset($a['stock_addresses_sort_key']) ? $a['stock_addresses_sort_key'] : '';
$kb = isset($b['stock_addresses_sort_key']) ? $b['stock_addresses_sort_key'] : '';
return strcmp($ka, $kb);
});
$data = $positions;
$data['quantity'] = $total;
$data['stock'] = $stock;
if (!isset($_REQUEST['to_pdf'])) {
$edit->ss = new Sugar_Smarty();
$edit->module = 'EcmSales';
$edit->ss->assign("CREATED_BY_NAME", $focus->created_by_name);
$edit->ss->assign("MODIFIED_BY_NAME", $focus->modified_by_name);
$edit->ss->assign('FOCUS', $focus);
$edit->ss->assign('POST', $_POST);
$edit->ss->assign('LINK', isset($link) ? $link : '');
$edit->ss->assign('IDS', isset($_GET['ids']) ? $_GET['ids'] : '');
$edit->ss->assign('POSITION_LIST', $data);
$edit->ss->assign('MOD', $mod_strings);
$edit->ss->display('modules/EcmSales/tpls/ProductSummary.tpl');
} else {
$t = '<table style="border: 1px solid black; border-collapse: collapse;"><tr><td><b>Kod</b></td><td><b>Nazwa</b></td><td><b>Ilość</b></td><td><b>Adres magazynowy</b></td></tr>';
foreach ($data as $r) {
if (isset($r['code'])) {
$t .= '<tr><td style="border: 1px solid black;">' . $r['code'] . '</td><td style="border: 1px solid black;">' . $r['name'] . '</td><td style="border: 1px solid black;">' . $r['quantity'] . '</td><td style="border: 1px solid black;">' . $r['stock_addresses'] . '</td></tr>';
}
}
$t .= '</table>';
echo $t;
}

View File

@@ -48,8 +48,8 @@ function getList() {
} }
function getList2() { function getList2() {
if($('#idss').val()!=""){ if($('#idss').val()!=""){
window.open('index.php?module=EcmSales&action=productsSummaryList&to_pdf=1&ids='+$('#idss').val()); window.open('index.php?module=EcmSales&action=ProductSummary&to_pdf=1&ids='+$('#idss').val());
} else { } else {
alert("Proszę zaznaczyć chociaż jedną pozycje!"); alert("Proszę zaznaczyć chociaż jedną pozycje!");
} }