41require
'../../main.inc.php';
42require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formorder.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
50require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
51require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
54 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
57 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
60 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
61 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
63require_once NUSOAP_PATH.
'/nusoap.php';
66 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
70 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
71 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/mouvementstock.class.php';
84$langs->loadLangs(array(
'admin',
'orders',
'sendings',
'companies',
'bills',
'propal',
'receptions',
'supplier_proposal',
'products',
'stocks',
'productbatch'));
86 $langs->load(
'incoterm');
91$action =
GETPOST(
'action',
'alpha');
92$confirm =
GETPOST(
'confirm',
'alpha');
93$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'purchaseordercard';
94$cancel =
GETPOST(
'cancel',
'alpha');
95$backtopage =
GETPOST(
'backtopage',
'alpha');
96$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
103$origin =
GETPOST(
'origin',
'alpha');
106$stockDelete =
GETPOST(
'stockDelete',
'int');
117if (!empty($user->socid)) {
118 $socid = $user->socid;
122$hookmanager->initHooks(array(
'ordersuppliercard',
'globalcard'));
128$extrafields->fetch_name_optionals_label(
$object->table_element);
131 $socid = $user->socid;
135if ($id > 0 || !empty($ref)) {
136 $ret =
$object->fetch($id, $ref);
140 $ret =
$object->fetch_thirdparty();
144} elseif (!empty($socid) && $socid > 0) {
146 $ret =
$object->fetch_thirdparty();
153$isdraft = (isset(
$object->status) && (
$object->status == $object::STATUS_DRAFT) ? 1 : 0);
154$result =
restrictedArea($user,
'fournisseur', $object,
'commande_fournisseur',
'commande',
'fk_soc',
'rowid', $isdraft);
157$usercanread = ($user->hasRight(
"fournisseur",
"commande",
"lire") || $user->hasRight(
"supplier_order",
"lire"));
158$usercancreate = ($user->hasRight(
"fournisseur",
"commande",
"creer") || $user->hasRight(
"supplier_order",
"creer"));
159$usercandelete = (($user->hasRight(
"fournisseur",
"commande",
"supprimer") || $user->hasRight(
"supplier_order",
"supprimer")) || ($usercancreate && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT));
162$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_order_advance",
"validate")));
165$usercanapprove = $user->hasRight(
"fournisseur",
"commande",
"approuver");
166$usercanapprovesecond = $user->hasRight(
"fournisseur",
"commande",
"approve2");
167$usercanorder = $user->hasRight(
"fournisseur",
"commande",
"commander");
169 $usercanreceive = $user->hasRight(
"fournisseur",
"commande",
"receptionner");
171 $usercanreceive = $user->hasRight(
"reception",
"creer");
175$permissionnote = $usercancreate;
176$permissiondellink = $usercancreate;
177$permissiontoedit = $usercancreate;
178$permissiontoadd = $usercancreate;
179$permissiontoeditextra = $permissiontoadd;
180if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
182 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
186$caneditproject =
false;
198$parameters = array(
'socid' => $socid);
199$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
204if (empty($reshook)) {
205 $backurlforlist = DOL_URL_ROOT.
'/fourn/commande/list.php'.($socid > 0 ?
'?socid='.((int) $socid) :
'');
207 if (empty($backtopage) || ($cancel && empty($id))) {
208 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
209 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
210 $backtopage = $backurlforlist;
212 $backtopage = DOL_URL_ROOT.
'/fourn/commande/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
218 if (!empty($backtopageforcancel)) {
219 header(
"Location: ".$backtopageforcancel);
221 } elseif (!empty($backtopage)) {
222 header(
"Location: ".$backtopage);
228 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
230 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
232 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
234 if ($action ==
'setref_supplier' && $usercancreate) {
235 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'ORDER_SUPPLIER_MODIFY');
242 if ($action ==
'set_incoterms' && $usercancreate) {
250 if ($action ==
'setconditions' && $usercancreate) {
258 if ($action ==
'setmode' && $usercancreate) {
263 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
265 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
266 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
272 if ($action ==
'setbankaccount' && $usercancreate) {
280 if ($action ==
'setdate_livraison' && $usercancreate) {
281 $result =
$object->setDeliveryDate($user, $datelivraison);
288 if ($action ==
'classin' && $usercancreate && $caneditproject) {
289 $result =
$object->setProject($projectid);
296 if ($action ==
'settags' &&
isModEnabled(
'category') && $usercancreate) {
306 if (!empty($new_socid) && $new_socid !=
$object->thirdparty->id) {
310 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
311 $sql .=
' SET fk_soc = '.((int) $new_socid);
312 $sql .=
' WHERE fk_soc = '.((int)
$object->thirdparty->id);
313 $sql .=
' AND rowid = '.((int)
$object->id);
315 $res = $db->query($sql);
323 foreach (
$object->lines as $l) {
324 $sql =
'SELECT price, unitprice, tva_tx, ref_fourn';
325 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
326 $sql .=
' WHERE fk_product = '.((int) $l->fk_product);
327 $sql .=
' AND fk_soc = '.((int) $new_socid);
328 $sql .=
' ORDER BY unitprice ASC';
330 $resql = $db->query($sql);
332 $num_row = $db->num_rows($resql);
333 if (empty($num_row)) {
339 $l->ref_supplier =
'';
343 $obj = $db->fetch_object($resql);
344 $l->subprice = $obj->unitprice;
345 $l->total_ht = $obj->price;
346 $l->tva_tx = $obj->tva_tx;
347 $l->total_tva = $l->total_ht * ($obj->tva_tx / 100);
348 $l->total_ttc = $l->total_ht + $l->total_tva;
349 $l->ref_supplier = $obj->ref_fourn;
360 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
364 if ($action ==
'setremisepercent' && $usercancreate) {
371 if ($action ==
'reopen' && $permissiontoadd) {
372 $resSetReopen =
$object->setReopen($user);
374 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
384 if ($action ==
'classifybilled' && $usercancreate) {
385 $ret =
$object->classifyBilled($user);
391 if ($action ==
'classifyunbilled' && $usercancreate) {
392 $ret =
$object->classifyUnBilled($user);
399 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
403 foreach (
$object->lines as $line) {
404 if ($line->product_type == 1) {
405 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $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);
408 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !==
'' && $usercancreate) {
410 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
411 $vat_rate = str_replace(
'*',
'', $vat_rate);
414 foreach (
$object->lines as $line) {
415 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $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);
417 } elseif ($action ==
'addline' && $usercancreate) {
420 $langs->load(
'errors');
425 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
429 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
430 if ($prod_entry_mode ==
'free') {
444 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
445 if (empty($remise_percent)) {
450 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
451 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
453 if (is_array($extralabelsline)) {
455 foreach ($extralabelsline as $key => $value) {
456 unset($_POST[
"options_".$key]);
460 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
461 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
464 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
465 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
468 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
469 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
472 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
473 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
476 if (
GETPOST(
'qty',
'alpha') ==
'') {
477 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
481 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
482 if ($combinations =
GETPOST(
'combinations',
'array:alphanohtml')) {
486 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
487 $idprod = $res->fk_product_child;
489 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
495 if ($prod_entry_mode !=
'free' && empty($error)) {
499 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
504 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
505 $idprod = (int) $reg[1];
506 $res = $productsupplier->fetch($idprod);
509 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
511 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
512 if ($productsupplier->fourn_socid != $socid) {
513 $productsupplier->ref_supplier =
'';
516 $fksoctosearch =
$object->thirdparty->id;
517 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
519 } elseif (
GETPOSTINT(
'idprodfournprice') > 0) {
520 $qtytosearch = (float) $qty;
522 $idprod = $productsupplier->get_buyprice(
GETPOSTINT(
'idprodfournprice'), $qtytosearch);
523 $res = $productsupplier->fetch($idprod);
527 $label = $productsupplier->label;
531 $outputlangs = $langs;
533 if (
GETPOST(
'lang_id',
'aZ09')) {
534 $newlang =
GETPOST(
'lang_id',
'aZ09');
536 if (empty($newlang)) {
537 $newlang =
$object->thirdparty->default_lang;
539 if (!empty($newlang)) {
541 $outputlangs->setDefaultLang($newlang);
543 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
545 $desc = $productsupplier->description;
548 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
549 $desc = $productsupplier->desc_supplier;
560 $ref_supplier = $productsupplier->ref_supplier;
564 if (!GETPOSTISSET(
'tva_tx')) {
565 $tmpidprodfournprice =
GETPOST(
'idprodfournprice',
'alpha');
566 if (is_numeric($tmpidprodfournprice) && (
int) $tmpidprodfournprice > 0) {
567 $tmpidprodfournprice = (int) $tmpidprodfournprice;
569 $tmpidprodfournprice = 0;
573 if (empty($tva_tx)) {
581 $type = $productsupplier->type;
582 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
583 $price_base_type =
'HT';
585 $pu_devise =
price2num($price_ht_devise,
'CU');
586 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
587 $price_base_type =
'TTC';
589 $pu_devise =
price2num($price_ttc_devise,
'CU');
591 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
592 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
593 $pu = $productsupplier->fourn_pu;
596 $pu = $productsupplier->fourn_pu;
597 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
607 ($price_base_type ==
'HT' ? $pu : 0),
613 $productsupplier->product_fourn_price_id,
617 ($price_base_type ==
'TTC' ? $pu : 0),
624 $productsupplier->fk_unit,
628 min($rank, count(
$object->lines) + 1)
631 if ($idprod == -99 || $idprod == 0) {
634 $langs->load(
"errors");
635 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
640 $langs->load(
"errors");
641 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
643 } elseif (empty($error)) {
644 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
645 $tva_tx = str_replace(
'*',
'', $tva_tx);
646 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
649 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
653 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
661 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
666 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
668 $price_base_type =
'HT';
669 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
671 $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);
675 if (!$error && $result > 0) {
683 $outputlangs = $langs;
686 $newlang =
$object->thirdparty->default_lang;
687 if (
GETPOST(
'lang_id',
'aZ09')) {
688 $newlang =
GETPOST(
'lang_id',
'aZ09');
691 if (!empty($newlang)) {
693 $outputlangs->setDefaultLang($newlang);
698 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
704 unset($_POST [
'prod_entry_mode']);
706 unset($_POST[
'qty']);
707 unset($_POST[
'type']);
708 unset($_POST[
'remise_percent']);
710 unset($_POST[
'price_ht']);
711 unset($_POST[
'multicurrency_price_ht']);
712 unset($_POST[
'price_ttc']);
713 unset($_POST[
'fourn_ref']);
714 unset($_POST[
'tva_tx']);
715 unset($_POST[
'label']);
716 unset($localtax1_tx);
717 unset($localtax2_tx);
718 unset($_POST[
'np_marginRate']);
719 unset($_POST[
'np_markRate']);
720 unset($_POST[
'dp_desc']);
721 unset($_POST[
'idprodfournprice']);
722 unset($_POST[
'units']);
724 unset($_POST[
'date_starthour']);
725 unset($_POST[
'date_startmin']);
726 unset($_POST[
'date_startsec']);
727 unset($_POST[
'date_startday']);
728 unset($_POST[
'date_startmonth']);
729 unset($_POST[
'date_startyear']);
730 unset($_POST[
'date_endhour']);
731 unset($_POST[
'date_endmin']);
732 unset($_POST[
'date_endsec']);
733 unset($_POST[
'date_endday']);
734 unset($_POST[
'date_endmonth']);
735 unset($_POST[
'date_endyear']);
747 if ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
754 $res = $line->fetch($lineid);
761 if (
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY') == 1) {
762 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0, (
float)
price2num(
GETPOSTFLOAT(
'qty')), $line->fk_product,
'none',
GETPOSTINT(
'socid')) < 0) {
763 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
772 if (preg_match(
'/\*/', $vat_rate)) {
777 $vat_rate = str_replace(
'*',
'', $vat_rate);
781 if (
GETPOST(
'price_ht') !=
'') {
782 $price_base_type =
'HT';
786 $vatratecleaned = $vat_rate;
787 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
788 $vatratecleaned = trim($reg[1]);
789 $vatratecode = $reg[2];
793 $ht = (float) $ttc / (1 + ((
float) $vatratecleaned / 100));
794 $price_base_type =
'HT';
800 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
801 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
803 if (is_array($extralabelsline)) {
804 foreach ($extralabelsline as $key => $value) {
805 unset($_POST[
"options_".$key]);
811 GETPOST(
'product_desc',
'restricthtml'),
820 GETPOSTISSET(
"type") ?
GETPOST(
"type") : $line->product_type,
826 (float) $pu_ht_devise,
829 unset($_POST[
'qty']);
830 unset($_POST[
'type']);
831 unset($_POST[
'idprodfournprice']);
832 unset($_POST[
'remmise_percent']);
833 unset($_POST[
'dp_desc']);
834 unset($_POST[
'np_desc']);
836 unset($_POST[
'fourn_ref']);
837 unset($_POST[
'tva_tx']);
838 unset($_POST[
'date_start']);
839 unset($_POST[
'date_end']);
840 unset($_POST[
'units']);
841 unset($localtax1_tx);
842 unset($localtax2_tx);
844 unset($_POST[
'date_starthour']);
845 unset($_POST[
'date_startmin']);
846 unset($_POST[
'date_startsec']);
847 unset($_POST[
'date_startday']);
848 unset($_POST[
'date_startmonth']);
849 unset($_POST[
'date_startyear']);
850 unset($_POST[
'date_endhour']);
851 unset($_POST[
'date_endmin']);
852 unset($_POST[
'date_endsec']);
853 unset($_POST[
'date_endday']);
854 unset($_POST[
'date_endmonth']);
855 unset($_POST[
'date_endyear']);
860 $outputlangs = $langs;
863 $newlang =
GETPOST(
'lang_id',
'aZ09');
866 $newlang =
$object->thirdparty->default_lang;
868 if (!empty($newlang)) {
870 $outputlangs->setDefaultLang($newlang);
875 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
890 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
893 $result =
$object->deleteLine($lineid);
898 $outputlangs = $langs;
901 $newlang =
GETPOST(
'lang_id',
'aZ09');
904 $newlang =
$object->thirdparty->default_lang;
906 if (!empty($newlang)) {
908 $outputlangs->setDefaultLang($newlang);
912 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
934 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
942 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
946 $result =
$object->valid($user);
950 $outputlangs = $langs;
953 $newlang =
GETPOST(
'lang_id',
'aZ09');
956 $newlang =
$object->thirdparty->default_lang;
958 if (!empty($newlang)) {
960 $outputlangs->setDefaultLang($newlang);
965 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
978 $action =
'confirm_approve';
988 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
993 $qualified_for_stock_change = 0;
995 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
997 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1002 if (!$idwarehouse || $idwarehouse == -1) {
1004 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1010 $result =
$object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
1013 $outputlangs = $langs;
1016 $newlang =
GETPOST(
'lang_id',
'aZ09');
1019 $newlang =
$object->thirdparty->default_lang;
1021 if (!empty($newlang)) {
1022 $outputlangs =
new Translate(
"", $conf);
1023 $outputlangs->setDefaultLang($newlang);
1025 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1036 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1043 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1047 $result =
$object->refuse($user);
1049 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1057 if ($action ==
'commande') {
1058 $methodecommande =
GETPOSTINT(
'methodecommande');
1062 } elseif ($methodecommande <= 0 && !
getDolGlobalInt(
'SUPPLIER_ORDER_MODE_OPTIONAL')) {
1063 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1064 $action =
'createorder';
1068 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1070 $object->context[
"sendmanualtriggers"] =
GETPOST(
"manual_trigger_send");
1074 $outputlangs = $langs;
1077 $newlang =
GETPOST(
'lang_id',
'aZ09');
1080 $newlang =
$object->thirdparty->default_lang;
1082 if (!empty($newlang)) {
1083 $outputlangs =
new Translate(
"", $conf);
1084 $outputlangs->setDefaultLang($newlang);
1086 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1097 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1105 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1108 $errorsOnDelete = array();
1163 if (empty($errOnDelete)) {
1164 $result =
$object->delete($user);
1167 header(
"Location: " . DOL_URL_ROOT .
'/fourn/commande/list.php?restore_lastsearch_values=1');
1180 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1182 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1183 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1188 $result =
$object->createFromClone($user, $socid);
1190 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1202 if ($action ==
'livraison' && $usercanreceive) {
1213 $langs->load(
"sendings");
1223 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1234 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1238 $result =
$object->cancel($user);
1240 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1248 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1251 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1252 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1253 $trackid =
'sord'.$object->id;
1254 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1257 $upload_dir = $conf->fournisseur->commande->dir_output;
1258 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1261 if ($action ==
'update_extras' && $permissiontoeditextra) {
1264 $attribute_name =
GETPOST(
'attribute',
'aZ09');
1267 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
1273 $result =
$object->updateExtraField($attribute_name,
'ORDER_SUPPLIER_MODIFY');
1281 $action =
'edit_extras';
1288 if ($action ==
'add' && $permissiontoadd) {
1290 $selectedLines =
GETPOST(
'toselect',
'array:int');
1292 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1309 $object->delivery_date = $datelivraison;
1311 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1312 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1318 $ret = $extrafields->setOptionalsFromPost(
null, $object);
1326 if (!empty($origin) && !empty($originid)) {
1327 $element = $subelement = $origin;
1328 $classname = ucfirst($subelement);
1329 if ($origin ==
'propal' || $origin ==
'proposal') {
1330 $element =
'comm/propal';
1331 $subelement =
'propal';
1332 $classname =
'Propal';
1334 if ($origin ==
'order' || $origin ==
'commande') {
1335 $element = $subelement =
'commande';
1336 $classname =
'Commande';
1338 if ($origin ==
'supplier_proposal') {
1339 $classname =
'SupplierProposal';
1340 $element =
'supplier_proposal';
1341 $subelement =
'supplier_proposal';
1345 $object->origin_type = $origin;
1346 $object->origin_id = $originid;
1350 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1351 if (!empty($other_linked_objects)) {
1352 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
1359 $srcobject =
new $classname($db);
1361 dol_syslog(
"Try to find source object origin=".
$object->origin_type.
" originid=".
$object->origin_id.
" to add lines");
1362 $result = $srcobject->fetch(
$object->origin_id);
1364 if (empty(
$object->delivery_date)) {
1365 $tmpdate = $srcobject->delivery_date;
1366 $object->setDeliveryDate($user, $tmpdate);
1368 $object->set_id_projet($user, $srcobject->fk_project);
1370 $lines = $srcobject->lines;
1371 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1372 $srcobject->fetch_lines();
1373 $lines = $srcobject->lines;
1376 $fk_parent_line = 0;
1377 $num = count($lines);
1379 for ($i = 0; $i < $num; $i++) {
1381 empty($lines[$i]->subprice)
1382 || $lines[$i]->qty < 0
1383 || !in_array($lines[$i]->
id, $selectedLines)
1384 || $lines[$i]->special_code == SUBTOTALS_SPECIAL_CODE
1389 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1390 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
1391 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1393 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1394 $fk_parent_line = 0;
1398 if (method_exists($lines[$i],
'fetch_optionals')) {
1399 $lines[$i]->fetch_optionals();
1400 $array_option = $lines[$i]->array_options;
1402 $array_option = array();
1406 $product_fourn_price_id = 0;
1407 if ($origin ==
"commande") {
1409 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty,
$object->socid);
1410 $lines[$i]->subprice = 0;
1412 $ref_supplier = $productsupplier->ref_supplier;
1413 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1415 foreach ($srcobject->lines as $li) {
1416 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1417 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1418 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1419 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1420 $sql .=
' AND fk_soc = '.((int)
$object->socid);
1421 $sql .=
' ORDER BY unitprice ASC';
1423 $resql = $db->query($sql);
1425 $num_row = $db->num_rows($resql);
1426 if (empty($num_row)) {
1427 $li->remise_percent = 0;
1429 $obj = $db->fetch_object($resql);
1430 $li->subprice = $obj->unitprice;
1431 $li->remise_percent = $obj->remise_percent;
1440 $ref_supplier = $lines[$i]->ref_fourn;
1441 $product_fourn_price_id = 0;
1444 $tva_tx = $lines[$i]->tva_tx;
1446 if ($origin ==
"commande") {
1448 $soc->fetch($socid);
1454 $lines[$i]->subprice,
1457 $lines[$i]->localtax1_tx,
1458 $lines[$i]->localtax2_tx,
1459 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1460 $product_fourn_price_id,
1462 $lines[$i]->remise_percent,
1465 $lines[$i]->product_type,
1471 $lines[$i]->fk_unit,
1474 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->rowid,
1476 $lines[$i]->special_code
1486 if ($result > 0 && $lines[$i]->product_type == 9) {
1487 $fk_parent_line = $result;
1495 $parameters = array(
'objFrom' => $srcobject);
1496 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
1520 $categories =
GETPOST(
'categories',
'array:int');
1521 if (method_exists($object,
'setCategories')) {
1522 $object->setCategories($categories);
1527 $langs->load(
"errors");
1532 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode((
string) ($id)));
1539 if ($action ==
'addcontact' && $permissiontoadd) {
1543 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1547 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1550 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1551 $langs->load(
"errors");
1552 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1557 } elseif ($action ==
'swapstatut' &&
$object->id > 0 && $permissiontoadd) {
1560 } elseif ($action ==
'deletecontact' &&
$object->id > 0 && $permissiontoadd) {
1565 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1579$form =
new Form($db);
1582$productstatic =
new Product($db);
1587$title =
$object->ref.
" - ".$langs->trans(
'Card');
1588if ($action ==
'create') {
1589 $title = $langs->trans(
"NewOrderSupplier");
1591$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1592llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplier-order page-card');
1596if ($action ==
'create') {
1597 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1601 $currency_code = $conf->currency;
1608 $societe->fetch($socid);
1611 if (!empty($origin) && !empty($originid)) {
1613 $element = $subelement = $origin;
1614 $classname = ucfirst($subelement);
1616 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1617 $element = $regs[1];
1618 $subelement = $regs[2];
1621 if ($origin ==
'propal' || $origin ==
'proposal') {
1622 $classname =
'Propal';
1623 $element =
'comm/propal';
1624 $subelement =
'propal';
1626 if ($origin ==
'order' || $origin ==
'commande') {
1627 $classname =
'Commande';
1628 $element = $subelement =
'commande';
1630 if ($origin ==
'supplier_proposal') {
1631 $classname =
'SupplierProposal';
1632 $element =
'supplier_proposal';
1633 $subelement =
'supplier_proposal';
1639 $objectsrc =
new $classname($db);
1640 $objectsrc->fetch($originid);
1641 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1642 $objectsrc->fetch_lines();
1644 $objectsrc->fetch_thirdparty();
1647 $objectsrc->fetch_optionals();
1648 $object->array_options = $objectsrc->array_options;
1650 $projectid = (int) $objectsrc->fk_project;
1651 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1653 if ($origin ==
"commande") {
1654 $cond_reglement_id = 0;
1655 $deposit_percent = 0;
1656 $mode_reglement_id = 0;
1657 $datelivraison =
'';
1658 $objectsrc->note_private =
'';
1659 $objectsrc->note_public =
'';
1660 if ($societe =
$object->thirdparty) {
1661 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1662 $deposit_percent = $societe->deposit_percent;
1663 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1665 $currency_code = $societe->multicurrency_code;
1667 $currency_tx = $societe->multicurrency_tx;
1672 $soc = $objectsrc->thirdparty;
1674 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1675 $deposit_percent = (!empty($objectsrc->deposit_percent) ? $objectsrc->deposit_percent : (!empty($soc->deposit_percent) ? $soc->deposit_percent : 0));
1676 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1677 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1678 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1679 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1680 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1685 $datelivraison = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1688 if (!empty($objectsrc->multicurrency_code)) {
1689 $currency_code = $objectsrc->multicurrency_code;
1691 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1692 $currency_tx = $objectsrc->multicurrency_tx;
1696 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1697 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1700 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1703 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1704 $deposit_percent = !empty($societe->deposit_percent) ? $societe->deposit_percent : 0;
1705 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1707 if (
isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1708 $currency_code = $societe->multicurrency_code;
1711 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1712 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1716 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1719 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1722 if (GETPOSTISSET(
'cond_reglement_id_deposit_percent')) {
1723 $deposit_percent =
GETPOSTFLOAT(
'cond_reglement_id_deposit_percent');
1726 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1727 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1728 print
'<input type="hidden" name="action" value="add">';
1729 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1730 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1731 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1732 print
'<input type="hidden" name="changecompany" value="0">';
1734 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1736 if ($backtopageforcancel) {
1737 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1740 if (!empty($currency_tx)) {
1741 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1747 $parameters = array();
1749 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters, $object, $action);
1750 if (empty($reshook)) {
1751 print
'<table class="border centpercent">';
1754 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1757 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1760 if (!empty($societe->id) && $societe->id > 0) {
1761 print $societe->getNomUrl(1,
'supplier');
1762 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1764 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1765 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1769 $(document).ready(function() {
1770 $("#socid").change(function() {
1771 console.log("We have changed the company - Reload page");
1773 $("input[name=action]").val("create");
1774 $("input[name=changecompany]").val("1");
1775 $("form[name=add]").submit();
1780 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>';
1784 if (!empty($societe->id) && $societe->id > 0) {
1786 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1788 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
1790 $thirdparty = $societe;
1792 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1793 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1799 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
1803 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
1804 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1805 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);
1809 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
1810 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1811 $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') &&
GETPOSTINT(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1816 print $langs->trans(
'DateDeliveryPlanned');
1823 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1824 print $form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin, 0,
"set", 1, 1);
1829 $langs->load(
"bank");
1830 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
1831 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
1832 $form->select_comptes($fk_account ??
'',
'fk_account', 0,
'', 1);
1840 $langs->load(
'projects');
1841 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1842 if (!empty($user->socid)) {
1843 $projSocFilter = $user->socid;
1844 } elseif (
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') || $socid == 0) {
1847 $projSocFilter = -1;
1849 $projSocFilter = $socid;
1851 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects($projSocFilter, $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1852 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>';
1858 $fkincoterms = (!empty(
$object->fk_incoterms) ?
$object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
1859 $locincoterms = (!empty(
$object->location_incoterms) ?
$object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
1861 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
1862 print
'<td class="maxwidthonsmartphone">';
1863 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1864 print $form->select_incoterms($fkincoterms, $locincoterms);
1871 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
1872 print
'<td class="maxwidthonsmartphone">';
1873 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1874 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1880 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
1881 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
1885 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
1887 $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%');
1888 print $doleditor->Create(1);
1893 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
1895 $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%');
1896 print $doleditor->Create(1);
1901 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1902 print
"\n<!-- ".$classname.
" info -->";
1904 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1905 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1906 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1907 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1908 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1910 $newclassname = $classname;
1911 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
1912 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
1913 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
1914 if (
$mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1915 print
'<tr><td>'.$langs->transcountry(
"AmountLT1",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
1918 if (
$mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1919 print
'<tr><td>'.$langs->transcountry(
"AmountLT2",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
1922 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
1925 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1926 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
1927 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
1932 $parameters = array();
1933 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1934 print $hookmanager->resPrint;
1936 if (empty($reshook)) {
1937 if (
getDolGlobalString(
'THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_SUPPLIER_ORDER') && !empty($societe->id)) {
1940 $tpExtrafieldLabels = $tpExtrafields->fetch_name_optionals_label($societe->table_element);
1941 if ($societe->fetch_optionals() > 0) {
1942 $object->array_options = array_merge(
$object->array_options, $societe->array_options);
1946 print
$object->showOptionals($extrafields,
'create');
1954 print $form->buttonsSaveCancel(
"CreateDraft");
1957 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1958 $title = $langs->trans(
'ProductsAndServices');
1961 print
'<div class="div-table-responsive-no-min">';
1962 print
'<table class="noborder centpercent">';
1964 $selectedLines = array();
1966 $objectsrc->printOriginLinesList(
'', $selectedLines);
1972} elseif (!empty(
$object->id)) {
1974 $result =
$object->fetch($id, $ref);
1977 $societe =
$object->thirdparty;
1979 $author =
new User($db);
1980 $author->fetch(
$object->user_author_id);
1984 $title = $langs->trans(
"SupplierOrder");
1991 if ($action ==
'delete') {
1992 $arrayAjouts = array();
2023 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.((
int)
$object->id), $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete', $arrayAjouts, 0, 2, $heightModal, $widthModal);
2027 if ($action ==
'clone') {
2028 $filter =
'(s.fournisseur:=:1)';
2030 $formquestion = array(
2031 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
2034 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
2038 if ($action ==
'valid') {
2042 if (preg_match(
'/^[\(]?PROV/i', (
string)
$object->ref) || empty(
$object->ref)) {
2045 $newref = (string)
$object->ref;
2052 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
2054 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2055 $notify =
new Notify($db);
2057 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE',
$object->socid, $object);
2060 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2065 if ($action ==
'approve' || $action ==
'approve2') {
2066 $qualified_for_stock_change = 0;
2068 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2070 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2073 $formquestion = array();
2075 $langs->load(
"stocks");
2076 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2079 if ($conf->browser->name ==
'ie') {
2082 $formquestion = array(
2086 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2089 $text = $langs->trans(
"ConfirmApproveThisOrder",
$object->ref);
2091 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2092 $notify =
new Notify($db);
2094 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE',
$object->socid, $object);
2097 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2101 if ($action ==
'refuse') {
2102 $formquestion = array(
2105 'name' =>
'refuse_note',
2106 'label' => $langs->trans(
"Reason"),
2108 'morecss' =>
'minwidth300'
2111 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder",
$object->ref),
"confirm_refuse", $formquestion, 0, 1);
2115 if ($action ==
'cancel') {
2116 $formquestion = array(
2119 'name' =>
'cancel_note',
2120 'label' => $langs->trans(
"Reason"),
2122 'morecss' =>
'minwidth300'
2126 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2127 $notify =
new Notify($db);
2130 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_CANCEL',
$object->socid, $object);
2132 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder",
$object->ref),
"confirm_cancel", $formquestion, 0, 1);
2136 if ($action ==
'commande') {
2137 $formquestion = array();
2140 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2141 $notify =
new Notify($db);
2144 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT',
$object->socid, $object);
2147 require_once DOL_DOCUMENT_ROOT.
'/webhook/class/target.class.php';
2148 $targetstatic =
new Target($db);
2149 if ($targetstatic->isTriggerCodeManualTarget(
'ORDER_SUPPLIER_SUBMIT') > 0) {
2150 $formquestion[] = array(
'type' =>
'checkbox',
'name' =>
'manual_trigger_send',
'label' => $langs->trans(
"QuestionSendManualTrigger"));
2153 $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);
2157 if ($action ==
'ask_deleteline') {
2158 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2161 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2162 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
2163 if (empty($reshook)) {
2164 $formconfirm .= $hookmanager->resPrint;
2165 } elseif ($reshook > 0) {
2166 $formconfirm = $hookmanager->resPrint;
2175 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2177 $morehtmlref =
'<div class="refidno">';
2179 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, (
int) $usercancreate,
'string',
'', 0, 1);
2180 $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);
2182 $morehtmlref .=
'<br>';
2183 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2184 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2185 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2186 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2187 $filter =
'(s.fournisseur:=:1)';
2188 $morehtmlref .= $form->select_company(
$object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2189 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2190 $morehtmlref .=
'</form>';
2192 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2194 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2196 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
2198 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.
$object->thirdparty->id.
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2204 $langs->load(
"projects");
2205 $morehtmlref .=
'<br>';
2206 if ($permissiontoadd) {
2207 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2208 if ($action !=
'classify' && $caneditproject) {
2209 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2211 $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');
2213 if (!empty(
$object->fk_project)) {
2215 $proj->fetch(
$object->fk_project);
2216 $morehtmlref .= $proj->getNomUrl(1);
2218 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2223 $morehtmlref .=
'</div>';
2226 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2229 $parameters = array();
2231 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters, $object, $action);
2232 if (empty($reshook)) {
2233 print
'<div class="fichecenter">';
2234 print
'<div class="fichehalfleft">';
2235 print
'<div class="underbanner clearboth"></div>';
2237 print
'<table class="border tableforfield centpercent">';
2240 if (
$object->methode_commande_id > 0) {
2245 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2248 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2252 if (
$object->methode_commande) {
2253 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
2258 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2259 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2264 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2265 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2267 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2268 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2271 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2272 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2273 $absolute_discount =
price2num($absolute_discount,
'MT');
2274 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2276 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2278 $thirdparty = $societe;
2280 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
2281 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2286 $langs->load(
'bills');
2287 print
'<tr><td class="nowrap">';
2288 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2289 print $langs->trans(
'PaymentConditions');
2291 if ($action !=
'editconditions' && $permissiontoadd) {
2292 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>';
2294 print
'</tr></table>';
2296 if ($action ==
'editconditions') {
2297 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id', 1,
'', 1,
$object->deposit_percent);
2299 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'none', 1,
'', 1,
$object->deposit_percent);
2305 $langs->load(
'bills');
2306 print
'<tr><td class="nowrap">';
2307 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2308 print $langs->trans(
'PaymentMode');
2310 if ($action !=
'editmode' && $permissiontoadd) {
2311 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>';
2313 print
'</tr></table>';
2315 if ($action ==
'editmode') {
2316 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2318 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'none');
2324 print
'<tr><td class="nowrap">';
2325 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2326 print $langs->trans(
'BankAccount');
2328 if ($action !=
'editbankaccount' && $permissiontoadd) {
2329 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>';
2331 print
'</tr></table>';
2333 if ($action ==
'editbankaccount') {
2334 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
2336 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'none');
2344 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2345 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2350 print
'<table class="nobordernopadding centpercent"><tr><td>';
2351 print $langs->trans(
'DateDeliveryPlanned');
2353 if ($action !=
'editdate_livraison') {
2354 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>';
2356 print
'</tr></table>';
2358 if ($action ==
'editdate_livraison') {
2359 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2360 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2361 print
'<input type="hidden" name="action" value="setdate_livraison">';
2366 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin, 0,
"setdate_livraison");
2367 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2370 $usehourmin =
'day';
2372 $usehourmin =
'dayhour';
2375 if (
$object->hasDelay() && !empty(
$object->delivery_date) && (
$object->status == $object::STATUS_ORDERSENT ||
$object->status == $object::STATUS_RECEIVED_PARTIALLY)) {
2376 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2384 print
'<table class="nobordernopadding centpercent"><tr><td>';
2385 print $langs->trans(
'IncotermLabel');
2386 print
'<td><td class="right">';
2387 if ($usercancreate) {
2388 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2392 print
'</td></tr></table>';
2395 if ($action !=
'editincoterm') {
2398 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2406 print
'<table class="nobordernopadding centpercent"><tr><td>';
2407 print $langs->trans(
"Categories");
2408 print
'<td><td class="right">';
2409 if ($usercancreate) {
2410 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=edittags&token='.
newToken().
'">'.
img_edit().
'</a>';
2414 print
'</td></tr></table>';
2417 if ($action ==
'edittags') {
2418 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2419 print
'<input type="hidden" name="action" value="settags">';
2420 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2421 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
2422 print
'<input type="submit" class="button valignmiddle smallpaddingimp" value="'.$langs->trans(
"Modify").
'">';
2425 print $form->showCategories(
$object->id, Categorie::TYPE_SUPPLIER_ORDER, 1);
2431 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2436 print
'<div class="fichehalfright">';
2437 print
'<div class="underbanner clearboth"></div>';
2439 print
'<table class="border tableforfield centpercent">';
2441 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
2445 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2446 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2449 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2455 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2456 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2459 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2464 if (
$mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2466 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
2467 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2469 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2473 if (
$mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2475 print
'<td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
2476 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2478 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2486 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->supplier_order_min_amount));
2491 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2492 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1, $conf->currency) . $alert .
'</td>';
2495 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2510 print
'<div class="clearboth"></div><br>';
2513 $blocname =
'contacts';
2514 $title = $langs->trans(
'ContactsAddresses');
2515 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2519 $blocname =
'notes';
2520 $title = $langs->trans(
'Notes');
2521 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2530 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2531 <input type="hidden" name="token" value="'.
newToken().
'">
2532 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2533 <input type="hidden" name="mode" value="">
2534 <input type="hidden" name="page_y" value="">
2535 <input type="hidden" name="id" value="'.
$object->id.
'">
2536 <input type="hidden" name="socid" value="'.$societe->id.
'">
2539 if (!empty($conf->use_javascript_ajax) &&
$object->status == 0) {
2540 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2543 print
'<div class="div-table-responsive-no-min">';
2544 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2547 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2550 $inputalsopricewithtax = 1;
2551 $senderissupplier = 2;
2553 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY');
2565 if ($action !=
'editline') {
2568 $parameters = array();
2569 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2573 if (empty($reshook)) {
2589 if ($user->socid == 0 && $action !=
'delete') {
2590 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2591 print
'<div class="tabsAction">';
2593 $parameters = array();
2594 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2596 if (empty($reshook)) {
2600 if (
$object->status == 0 && $num > 0) {
2601 if ($usercanvalidate) {
2602 $tmpbuttonlabel = $langs->trans(
'Validate');
2604 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2607 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">';
2608 print $tmpbuttonlabel;
2620 if ($usercanorder) {
2621 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2627 if ($usercanapprove) {
2628 if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') &&
$object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED && !empty(
$object->user_approve_id)) {
2629 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2631 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2634 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2639 if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') &&
$object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) {
2641 if ($usercanapprovesecond) {
2642 if (!empty(
$object->user_approve_id2)) {
2643 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2645 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2648 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2655 if ($usercanapprove || $usercanapprovesecond) {
2656 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2658 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2663 if (empty($user->socid)) {
2665 if ($usercanorder) {
2666 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init'],
true).
'#formmailbeforetitle',
'');
2674 if (!$buttonshown && $usercanapprove) {
2677 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2681 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2684 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2688 if (in_array(
$object->status, array(3, 4, 5, 6, 7, 9))) {
2689 if ($usercanorder) {
2690 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2697 $labelofbutton = $langs->trans(
'ReceiveProducts');
2699 $labelofbutton = $langs->trans(
"CreateReception");
2700 if (!empty(
$object->linkedObjects[
'reception'])) {
2701 foreach (
$object->linkedObjects[
'reception'] as $element) {
2702 if ($element->statut >= 0) {
2715 $dispachedLines =
$object->getDispachedLines(1);
2716 $nbDispachedLines = count($dispachedLines);
2717 if ($nbDispachedLines > 0) {
2722 if (in_array(
$object->status, array(3, 4, 5))) {
2723 if (
isModEnabled(
"supplier_order") && $usercanreceive) {
2724 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.
$object->id.
'">'.$labelofbutton.
'</a></div>';
2726 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
2732 if ($usercanorder) {
2733 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>';
2735 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
2741 if ($usercanreceive) {
2742 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>';
2750 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2751 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>';
2759 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2761 if (!empty(
$object->linkedObjectsIds[
'invoice_supplier']) || (empty(
$object->linkedObjectsIds[
'invoice_supplier']) && !
getDolGlobalInt(
'SUPPLIER_ORDER_DISABLE_CLASSIFY_BILLED_FROM_SUPPLIER_ORDER'))) {
2762 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2763 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2766 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2772 if ($usercancreate &&
$object->billed > 0 &&
$object->status > $object::STATUS_DRAFT) {
2773 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyunbilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyUnbilled").
'</a>';
2777 if ($usercancreate) {
2778 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&token='.
newToken().
'&object=order">'.$langs->trans(
"ToClone").
'</a>';
2783 if ($usercanorder) {
2784 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.
newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
2789 if (!empty($usercandelete)) {
2790 if ($hasreception) {
2791 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
2793 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2803 print
'<!-- form to record supplier order -->'.
"\n";
2804 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
2806 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2807 print
'<input type="hidden" name="action" value="commande">';
2809 print
'<table class="noborder centpercent">';
2811 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
2813 print $form->selectDate($date_com ?:
'',
'', 0, 0, 0,
"commande", 1, 1);
2817 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
2818 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
2821 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
2823 print
'<tr><td class="center" colspan="2">';
2824 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
2825 print
' ';
2826 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2835 if (
GETPOST(
'modelselected')) {
2836 $action =
'presend';
2839 if ($action !=
'createorder' && $action !=
'presend') {
2840 print
'<div class="fichecenter"><div class="fichehalfleft">';
2844 $file = $conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
2845 $relativepath = $objref.
'/'.$objref.
'.pdf';
2846 $filedir = $conf->fournisseur->dir_output.
'/commande/'.$objref;
2847 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2848 $genallowed = $usercanread;
2849 $delallowed = $usercancreate;
2850 $modelpdf = (!empty(
$object->model_pdf) ?
$object->model_pdf : (!
getDolGlobalString(
'COMMANDE_SUPPLIER_ADDON_PDF') ?
'' : $conf->global->COMMANDE_SUPPLIER_ADDON_PDF));
2852 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, (
int) $genallowed, (int) $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'',
$object->thirdparty->default_lang,
'', $object);
2853 $somethingshown = $formfile->numoffiles;
2856 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'supplier_order',
'order_supplier'), 1);
2857 $linktoelem = $tmparray[
'linktoelem'];
2858 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2859 print $htmltoenteralink;
2861 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2863 print
'</div><div class="fichehalfright">';
2865 if ($action ==
'classifyreception') {
2868 print
'<!-- form to record purchase order received -->'.
"\n";
2869 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
2870 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2871 print
'<input type="hidden" name="action" value="livraison">';
2874 print
'<table class="noborder centpercent">';
2876 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
2878 print $form->selectDate($datepreselected,
'', 1, 1, 0,
"commande", 1, 1);
2879 print
"</td></tr>\n";
2881 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
2883 $liv[
''] =
' ';
2884 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
2885 $liv[
'par'] = $langs->trans(
"PartialWoman");
2886 $liv[
'nev'] = $langs->trans(
"NeverReceived");
2887 $liv[
'can'] = $langs->trans(
"Canceled");
2889 print $form->selectarray(
"type", $liv);
2892 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
2893 print
'<tr><td class="center" colspan="2">';
2894 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
2895 print
' ';
2896 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2905 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2907 $somethingshown = $formactions->showactions($object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
2909 print
'</div></div>';
2915 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
2916 $mode =
GETPOST(
'mode',
'alpha');
2917 $ws_url =
$object->thirdparty->webservices_url;
2918 $ws_key =
$object->thirdparty->webservices_key;
2919 $ws_user =
GETPOST(
'ws_user',
'alpha');
2920 $ws_password =
GETPOST(
'ws_password',
'alpha');
2921 $error_occurred =
false;
2924 $ws_ns =
'http://www.dolibarr.org/ns/';
2925 $ws_authentication = array(
2926 'dolibarrkey' => $ws_key,
2927 'sourceapplication' =>
'DolibarrWebServiceClient',
2928 'login' => $ws_user,
2929 'password' => $ws_password,
2936 if (empty($ws_url) || empty($ws_key)) {
2937 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
2939 $error_occurred =
true;
2940 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
2945 if ($mode ==
"init") {
2947 print
'<table class="border centpercent">';
2948 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2949 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2950 print
'<input type="hidden" name="action" value="webservice">';
2951 print
'<input type="hidden" name="mode" value="check">';
2953 if ($error_occurred) {
2954 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2955 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2958 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
2960 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
2962 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
2964 print
'<tr><td class="center" colspan="2">';
2965 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
2966 print
' ';
2968 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2975 } elseif ($mode ==
"check") {
2977 $ws_thirdparty =
'';
2978 $error_occurred =
false;
2981 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
2982 $soapclient_user->soap_defencoding =
'UTF-8';
2983 $soapclient_user->decodeUTF8(
false);
2986 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ws_user);
2987 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
2988 $user_status_code = $result_user[
"result"][
"result_code"];
2990 if ($user_status_code ==
"OK") {
2992 $ws_entity = $result_user[
"user"][
"entity"];
2993 $ws_authentication[
'entity'] = $ws_entity;
2994 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
2995 if (empty($ws_thirdparty)) {
2996 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
2997 $error_occurred =
true;
3000 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
3001 $soapclient_product->soap_defencoding =
'UTF-8';
3002 $soapclient_product->decodeUTF8(
false);
3006 foreach (
$object->lines as $line) {
3008 $ref_supplier = $line->ref_supplier;
3009 $line_id = $i.
"º) ".$line->product_ref.
": ";
3010 if (empty($ref_supplier)) {
3013 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
3014 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
3015 if (!$result_product) {
3016 setEventMessages($line_id.$langs->trans(
"Error").
" SOAP ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
3017 $error_occurred =
true;
3022 $status_code = $result_product[
"result"][
"result_code"];
3023 if (empty($status_code)) {
3024 setEventMessages($langs->trans(
"Error").
" SOAP '".$soapclient_product->error_str.
"'",
null,
'errors');
3025 } elseif ($status_code !=
"OK") {
3026 if ($status_code ==
"NOT_FOUND") {
3027 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
3029 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
3030 $error_occurred =
true;
3037 $supplier_price =
price($result_product[
"product"][
"price_net"]);
3038 $local_price =
null;
3041 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
3042 if (count($product_fourn_list) > 0) {
3043 foreach ($product_fourn_list as $product_fourn_line) {
3045 if ($product_fourn_line->fourn_id ==
$object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
3046 $local_price =
price($product_fourn_line->fourn_price);
3051 if ($local_price !=
null && $local_price != $supplier_price) {
3052 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
3056 if (empty($result_product[
"product"][
"status_tosell"])) {
3057 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
3061 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
3062 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
3063 $error_occurred =
true;
3064 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
3065 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
3066 $error_occurred =
true;
3068 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
3069 $error_occurred =
true;
3073 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
3074 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3075 print
'<input type="hidden" name="action" value="webservice">';
3076 print
'<input type="hidden" name="mode" value="send">';
3077 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
3078 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
3079 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
3080 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
3081 if ($error_occurred) {
3082 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3084 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
3085 print
' ';
3087 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3093 $modelmail =
'order_supplier_send';
3094 $defaulttopic =
'SendOrderRef';
3095 $diroutput = $conf->fournisseur->commande->dir_output;
3096 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3097 $trackid =
'sord'.$object->id;
3099 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.
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.
dolBuildUrl($url, $params=[], $addtoken=false)
Return path of url.
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 '.
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.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
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).
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...
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.