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');
584 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
585 if ($prod_entry_mode ==
'free') {
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;
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) {
838 $outputlangs = $langs;
841 $newlang =
$object->thirdparty->default_lang;
842 if (
GETPOST(
'lang_id',
'aZ09')) {
843 $newlang =
GETPOST(
'lang_id',
'aZ09');
846 if (!empty($newlang)) {
848 $outputlangs->setDefaultLang($newlang);
853 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
859 unset($_POST [
'prod_entry_mode']);
861 unset($_POST[
'qty']);
862 unset($_POST[
'type']);
863 unset($_POST[
'remise_percent']);
865 unset($_POST[
'price_ht']);
866 unset($_POST[
'multicurrency_price_ht']);
867 unset($_POST[
'price_ttc']);
868 unset($_POST[
'fourn_ref']);
869 unset($_POST[
'tva_tx']);
870 unset($_POST[
'label']);
871 unset($localtax1_tx);
872 unset($localtax2_tx);
873 unset($_POST[
'np_marginRate']);
874 unset($_POST[
'np_markRate']);
875 unset($_POST[
'dp_desc']);
876 unset($_POST[
'idprodfournprice']);
877 unset($_POST[
'units']);
879 unset($_POST[
'date_starthour']);
880 unset($_POST[
'date_startmin']);
881 unset($_POST[
'date_startsec']);
882 unset($_POST[
'date_startday']);
883 unset($_POST[
'date_startmonth']);
884 unset($_POST[
'date_startyear']);
885 unset($_POST[
'date_endhour']);
886 unset($_POST[
'date_endmin']);
887 unset($_POST[
'date_endsec']);
888 unset($_POST[
'date_endday']);
889 unset($_POST[
'date_endmonth']);
890 unset($_POST[
'date_endyear']);
897 } elseif ($action ==
'updatetitleline' &&
GETPOSTISSET(
"save") && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
900 $langs->load(
'subtotals');
902 $desc =
GETPOST(
'line_desc',
'alphanohtml') ?? $langs->trans(
"Title");
905 $subtotal_options = array();
907 foreach (CommandeFournisseur::$TITLE_OPTIONS as $option) {
908 $value =
GETPOST($option,
'alphanohtml');
910 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
915 $result =
$object->updateSubtotalLine($langs,
GETPOSTINT(
'lineid'), $desc, $depth, $subtotal_options);
926 $outputlangs = $langs;
927 $newlang =
GETPOST(
'lang_id',
'alpha');
929 $newlang =
$object->thirdparty->default_lang;
931 if (!empty($newlang)) {
933 $outputlangs->setDefaultLang($newlang);
936 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
941 } elseif ($action ==
'updatesubtotalline' &&
GETPOSTISSET(
"save") && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
944 $langs->load(
'subtotals');
946 $desc =
GETPOST(
'line_desc',
'alphanohtml');
949 $subtotal_options = array();
951 foreach (CommandeFournisseur::$SUBTOTAL_OPTIONS as $option) {
952 $value =
GETPOST($option,
'alphanohtml');
954 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
959 $result =
$object->updateSubtotalLine($langs,
GETPOSTINT(
'lineid'), $desc, $depth, $subtotal_options);
967 $outputlangs = $langs;
968 $newlang =
GETPOST(
'lang_id',
'alpha');
970 $newlang =
$object->thirdparty->default_lang;
972 if (!empty($newlang)) {
974 $outputlangs->setDefaultLang($newlang);
977 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
982 } elseif ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
991 $res = $line->fetch($lineid);
998 if (
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY') == 1) {
999 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0, (
float)
price2num(
GETPOSTFLOAT(
'qty')), $line->fk_product,
'none',
GETPOSTINT(
'socid')) < 0) {
1000 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1009 if (preg_match(
'/\*/', $vat_rate)) {
1014 $vat_rate = str_replace(
'*',
'', $vat_rate);
1018 if (
GETPOST(
'price_ht') !=
'') {
1019 $price_base_type =
'HT';
1023 $vatratecleaned = $vat_rate;
1024 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
1025 $vatratecleaned = trim($reg[1]);
1026 $vatratecode = $reg[2];
1030 $ht = (float) $ttc / (1 + ((
float) $vatratecleaned / 100));
1031 $price_base_type =
'HT';
1037 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1038 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1040 if (is_array($extralabelsline)) {
1041 foreach ($extralabelsline as $key => $value) {
1042 unset($_POST[
"options_".$key]);
1046 $result =
$object->updateline(
1048 GETPOST(
'product_desc',
'restricthtml'),
1063 (float) $pu_ht_devise,
1066 unset($_POST[
'qty']);
1067 unset($_POST[
'type']);
1068 unset($_POST[
'idprodfournprice']);
1069 unset($_POST[
'remmise_percent']);
1070 unset($_POST[
'dp_desc']);
1071 unset($_POST[
'np_desc']);
1072 unset($_POST[
'pu']);
1073 unset($_POST[
'fourn_ref']);
1074 unset($_POST[
'tva_tx']);
1075 unset($_POST[
'date_start']);
1076 unset($_POST[
'date_end']);
1077 unset($_POST[
'units']);
1078 unset($localtax1_tx);
1079 unset($localtax2_tx);
1081 unset($_POST[
'date_starthour']);
1082 unset($_POST[
'date_startmin']);
1083 unset($_POST[
'date_startsec']);
1084 unset($_POST[
'date_startday']);
1085 unset($_POST[
'date_startmonth']);
1086 unset($_POST[
'date_startyear']);
1087 unset($_POST[
'date_endhour']);
1088 unset($_POST[
'date_endmin']);
1089 unset($_POST[
'date_endsec']);
1090 unset($_POST[
'date_endday']);
1091 unset($_POST[
'date_endmonth']);
1092 unset($_POST[
'date_endyear']);
1097 $outputlangs = $langs;
1100 $newlang =
GETPOST(
'lang_id',
'aZ09');
1103 $newlang =
$object->thirdparty->default_lang;
1105 if (!empty($newlang)) {
1107 $outputlangs->setDefaultLang($newlang);
1112 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1127 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
1130 $result =
$object->deleteLine($lineid);
1135 $outputlangs = $langs;
1138 $newlang =
GETPOST(
'lang_id',
'aZ09');
1141 $newlang =
$object->thirdparty->default_lang;
1143 if (!empty($newlang)) {
1145 $outputlangs->setDefaultLang($newlang);
1149 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1171 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
1179 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
1183 $result =
$object->valid($user);
1187 $outputlangs = $langs;
1190 $newlang =
GETPOST(
'lang_id',
'aZ09');
1193 $newlang =
$object->thirdparty->default_lang;
1195 if (!empty($newlang)) {
1197 $outputlangs->setDefaultLang($newlang);
1202 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1215 $action =
'confirm_approve';
1225 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
1230 $qualified_for_stock_change = 0;
1232 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1234 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1239 if (!$idwarehouse || $idwarehouse == -1) {
1241 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1247 $result =
$object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
1250 $outputlangs = $langs;
1253 $newlang =
GETPOST(
'lang_id',
'aZ09');
1256 $newlang =
$object->thirdparty->default_lang;
1258 if (!empty($newlang)) {
1260 $outputlangs->setDefaultLang($newlang);
1262 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1273 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1280 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1284 $result =
$object->refuse($user);
1286 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1294 if ($action ==
'commande') {
1295 $methodecommande =
GETPOSTINT(
'methodecommande');
1299 } elseif ($methodecommande <= 0 && !
getDolGlobalInt(
'SUPPLIER_ORDER_MODE_OPTIONAL')) {
1300 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1301 $action =
'createorder';
1305 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1307 $object->context[
"sendmanualtriggers"] =
GETPOST(
"manual_trigger_send");
1311 $outputlangs = $langs;
1314 $newlang =
GETPOST(
'lang_id',
'aZ09');
1317 $newlang =
$object->thirdparty->default_lang;
1319 if (!empty($newlang)) {
1321 $outputlangs->setDefaultLang($newlang);
1323 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1334 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1342 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1345 $errorsOnDelete = array();
1400 if (empty($errOnDelete)) {
1401 $result =
$object->delete($user);
1404 header(
"Location: " . DOL_URL_ROOT .
'/fourn/commande/list.php?restore_lastsearch_values=1');
1417 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1419 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1420 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1425 $result =
$object->createFromClone($user, $socid);
1427 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1439 if ($action ==
'livraison' && $usercanreceive) {
1450 $langs->load(
"sendings");
1460 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1471 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1475 $result =
$object->cancel($user);
1477 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1485 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1488 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1489 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1490 $trackid =
'sord'.$object->id;
1491 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1495 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1498 if ($action ==
'update_extras' && $permissiontoeditextra) {
1501 $attribute_name =
GETPOST(
'attribute',
'aZ09');
1504 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
1510 $result =
$object->updateExtraField($attribute_name,
'ORDER_SUPPLIER_MODIFY');
1518 $action =
'edit_extras';
1525 if ($action ==
'add' && $permissiontoadd) {
1527 $selectedLines =
GETPOST(
'toselect',
'array:int');
1529 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1546 $object->delivery_date = $datelivraison;
1548 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1549 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1555 $ret = $extrafields->setOptionalsFromPost(
null, $object);
1563 if (!empty($origin) && !empty($originid)) {
1564 $element = $subelement = $origin;
1565 $classname = ucfirst($subelement);
1566 if ($origin ==
'propal' || $origin ==
'proposal') {
1567 $element =
'comm/propal';
1568 $subelement =
'propal';
1569 $classname =
'Propal';
1571 if ($origin ==
'order' || $origin ==
'commande') {
1572 $element = $subelement =
'commande';
1573 $classname =
'Commande';
1575 if ($origin ==
'supplier_proposal') {
1576 $classname =
'SupplierProposal';
1577 $element =
'supplier_proposal';
1578 $subelement =
'supplier_proposal';
1582 $object->origin_type = $origin;
1583 $object->origin_id = $originid;
1587 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1588 if (!empty($other_linked_objects)) {
1589 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
1596 $srcobject =
new $classname(
$db);
1598 dol_syslog(
"Try to find source object origin=".
$object->origin_type.
" originid=".
$object->origin_id.
" to add lines");
1599 $result = $srcobject->fetch(
$object->origin_id);
1601 if (empty(
$object->delivery_date)) {
1602 $tmpdate = $srcobject->delivery_date;
1603 $object->setDeliveryDate($user, $tmpdate);
1606 $object->set_id_projet($user, $srcobject->fk_project);
1608 $lines = $srcobject->lines;
1609 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1610 $srcobject->fetch_lines();
1611 $lines = $srcobject->lines;
1614 $fk_parent_line = 0;
1615 $num = count($lines);
1617 for ($i = 0; $i < $num; $i++) {
1619 empty($lines[$i]->subprice)
1620 || $lines[$i]->qty < 0
1621 || !in_array($lines[$i]->
id, $selectedLines)
1622 || $lines[$i]->special_code == SUBTOTALS_SPECIAL_CODE
1627 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1628 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
1629 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1631 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1632 $fk_parent_line = 0;
1636 if (method_exists($lines[$i],
'fetch_optionals')) {
1637 $lines[$i]->fetch_optionals();
1638 $array_option = $lines[$i]->array_options;
1640 $array_option = array();
1644 $product_fourn_price_id = 0;
1645 if ($origin ==
"commande") {
1647 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty,
$object->socid);
1648 $lines[$i]->subprice = 0;
1650 $ref_supplier = $productsupplier->ref_supplier;
1651 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1653 foreach ($srcobject->lines as $li) {
1654 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1655 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1656 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1657 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1658 $sql .=
' AND fk_soc = '.((int)
$object->socid);
1659 $sql .=
' ORDER BY unitprice ASC';
1661 $resql =
$db->query($sql);
1663 $num_row =
$db->num_rows($resql);
1664 if (empty($num_row)) {
1665 $li->remise_percent = 0;
1667 $obj =
$db->fetch_object($resql);
1668 $li->subprice = $obj->unitprice;
1669 $li->remise_percent = $obj->remise_percent;
1678 $ref_supplier = $lines[$i]->ref_fourn;
1679 $product_fourn_price_id = 0;
1682 $tva_tx = $lines[$i]->tva_tx;
1684 if ($origin ==
"commande") {
1686 $soc->fetch($socid);
1692 $lines[$i]->subprice,
1695 $lines[$i]->localtax1_tx,
1696 $lines[$i]->localtax2_tx,
1697 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1698 $product_fourn_price_id,
1700 $lines[$i]->remise_percent,
1703 $lines[$i]->product_type,
1709 $lines[$i]->fk_unit,
1712 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->rowid,
1714 $lines[$i]->special_code,
1725 if ($result > 0 && $lines[$i]->product_type == 9) {
1726 $fk_parent_line = $result;
1734 $parameters = array(
'objFrom' => $srcobject);
1735 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
1759 $categories =
GETPOST(
'categories',
'array:int');
1760 if (method_exists($object,
'setCategories')) {
1761 $object->setCategories($categories);
1766 $langs->load(
"errors");
1771 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode((
string) ($id)));
1778 if ($action ==
'addcontact' && $permissiontoadd) {
1782 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1786 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1789 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1790 $langs->load(
"errors");
1791 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1796 } elseif ($action ==
'swapstatut' &&
$object->id > 0 && $permissiontoadd) {
1799 } elseif ($action ==
'deletecontact' &&
$object->id > 0 && $permissiontoadd) {
1804 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1826$title =
$object->ref.
" - ".$langs->trans(
'Card');
1827if ($action ==
'create') {
1828 $title = $langs->trans(
"NewOrderSupplier");
1830$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1831llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplier-order page-card');
1835if ($action ==
'create') {
1836 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1840 $currency_code =
$conf->currency;
1847 $societe->fetch($socid);
1850 if (!empty($origin) && !empty($originid)) {
1852 $element = $subelement = $origin;
1853 $classname = ucfirst($subelement);
1855 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1856 $element = $regs[1];
1857 $subelement = $regs[2];
1860 if ($origin ==
'propal' || $origin ==
'proposal') {
1861 $classname =
'Propal';
1862 $element =
'comm/propal';
1863 $subelement =
'propal';
1865 if ($origin ==
'order' || $origin ==
'commande') {
1866 $classname =
'Commande';
1867 $element = $subelement =
'commande';
1869 if ($origin ==
'supplier_proposal') {
1870 $classname =
'SupplierProposal';
1871 $element =
'supplier_proposal';
1872 $subelement =
'supplier_proposal';
1878 $objectsrc =
new $classname(
$db);
1879 $objectsrc->fetch($originid);
1880 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1881 $objectsrc->fetch_lines();
1883 $objectsrc->fetch_thirdparty();
1886 $objectsrc->fetch_optionals();
1887 $object->array_options = $objectsrc->array_options;
1889 $projectid = (int) $objectsrc->fk_project;
1890 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1892 if ($origin ==
"commande") {
1893 $cond_reglement_id = 0;
1894 $deposit_percent = 0;
1895 $mode_reglement_id = 0;
1896 $objectsrc->note_private =
'';
1897 $objectsrc->note_public =
'';
1898 if ($societe =
$object->thirdparty) {
1899 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1900 $deposit_percent = $societe->deposit_percent;
1901 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1903 $currency_code = $societe->multicurrency_code;
1905 $currency_tx = $societe->multicurrency_tx;
1910 $soc = $objectsrc->thirdparty;
1912 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1913 $deposit_percent = (!empty($objectsrc->deposit_percent) ? $objectsrc->deposit_percent : (!empty($soc->deposit_percent) ? $soc->deposit_percent : 0));
1914 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1915 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1916 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1917 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1918 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1921 $datelivraison = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1924 if (!empty($objectsrc->multicurrency_code)) {
1925 $currency_code = $objectsrc->multicurrency_code;
1927 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1928 $currency_tx = $objectsrc->multicurrency_tx;
1932 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1933 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1936 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1939 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1940 $deposit_percent = !empty($societe->deposit_percent) ? $societe->deposit_percent : 0;
1941 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1943 if (
isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1944 $currency_code = $societe->multicurrency_code;
1947 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1948 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1952 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1955 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1958 if (
GETPOSTISSET(
'cond_reglement_id_deposit_percent')) {
1959 $deposit_percent =
GETPOSTFLOAT(
'cond_reglement_id_deposit_percent');
1962 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1963 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1964 print
'<input type="hidden" name="action" value="add">';
1965 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1966 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1967 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1968 print
'<input type="hidden" name="changecompany" value="0">';
1970 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1972 if ($backtopageforcancel) {
1973 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1976 if (!empty($currency_tx)) {
1977 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1983 $parameters = array();
1985 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters, $object, $action);
1986 if (empty($reshook)) {
1987 print
'<table class="border centpercent">';
1990 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1993 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1996 if (!empty($societe->id) && $societe->id > 0) {
1997 print $societe->getNomUrl(1,
'supplier');
1998 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
2000 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
2001 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
2005 $(document).ready(function() {
2006 $("#socid").change(function() {
2007 console.log("We have changed the company - Reload page");
2009 $("input[name=action]").val("create");
2010 $("input[name=changecompany]").val("1");
2011 $("form[name=add]").submit();
2016 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>';
2022 print
'<tr><td>'.$form->textwithpicto($langs->trans(
'RefSupplier'), $langs->trans(
'RefOfOnVendorSide', $langs->transnoentitiesnoconv(
"SupplierOrder")));
2023 print
'</td><td><input name="refsupplier" type="text"></td>';
2027 if (!empty($societe->id) && $societe->id > 0) {
2029 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2031 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
2033 $thirdparty = $societe;
2035 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
2036 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2042 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2043 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2044 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);
2048 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2049 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2050 $form->select_types_paiements((
GETPOSTISSET(
'mode_reglement_id') &&
GETPOSTINT(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
2055 print $langs->trans(
'DateDeliveryPlanned');
2062 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2063 print $form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin, 0,
"set", 1, 1);
2068 $langs->load(
"bank");
2069 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2070 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
2071 $form->select_comptes($fk_account ??
'',
'fk_account', 0,
'', 1);
2079 $langs->load(
'projects');
2080 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
2082 if (!empty($user->socid)) {
2083 $projSocFilter = $user->socid;
2084 } elseif (
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') || (
int) $socid == 0) {
2087 $projSocFilter = -1;
2089 $projSocFilter = $socid;
2091 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects($projSocFilter, $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
2092 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>';
2098 $fkincoterms = (!empty(
$object->fk_incoterms) ?
$object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
2099 $locincoterms = (!empty(
$object->location_incoterms) ?
$object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
2101 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
2102 print
'<td class="maxwidthonsmartphone">';
2103 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2104 print $form->select_incoterms($fkincoterms, $locincoterms);
2111 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
2112 print
'<td class="maxwidthonsmartphone">';
2113 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
2114 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
2120 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
2121 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
2125 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
2127 $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%');
2128 print $doleditor->Create(1);
2133 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
2135 $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%');
2136 print $doleditor->Create(1);
2141 if (!empty($origin) && !empty($originid) && is_object($objectsrc) && $classname !==
null) {
2142 print
"\n<!-- ".$classname.
" info -->";
2144 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2145 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2146 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2147 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2148 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2150 $newclassname = $classname;
2151 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
2152 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2153 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2154 if (
$mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
2155 print
'<tr><td>'.$langs->transcountry(
"AmountLT1",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2158 if (
$mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
2159 print
'<tr><td>'.$langs->transcountry(
"AmountLT2",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2162 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2165 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht, 0, $langs, 1, -1, -1, $objectsrc->multicurrency_code).
'</td></tr>';
2166 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva, 0, $langs, 1, -1, -1, $objectsrc->multicurrency_code).
'</td></tr>';
2167 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc, 0, $langs, 1, -1, -1, $objectsrc->multicurrency_code).
'</td></tr>';
2172 $parameters = array();
2173 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
2174 print $hookmanager->resPrint;
2176 if (empty($reshook)) {
2177 if (
getDolGlobalString(
'THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_SUPPLIER_ORDER') && !empty($societe->id)) {
2180 $tpExtrafieldLabels = $tpExtrafields->fetch_name_optionals_label($societe->table_element);
2181 if ($societe->fetch_optionals() > 0) {
2182 $object->array_options = array_merge(
$object->array_options, $societe->array_options);
2186 print
$object->showOptionals($extrafields,
'create');
2194 print $form->buttonsSaveCancel(
"CreateDraft");
2197 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
2198 $title = $langs->trans(
'ProductsAndServices');
2201 print
'<div class="div-table-responsive-no-min">';
2202 print
'<table class="noborder centpercent">';
2204 $selectedLines = array();
2206 $objectsrc->printOriginLinesList(
'', $selectedLines);
2212} elseif (!empty(
$object->id)) {
2214 $result =
$object->fetch($id, $ref);
2219 $societe =
$object->thirdparty;
2222 $author->fetch(
$object->user_author_id);
2226 $title = $langs->trans(
"SupplierOrder");
2227 print
dol_get_fiche_head($head,
'card', $title, -1,
'order', 0,
'',
'', 0,
'', 1);
2233 if ($action ==
'delete') {
2234 $arrayAjouts = array();
2265 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.((
int)
$object->id), $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete', $arrayAjouts, 0, 2, $heightModal, $widthModal);
2269 if ($action ==
'clone') {
2270 $filter =
'(s.fournisseur:=:1)';
2272 $formquestion = array(
2273 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
2276 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
2280 if ($action ==
'valid') {
2284 if (preg_match(
'/^[\(]?PROV/i', (
string)
$object->ref) || empty(
$object->ref)) {
2294 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
2296 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2299 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE',
$object->socid, $object);
2302 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2307 if ($action ==
'approve' || $action ==
'approve2') {
2308 $qualified_for_stock_change = 0;
2310 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2312 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2315 $formquestion = array();
2317 $langs->load(
"stocks");
2318 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2321 if (
$conf->browser->name ==
'ie') {
2324 $formquestion = array(
2328 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2331 $text = $langs->trans(
"ConfirmApproveThisOrder",
$object->ref);
2333 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2336 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE',
$object->socid, $object);
2339 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2343 if ($action ==
'refuse') {
2344 $formquestion = array(
2347 'name' =>
'refuse_note',
2348 'label' => $langs->trans(
"Reason"),
2350 'morecss' =>
'minwidth300'
2353 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder",
$object->ref),
"confirm_refuse", $formquestion, 0, 1);
2357 if ($action ==
'cancel') {
2358 $formquestion = array(
2361 'name' =>
'cancel_note',
2362 'label' => $langs->trans(
"Reason"),
2364 'morecss' =>
'minwidth300'
2368 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2372 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_CANCEL',
$object->socid, $object);
2374 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder",
$object->ref),
"confirm_cancel", $formquestion, 0, 1);
2378 if ($action ==
'commande') {
2379 $formquestion = array();
2382 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2386 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT',
$object->socid, $object);
2389 require_once DOL_DOCUMENT_ROOT.
'/webhook/class/target.class.php';
2391 if ($targetstatic->isTriggerCodeManualTarget(
'ORDER_SUPPLIER_SUBMIT') > 0) {
2392 $formquestion[] = array(
'type' =>
'checkbox',
'name' =>
'manual_trigger_send',
'label' => $langs->trans(
"QuestionSendManualTrigger"));
2395 $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);
2399 if ($action ==
'ask_deleteline') {
2400 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2404 if ($action ==
'add_title_line') {
2405 $langs->load(
'subtotals');
2407 $depth_array =
$object->getPossibleLevels($langs);
2408 require DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_create.tpl.php';
2409 } elseif ($action ==
'add_subtotal_line') {
2410 $langs->load(
'subtotals');
2412 $titles =
$object->getPossibleTitles();
2413 require DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_create.tpl.php';
2417 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2418 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
2419 if (empty($reshook)) {
2420 $formconfirm .= $hookmanager->resPrint;
2421 } elseif ($reshook > 0) {
2422 $formconfirm = $hookmanager->resPrint;
2431 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2433 $morehtmlref =
'<div class="refidno">';
2435 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, (
int) $usercancreate,
'string',
'', 0, 1);
2436 $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);
2438 $morehtmlref .=
'<br>';
2439 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2440 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2441 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2442 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2443 $filter =
'(s.fournisseur:=:1)';
2444 $morehtmlref .= $form->select_company(
$object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2445 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2446 $morehtmlref .=
'</form>';
2448 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2450 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2452 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
2454 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.
$object->thirdparty->id.
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2460 $langs->load(
"projects");
2461 $morehtmlref .=
'<br>';
2462 if ($permissiontoadd) {
2463 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2464 if ($action !=
'classify' && $caneditproject) {
2465 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2467 $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');
2469 if (!empty(
$object->fk_project)) {
2471 $proj->fetch(
$object->fk_project);
2472 $morehtmlref .= $proj->getNomUrl(1);
2474 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2479 $morehtmlref .=
'</div>';
2482 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2485 $parameters = array();
2487 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters, $object, $action);
2488 if (empty($reshook)) {
2489 print
'<div class="fichecenter">';
2490 print
'<div class="fichehalfleft">';
2491 print
'<div class="underbanner clearboth"></div>';
2493 print
'<table class="border tableforfield centpercent">';
2496 if (
$object->methode_commande_id > 0) {
2501 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2504 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2508 if (
$object->methode_commande) {
2509 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
2514 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2515 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2520 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2521 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2523 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2524 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2527 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2528 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2529 $absolute_discount =
price2num($absolute_discount,
'MT');
2530 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2532 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2534 $thirdparty = $societe;
2536 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
2537 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2542 $langs->load(
'bills');
2543 print
'<tr><td class="nowrap">';
2544 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2545 print $langs->trans(
'PaymentConditions');
2547 if ($action !=
'editconditions' && $permissiontoadd) {
2548 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>';
2550 print
'</tr></table>';
2552 if ($action ==
'editconditions') {
2553 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id', 1,
'', 1,
$object->deposit_percent);
2555 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'none', 1,
'', 1,
$object->deposit_percent);
2561 $langs->load(
'bills');
2562 print
'<tr><td class="nowrap">';
2563 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2564 print $langs->trans(
'PaymentMode');
2566 if ($action !=
'editmode' && $permissiontoadd) {
2567 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>';
2569 print
'</tr></table>';
2571 if ($action ==
'editmode') {
2572 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2574 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'none');
2580 print
'<tr><td class="nowrap">';
2581 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2582 print $langs->trans(
'BankAccount');
2584 if ($action !=
'editbankaccount' && $permissiontoadd) {
2585 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>';
2587 print
'</tr></table>';
2589 if ($action ==
'editbankaccount') {
2590 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
2592 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'none');
2600 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2601 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2606 print
'<table class="nobordernopadding centpercent"><tr><td>';
2607 print $langs->trans(
'DateDeliveryPlanned');
2609 if ($action !=
'editdate_livraison') {
2610 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>';
2612 print
'</tr></table>';
2614 if ($action ==
'editdate_livraison') {
2615 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2616 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2617 print
'<input type="hidden" name="action" value="setdate_livraison">';
2622 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin, 0,
"setdate_livraison");
2623 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2626 $usehourmin =
'day';
2628 $usehourmin =
'dayhour';
2631 if (
$object->hasDelay() && !empty(
$object->delivery_date) && (
$object->status == $object::STATUS_ORDERSENT ||
$object->status == $object::STATUS_RECEIVED_PARTIALLY)) {
2632 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2640 print
'<table class="nobordernopadding centpercent"><tr><td>';
2641 print $langs->trans(
'IncotermLabel');
2642 print
'<td><td class="right">';
2643 if ($usercancreate) {
2644 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2648 print
'</td></tr></table>';
2651 if ($action !=
'editincoterm') {
2654 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2662 print
'<table class="nobordernopadding centpercent"><tr><td>';
2663 print $langs->trans(
"Categories");
2664 print
'<td><td class="right">';
2665 if ($usercancreate) {
2666 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=edittags&token='.
newToken().
'">'.
img_edit().
'</a>';
2670 print
'</td></tr></table>';
2673 if ($action ==
'edittags') {
2674 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2675 print
'<input type="hidden" name="action" value="settags">';
2676 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2677 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
2678 print
'<input type="submit" class="button valignmiddle smallpaddingimp" value="'.$langs->trans(
"Modify").
'">';
2681 print $form->showCategories(
$object->id, Categorie::TYPE_SUPPLIER_ORDER, 1);
2687 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2692 print
'<div class="fichehalfright">';
2693 print
'<div class="underbanner clearboth"></div>';
2695 print
'<table class="border tableforfield centpercent">';
2697 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
2701 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2702 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2705 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2711 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2712 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2715 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2720 if (
$mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2722 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
2723 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2725 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2729 if (
$mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2731 print
'<td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
2732 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2734 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2742 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->supplier_order_min_amount));
2747 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2748 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) . $alert .
'</td>';
2751 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2766 print
'<div class="clearboth"></div><br>';
2769 $blocname =
'contacts';
2770 $title = $langs->trans(
'ContactsAddresses');
2771 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2775 $blocname =
'notes';
2776 $title = $langs->trans(
'Notes');
2777 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2786 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2787 <input type="hidden" name="token" value="'.
newToken().
'">
2788 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2789 <input type="hidden" name="mode" value="">
2790 <input type="hidden" name="page_y" value="">
2791 <input type="hidden" name="id" value="'.
$object->id.
'">
2792 <input type="hidden" name="socid" value="'.$societe->id.
'">
2797 include DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_ajaxrow.tpl.php';
2799 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
2803 print
'<div class="div-table-responsive-no-min">';
2804 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2807 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2810 $inputalsopricewithtax = 1;
2811 $senderissupplier = 2;
2813 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY');
2825 if ($action !=
'editline') {
2828 $parameters = array();
2829 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2833 if (empty($reshook)) {
2849 if ($user->socid == 0 && $action !=
'delete') {
2850 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2851 print
'<div class="tabsAction">';
2853 $parameters = array();
2854 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2856 if (empty($reshook)) {
2861 $langs->load(
'subtotals');
2863 $url_button = array();
2865 $url_button[] = array(
2866 'lang' =>
'subtotals',
2868 'perm' => (
bool) $usercancreate,
2869 'label' => $langs->trans(
'AddTitleLine'),
2870 'url' =>
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'add_title_line'],
true)
2873 $url_button[] = array(
2874 'lang' =>
'subtotals',
2876 'perm' => (
bool) $usercancreate,
2877 'label' => $langs->trans(
'AddSubtotalLine'),
2878 'url' =>
dolBuildUrl($_SERVER[
'PHP_SELF'], [
'id' =>
$object->id,
'action' =>
'add_subtotal_line'],
true)
2881 print
dolGetButtonAction(
'', $langs->trans(
'SubTotal'),
'default', $url_button,
'',
true);
2886 if ($usercanvalidate) {
2887 $tmpbuttonlabel = $langs->trans(
'Validate');
2889 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2892 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">';
2893 print $tmpbuttonlabel;
2897 $langs->load(
"errors");
2898 print
dolGetButtonAction($langs->trans(
"ErrorObjectMustHaveLinesToBeValidated",
$object->ref), $langs->trans(
'Validate'),
'default', $_SERVER[
"PHP_SELF"] .
'?action=validate&token=' .
newToken() .
'&id=' .
$object->id, (
string)
$object->id, -1);
2909 if ($usercanorder) {
2910 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2916 if ($usercanapprove) {
2918 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2920 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve&token='.
newToken().
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2923 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2930 if ($usercanapprovesecond) {
2931 if (!empty(
$object->user_approve_id2)) {
2932 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2934 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve2&token='.
newToken().
'">'.$langs->trans(
"Approve2Order").
'</a>';
2937 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2944 if ($usercanapprove || $usercanapprovesecond) {
2945 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=refuse&token='.
newToken().
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2947 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2952 if (empty($user->socid)) {
2954 if ($usercanorder) {
2955 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init'],
true).
'#formmailbeforetitle',
'');
2963 if (!$buttonshown && $usercanapprove) {
2966 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2970 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2973 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2977 if (in_array(
$object->status, array(3, 4, 5, 6, 7, 9))) {
2978 if ($usercanorder) {
2979 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2986 $labelofbutton = $langs->trans(
'ReceiveProducts');
2988 $labelofbutton = $langs->trans(
"CreateReception");
2989 if (!empty(
$object->linkedObjects[
'reception'])) {
2990 foreach (
$object->linkedObjects[
'reception'] as $element) {
2991 if ($element->statut >= 0) {
3004 $dispachedLines =
$object->getDispachedLines(1);
3005 $nbDispachedLines = count($dispachedLines);
3006 if ($nbDispachedLines > 0) {
3011 if (in_array(
$object->status, array(3, 4, 5))) {
3012 if (
isModEnabled(
"supplier_order") && $usercanreceive) {
3013 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.
$object->id.
'">'.$labelofbutton.
'</a></div>';
3015 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
3021 if ($usercanorder) {
3022 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>';
3024 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
3030 if ($usercanreceive) {
3031 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>';
3038 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
3039 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>';
3047 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
3049 if (!empty(
$object->linkedObjectsIds[
'invoice_supplier']) || (empty(
$object->linkedObjectsIds[
'invoice_supplier']) && !
getDolGlobalInt(
'SUPPLIER_ORDER_DISABLE_CLASSIFY_BILLED_FROM_SUPPLIER_ORDER'))) {
3050 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
3051 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
3054 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
3060 if ($usercancreate &&
$object->billed > 0 &&
$object->status > $object::STATUS_DRAFT) {
3061 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyunbilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyUnbilled").
'</a>';
3065 if ($usercancreate) {
3066 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>';
3071 if ($usercanorder) {
3072 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.
newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
3077 if (!empty($usercandelete)) {
3078 if ($hasreception) {
3079 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
3081 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
3091 print
'<!-- form to record supplier order -->'.
"\n";
3092 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
3094 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3095 print
'<input type="hidden" name="action" value="commande">';
3097 print
'<table class="noborder centpercent">';
3099 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
3101 print $form->selectDate($date_com ?:
'',
'', 0, 0, 0,
"commande", 1, 1);
3105 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
3106 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
3109 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
3111 print
'<tr><td class="center" colspan="2">';
3112 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
3113 print
' ';
3114 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
3123 if (
GETPOST(
'modelselected')) {
3124 $action =
'presend';
3127 if ($action !=
'createorder' && $action !=
'presend') {
3128 print
'<div class="fichecenter"><div class="fichehalfleft">';
3133 $relativepath = $objref.
'/'.$objref.
'.pdf';
3135 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
3136 $genallowed = $usercanread;
3137 $delallowed = $usercancreate;
3140 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, (
int) $genallowed, (int) $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'',
$object->thirdparty->default_lang,
'', $object);
3141 $somethingshown = $formfile->numoffiles;
3144 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'supplier_order',
'order_supplier'), 1);
3145 $linktoelem = $tmparray[
'linktoelem'];
3146 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
3147 print $htmltoenteralink;
3149 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
3151 print
'</div><div class="fichehalfright">';
3153 if ($action ==
'classifyreception') {
3156 print
'<!-- form to record purchase order received -->'.
"\n";
3157 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
3158 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3159 print
'<input type="hidden" name="action" value="livraison">';
3162 print
'<table class="noborder centpercent">';
3164 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
3166 print $form->selectDate($datepreselected,
'', 1, 1, 0,
"commande", 1, 1);
3167 print
"</td></tr>\n";
3169 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
3171 $liv[
''] =
' ';
3172 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
3173 $liv[
'par'] = $langs->trans(
"PartialWoman");
3174 $liv[
'nev'] = $langs->trans(
"NeverReceived");
3175 $liv[
'can'] = $langs->trans(
"Canceled");
3177 print $form->selectarray(
"type", $liv);
3180 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
3181 print
'<tr><td class="center" colspan="2">';
3182 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
3183 print
' ';
3184 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
3193 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
3195 $somethingshown = $formactions->showactions($object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
3197 print
'</div></div>';
3201 $modelmail =
'order_supplier_send';
3202 $defaulttopic =
'SendOrderRef';
3204 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3205 $trackid =
'sord'.$object->id;
3207 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.
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_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.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
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).
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return 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.