41require
'../../main.inc.php';
53require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formorder.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
58require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
59require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
60require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
61require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
62require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
65 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
68 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
71 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
72 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
74require_once NUSOAP_PATH.
'/nusoap.php';
77 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
81 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
82 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/mouvementstock.class.php';
86$langs->loadLangs(array(
'admin',
'orders',
'sendings',
'companies',
'bills',
'propal',
'receptions',
'supplier_proposal',
'products',
'stocks',
'productbatch'));
88 $langs->load(
'incoterm');
93$action =
GETPOST(
'action',
'alpha');
94$confirm =
GETPOST(
'confirm',
'alpha');
95$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'purchaseordercard';
96$cancel =
GETPOST(
'cancel',
'alpha');
97$backtopage =
GETPOST(
'backtopage',
'alpha');
98$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
105$origin =
GETPOST(
'origin',
'alpha');
108$stockDelete =
GETPOST(
'stockDelete',
'int');
119if ($user->isExternalUser()) {
120 $socid = $user->isExternalUser();
124$hookmanager->initHooks(array(
'ordersuppliercard',
'globalcard'));
129$extrafields->fetch_name_optionals_label(
$object->table_element);
132if ($id > 0 || !empty($ref)) {
133 $ret =
$object->fetch($id, $ref);
137 $ret =
$object->fetch_thirdparty();
141} elseif (!empty($socid) && $socid > 0) {
143 $ret =
$object->fetch_thirdparty();
150$isdraft = (isset(
$object->status) && (
$object->status == $object::STATUS_DRAFT) ? 1 : 0);
151$result =
restrictedArea($user,
'fournisseur', $object,
'commande_fournisseur',
'commande',
'fk_soc',
'rowid', $isdraft);
154$usercanread = ($user->hasRight(
"fournisseur",
"commande",
"lire") || $user->hasRight(
"supplier_order",
"lire"));
155$usercancreate = ($user->hasRight(
"fournisseur",
"commande",
"creer") || $user->hasRight(
"supplier_order",
"creer"));
156$usercandelete = (($user->hasRight(
"fournisseur",
"commande",
"supprimer") || $user->hasRight(
"supplier_order",
"supprimer")) || ($usercancreate && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT));
159$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_order_advance",
"validate")));
162$usercanapprove = $user->hasRight(
"fournisseur",
"commande",
"approuver");
163$usercanapprovesecond = $user->hasRight(
"fournisseur",
"commande",
"approve2");
164$usercanorder = $user->hasRight(
"fournisseur",
"commande",
"commander");
166 $usercanreceive = $user->hasRight(
"fournisseur",
"commande",
"receptionner");
168 $usercanreceive = $user->hasRight(
"reception",
"creer");
172$permissionnote = $usercancreate;
173$permissiondellink = $usercancreate;
174$permissiontoedit = $usercancreate;
175$permissiontoadd = $usercancreate;
176$permissiontoeditextra = $permissiontoadd;
177if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
179 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
183$caneditproject =
false;
196$parameters = array(
'socid' => $socid);
197$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
202if (empty($reshook)) {
203 $backurlforlist = DOL_URL_ROOT.
'/fourn/commande/list.php'.($socid > 0 ?
'?socid='.((int) $socid) :
'');
205 if (empty($backtopage) || ($cancel && empty($id))) {
206 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
207 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
208 $backtopage = $backurlforlist;
210 $backtopage = DOL_URL_ROOT.
'/fourn/commande/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
216 if (!empty($backtopageforcancel)) {
217 header(
"Location: ".$backtopageforcancel);
219 } elseif (!empty($backtopage)) {
220 header(
"Location: ".$backtopage);
226 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
228 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
230 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
232 if ($action ==
'setref_supplier' && $usercancreate) {
233 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'ORDER_SUPPLIER_MODIFY');
240 if ($action ==
'set_incoterms' && $usercancreate) {
248 if ($action ==
'setconditions' && $usercancreate) {
256 if ($action ==
'setmode' && $usercancreate) {
261 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
263 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
264 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
270 if ($action ==
'setbankaccount' && $usercancreate) {
278 if ($action ==
'setdate_livraison' && $usercancreate) {
279 $result =
$object->setDeliveryDate($user, $datelivraison);
286 if ($action ==
'classin' && $usercancreate && $caneditproject) {
287 $result =
$object->setProject($projectid);
294 if ($action ==
'confirm_delete_subtotalline' && $confirm ==
'yes' && $usercancreate) {
299 $result =
$object->deleteSubtotalLine($langs,
GETPOSTINT(
'lineid'), (
bool)
GETPOST(
'deletecorrespondingsubtotalline'));
304 $outputlangs = $langs;
310 $newlang =
$object->thirdparty->default_lang;
312 if (!empty($newlang)) {
314 $outputlangs->setDefaultLang($newlang);
315 $outputlangs->load(
'products');
319 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
322 header(
'Location: '.
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' => $id]));
330 if ($action ==
'addline' &&
GETPOST(
'updateallvatlinesblock',
'alpha') &&
GETPOST(
'vatforblocklines',
'alpha') !==
'' && $usercancreate) {
331 $tx_tva =
GETPOST(
'vatforblocklines') ?
GETPOST(
'vatforblocklines') : 0;
332 $result =
$object->updateSubtotalLineBlockLines($langs,
$object->getRangOfLine($lineid),
'tva', $tx_tva);
336 } elseif ($action ==
'addline' &&
GETPOST(
'updatealldiscountlinesblock',
'alpha') &&
GETPOST(
'discountforblocklines',
'alpha') !==
'' && $usercancreate) {
337 $discount =
GETPOST(
'discountforblocklines') ?
GETPOST(
'discountforblocklines') : 0;
338 $result =
$object->updateSubtotalLineBlockLines($langs,
$object->getRangOfLine($lineid),
'discount', $discount);
344 if ($action ==
'settags' &&
isModEnabled(
'category') && $usercancreate) {
354 if (!empty($new_socid) && $new_socid !=
$object->thirdparty->id) {
358 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
359 $sql .=
' SET fk_soc = '.((int) $new_socid);
360 $sql .=
' WHERE fk_soc = '.((int)
$object->thirdparty->id);
361 $sql .=
' AND rowid = '.((int)
$object->id);
363 $res =
$db->query($sql);
371 foreach (
$object->lines as $l) {
372 $sql =
'SELECT price, unitprice, tva_tx, ref_fourn';
373 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
374 $sql .=
' WHERE fk_product = '.((int) $l->fk_product);
375 $sql .=
' AND fk_soc = '.((int) $new_socid);
376 $sql .=
' ORDER BY unitprice ASC';
378 $resql =
$db->query($sql);
380 $num_row =
$db->num_rows($resql);
381 if (empty($num_row)) {
387 $l->ref_supplier =
'';
391 $obj =
$db->fetch_object($resql);
392 $l->subprice = $obj->unitprice;
393 $l->total_ht = $obj->price;
394 $l->tva_tx = $obj->tva_tx;
395 $l->total_tva = $l->total_ht * ($obj->tva_tx / 100);
396 $l->total_ttc = $l->total_ht + $l->total_tva;
397 $l->ref_supplier = $obj->ref_fourn;
408 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
412 if ($action ==
'setremisepercent' && $usercancreate) {
419 if ($action ==
'reopen' && $permissiontoadd) {
420 $resSetReopen =
$object->setReopen($user);
422 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
432 if ($action ==
'classifybilled' && $usercancreate) {
433 $ret =
$object->classifyBilled($user);
437 } elseif ($action ==
'classifyunbilled' && $usercancreate) {
438 $ret =
$object->classifyUnBilled($user);
445 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
449 foreach (
$object->lines as $line) {
450 if ($line->product_type == 1) {
451 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, (
float) $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
'HT', $line->info_bits, $line->product_type, 0, $alldate_start, $alldate_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice, $line->ref_supplier);
454 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'alpha') &&
GETPOST(
'remiseforalllines',
'alpha') !==
'' && $usercancreate) {
456 $remise_percent = (
GETPOST(
'remiseforalllines') ?
GETPOST(
'remiseforalllines') : 0);
457 $remise_percent = str_replace(
'*',
'', $remise_percent);
458 foreach (
$object->lines as $line) {
459 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, (
float) $remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
'HT', $line->info_bits, $line->product_type, 0, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice, $line->ref_supplier);
461 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !==
'' && $usercancreate) {
463 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
464 $vat_rate = str_replace(
'*',
'', $vat_rate);
467 foreach (
$object->lines as $line) {
468 if ($line->special_code == SUBTOTALS_SPECIAL_CODE) {
471 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, (
float) $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate,
'HT', $line->info_bits, $line->product_type, 0, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice, $line->ref_supplier);
473 } elseif ($action ==
'confirm_addtitleline' && $usercancreate) {
476 $langs->load(
'subtotals');
478 $desc =
GETPOST(
'subtotallinedesc',
'alphanohtml');
479 $depth =
GETPOSTINT(
'subtotallinelevel') ?? 1;
481 $subtotal_options = array();
483 foreach (CommandeFournisseur::$TITLE_OPTIONS as $option) {
484 $value =
GETPOST($option,
'alphanohtml');
486 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
491 $result =
$object->addSubtotalLine($langs, $desc, (
int) $depth, $subtotal_options);
502 $outputlangs = $langs;
503 $newlang =
GETPOST(
'lang_id',
'alpha');
505 $newlang =
$object->thirdparty->default_lang;
507 if (!empty($newlang)) {
509 $outputlangs->setDefaultLang($newlang);
512 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
517 header(
'Location: '.
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' => $id]));
519 } elseif ($action ==
'confirm_addsubtotalline' && $usercancreate) {
522 $langs->load(
'subtotals');
524 $choosen_line =
GETPOST(
'subtotaltitleline',
'alphanohtml');
525 foreach (
$object->lines as $line) {
526 if ($line->desc == $choosen_line && $line->special_code == SUBTOTALS_SPECIAL_CODE) {
528 $depth = -$line->qty;
532 $subtotal_options = array();
534 foreach (CommandeFournisseur::$SUBTOTAL_OPTIONS as $option) {
535 $value =
GETPOST($option,
'alphanohtml');
537 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
542 if (isset($desc) && isset($depth)) {
543 $result =
$object->addSubtotalLine($langs, $desc, (
int) $depth, $subtotal_options);
546 $object->errors[] = $langs->trans(
"CorrespondingTitleNotFound");
555 $outputlangs = $langs;
556 $newlang =
GETPOST(
'lang_id',
'alpha');
558 $newlang =
$object->thirdparty->default_lang;
560 if (!empty($newlang)) {
562 $outputlangs->setDefaultLang($newlang);
565 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
570 header(
'Location: '.
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' => $id]));
572 } elseif ($action ==
'addline' && $usercancreate) {
575 $langs->load(
'errors');
580 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
584 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
585 if ($prod_entry_mode ==
'free') {
599 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
600 if (empty($remise_percent)) {
605 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
606 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
608 if (is_array($extralabelsline)) {
610 foreach ($extralabelsline as $key => $value) {
611 unset($_POST[
"options_".$key]);
615 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
616 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
619 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
620 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
623 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
624 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
627 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
628 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
631 if (
GETPOST(
'qty',
'alpha') ==
'') {
632 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
636 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
637 if ($combinations =
GETPOST(
'combinations',
'array:alphanohtml')) {
641 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
642 $idprod = $res->fk_product_child;
644 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
650 if ($prod_entry_mode !=
'free' && empty($error)) {
654 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
659 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
660 $idprod = (int) $reg[1];
661 $res = $productsupplier->fetch($idprod);
664 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
666 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
667 if ($productsupplier->fourn_socid != $socid) {
668 $productsupplier->ref_supplier =
'';
671 $fksoctosearch =
$object->thirdparty->id;
672 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
674 } elseif (
GETPOSTINT(
'idprodfournprice') > 0) {
675 $qtytosearch = (float) $qty;
677 $idprod = $productsupplier->get_buyprice(
GETPOSTINT(
'idprodfournprice'), $qtytosearch);
678 $res = $productsupplier->fetch($idprod);
682 $label = $productsupplier->label;
686 $outputlangs = $langs;
688 if (
GETPOST(
'lang_id',
'aZ09')) {
689 $newlang =
GETPOST(
'lang_id',
'aZ09');
691 if (empty($newlang)) {
692 $newlang =
$object->thirdparty->default_lang;
694 if (!empty($newlang)) {
696 $outputlangs->setDefaultLang($newlang);
698 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
700 $desc = $productsupplier->description;
703 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
704 $desc = $productsupplier->desc_supplier;
715 $ref_supplier = $productsupplier->ref_supplier;
719 if (!GETPOSTISSET(
'tva_tx')) {
720 $tmpidprodfournprice =
GETPOST(
'idprodfournprice',
'alpha');
721 if (is_numeric($tmpidprodfournprice) && (
int) $tmpidprodfournprice > 0) {
722 $tmpidprodfournprice = (int) $tmpidprodfournprice;
724 $tmpidprodfournprice = 0;
728 if (empty($tva_tx)) {
736 $type = $productsupplier->type;
737 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
738 $price_base_type =
'HT';
740 $pu_devise =
price2num($price_ht_devise,
'CU');
741 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
742 $price_base_type =
'TTC';
744 $pu_devise =
price2num($price_ttc_devise,
'CU');
746 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
747 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
748 $pu = $productsupplier->fourn_pu;
751 $pu = $productsupplier->fourn_pu;
752 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
762 ($price_base_type ==
'HT' ? $pu : 0),
768 $productsupplier->product_fourn_price_id,
772 ($price_base_type ==
'TTC' ? $pu : 0),
779 $productsupplier->fk_unit,
783 min($rank, count(
$object->lines) + 1)
786 if ($idprod == -99 || $idprod == 0) {
789 $langs->load(
"errors");
790 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
795 $langs->load(
"errors");
796 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
798 } elseif (empty($error)) {
799 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
800 $tva_tx = str_replace(
'*',
'', $tva_tx);
801 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
804 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
808 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
816 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
821 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
823 $price_base_type =
'HT';
824 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
826 $result =
$object->addline($desc, (
float) $pu_ht, (
float) $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, (
float) $pu_ttc, $type, 0, 0,
$date_start, $date_end, $array_options, $fk_unit, (
float) $pu_ht_devise);
830 if (!$error && $result > 0) {
837 $outputlangs = $langs;
840 $newlang =
$object->thirdparty->default_lang;
841 if (
GETPOST(
'lang_id',
'aZ09')) {
842 $newlang =
GETPOST(
'lang_id',
'aZ09');
845 if (!empty($newlang)) {
847 $outputlangs->setDefaultLang($newlang);
852 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
858 unset($_POST [
'prod_entry_mode']);
860 unset($_POST[
'qty']);
861 unset($_POST[
'type']);
862 unset($_POST[
'remise_percent']);
864 unset($_POST[
'price_ht']);
865 unset($_POST[
'multicurrency_price_ht']);
866 unset($_POST[
'price_ttc']);
867 unset($_POST[
'fourn_ref']);
868 unset($_POST[
'tva_tx']);
869 unset($_POST[
'label']);
870 unset($localtax1_tx);
871 unset($localtax2_tx);
872 unset($_POST[
'np_marginRate']);
873 unset($_POST[
'np_markRate']);
874 unset($_POST[
'dp_desc']);
875 unset($_POST[
'idprodfournprice']);
876 unset($_POST[
'units']);
878 unset($_POST[
'date_starthour']);
879 unset($_POST[
'date_startmin']);
880 unset($_POST[
'date_startsec']);
881 unset($_POST[
'date_startday']);
882 unset($_POST[
'date_startmonth']);
883 unset($_POST[
'date_startyear']);
884 unset($_POST[
'date_endhour']);
885 unset($_POST[
'date_endmin']);
886 unset($_POST[
'date_endsec']);
887 unset($_POST[
'date_endday']);
888 unset($_POST[
'date_endmonth']);
889 unset($_POST[
'date_endyear']);
896 } elseif ($action ==
'updatetitleline' && GETPOSTISSET(
"save") && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
899 $langs->load(
'subtotals');
901 $desc =
GETPOST(
'line_desc',
'alphanohtml') ?? $langs->trans(
"Title");
904 $subtotal_options = array();
906 foreach (CommandeFournisseur::$TITLE_OPTIONS as $option) {
907 $value =
GETPOST($option,
'alphanohtml');
909 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
914 $result =
$object->updateSubtotalLine($langs,
GETPOSTINT(
'lineid'), $desc, $depth, $subtotal_options);
925 $outputlangs = $langs;
926 $newlang =
GETPOST(
'lang_id',
'alpha');
928 $newlang =
$object->thirdparty->default_lang;
930 if (!empty($newlang)) {
932 $outputlangs->setDefaultLang($newlang);
935 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
940 } elseif ($action ==
'updatesubtotalline' && GETPOSTISSET(
"save") && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
943 $langs->load(
'subtotals');
945 $desc =
GETPOST(
'line_desc',
'alphanohtml');
948 $subtotal_options = array();
950 foreach (CommandeFournisseur::$SUBTOTAL_OPTIONS as $option) {
951 $value =
GETPOST($option,
'alphanohtml');
953 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
958 $result =
$object->updateSubtotalLine($langs,
GETPOSTINT(
'lineid'), $desc, $depth, $subtotal_options);
966 $outputlangs = $langs;
967 $newlang =
GETPOST(
'lang_id',
'alpha');
969 $newlang =
$object->thirdparty->default_lang;
971 if (!empty($newlang)) {
973 $outputlangs->setDefaultLang($newlang);
976 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
981 } elseif ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
990 $res = $line->fetch($lineid);
997 if (
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY') == 1) {
998 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0, (
float)
price2num(
GETPOSTFLOAT(
'qty')), $line->fk_product,
'none',
GETPOSTINT(
'socid')) < 0) {
999 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1008 if (preg_match(
'/\*/', $vat_rate)) {
1013 $vat_rate = str_replace(
'*',
'', $vat_rate);
1017 if (
GETPOST(
'price_ht') !=
'') {
1018 $price_base_type =
'HT';
1022 $vatratecleaned = $vat_rate;
1023 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
1024 $vatratecleaned = trim($reg[1]);
1025 $vatratecode = $reg[2];
1029 $ht = (float) $ttc / (1 + ((
float) $vatratecleaned / 100));
1030 $price_base_type =
'HT';
1036 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1037 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1039 if (is_array($extralabelsline)) {
1040 foreach ($extralabelsline as $key => $value) {
1041 unset($_POST[
"options_".$key]);
1045 $result =
$object->updateline(
1047 GETPOST(
'product_desc',
'restricthtml'),
1056 GETPOSTISSET(
"type") ?
GETPOST(
"type") : $line->product_type,
1062 (float) $pu_ht_devise,
1065 unset($_POST[
'qty']);
1066 unset($_POST[
'type']);
1067 unset($_POST[
'idprodfournprice']);
1068 unset($_POST[
'remmise_percent']);
1069 unset($_POST[
'dp_desc']);
1070 unset($_POST[
'np_desc']);
1071 unset($_POST[
'pu']);
1072 unset($_POST[
'fourn_ref']);
1073 unset($_POST[
'tva_tx']);
1074 unset($_POST[
'date_start']);
1075 unset($_POST[
'date_end']);
1076 unset($_POST[
'units']);
1077 unset($localtax1_tx);
1078 unset($localtax2_tx);
1080 unset($_POST[
'date_starthour']);
1081 unset($_POST[
'date_startmin']);
1082 unset($_POST[
'date_startsec']);
1083 unset($_POST[
'date_startday']);
1084 unset($_POST[
'date_startmonth']);
1085 unset($_POST[
'date_startyear']);
1086 unset($_POST[
'date_endhour']);
1087 unset($_POST[
'date_endmin']);
1088 unset($_POST[
'date_endsec']);
1089 unset($_POST[
'date_endday']);
1090 unset($_POST[
'date_endmonth']);
1091 unset($_POST[
'date_endyear']);
1096 $outputlangs = $langs;
1099 $newlang =
GETPOST(
'lang_id',
'aZ09');
1102 $newlang =
$object->thirdparty->default_lang;
1104 if (!empty($newlang)) {
1106 $outputlangs->setDefaultLang($newlang);
1111 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1126 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
1129 $result =
$object->deleteLine($lineid);
1134 $outputlangs = $langs;
1137 $newlang =
GETPOST(
'lang_id',
'aZ09');
1140 $newlang =
$object->thirdparty->default_lang;
1142 if (!empty($newlang)) {
1144 $outputlangs->setDefaultLang($newlang);
1148 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1170 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
1178 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
1182 $result =
$object->valid($user);
1186 $outputlangs = $langs;
1189 $newlang =
GETPOST(
'lang_id',
'aZ09');
1192 $newlang =
$object->thirdparty->default_lang;
1194 if (!empty($newlang)) {
1196 $outputlangs->setDefaultLang($newlang);
1201 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1214 $action =
'confirm_approve';
1224 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
1229 $qualified_for_stock_change = 0;
1231 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1233 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1238 if (!$idwarehouse || $idwarehouse == -1) {
1240 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1246 $result =
$object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
1249 $outputlangs = $langs;
1252 $newlang =
GETPOST(
'lang_id',
'aZ09');
1255 $newlang =
$object->thirdparty->default_lang;
1257 if (!empty($newlang)) {
1259 $outputlangs->setDefaultLang($newlang);
1261 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1272 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1279 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1283 $result =
$object->refuse($user);
1285 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1293 if ($action ==
'commande') {
1294 $methodecommande =
GETPOSTINT(
'methodecommande');
1298 } elseif ($methodecommande <= 0 && !
getDolGlobalInt(
'SUPPLIER_ORDER_MODE_OPTIONAL')) {
1299 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1300 $action =
'createorder';
1304 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1306 $object->context[
"sendmanualtriggers"] =
GETPOST(
"manual_trigger_send");
1310 $outputlangs = $langs;
1313 $newlang =
GETPOST(
'lang_id',
'aZ09');
1316 $newlang =
$object->thirdparty->default_lang;
1318 if (!empty($newlang)) {
1320 $outputlangs->setDefaultLang($newlang);
1322 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1333 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1341 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1344 $errorsOnDelete = array();
1399 if (empty($errOnDelete)) {
1400 $result =
$object->delete($user);
1403 header(
"Location: " . DOL_URL_ROOT .
'/fourn/commande/list.php?restore_lastsearch_values=1');
1416 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1418 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1419 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1424 $result =
$object->createFromClone($user, $socid);
1426 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1438 if ($action ==
'livraison' && $usercanreceive) {
1449 $langs->load(
"sendings");
1459 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1470 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1474 $result =
$object->cancel($user);
1476 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1484 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1487 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1488 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1489 $trackid =
'sord'.$object->id;
1490 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1494 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1497 if ($action ==
'update_extras' && $permissiontoeditextra) {
1500 $attribute_name =
GETPOST(
'attribute',
'aZ09');
1503 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
1509 $result =
$object->updateExtraField($attribute_name,
'ORDER_SUPPLIER_MODIFY');
1517 $action =
'edit_extras';
1524 if ($action ==
'add' && $permissiontoadd) {
1526 $selectedLines =
GETPOST(
'toselect',
'array:int');
1528 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1545 $object->delivery_date = $datelivraison;
1547 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1548 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1554 $ret = $extrafields->setOptionalsFromPost(
null, $object);
1562 if (!empty($origin) && !empty($originid)) {
1563 $element = $subelement = $origin;
1564 $classname = ucfirst($subelement);
1565 if ($origin ==
'propal' || $origin ==
'proposal') {
1566 $element =
'comm/propal';
1567 $subelement =
'propal';
1568 $classname =
'Propal';
1570 if ($origin ==
'order' || $origin ==
'commande') {
1571 $element = $subelement =
'commande';
1572 $classname =
'Commande';
1574 if ($origin ==
'supplier_proposal') {
1575 $classname =
'SupplierProposal';
1576 $element =
'supplier_proposal';
1577 $subelement =
'supplier_proposal';
1581 $object->origin_type = $origin;
1582 $object->origin_id = $originid;
1586 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1587 if (!empty($other_linked_objects)) {
1588 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
1595 $srcobject =
new $classname(
$db);
1597 dol_syslog(
"Try to find source object origin=".
$object->origin_type.
" originid=".
$object->origin_id.
" to add lines");
1598 $result = $srcobject->fetch(
$object->origin_id);
1600 if (empty(
$object->delivery_date)) {
1601 $tmpdate = $srcobject->delivery_date;
1602 $object->setDeliveryDate($user, $tmpdate);
1605 $object->set_id_projet($user, $srcobject->fk_project);
1607 $lines = $srcobject->lines;
1608 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1609 $srcobject->fetch_lines();
1610 $lines = $srcobject->lines;
1613 $fk_parent_line = 0;
1614 $num = count($lines);
1616 for ($i = 0; $i < $num; $i++) {
1618 empty($lines[$i]->subprice)
1619 || $lines[$i]->qty < 0
1620 || !in_array($lines[$i]->
id, $selectedLines)
1621 || $lines[$i]->special_code == SUBTOTALS_SPECIAL_CODE
1626 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1627 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
1628 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1630 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1631 $fk_parent_line = 0;
1635 if (method_exists($lines[$i],
'fetch_optionals')) {
1636 $lines[$i]->fetch_optionals();
1637 $array_option = $lines[$i]->array_options;
1639 $array_option = array();
1643 $product_fourn_price_id = 0;
1644 if ($origin ==
"commande") {
1646 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty,
$object->socid);
1647 $lines[$i]->subprice = 0;
1649 $ref_supplier = $productsupplier->ref_supplier;
1650 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1652 foreach ($srcobject->lines as $li) {
1653 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1654 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1655 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1656 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1657 $sql .=
' AND fk_soc = '.((int)
$object->socid);
1658 $sql .=
' ORDER BY unitprice ASC';
1660 $resql =
$db->query($sql);
1662 $num_row =
$db->num_rows($resql);
1663 if (empty($num_row)) {
1664 $li->remise_percent = 0;
1666 $obj =
$db->fetch_object($resql);
1667 $li->subprice = $obj->unitprice;
1668 $li->remise_percent = $obj->remise_percent;
1677 $ref_supplier = $lines[$i]->ref_fourn;
1678 $product_fourn_price_id = 0;
1681 $tva_tx = $lines[$i]->tva_tx;
1683 if ($origin ==
"commande") {
1685 $soc->fetch($socid);
1691 $lines[$i]->subprice,
1694 $lines[$i]->localtax1_tx,
1695 $lines[$i]->localtax2_tx,
1696 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1697 $product_fourn_price_id,
1699 $lines[$i]->remise_percent,
1702 $lines[$i]->product_type,
1708 $lines[$i]->fk_unit,
1711 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->rowid,
1713 $lines[$i]->special_code,
1724 if ($result > 0 && $lines[$i]->product_type == 9) {
1725 $fk_parent_line = $result;
1733 $parameters = array(
'objFrom' => $srcobject);
1734 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
1758 $categories =
GETPOST(
'categories',
'array:int');
1759 if (method_exists($object,
'setCategories')) {
1760 $object->setCategories($categories);
1765 $langs->load(
"errors");
1770 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode((
string) ($id)));
1777 if ($action ==
'addcontact' && $permissiontoadd) {
1781 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1785 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1788 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1789 $langs->load(
"errors");
1790 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1795 } elseif ($action ==
'swapstatut' &&
$object->id > 0 && $permissiontoadd) {
1798 } elseif ($action ==
'deletecontact' &&
$object->id > 0 && $permissiontoadd) {
1803 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1825$title =
$object->ref.
" - ".$langs->trans(
'Card');
1826if ($action ==
'create') {
1827 $title = $langs->trans(
"NewOrderSupplier");
1829$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1830llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplier-order page-card');
1834if ($action ==
'create') {
1835 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1839 $currency_code =
$conf->currency;
1846 $societe->fetch($socid);
1849 if (!empty($origin) && !empty($originid)) {
1851 $element = $subelement = $origin;
1852 $classname = ucfirst($subelement);
1854 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1855 $element = $regs[1];
1856 $subelement = $regs[2];
1859 if ($origin ==
'propal' || $origin ==
'proposal') {
1860 $classname =
'Propal';
1861 $element =
'comm/propal';
1862 $subelement =
'propal';
1864 if ($origin ==
'order' || $origin ==
'commande') {
1865 $classname =
'Commande';
1866 $element = $subelement =
'commande';
1868 if ($origin ==
'supplier_proposal') {
1869 $classname =
'SupplierProposal';
1870 $element =
'supplier_proposal';
1871 $subelement =
'supplier_proposal';
1877 $objectsrc =
new $classname(
$db);
1878 $objectsrc->fetch($originid);
1879 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1880 $objectsrc->fetch_lines();
1882 $objectsrc->fetch_thirdparty();
1885 $objectsrc->fetch_optionals();
1886 $object->array_options = $objectsrc->array_options;
1888 $projectid = (int) $objectsrc->fk_project;
1889 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1891 if ($origin ==
"commande") {
1892 $cond_reglement_id = 0;
1893 $deposit_percent = 0;
1894 $mode_reglement_id = 0;
1895 $objectsrc->note_private =
'';
1896 $objectsrc->note_public =
'';
1897 if ($societe =
$object->thirdparty) {
1898 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1899 $deposit_percent = $societe->deposit_percent;
1900 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1902 $currency_code = $societe->multicurrency_code;
1904 $currency_tx = $societe->multicurrency_tx;
1909 $soc = $objectsrc->thirdparty;
1911 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1912 $deposit_percent = (!empty($objectsrc->deposit_percent) ? $objectsrc->deposit_percent : (!empty($soc->deposit_percent) ? $soc->deposit_percent : 0));
1913 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1914 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1915 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1916 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1917 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1920 $datelivraison = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1923 if (!empty($objectsrc->multicurrency_code)) {
1924 $currency_code = $objectsrc->multicurrency_code;
1926 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1927 $currency_tx = $objectsrc->multicurrency_tx;
1931 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1932 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1935 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1938 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1939 $deposit_percent = !empty($societe->deposit_percent) ? $societe->deposit_percent : 0;
1940 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1942 if (
isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1943 $currency_code = $societe->multicurrency_code;
1946 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1947 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1951 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1954 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1957 if (GETPOSTISSET(
'cond_reglement_id_deposit_percent')) {
1958 $deposit_percent =
GETPOSTFLOAT(
'cond_reglement_id_deposit_percent');
1961 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1962 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1963 print
'<input type="hidden" name="action" value="add">';
1964 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1965 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1966 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1967 print
'<input type="hidden" name="changecompany" value="0">';
1969 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1971 if ($backtopageforcancel) {
1972 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1975 if (!empty($currency_tx)) {
1976 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1982 $parameters = array();
1984 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters, $object, $action);
1985 if (empty($reshook)) {
1986 print
'<table class="border centpercent">';
1989 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1992 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1995 if (!empty($societe->id) && $societe->id > 0) {
1996 print $societe->getNomUrl(1,
'supplier');
1997 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1999 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
2000 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
2004 $(document).ready(function() {
2005 $("#socid").change(function() {
2006 console.log("We have changed the company - Reload page");
2008 $("input[name=action]").val("create");
2009 $("input[name=changecompany]").val("1");
2010 $("form[name=add]").submit();
2015 print
' <a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&client=0&fournisseur=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
2021 print
'<tr><td>'.$form->textwithpicto($langs->trans(
'RefSupplier'), $langs->trans(
'RefOfOnVendorSide', $langs->transnoentitiesnoconv(
"SupplierOrder")));
2022 print
'</td><td><input name="refsupplier" type="text"></td>';
2026 if (!empty($societe->id) && $societe->id > 0) {
2028 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2030 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
2032 $thirdparty = $societe;
2034 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
2035 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2041 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2042 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2043 print $form->getSelectConditionsPaiements((GETPOSTISSET(
'cond_reglement_id') &&
GETPOST(
'cond_reglement_id') != 0) ?
GETPOSTINT(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', 1, 1, 0,
'maxwidth200 widthcentpercentminusx', $deposit_percent);
2047 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2048 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2049 $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') &&
GETPOSTINT(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
2054 print $langs->trans(
'DateDeliveryPlanned');
2061 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2062 print $form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin, 0,
"set", 1, 1);
2067 $langs->load(
"bank");
2068 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2069 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
2070 $form->select_comptes($fk_account ??
'',
'fk_account', 0,
'', 1);
2078 $langs->load(
'projects');
2079 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
2082 $projSocFilter = $socid;
2083 } elseif ((
int) $socid == 0 ||
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS')) {
2084 $projSocFilter = -1;
2086 $projSocFilter = $societe->id;
2088 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects($projSocFilter, $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
2089 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?action=create&status=1'.(!empty($societe->id) ?
'&socid='.$societe->id :
"").
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create'.(!empty($societe->id) ?
'&socid='.$societe->id :
"")).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
2095 $fkincoterms = (!empty(
$object->fk_incoterms) ?
$object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
2096 $locincoterms = (!empty(
$object->location_incoterms) ?
$object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
2098 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
2099 print
'<td class="maxwidthonsmartphone">';
2100 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2101 print $form->select_incoterms($fkincoterms, $locincoterms);
2108 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
2109 print
'<td class="maxwidthonsmartphone">';
2110 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
2111 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
2117 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
2118 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
2122 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
2124 $doleditor =
new DolEditor(
'note_public', isset($note_public) ? $note_public :
GETPOST(
'note_public',
'restricthtml'),
'', 80,
'dolibarr_notes',
'In', false, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
2125 print $doleditor->Create(1);
2130 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
2132 $doleditor =
new DolEditor(
'note_private', isset($note_private) ? $note_private :
GETPOST(
'note_private',
'restricthtml'),
'', 80,
'dolibarr_notes',
'In', false, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
2133 print $doleditor->Create(1);
2138 if (!empty($origin) && !empty($originid) && is_object($objectsrc) && $classname !==
null) {
2139 print
"\n<!-- ".$classname.
" info -->";
2141 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2142 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2143 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2144 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2145 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2147 $newclassname = $classname;
2148 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
2149 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2150 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2151 if (
$mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
2152 print
'<tr><td>'.$langs->transcountry(
"AmountLT1",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2155 if (
$mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
2156 print
'<tr><td>'.$langs->transcountry(
"AmountLT2",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2159 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2162 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
2163 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
2164 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
2169 $parameters = array();
2170 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
2171 print $hookmanager->resPrint;
2173 if (empty($reshook)) {
2174 if (
getDolGlobalString(
'THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_SUPPLIER_ORDER') && !empty($societe->id)) {
2177 $tpExtrafieldLabels = $tpExtrafields->fetch_name_optionals_label($societe->table_element);
2178 if ($societe->fetch_optionals() > 0) {
2179 $object->array_options = array_merge(
$object->array_options, $societe->array_options);
2183 print
$object->showOptionals($extrafields,
'create');
2191 print $form->buttonsSaveCancel(
"CreateDraft");
2194 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
2195 $title = $langs->trans(
'ProductsAndServices');
2198 print
'<div class="div-table-responsive-no-min">';
2199 print
'<table class="noborder centpercent">';
2201 $selectedLines = array();
2203 $objectsrc->printOriginLinesList(
'', $selectedLines);
2209} elseif (!empty(
$object->id)) {
2211 $result =
$object->fetch($id, $ref);
2216 $societe =
$object->thirdparty;
2219 $author->fetch(
$object->user_author_id);
2223 $title = $langs->trans(
"SupplierOrder");
2224 print
dol_get_fiche_head($head,
'card', $title, -1,
'order', 0,
'',
'', 0,
'', 1);
2230 if ($action ==
'delete') {
2231 $arrayAjouts = array();
2262 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.((
int)
$object->id), $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete', $arrayAjouts, 0, 2, $heightModal, $widthModal);
2266 if ($action ==
'clone') {
2267 $filter =
'(s.fournisseur:=:1)';
2269 $formquestion = array(
2270 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
2273 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
2277 if ($action ==
'valid') {
2281 if (preg_match(
'/^[\(]?PROV/i', (
string)
$object->ref) || empty(
$object->ref)) {
2291 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
2293 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2296 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE',
$object->socid, $object);
2299 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2304 if ($action ==
'approve' || $action ==
'approve2') {
2305 $qualified_for_stock_change = 0;
2307 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2309 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2312 $formquestion = array();
2314 $langs->load(
"stocks");
2315 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2318 if (
$conf->browser->name ==
'ie') {
2321 $formquestion = array(
2325 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2328 $text = $langs->trans(
"ConfirmApproveThisOrder",
$object->ref);
2330 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2333 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE',
$object->socid, $object);
2336 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2340 if ($action ==
'refuse') {
2341 $formquestion = array(
2344 'name' =>
'refuse_note',
2345 'label' => $langs->trans(
"Reason"),
2347 'morecss' =>
'minwidth300'
2350 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder",
$object->ref),
"confirm_refuse", $formquestion, 0, 1);
2354 if ($action ==
'cancel') {
2355 $formquestion = array(
2358 'name' =>
'cancel_note',
2359 'label' => $langs->trans(
"Reason"),
2361 'morecss' =>
'minwidth300'
2365 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2369 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_CANCEL',
$object->socid, $object);
2371 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder",
$object->ref),
"confirm_cancel", $formquestion, 0, 1);
2375 if ($action ==
'commande') {
2376 $formquestion = array();
2379 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2383 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT',
$object->socid, $object);
2386 require_once DOL_DOCUMENT_ROOT.
'/webhook/class/target.class.php';
2388 if ($targetstatic->isTriggerCodeManualTarget(
'ORDER_SUPPLIER_SUBMIT') > 0) {
2389 $formquestion[] = array(
'type' =>
'checkbox',
'name' =>
'manual_trigger_send',
'label' => $langs->trans(
"QuestionSendManualTrigger"));
2392 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id.
"&datecommande=".$date_com.
"&methode=".
GETPOST(
"methodecommande").
"&comment=".urlencode(
GETPOST(
"comment")), $langs->trans(
"MakeOrder"), $langs->trans(
"ConfirmMakeOrder",
dol_print_date($date_com,
'day')),
"confirm_commande", $formquestion, 0, 2);
2396 if ($action ==
'ask_deleteline') {
2397 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2401 if ($action ==
'add_title_line') {
2402 $langs->load(
'subtotals');
2404 $depth_array =
$object->getPossibleLevels($langs);
2405 require DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_create.tpl.php';
2406 } elseif ($action ==
'add_subtotal_line') {
2407 $langs->load(
'subtotals');
2409 $titles =
$object->getPossibleTitles();
2410 require DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_create.tpl.php';
2414 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2415 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
2416 if (empty($reshook)) {
2417 $formconfirm .= $hookmanager->resPrint;
2418 } elseif ($reshook > 0) {
2419 $formconfirm = $hookmanager->resPrint;
2428 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2430 $morehtmlref =
'<div class="refidno">';
2432 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, (
int) $usercancreate,
'string',
'', 0, 1);
2433 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $usercancreate,
'string'.(isset(
$conf->global->THIRDPARTY_REF_INPUT_SIZE) ?
':' .
getDolGlobalString(
'THIRDPARTY_REF_INPUT_SIZE') :
''),
'', null, null,
'', 1);
2435 $morehtmlref .=
'<br>';
2436 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2437 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2438 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2439 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2440 $filter =
'(s.fournisseur:=:1)';
2441 $morehtmlref .= $form->select_company(
$object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2442 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2443 $morehtmlref .=
'</form>';
2445 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2447 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2449 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
2451 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.
$object->thirdparty->id.
'&search_company='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2457 $langs->load(
"projects");
2458 $morehtmlref .=
'<br>';
2459 if ($permissiontoadd) {
2460 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2461 if ($action !=
'classify' && $caneditproject) {
2462 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2464 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->socid : -1), (
string)
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 1, 0, 0, 1,
'',
'maxwidth300');
2466 if (!empty(
$object->fk_project)) {
2468 $proj->fetch(
$object->fk_project);
2469 $morehtmlref .= $proj->getNomUrl(1);
2471 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2476 $morehtmlref .=
'</div>';
2479 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2482 $parameters = array();
2484 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters, $object, $action);
2485 if (empty($reshook)) {
2486 print
'<div class="fichecenter">';
2487 print
'<div class="fichehalfleft">';
2488 print
'<div class="underbanner clearboth"></div>';
2490 print
'<table class="border tableforfield centpercent">';
2493 if (
$object->methode_commande_id > 0) {
2498 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2501 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2505 if (
$object->methode_commande) {
2506 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
2511 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2512 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2517 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2518 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2520 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2521 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2524 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2525 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2526 $absolute_discount =
price2num($absolute_discount,
'MT');
2527 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2529 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2531 $thirdparty = $societe;
2533 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
2534 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2539 $langs->load(
'bills');
2540 print
'<tr><td class="nowrap">';
2541 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2542 print $langs->trans(
'PaymentConditions');
2544 if ($action !=
'editconditions' && $permissiontoadd) {
2545 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editconditions&token='.newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetConditions'), 1).
'</a></td>';
2547 print
'</tr></table>';
2549 if ($action ==
'editconditions') {
2550 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id', 1,
'', 1,
$object->deposit_percent);
2552 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'none', 1,
'', 1,
$object->deposit_percent);
2558 $langs->load(
'bills');
2559 print
'<tr><td class="nowrap">';
2560 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2561 print $langs->trans(
'PaymentMode');
2563 if ($action !=
'editmode' && $permissiontoadd) {
2564 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmode&token='.newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetMode'), 1).
'</a></td>';
2566 print
'</tr></table>';
2568 if ($action ==
'editmode') {
2569 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2571 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'none');
2577 print
'<tr><td class="nowrap">';
2578 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2579 print $langs->trans(
'BankAccount');
2581 if ($action !=
'editbankaccount' && $permissiontoadd) {
2582 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editbankaccount&token='.newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetBankAccount'), 1).
'</a></td>';
2584 print
'</tr></table>';
2586 if ($action ==
'editbankaccount') {
2587 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
2589 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'none');
2597 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2598 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2603 print
'<table class="nobordernopadding centpercent"><tr><td>';
2604 print $langs->trans(
'DateDeliveryPlanned');
2606 if ($action !=
'editdate_livraison') {
2607 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate_livraison&token='.newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetDeliveryDate'), 1).
'</a></td>';
2609 print
'</tr></table>';
2611 if ($action ==
'editdate_livraison') {
2612 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2613 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2614 print
'<input type="hidden" name="action" value="setdate_livraison">';
2619 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin, 0,
"setdate_livraison");
2620 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2623 $usehourmin =
'day';
2625 $usehourmin =
'dayhour';
2628 if (
$object->hasDelay() && !empty(
$object->delivery_date) && (
$object->status == $object::STATUS_ORDERSENT ||
$object->status == $object::STATUS_RECEIVED_PARTIALLY)) {
2629 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2637 print
'<table class="nobordernopadding centpercent"><tr><td>';
2638 print $langs->trans(
'IncotermLabel');
2639 print
'<td><td class="right">';
2640 if ($usercancreate) {
2641 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=editincoterm&token='.newToken().
'">'.
img_edit().
'</a>';
2645 print
'</td></tr></table>';
2648 if ($action !=
'editincoterm') {
2651 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2659 print
'<table class="nobordernopadding centpercent"><tr><td>';
2660 print $langs->trans(
"Categories");
2661 print
'<td><td class="right">';
2662 if ($usercancreate) {
2663 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=edittags&token='.newToken().
'">'.
img_edit().
'</a>';
2667 print
'</td></tr></table>';
2670 if ($action ==
'edittags') {
2671 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2672 print
'<input type="hidden" name="action" value="settags">';
2673 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2674 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
2675 print
'<input type="submit" class="button valignmiddle smallpaddingimp" value="'.$langs->trans(
"Modify").
'">';
2678 print $form->showCategories(
$object->id, Categorie::TYPE_SUPPLIER_ORDER, 1);
2684 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2689 print
'<div class="fichehalfright">';
2690 print
'<div class="underbanner clearboth"></div>';
2692 print
'<table class="border tableforfield centpercent">';
2694 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
2698 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2699 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2702 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2708 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2709 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2712 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2717 if (
$mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2719 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
2720 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2722 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2726 if (
$mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2728 print
'<td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
2729 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2731 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2739 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->supplier_order_min_amount));
2744 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2745 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) . $alert .
'</td>';
2748 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2763 print
'<div class="clearboth"></div><br>';
2766 $blocname =
'contacts';
2767 $title = $langs->trans(
'ContactsAddresses');
2768 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2772 $blocname =
'notes';
2773 $title = $langs->trans(
'Notes');
2774 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2783 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2784 <input type="hidden" name="token" value="'.newToken().
'">
2785 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2786 <input type="hidden" name="mode" value="">
2787 <input type="hidden" name="page_y" value="">
2788 <input type="hidden" name="id" value="'.
$object->id.
'">
2789 <input type="hidden" name="socid" value="'.$societe->id.
'">
2794 include DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_ajaxrow.tpl.php';
2796 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
2800 print
'<div class="div-table-responsive-no-min">';
2801 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2804 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2807 $inputalsopricewithtax = 1;
2808 $senderissupplier = 2;
2810 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY');
2822 if ($action !=
'editline') {
2825 $parameters = array();
2826 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2830 if (empty($reshook)) {
2846 if ($user->socid == 0 && $action !=
'delete') {
2847 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2848 print
'<div class="tabsAction">';
2850 $parameters = array();
2851 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2853 if (empty($reshook)) {
2858 $langs->load(
'subtotals');
2860 $url_button = array();
2862 $url_button[] = array(
2863 'lang' =>
'subtotals',
2865 'perm' => (
bool) $usercancreate,
2866 'label' => $langs->trans(
'AddTitleLine'),
2867 'url' =>
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'add_title_line'],
true)
2870 $url_button[] = array(
2871 'lang' =>
'subtotals',
2873 'perm' => (
bool) $usercancreate,
2874 'label' => $langs->trans(
'AddSubtotalLine'),
2875 'url' =>
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'add_subtotal_line'],
true)
2878 print dolGetButtonAction(
'', $langs->trans(
'Subtotal'),
'default', $url_button,
'',
true);
2881 if (
$object->status == 0 && $num > 0) {
2882 if ($usercanvalidate) {
2883 $tmpbuttonlabel = $langs->trans(
'Validate');
2885 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2888 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.newToken().
'">';
2889 print $tmpbuttonlabel;
2901 if ($usercanorder) {
2902 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2908 if ($usercanapprove) {
2910 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2912 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2915 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2922 if ($usercanapprovesecond) {
2923 if (!empty(
$object->user_approve_id2)) {
2924 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2926 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2929 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2936 if ($usercanapprove || $usercanapprovesecond) {
2937 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2939 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2944 if (empty($user->socid)) {
2946 if ($usercanorder) {
2947 print dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init'],
true).
'#formmailbeforetitle',
'');
2955 if (!$buttonshown && $usercanapprove) {
2958 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2962 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2965 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2969 if (in_array(
$object->status, array(3, 4, 5, 6, 7, 9))) {
2970 if ($usercanorder) {
2971 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2978 $labelofbutton = $langs->trans(
'ReceiveProducts');
2980 $labelofbutton = $langs->trans(
"CreateReception");
2981 if (!empty(
$object->linkedObjects[
'reception'])) {
2982 foreach (
$object->linkedObjects[
'reception'] as $element) {
2983 if ($element->statut >= 0) {
2996 $dispachedLines =
$object->getDispachedLines(1);
2997 $nbDispachedLines = count($dispachedLines);
2998 if ($nbDispachedLines > 0) {
3003 if (in_array(
$object->status, array(3, 4, 5))) {
3004 if (
isModEnabled(
"supplier_order") && $usercanreceive) {
3005 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.
$object->id.
'">'.$labelofbutton.
'</a></div>';
3007 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
3013 if ($usercanorder) {
3014 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=createorder&token='.newToken().
'#makeorder">'.$langs->trans(
"MakeOrder").
'</a></div>';
3016 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
3022 if ($usercanreceive) {
3023 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&token='.newToken().
'&action=classifyreception#classifyreception">'.$langs->trans(
"ClassifyReception").
'</a></div>';
3030 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
3031 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?action=create&origin='.
$object->element.
'&originid='.
$object->id.
'&socid='.
$object->socid.
'">'.$langs->trans(
"SupplierOrderCreateBill").
'</a>';
3039 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
3041 if (!empty(
$object->linkedObjectsIds[
'invoice_supplier']) || (empty(
$object->linkedObjectsIds[
'invoice_supplier']) && !
getDolGlobalInt(
'SUPPLIER_ORDER_DISABLE_CLASSIFY_BILLED_FROM_SUPPLIER_ORDER'))) {
3042 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
3043 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
3046 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
3052 if ($usercancreate &&
$object->billed > 0 &&
$object->status > $object::STATUS_DRAFT) {
3053 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyunbilled&token='.newToken().
'">'.$langs->trans(
"ClassifyUnbilled").
'</a>';
3057 if ($usercancreate) {
3058 print
'<a class="butAction butActionClone" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&token='.newToken().
'&object=order">'.$langs->trans(
"ToClone").
'</a>';
3063 if ($usercanorder) {
3064 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
3069 if (!empty($usercandelete)) {
3070 if ($hasreception) {
3071 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
3073 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.newToken().
'">'.$langs->trans(
"Delete").
'</a>';
3083 print
'<!-- form to record supplier order -->'.
"\n";
3084 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
3086 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3087 print
'<input type="hidden" name="action" value="commande">';
3089 print
'<table class="noborder centpercent">';
3091 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
3093 print $form->selectDate($date_com ?:
'',
'', 0, 0, 0,
"commande", 1, 1);
3097 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
3098 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
3101 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
3103 print
'<tr><td class="center" colspan="2">';
3104 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
3105 print
' ';
3106 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
3115 if (
GETPOST(
'modelselected')) {
3116 $action =
'presend';
3119 if ($action !=
'createorder' && $action !=
'presend') {
3120 print
'<div class="fichecenter"><div class="fichehalfleft">';
3125 $relativepath = $objref.
'/'.$objref.
'.pdf';
3127 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
3128 $genallowed = $usercanread;
3129 $delallowed = $usercancreate;
3132 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, (
int) $genallowed, (int) $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'',
$object->thirdparty->default_lang,
'', $object);
3133 $somethingshown = $formfile->numoffiles;
3136 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'supplier_order',
'order_supplier'), 1);
3137 $linktoelem = $tmparray[
'linktoelem'];
3138 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
3139 print $htmltoenteralink;
3141 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
3143 print
'</div><div class="fichehalfright">';
3145 if ($action ==
'classifyreception') {
3148 print
'<!-- form to record purchase order received -->'.
"\n";
3149 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
3150 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3151 print
'<input type="hidden" name="action" value="livraison">';
3154 print
'<table class="noborder centpercent">';
3156 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
3158 print $form->selectDate($datepreselected,
'', 1, 1, 0,
"commande", 1, 1);
3159 print
"</td></tr>\n";
3161 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
3163 $liv[
''] =
' ';
3164 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
3165 $liv[
'par'] = $langs->trans(
"PartialWoman");
3166 $liv[
'nev'] = $langs->trans(
"NeverReceived");
3167 $liv[
'can'] = $langs->trans(
"Canceled");
3169 print $form->selectarray(
"type", $liv);
3172 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
3173 print
'<tr><td class="center" colspan="2">';
3174 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
3175 print
' ';
3176 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
3185 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
3187 $somethingshown = $formactions->showactions($object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
3189 print
'</div></div>';
3195 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
3196 $mode =
GETPOST(
'mode',
'alpha');
3197 $ws_url =
$object->thirdparty->webservices_url;
3198 $ws_key =
$object->thirdparty->webservices_key;
3199 $ws_user =
GETPOST(
'ws_user',
'alpha');
3200 $ws_password =
GETPOST(
'ws_password',
'alpha');
3201 $error_occurred =
false;
3204 $ws_ns =
'http://www.dolibarr.org/ns/';
3205 $ws_authentication = array(
3206 'dolibarrkey' => $ws_key,
3207 'sourceapplication' =>
'DolibarrWebServiceClient',
3208 'login' => $ws_user,
3209 'password' => $ws_password,
3216 if (empty($ws_url) || empty($ws_key)) {
3217 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
3219 $error_occurred =
true;
3220 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
3225 if ($mode ==
"init") {
3227 print
'<table class="border centpercent">';
3228 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
3229 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3230 print
'<input type="hidden" name="action" value="webservice">';
3231 print
'<input type="hidden" name="mode" value="check">';
3233 if ($error_occurred) {
3234 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3235 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3238 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
3240 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
3242 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
3244 print
'<tr><td class="center" colspan="2">';
3245 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
3246 print
' ';
3248 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3255 } elseif ($mode ==
"check") {
3257 $ws_thirdparty =
'';
3258 $error_occurred =
false;
3261 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
3262 $soapclient_user->soap_defencoding =
'UTF-8';
3263 $soapclient_user->decodeUTF8(
false);
3266 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ws_user);
3267 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
3268 $user_status_code = $result_user[
"result"][
"result_code"];
3270 if ($user_status_code ==
"OK") {
3272 $ws_entity = $result_user[
"user"][
"entity"];
3273 $ws_authentication[
'entity'] = $ws_entity;
3274 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
3275 if (empty($ws_thirdparty)) {
3276 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
3277 $error_occurred =
true;
3280 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
3281 $soapclient_product->soap_defencoding =
'UTF-8';
3282 $soapclient_product->decodeUTF8(
false);
3287 foreach (
$object->lines as $line) {
3289 $ref_supplier = $line->ref_supplier;
3290 $line_id = $i.
"º) ".$line->product_ref.
": ";
3291 if (empty($ref_supplier)) {
3294 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
3295 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
3296 if (!$result_product) {
3297 setEventMessages($line_id.$langs->trans(
"Error").
" SOAP ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
3298 $error_occurred =
true;
3303 $status_code = $result_product[
"result"][
"result_code"];
3304 if (empty($status_code)) {
3305 setEventMessages($langs->trans(
"Error").
" SOAP '".$soapclient_product->error_str.
"'",
null,
'errors');
3306 } elseif ($status_code !=
"OK") {
3307 if ($status_code ==
"NOT_FOUND") {
3308 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
3310 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
3311 $error_occurred =
true;
3318 $supplier_price =
price($result_product[
"product"][
"price_net"]);
3319 $local_price =
null;
3322 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
3323 if (count($product_fourn_list) > 0) {
3324 foreach ($product_fourn_list as $product_fourn_line) {
3326 if ($product_fourn_line->fourn_id ==
$object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
3327 $local_price =
price($product_fourn_line->fourn_price);
3332 if ($local_price !=
null && $local_price != $supplier_price) {
3333 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
3337 if (empty($result_product[
"product"][
"status_tosell"])) {
3338 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
3342 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
3343 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
3344 $error_occurred =
true;
3345 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
3346 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
3347 $error_occurred =
true;
3349 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
3350 $error_occurred =
true;
3354 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
3355 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3356 print
'<input type="hidden" name="action" value="webservice">';
3357 print
'<input type="hidden" name="mode" value="send">';
3358 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
3359 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
3360 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
3361 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
3362 if ($error_occurred) {
3363 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3365 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
3366 print
' ';
3368 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3374 $modelmail =
'order_supplier_send';
3375 $defaulttopic =
'SendOrderRef';
3377 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3378 $trackid =
'sord'.$object->id;
3380 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage predefined suppliers products.
const STATUS_RECEIVED_PARTIALLY
Received partially.
const STATUS_VALIDATED
Validated status.
const STATUS_RECEIVED_COMPLETELY
Received completely.
const STATUS_DRAFT
Draft status.
const STATUS_ACCEPTED
Accepted.
const STATUS_ORDERSENT
Order sent, shipment on process.
Class to manage line orders.
Class to manage a WYSIWYG editor.
Class to manage the table of subscription to notifications.
Class ProductCombination Used to represent the relation between a product and one of its variants.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
$date_start
Variables from include:
ordersupplier_prepare_head(CommandeFournisseur $object)
Prepare array with list of tabs.
dol_now($mode='gmt')
Return date for now.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
dol_print_url($url, $target='_blank', $max=32, $withpicto=0, $morecss='')
Show Url link.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
getMultidirOutput($object, $module='', $forobject=0, $mode='output')
Return the full path of the directory where a module (or an object of a module) stores its files.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.: VAT NPR in France)
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
dol_htmloutput_events($disabledoutputofmessages=0)
Print formatted messages to output (Used to show messages on html output).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular VAT rate, when selling a product with vat $vatrate,...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
buildzip.php
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.