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)
|
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.= " FROM ".MAIN_DB_PREFIX."product as p";
|
||||||
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as s on p.rowid = s.fk_product";
|
$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.= ' 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->produit->lire)) $sql.=' AND p.fk_product_type != 0';
|
||||||
if (empty($user->rights->service->lire)) $sql.=' AND p.fk_product_type != 1';
|
if (empty($user->rights->service->lire)) $sql.=' AND p.fk_product_type != 1';
|
||||||
$sql.= " HAVING s.reel < p.seuil_stock_alerte";
|
$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.= $db->order('s.reel', 'DESC');
|
$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);
|
$sql.= $db->plimit($max, 0);
|
||||||
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
if ($result)
|
if ($result)
|
||||||
{
|
{
|
||||||
|
$langs->load("stocks");
|
||||||
$num = $db->num_rows($result);
|
$num = $db->num_rows($result);
|
||||||
$i = 0;
|
$i = 0;
|
||||||
while ($i < $num)
|
while ($i < $num)
|
||||||
@ -128,7 +131,8 @@ class box_produits_alerte_stock extends ModeleBoxes
|
|||||||
'text' => $price_base_type);
|
'text' => $price_base_type);
|
||||||
|
|
||||||
$this->info_box_contents[$i][4] = array('td' => 'align="center"',
|
$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"',
|
$this->info_box_contents[$i][5] = array('td' => 'align="right" width="18"',
|
||||||
'text' => $productstatic->LibStatut($objp->tosell,3,0));
|
'text' => $productstatic->LibStatut($objp->tosell,3,0));
|
||||||
@ -138,7 +142,7 @@ class box_produits_alerte_stock extends ModeleBoxes
|
|||||||
|
|
||||||
$i++;
|
$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
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -893,9 +893,34 @@ class FormOther
|
|||||||
$selectboxlist=$form->selectarray('boxcombo', $arrayboxtoactivatelabel,'',1);
|
$selectboxlist=$form->selectarray('boxcombo', $arrayboxtoactivatelabel,'',1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Javascript code for dynamic actions
|
||||||
if (! empty($conf->use_javascript_ajax))
|
if (! empty($conf->use_javascript_ajax))
|
||||||
{
|
{
|
||||||
print '<script type="text/javascript" language="javascript">
|
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(document).ready(function() {
|
||||||
jQuery("#boxcombo").change(function() {
|
jQuery("#boxcombo").change(function() {
|
||||||
var boxid=jQuery("#boxcombo").val();
|
var boxid=jQuery("#boxcombo").val();
|
||||||
@ -910,10 +935,31 @@ class FormOther
|
|||||||
window.location.search=\'mainmenu='.GETPOST("mainmenu").'&leftmenu='.GETPOST('leftmenu').'&action=addbox&boxid=\'+boxid;
|
window.location.search=\'mainmenu='.GETPOST("mainmenu").'&leftmenu='.GETPOST('leftmenu').'&action=addbox&boxid=\'+boxid;
|
||||||
}
|
}
|
||||||
});';
|
});';
|
||||||
if (! count($arrayboxtoactivatelabel)) print 'jQuery("#boxcombo").hide();';
|
if (! count($arrayboxtoactivatelabel)) print 'jQuery("#boxcombo").hide();';
|
||||||
print '
|
print '
|
||||||
});
|
|
||||||
</script>';
|
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);
|
$nbboxactivated=count($boxidactivatedforuser);
|
||||||
@ -996,59 +1042,6 @@ class FormOther
|
|||||||
|
|
||||||
print "</td></tr>";
|
print "</td></tr>";
|
||||||
print "</table>";
|
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);
|
return count($boxactivated);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
-- 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>
|
-- Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
--
|
--
|
||||||
-- This program is free software; you can redistribute it and/or modify
|
-- 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_label (label);
|
||||||
ALTER TABLE llx_product ADD INDEX idx_product_barcode (barcode);
|
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_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