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')) {
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;
90if (!$user->hasRight(
'fournisseur',
'lire') && (!isModEnabled(
'margin') && !$user->hasRight(
"margin",
"liretous"))) {
95$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
96$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
98if (empty($page) || $page == -1) {
101$offset = $limit * $page;
102$pageprev = $page - 1;
103$pagenext = $page + 1;
105 $sortfield =
"s.nom";
112$hookmanager->initHooks(array(
'pricesuppliercard',
'globalcard'));
116if ($id > 0 || $ref) {
118 $prod->fetch($id, $ref);
125 if (
$object->type == $object::TYPE_PRODUCT) {
128 if (
$object->type == $object::TYPE_SERVICE) {
132 restrictedArea($user,
'produit|service', $fieldvalue,
'product&product',
'',
'', $fieldtype);
144$parameters = array(
'socid'=>$socid,
'id_prod'=>$id);
145$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
150if (empty($reshook)) {
151 if ($action ==
'setcost_price' && $usercancreate) {
156 $object->cost_price = $cost_price;
167 if ($action ==
'setpmp' && $usercancreate) {
171 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET pmp = ".((float)
$object->pmp).
" WHERE rowid = ".((int) $id);
172 $resql = $db->query($sql);
184 if ($action ==
'confirm_remove_pf' && $usercancreate) {
187 $result =
$object->remove_product_fournisseur_price($rowid);
189 $db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields WHERE fk_object = ".((
int) $rowid));
198 if ($action ==
'save_price' && $usercancreate) {
199 $ref_fourn_price_id =
GETPOSTINT(
'ref_fourn_price_id');
200 $id_fourn =
GETPOST(
"id_fourn");
201 if (empty($id_fourn)) {
202 $id_fourn =
GETPOST(
"search_id_fourn");
204 $ref_fourn =
GETPOST(
"ref_fourn");
205 if (empty($ref_fourn)) {
206 $ref_fourn =
GETPOST(
"search_ref_fourn");
208 $ref_fourn_old =
GETPOST(
"ref_fourn_old");
209 if (empty($ref_fourn_old)) {
210 $ref_fourn_old = $ref_fourn;
215 $npr = preg_match(
'/\*/',
GETPOST(
'tva_tx',
'alpha')) ? 1 : 0;
216 $tva_tx = str_replace(
'*',
'',
GETPOST(
'tva_tx',
'alpha'));
217 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
223 $supplier_reputation =
GETPOST(
'supplier_reputation');
224 $supplier_description =
GETPOST(
'supplier_description',
'restricthtml');
225 $barcode =
GETPOST(
'barcode',
'alpha');
226 $fk_barcode_type =
GETPOSTINT(
'fk_barcode_type');
231 $langs->load(
"errors");
232 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
234 if (!is_numeric($tva_tx)) {
236 $langs->load(
"errors");
237 setEventMessages($langs->trans(
"ErrorFieldMustBeANumeric", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
239 if (empty($quantity)) {
241 $langs->load(
"errors");
242 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Qty")),
null,
'errors');
244 if (empty($ref_fourn)) {
246 $langs->load(
"errors");
247 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefSupplier")),
null,
'errors');
249 if ($id_fourn <= 0) {
251 $langs->load(
"errors");
252 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Supplier")),
null,
'errors');
255 if ($price_expression ===
'') {
257 $langs->load(
"errors");
258 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Price")),
null,
'errors');
263 if (isModEnabled(
"multicurrency")) {
264 if (!
GETPOST(
"multicurrency_code")) {
266 $langs->load(
"errors");
267 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Currency")),
null,
'errors');
271 $langs->load(
"errors");
272 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CurrencyRate")),
null,
'errors');
276 $langs->load(
"errors");
277 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"PriceCurrency")),
null,
'errors');
284 if (empty($ref_fourn_price_id)) {
285 $ret =
$object->add_fournisseur($user, $id_fourn, $ref_fourn_old, $quantity);
290 $tmpobject->fetch(
$object->product_id_already_linked);
291 $productLink = $tmpobject->getNomUrl(1,
'supplier');
293 $texttoshow = $langs->trans(
"ReferenceSupplierIsAlreadyAssociatedWithAProduct",
'{s1}');
294 $texttoshow = str_replace(
'{s1}', $productLink, $texttoshow);
296 } elseif ($ret < 0) {
304 $result = $supplier->fetch($id_fourn);
305 if (GETPOSTISSET(
'ref_fourn_price_id')) {
306 $object->fetch_product_fournisseur_price($ref_fourn_price_id);
308 $extralabels = $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
309 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
313 if (empty($packaging)) {
320 $object->packaging = $packaging;
322 if (isModEnabled(
"multicurrency")) {
324 $multicurrency_price =
GETPOSTFLOAT(
"multicurrency_price");
325 $multicurrency_code =
GETPOST(
"multicurrency_code",
'alpha');
327 $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);
329 $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);
335 if (isModEnabled(
'dynamicprices') && $price_expression !==
'') {
337 require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_parser.class.php';
339 $object->fk_supplier_price_expression = $price_expression;
340 $price_result = $priceparser->parseProductSupplier($object);
341 if ($price_result < 0) {
346 if (!$error && isModEnabled(
'dynamicprices')) {
348 $ret =
$object->setSupplierPriceExpression($price_expression);
364 $action =
'create_price';
374$form =
new Form($db);
376$title = $langs->trans(
'ProductServiceCard');
380 $title = $langs->trans(
'Product').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
381 $helpurl =
'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte';
384 $title = $langs->trans(
'Service').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
385 $helpurl =
'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Lesitungen';
388llxHeader(
'', $title, $helpurl,
'', 0, 0,
'',
'',
'',
'classforhorizontalscrolloftabs mod-product page-price_suppliers');
390if ($id > 0 || $ref) {
392 if ($action ==
'ask_remove_pf') {
393 $form =
new Form($db);
394 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$id.
'&rowid='.$rowid, $langs->trans(
'DeleteProductBuyPrice'), $langs->trans(
'ConfirmDeleteProductBuyPrice'),
'confirm_remove_pf',
'', 0, 1);
398 if ($action !=
'edit' && $action !=
're-edit') {
400 $titre = $langs->trans(
"CardProduct".
$object->type);
405 $linkback =
'<a href="'.DOL_URL_ROOT.
'/product/list.php?restore_lastsearch_values=1&type='.
$object->type.
'">'.$langs->trans(
"BackToList").
'</a>';
406 $object->next_prev_filter =
"fk_product_type:=:".((int)
$object->type);
409 if ($user->socid && !in_array(
'product', explode(
',',
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL')))) {
413 dol_banner_tab($prod,
'ref', $linkback, $shownav,
'ref');
415 print
'<div class="fichecenter">';
417 print
'<div class="underbanner clearboth"></div>';
418 print
'<table class="border tableforfield centpercent">';
421 if (isModEnabled(
"product") && isModEnabled(
"service")) {
422 $typeformat =
'select;0:'.$langs->trans(
"Product").
',1:'.$langs->trans(
"Service");
423 print
'<tr><td class="">';
424 print (!
getDolGlobalString(
'PRODUCT_DENY_CHANGE_PRODUCT_TYPE')) ? $form->editfieldkey(
"Type",
'fk_product_type',
$object->type, $object, 0, $typeformat) : $langs->trans(
'Type');
426 print $form->editfieldval(
"Type",
'fk_product_type',
$object->type, $object, 0, $typeformat);
432 $textdesc = $langs->trans(
"CostPriceDescription");
433 $textdesc .=
"<br>".$langs->trans(
"CostPriceUsage");
434 $text = $form->textwithpicto($langs->trans(
"CostPrice"), $textdesc, 1,
'help',
'');
435 print $form->editfieldkey($text,
'cost_price',
$object->cost_price, $object, $usercancreate,
'amount:6');
437 print $form->editfieldval($text,
'cost_price',
$object->cost_price, $object, $usercancreate,
'amount:6');
443 $usercaneditpmp = $usercancreate;
445 print
'<tr><td class="titlefieldcreate">';
446 $textdesc = $langs->trans(
"AverageUnitPricePMPDesc");
447 $text = $form->textwithpicto($langs->trans(
"AverageUnitPricePMPShort"), $textdesc, 1,
'help',
'');
448 print $form->editfieldkey($text,
'pmp',
$object->pmp, $object, $usercaneditpmp,
'amount:6');
450 print $form->editfieldval($text,
'pmp', (
$object->pmp > 0 ?
$object->pmp :
''),
$object, $usercaneditpmp,
'amount:6');
452 print
' '.$langs->trans(
"HT");
464 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"BuyingPriceMin").
'</td>';
467 if ($product_fourn->find_min_price_product_fournisseur(
$object->id) > 0) {
468 if ($product_fourn->product_fourn_price_id > 0) {
469 print $product_fourn->display_price_product_fournisseur();
471 print $langs->trans(
"NotDefined");
479 print
'<div class="clearboth"></div>';
485 if (($action ==
'create_price' || $action ==
'edit_price') && $usercancreate) {
486 $langs->load(
"suppliers");
488 print
"<!-- form to add a supplier price -->\n";
492 $object->fetch_product_fournisseur_price($rowid, 1);
498 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'" method="POST">';
499 print
'<input type="hidden" name="token" value="'.newToken().
'">';
500 print
'<input type="hidden" name="action" value="save_price">';
504 print
'<table class="border centpercent">';
507 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
"Supplier").
'</td><td>';
510 $supplier->fetch($socid);
511 print $supplier->getNomUrl(1);
512 print
'<input type="hidden" name="id_fourn" value="'.$socid.
'">';
513 print
'<input type="hidden" name="ref_fourn_price_id" value="'.$rowid.
'">';
514 print
'<input type="hidden" name="rowid" value="'.$rowid.
'">';
515 print
'<input type="hidden" name="socid" value="'.$socid.
'">';
518 $events[] = array(
'method' =>
'getVatRates',
'url' =>
dol_buildpath(
'/core/ajax/vatrates.php', 1),
'htmlname' =>
'tva_tx',
'params' => array());
519 $filter =
'(fournisseur:=:1) AND (status:=:1)';
520 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
GETPOST(
"id_fourn",
'alpha'),
'id_fourn', $filter, $langs->transnoentitiesnoconv(
'SelectThirdParty'), 0, 0, $events);
522 $parameters = array(
'filter'=>$filter,
'html_name'=>
'id_fourn',
'selected'=>
GETPOST(
"id_fourn"),
'showempty'=>1,
'prod_id'=>
$object->id);
523 $reshook = $hookmanager->executeHooks(
'formCreateThirdpartyOptions', $parameters, $object, $action);
524 if (empty($reshook)) {
525 if (empty($form->result)) {
526 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() :
'')).
'">';
527 print
img_picto($langs->trans(
"CreateDolibarrThirdPartySupplier"),
'add',
'class="marginleftonly"');
531 print
'<script type="text/javascript">
532 $(document).ready(function () {
533 console.log("Requesting default VAT rate for the supplier...")
534 $("#search_id_fourn").change(load_vat)
536 function load_vat() {
538 let socid = $("#id_fourn")[0].value
540 // load available VAT rates
541 let vat_url = "'.dol_buildpath(
'/core/ajax/vatrates.php', 1).
'"
542 // make GET request with params
544 options += "id=" + socid
545 options += "&htmlname=tva_tx"
547 options += "&action=getBuyerVATRates" // not defined in vatrates.php, default behavior.
553 rate_options = $.parseHTML(data.value)
554 rate_options.forEach(opt => {
556 replaceVATWithSupplierValue(opt.value);
564 function replaceVATWithSupplierValue(vat_rate) {
565 console.log("Default VAT rate for the supplier: " + vat_rate + "%")
566 $("[name=\'tva_tx\']")[0].value = vat_rate;
573 print
'<tr><td class="fieldrequired">'.$langs->trans(
"SupplierRef").
'</td><td>';
575 print
'<input type="hidden" name="ref_fourn_old" value="'.$object->ref_supplier.
'">';
576 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.$object->ref_supplier.
'">';
578 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.(GETPOST(
"ref_fourn") ?
GETPOST(
"ref_fourn") :
'').
'">';
585 $langs->load(
"propal");
586 print
'<tr><td>'.$langs->trans(
"Availability").
'</td><td>';
587 $form->selectAvailabilityDelay(
$object->fk_availability,
"oselDispo", 1);
588 print
'</td></tr>'.
"\n";
593 print
'<td class="fieldrequired">'.$langs->trans(
"QtyMin").
'</td>';
595 $quantity = GETPOSTISSET(
'qty') ?
price2num(
GETPOST(
'qty',
'alphanohtml'),
'MS') :
"1";
597 print
'<input type="hidden" name="qty" value="'.$object->fourn_qty.
'">';
600 print
'<input class="flat" name="qty" size="5" value="'.$quantity.
'">';
604 $unit =
$object->getLabelOfUnit();
606 print
' '.$langs->trans($unit);
615 print
'<td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PackagingForThisProduct"), $langs->trans(
"PackagingForThisProductDesc")).
'</td>';
617 $packaging = GETPOSTISSET(
'packaging') ?
price2num(
GETPOST(
'packaging',
'alphanohtml'),
'MS') : ((empty($rowid)) ?
"1" :
price2num(
$object->packaging,
'MS'));
618 print
'<input class="flat" name="packaging" size="5" value="'.$packaging.
'">';
622 $unit =
$object->getLabelOfUnit();
624 print
' '.$langs->trans($unit);
633 $mysoc2 = clone $mysoc;
634 $mysoc2->name =
'Fictive seller with same country';
635 $mysoc2->tva_assuj = 1;
638 if (empty($default_vat)) {
639 $default_npr = $default_vat;
642 print
'<tr><td class="fieldrequired">'.$langs->trans(
"VATRateForSupplierProduct").
'</td>';
645 if (!empty($rowid)) {
647 $tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1);
648 $default_vat = $tmpproductsupplier->fourn_tva_tx;
649 $default_npr = $tmpproductsupplier->fourn_tva_npr;
651 if (empty($default_vat)) {
652 $default_vat =
$object->tva_tx;
655 $vattosuggest = (GETPOSTISSET(
"tva_tx") ?
vatrate(
GETPOST(
"tva_tx")) : ($default_vat !=
'' ?
vatrate($default_vat) :
''));
656 $vattosuggest = preg_replace(
'/\s*\(.*\)$/',
'', $vattosuggest);
657 print
'<input type="text" class="flat" size="5" name="tva_tx" value="'.$vattosuggest.
'">';
660 if (isModEnabled(
'dynamicprices')) {
662 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceMode").
'</td><td>';
664 $price_expression_list = array(0 => $langs->trans(
"PriceNumeric"));
665 foreach ($price_expression->list_price_expression() as $entry) {
666 $price_expression_list[$entry->id] = $entry->title;
668 $price_expression_preselection =
GETPOST(
'eid') ?
GETPOST(
'eid') : (
$object->fk_supplier_price_expression ?
$object->fk_supplier_price_expression :
'0');
669 print $form->selectarray(
'eid', $price_expression_list, $price_expression_preselection);
670 print
' <div id="expression_editor" class="button smallpaddingimp">'.$langs->trans(
"PriceExpressionEditor").
'</div>';
673 print
'<script type="text/javascript">
674 jQuery(document).ready(run);
676 jQuery("#expression_editor").click(on_click);
677 jQuery("#eid").change(on_change);
680 function on_click() {
681 window.location = "'.DOL_URL_ROOT.
'/product/dynamic_price/editor.php?id='.
$id.
'&tab=fournisseurs&eid=" + $("#eid").val();
683 function on_change() {
684 if ($("#eid").val() == 0) {
685 jQuery("#price_numeric").show();
687 jQuery("#price_numeric").hide();
693 if (isModEnabled(
"multicurrency")) {
695 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Currency").
'</td>';
697 $currencycodetouse =
GETPOST(
'multicurrency_code') ?
GETPOST(
'multicurrency_code') : (isset(
$object->fourn_multicurrency_code) ?
$object->fourn_multicurrency_code :
'');
698 if (empty($currencycodetouse) &&
$object->fourn_multicurrency_tx == 1) {
699 $currencycodetouse =
$conf->currency;
701 print $form->selectMultiCurrency($currencycodetouse,
"multicurrency_code", 1);
702 print
' '.$langs->trans(
"CurrencyRate").
' ';
703 print
'<input class="flat width50" name="multicurrency_tx" value="';
704 print
GETPOST(
'multicurrency_tx');
705 $vatratetoshow =
GETPOST(
'multicurrency_tx') ?
GETPOST(
'multicurrency_tx') : (isset(
$object->fourn_multicurrency_tx) ?
$object->fourn_multicurrency_tx :
'');
706 if ($vatratetoshow !==
'') {
714 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMinCurrency"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
715 $pricesupplierincurrencytouse = (
GETPOST(
'multicurrency_price') ?
GETPOST(
'multicurrency_price') : (isset(
$object->fourn_multicurrency_price) ?
$object->fourn_multicurrency_price :
''));
716 print
'<td><input class="flat" name="multicurrency_price" size="8" value="'.price($pricesupplierincurrencytouse).
'">';
718 print $form->selectPriceBaseType((
GETPOST(
'multicurrency_price_base_type') ?
GETPOST(
'multicurrency_price_base_type') :
'HT'),
"multicurrency_price_base_type", 1);
722 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMin"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
723 print
'<td><input class="flat" name="disabled_price" size="8" value="">';
724 print
'<input type="hidden" name="price" value="">';
725 print
'<input type="hidden" name="price_base_type" value="">';
727 print $form->selectPriceBaseType(
'',
"disabled_price_base_type", 1);
730 $currencies = array();
731 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"multicurrency WHERE entity = ".((int)
$conf->entity);
732 $resql = $db->query($sql);
735 while ($obj = $db->fetch_object($resql)) {
736 $currency->fetch($obj->rowid);
737 $currencies[$currency->code] = ((float) $currency->rate->rate);
740 $currencies = json_encode($currencies);
741 print
"<!-- javascript to autocalculate the minimum price -->
742 <script type='text/javascript'>
743 function edit_price_from_multicurrency() {
744 console.log('edit_price_from_multicurrency');
745 var multicurrency_price = price2numjs($('input[name=\"multicurrency_price\"]').val());
746 var multicurrency_tx = price2numjs($('input[name=\"multicurrency_tx\"]').val());
747 if (multicurrency_tx != 0) {
748 $('input[name=\"price\"]').val(multicurrency_price / multicurrency_tx);
749 $('input[name=\"disabled_price\"]').val(multicurrency_price / multicurrency_tx);
751 $('input[name=\"price\"]').val('');
752 $('input[name=\"disabled_price\"]').val('');
756 jQuery(document).ready(function () {
757 $('input[name=\"disabled_price\"]').prop('disabled', true);
758 $('select[name=\"disabled_price_base_type\"]').prop('disabled', true);
759 edit_price_from_multicurrency();
761 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').keyup(function () {
762 edit_price_from_multicurrency();
764 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').change(function () {
765 edit_price_from_multicurrency();
767 $('input[name=\"multicurrency_price\"], input[name=\"multicurrency_tx\"]').on('paste', function () {
768 edit_price_from_multicurrency();
771 $('select[name=\"multicurrency_price_base_type\"]').change(function () {
772 $('input[name=\"price_base_type\"]').val($(this).val());
773 $('select[name=\"disabled_price_base_type\"]').val($(this).val());
776 var currencies_array = $currencies;
777 $('select[name=\"multicurrency_code\"]').change(function () {
778 console.log(\"We change the currency\");
779 $('input[name=\"multicurrency_tx\"]').val(currencies_array[$(this).val()]);
780 edit_price_from_multicurrency();
786 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceQtyMin").
'</td>';
787 print
'<td><input class="flat" name="price" size="8" value="'.(GETPOST(
'price') ?
price(
GETPOST(
'price')) : (isset(
$object->fourn_price) ?
price(
$object->fourn_price) :
'')).
'">';
789 print $form->selectPriceBaseType((GETPOSTISSET(
'price_base_type') ?
GETPOST(
'price_base_type') :
'HT'),
"price_base_type", 1);
796 print
'<td>'.$langs->trans(
"Charges").
'</td>';
797 print
'<td><input class="flat" name="charges" size="8" value="'.(GETPOST(
'charges') ?
price(
GETPOST(
'charges')) : (isset(
$object->fourn_charges) ?
price(
$object->fourn_charges) :
'')).
'">';
803 print
'<tr><td>'.$langs->trans(
"DiscountQtyMin").
'</td>';
804 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)) :
'')).
'"> %';
810 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
'</td>';
811 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>';
815 print
'<tr><td>'.$langs->trans(
"ReferenceReputation").
'</td><td>';
816 echo $form->selectarray(
'supplier_reputation',
$object->reputations, !empty($supplier_reputation) ? $supplier_reputation :
$object->supplier_reputation);
820 if (isModEnabled(
'barcode')) {
825 print
'<td>'.$langs->trans(
'GencodBuyPrice').
'</td>';
827 print
img_picto(
'',
'barcode',
'class="pictofixedwidth"');
828 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);
829 print
' <input class="flat" name="barcode" value="'.(GETPOSTISSET(
'barcode') ?
GETPOST(
'barcode') : ($rowid ?
$object->supplier_barcode :
'')).
'"></td>';
836 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
839 print
'<td>'.$langs->trans(
'ProductSupplierDescription').
'</td>';
842 $doleditor =
new DolEditor(
'supplier_description',
$object->desc_supplier,
'', 160,
'dolibarr_details',
'',
false,
true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), ROWS_4,
'90%');
843 $doleditor->Create();
850 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
851 $extralabels = !empty($extrafields->attributes[
"product_fournisseur_price"][
'label']) ? $extrafields->attributes[
"product_fournisseur_price"][
'label'] :
'';
852 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
853 if (!empty($extralabels)) {
855 foreach ($extralabels as $key => $value) {
856 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))) {
857 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
858 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
861 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
862 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
863 print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
865 print $langs->trans($value);
867 print
'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] :
'',
'',
'',
'',
'', 0,
'product_fournisseur_price').
'</td></tr>';
872 $sql .=
" fk_object";
873 foreach ($extralabels as $key => $value) {
876 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
877 $sql .=
" WHERE fk_object = ".((int) $rowid);
878 $resql = $db->query($sql);
880 $obj = $db->fetch_object($resql);
881 foreach ($extralabels as $key => $value) {
882 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))) {
883 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
884 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
887 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
888 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
889 print $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
891 print $langs->trans($value);
893 print
'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] : $obj->{$key},
'',
'',
'',
'', 0,
'product_fournisseur_price');
903 if (is_object($hookmanager)) {
904 $parameters = array(
'id_fourn'=>!empty($id_fourn) ? $id_fourn : 0,
'prod_id'=>
$object->id);
905 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
906 print $hookmanager->resPrint;
913 print
'<div class="center">';
914 print
'<input class="button button-save" type="submit" value="'.$langs->trans(
"Save").
'">';
915 print
' ';
916 print
'<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
919 print
'</form>'.
"\n";
925 print
'<div class="tabsAction">'.
"\n";
927 if ($action !=
'create_price' && $action !=
'edit_price') {
928 $parameters = array();
929 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
930 if (empty($reshook)) {
931 if ($usercancreate) {
932 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/product/price_suppliers.php?id='.((int)
$object->id).
'&action=create_price&token='.
newToken().
'">';
933 print $langs->trans(
"AddSupplierPrice").
'</a>';
940 if ($user->hasRight(
"fournisseur",
"read")) {
942 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
943 $param .=
'&contextpage='.urlencode($contextpage);
945 if ($limit > 0 && $limit !=
$conf->liste_limit) {
946 $param .=
'&limit='.((int) $limit);
948 $param .=
'&ref='.urlencode(
$object->ref);
951 $product_fourn_list = $product_fourn->list_product_fournisseur_price(
$object->id, $sortfield, $sortorder, $limit, $offset);
952 $product_fourn_list_all = $product_fourn->list_product_fournisseur_price(
$object->id, $sortfield, $sortorder, 0, 0);
953 $nbtotalofrecords = count($product_fourn_list_all);
954 $num = count($product_fourn_list);
955 if (($num + ($offset * $limit)) < $nbtotalofrecords) {
959 print_barre_liste($langs->trans(
'SupplierPrices'), $page, $_SERVER[
'PHP_SELF'], $param, $sortfield, $sortorder,
'', $num, $nbtotalofrecords,
'title_accountancy.png', 0,
'',
'', $limit, 1);
963 $arrayfields = array(
964 'pfp.datec'=>array(
'label'=>$langs->trans(
"AppliedPricesFrom"),
'checked'=>1,
'position'=>1),
965 's.nom'=>array(
'label'=>$langs->trans(
"Suppliers"),
'checked'=>1,
'position'=>2),
966 'pfp.fk_availability'=>array(
'label'=>$langs->trans(
"Availability"),
'enabled' =>
getDolGlobalInt(
'FOURN_PRODUCT_AVAILABILITY'),
'checked'=>0,
'position'=>4),
967 'pfp.quantity'=>array(
'label'=>$langs->trans(
"QtyMin"),
'checked'=>1,
'position'=>5),
968 'pfp.unitprice'=>array(
'label'=>$langs->trans(
"UnitPriceHT"),
'checked'=>1,
'position'=>9),
969 'pfp.multicurrency_unitprice'=>array(
'label'=>$langs->trans(
"UnitPriceHTCurrency"),
'enabled' => isModEnabled(
'multicurrency'),
'checked'=>0,
'position'=>10),
970 'pfp.charges'=>array(
'label'=>$langs->trans(
"Charges"),
'enabled' =>
getDolGlobalString(
'PRODUCT_CHARGES'),
'checked'=>0,
'position'=>11),
971 'pfp.delivery_time_days'=>array(
'label'=>$langs->trans(
"NbDaysToDelivery"),
'checked'=>-1,
'position'=>13),
972 'pfp.supplier_reputation'=>array(
'label'=>$langs->trans(
"ReputationForThisProduct"),
'checked'=>-1,
'position'=>14),
973 'pfp.fk_barcode_type'=>array(
'label'=>$langs->trans(
"BarcodeType"),
'enabled' => isModEnabled(
'barcode'),
'checked'=>0,
'position'=>15),
974 'pfp.barcode'=>array(
'label'=>$langs->trans(
"BarcodeValue"),
'enabled' => isModEnabled(
'barcode'),
'checked'=>0,
'position'=>16),
975 'pfp.packaging'=>array(
'label'=>$langs->trans(
"PackagingForThisProduct"),
'enabled' =>
getDolGlobalInt(
'PRODUCT_USE_SUPPLIER_PACKAGING'),
'checked'=>0,
'position'=>17),
976 'pfp.status'=>array(
'label'=>$langs->trans(
"Status"),
'enabled' => 1,
'checked'=>0,
'position'=>40),
977 'pfp.tms'=>array(
'label'=>$langs->trans(
"DateModification"),
'enabled' => isModEnabled(
'barcode'),
'checked'=>1,
'position'=>50),
978 'pfp.price'=>array(
'label'=>$langs->trans(
"PriceQtyMinHT"),
'checked'=>1,
'position'=>60),
979 'pfp.multicurrency_price'=>array(
'label'=>$langs->trans(
"PriceQtyMinHTCurrency"),
'enabled' => isModEnabled(
'multicurrency'),
'checked'=>1,
'position'=>70),
984 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
985 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
986 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
988 if (!empty($extralabels)) {
989 foreach ($extralabels as $key => $value) {
991 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
992 $extratitle = $langs->trans($value);
993 $arrayfields[
'ef.' . $key] = array(
'label' => $extratitle,
'checked' => 0,
994 'position' => (end($arrayfields)[
'position'] + 1),
995 'langfile' => $extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key],
996 'help' => $extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]);
1003 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
1005 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
1006 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
1008 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post" name="formulaire">';
1009 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1010 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
1011 print
'<input type="hidden" name="action" value="list">';
1012 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
1013 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
1016 print
'<!-- List of supplier prices -->'.
"\n";
1017 print
'<div class="div-table-responsive">';
1018 print
'<table class="liste centpercent noborder">';
1020 $param =
"&id=".$object->id;
1024 print
'<tr class="liste_titre">';
1028 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch actioncolumn ');
1031 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1032 print_liste_field_titre(
"AppliedPricesFrom", $_SERVER[
"PHP_SELF"],
"pfp.datec",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1035 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1036 print_liste_field_titre(
"Suppliers", $_SERVER[
"PHP_SELF"],
"s.nom",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1039 print_liste_field_titre(
"SupplierRef", $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1041 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1042 print_liste_field_titre(
"Availability", $_SERVER[
"PHP_SELF"],
"pfp.fk_availability",
"", $param,
"", $sortfield, $sortorder);
1045 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1046 print_liste_field_titre(
"QtyMin", $_SERVER[
"PHP_SELF"],
"pfp.quantity",
"", $param,
'', $sortfield, $sortorder,
'right ');
1049 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1051 if (!empty($arrayfields[
'pfp.price'][
'checked'])) {
1052 print_liste_field_titre(
"PriceQtyMinHT", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1055 if (isModEnabled(
"multicurrency") && !empty($arrayfields[
'pfp.multicurrency_price'][
'checked'])) {
1056 print_liste_field_titre(
"PriceQtyMinHTCurrency", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1059 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1060 print_liste_field_titre(
"UnitPriceHT", $_SERVER[
"PHP_SELF"],
"pfp.unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1063 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1064 print_liste_field_titre(
"UnitPriceHTCurrency", $_SERVER[
"PHP_SELF"],
"pfp.multicurrency_unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1067 if (isModEnabled(
"multicurrency")) {
1068 print_liste_field_titre(
"Currency", $_SERVER[
"PHP_SELF"],
"",
"", $param,
'', $sortfield, $sortorder,
'right ');
1071 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1072 print_liste_field_titre(
"Charges", $_SERVER[
"PHP_SELF"],
"pfp.charges",
"", $param,
'', $sortfield, $sortorder,
'right ');
1075 print_liste_field_titre(
"DiscountQtyMin", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1077 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1078 print_liste_field_titre(
"NbDaysToDelivery", $_SERVER[
"PHP_SELF"],
"pfp.delivery_time_days",
"", $param,
'', $sortfield, $sortorder,
'right ');
1081 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1082 print_liste_field_titre(
"ReputationForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.supplier_reputation",
"", $param,
'', $sortfield, $sortorder,
'center ');
1085 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1086 print_liste_field_titre(
"BarcodeType", $_SERVER[
"PHP_SELF"],
"pfp.fk_barcode_type",
"", $param,
'', $sortfield, $sortorder,
'center ');
1089 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1090 print_liste_field_titre(
"BarcodeValue", $_SERVER[
"PHP_SELF"],
"pfp.barcode",
"", $param,
'', $sortfield, $sortorder,
'center ');
1093 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1094 print_liste_field_titre(
"PackagingForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.packaging",
"", $param,
'', $sortfield, $sortorder,
'center ');
1097 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1098 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"pfp.status",
"", $param,
'', $sortfield, $sortorder,
'center ',
'', 1);
1101 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1102 print_liste_field_titre(
"DateModification", $_SERVER[
"PHP_SELF"],
"pfp.tms",
"", $param,
'', $sortfield, $sortorder,
'right ',
'', 1);
1107 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
1108 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
1109 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
1111 if (!empty($extralabels)) {
1112 foreach ($extralabels as $key => $value) {
1114 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1115 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
1116 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
1118 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
1119 $extratitle = $form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
1121 $extratitle = $langs->trans($value);
1123 if (!empty($arrayfields[
'ef.' . $key][
'checked'])) {
1124 print_liste_field_titre($extratitle, $_SERVER[
"PHP_SELF"],
'ef.' . $key,
'', $param,
'', $sortfield, $sortorder,
'right ');
1132 if (is_object($hookmanager)) {
1133 $parameters = array(
'id_fourn'=>(!empty($id_fourn) ? $id_fourn :
''),
'prod_id'=>
$object->id,
'nbfields'=>$nbfields);
1134 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
1137 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'maxwidthsearch center ');
1142 if (is_array($product_fourn_list)) {
1143 foreach ($product_fourn_list as $productfourn) {
1144 print
'<tr class="oddeven">';
1148 print
'<td class="center nowraponall">';
1149 if ($usercancreate) {
1150 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>";
1152 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>';
1159 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1160 print
'<td>'.dol_print_date(($productfourn->fourn_date_creation ? $productfourn->fourn_date_creation : $productfourn->date_creation),
'dayhour',
'tzuserrel').
'</td>';
1164 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1165 print
'<td class="tdoverflowmax150">'.$productfourn->getSocNomUrl(1,
'supplier').
'</td>';
1169 if ($usercancreate) {
1170 print
'<td class="tdoverflowmax150">'.$productfourn->getNomUrl().
'</td>';
1172 print
'<td class="tdoverflowmax150">'.dol_escape_htmltag($productfourn->fourn_ref).
'</td>';
1176 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1177 $form->load_cache_availability();
1178 $availability = $form->cache_availability[$productfourn->fk_availability][
'label'];
1179 print
'<td class="left">'.$availability.
'</td>';
1183 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1184 print
'<td class="right">';
1185 print $productfourn->fourn_qty;
1188 $unit =
$object->getLabelOfUnit();
1190 print
' '.$langs->trans($unit);
1197 print
'<td class="right">';
1198 print
vatrate($productfourn->fourn_tva_tx,
true);
1202 if (!empty($arrayfields[
'pfp.price'][
'checked'])) {
1203 print
'<td class="right">';
1204 print $productfourn->fourn_price ?
'<span class="amount">'.price($productfourn->fourn_price).
'</span>' :
"";
1208 if (isModEnabled(
"multicurrency") && !empty($arrayfields[
'pfp.multicurrency_price'][
'checked'])) {
1210 print
'<td class="right">';
1211 print $productfourn->fourn_multicurrency_price ?
'<span class="amount">'.price($productfourn->fourn_multicurrency_price).
'</span>' :
"";
1216 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1217 print
'<td class="right">';
1218 print
price($productfourn->fourn_unitprice);
1224 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1225 print
'<td class="right">';
1226 print
price($productfourn->fourn_multicurrency_unitprice);
1231 if (isModEnabled(
"multicurrency")) {
1232 print
'<td class="right nowraponall">';
1233 print $productfourn->fourn_multicurrency_code ?
currency_name($productfourn->fourn_multicurrency_code) :
'';
1238 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1239 print
'<td class="right">';
1240 print
price($productfourn->fourn_charges);
1245 print
'<td class="right">';
1246 print
price2num($productfourn->fourn_remise_percent).
'%';
1250 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1251 print
'<td class="right">';
1252 print $productfourn->delivery_time_days;
1257 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1258 print
'<td class="center">';
1259 if (!empty($productfourn->supplier_reputation) && !empty(
$object->reputations[$productfourn->supplier_reputation])) {
1260 print
$object->reputations[$productfourn->supplier_reputation];
1266 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1267 print
'<td class="center">';
1268 $productfourn->barcode_type = !empty($productfourn->supplier_fk_barcode_type) ? $productfourn->supplier_fk_barcode_type : 0;
1269 $productfourn->fetchBarCode();
1270 print $productfourn->barcode_type_label ? $productfourn->barcode_type_label : ($productfourn->supplier_barcode ?
'<div class="warning">'.$langs->trans(
"SetDefaultBarcodeType").
'<div>' :
'');
1275 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1276 print
'<td class="right">';
1277 print $productfourn->supplier_barcode;
1282 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1283 print
'<td class="center">';
1284 print
price2num($productfourn->packaging);
1289 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1290 print
'<td class="center">';
1291 print $productfourn->getLibStatut(3);
1296 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1297 print
'<td class="right nowraponall">';
1298 print
dol_print_date(($productfourn->fourn_date_modification ? $productfourn->fourn_date_modification : $productfourn->date_modification),
"dayhour",
"tzuserrel");
1303 if (!empty($extralabels)) {
1305 $sql .=
" fk_object";
1306 foreach ($extralabels as $key => $value) {
1309 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
1310 $sql .=
" WHERE fk_object = ".((int) $productfourn->product_fourn_price_id);
1311 $resql = $db->query($sql);
1313 if ($db->num_rows($resql) != 1) {
1314 foreach ($extralabels as $key => $value) {
1315 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1320 $obj = $db->fetch_object($resql);
1321 foreach ($extralabels as $key => $value) {
1322 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1323 print
'<td align="right">'.$extrafields->showOutputField($key, $obj->{$key},
'',
'product_fournisseur_price').
"</td>";
1331 if (is_object($hookmanager)) {
1332 $parameters = array(
'id_pfp'=>$productfourn->product_fourn_price_id,
'id_fourn'=>(!empty($id_fourn) ? $id_fourn :
''),
'prod_id'=>
$object->id);
1333 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
1338 print
'<td class="center nowraponall">';
1339 if ($usercancreate) {
1340 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>";
1342 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>';
1351 if (empty($product_fourn_list)) {
1352 print
'<tr><td colspan="'.$nbfields.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
1365 print $langs->trans(
"ErrorUnknown");
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
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.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
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_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)
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)
Show tabs of a record.
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.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
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'.
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.
GETPOSTFLOAT($paramname, $rounding='')
Return the value of a $_GET or $_POST supervariable, converted into float.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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.