37 require
'../main.inc.php';
38 require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
41 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
43 require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_expression.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_parser.class.php';
49 $langs->loadLangs(array(
'products',
'suppliers',
'bills',
'margins',
'stocks'));
53 $rowid =
GETPOST(
'rowid',
'int');
54 $action =
GETPOST(
'action',
'aZ09');
55 $cancel =
GETPOST(
'cancel',
'alpha');
56 $contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'pricesuppliercard';
58 $socid =
GETPOST(
'socid',
'int');
62 $backtopage =
GETPOST(
'backtopage',
'alpha');
68 if (
GETPOST(
'search_fourn_id',
'int')) {
69 $_GET[
'id_fourn'] =
GETPOST(
'search_fourn_id',
'int');
70 $_POST[
'id_fourn'] =
GETPOST(
'search_fourn_id',
'int');
74 $fieldvalue = (!empty($id) ? $id : (!empty($ref) ? $ref :
''));
75 $fieldtype = (!empty($ref) ?
'ref' :
'rowid');
77 $socid = $user->socid;
80 if (empty($user->rights->fournisseur->lire) && (!
isModEnabled(
'margin') && !$user->hasRight(
"margin",
"liretous"))) {
84 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
85 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
86 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
88 if (empty($page) || $page == -1) {
91 $offset = $limit * $page;
92 $pageprev = $page - 1;
93 $pagenext = $page + 1;
102 $hookmanager->initHooks(array(
'pricesuppliercard',
'globalcard'));
105 if ($id > 0 || $ref) {
106 $object->fetch($id, $ref);
112 if ($object->id > 0) {
113 if ($object->type == $object::TYPE_PRODUCT) {
114 restrictedArea($user,
'produit', $object->id,
'product&product',
'',
'');
116 if ($object->type == $object::TYPE_SERVICE) {
117 restrictedArea($user,
'service', $object->id,
'product&product',
'',
'');
120 restrictedArea($user,
'produit|service', $fieldvalue,
'product&product',
'',
'', $fieldtype);
132 $parameters = array(
'socid'=>$socid,
'id_prod'=>$id);
133 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
138 if (empty($reshook)) {
139 if ($action ==
'setcost_price') {
141 $result = $object->fetch($id);
143 $object->cost_price =
price2num($cost_price);
144 $result = $object->update($object->id, $user);
154 if ($action ==
'setpmp') {
156 $result = $object->fetch($id);
158 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET pmp = ".((
float) $object->pmp).
" WHERE rowid = ".((int) $id);
159 $resql = $db->query(
$sql);
171 if ($action ==
'confirm_remove_pf') {
174 $result = $object->remove_product_fournisseur_price($rowid);
176 $db->query(
"DELETE FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields WHERE fk_object = ".((
int) $rowid));
185 if ($action ==
'save_price') {
186 $id_fourn =
GETPOST(
"id_fourn");
187 if (empty($id_fourn)) {
188 $id_fourn =
GETPOST(
"search_id_fourn");
190 $ref_fourn =
GETPOST(
"ref_fourn");
191 if (empty($ref_fourn)) {
192 $ref_fourn =
GETPOST(
"search_ref_fourn");
194 $ref_fourn_old =
GETPOST(
"ref_fourn_old");
195 if (empty($ref_fourn_old)) {
196 $ref_fourn_old = $ref_fourn;
201 $npr = preg_match(
'/\*/',
GETPOST(
'tva_tx',
'alpha')) ? 1 : 0;
202 $tva_tx = str_replace(
'*',
'',
GETPOST(
'tva_tx',
'alpha'));
203 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
207 $price_expression =
GETPOST(
'eid',
'int') ?
GETPOST(
'eid',
'int') :
'';
208 $delivery_time_days =
GETPOST(
'delivery_time_days',
'int') ?
GETPOST(
'delivery_time_days',
'int') :
'';
209 $supplier_reputation =
GETPOST(
'supplier_reputation');
210 $supplier_description =
GETPOST(
'supplier_description',
'restricthtml');
211 $barcode =
GETPOST(
'barcode',
'alpha');
212 $fk_barcode_type =
GETPOST(
'fk_barcode_type',
'int');
217 $langs->load(
"errors");
218 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
220 if (!is_numeric($tva_tx)) {
222 $langs->load(
"errors");
223 setEventMessages($langs->trans(
"ErrorFieldMustBeANumeric", $langs->transnoentities(
"VATRateForSupplierProduct")),
null,
'errors');
225 if (empty($quantity)) {
227 $langs->load(
"errors");
228 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Qty")),
null,
'errors');
230 if (empty($ref_fourn)) {
232 $langs->load(
"errors");
233 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"RefSupplier")),
null,
'errors');
235 if ($id_fourn <= 0) {
237 $langs->load(
"errors");
238 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Supplier")),
null,
'errors');
241 if ($price_expression ===
'') {
243 $langs->load(
"errors");
244 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Price")),
null,
'errors');
250 if (!
GETPOST(
"multicurrency_code")) {
252 $langs->load(
"errors");
253 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Currency")),
null,
'errors');
257 $langs->load(
"errors");
258 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CurrencyRate")),
null,
'errors');
262 $langs->load(
"errors");
263 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"PriceCurrency")),
null,
'errors');
271 $ret = $object->add_fournisseur($user, $id_fourn, $ref_fourn_old, $quantity);
276 $tmpobject->fetch($object->product_id_already_linked);
277 $productLink = $tmpobject->getNomUrl(1,
'supplier');
279 $texttoshow = $langs->trans(
"ReferenceSupplierIsAlreadyAssociatedWithAProduct",
'{s1}');
280 $texttoshow = str_replace(
'{s1}', $productLink, $texttoshow);
282 } elseif ($ret < 0) {
290 $result = $supplier->fetch($id_fourn);
292 $object->fetch_product_fournisseur_price(
GETPOST(
'ref_fourn_price_id',
'int'));
294 $extralabels = $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
295 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
299 if (empty($packaging)) {
306 $object->packaging = $packaging;
311 $multicurrency_code =
GETPOST(
"multicurrency_code",
'alpha');
313 $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);
315 $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);
321 if (
isModEnabled(
'dynamicprices') && $price_expression !==
'') {
323 require_once DOL_DOCUMENT_ROOT.
'/product/dynamic_price/class/price_parser.class.php';
325 $object->fk_supplier_price_expression = $price_expression;
326 $price_result = $priceparser->parseProductSupplier($object);
327 if ($price_result < 0) {
334 $ret = $object->setSupplierPriceExpression($price_expression);
350 $action =
'create_price';
362 $title = $langs->trans(
'ProductServiceCard');
364 $shortlabel =
dol_trunc($object->label, 16);
366 $title = $langs->trans(
'Product').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
367 $helpurl =
'EN:Module_Products|FR:Module_Produits|ES:Módulo_Productos|DE:Modul_Produkte';
370 $title = $langs->trans(
'Service').
" ".$shortlabel.
" - ".$langs->trans(
'BuyingPrices');
371 $helpurl =
'EN:Module_Services_En|FR:Module_Services|ES:Módulo_Servicios|DE:Modul_Lesitungen';
374 llxHeader(
'', $title, $helpurl,
'', 0, 0,
'',
'',
'',
'classforhorizontalscrolloftabs');
376 if ($id > 0 || $ref) {
378 if ($action ==
'ask_remove_pf') {
380 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$id.
'&rowid='.$rowid, $langs->trans(
'DeleteProductBuyPrice'), $langs->trans(
'ConfirmDeleteProductBuyPrice'),
'confirm_remove_pf',
'', 0, 1);
384 if ($action !=
'edit' && $action !=
're-edit') {
386 $titre = $langs->trans(
"CardProduct".$object->type);
391 $linkback =
'<a href="'.DOL_URL_ROOT.
'/product/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
392 $object->next_prev_filter =
" fk_product_type = ".$object->type;
395 if ($user->socid && !in_array(
'product', explode(
',', $conf->global->MAIN_MODULES_FOR_EXTERNAL))) {
401 print
'<div class="fichecenter">';
403 print
'<div class="underbanner clearboth"></div>';
404 print
'<table class="border tableforfield centpercent">';
408 $typeformat =
'select;0:'.$langs->trans(
"Product").
',1:'.$langs->trans(
"Service");
409 print
'<tr><td class="">';
410 print (empty($conf->global->PRODUCT_DENY_CHANGE_PRODUCT_TYPE)) ?
$form->editfieldkey(
"Type",
'fk_product_type', $object->type, $object, 0, $typeformat) : $langs->trans(
'Type');
412 print
$form->editfieldval(
"Type",
'fk_product_type', $object->type, $object, 0, $typeformat);
418 $textdesc = $langs->trans(
"CostPriceDescription");
419 $textdesc .=
"<br>".$langs->trans(
"CostPriceUsage");
420 $text =
$form->textwithpicto($langs->trans(
"CostPrice"), $textdesc, 1,
'help',
'');
421 print
$form->editfieldkey($text,
'cost_price', $object->cost_price, $object, $usercancreate,
'amount:6');
423 print
$form->editfieldval($text,
'cost_price', $object->cost_price, $object, $usercancreate,
'amount:6');
428 if (!empty($conf->global->PRODUCT_CAN_EDIT_WAP)) {
429 $usercaneditpmp = $usercancreate;
431 print
'<tr><td class="titlefieldcreate">';
432 $textdesc = $langs->trans(
"AverageUnitPricePMPDesc");
433 $text =
$form->textwithpicto($langs->trans(
"AverageUnitPricePMPShort"), $textdesc, 1,
'help',
'');
434 print
$form->editfieldkey($text,
'pmp', $object->pmp, $object, $usercaneditpmp,
'amount:6');
436 print
$form->editfieldval($text,
'pmp', ($object->pmp > 0 ? $object->pmp :
''), $object, $usercaneditpmp,
'amount:6');
437 if ($object->pmp > 0) {
438 print
' '.$langs->trans(
"HT");
450 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"BuyingPriceMin").
'</td>';
453 if ($product_fourn->find_min_price_product_fournisseur($object->id) > 0) {
454 if ($product_fourn->product_fourn_price_id > 0) {
455 print $product_fourn->display_price_product_fournisseur();
457 print $langs->trans(
"NotDefined");
465 print
'<div class="clearboth"></div>';
471 if (($action ==
'create_price' || $action ==
'update_price') && $usercancreate) {
472 $langs->load(
"suppliers");
474 print
"<!-- form to add a supplier price -->\n";
478 $object->fetch_product_fournisseur_price($rowid, 1);
484 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'" method="POST">';
485 print
'<input type="hidden" name="token" value="'.newToken().
'">';
486 print
'<input type="hidden" name="action" value="save_price">';
490 print
'<table class="border centpercent">';
493 print
'<tr><td class="titlefield fieldrequired">'.$langs->trans(
"Supplier").
'</td><td>';
496 $supplier->fetch($socid);
497 print $supplier->getNomUrl(1);
498 print
'<input type="hidden" name="id_fourn" value="'.$socid.
'">';
499 print
'<input type="hidden" name="ref_fourn_price_id" value="'.$rowid.
'">';
500 print
'<input type="hidden" name="rowid" value="'.$rowid.
'">';
501 print
'<input type="hidden" name="socid" value="'.$socid.
'">';
504 $events[] = array(
'method' =>
'getVatRates',
'url' =>
dol_buildpath(
'/core/ajax/vatrates.php', 1),
'htmlname' =>
'tva_tx',
'params' => array());
505 $filter =
'(fournisseur:=:1)';
506 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
GETPOST(
"id_fourn",
'alpha'),
'id_fourn', $filter,
'SelectThirdParty', 0, 0, $events);
508 $parameters = array(
'filtre'=>
"fournisseur=1",
'html_name'=>
'id_fourn',
'selected'=>
GETPOST(
"id_fourn"),
'showempty'=>1,
'prod_id'=>$object->id);
509 $reshook = $hookmanager->executeHooks(
'formCreateThirdpartyOptions', $parameters, $object, $action);
510 if (empty($reshook)) {
511 if (empty(
$form->result)) {
512 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() :
'')).
'">';
513 print
img_picto($langs->trans(
"CreateDolibarrThirdPartySupplier"),
'add',
'class="marginleftonly"');
517 print
'<script type="text/javascript">
518 $(document).ready(function () {
519 $("#search_id_fourn").change(load_vat)
520 console.log("Requesting default VAT rate for the supplier...")
522 function load_vat() {
524 let socid = $("#id_fourn")[0].value
526 // load available VAT rates
527 let vat_url = "'.dol_buildpath(
'/core/ajax/vatrates.php', 1).
'"
528 //Make GET request with params
530 options += "id=" + socid
531 options += "&htmlname=tva_tx"
532 options += "&action=default" // not defined in vatrates.php, default behavior.
538 rate_options = $.parseHTML(data.value)
539 rate_options.forEach(opt => {
541 replaceVATWithSupplierValue(opt.value);
549 function replaceVATWithSupplierValue(vat_rate) {
550 console.log("Default VAT rate for the supplier: " + vat_rate + "%")
551 $("[name=\'tva_tx\']")[0].value = vat_rate;
558 print
'<tr><td class="fieldrequired">'.$langs->trans(
"SupplierRef").
'</td><td>';
560 print
'<input type="hidden" name="ref_fourn_old" value="'.$object->ref_supplier.
'">';
561 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.$object->ref_supplier.
'">';
563 print
'<input class="flat width150" maxlength="128" name="ref_fourn" value="'.(GETPOST(
"ref_fourn") ?
GETPOST(
"ref_fourn") :
'').
'">';
570 $langs->load(
"propal");
571 print
'<tr><td>'.$langs->trans(
"Availability").
'</td><td>';
572 $form->selectAvailabilityDelay($object->fk_availability,
"oselDispo", 1);
573 print
'</td></tr>'.
"\n";
578 print
'<td class="fieldrequired">'.$langs->trans(
"QtyMin").
'</td>';
582 print
'<input type="hidden" name="qty" value="'.$object->fourn_qty.
'">';
583 print $object->fourn_qty;
585 print
'<input class="flat" name="qty" size="5" value="'.$quantity.
'">';
588 if (!empty($conf->global->PRODUCT_USE_UNITS)) {
589 $unit = $object->getLabelOfUnit();
591 print
' '.$langs->trans($unit);
596 if (!empty($conf->global->PRODUCT_USE_SUPPLIER_PACKAGING)) {
600 print
'<td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PackagingForThisProduct"), $langs->trans(
"PackagingForThisProductDesc")).
'</td>';
603 print
'<input class="flat" name="packaging" size="5" value="'.$packaging.
'">';
606 if (!empty($conf->global->PRODUCT_USE_UNITS)) {
607 $unit = $object->getLabelOfUnit();
609 print
' '.$langs->trans($unit);
618 $mysoc2 = clone $mysoc;
619 $mysoc2->name =
'Fictive seller with same country';
620 $mysoc2->tva_assuj = 1;
623 if (empty($default_vat)) {
624 $default_npr = $default_vat;
627 print
'<tr><td class="fieldrequired">'.$langs->trans(
"VATRateForSupplierProduct").
'</td>';
630 if (!empty($rowid)) {
632 $tmpproductsupplier->fetch_product_fournisseur_price($rowid, 1);
633 $default_vat = $tmpproductsupplier->fourn_tva_tx;
634 $default_npr = $tmpproductsupplier->fourn_tva_npr;
636 if (empty($default_vat)) {
637 $default_vat = $object->tva_tx;
641 $vattosuggest = preg_replace(
'/\s*\(.*\)$/',
'', $vattosuggest);
642 print
'<input type="text" class="flat" size="5" name="tva_tx" value="'.$vattosuggest.
'">';
647 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceMode").
'</td><td>';
649 $price_expression_list = array(0 => $langs->trans(
"PriceNumeric"));
650 foreach ($price_expression->list_price_expression() as $entry) {
651 $price_expression_list[$entry->id] = $entry->title;
653 $price_expression_preselection =
GETPOST(
'eid') ?
GETPOST(
'eid') : ($object->fk_supplier_price_expression ? $object->fk_supplier_price_expression :
'0');
654 print
$form->selectarray(
'eid', $price_expression_list, $price_expression_preselection);
655 print
' <div id="expression_editor" class="button smallpaddingimp">'.$langs->trans(
"PriceExpressionEditor").
'</div>';
658 print
'<script type="text/javascript">
659 jQuery(document).ready(run);
661 jQuery("#expression_editor").click(on_click);
662 jQuery("#eid").change(on_change);
665 function on_click() {
666 window.location = "'.DOL_URL_ROOT.
'/product/dynamic_price/editor.php?id='.$id.
'&tab=fournisseurs&eid=" + $("#eid").val();
668 function on_change() {
669 if ($("#eid").val() == 0) {
670 jQuery("#price_numeric").show();
672 jQuery("#price_numeric").hide();
680 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Currency").
'</td>';
682 $currencycodetouse =
GETPOST(
'multicurrency_code') ?
GETPOST(
'multicurrency_code') : (isset($object->fourn_multicurrency_code) ? $object->fourn_multicurrency_code :
'');
683 if (empty($currencycodetouse) && $object->fourn_multicurrency_tx == 1) {
684 $currencycodetouse = $conf->currency;
686 print
$form->selectMultiCurrency($currencycodetouse,
"multicurrency_code", 1);
687 print
' '.$langs->trans(
"CurrencyRate").
' ';
688 print
'<input class="flat" name="multicurrency_tx" size="4" value="'.vatrate(
GETPOST(
'multicurrency_tx') ?
GETPOST(
'multicurrency_tx') : (isset($object->fourn_multicurrency_tx) ? $object->fourn_multicurrency_tx :
'')).
'">';
693 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMinCurrency"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
694 $pricesupplierincurrencytouse = (
GETPOST(
'multicurrency_price') ?
GETPOST(
'multicurrency_price') : (isset($object->fourn_multicurrency_price) ? $object->fourn_multicurrency_price :
''));
695 print
'<td><input class="flat" name="multicurrency_price" size="8" value="'.price($pricesupplierincurrencytouse).
'">';
697 print
$form->selectPriceBaseType((
GETPOST(
'multicurrency_price_base_type') ?
GETPOST(
'multicurrency_price_base_type') :
'HT'),
"multicurrency_price_base_type");
701 print
'<tr><td class="fieldrequired">'.$form->textwithpicto($langs->trans(
"PriceQtyMin"), $langs->transnoentitiesnoconv(
"WithoutDiscount")).
'</td>';
702 print
'<td><input class="flat" name="disabled_price" size="8" value="">';
703 print
'<input type="hidden" name="price" value="">';
704 print
'<input type="hidden" name="price_base_type" value="">';
706 print
$form->selectPriceBaseType(
'',
"disabled_price_base_type");
709 $currencies = array();
710 $sql =
"SELECT rowid FROM ".MAIN_DB_PREFIX.
"multicurrency WHERE entity = ".((int) $conf->entity);
711 $resql = $db->query(
$sql);
714 while ($obj = $db->fetch_object($resql)) {
715 $currency->fetch($obj->rowid);
716 $currencies[$currency->code] = ((
float) $currency->rate->rate);
719 $currencies = json_encode($currencies);
722 <!-- javascript to autocalculate the minimum
price -->
723 <script
type=
"text/javascript">
724 function update_price_from_multicurrency() {
725 console.log(
"update_price_from_multicurrency");
726 var multicurrency_price =
price2numjs($(
'input[name="multicurrency_price"]').val());
727 var multicurrency_tx =
price2numjs($(
'input[name="multicurrency_tx"]').val());
728 if (multicurrency_tx != 0) {
729 $(
'input[name="price"]').val(multicurrency_price / multicurrency_tx);
730 $(
'input[name="disabled_price"]').val(multicurrency_price / multicurrency_tx);
732 $(
'input[name="price"]').val(
'');
733 $(
'input[name="disabled_price"]').val(
'');
737 jQuery(document).ready(
function () {
738 $(
'input[name="disabled_price"]').prop(
'disabled',
true);
739 $(
'select[name="disabled_price_base_type"]').prop(
'disabled',
true);
740 update_price_from_multicurrency();
742 $(
'input[name="multicurrency_price"], input[name="multicurrency_tx"]').keyup(
function () {
743 update_price_from_multicurrency();
745 $(
'input[name="multicurrency_price"], input[name="multicurrency_tx"]').change(
function () {
746 update_price_from_multicurrency();
748 $(
'input[name="multicurrency_price"], input[name="multicurrency_tx"]').on(
'paste',
function () {
749 update_price_from_multicurrency();
752 $(
'select[name="multicurrency_price_base_type"]').change(
function () {
753 $(
'input[name="price_base_type"]').val($(
this).val());
754 $(
'select[name="disabled_price_base_type"]').val($(
this).val());
757 var currencies_array = $currencies;
758 $(
'select[name="multicurrency_code"]').change(
function () {
759 console.log(
"We change the currency");
760 $(
'input[name="multicurrency_tx"]').val(currencies_array[$(
this).val()]);
761 update_price_from_multicurrency();
768 print
'<tr><td class="fieldrequired">'.$langs->trans(
"PriceQtyMin").
'</td>';
769 print
'<td><input class="flat" name="price" size="8" value="'.(GETPOST(
'price') ?
price(
GETPOST(
'price')) : (isset($object->fourn_price) ?
price($object->fourn_price) :
'')).
'">';
771 print
$form->selectPriceBaseType((
GETPOSTISSET(
'price_base_type') ?
GETPOST(
'price_base_type') :
'HT'),
"price_base_type");
778 print
'<td>'.$langs->trans(
"Charges").
'</td>';
779 print
'<td><input class="flat" name="charges" size="8" value="'.(GETPOST(
'charges') ?
price(
GETPOST(
'charges')) : (isset($object->fourn_charges) ?
price($object->fourn_charges) :
'')).
'">';
785 print
'<tr><td>'.$langs->trans(
"DiscountQtyMin").
'</td>';
786 print
'<td><input class="flat" name="remise_percent" size="4" value="'.(GETPOSTISSET(
'remise_percent') ?
vatrate(
price2num(
GETPOST(
'remise_percent'),
'', 2)) : (isset($object->fourn_remise_percent) ?
vatrate($object->fourn_remise_percent) :
'')).
'"> %';
792 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
'</td>';
793 print
'<td><input class="flat" name="delivery_time_days" size="4" value="'.($rowid ? $object->delivery_time_days :
'').
'"> '.$langs->trans(
'days').
'</td>';
797 print
'<tr><td>'.$langs->trans(
"ReferenceReputation").
'</td><td>';
798 echo
$form->selectarray(
'supplier_reputation', $object->reputations, !empty($supplier_reputation) ? $supplier_reputation : $object->supplier_reputation);
807 print
'<td>'.$langs->trans(
'GencodBuyPrice').
'</td>';
809 print
img_picto(
'',
'barcode',
'class="pictofixedwidth"');
810 print $formbarcode->selectBarcodeType((
GETPOSTISSET(
'fk_barcode_type') ?
GETPOST(
'fk_barcode_type',
'int') : ($rowid ? $object->supplier_fk_barcode_type : getDolGlobalint(
"PRODUIT_DEFAULT_BARCODE_TYPE"))),
'fk_barcode_type', 1);
811 print
' <input class="flat" name="barcode" value="'.(GETPOSTISSET(
'barcode') ?
GETPOST(
'barcode') : ($rowid ? $object->supplier_barcode :
'')).
'"></td>';
816 if (!empty($conf->global->PRODUIT_FOURN_TEXTS)) {
818 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
821 print
'<td>'.$langs->trans(
'ProductSupplierDescription').
'</td>';
824 $doleditor =
new DolEditor(
'supplier_description', $object->desc_supplier,
'', 160,
'dolibarr_details',
'',
false,
true,
getDolGlobalInt(
'FCKEDITOR_ENABLE_DETAILS'), ROWS_4,
'90%');
825 $doleditor->Create();
832 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
833 $extralabels = !empty($extrafields->attributes[
"product_fournisseur_price"][
'label']) ? $extrafields->attributes[
"product_fournisseur_price"][
'label'] :
'';
834 $extrafield_values = $extrafields->getOptionalsFromPost(
"product_fournisseur_price");
835 if (!empty($extralabels)) {
837 foreach ($extralabels as $key => $value) {
838 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && ($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 1 || $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 3 || ($action ==
"update_price" && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 4))) {
839 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
840 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
843 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
844 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
845 print
$form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
847 print $langs->trans($value);
849 print
'</td><td>'.$extrafields->showInputField($key,
GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] :
'',
'',
'',
'',
'', 0,
'product_fournisseur_price').
'</td></tr>';
854 $sql .=
" fk_object";
855 foreach ($extralabels as $key => $value) {
858 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
859 $sql .=
" WHERE fk_object = ".((int) $rowid);
860 $resql = $db->query(
$sql);
862 $obj = $db->fetch_object($resql);
863 foreach ($extralabels as $key => $value) {
864 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && ($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 1 || $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 3 || ($action ==
"update_price" && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] == 4))) {
865 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
866 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
869 print
'<tr><td'.($extrafields->attributes[
"product_fournisseur_price"][
'required'][$key] ?
' class="fieldrequired"' :
'').
'>';
870 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
871 print
$form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
873 print $langs->trans($value);
875 print
'</td><td>'.$extrafields->showInputField($key,
GETPOSTISSET(
'options_'.$key) ? $extrafield_values[
'options_'.$key] : $obj->{$key},
'',
'',
'',
'', 0,
'product_fournisseur_price');
885 if (is_object($hookmanager)) {
886 $parameters = array(
'id_fourn'=>!empty($id_fourn) ? $id_fourn : 0,
'prod_id'=>$object->id);
887 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
888 print $hookmanager->resPrint;
895 print
'<div class="center">';
896 print
'<input class="button button-save" type="submit" value="'.$langs->trans(
"Save").
'">';
897 print
' ';
898 print
'<input class="button button-cancel" type="submit" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
901 print
'</form>'.
"\n";
907 print
'<div class="tabsAction">'.
"\n";
909 if ($action !=
'create_price' && $action !=
'update_price') {
910 $parameters = array();
911 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
912 if (empty($reshook)) {
913 if ($usercancreate) {
914 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/product/fournisseurs.php?id='.((int) $object->id).
'&action=create_price&token='.
newToken().
'">';
915 print $langs->trans(
"AddSupplierPrice").
'</a>';
922 if ($user->hasRight(
"fournisseur",
"read")) {
924 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
925 $param .=
'&contextpage='.urlencode($contextpage);
927 if ($limit > 0 && $limit != $conf->liste_limit) {
928 $param .=
'&limit='.((int) $limit);
930 $param .=
'&ref='.urlencode($object->ref);
933 $product_fourn_list = $product_fourn->list_product_fournisseur_price($object->id, $sortfield, $sortorder, $limit, $offset);
934 $product_fourn_list_all = $product_fourn->list_product_fournisseur_price($object->id, $sortfield, $sortorder, 0, 0);
935 $nbtotalofrecords = count($product_fourn_list_all);
936 $num = count($product_fourn_list);
937 if (($num + ($offset * $limit)) < $nbtotalofrecords) {
941 print_barre_liste($langs->trans(
'SupplierPrices'), $page, $_SERVER[
'PHP_SELF'], $param, $sortfield, $sortorder,
'', $num, $nbtotalofrecords,
'title_accountancy.png', 0,
'',
'', $limit, 1);
945 $arrayfields = array(
946 'pfp.datec'=>array(
'label'=>$langs->trans(
"AppliedPricesFrom"),
'checked'=>1,
'position'=>1),
947 's.nom'=>array(
'label'=>$langs->trans(
"Suppliers"),
'checked'=>1,
'position'=>2),
948 'pfp.fk_availability'=>array(
'label'=>$langs->trans(
"Availability"),
'enabled' =>
getDolGlobalInt(
'FOURN_PRODUCT_AVAILABILITY'),
'checked'=>0,
'position'=>4),
949 'pfp.quantity'=>array(
'label'=>$langs->trans(
"QtyMin"),
'checked'=>1,
'position'=>5),
950 'pfp.unitprice'=>array(
'label'=>$langs->trans(
"UnitPriceHT"),
'checked'=>1,
'position'=>9),
951 'pfp.multicurrency_unitprice'=>array(
'label'=>$langs->trans(
"UnitPriceHTCurrency"),
'enabled' =>
isModEnabled(
'multicurrency'),
'checked'=>0,
'position'=>10),
952 'pfp.charges'=>array(
'label'=>$langs->trans(
"Charges"),
'enabled' => !empty($conf->global->PRODUCT_CHARGES),
'checked'=>0,
'position'=>11),
953 'pfp.delivery_time_days'=>array(
'label'=>$langs->trans(
"NbDaysToDelivery"),
'checked'=>-1,
'position'=>13),
954 'pfp.supplier_reputation'=>array(
'label'=>$langs->trans(
"ReputationForThisProduct"),
'checked'=>-1,
'position'=>14),
955 'pfp.fk_barcode_type'=>array(
'label'=>$langs->trans(
"BarcodeType"),
'enabled' =>
isModEnabled(
'barcode'),
'checked'=>0,
'position'=>15),
956 'pfp.barcode'=>array(
'label'=>$langs->trans(
"BarcodeValue"),
'enabled' =>
isModEnabled(
'barcode'),
'checked'=>0,
'position'=>16),
957 'pfp.packaging'=>array(
'label'=>$langs->trans(
"PackagingForThisProduct"),
'enabled' =>
getDolGlobalInt(
'PRODUCT_USE_SUPPLIER_PACKAGING'),
'checked'=>0,
'position'=>17),
958 'pfp.status'=>array(
'label'=>$langs->trans(
"Status"),
'enabled' => 1,
'checked'=>0,
'position'=>40),
959 'pfp.tms'=>array(
'label'=>$langs->trans(
"DateModification"),
'enabled' =>
isModEnabled(
'barcode'),
'checked'=>1,
'position'=>50),
963 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
964 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
965 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
967 if (!empty($extralabels)) {
968 foreach ($extralabels as $key => $value) {
970 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
971 $extratitle = $langs->trans($value);
972 $arrayfields[
'ef.' . $key] = array(
'label' => $extratitle,
'checked' => 0,
973 'position' => (end($arrayfields)[
'position'] + 1),
974 'langfile' => $extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key],
975 'help' => $extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]);
982 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
984 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
985 $selectedfields =
$form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage);
987 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post" name="formulaire">';
988 print
'<input type="hidden" name="token" value="'.newToken().
'">';
989 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
990 print
'<input type="hidden" name="action" value="list">';
991 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
992 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
995 print
'<div class="div-table-responsive">';
996 print
'<table class="liste centpercent">';
998 $param =
"&id=".$object->id;
1002 print
'<tr class="liste_titre">';
1003 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1004 print_liste_field_titre(
"AppliedPricesFrom", $_SERVER[
"PHP_SELF"],
"pfp.datec",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1007 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1008 print_liste_field_titre(
"Suppliers", $_SERVER[
"PHP_SELF"],
"s.nom",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1011 print_liste_field_titre(
"SupplierRef", $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder,
'',
'', 1);
1013 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1014 print_liste_field_titre(
"Availability", $_SERVER[
"PHP_SELF"],
"pfp.fk_availability",
"", $param,
"", $sortfield, $sortorder);
1017 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1018 print_liste_field_titre(
"QtyMin", $_SERVER[
"PHP_SELF"],
"pfp.quantity",
"", $param,
'', $sortfield, $sortorder,
'right ');
1021 print_liste_field_titre(
"VATRate", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1023 print_liste_field_titre(
"PriceQtyMinHT", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1026 print_liste_field_titre(
"PriceQtyMinHTCurrency", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1029 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1030 print_liste_field_titre(
"UnitPriceHT", $_SERVER[
"PHP_SELF"],
"pfp.unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1033 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1034 print_liste_field_titre(
"UnitPriceHTCurrency", $_SERVER[
"PHP_SELF"],
"pfp.multicurrency_unitprice",
"", $param,
'', $sortfield, $sortorder,
'right ');
1038 print_liste_field_titre(
"Currency", $_SERVER[
"PHP_SELF"],
"",
"", $param,
'', $sortfield, $sortorder,
'right ');
1041 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1042 print_liste_field_titre(
"Charges", $_SERVER[
"PHP_SELF"],
"pfp.charges",
"", $param,
'', $sortfield, $sortorder,
'right ');
1045 print_liste_field_titre(
"DiscountQtyMin", $_SERVER[
"PHP_SELF"],
'',
'', $param,
'', $sortfield, $sortorder,
'right ');
1047 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1048 print_liste_field_titre(
"NbDaysToDelivery", $_SERVER[
"PHP_SELF"],
"pfp.delivery_time_days",
"", $param,
'', $sortfield, $sortorder,
'right ');
1051 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1052 print_liste_field_titre(
"ReputationForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.supplier_reputation",
"", $param,
'', $sortfield, $sortorder,
'center ');
1055 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1056 print_liste_field_titre(
"BarcodeType", $_SERVER[
"PHP_SELF"],
"pfp.fk_barcode_type",
"", $param,
'', $sortfield, $sortorder,
'center ');
1059 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1060 print_liste_field_titre(
"BarcodeValue", $_SERVER[
"PHP_SELF"],
"pfp.barcode",
"", $param,
'', $sortfield, $sortorder,
'center ');
1063 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1064 print_liste_field_titre(
"PackagingForThisProduct", $_SERVER[
"PHP_SELF"],
"pfp.packaging",
"", $param,
'', $sortfield, $sortorder,
'center ');
1067 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1068 print_liste_field_titre(
"Status", $_SERVER[
"PHP_SELF"],
"pfp.status",
"", $param,
'', $sortfield, $sortorder,
'center ',
'', 1);
1071 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1072 print_liste_field_titre(
"DateModification", $_SERVER[
"PHP_SELF"],
"pfp.tms",
"", $param,
'', $sortfield, $sortorder,
'right ',
'', 1);
1077 $extrafields->fetch_name_optionals_label(
"product_fournisseur_price");
1078 if ($extrafields->attributes[
"product_fournisseur_price"] && array_key_exists(
'label', $extrafields->attributes[
"product_fournisseur_price"])) {
1079 $extralabels = $extrafields->attributes[
"product_fournisseur_price"][
'label'];
1081 if (!empty($extralabels)) {
1082 foreach ($extralabels as $key => $value) {
1084 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1085 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key])) {
1086 $langs->load($extrafields->attributes[
"product_fournisseur_price"][
'langfile'][$key]);
1088 if (!empty($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key])) {
1089 $extratitle =
$form->textwithpicto($langs->trans($value), $langs->trans($extrafields->attributes[
"product_fournisseur_price"][
'help'][$key]));
1091 $extratitle = $langs->trans($value);
1093 if (!empty($arrayfields[
'ef.' . $key][
'checked'])) {
1094 print_liste_field_titre($extratitle, $_SERVER[
"PHP_SELF"],
'ef.' . $key,
'', $param,
'', $sortfield, $sortorder,
'right ');
1102 if (is_object($hookmanager)) {
1103 $parameters = array(
'id_fourn'=>(!empty($id_fourn)?$id_fourn:
''),
'prod_id'=>$object->id,
'nbfields'=>$nbfields);
1104 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters, $object, $action);
1106 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
1110 if (is_array($product_fourn_list)) {
1111 foreach ($product_fourn_list as $productfourn) {
1112 print
'<tr class="oddeven">';
1115 if (!empty($arrayfields[
'pfp.datec'][
'checked'])) {
1116 print
'<td>'.dol_print_date(($productfourn->fourn_date_creation ? $productfourn->fourn_date_creation : $productfourn->date_creation),
'dayhour',
'tzuserrel').
'</td>';
1120 if (!empty($arrayfields[
's.nom'][
'checked'])) {
1121 print
'<td class="tdoverflowmax150">'.$productfourn->getSocNomUrl(1,
'supplier').
'</td>';
1125 if ($usercancreate) {
1126 print
'<td class="tdoverflowmax150">'.$productfourn->getNomUrl().
'</td>';
1128 print
'<td class="tdoverflowmax150">'.dol_escape_htmltag($productfourn->fourn_ref).
'</td>';
1132 if (!empty($arrayfields[
'pfp.fk_availability'][
'checked'])) {
1133 $form->load_cache_availability();
1134 $availability =
$form->cache_availability[$productfourn->fk_availability][
'label'];
1135 print
'<td class="left">'.$availability.
'</td>';
1139 if (!empty($arrayfields[
'pfp.quantity'][
'checked'])) {
1140 print
'<td class="right">';
1141 print $productfourn->fourn_qty;
1143 if (!empty($conf->global->PRODUCT_USE_UNITS)) {
1144 $unit = $object->getLabelOfUnit();
1146 print
' '.$langs->trans($unit);
1153 print
'<td class="right">';
1154 print
vatrate($productfourn->fourn_tva_tx,
true);
1158 print
'<td class="right">';
1159 print $productfourn->fourn_price ?
'<span class="amount">'.price($productfourn->fourn_price).
'</span>' :
"";
1164 print
'<td class="right">';
1165 print $productfourn->fourn_multicurrency_price ?
'<span class="amount">'.price($productfourn->fourn_multicurrency_price).
'</span>' :
"";
1170 if (!empty($arrayfields[
'pfp.unitprice'][
'checked'])) {
1171 print
'<td class="right">';
1172 print
price($productfourn->fourn_unitprice);
1178 if (!empty($arrayfields[
'pfp.multicurrency_unitprice'][
'checked'])) {
1179 print
'<td class="right">';
1180 print
price($productfourn->fourn_multicurrency_unitprice);
1186 print
'<td class="right nowraponall">';
1187 print $productfourn->fourn_multicurrency_code ?
currency_name($productfourn->fourn_multicurrency_code) :
'';
1192 if (!empty($arrayfields[
'pfp.charges'][
'checked'])) {
1193 print
'<td class="right">';
1194 print
price($productfourn->fourn_charges);
1199 print
'<td class="right">';
1200 print
price2num($productfourn->fourn_remise_percent).
'%';
1204 if (!empty($arrayfields[
'pfp.delivery_time_days'][
'checked'])) {
1205 print
'<td class="right">';
1206 print $productfourn->delivery_time_days;
1211 if (!empty($arrayfields[
'pfp.supplier_reputation'][
'checked'])) {
1212 print
'<td class="center">';
1213 if (!empty($productfourn->supplier_reputation) && !empty($object->reputations[$productfourn->supplier_reputation])) {
1214 print $object->reputations[$productfourn->supplier_reputation];
1220 if (!empty($arrayfields[
'pfp.fk_barcode_type'][
'checked'])) {
1221 print
'<td class="center">';
1222 $productfourn->barcode_type = !empty($productfourn->supplier_fk_barcode_type) ? $productfourn->supplier_fk_barcode_type : 0;
1223 $productfourn->fetch_barcode();
1224 print $productfourn->barcode_type_label ? $productfourn->barcode_type_label : ($productfourn->supplier_barcode ?
'<div class="warning">'.$langs->trans(
"SetDefaultBarcodeType").
'<div>' :
'');
1229 if (!empty($arrayfields[
'pfp.barcode'][
'checked'])) {
1230 print
'<td class="right">';
1231 print $productfourn->supplier_barcode;
1236 if (!empty($arrayfields[
'pfp.packaging'][
'checked'])) {
1237 print
'<td class="center">';
1238 print
price2num($productfourn->packaging);
1243 if (!empty($arrayfields[
'pfp.status'][
'checked'])) {
1244 print
'<td class="center">';
1245 print $productfourn->getLibStatut(3);
1250 if (!empty($arrayfields[
'pfp.tms'][
'checked'])) {
1251 print
'<td class="right nowraponall">';
1252 print
dol_print_date(($productfourn->fourn_date_modification ? $productfourn->fourn_date_modification : $productfourn->date_modification),
"dayhour");
1257 if (!empty($extralabels)) {
1259 $sql .=
" fk_object";
1260 foreach ($extralabels as $key => $value) {
1263 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_fournisseur_price_extrafields";
1264 $sql .=
" WHERE fk_object = ".((int) $productfourn->product_fourn_price_id);
1265 $resql = $db->query(
$sql);
1267 if ($db->num_rows($resql) != 1) {
1268 foreach ($extralabels as $key => $value) {
1269 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1274 $obj = $db->fetch_object($resql);
1275 foreach ($extralabels as $key => $value) {
1276 if (!empty($arrayfields[
'ef.'.$key][
'checked']) && !empty($extrafields->attributes[
"product_fournisseur_price"][
'list'][$key]) && $extrafields->attributes[
"product_fournisseur_price"][
'list'][$key] != 3) {
1277 print
'<td align="right">'.$extrafields->showOutputField($key, $obj->{$key},
'',
'product_fournisseur_price').
"</td>";
1285 if (is_object($hookmanager)) {
1286 $parameters = array(
'id_pfp'=>$productfourn->product_fourn_price_id,
'id_fourn'=>(!empty($id_fourn)?$id_fourn:
''),
'prod_id'=>$object->id);
1287 $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters, $object, $action);
1291 print
'<td class="center nowraponall">';
1293 if ($usercancreate) {
1294 print
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?id='.((int) $object->id).
'&socid='.((int) $productfourn->fourn_id).
'&action=update_price&token='.
newToken().
'&rowid='.((int) $productfourn->product_fourn_price_id).
'">'.
img_edit().
"</a>";
1296 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>';
1304 if (empty($product_fourn_list)) {
1305 print
'<tr><td colspan="'.$nbfields.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
1318 print $langs->trans(
"ErrorUnknown");
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage a WYSIWYG editor.
Class to manage suppliers.
Class for accesing price expression table.
Class to parse product price expressions.
Class to manage predefined suppliers products.
Class to manage products or services.
const TYPE_PRODUCT
Regular product.
const TYPE_SERVICE
Service.
currency_name($code_iso, $withcode='', $outputlangs=null)
Return label of currency or code+label.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formated for view output Used into pdf and HTML pages.
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists('dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
price2numjs(amount)
Function similar to PHP price2num()
$formconfirm
if ($action == 'delbookkeepingyear') {
div float
Buy price without taxes.
product_prepare_head($object)
Prepare array with list of tabs.
if(preg_match('/crypted:/i', $dolibarr_main_db_pass)||!empty($dolibarr_main_db_encrypted_pass)) $conf db type
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.