37require
'../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_expression.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_parser.class.php';
45if (isModEnabled(
'barcode')) {
49$langs->loadLangs(array(
'products',
'suppliers',
'bills',
'margins',
'stocks'));
53$rowid =
GETPOST(
'rowid',
'int');
54$action =
GETPOST(
'action',
'aZ09');
55$cancel =
GETPOST(
'cancel',
'alpha');
56$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'pricesuppliercard';
58$socid =
GETPOST(
'socid',
'int');
62$backtopage =
GETPOST(
'backtopage',
'alpha');
68if (
GETPOST(
'search_fourn_id',
'int')) {
69 $_GET[
'id_fourn'] =
GETPOST(
'search_fourn_id',
'int');
70 $_POST[
'id_fourn'] =
GETPOST(
'search_fourn_id',
'int');
74$fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref :
''));
75$fieldtype = (!empty($ref) ?
'ref' :
'rowid');
77 $socid = $user->socid;
80if (!$user->hasRight(
'fournisseur',
'lire') && (!isModEnabled(
'margin') && !$user->hasRight(
"margin",
"liretous"))) {
84$limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
85$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
86$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
88if (empty($page) || $page == -1) {
91$offset = $limit * $page;
102$hookmanager->initHooks(array(
'pricesuppliercard',
'globalcard'));
106if ($id > 0 || $ref) {
107 $object->fetch($id, $ref);
108 $prod->fetch($id, $ref);
114if ($object->id > 0) {
115 if ($object->type == $object::TYPE_PRODUCT) {
116 restrictedArea($user,
'produit', $object->id,
'product&product',
'',
'');
118 if ($object->type == $object::TYPE_SERVICE) {
119 restrictedArea($user,
'service', $object->id,
'product&product',
'',
'');
122 restrictedArea($user,
'produit|service', $fieldvalue,
'product&product',
'',
'', $fieldtype);
134$parameters = array(
'socid'=>$socid,
'id_prod'=>$id);
135$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
140if (empty($reshook)) {
141 if ($action ==
'setcost_price') {
143 $result = $object->fetch($id);
145 $object->oldcopy =
dol_clone($object, 1);
146 $object->cost_price =
price2num($cost_price);
147 $result = $object->update($object->id, $user);
157 if ($action ==
'setpmp') {
159 $result = $object->fetch($id);
161 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET pmp = ".((float) $object->pmp).
" WHERE rowid = ".((int) $id);
162 $resql = $db->query($sql);
174 if ($action ==
'confirm_remove_pf') {
177 $result = $object->remove_product_fournisseur_price($rowid);
179 $db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields WHERE fk_object = ".((
int) $rowid));
188 if ($action ==
'save_price') {
189 $ref_fourn_price_id =
GETPOSTINT(
'ref_fourn_price_id');
190 $id_fourn =
GETPOST(
"id_fourn");
191 if (empty($id_fourn)) {
192 $id_fourn =
GETPOST(
"search_id_fourn");
194 $ref_fourn =
GETPOST(
"ref_fourn");
195 if (empty($ref_fourn)) {
196 $ref_fourn =
GETPOST(
"search_ref_fourn");
198 $ref_fourn_old =
GETPOST(
"ref_fourn_old");
199 if (empty($ref_fourn_old)) {
200 $ref_fourn_old = $ref_fourn;
205 $npr = preg_match(
'/\*/',
GETPOST(
'tva_tx',
'alpha')) ? 1 : 0;
206 $tva_tx = str_replace(
'*',
'',
GETPOST(
'tva_tx',
'alpha'));
207 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
211 $price_expression =
GETPOST(
'eid',
'int') ?
GETPOST(
'eid',
'int') :
'';
212 $delivery_time_days =
GETPOST(
'delivery_time_days',
'int') ?
GETPOST(
'delivery_time_days',
'int') :
'';
213 $supplier_reputation =
GETPOST(
'supplier_reputation');
214 $supplier_description =
GETPOST(
'supplier_description',
'restricthtml');
215 $barcode =
GETPOST(
'barcode',
'alpha');
216 $fk_barcode_type =
GETPOST(
'fk_barcode_type',
'int');
221 $langs->load(
"errors");
222 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
224 if (!is_numeric($tva_tx)) {
226 $langs->load(
"errors");
227 setEventMessages($langs->trans(
"ErrorFieldMustBeANumeric", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
229 if (empty($quantity)) {
231 $langs->load(
"errors");
232 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Qty")),
null,
'errors');
234 if (empty($ref_fourn)) {
236 $langs->load(
"errors");
237 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefSupplier")),
null,
'errors');
239 if ($id_fourn <= 0) {
241 $langs->load(
"errors");
242 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Supplier")),
null,
'errors');
245 if ($price_expression ===
'') {
247 $langs->load(
"errors");
248 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Price")),
null,
'errors');
253 if (isModEnabled(
"multicurrency")) {
254 if (!
GETPOST(
"multicurrency_code")) {
256 $langs->load(
"errors");
257 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Currency")),
null,
'errors');
261 $langs->load(
"errors");
262 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CurrencyRate")),
null,
'errors');
266 $langs->load(
"errors");
267 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"PriceCurrency")),
null,
'errors');
274 if (empty($ref_fourn_price_id)) {
275 $ret = $object->add_fournisseur($user, $id_fourn, $ref_fourn_old, $quantity);
280 $tmpobject->fetch($object->product_id_already_linked);
281 $productLink = $tmpobject->getNomUrl(1,
'supplier');
283 $texttoshow = $langs->trans(
"ReferenceSupplierIsAlreadyAssociatedWithAProduct",
'{s1}');
284 $texttoshow = str_replace(
'{s1}', $productLink, $texttoshow);
286 } elseif ($ret < 0) {
294 $result = $supplier->fetch($id_fourn);
295 if ($ref_fourn_price_id > 0) {
296 $object->fetch_product_fournisseur_price($ref_fourn_price_id);
298 $extralabels = $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
299 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
303 if (empty($packaging)) {
310 $object->packaging = $packaging;
312 if (isModEnabled(
"multicurrency")) {
315 $multicurrency_code =
GETPOST(
"multicurrency_code",
'alpha');
317 $ret = $object->update_buyprice($quantity, $newprice, $user,
GETPOST(
"price_base_type"), $supplier,
GETPOST(
"oselDispo"), $ref_fourn, $tva_tx,
GETPOST(
"charges"), $remise_percent, 0, $npr, $delivery_time_days, $supplier_reputation, array(),
'', $multicurrency_price,
GETPOST(
"multicurrency_price_base_type"), $multicurrency_tx, $multicurrency_code, $supplier_description, $barcode, $fk_barcode_type, $extrafield_values);
319 $ret = $object->update_buyprice($quantity, $newprice, $user,
GETPOST(
"price_base_type"), $supplier,
GETPOST(
"oselDispo"), $ref_fourn, $tva_tx,
GETPOST(
"charges"), $remise_percent, 0, $npr, $delivery_time_days, $supplier_reputation, array(),
'', 0,
'HT', 1,
'', $supplier_description, $barcode, $fk_barcode_type, $extrafield_values);
325 if (isModEnabled(
'dynamicprices') && $price_expression !==
'') {
327 require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_parser.class.php';
329 $object->fk_supplier_price_expression = $price_expression;
330 $price_result = $priceparser->parseProductSupplier($object);
331 if ($price_result < 0) {
336 if (!$error && isModEnabled(
'dynamicprices')) {
338 $ret = $object->setSupplierPriceExpression($price_expression);
354 $action =
'create_price';
364$form =
new Form($db);
366$title = $langs->trans(
'ProductServiceCard');
368$shortlabel =
dol_trunc($object->label, 16);
370 $title = $langs->trans(
'Product').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
371 $helpurl =
'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte';
374 $title = $langs->trans(
'Service').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
375 $helpurl =
'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Lesitungen';
378llxHeader(
'', $title, $helpurl,
'', 0, 0,
'',
'',
'',
'classforhorizontalscrolloftabs');
380if ($id > 0 || $ref) {
382 if ($action ==
'ask_remove_pf') {
383 $form =
new Form($db);
384 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$id.
'&rowid='.$rowid, $langs->trans(
'DeleteProductBuyPrice'), $langs->trans(
'ConfirmDeleteProductBuyPrice'),
'confirm_remove_pf',
'', 0, 1);
388 if ($action !=
'edit' && $action !=
're-edit') {
390 $titre = $langs->trans(
"CardProduct".$object->type);
395 $linkback =
'<a href="'.DOL_URL_ROOT.
'/product/list.php?restore_lastsearch_values=1&type='.$object->type.
'">'.$langs->trans(
"BackToList").
'</a>';
396 $object->next_prev_filter =
"fk_product_type = ".((int) $object->type);
399 if ($user->socid && !in_array(
'product', explode(
',',
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL')))) {
405 print
'<div class="fichecenter">';
407 print
'<div class="underbanner clearboth"></div>';
408 print
'<table class="border tableforfield centpercent">';
411 if (isModEnabled(
"product") && isModEnabled(
"service")) {
412 $typeformat =
'select;0:'.$langs->trans(
"Product").
',1:'.$langs->trans(
"Service");
413 print
'<tr><td class="">';
414 print (!
getDolGlobalString(
'PRODUCT_DENY_CHANGE_PRODUCT_TYPE')) ? $form->editfieldkey(
"Type",
'fk_product_type', $object->type, $object, 0, $typeformat) : $langs->trans(
'Type');
416 print $form->editfieldval(
"Type",
'fk_product_type', $object->type, $object, 0, $typeformat);
422 $textdesc = $langs->trans(
"CostPriceDescription");
423 $textdesc .=
"<br>".$langs->trans(
"CostPriceUsage");
424 $text = $form->textwithpicto($langs->trans(
"CostPrice"), $textdesc, 1,
'help',
'');
425 print $form->editfieldkey($text,
'cost_price', $object->cost_price, $object, $usercancreate,
'amount:6');
427 print $form->editfieldval($text,
'cost_price', $object->cost_price, $object, $usercancreate,
'amount:6');
433 $usercaneditpmp = $usercancreate;
435 print
'<tr><td class="titlefieldcreate">';
436 $textdesc = $langs->trans(
"AverageUnitPricePMPDesc");
437 $text = $form->textwithpicto($langs->trans(
"AverageUnitPricePMPShort"), $textdesc, 1,
'help',
'');
438 print $form->editfieldkey($text,
'pmp', $object->pmp, $object, $usercaneditpmp,
'amount:6');
440 print $form->editfieldval($text,
'pmp', ($object->pmp > 0 ? $object->pmp :
''), $object, $usercaneditpmp,
'amount:6');
441 if ($object->pmp > 0) {
442 print
' '.$langs->trans(
"HT");
454 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"BuyingPriceMin").
'</td>';
457 if ($product_fourn->find_min_price_product_fournisseur($object->id) > 0) {
458 if ($product_fourn->product_fourn_price_id > 0) {
459 print $product_fourn->display_price_product_fournisseur();
461 print $langs->trans(
"NotDefined");
469 print
'<div class="clearboth"></div>';
475 if (($action ==
'create_price' || $action ==
'update_price') && $usercancreate) {
476 $langs->load(
"suppliers");
478 print
"<!-- form to add a supplier price -->\n";
482 $object->fetch_product_fournisseur_price($rowid, 1);
488 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'" method="POST">';
489 print
'<input type="hidden" name="token" value="'.newToken().
'">';
490 print
'<input type="hidden" name="action" value="save_price">';
494 print
'<table class="border centpercent">';
497 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
"Supplier").
'</td><td>';
500 $supplier->fetch($socid);
501 print $supplier->getNomUrl(1);
502 print
'<input type="hidden" name="id_fourn" value="'.$socid.
'">';
503 print
'<input type="hidden" name="ref_fourn_price_id" value="'.$rowid.
'">';
504 print
'<input type="hidden" name="rowid" value="'.$rowid.
'">';
505 print
'<input type="hidden" name="socid" value="'.$socid.
'">';
508 $events[] = array(
'method' =>
'getVatRates',
'url' =>
dol_buildpath(
'/core/ajax/vatrates.php', 1),
'htmlname' =>
'tva_tx',
'params' => array());
509 $filter =
'(fournisseur:=:1) AND (status:=:1)';
510 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
GETPOST(
"id_fourn",
'alpha'),
'id_fourn', $filter,
'SelectThirdParty', 0, 0, $events);
512 $parameters = array(
'filter'=>$filter,
'html_name'=>
'id_fourn',
'selected'=>
GETPOST(
"id_fourn"),
'showempty'=>1,
'prod_id'=>$object->id);
513 $reshook = $hookmanager->executeHooks(
'formCreateThirdpartyOptions', $parameters, $object, $action);
514 if (empty($reshook)) {
515 if (empty($form->result)) {
516 print
'<a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&type=f&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?id='.((
int) $object->id).
'&action='.urlencode($action).($action ==
'create_price' ?
'&token='.newToken() :
'')).
'">';
517 print
img_picto($langs->trans(
"CreateDolibarrThirdPartySupplier"),
'add',
'class="marginleftonly"');
521 print
'<script type="text/javascript">
522 $(document).ready(function () {
523 $("#search_id_fourn").change(load_vat)
524 console.log("Requesting default VAT rate for the supplier...")
526 function load_vat() {
528 let socid = $("#id_fourn")[0].value
530 // load available VAT rates
531 let vat_url = "'.dol_buildpath(
'/core/ajax/vatrates.php', 1).
'"
532 //Make GET request with params
534 options += "id=" + socid
535 options += "&htmlname=tva_tx"
536 options += "&action=default" // not defined in vatrates.php, default behavior.
542 rate_options = $.parseHTML(data.value)
543 rate_options.forEach(opt => {
545 replaceVATWithSupplierValue(opt.value);
553 function replaceVATWithSupplierValue(vat_rate) {
554 console.log("Default VAT rate for the supplier: " + vat_rate + "%")
555 $("[name=\'tva_tx\']")[0].value = vat_rate;
562 print
'<tr><td class="fieldrequired">'.$langs->trans(
"SupplierRef").
'</td><td>';
564 print
'<input type="hidden" name="ref_fourn_old" value="'.$object->ref_supplier.
'">';
565 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.$object->ref_supplier.
'">';
567 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.(GETPOST(
"ref_fourn") ?
GETPOST(
"ref_fourn") :
'').
'">';
574 $langs->load(
"propal");
575 print
'<tr><td>'.$langs->trans(
"Availability").
'</td><td>';
576 $form->selectAvailabilityDelay($object->fk_availability,
"oselDispo", 1);
577 print
'</td></tr>'.
"\n";
582 print
'<td class="fieldrequired">'.$langs->trans(
"QtyMin").
'</td>';
584 $quantity = GETPOSTISSET(
'qty') ?
price2num(
GETPOST(
'qty',
'alphanohtml'),
'MS') :
"1";
586 print
'<input type="hidden" name="qty" value="'.$object->fourn_qty.
'">';
587 print $object->fourn_qty;
589 print
'<input class="flat" name="qty" size="5" value="'.$quantity.
'">';
593 $unit = $object->getLabelOfUnit();
595 print
' '.$langs->trans($unit);
604 print
'<td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PackagingForThisProduct"), $langs->trans(
"PackagingForThisProductDesc")).
'</td>';
606 $packaging = GETPOSTISSET(
'packaging') ?
price2num(
GETPOST(
'packaging',
'alphanohtml'),
'MS') : ((empty($rowid)) ?
"1" :
price2num($object->packaging,
'MS'));
607 print
'<input class="flat" name="packaging" size="5" value="'.$packaging.
'">';
611 $unit = $object->getLabelOfUnit();
613 print
' '.$langs->trans($unit);
622 $mysoc2 = clone $mysoc;
623 $mysoc2->name =
'Fictive seller with same country';
624 $mysoc2->tva_assuj = 1;
627 if (empty($default_vat)) {
628 $default_npr = $default_vat;
631 print
'<tr><td class="fieldrequired">'.$langs->trans(
"VATRateForSupplierProduct").
'</td>';
634 if (!empty($rowid)) {
636 $tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1);
637 $default_vat = $tmpproductsupplier->fourn_tva_tx;
638 $default_npr = $tmpproductsupplier->fourn_tva_npr;
640 if (empty($default_vat)) {
641 $default_vat = $object->tva_tx;
644 $vattosuggest = (GETPOSTISSET(
"tva_tx") ?
vatrate(
GETPOST(
"tva_tx")) : ($default_vat !=
'' ?
vatrate($default_vat) :
''));
645 $vattosuggest = preg_replace(
'/\s*\(.*\)$/',
'', $vattosuggest);
646 print
'<input type="text" class="flat" size="5" name="tva_tx" value="'.$vattosuggest.
'">';
649 if (isModEnabled(
'dynamicprices')) {
651 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceMode").
'</td><td>';
653 $price_expression_list = array(0 => $langs->trans(
"PriceNumeric"));
654 foreach ($price_expression->list_price_expression() as $entry) {
655 $price_expression_list[$entry->id] = $entry->title;
657 $price_expression_preselection =
GETPOST(
'eid') ?
GETPOST(
'eid') : ($object->fk_supplier_price_expression ? $object->fk_supplier_price_expression :
'0');
658 print $form->selectarray(
'eid', $price_expression_list, $price_expression_preselection);
659 print
' <div id="expression_editor" class="button smallpaddingimp">'.$langs->trans(
"PriceExpressionEditor").
'</div>';
662 print
'<script type="text/javascript">
663 jQuery(document).ready(run);
665 jQuery("#expression_editor").click(on_click);
666 jQuery("#eid").change(on_change);
669 function on_click() {
670 window.location = "'.DOL_URL_ROOT.
'/product/dynamic_price/editor.php?id='.$id.
'&tab=fournisseurs&eid=" + $("#eid").val();
672 function on_change() {
673 if ($("#eid").val() == 0) {
674 jQuery("#price_numeric").show();
676 jQuery("#price_numeric").hide();
682 if (isModEnabled(
"multicurrency")) {
684 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Currency").
'</td>';
686 $currencycodetouse =
GETPOST(
'multicurrency_code') ?
GETPOST(
'multicurrency_code') : (isset($object->fourn_multicurrency_code) ? $object->fourn_multicurrency_code :
'');
687 if (empty($currencycodetouse) && $object->fourn_multicurrency_tx == 1) {
688 $currencycodetouse = $conf->currency;
690 print $form->selectMultiCurrency($currencycodetouse,
"multicurrency_code", 1);
691 print
' '.$langs->trans(
"CurrencyRate").
' ';
692 print
'<input class="flat" name="multicurrency_tx" size="4" value="'.vatrate(
GETPOST(
'multicurrency_tx') ?
GETPOST(
'multicurrency_tx') : (isset($object->fourn_multicurrency_tx) ? $object->fourn_multicurrency_tx :
'')).
'">';
697 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMinCurrency"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
698 $pricesupplierincurrencytouse = (
GETPOST(
'multicurrency_price') ?
GETPOST(
'multicurrency_price') : (isset($object->fourn_multicurrency_price) ? $object->fourn_multicurrency_price :
''));
699 print
'<td><input class="flat" name="multicurrency_price" size="8" value="'.price($pricesupplierincurrencytouse).
'">';
701 print $form->selectPriceBaseType((
GETPOST(
'multicurrency_price_base_type') ?
GETPOST(
'multicurrency_price_base_type') :
'HT'),
"multicurrency_price_base_type");
705 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMin"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
706 print
'<td><input class="flat" name="disabled_price" size="8" value="">';
707 print
'<input type="hidden" name="price" value="">';
708 print
'<input type="hidden" name="price_base_type" value="">';
710 print $form->selectPriceBaseType(
'',
"disabled_price_base_type");
713 $currencies = array();
714 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"multicurrency WHERE entity = ".((int) $conf->entity);
715 $resql = $db->query($sql);
718 while ($obj = $db->fetch_object($resql)) {
719 $currency->fetch($obj->rowid);
720 $currencies[$currency->code] = ((float) $currency->rate->rate);
723 $currencies = json_encode($currencies);
724 print
"<!-- javascript to autocalculate the minimum price -->
725 <script type='text/javascript'>
726 function update_price_from_multicurrency() {
727 console.log('update_price_from_multicurrency');
728 var multicurrency_price = price2numjs($('input[name=\"multicurrency_price\"]').val());
729 var multicurrency_tx = price2numjs($('input[name=\"multicurrency_tx\"]').val());
730 if (multicurrency_tx != 0) {
731 $('input[name=\"price\"]').val(multicurrency_price / multicurrency_tx);
732 $('input[name=\"disabled_price\"]').val(multicurrency_price / multicurrency_tx);
734 $('input[name=\"price\"]').val('');
735 $('input[name=\"disabled_price\"]').val('');
739 jQuery(document).ready(function () {
740 $('input[name=\"disabled_price\"]').prop('disabled', true);
741 $('select[name=\"disabled_price_base_type\"]').prop('disabled', true);
742 update_price_from_multicurrency();
744 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').keyup(function () {
745 update_price_from_multicurrency();
747 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').change(function () {
748 update_price_from_multicurrency();
750 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').on('paste', function () {
751 update_price_from_multicurrency();
754 $('select[name=\"multicurrency_price_base_type\"]').change(function () {
755 $('input[name=\"price_base_type\"]').val($(this).val());
756 $('select[name=\"disabled_price_base_type\"]').val($(this).val());
759 var currencies_array = $currencies;
760 $('select[name=\"multicurrency_code\"]').change(function () {
761 console.log(\"We change the currency\");
762 $('input[name=\"multicurrency_tx\"]').val(currencies_array[$(this).val()]);
763 update_price_from_multicurrency();
769 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceQtyMin").
'</td>';
770 print
'<td><input class="flat" name="price" size="8" value="'.(GETPOST(
'price') ?
price(
GETPOST(
'price')) : (isset($object->fourn_price) ?
price($object->fourn_price) :
'')).
'">';
772 print $form->selectPriceBaseType((GETPOSTISSET(
'price_base_type') ?
GETPOST(
'price_base_type') :
'HT'),
"price_base_type");
779 print
'<td>'.$langs->trans(
"Charges").
'</td>';
780 print
'<td><input class="flat" name="charges" size="8" value="'.(GETPOST(
'charges') ?
price(
GETPOST(
'charges')) : (isset($object->fourn_charges) ?
price($object->fourn_charges) :
'')).
'">';
786 print
'<tr><td>'.$langs->trans(
"DiscountQtyMin").
'</td>';
787 print
'<td><input class="flat" name="remise_percent" size="4" value="'.(GETPOSTISSET(
'remise_percent') ?
vatrate(
price2num(
GETPOST(
'remise_percent'),
'', 2)) : (isset($object->fourn_remise_percent) ?
vatrate($object->fourn_remise_percent) :
'')).
'"> %';
793 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
'</td>';
794 print
'<td><input class="flat" name="delivery_time_days" size="4" value="'.($rowid ? $object->delivery_time_days :
'').
'"> '.$langs->trans(
'days').
'</td>';
798 print
'<tr><td>'.$langs->trans(
"ReferenceReputation").
'</td><td>';
799 echo $form->selectarray(
'supplier_reputation', $object->reputations, !empty($supplier_reputation) ? $supplier_reputation : $object->supplier_reputation);
803 if (isModEnabled(
'barcode')) {
808 print
'<td>'.$langs->trans(
'GencodBuyPrice').
'</td>';
810 print
img_picto(
'',
'barcode',
'class="pictofixedwidth"');
811 print $formbarcode->selectBarcodeType((GETPOSTISSET(
'fk_barcode_type') ?
GETPOST(
'fk_barcode_type',
'int') : ($rowid ? $object->supplier_fk_barcode_type : getDolGlobalint(
"PRODUIT_DEFAULT_BARCODE_TYPE"))),
'fk_barcode_type', 1);
812 print
' <input class="flat" name="barcode" value="'.(GETPOSTISSET(
'barcode') ?
GETPOST(
'barcode') : ($rowid ? $object->supplier_barcode :
'')).
'"></td>';
819 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
822 print
'<td>'.$langs->trans(
'ProductSupplierDescription').
'</td>';
825 $doleditor =
new DolEditor(
'supplier_description', $object->desc_supplier,
'', 160,
'dolibarr_details',
'',
false,
true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), ROWS_4,
'90%');
826 $doleditor->Create();
833 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
834 $extralabels = !empty($extrafields->attributes[
"product_fournisseur_price"][
'label']) ? $extrafields->attributes[
"product_fournisseur_price"][
'label'] :
'';
835 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
836 if (!empty($extralabels)) {
838 foreach ($extralabels as $key => $value) {
839 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && ($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 1 || $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 3 || ($action ==
"update_price" && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 4))) {
840 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
841 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
844 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
845 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
846 print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
848 print $langs->trans($value);
850 print
'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] :
'',
'',
'',
'',
'', 0,
'product_fournisseur_price').
'</td></tr>';
855 $sql .=
" fk_object";
856 foreach ($extralabels as $key => $value) {
859 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
860 $sql .=
" WHERE fk_object = ".((int) $rowid);
861 $resql = $db->query($sql);
863 $obj = $db->fetch_object($resql);
864 foreach ($extralabels as $key => $value) {
865 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && ($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 1 || $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 3 || ($action ==
"update_price" && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 4))) {
866 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
867 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
870 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
871 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
872 print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
874 print $langs->trans($value);
876 print
'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] : $obj->{$key},
'',
'',
'',
'', 0,
'product_fournisseur_price');
886 if (is_object($hookmanager)) {
887 $parameters = array(
'id_fourn'=>!empty($id_fourn) ? $id_fourn : 0,
'prod_id'=>$object->id);
888 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
889 print $hookmanager->resPrint;
896 print
'<div class="center">';
897 print
'<input class="button button-save" type="submit" value="'.$langs->trans(
"Save").
'">';
898 print
' ';
899 print
'<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
902 print
'</form>'.
"\n";
908 print
'<div class="tabsAction">'.
"\n";
910 if ($action !=
'create_price' && $action !=
'update_price') {
911 $parameters = array();
912 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
913 if (empty($reshook)) {
914 if ($usercancreate) {
915 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/product/fournisseurs.php?id='.((int) $object->id).
'&action=create_price&token='.newToken().
'">';
916 print $langs->trans(
"AddSupplierPrice").
'</a>';
923 if ($user->hasRight(
"fournisseur",
"read")) {
925 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
926 $param .=
'&contextpage='.urlencode($contextpage);
928 if ($limit > 0 && $limit != $conf->liste_limit) {
929 $param .=
'&limit='.((int) $limit);
931 $param .=
'&ref='.urlencode($object->ref);
934 $product_fourn_list = $product_fourn->list_product_fournisseur_price($object->id, $sortfield, $sortorder, $limit, $offset);
935 $product_fourn_list_all = $product_fourn->list_product_fournisseur_price($object->id, $sortfield, $sortorder, 0, 0);
936 $nbtotalofrecords = count($product_fourn_list_all);
937 $num = count($product_fourn_list);
938 if (($num + ($offset * $limit)) < $nbtotalofrecords) {
942 print_barre_liste($langs->trans(
'SupplierPrices'), $page, $_SERVER[
'PHP_SELF'], $param, $sortfield, $sortorder,
'', $num, $nbtotalofrecords,
'title_accountancy.png', 0,
'',
'', $limit, 1);
946 $arrayfields = array(
947 'pfp.datec'=>array(
'label'=>$langs->trans(
"AppliedPricesFrom"),
'checked'=>1,
'position'=>1),
948 's.nom'=>array(
'label'=>$langs->trans(
"Suppliers"),
'checked'=>1,
'position'=>2),
949 'pfp.fk_availability'=>array(
'label'=>$langs->trans(
"Availability"),
'enabled' =>
getDolGlobalInt(
'FOURN_PRODUCT_AVAILABILITY'),
'checked'=>0,
'position'=>4),
950 'pfp.quantity'=>array(
'label'=>$langs->trans(
"QtyMin"),
'checked'=>1,
'position'=>5),
951 'pfp.unitprice'=>array(
'label'=>$langs->trans(
"UnitPriceHT"),
'checked'=>1,
'position'=>9),
952 'pfp.multicurrency_unitprice'=>array(
'label'=>$langs->trans(
"UnitPriceHTCurrency"),
'enabled' => isModEnabled(
'multicurrency'),
'checked'=>0,
'position'=>10),
953 'pfp.charges'=>array(
'label'=>$langs->trans(
"Charges"),
'enabled' =>
getDolGlobalString(
'PRODUCT_CHARGES'),
'checked'=>0,
'position'=>11),
954 'pfp.delivery_time_days'=>array(
'label'=>$langs->trans(
"NbDaysToDelivery"),
'checked'=>-1,
'position'=>13),
955 'pfp.supplier_reputation'=>array(
'label'=>$langs->trans(
"ReputationForThisProduct"),
'checked'=>-1,
'position'=>14),
956 'pfp.fk_barcode_type'=>array(
'label'=>$langs->trans(
"BarcodeType"),
'enabled' => isModEnabled(
'barcode'),
'checked'=>0,
'position'=>15),
957 'pfp.barcode'=>array(
'label'=>$langs->trans(
"BarcodeValue"),
'enabled' => isModEnabled(
'barcode'),
'checked'=>0,
'position'=>16),
958 'pfp.packaging'=>array(
'label'=>$langs->trans(
"PackagingForThisProduct"),
'enabled' =>
getDolGlobalInt(
'PRODUCT_USE_SUPPLIER_PACKAGING'),
'checked'=>0,
'position'=>17),
959 'pfp.status'=>array(
'label'=>$langs->trans(
"Status"),
'enabled' => 1,
'checked'=>0,
'position'=>40),
960 'pfp.tms'=>array(
'label'=>$langs->trans(
"DateModification"),
'enabled' => isModEnabled(
'barcode'),
'checked'=>1,
'position'=>50),
964 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
965 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
966 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
968 if (!empty($extralabels)) {
969 foreach ($extralabels as $key => $value) {
971 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
972 $extratitle = $langs->trans($value);
973 $arrayfields[
'ef.' . $key] = array(
'label' => $extratitle,
'checked' => 0,
974 'position' => (end($arrayfields)[
'position'] + 1),
975 'langfile' => $extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key],
976 'help' => $extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]);
983 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
985 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
986 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage);
988 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post" name="formulaire">';
989 print
'<input type="hidden" name="token" value="'.newToken().
'">';
990 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
991 print
'<input type="hidden" name="action" value="list">';
992 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
993 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
996 print
'<div class="div-table-responsive">';
997 print
'<table class="liste centpercent">';
999 $param =
"&id=".$object->id;
1003 print
'<tr class="liste_titre">';
1004 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1005 print_liste_field_titre(
"AppliedPricesFrom", $_SERVER[
"PHP_SELF"],
"pfp.datec",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1008 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1009 print_liste_field_titre(
"Suppliers", $_SERVER[
"PHP_SELF"],
"s.nom",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1012 print_liste_field_titre(
"SupplierRef", $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1014 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1015 print_liste_field_titre(
"Availability", $_SERVER[
"PHP_SELF"],
"pfp.fk_availability",
"", $param,
"", $sortfield, $sortorder);
1018 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1019 print_liste_field_titre(
"QtyMin", $_SERVER[
"PHP_SELF"],
"pfp.quantity",
"", $param,
'', $sortfield, $sortorder,
'right ');
1022 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1024 print_liste_field_titre(
"PriceQtyMinHT", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1026 if (isModEnabled(
"multicurrency")) {
1027 print_liste_field_titre(
"PriceQtyMinHTCurrency", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1030 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1031 print_liste_field_titre(
"UnitPriceHT", $_SERVER[
"PHP_SELF"],
"pfp.unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1034 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1035 print_liste_field_titre(
"UnitPriceHTCurrency", $_SERVER[
"PHP_SELF"],
"pfp.multicurrency_unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1038 if (isModEnabled(
"multicurrency")) {
1039 print_liste_field_titre(
"Currency", $_SERVER[
"PHP_SELF"],
"",
"", $param,
'', $sortfield, $sortorder,
'right ');
1042 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1043 print_liste_field_titre(
"Charges", $_SERVER[
"PHP_SELF"],
"pfp.charges",
"", $param,
'', $sortfield, $sortorder,
'right ');
1046 print_liste_field_titre(
"DiscountQtyMin", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1048 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1049 print_liste_field_titre(
"NbDaysToDelivery", $_SERVER[
"PHP_SELF"],
"pfp.delivery_time_days",
"", $param,
'', $sortfield, $sortorder,
'right ');
1052 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1053 print_liste_field_titre(
"ReputationForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.supplier_reputation",
"", $param,
'', $sortfield, $sortorder,
'center ');
1056 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1057 print_liste_field_titre(
"BarcodeType", $_SERVER[
"PHP_SELF"],
"pfp.fk_barcode_type",
"", $param,
'', $sortfield, $sortorder,
'center ');
1060 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1061 print_liste_field_titre(
"BarcodeValue", $_SERVER[
"PHP_SELF"],
"pfp.barcode",
"", $param,
'', $sortfield, $sortorder,
'center ');
1064 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1065 print_liste_field_titre(
"PackagingForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.packaging",
"", $param,
'', $sortfield, $sortorder,
'center ');
1068 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1069 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"pfp.status",
"", $param,
'', $sortfield, $sortorder,
'center ',
'', 1);
1072 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1073 print_liste_field_titre(
"DateModification", $_SERVER[
"PHP_SELF"],
"pfp.tms",
"", $param,
'', $sortfield, $sortorder,
'right ',
'', 1);
1078 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
1079 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
1080 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
1082 if (!empty($extralabels)) {
1083 foreach ($extralabels as $key => $value) {
1085 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1086 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
1087 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
1089 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
1090 $extratitle = $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
1092 $extratitle = $langs->trans($value);
1094 if (!empty($arrayfields[
'ef.' . $key][
'checked'])) {
1095 print_liste_field_titre($extratitle, $_SERVER[
"PHP_SELF"],
'ef.' . $key,
'', $param,
'', $sortfield, $sortorder,
'right ');
1103 if (is_object($hookmanager)) {
1104 $parameters = array(
'id_fourn'=>(!empty($id_fourn) ? $id_fourn :
''),
'prod_id'=>$object->id,
'nbfields'=>$nbfields);
1105 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
1107 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
1111 if (is_array($product_fourn_list)) {
1112 foreach ($product_fourn_list as $productfourn) {
1113 print
'<tr class="oddeven">';
1116 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1117 print
'<td>'.dol_print_date(($productfourn->fourn_date_creation ? $productfourn->fourn_date_creation : $productfourn->date_creation),
'dayhour',
'tzuserrel').
'</td>';
1121 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1122 print
'<td class="tdoverflowmax150">'.$productfourn->getSocNomUrl(1,
'supplier').
'</td>';
1126 if ($usercancreate) {
1127 print
'<td class="tdoverflowmax150">'.$productfourn->getNomUrl().
'</td>';
1129 print
'<td class="tdoverflowmax150">'.dol_escape_htmltag($productfourn->fourn_ref).
'</td>';
1133 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1134 $form->load_cache_availability();
1135 $availability = $form->cache_availability[$productfourn->fk_availability][
'label'];
1136 print
'<td class="left">'.$availability.
'</td>';
1140 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1141 print
'<td class="right">';
1142 print $productfourn->fourn_qty;
1145 $unit = $object->getLabelOfUnit();
1147 print
' '.$langs->trans($unit);
1154 print
'<td class="right">';
1155 print
vatrate($productfourn->fourn_tva_tx,
true);
1159 print
'<td class="right">';
1160 print $productfourn->fourn_price ?
'<span class="amount">'.price($productfourn->fourn_price).
'</span>' :
"";
1163 if (isModEnabled(
"multicurrency")) {
1165 print
'<td class="right">';
1166 print $productfourn->fourn_multicurrency_price ?
'<span class="amount">'.price($productfourn->fourn_multicurrency_price).
'</span>' :
"";
1171 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1172 print
'<td class="right">';
1173 print
price($productfourn->fourn_unitprice);
1179 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1180 print
'<td class="right">';
1181 print
price($productfourn->fourn_multicurrency_unitprice);
1186 if (isModEnabled(
"multicurrency")) {
1187 print
'<td class="right nowraponall">';
1188 print $productfourn->fourn_multicurrency_code ?
currency_name($productfourn->fourn_multicurrency_code) :
'';
1193 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1194 print
'<td class="right">';
1195 print
price($productfourn->fourn_charges);
1200 print
'<td class="right">';
1201 print
price2num($productfourn->fourn_remise_percent).
'%';
1205 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1206 print
'<td class="right">';
1207 print $productfourn->delivery_time_days;
1212 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1213 print
'<td class="center">';
1214 if (!empty($productfourn->supplier_reputation) && !empty($object->reputations[$productfourn->supplier_reputation])) {
1215 print $object->reputations[$productfourn->supplier_reputation];
1221 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1222 print
'<td class="center">';
1223 $productfourn->barcode_type = !empty($productfourn->supplier_fk_barcode_type) ? $productfourn->supplier_fk_barcode_type : 0;
1224 $productfourn->fetch_barcode();
1225 print $productfourn->barcode_type_label ? $productfourn->barcode_type_label : ($productfourn->supplier_barcode ?
'<div class="warning">'.$langs->trans(
"SetDefaultBarcodeType").
'<div>' :
'');
1230 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1231 print
'<td class="right">';
1232 print $productfourn->supplier_barcode;
1237 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1238 print
'<td class="center">';
1239 print
price2num($productfourn->packaging);
1244 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1245 print
'<td class="center">';
1246 print $productfourn->getLibStatut(3);
1251 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1252 print
'<td class="right nowraponall">';
1253 print
dol_print_date(($productfourn->fourn_date_modification ? $productfourn->fourn_date_modification : $productfourn->date_modification),
'dayhour',
'tzuserrel');
1258 if (!empty($extralabels)) {
1260 $sql .=
" fk_object";
1261 foreach ($extralabels as $key => $value) {
1264 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
1265 $sql .=
" WHERE fk_object = ".((int) $productfourn->product_fourn_price_id);
1266 $resql = $db->query($sql);
1268 if ($db->num_rows($resql) != 1) {
1269 foreach ($extralabels as $key => $value) {
1270 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1275 $obj = $db->fetch_object($resql);
1276 foreach ($extralabels as $key => $value) {
1277 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1278 print
'<td align="right">'.$extrafields->showOutputField($key, $obj->{$key},
'',
'product_fournisseur_price').
"</td>";
1286 if (is_object($hookmanager)) {
1287 $parameters = array(
'id_pfp'=>$productfourn->product_fourn_price_id,
'id_fourn'=>(!empty($id_fourn) ? $id_fourn :
''),
'prod_id'=>$object->id);
1288 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
1292 print
'<td class="center nowraponall">';
1294 if ($usercancreate) {
1295 print
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.((int) $object->id).
'&socid='.((int) $productfourn->fourn_id).
'&action=update_price&token='.newToken().
'&rowid='.((int) $productfourn->product_fourn_price_id).
'">'.
img_edit().
"</a>";
1297 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?id='.((int) $object->id).
'&socid='.((int) $productfourn->fourn_id).
'&action=ask_remove_pf&token='.newToken().
'&rowid='.((int) $productfourn->product_fourn_price_id).
'">'.
img_picto($langs->trans(
"Remove"),
'delete').
'</a>';
1305 if (empty($product_fourn_list)) {
1306 print
'<tr><td colspan="'.$nbfields.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
1319 print $langs->trans(
"ErrorUnknown");
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage a WYSIWYG editor.
Class to manage suppliers.
Class for accesing price expression table.
Class to parse product price expressions.
Class to manage predefined suppliers products.
Class to manage products or services.
const TYPE_PRODUCT
Regular product.
const TYPE_SERVICE
Service.
currency_name($code_iso, $withcode='', $outputlangs=null)
Return label of currency or code+label.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formated for view output Used into pdf and HTML pages.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
GETPOSTINT($paramname, $method=0)
Return value of a param into GET or POST supervariable.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.: VAT NPR in France)
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
product_prepare_head($object)
Prepare array with list of tabs.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.