Fix: Box with product out of stocks for pgsql
This commit is contained in:
parent
ea4b78b326
commit
570e4391a5
@ -64,20 +64,23 @@ class box_produits_alerte_stock extends ModeleBoxes
|
||||
|
||||
if ($user->rights->produit->lire || $user->rights->service->lire)
|
||||
{
|
||||
$sql = "SELECT p.rowid, p.label, p.price, p.price_base_type, p.price_ttc, p.fk_product_type, p.tms, p.tosell, p.tobuy, p.seuil_stock_alerte, s.reel";
|
||||
$sql = "SELECT p.rowid, p.label, p.price, p.price_base_type, p.price_ttc, p.fk_product_type, p.tms, p.tosell, p.tobuy, p.seuil_stock_alerte,";
|
||||
$sql.= " SUM(".$db->ifsql("s.reel IS NULL","0","s.reel").") as total_stock";
|
||||
$sql.= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as s on p.rowid = s.fk_product";
|
||||
$sql.= ' WHERE p.entity IN ('.getEntity($productstatic->element, 1).')';
|
||||
$sql.= " AND p.tosell = 1";
|
||||
$sql.= " AND p.tosell = 1 AND p.seuil_stock_alerte > 0";
|
||||
if (empty($user->rights->produit->lire)) $sql.=' AND p.fk_product_type != 0';
|
||||
if (empty($user->rights->service->lire)) $sql.=' AND p.fk_product_type != 1';
|
||||
$sql.= " HAVING s.reel < p.seuil_stock_alerte";
|
||||
$sql.= $db->order('s.reel', 'DESC');
|
||||
$sql.= " GROUP BY p.rowid, p.label, p.price, p.price_base_type, p.price_ttc, p.fk_product_type, p.tms, p.tosell, p.tobuy, p.seuil_stock_alerte";
|
||||
$sql.= " HAVING SUM(".$db->ifsql("s.reel IS NULL","0","s.reel").") < p.seuil_stock_alerte";
|
||||
$sql.= $db->order('p.seuil_stock_alerte', 'DESC');
|
||||
$sql.= $db->plimit($max, 0);
|
||||
|
||||
$result = $db->query($sql);
|
||||
if ($result)
|
||||
{
|
||||
$langs->load("stocks");
|
||||
$num = $db->num_rows($result);
|
||||
$i = 0;
|
||||
while ($i < $num)
|
||||
@ -128,7 +131,8 @@ class box_produits_alerte_stock extends ModeleBoxes
|
||||
'text' => $price_base_type);
|
||||
|
||||
$this->info_box_contents[$i][4] = array('td' => 'align="center"',
|
||||
'text' => $objp->reel . ' / '.$objp->seuil_stock_alerte);
|
||||
'text' => $objp->total_stock . ' / '.$objp->seuil_stock_alerte,
|
||||
'text2'=>img_warning($langs->transnoentitiesnoconv("StockLowerThanLimit")));
|
||||
|
||||
$this->info_box_contents[$i][5] = array('td' => 'align="right" width="18"',
|
||||
'text' => $productstatic->LibStatut($objp->tosell,3,0));
|
||||
@ -138,7 +142,7 @@ class box_produits_alerte_stock extends ModeleBoxes
|
||||
|
||||
$i++;
|
||||
}
|
||||
if ($num==0) $this->info_box_contents[$i][0] = array('td' => 'align="center"','text'=>$langs->trans("NoRecordedProducts"));
|
||||
if ($num==0) $this->info_box_contents[$i][0] = array('td' => 'align="center"','text'=>$langs->trans("NoTooLowStockProducts"));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -893,9 +893,34 @@ class FormOther
|
||||
$selectboxlist=$form->selectarray('boxcombo', $arrayboxtoactivatelabel,'',1);
|
||||
}
|
||||
|
||||
// Javascript code for dynamic actions
|
||||
if (! empty($conf->use_javascript_ajax))
|
||||
{
|
||||
print '<script type="text/javascript" language="javascript">
|
||||
|
||||
// To update list of activated boxes
|
||||
function updateBoxOrder(closing) {
|
||||
var left_list = cleanSerialize(jQuery("#left").sortable("serialize"));
|
||||
var right_list = cleanSerialize(jQuery("#right").sortable("serialize"));
|
||||
var boxorder = \'A:\' + left_list + \'-B:\' + right_list;
|
||||
if (boxorder==\'A:A-B:B\' && closing == 1) // There is no more boxes on screen, and we are after a delete of a box so we must hide title
|
||||
{
|
||||
jQuery.ajax({
|
||||
url: \''.DOL_URL_ROOT.'/core/ajax/box.php?boxorder=\'+boxorder+\'&zone='.$areacode.'&userid=\'+'.$user->id.',
|
||||
async: false
|
||||
});
|
||||
// We force reload to be sure to get all boxes into list
|
||||
window.location.search=\'mainmenu='.GETPOST("mainmenu").'&leftmenu='.GETPOST('leftmenu').'&action=delbox\';
|
||||
}
|
||||
else
|
||||
{
|
||||
jQuery.ajax({
|
||||
url: \''.DOL_URL_ROOT.'/core/ajax/box.php?boxorder=\'+boxorder+\'&zone='.$areacode.'&userid=\'+'.$user->id.',
|
||||
async: true
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
jQuery(document).ready(function() {
|
||||
jQuery("#boxcombo").change(function() {
|
||||
var boxid=jQuery("#boxcombo").val();
|
||||
@ -910,10 +935,31 @@ class FormOther
|
||||
window.location.search=\'mainmenu='.GETPOST("mainmenu").'&leftmenu='.GETPOST('leftmenu').'&action=addbox&boxid=\'+boxid;
|
||||
}
|
||||
});';
|
||||
if (! count($arrayboxtoactivatelabel)) print 'jQuery("#boxcombo").hide();';
|
||||
print '
|
||||
});
|
||||
</script>';
|
||||
if (! count($arrayboxtoactivatelabel)) print 'jQuery("#boxcombo").hide();';
|
||||
print '
|
||||
|
||||
jQuery("#left, #right").sortable({
|
||||
/* placeholder: \'ui-state-highlight\', */
|
||||
handle: \'.boxhandle\',
|
||||
revert: \'invalid\',
|
||||
items: \'.box\',
|
||||
containment: \'.fiche\',
|
||||
connectWith: \'.connectedSortable\',
|
||||
stop: function(event, ui) {
|
||||
updateBoxOrder(0);
|
||||
}
|
||||
});
|
||||
|
||||
jQuery(".boxclose").click(function() {
|
||||
var self = this; // because JQuery can modify this
|
||||
var boxid=self.id.substring(8);
|
||||
jQuery(\'#boxto_\'+boxid).remove();
|
||||
updateBoxOrder(1);
|
||||
});
|
||||
|
||||
});'."\n";
|
||||
|
||||
print '</script>'."\n";
|
||||
}
|
||||
|
||||
$nbboxactivated=count($boxidactivatedforuser);
|
||||
@ -996,59 +1042,6 @@ class FormOther
|
||||
|
||||
print "</td></tr>";
|
||||
print "</table>";
|
||||
|
||||
if ($conf->use_javascript_ajax)
|
||||
{
|
||||
print "\n";
|
||||
print '<script type="text/javascript" language="javascript">';
|
||||
// For moving
|
||||
print 'jQuery(function() {
|
||||
jQuery("#left, #right").sortable({
|
||||
/* placeholder: \'ui-state-highlight\', */
|
||||
handle: \'.boxhandle\',
|
||||
revert: \'invalid\',
|
||||
items: \'.box\',
|
||||
containment: \'.fiche\',
|
||||
connectWith: \'.connectedSortable\',
|
||||
stop: function(event, ui) {
|
||||
updateBoxOrder(0);
|
||||
}
|
||||
});
|
||||
});
|
||||
'."\n";
|
||||
// To update list of activated boxes
|
||||
print 'function updateBoxOrder(closing) {
|
||||
var left_list = cleanSerialize(jQuery("#left").sortable("serialize"));
|
||||
var right_list = cleanSerialize(jQuery("#right").sortable("serialize"));
|
||||
var boxorder = \'A:\' + left_list + \'-B:\' + right_list;
|
||||
if (boxorder==\'A:A-B:B\' && closing == 1) // There is no more boxes on screen, and we are after a delete of a box so we must hide title
|
||||
{
|
||||
jQuery.ajax({
|
||||
url: \''.DOL_URL_ROOT.'/core/ajax/box.php?boxorder=\'+boxorder+\'&zone='.$areacode.'&userid=\'+'.$user->id.',
|
||||
async: false
|
||||
});
|
||||
// We force reload to be sure to get all boxes into list
|
||||
window.location.search=\'mainmenu='.GETPOST("mainmenu").'&leftmenu='.GETPOST('leftmenu').'&action=delbox\';
|
||||
}
|
||||
else
|
||||
{
|
||||
jQuery.ajax({
|
||||
url: \''.DOL_URL_ROOT.'/core/ajax/box.php?boxorder=\'+boxorder+\'&zone='.$areacode.'&userid=\'+'.$user->id.',
|
||||
async: true
|
||||
});
|
||||
}
|
||||
}'."\n";
|
||||
// For closing
|
||||
print 'jQuery(document).ready(function() {
|
||||
jQuery(".boxclose").click(function() {
|
||||
var self = this; // because JQuery can modify this
|
||||
var boxid=self.id.substring(8);
|
||||
jQuery(\'#boxto_\'+boxid).remove();
|
||||
updateBoxOrder(1);
|
||||
});
|
||||
});'."\n";
|
||||
print '</script>'."\n";
|
||||
}
|
||||
}
|
||||
|
||||
return count($boxactivated);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
-- ============================================================================
|
||||
-- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com>
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or modify
|
||||
@ -24,3 +24,4 @@ ALTER TABLE llx_product ADD UNIQUE INDEX uk_product_ref (ref, entity);
|
||||
ALTER TABLE llx_product ADD INDEX idx_product_label (label);
|
||||
ALTER TABLE llx_product ADD INDEX idx_product_barcode (barcode);
|
||||
ALTER TABLE llx_product ADD INDEX idx_product_import_key (import_key);
|
||||
ALTER TABLE llx_product ADD INDEX idx_product_seuil_stock_alerte (seuil_stock_alerte);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user