38require
'../main.inc.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
50require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
51require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
52require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_expression.class.php';
53require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_parser.class.php';
59$langs->loadLangs(array(
'products',
'suppliers',
'bills',
'margins',
'stocks'));
64$action =
GETPOST(
'action',
'aZ09');
65$cancel =
GETPOST(
'cancel',
'alpha');
66$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'pricesuppliercard';
72$backtopage =
GETPOST(
'backtopage',
'alpha');
79 $_GET[
'id_fourn'] =
GETPOSTINT(
'search_fourn_id');
80 $_POST[
'id_fourn'] =
GETPOSTINT(
'search_fourn_id');
84$fieldvalue = (!empty($id) ?
$id : (!empty($ref) ? $ref :
''));
85$fieldtype = (!empty($ref) ?
'ref' :
'rowid');
87 $socid = $user->socid;
91$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
92$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
94if (empty($page) || $page == -1) {
97$offset = $limit * $page;
101 $sortfield =
"s.nom";
108$hookmanager->initHooks(array(
'pricesuppliercard',
'globalcard'));
112if ($id > 0 || $ref) {
114 $prod->fetch($id, $ref);
117if (!$user->hasRight(
'fournisseur',
'lire') && (!
isModEnabled(
'margin') && !$user->hasRight(
"margin",
"liretous"))) {
124$usercancreate = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') ? $usercancreate : $user->hasRight(
'product',
'product_advance',
'write_supplier_prices'));
127 if (
$object->type == $object::TYPE_PRODUCT) {
130 if (
$object->type == $object::TYPE_SERVICE) {
134 restrictedArea($user,
'produit|service', $fieldvalue,
'product&product',
'',
'', $fieldtype);
146$parameters = array(
'socid' => $socid,
'id_prod' => $id);
147$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
152if (empty($reshook)) {
153 if ($action ==
'setcost_price' && $usercancreate) {
158 $object->cost_price = $cost_price;
169 if ($action ==
'setpmp' && $usercancreate) {
173 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET pmp = ".((float)
$object->pmp).
" WHERE rowid = ".((int) $id);
174 $resql = $db->query($sql);
186 if ($action ==
'confirm_remove_pf' && $usercancreate) {
189 $result =
$object->remove_product_fournisseur_price($rowid);
191 $db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields WHERE fk_object = ".((
int) $rowid));
200 if ($action ==
'save_price' && $usercancreate) {
201 $ref_fourn_price_id =
GETPOSTINT(
'ref_fourn_price_id');
203 if (empty($id_fourn)) {
206 $ref_fourn =
GETPOST(
"ref_fourn");
207 if (empty($ref_fourn)) {
208 $ref_fourn =
GETPOST(
"search_ref_fourn");
210 $ref_fourn_old =
GETPOST(
"ref_fourn_old");
211 if (empty($ref_fourn_old)) {
212 $ref_fourn_old = $ref_fourn;
217 $npr = preg_match(
'/\*/',
GETPOST(
'tva_tx',
'alpha')) ? 1 : 0;
218 $tva_tx = str_replace(
'*',
'',
GETPOST(
'tva_tx',
'alpha'));
219 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
225 $supplier_reputation =
GETPOST(
'supplier_reputation');
226 $supplier_description =
GETPOST(
'supplier_description',
'restricthtml');
227 $barcode =
GETPOST(
'barcode',
'alpha');
228 $fk_barcode_type =
GETPOSTINT(
'fk_barcode_type');
233 $langs->load(
"errors");
234 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
236 if (!is_numeric($tva_tx)) {
238 $langs->load(
"errors");
239 setEventMessages($langs->trans(
"ErrorFieldMustBeANumeric", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
241 if (empty($quantity)) {
243 $langs->load(
"errors");
244 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Qty")),
null,
'errors');
246 if (empty($ref_fourn)) {
248 $langs->load(
"errors");
249 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefSupplier")),
null,
'errors');
251 if ($id_fourn <= 0) {
253 $langs->load(
"errors");
254 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Supplier")),
null,
'errors');
257 if ($price_expression ===
'') {
259 $langs->load(
"errors");
260 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Price")),
null,
'errors');
266 if (!
GETPOST(
"multicurrency_code")) {
268 $langs->load(
"errors");
269 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Currency")),
null,
'errors');
273 $langs->load(
"errors");
274 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CurrencyRate")),
null,
'errors');
278 $langs->load(
"errors");
279 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"PriceCurrency")),
null,
'errors');
286 if (empty($ref_fourn_price_id)) {
287 $ret =
$object->add_fournisseur($user, $id_fourn, $ref_fourn_old, (
float) $quantity);
292 $tmpobject->fetch(
$object->product_id_already_linked);
293 $productLink = $tmpobject->getNomUrl(1,
'supplier');
295 $texttoshow = $langs->trans(
"ReferenceSupplierIsAlreadyAssociatedWithAProduct",
'{s1}');
296 $texttoshow = str_replace(
'{s1}', $productLink, $texttoshow);
298 } elseif ($ret < 0) {
306 $result = $supplier->fetch($id_fourn);
307 if (GETPOSTISSET(
'ref_fourn_price_id')) {
308 $object->fetch_product_fournisseur_price($ref_fourn_price_id);
310 $extralabels = $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
311 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
315 if (empty($packaging)) {
322 $object->product_fourn_packaging = $packaging;
326 $multicurrency_price =
GETPOSTFLOAT(
"multicurrency_price");
327 $multicurrency_code =
GETPOST(
"multicurrency_code",
'alpha');
329 $ret =
$object->update_buyprice((
float) $quantity, $newprice, $user,
GETPOST(
"price_base_type"), $supplier,
GETPOSTINT(
"oselDispo"), $ref_fourn, (
float) $tva_tx,
GETPOST(
"charges"), (
float) $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);
331 $ret =
$object->update_buyprice((
float) $quantity, $newprice, $user,
GETPOST(
"price_base_type"), $supplier,
GETPOSTINT(
"oselDispo"), $ref_fourn, (
float) $tva_tx,
GETPOST(
"charges"), (
float) $remise_percent, 0, $npr, $delivery_time_days, $supplier_reputation, array(),
'', 0,
'HT', 1,
'', $supplier_description, $barcode, $fk_barcode_type, $extrafield_values);
337 if (
isModEnabled(
'dynamicprices') && $price_expression !==
'') {
339 require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_parser.class.php';
341 $object->fk_supplier_price_expression = $price_expression;
342 $price_result = $priceparser->parseProductSupplier($object);
343 if ($price_result < 0) {
350 $ret =
$object->setSupplierPriceExpression($price_expression);
366 $action =
'create_price';
376$form =
new Form($db);
378$title = $langs->trans(
'ProductServiceCard');
382 $title = $langs->trans(
'Product').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
383 $helpurl =
'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte';
386 $title = $langs->trans(
'Service').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
387 $helpurl =
'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Lesitungen';
390llxHeader(
'', $title, $helpurl,
'', 0, 0,
'',
'',
'',
'classforhorizontalscrolloftabs mod-product page-price_suppliers');
392if ($id > 0 || $ref) {
393 if ($action ==
'ask_remove_pf' && $usercancreate) {
394 $form =
new Form($db);
395 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$id.
'&rowid='.$rowid, $langs->trans(
'DeleteProductBuyPrice'), $langs->trans(
'ConfirmDeleteProductBuyPrice'),
'confirm_remove_pf',
'', 0, 1);
399 if ($action !=
'edit' && $action !=
're-edit') {
401 $titre = $langs->trans(
"CardProduct".
$object->type);
406 $linkback =
'<a href="'.DOL_URL_ROOT.
'/product/list.php?restore_lastsearch_values=1&type='.
$object->type.
'">'.$langs->trans(
"BackToList").
'</a>';
407 $prod->next_prev_filter =
"(te.fk_product_type:=:".((int)
$object->type).
")";
410 if ($user->socid && !in_array(
'product', explode(
',',
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL')))) {
414 dol_banner_tab($prod,
'ref', $linkback, $shownav,
'ref');
416 print
'<div class="fichecenter">';
418 print
'<div class="underbanner clearboth"></div>';
419 print
'<table class="border tableforfield centpercent">';
423 $typeformat =
'select;0:'.$langs->trans(
"Product").
',1:'.$langs->trans(
"Service");
424 print
'<tr><td class="">';
425 print (!
getDolGlobalString(
'PRODUCT_DENY_CHANGE_PRODUCT_TYPE')) ? $form->editfieldkey(
"Type",
'fk_product_type', (
string)
$object->type, $object, 0, $typeformat) : $langs->trans(
'Type');
427 print $form->editfieldval(
"Type",
'fk_product_type',
$object->type, $object, 0, $typeformat);
433 $textdesc = $langs->trans(
"CostPriceDescription");
434 $textdesc .=
"<br>".$langs->trans(
"CostPriceUsage");
435 $text = $form->textwithpicto($langs->trans(
"CostPrice"), $textdesc, 1,
'help',
'');
436 print $form->editfieldkey($text,
'cost_price', (
string)
$object->cost_price, $object, (
int) $usercancreate,
'amount:6');
438 print $form->editfieldval($text,
'cost_price',
$object->cost_price, $object, $usercancreate,
'amount:6');
444 $usercaneditpmp = $usercancreate;
446 print
'<tr><td class="titlefieldcreate">';
447 $textdesc = $langs->trans(
"AverageUnitPricePMPDesc");
448 $text = $form->textwithpicto($langs->trans(
"AverageUnitPricePMPShort"), $textdesc, 1,
'help',
'');
449 print $form->editfieldkey($text,
'pmp', (
string)
$object->pmp, $object, $usercaneditpmp,
'amount:6');
451 print $form->editfieldval($text,
'pmp', (
$object->pmp > 0 ?
$object->pmp :
''),
$object, $usercaneditpmp,
'amount:6');
453 print
' '.$langs->trans(
"HT");
465 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"BuyingPriceMin").
'</td>';
468 if ($product_fourn->find_min_price_product_fournisseur(
$object->id) > 0) {
469 if ($product_fourn->product_fourn_price_id > 0) {
470 print $product_fourn->display_price_product_fournisseur();
472 print $langs->trans(
"NotDefined");
480 print
'<div class="clearboth"></div>';
486 if (($action ==
'create_price' || $action ==
'edit_price') && $usercancreate) {
487 $langs->load(
"suppliers");
489 print
"<!-- form to add a supplier price -->\n";
493 $object->fetch_product_fournisseur_price($rowid, 1);
499 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST">';
500 print
'<input type="hidden" name="token" value="'.newToken().
'">';
501 print
'<input type="hidden" name="action" value="save_price">';
505 print
'<table class="border centpercent">';
508 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
"Supplier").
'</td><td>';
511 $supplier->fetch($socid);
512 print $supplier->getNomUrl(1);
513 print
'<input type="hidden" name="id_fourn" value="'.$socid.
'">';
514 print
'<input type="hidden" name="ref_fourn_price_id" value="'.$rowid.
'">';
515 print
'<input type="hidden" name="rowid" value="'.$rowid.
'">';
516 print
'<input type="hidden" name="socid" value="'.$socid.
'">';
519 $events[] = array(
'method' =>
'getVatRates',
'url' =>
dol_buildpath(
'/core/ajax/vatrates.php', 1),
'htmlname' =>
'tva_tx',
'params' => array());
520 $filter =
'(fournisseur:=:1) AND (status:=:1)';
521 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
GETPOST(
"id_fourn",
'alpha'),
'id_fourn', $filter, $langs->transnoentitiesnoconv(
'SelectThirdParty'), 0, 0, $events);
523 $parameters = array(
'filter' => $filter,
'html_name' =>
'id_fourn',
'selected' =>
GETPOST(
"id_fourn"),
'showempty' => 1,
'prod_id' =>
$object->id);
524 $reshook = $hookmanager->executeHooks(
'formCreateThirdpartyOptions', $parameters, $object, $action);
525 if (empty($reshook)) {
526 if (empty($form->result)) {
527 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() :
'')).
'">';
528 print
img_picto($langs->trans(
"CreateDolibarrThirdPartySupplier"),
'add',
'class="marginleftonly"');
532 print
'<script type="text/javascript">
533 $(document).ready(function () {
534 console.log("Requesting default VAT rate for the supplier...")
535 $("#search_id_fourn").change(load_vat)
537 function load_vat() {
539 let socid = $("#id_fourn")[0].value
541 // load available VAT rates
542 let vat_url = "'.dol_buildpath(
'/core/ajax/vatrates.php', 1).
'"
543 // make GET request with params
545 options += "id=" + socid
546 options += "&htmlname=tva_tx"
548 options += "&action=getBuyerVATRates" // not defined in vatrates.php, default behavior.
554 rate_options = $.parseHTML(data.value)
555 rate_options.forEach(opt => {
557 replaceVATWithSupplierValue(opt.value);
565 function replaceVATWithSupplierValue(vat_rate) {
566 console.log("Default VAT rate for the supplier: " + vat_rate + "%")
567 $("[name=\'tva_tx\']")[0].value = vat_rate;
574 print
'<tr><td class="fieldrequired">'.$langs->trans(
"SupplierRef").
'</td><td>';
576 print
'<input type="hidden" name="ref_fourn_old" value="'.$object->ref_supplier.
'">';
577 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.$object->ref_supplier.
'">';
579 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.(GETPOST(
"ref_fourn") ?
GETPOST(
"ref_fourn") :
'').
'">';
586 $langs->load(
"propal");
587 print
'<tr><td>'.$langs->trans(
"Availability").
'</td><td>';
588 $form->selectAvailabilityDelay(
$object->fk_availability,
"oselDispo", 1);
589 print
'</td></tr>'.
"\n";
594 print
'<td class="fieldrequired">'.$langs->trans(
"QtyMin").
'</td>';
596 $quantity = GETPOSTISSET(
'qty') ?
price2num(
GETPOST(
'qty',
'alphanohtml'),
'MS') :
"1";
598 print
'<input type="hidden" name="qty" value="'.$object->fourn_qty.
'">';
601 print
'<input class="flat" name="qty" size="5" value="'.$quantity.
'">';
605 $unit =
$object->getLabelOfUnit(
'long', $langs);
607 print
' '.$unit;
616 print
'<td>'.$form->textwithpicto($langs->trans(
"PackagingForThisProduct"), $langs->trans(
"PackagingForThisProductDesc")).
'</td>';
618 $packaging = GETPOSTISSET(
'packaging') ?
price2num(
GETPOST(
'packaging',
'alphanohtml'),
'MS') : ((empty($rowid)) ?
"" :
price2num(
$object->packaging,
'MS'));
619 print
'<input class="flat" name="packaging" size="5" value="'.$packaging.
'">';
623 $unit =
$object->getLabelOfUnit(
'long', $langs);
625 print
' '.$unit;
635 $mysoc2->name =
'Fictive seller with same country';
636 $mysoc2->tva_assuj = 1;
639 if (empty($default_vat)) {
640 $default_npr = $default_vat;
643 print
'<tr><td class="fieldrequired">'.$langs->trans(
"VATRateForSupplierProduct").
'</td>';
646 if (!empty($rowid)) {
648 $tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1);
649 $default_vat = $tmpproductsupplier->fourn_tva_tx;
650 $default_npr = $tmpproductsupplier->fourn_tva_npr;
652 if (empty($default_vat)) {
653 $default_vat =
$object->tva_tx;
656 $vattosuggest = (GETPOSTISSET(
"tva_tx") ?
vatrate(
GETPOST(
"tva_tx")) : ($default_vat !=
'' ?
vatrate($default_vat) :
''));
657 $vattosuggest = preg_replace(
'/\s*\(.*\)$/',
'', $vattosuggest);
658 print
'<input type="text" class="flat" size="5" name="tva_tx" value="'.$vattosuggest.
'">';
663 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceMode").
'</td><td>';
665 $price_expression_list = array(0 => $langs->trans(
"PriceNumeric"));
666 foreach ($price_expression->list_price_expression() as $entry) {
667 $price_expression_list[$entry->id] = $entry->title;
669 $price_expression_preselection =
GETPOST(
'eid') ?
GETPOST(
'eid') : (
$object->fk_supplier_price_expression ?
$object->fk_supplier_price_expression :
'0');
670 print $form->selectarray(
'eid', $price_expression_list, $price_expression_preselection);
671 print
' <div id="expression_editor" class="button smallpaddingimp">'.$langs->trans(
"PriceExpressionEditor").
'</div>';
674 print
'<script type="text/javascript">
675 jQuery(document).ready(run);
677 jQuery("#expression_editor").click(on_click);
678 jQuery("#eid").change(on_change);
681 function on_click() {
682 window.location = "'.DOL_URL_ROOT.
'/product/dynamic_price/editor.php?id='.
$id.
'&tab=price_suppliers&eid=" + $("#eid").val();
684 function on_change() {
685 if ($("#eid").val() == 0) {
686 jQuery("#price_numeric").show();
688 jQuery("#price_numeric").hide();
696 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Currency").
'</td>';
698 $currencycodetouse =
GETPOST(
'multicurrency_code') ?
GETPOST(
'multicurrency_code') : (isset(
$object->fourn_multicurrency_code) ?
$object->fourn_multicurrency_code :
'');
699 if (empty($currencycodetouse) &&
$object->fourn_multicurrency_tx == 1) {
700 $currencycodetouse = $conf->currency;
702 print $form->selectMultiCurrency((
string) $currencycodetouse,
"multicurrency_code", 1);
703 print
' '.$langs->trans(
"CurrencyRate").
' ';
704 print
'<input class="flat width50" name="multicurrency_tx" value="';
705 print
GETPOST(
'multicurrency_tx');
706 $vatratetoshow =
GETPOST(
'multicurrency_tx') ?
GETPOST(
'multicurrency_tx') : (isset(
$object->fourn_multicurrency_tx) ?
$object->fourn_multicurrency_tx :
'');
707 if ($vatratetoshow !==
'') {
715 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMinCurrency"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
716 $pricesupplierincurrencytouse = (
GETPOST(
'multicurrency_price') ?
GETPOST(
'multicurrency_price') : (isset(
$object->fourn_multicurrency_price) ?
$object->fourn_multicurrency_price :
''));
717 print
'<td><input class="flat" name="multicurrency_price" size="8" value="'.price($pricesupplierincurrencytouse).
'">';
719 print $form->selectPriceBaseType((
GETPOST(
'multicurrency_price_base_type') ?
GETPOST(
'multicurrency_price_base_type') :
'HT'),
"multicurrency_price_base_type", 1);
723 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMin"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
724 print
'<td><input class="flat" name="disabled_price" size="8" value="">';
725 print
'<input type="hidden" name="price" value="">';
726 print
'<input type="hidden" name="price_base_type" value="">';
728 print $form->selectPriceBaseType(
'',
"disabled_price_base_type", 1);
731 $currencies = array();
732 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"multicurrency WHERE entity = ".((int) $conf->entity);
733 $resql = $db->query($sql);
736 while ($obj = $db->fetch_object($resql)) {
737 $currency->fetch($obj->rowid);
738 $currencies[$currency->code] = ((float) $currency->rate->rate);
741 $currencies = json_encode($currencies);
742 print
"<!-- javascript to autocalculate the minimum price -->
743 <script type='text/javascript'>
744 function edit_price_from_multicurrency() {
745 console.log('edit_price_from_multicurrency');
746 var multicurrency_price = price2numjs($('input[name=\"multicurrency_price\"]').val());
747 var multicurrency_tx = price2numjs($('input[name=\"multicurrency_tx\"]').val());
748 if (multicurrency_tx != 0) {
749 $('input[name=\"price\"]').val(multicurrency_price / multicurrency_tx);
750 $('input[name=\"disabled_price\"]').val(multicurrency_price / multicurrency_tx);
752 $('input[name=\"price\"]').val('');
753 $('input[name=\"disabled_price\"]').val('');
757 jQuery(document).ready(function () {
758 $('input[name=\"disabled_price\"]').prop('disabled', true);
759 $('select[name=\"disabled_price_base_type\"]').prop('disabled', true);
760 edit_price_from_multicurrency();
762 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').keyup(function () {
763 edit_price_from_multicurrency();
765 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').change(function () {
766 edit_price_from_multicurrency();
768 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').on('paste', function () {
769 edit_price_from_multicurrency();
772 $('select[name=\"multicurrency_price_base_type\"]').change(function () {
773 $('input[name=\"price_base_type\"]').val($(this).val());
774 $('select[name=\"disabled_price_base_type\"]').val($(this).val());
777 var currencies_array = $currencies;
778 $('select[name=\"multicurrency_code\"]').change(function () {
779 console.log(\"We change the currency\");
780 $('input[name=\"multicurrency_tx\"]').val(currencies_array[$(this).val()]);
781 edit_price_from_multicurrency();
787 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceQtyMin").
'</td>';
788 print
'<td><input class="flat" name="price" size="8" value="'.(GETPOST(
'price') ?
price(
GETPOST(
'price')) : (isset(
$object->fourn_price) ?
price(
$object->fourn_price) :
'')).
'">';
790 print $form->selectPriceBaseType((GETPOSTISSET(
'price_base_type') ?
GETPOST(
'price_base_type') :
'HT'),
"price_base_type", 1);
797 print
'<td>'.$langs->trans(
"Charges").
'</td>';
798 print
'<td><input class="flat" name="charges" size="8" value="'.(GETPOST(
'charges') ?
price(
GETPOST(
'charges')) : (isset(
$object->fourn_charges) ?
price((string)
$object->fourn_charges) :
'')).
'">';
804 print
'<tr><td>'.$langs->trans(
"DiscountQtyMin").
'</td>';
805 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(
price2num(
$object->fourn_remise_percent)) :
'')).
'"> %';
811 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
'</td>';
812 print
'<td><input class="flat" name="delivery_time_days" size="4" value="'.(GETPOSTISSET(
'delivery_time_days') ?
GETPOST(
'delivery_time_days') : ($rowid ?
$object->delivery_time_days :
'')).
'"> '.$langs->trans(
'days').
'</td>';
816 print
'<tr><td>'.$langs->trans(
"ReferenceReputation").
'</td><td>';
817 echo $form->selectarray(
'supplier_reputation',
$object->reputations, !empty($supplier_reputation) ? $supplier_reputation :
$object->supplier_reputation);
826 print
'<td>'.$langs->trans(
'GencodBuyPrice').
'</td>';
828 print
img_picto(
'',
'barcode',
'class="pictofixedwidth"');
829 print $formbarcode->selectBarcodeType((GETPOSTISSET(
'fk_barcode_type') ?
GETPOSTINT(
'fk_barcode_type') : ($rowid ?
$object->supplier_fk_barcode_type :
getDolGlobalInt(
"PRODUIT_DEFAULT_BARCODE_TYPE"))),
'fk_barcode_type', 1);
830 print
' <input class="flat" name="barcode" value="'.(GETPOSTISSET(
'barcode') ?
GETPOST(
'barcode') : ($rowid ?
$object->supplier_barcode :
'')).
'"></td>';
837 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
840 print
'<td>'.$langs->trans(
'ProductSupplierDescription').
'</td>';
843 $doleditor =
new DolEditor(
'supplier_description',
$object->desc_supplier,
'', 160,
'dolibarr_details',
'',
false,
true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), ROWS_4,
'90%');
844 $doleditor->Create();
851 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
852 $extralabels = !empty($extrafields->attributes[
"product_fournisseur_price"][
'label']) ? $extrafields->attributes[
"product_fournisseur_price"][
'label'] :
'';
853 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
854 if (!empty($extralabels)) {
856 foreach ($extralabels as $key => $value) {
857 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 ==
"edit_price" && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 4))) {
858 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
859 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
862 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
863 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
864 print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
866 print $langs->trans($value);
868 print
'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] :
'',
'',
'',
'',
'', 0,
'product_fournisseur_price').
'</td></tr>';
873 $sql .=
" fk_object";
874 foreach ($extralabels as $key => $value) {
875 $sql .=
", ".$db->sanitize($key);
877 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
878 $sql .=
" WHERE fk_object = ".((int) $rowid);
879 $resql = $db->query($sql);
881 $obj = $db->fetch_object($resql);
882 foreach ($extralabels as $key => $value) {
883 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 ==
"edit_price" && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 4))) {
884 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
885 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
888 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
889 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
890 print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
892 print $langs->trans($value);
894 print
'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] : $obj->{$key},
'',
'',
'',
'', 0,
'product_fournisseur_price');
904 if (is_object($hookmanager)) {
905 $parameters = array(
'id_fourn' => !empty($id_fourn) ? $id_fourn : 0,
'prod_id' =>
$object->id);
906 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
907 print $hookmanager->resPrint;
914 print
'<div class="center">';
915 print
'<input class="button button-save" type="submit" value="'.$langs->trans(
"Save").
'">';
916 print
' ';
917 print
'<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
920 print
'</form>'.
"\n";
926 print
'<div class="tabsAction">'.
"\n";
928 if ($action !=
'create_price' && $action !=
'edit_price') {
929 $parameters = array();
930 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
931 if (empty($reshook)) {
933 if ($usercancreate) {
934 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/product/price_suppliers.php?id='.((int)
$object->id).
'&action=create_price&token='.
newToken().
'">';
935 print $langs->trans(
"AddSupplierPrice").
'</a>';
937 print
'<a class="butActionRefused" href="#" title="'.$langs->trans(
"NotEnoughPermissions").
'">';
938 print $langs->trans(
"AddSupplierPrice").
'</a>';
946 if ($user->hasRight(
"fournisseur",
"read")) {
948 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
949 $param .=
'&contextpage='.urlencode($contextpage);
951 if ($limit > 0 && $limit != $conf->liste_limit) {
952 $param .=
'&limit='.((int) $limit);
954 $param .=
'&ref='.urlencode(
$object->ref);
957 $product_fourn_list = $product_fourn->list_product_fournisseur_price(
$object->id, $sortfield, $sortorder, $limit, $offset);
958 $product_fourn_list_all = $product_fourn->list_product_fournisseur_price(
$object->id, $sortfield, $sortorder, 0, 0);
959 $nbtotalofrecords = count($product_fourn_list_all);
960 $num = count($product_fourn_list);
961 if (($num + ($offset * $limit)) < $nbtotalofrecords) {
965 print_barre_liste($langs->trans(
'SupplierPrices'), $page, $_SERVER[
'PHP_SELF'], $param, $sortfield, $sortorder,
'', $num, $nbtotalofrecords,
'title_accountancy.png', 0,
'',
'', $limit, 1);
969 $arrayfields = array(
970 'pfp.datec' => array(
'label' => $langs->trans(
"AppliedPricesFrom"),
'checked' =>
'1',
'position' => 1),
971 's.nom' => array(
'label' => $langs->trans(
"Suppliers"),
'checked' =>
'1',
'position' => 2),
972 'pfp.fk_availability' => array(
'label' => $langs->trans(
"Availability"),
'enabled' => (
string)
getDolGlobalInt(
'FOURN_PRODUCT_AVAILABILITY'),
'checked' =>
'0',
'position' => 4),
973 'pfp.quantity' => array(
'label' => $langs->trans(
"QtyMin"),
'checked' =>
'1',
'position' => 5),
974 'pfp.unitprice' => array(
'label' => $langs->trans(
"UnitPriceHT"),
'checked' =>
'1',
'position' => 9),
975 'pfp.multicurrency_unitprice' => array(
'label' => $langs->trans(
"UnitPriceHTCurrency"),
'enabled' => (
string) (
int)
isModEnabled(
'multicurrency'),
'checked' =>
'0',
'position' => 10),
976 'pfp.charges' => array(
'label' => $langs->trans(
"Charges"),
'enabled' =>
getDolGlobalString(
'PRODUCT_CHARGES'),
'checked' =>
'0',
'position' => 11),
977 'pfp.delivery_time_days' => array(
'label' => $langs->trans(
"NbDaysToDelivery"),
'checked' =>
'-1',
'position' => 13),
978 'pfp.supplier_reputation' => array(
'label' => $langs->trans(
"ReputationForThisProduct"),
'checked' =>
'-1',
'position' => 14),
979 'pfp.fk_barcode_type' => array(
'label' => $langs->trans(
"BarcodeType"),
'enabled' => (
string) (
int)
isModEnabled(
'barcode'),
'checked' =>
'0',
'position' => 15),
980 'pfp.barcode' => array(
'label' => $langs->trans(
"BarcodeValue"),
'enabled' => (
string) (
int)
isModEnabled(
'barcode'),
'checked' =>
'0',
'position' => 16),
981 'pfp.packaging' => array(
'label' => $langs->trans(
"PackagingForThisProduct"),
'enabled' => (
string)
getDolGlobalInt(
'PRODUCT_USE_SUPPLIER_PACKAGING'),
'checked' => (
getDolGlobalInt(
'PRODUCT_USE_SUPPLIER_PACKAGING') ?
'1' :
'0'),
'position' => 17),
982 'pfp.price' => array(
'label' => $langs->trans(
"PriceQtyMinHT"),
'enabled' =>
'1',
'checked' =>
'1',
'position' => 60),
983 'pfp.multicurrency_price' => array(
'label' => $langs->trans(
"PriceQtyMinHTCurrency"),
'enabled' => (string) (int)
isModEnabled(
'multicurrency'),
'checked' =>
'1',
'position' => 70),
984 'pfp.tms' => array(
'label' => $langs->trans(
"DateModification"),
'enabled' =>
'1',
'checked' =>
'-1',
'position' => 80),
985 'pfp.status' => array(
'label' => $langs->trans(
"Status"),
'enabled' =>
'1',
'checked' =>
'0',
'position' => 200),
989 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
990 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
991 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
993 if (!empty($extralabels)) {
994 foreach ($extralabels as $key => $value) {
996 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
997 $extratitle = $langs->trans($value);
998 $arrayfields[
'ef.' . $key] = array(
'label' => $extratitle,
'checked' =>
'0',
999 'position' => (end($arrayfields)[
'position'] + 1),
1000 'langfile' => $extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key],
1001 'help' => $extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]);
1008 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
1010 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
1011 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
1013 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post" name="formulaire">';
1014 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1015 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
1016 print
'<input type="hidden" name="action" value="list">';
1017 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
1018 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
1021 print
'<!-- List of supplier prices -->'.
"\n";
1022 print
'<div class="div-table-responsive">';
1023 print
'<table class="liste centpercent noborder">';
1025 $param =
"&id=".$object->id;
1029 print
'<tr class="liste_titre">';
1033 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch actioncolumn ');
1036 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1037 print_liste_field_titre(
"AppliedPricesFrom", $_SERVER[
"PHP_SELF"],
"pfp.datec",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1040 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1041 print_liste_field_titre(
"Suppliers", $_SERVER[
"PHP_SELF"],
"s.nom",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1044 print_liste_field_titre(
"SupplierRef", $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1046 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1047 print_liste_field_titre(
"Availability", $_SERVER[
"PHP_SELF"],
"pfp.fk_availability",
"", $param,
"", $sortfield, $sortorder);
1050 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1051 print_liste_field_titre(
"QtyMin", $_SERVER[
"PHP_SELF"],
"pfp.quantity",
"", $param,
'', $sortfield, $sortorder,
'right ');
1054 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1056 if (!empty($arrayfields[
'pfp.price'][
'checked'])) {
1057 print_liste_field_titre(
"PriceQtyMinHT", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1060 if (
isModEnabled(
"multicurrency") && !empty($arrayfields[
'pfp.multicurrency_price'][
'checked'])) {
1061 print_liste_field_titre(
"PriceQtyMinHTCurrency", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1064 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1065 print_liste_field_titre(
"UnitPriceHT", $_SERVER[
"PHP_SELF"],
"pfp.unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1068 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1069 print_liste_field_titre(
"UnitPriceHTCurrency", $_SERVER[
"PHP_SELF"],
"pfp.multicurrency_unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1073 print_liste_field_titre(
"Currency", $_SERVER[
"PHP_SELF"],
"",
"", $param,
'', $sortfield, $sortorder,
'right ');
1076 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1077 print_liste_field_titre(
"Charges", $_SERVER[
"PHP_SELF"],
"pfp.charges",
"", $param,
'', $sortfield, $sortorder,
'right ');
1080 print_liste_field_titre(
"DiscountQtyMin", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1082 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1083 print_liste_field_titre(
"NbDaysToDelivery", $_SERVER[
"PHP_SELF"],
"pfp.delivery_time_days",
"", $param,
'', $sortfield, $sortorder,
'right ');
1086 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1087 print_liste_field_titre(
"ReputationForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.supplier_reputation",
"", $param,
'', $sortfield, $sortorder,
'center ');
1090 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1091 print_liste_field_titre(
"BarcodeType", $_SERVER[
"PHP_SELF"],
"pfp.fk_barcode_type",
"", $param,
'', $sortfield, $sortorder,
'center ');
1094 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1095 print_liste_field_titre(
"BarcodeValue", $_SERVER[
"PHP_SELF"],
"pfp.barcode",
"", $param,
'', $sortfield, $sortorder,
'center ');
1098 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1099 print_liste_field_titre(
"PackagingForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.packaging",
"", $param,
'', $sortfield, $sortorder,
'center ');
1102 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1103 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"pfp.status",
"", $param,
'', $sortfield, $sortorder,
'center ',
'', 1);
1106 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1107 print_liste_field_titre(
"DateModification", $_SERVER[
"PHP_SELF"],
"pfp.tms",
"", $param,
'', $sortfield, $sortorder,
'right ',
'', 1);
1112 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
1113 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
1114 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
1116 if (!empty($extralabels)) {
1117 foreach ($extralabels as $key => $value) {
1119 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1120 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
1121 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
1123 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
1124 $extratitle = $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
1126 $extratitle = $langs->trans($value);
1128 if (!empty($arrayfields[
'ef.' . $key][
'checked'])) {
1129 print_liste_field_titre($extratitle, $_SERVER[
"PHP_SELF"],
'ef.' . $key,
'', $param,
'', $sortfield, $sortorder,
'right ');
1137 if (is_object($hookmanager)) {
1138 $parameters = array(
'id_fourn' => (!empty($id_fourn) ? $id_fourn :
''),
'prod_id' =>
$object->id,
'nbfields' => $nbfields);
1139 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
1142 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'maxwidthsearch center ');
1147 if (is_array($product_fourn_list)) {
1148 foreach ($product_fourn_list as $productfourn) {
1149 print
'<tr class="oddeven">';
1153 print
'<td class="center nowraponall">';
1155 if ($usercancreate) {
1156 print
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.((int)
$object->id).
'&socid='.((int) $productfourn->fourn_id).
'&action=edit_price&token='.
newToken().
'&rowid='.((int) $productfourn->product_fourn_price_id).
'">'.
img_edit().
"</a>";
1158 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>';
1165 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1166 print
'<td>'.dol_print_date(($productfourn->fourn_date_creation ? $productfourn->fourn_date_creation : $productfourn->date_creation),
'dayhour',
'tzuserrel').
'</td>';
1170 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1171 print
'<td class="tdoverflowmax150">'.$productfourn->getSocNomUrl(1,
'supplier').
'</td>';
1175 if ($usercancreate) {
1176 print
'<td class="tdoverflowmax150">'.$productfourn->getNomUrl().
'</td>';
1178 print
'<td class="tdoverflowmax150">'.dol_escape_htmltag($productfourn->fourn_ref).
'</td>';
1182 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1183 $form->load_cache_availability();
1184 $availability = $form->cache_availability[$productfourn->fk_availability][
'label'];
1185 print
'<td class="left">'.$availability.
'</td>';
1189 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1190 print
'<td class="right">';
1194 $unit =
$object->getLabelOfUnit(
'long', $langs);
1196 print
' '.$unit;
1203 print
'<td class="right">';
1204 print
vatrate($productfourn->fourn_tva_tx,
true);
1208 if (!empty($arrayfields[
'pfp.price'][
'checked'])) {
1209 print
'<td class="right">';
1210 print $productfourn->fourn_price ?
'<span class="amount">'.price($productfourn->fourn_price).
'</span>' :
"";
1214 if (
isModEnabled(
"multicurrency") && !empty($arrayfields[
'pfp.multicurrency_price'][
'checked'])) {
1216 print
'<td class="right">';
1217 print $productfourn->fourn_multicurrency_price ?
'<span class="amount">'.price($productfourn->fourn_multicurrency_price).
'</span>' :
"";
1222 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1223 print
'<td class="right">';
1224 print
price($productfourn->fourn_unitprice);
1230 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1231 print
'<td class="right">';
1232 print
price($productfourn->fourn_multicurrency_unitprice);
1238 print
'<td class="right nowraponall">';
1239 print $productfourn->fourn_multicurrency_code ?
currency_name($productfourn->fourn_multicurrency_code) :
'';
1244 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1245 print
'<td class="right">';
1246 print
price((
string) $productfourn->fourn_charges);
1251 print
'<td class="right">';
1252 print
price2num($productfourn->fourn_remise_percent).
'%';
1256 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1257 print
'<td class="right">';
1258 print $productfourn->delivery_time_days;
1263 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1264 print
'<td class="center">';
1265 if (!empty($productfourn->supplier_reputation) && !empty(
$object->reputations[$productfourn->supplier_reputation])) {
1266 print
$object->reputations[$productfourn->supplier_reputation];
1272 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1273 print
'<td class="center">';
1274 $productfourn->barcode_type = !empty($productfourn->supplier_fk_barcode_type) ? $productfourn->supplier_fk_barcode_type : 0;
1275 $productfourn->fetchBarCode();
1276 print $productfourn->barcode_type_label ? $productfourn->barcode_type_label : ($productfourn->supplier_barcode ?
'<div class="warning">'.$langs->trans(
"SetDefaultBarcodeType").
'<div>' :
'');
1281 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1282 print
'<td class="right">';
1283 print $productfourn->supplier_barcode;
1288 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1289 print
'<td class="center">';
1290 print
price2num($productfourn->packaging);
1295 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1296 print
'<td class="center">';
1297 print $productfourn->getLibStatut(3);
1302 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1303 print
'<td class="right nowraponall">';
1304 print
dol_print_date(($productfourn->fourn_date_modification ? $productfourn->fourn_date_modification : $productfourn->date_modification),
"dayhour",
"tzuserrel");
1309 if (!empty($extralabels)) {
1311 $sql .=
" fk_object";
1312 foreach ($extralabels as $key => $value) {
1313 $sql .=
", ".$db->sanitize($key);
1315 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
1316 $sql .=
" WHERE fk_object = ".((int) $productfourn->product_fourn_price_id);
1317 $resql = $db->query($sql);
1319 if ($db->num_rows($resql) != 1) {
1320 foreach ($extralabels as $key => $value) {
1321 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1326 $obj = $db->fetch_object($resql);
1327 foreach ($extralabels as $key => $value) {
1328 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1329 print
'<td align="right">'.$extrafields->showOutputField($key, $obj->{$key},
'',
'product_fournisseur_price').
"</td>";
1337 if (is_object($hookmanager)) {
1338 $parameters = array(
'id_pfp' => $productfourn->product_fourn_price_id,
'id_fourn' => (!empty($id_fourn) ? $id_fourn :
''),
'prod_id' =>
$object->id);
1339 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
1344 print
'<td class="center nowraponall">';
1346 if ($usercancreate) {
1347 print
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.((int)
$object->id).
'&socid='.((int) $productfourn->fourn_id).
'&action=edit_price&token='.
newToken().
'&rowid='.((int) $productfourn->product_fourn_price_id).
'">'.
img_edit().
"</a>";
1349 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>';
1358 if (empty($product_fourn_list)) {
1359 print
'<tr><td colspan="'.$nbfields.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
1371 print $langs->trans(
"ErrorUnknown");
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage a WYSIWYG editor.
Class to manage suppliers.
Class for accessing 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=0, $outputlangs=null)
Return label of currency or code+label.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dolPrintHTML($s, $allowiframe=0)
Return a string (that can be on several lines) ready to be output on a HTML page.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
currentToken()
Return the value of token currently saved into session with name 'token'.
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.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
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.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
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 a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify 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.