From f2c1d9d63791cd5b18510628ee7549bc26c6e2f1 Mon Sep 17 00:00:00 2001 From: lainwir3d Date: Tue, 2 Nov 2021 19:28:06 +0400 Subject: [PATCH] Stock availability: show stock availability in web ui product combo list. --- htdocs/core/class/html.form.class.php | 74 ++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 7137d843ba7..3dbf689d562 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -2807,7 +2807,7 @@ class Form $opt .= ' pbq="'.$objp->price_by_qty_rowid.'" data-pbq="'.$objp->price_by_qty_rowid.'" data-pbqup="'.$objp->price_by_qty_unitprice.'" data-pbqbase="'.$objp->price_by_qty_price_base_type.'" data-pbqqty="'.$objp->price_by_qty_quantity.'" data-pbqpercent="'.$objp->price_by_qty_remise_percent.'"'; } if (!empty($conf->stock->enabled) && isset($objp->stock) && ($objp->fk_product_type == Product::TYPE_PRODUCT || !empty($conf->global->STOCK_SUPPORTS_SERVICES))) { - if (!empty($user->rights->stock->lire)) { + if ((!empty($user->rights->stock->lire)) || (!empty($user->rights->stock->availability->read))) { if ($objp->stock > 0) { $opt .= ' class="product_line_stock_ok"'; } elseif ($objp->stock <= 0) { @@ -2973,9 +2973,9 @@ class Form $tmpproduct->load_virtual_stock(); $virtualstock = $tmpproduct->stock_theorique; - $opt .= ' - '.$langs->trans("VirtualStock").':'.$virtualstock; + $opt .= ' - '.$langs->trans("VirtualStock").': '.$virtualstock; - $outval .= ' - '.$langs->transnoentities("VirtualStock").':'; + $outval .= ' - '.$langs->transnoentities("VirtualStock").': '; if ($virtualstock > 0) { $outval .= ''; } elseif ($virtualstock <= 0) { @@ -2984,9 +2984,40 @@ class Form $outval .= $virtualstock; $outval .= ''; + unset($tmpproduct); + } + }else if (!empty($user->rights->stock->availability->read)) { + if ($objp->stock > 0) { + $opt .= ' - '.$langs->trans("Stock").': '.$langs->trans("Available"); + $outval .= ' - '.$langs->transnoentities("Stock").': '.$langs->trans("Available"); + } elseif ($objp->stock <= 0) { + $opt .= ' - '.$langs->trans("Stock").': '.$langs->trans("NotAvailable"); + $outval .= ' - '.$langs->transnoentities("Stock").': '.$langs->trans("NotAvailable"); + } + $outval .= ''; + if (empty($novirtualstock) && !empty($conf->global->STOCK_SHOW_VIRTUAL_STOCK_IN_PRODUCTS_COMBO)) { // Warning, this option may slow down combo list generation + $langs->load("stocks"); + + $tmpproduct = new Product($this->db); + $tmpproduct->fetch($objp->rowid, '', '', '', 1, 1, 1); // Load product without lang and prices arrays (we just need to make ->virtual_stock() after) + $tmpproduct->load_virtual_stock(); + $virtualstock = $tmpproduct->stock_virtual_available ? $langs->trans("Available") : $langs->trans("NotAvailable"); + + $opt .= ' - '.$langs->trans("VirtualStock").': '.$virtualstock; + + $outval .= ' - '.$langs->transnoentities("VirtualStock").': '; + if ($tmpproduct->stock_virtual_available) { + $outval .= ''; + } else { + $outval .= ''; + } + $outval .= $virtualstock; + $outval .= ''; + unset($tmpproduct); } } + } $opt .= "\n"; @@ -3344,7 +3375,7 @@ class Form } elseif ($objp->stock <= 0) { $optlabel .= ' - '; } - $optlabel .= $langs->transnoentities("Stock").':'.price(price2num($objp->stock, 'MS')); + $optlabel .= $langs->transnoentities("Stock").': '.price(price2num($objp->stock, 'MS')); $optlabel .= ''; if (empty($novirtualstock) && !empty($conf->global->STOCK_SHOW_VIRTUAL_STOCK_IN_PRODUCTS_COMBO)) { // Warning, this option may slow down combo list generation $langs->load("stocks"); @@ -3354,20 +3385,51 @@ class Form $tmpproduct->load_virtual_stock(); $virtualstock = $tmpproduct->stock_theorique; - $outvallabel .= ' - '.$langs->trans("VirtualStock").':'.$virtualstock; + $outvallabel .= ' - '.$langs->trans("VirtualStock").': '.$virtualstock; - $optlabel .= ' - '.$langs->transnoentities("VirtualStock").':'; if ($virtualstock > 0) { $optlabel .= ''; } elseif ($virtualstock <= 0) { $optlabel .= ''; } + $optlabel .= ' - '.$langs->transnoentities("VirtualStock").': '; + $optlabel .= $virtualstock; + $optlabel .= ''; + + unset($tmpproduct); + } + }else if (!empty($user->rights->stock->availability->read)) { + if ($objp->stock > 0) { + $outvallabel .= ' - '.$langs->trans("Stock").': '.$langs->trans("Available"); + $optlabel .= ' - '.$langs->transnoentities("Stock").': '.$langs->trans("Available"); + } elseif ($objp->stock <= 0) { + $outvallabel .= ' - '.$langs->trans("Stock").': '.$langs->trans("NotAvailable"); + $optlabel .= ' - '.$langs->transnoentities("Stock").': '.$langs->trans("NotAvailable"); + } + $optlabel .= ''; + if (empty($novirtualstock) && !empty($conf->global->STOCK_SHOW_VIRTUAL_STOCK_IN_PRODUCTS_COMBO)) { // Warning, this option may slow down combo list generation + $langs->load("stocks"); + + $tmpproduct = new Product($this->db); + $tmpproduct->fetch($objp->rowid, '', '', '', 1, 1, 1); // Load product without lang and prices arrays (we just need to make ->virtual_stock() after) + $tmpproduct->load_virtual_stock(); + $virtualstock = $tmpproduct->stock_virtual_available ? $langs->trans("Available") : $langs->trans("NotAvailable"); + + $outvallabel .= ' - '.$langs->trans("VirtualStock").': '.$virtualstock; + + if ($tmpproduct->stock_virtual_available) { + $optlabel .= ''; + } else { + $optlabel .= ''; + } + $optlabel .= ' - '.$langs->transnoentities("VirtualStock").': '; $optlabel .= $virtualstock; $optlabel .= ''; unset($tmpproduct); } } + } $opt = '