diff --git a/htdocs/core/boxes/box_produits.php b/htdocs/core/boxes/box_produits.php old mode 100644 new mode 100755 index d3772ff65f1..2a9b9e984a4 --- a/htdocs/core/boxes/box_produits.php +++ b/htdocs/core/boxes/box_produits.php @@ -63,7 +63,7 @@ class box_produits 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"; + $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.fk_price_expression"; $sql.= " FROM ".MAIN_DB_PREFIX."product as p"; $sql.= ' WHERE p.entity IN ('.getEntity($productstatic->element, 1).')'; if (empty($user->rights->produit->lire)) $sql.=' AND p.fk_product_type != 0'; @@ -106,17 +106,37 @@ class box_produits extends ModeleBoxes $this->info_box_contents[$i][1] = array('td' => 'align="left"', 'text' => $objp->label, 'url' => DOL_URL_ROOT."/product/card.php?id=".$objp->rowid); - - if ($objp->price_base_type == 'HT') - { - $price=price($objp->price); - $price_base_type=$langs->trans("HT"); - } - else - { - $price=price($objp->price_ttc); - $price_base_type=$langs->trans("TTC"); - } + if (empty($objp->fk_price_expression)) { + if ($objp->price_base_type == 'HT') + { + $price=price($objp->price); + $price_base_type=$langs->trans("HT"); + } + else + { + $price=price($objp->price_ttc); + $price_base_type=$langs->trans("TTC"); + } + } + else //Parse the dinamic price + { + $product = new Product($this->db); + $product->fetch($objp->rowid, '', '', 1); + $priceparser = new PriceParser($this->db); + $price_result = $priceparser->parseProduct($product); + if ($price_result >= 0) { + if ($objp->price_base_type == 'HT') + { + $price_base_type=$langs->trans("HT"); + } + else + { + $price_result = $price_result * (1 + ($product->tva_tx / 100)); + $price_base_type=$langs->trans("TTC"); + } + $price=price($price_result); + } + } $this->info_box_contents[$i][2] = array('td' => 'align="right"', 'text' => $price); diff --git a/htdocs/core/boxes/box_produits_alerte_stock.php b/htdocs/core/boxes/box_produits_alerte_stock.php old mode 100644 new mode 100755 index 1079f623492..91e2372e5c8 --- a/htdocs/core/boxes/box_produits_alerte_stock.php +++ b/htdocs/core/boxes/box_produits_alerte_stock.php @@ -114,16 +114,37 @@ class box_produits_alerte_stock extends ModeleBoxes 'text' => $objp->label, 'url' => DOL_URL_ROOT."/product/card.php?id=".$objp->rowid); - if ($objp->price_base_type == 'HT') - { - $price=price($objp->price); - $price_base_type=$langs->trans("HT"); - } - else - { - $price=price($objp->price_ttc); - $price_base_type=$langs->trans("TTC"); - } + if (empty($objp->fk_price_expression)) { + if ($objp->price_base_type == 'HT') + { + $price=price($objp->price); + $price_base_type=$langs->trans("HT"); + } + else + { + $price=price($objp->price_ttc); + $price_base_type=$langs->trans("TTC"); + } + } + else //Parse the dinamic price + { + $product = new Product($this->db); + $product->fetch($objp->rowid, '', '', 1); + $priceparser = new PriceParser($this->db); + $price_result = $priceparser->parseProduct($product); + if ($price_result >= 0) { + if ($objp->price_base_type == 'HT') + { + $price_base_type=$langs->trans("HT"); + } + else + { + $price_result = $price_result * (1 + ($product->tva_tx / 100)); + $price_base_type=$langs->trans("TTC"); + } + $price=price($price_result); + } + } $this->info_box_contents[$i][2] = array('td' => 'align="right"', 'text' => $price); diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 97039adea57..51a893832b1 100755 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -1466,7 +1466,7 @@ class Form $outarray=array(); $sql = "SELECT "; - $sql.= " p.rowid, p.label, p.ref, p.description, p.fk_product_type, p.price, p.price_ttc, p.price_base_type, p.tva_tx, p.duration, p.stock"; + $sql.= " p.rowid, p.label, p.ref, p.description, p.fk_product_type, p.price, p.price_ttc, p.price_base_type, p.tva_tx, p.duration, p.stock, p.fk_price_expression"; //Price by customer if (! empty($conf->global->PRODUIT_CUSTOMER_PRICES) && !empty($socid)) { @@ -1545,6 +1545,8 @@ class Form $result=$this->db->query($sql); if ($result) { + require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php'; + require_once DOL_DOCUMENT_ROOT.'/product/class/priceparser.class.php'; $num = $this->db->num_rows($result); $out.=''.$form->textwithpicto($langs->trans("PriceExpressionEditor"),$langs->trans("PriceExpressionEditorHelp"),1).''; +$help_text = $langs->trans("PriceExpressionEditorHelp1").'

'.$langs->trans("PriceExpressionEditorHelp2").'

'.$langs->trans("PriceExpressionEditorHelp3").'

'.$langs->trans("PriceExpressionEditorHelp4"); +print ''.$form->textwithpicto($langs->trans("PriceExpressionEditor"),$help_text,1).''; require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php'; $doleditor=new DolEditor('expression',isset($price_expression->expression)?$price_expression->expression:'','',300,'','',false,false,false,4,80); $doleditor->Create(); @@ -202,7 +209,7 @@ print ''; print ''; -// This code reloads the page depending of selected option, goes back in history when back is pressed +// This code reloads the page depending of selected option, goes to page selected by tab when back is pressed print ''; + } // Price - print ''; + $product = new Product($db); + $product->fetch($id, $ref, '', 1); //Ignore the math expression when getting the price + print ''; $text = $langs->trans('SellingPrice'); print $form->textwithpicto($text, $langs->trans("PrecisionUnitIsLimitedToXDecimals", $conf->global->MAIN_MAX_DECIMALS_UNIT), 1, 1); print ''; if ($object->price_base_type == 'TTC') { - print ''; + print ''; } else { - print ''; + print ''; } print ''; @@ -745,7 +810,7 @@ if ($action == 'edit_price' && ($user->rights->produit->creer || $user->rights-> // Liste des evolutions du prix $sql = "SELECT p.rowid, p.price, p.price_ttc, p.price_base_type, p.tva_tx, p.recuperableonly,"; $sql .= " p.price_level, p.price_min, p.price_min_ttc,p.price_by_qty,"; -$sql .= " p.date_price as dp, u.rowid as user_id, u.login"; +$sql .= " p.date_price as dp, p.fk_price_expression, u.rowid as user_id, u.login"; $sql .= " FROM " . MAIN_DB_PREFIX . "product_price as p,"; $sql .= " " . MAIN_DB_PREFIX . "user as u"; $sql .= " WHERE fk_product = " . $object->id; @@ -790,6 +855,9 @@ if ($result) { print '' . $langs->trans("VAT") . ''; print '' . $langs->trans("HT") . ''; print '' . $langs->trans("TTC") . ''; + if (! empty($conf->dynamicprices->enabled)) { + print '' . $langs->trans("PriceExpressionSelected") . ''; + } print '' . $langs->trans("MinPrice") . ' ' . $langs->trans("HT") . ''; print '' . $langs->trans("MinPrice") . ' ' . $langs->trans("TTC") . ''; print '' . $langs->trans("ChangedBy") . ''; @@ -819,8 +887,25 @@ if ($result) { print '' . $langs->trans($objp->price_base_type) . ""; print '' . vatrate($objp->tva_tx, true, $objp->recuperableonly) . ""; - print '' . price($objp->price) . ""; - print '' . price($objp->price_ttc) . ""; + + //Price + if (! empty($objp->fk_price_expression) && ! empty($conf->dynamicprices->enabled)) + { + $price_expression = new PriceExpression($db); + $res = $price_expression->fetch($objp->fk_price_expression); + $title = $price_expression->title; + print ''; + print ''; + print '' . $title . ""; + } + else + { + print '' . price($objp->price) . ""; + print '' . price($objp->price_ttc) . ""; + if (! empty($conf->dynamicprices->enabled)) { //Only if module is enabled + print ''; + } + } print '' . price($objp->price_min) . ''; print '' . price($objp->price_min_ttc) . '';