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) {
682 $outputlangs = $langs;
685 $newlang =
$object->thirdparty->default_lang;
686 if (
GETPOST(
'lang_id',
'aZ09')) {
687 $newlang =
GETPOST(
'lang_id',
'aZ09');
690 if (!empty($newlang)) {
692 $outputlangs->setDefaultLang($newlang);
697 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
703 unset($_POST [
'prod_entry_mode']);
705 unset($_POST[
'qty']);
706 unset($_POST[
'type']);
707 unset($_POST[
'remise_percent']);
709 unset($_POST[
'price_ht']);
710 unset($_POST[
'multicurrency_price_ht']);
711 unset($_POST[
'price_ttc']);
712 unset($_POST[
'fourn_ref']);
713 unset($_POST[
'tva_tx']);
714 unset($_POST[
'label']);
715 unset($localtax1_tx);
716 unset($localtax2_tx);
717 unset($_POST[
'np_marginRate']);
718 unset($_POST[
'np_markRate']);
719 unset($_POST[
'dp_desc']);
720 unset($_POST[
'idprodfournprice']);
721 unset($_POST[
'units']);
723 unset($_POST[
'date_starthour']);
724 unset($_POST[
'date_startmin']);
725 unset($_POST[
'date_startsec']);
726 unset($_POST[
'date_startday']);
727 unset($_POST[
'date_startmonth']);
728 unset($_POST[
'date_startyear']);
729 unset($_POST[
'date_endhour']);
730 unset($_POST[
'date_endmin']);
731 unset($_POST[
'date_endsec']);
732 unset($_POST[
'date_endday']);
733 unset($_POST[
'date_endmonth']);
734 unset($_POST[
'date_endyear']);
746 if ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
753 $res = $line->fetch($lineid);
760 if (
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY') == 1) {
761 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0, (
float)
price2num(
GETPOSTFLOAT(
'qty')), $line->fk_product,
'none',
GETPOSTINT(
'socid')) < 0) {
762 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
771 if (preg_match(
'/\*/', $vat_rate)) {
776 $vat_rate = str_replace(
'*',
'', $vat_rate);
780 if (
GETPOST(
'price_ht') !=
'') {
781 $price_base_type =
'HT';
785 $vatratecleaned = $vat_rate;
786 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
787 $vatratecleaned = trim($reg[1]);
788 $vatratecode = $reg[2];
792 $ht = (float) $ttc / (1 + ((
float) $vatratecleaned / 100));
793 $price_base_type =
'HT';
799 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
800 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
802 if (is_array($extralabelsline)) {
803 foreach ($extralabelsline as $key => $value) {
804 unset($_POST[
"options_".$key]);
810 GETPOST(
'product_desc',
'restricthtml'),
819 GETPOSTISSET(
"type") ?
GETPOST(
"type") : $line->product_type,
825 (float) $pu_ht_devise,
828 unset($_POST[
'qty']);
829 unset($_POST[
'type']);
830 unset($_POST[
'idprodfournprice']);
831 unset($_POST[
'remmise_percent']);
832 unset($_POST[
'dp_desc']);
833 unset($_POST[
'np_desc']);
835 unset($_POST[
'fourn_ref']);
836 unset($_POST[
'tva_tx']);
837 unset($_POST[
'date_start']);
838 unset($_POST[
'date_end']);
839 unset($_POST[
'units']);
840 unset($localtax1_tx);
841 unset($localtax2_tx);
843 unset($_POST[
'date_starthour']);
844 unset($_POST[
'date_startmin']);
845 unset($_POST[
'date_startsec']);
846 unset($_POST[
'date_startday']);
847 unset($_POST[
'date_startmonth']);
848 unset($_POST[
'date_startyear']);
849 unset($_POST[
'date_endhour']);
850 unset($_POST[
'date_endmin']);
851 unset($_POST[
'date_endsec']);
852 unset($_POST[
'date_endday']);
853 unset($_POST[
'date_endmonth']);
854 unset($_POST[
'date_endyear']);
859 $outputlangs = $langs;
862 $newlang =
GETPOST(
'lang_id',
'aZ09');
865 $newlang =
$object->thirdparty->default_lang;
867 if (!empty($newlang)) {
869 $outputlangs->setDefaultLang($newlang);
874 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
889 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
892 $result =
$object->deleteLine($lineid);
897 $outputlangs = $langs;
900 $newlang =
GETPOST(
'lang_id',
'aZ09');
903 $newlang =
$object->thirdparty->default_lang;
905 if (!empty($newlang)) {
907 $outputlangs->setDefaultLang($newlang);
911 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
933 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
941 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
945 $result =
$object->valid($user);
949 $outputlangs = $langs;
952 $newlang =
GETPOST(
'lang_id',
'aZ09');
955 $newlang =
$object->thirdparty->default_lang;
957 if (!empty($newlang)) {
959 $outputlangs->setDefaultLang($newlang);
964 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
977 $action =
'confirm_approve';
987 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
992 $qualified_for_stock_change = 0;
994 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
996 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1001 if (!$idwarehouse || $idwarehouse == -1) {
1003 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1009 $result =
$object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
1012 $outputlangs = $langs;
1015 $newlang =
GETPOST(
'lang_id',
'aZ09');
1018 $newlang =
$object->thirdparty->default_lang;
1020 if (!empty($newlang)) {
1021 $outputlangs =
new Translate(
"", $conf);
1022 $outputlangs->setDefaultLang($newlang);
1024 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1035 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1042 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1046 $result =
$object->refuse($user);
1048 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1056 if ($action ==
'commande') {
1057 $methodecommande =
GETPOSTINT(
'methodecommande');
1061 } elseif ($methodecommande <= 0 && !
getDolGlobalInt(
'SUPPLIER_ORDER_MODE_OPTIONAL')) {
1062 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1063 $action =
'createorder';
1067 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1069 $object->context[
"sendmanualtriggers"] =
GETPOST(
"manual_trigger_send");
1073 $outputlangs = $langs;
1076 $newlang =
GETPOST(
'lang_id',
'aZ09');
1079 $newlang =
$object->thirdparty->default_lang;
1081 if (!empty($newlang)) {
1082 $outputlangs =
new Translate(
"", $conf);
1083 $outputlangs->setDefaultLang($newlang);
1085 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1096 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1104 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1107 $errorsOnDelete = array();
1162 if (empty($errOnDelete)) {
1163 $result =
$object->delete($user);
1166 header(
"Location: " . DOL_URL_ROOT .
'/fourn/commande/list.php?restore_lastsearch_values=1');
1179 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1181 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1182 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1187 $result =
$object->createFromClone($user, $socid);
1189 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1201 if ($action ==
'livraison' && $usercanreceive) {
1212 $langs->load(
"sendings");
1222 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1233 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1237 $result =
$object->cancel($user);
1239 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1247 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1250 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1251 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1252 $trackid =
'sord'.$object->id;
1253 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1256 $upload_dir = $conf->fournisseur->commande->dir_output;
1257 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1260 if ($action ==
'update_extras' && $permissiontoeditextra) {
1263 $attribute_name =
GETPOST(
'attribute',
'aZ09');
1266 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
1272 $result =
$object->updateExtraField($attribute_name,
'ORDER_SUPPLIER_MODIFY');
1280 $action =
'edit_extras';
1287 if ($action ==
'add' && $permissiontoadd) {
1289 $selectedLines =
GETPOST(
'toselect',
'array:int');
1291 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1308 $object->delivery_date = $datelivraison;
1310 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1311 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1317 $ret = $extrafields->setOptionalsFromPost(
null, $object);
1325 if (!empty($origin) && !empty($originid)) {
1326 $element = $subelement = $origin;
1327 $classname = ucfirst($subelement);
1328 if ($origin ==
'propal' || $origin ==
'proposal') {
1329 $element =
'comm/propal';
1330 $subelement =
'propal';
1331 $classname =
'Propal';
1333 if ($origin ==
'order' || $origin ==
'commande') {
1334 $element = $subelement =
'commande';
1335 $classname =
'Commande';
1337 if ($origin ==
'supplier_proposal') {
1338 $classname =
'SupplierProposal';
1339 $element =
'supplier_proposal';
1340 $subelement =
'supplier_proposal';
1344 $object->origin_type = $origin;
1345 $object->origin_id = $originid;
1349 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1350 if (!empty($other_linked_objects)) {
1351 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
1358 $srcobject =
new $classname($db);
1360 dol_syslog(
"Try to find source object origin=".
$object->origin_type.
" originid=".
$object->origin_id.
" to add lines");
1361 $result = $srcobject->fetch(
$object->origin_id);
1363 if (empty(
$object->delivery_date)) {
1364 $tmpdate = $srcobject->delivery_date;
1365 $object->setDeliveryDate($user, $tmpdate);
1367 $object->set_id_projet($user, $srcobject->fk_project);
1369 $lines = $srcobject->lines;
1370 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1371 $srcobject->fetch_lines();
1372 $lines = $srcobject->lines;
1375 $fk_parent_line = 0;
1376 $num = count($lines);
1378 for ($i = 0; $i < $num; $i++) {
1380 empty($lines[$i]->subprice)
1381 || $lines[$i]->qty < 0
1382 || !in_array($lines[$i]->
id, $selectedLines)
1383 || $lines[$i]->special_code == SUBTOTALS_SPECIAL_CODE
1388 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1389 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
1390 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1392 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1393 $fk_parent_line = 0;
1397 if (method_exists($lines[$i],
'fetch_optionals')) {
1398 $lines[$i]->fetch_optionals();
1399 $array_option = $lines[$i]->array_options;
1401 $array_option = array();
1405 $product_fourn_price_id = 0;
1406 if ($origin ==
"commande") {
1408 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty,
$object->socid);
1409 $lines[$i]->subprice = 0;
1411 $ref_supplier = $productsupplier->ref_supplier;
1412 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1414 foreach ($srcobject->lines as $li) {
1415 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1416 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1417 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1418 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1419 $sql .=
' AND fk_soc = '.((int)
$object->socid);
1420 $sql .=
' ORDER BY unitprice ASC';
1422 $resql = $db->query($sql);
1424 $num_row = $db->num_rows($resql);
1425 if (empty($num_row)) {
1426 $li->remise_percent = 0;
1428 $obj = $db->fetch_object($resql);
1429 $li->subprice = $obj->unitprice;
1430 $li->remise_percent = $obj->remise_percent;
1439 $ref_supplier = $lines[$i]->ref_fourn;
1440 $product_fourn_price_id = 0;
1443 $tva_tx = $lines[$i]->tva_tx;
1445 if ($origin ==
"commande") {
1447 $soc->fetch($socid);
1453 $lines[$i]->subprice,
1456 $lines[$i]->localtax1_tx,
1457 $lines[$i]->localtax2_tx,
1458 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1459 $product_fourn_price_id,
1461 $lines[$i]->remise_percent,
1464 $lines[$i]->product_type,
1470 $lines[$i]->fk_unit,
1473 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->rowid,
1475 $lines[$i]->special_code
1485 if ($result > 0 && $lines[$i]->product_type == 9) {
1486 $fk_parent_line = $result;
1494 $parameters = array(
'objFrom' => $srcobject);
1495 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
1519 $categories =
GETPOST(
'categories',
'array:int');
1520 if (method_exists($object,
'setCategories')) {
1521 $object->setCategories($categories);
1526 $langs->load(
"errors");
1531 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode((
string) ($id)));
1538 if ($action ==
'addcontact' && $permissiontoadd) {
1542 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1546 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1549 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1550 $langs->load(
"errors");
1551 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1556 } elseif ($action ==
'swapstatut' &&
$object->id > 0 && $permissiontoadd) {
1559 } elseif ($action ==
'deletecontact' &&
$object->id > 0 && $permissiontoadd) {
1564 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1578$form =
new Form($db);
1581$productstatic =
new Product($db);
1586$title =
$object->ref.
" - ".$langs->trans(
'Card');
1587if ($action ==
'create') {
1588 $title = $langs->trans(
"NewOrderSupplier");
1590$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1591llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplier-order page-card');
1595if ($action ==
'create') {
1596 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1600 $currency_code = $conf->currency;
1607 $societe->fetch($socid);
1610 if (!empty($origin) && !empty($originid)) {
1612 $element = $subelement = $origin;
1613 $classname = ucfirst($subelement);
1615 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1616 $element = $regs[1];
1617 $subelement = $regs[2];
1620 if ($origin ==
'propal' || $origin ==
'proposal') {
1621 $classname =
'Propal';
1622 $element =
'comm/propal';
1623 $subelement =
'propal';
1625 if ($origin ==
'order' || $origin ==
'commande') {
1626 $classname =
'Commande';
1627 $element = $subelement =
'commande';
1629 if ($origin ==
'supplier_proposal') {
1630 $classname =
'SupplierProposal';
1631 $element =
'supplier_proposal';
1632 $subelement =
'supplier_proposal';
1638 $objectsrc =
new $classname($db);
1639 $objectsrc->fetch($originid);
1640 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1641 $objectsrc->fetch_lines();
1643 $objectsrc->fetch_thirdparty();
1646 $objectsrc->fetch_optionals();
1647 $object->array_options = $objectsrc->array_options;
1649 $projectid = (int) $objectsrc->fk_project;
1650 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1652 if ($origin ==
"commande") {
1653 $cond_reglement_id = 0;
1654 $deposit_percent = 0;
1655 $mode_reglement_id = 0;
1656 $datelivraison =
'';
1657 $objectsrc->note_private =
'';
1658 $objectsrc->note_public =
'';
1659 if ($societe =
$object->thirdparty) {
1660 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1661 $deposit_percent = $societe->deposit_percent;
1662 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1664 $currency_code = $societe->multicurrency_code;
1666 $currency_tx = $societe->multicurrency_tx;
1671 $soc = $objectsrc->thirdparty;
1673 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1674 $deposit_percent = (!empty($objectsrc->deposit_percent) ? $objectsrc->deposit_percent : (!empty($soc->deposit_percent) ? $soc->deposit_percent : 0));
1675 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1676 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1677 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1678 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1679 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1684 $datelivraison = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1687 if (!empty($objectsrc->multicurrency_code)) {
1688 $currency_code = $objectsrc->multicurrency_code;
1690 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1691 $currency_tx = $objectsrc->multicurrency_tx;
1695 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1696 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1699 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1702 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1703 $deposit_percent = !empty($societe->deposit_percent) ? $societe->deposit_percent : 0;
1704 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1706 if (
isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1707 $currency_code = $societe->multicurrency_code;
1710 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1711 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1715 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1718 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1721 if (GETPOSTISSET(
'cond_reglement_id_deposit_percent')) {
1722 $deposit_percent =
GETPOSTFLOAT(
'cond_reglement_id_deposit_percent');
1725 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1726 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1727 print
'<input type="hidden" name="action" value="add">';
1728 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1729 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1730 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1731 print
'<input type="hidden" name="changecompany" value="0">';
1733 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1735 if ($backtopageforcancel) {
1736 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1739 if (!empty($currency_tx)) {
1740 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1746 $parameters = array();
1748 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters, $object, $action);
1749 if (empty($reshook)) {
1750 print
'<table class="border centpercent">';
1753 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1756 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1759 if (!empty($societe->id) && $societe->id > 0) {
1760 print $societe->getNomUrl(1,
'supplier');
1761 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1763 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1764 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1768 $(document).ready(function() {
1769 $("#socid").change(function() {
1770 console.log("We have changed the company - Reload page");
1772 $("input[name=action]").val("create");
1773 $("input[name=changecompany]").val("1");
1774 $("form[name=add]").submit();
1779 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>';
1783 if (!empty($societe->id) && $societe->id > 0) {
1785 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1787 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
1789 $thirdparty = $societe;
1791 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1792 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1798 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
1802 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
1803 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1804 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);
1808 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
1809 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1810 $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') &&
GETPOSTINT(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1815 print $langs->trans(
'DateDeliveryPlanned');
1822 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1823 print $form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin, 0,
"set", 1, 1);
1828 $langs->load(
"bank");
1829 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
1830 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
1831 $form->select_comptes($fk_account ??
'',
'fk_account', 0,
'', 1);
1839 $langs->load(
'projects');
1840 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1841 if (!empty($user->socid)) {
1842 $projSocFilter = $user->socid;
1843 } elseif (
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') || $socid == 0) {
1846 $projSocFilter = -1;
1848 $projSocFilter = $socid;
1850 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects($projSocFilter, $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1851 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>';
1857 $fkincoterms = (!empty(
$object->fk_incoterms) ?
$object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
1858 $locincoterms = (!empty(
$object->location_incoterms) ?
$object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
1860 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
1861 print
'<td class="maxwidthonsmartphone">';
1862 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1863 print $form->select_incoterms($fkincoterms, $locincoterms);
1870 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
1871 print
'<td class="maxwidthonsmartphone">';
1872 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1873 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1879 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
1880 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
1884 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
1886 $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%');
1887 print $doleditor->Create(1);
1892 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
1894 $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%');
1895 print $doleditor->Create(1);
1900 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1901 print
"\n<!-- ".$classname.
" info -->";
1903 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1904 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1905 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1906 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1907 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1909 $newclassname = $classname;
1910 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
1911 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
1912 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
1913 if (
$mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1914 print
'<tr><td>'.$langs->transcountry(
"AmountLT1",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
1917 if (
$mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1918 print
'<tr><td>'.$langs->transcountry(
"AmountLT2",
$mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
1921 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
1924 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1925 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
1926 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
1931 $parameters = array();
1932 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1933 print $hookmanager->resPrint;
1935 if (empty($reshook)) {
1936 if (
getDolGlobalString(
'THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_SUPPLIER_ORDER') && !empty($societe->id)) {
1939 $tpExtrafieldLabels = $tpExtrafields->fetch_name_optionals_label($societe->table_element);
1940 if ($societe->fetch_optionals() > 0) {
1941 $object->array_options = array_merge(
$object->array_options, $societe->array_options);
1945 print
$object->showOptionals($extrafields,
'create');
1953 print $form->buttonsSaveCancel(
"CreateDraft");
1956 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1957 $title = $langs->trans(
'ProductsAndServices');
1960 print
'<div class="div-table-responsive-no-min">';
1961 print
'<table class="noborder centpercent">';
1963 $selectedLines = array();
1965 $objectsrc->printOriginLinesList(
'', $selectedLines);
1971} elseif (!empty(
$object->id)) {
1973 $result =
$object->fetch($id, $ref);
1976 $societe =
$object->thirdparty;
1978 $author =
new User($db);
1979 $author->fetch(
$object->user_author_id);
1983 $title = $langs->trans(
"SupplierOrder");
1990 if ($action ==
'delete') {
1991 $arrayAjouts = array();
2022 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.((
int)
$object->id), $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete', $arrayAjouts, 0, 2, $heightModal, $widthModal);
2026 if ($action ==
'clone') {
2027 $filter =
'(s.fournisseur:=:1)';
2029 $formquestion = array(
2030 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
2033 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
2037 if ($action ==
'valid') {
2041 if (preg_match(
'/^[\(]?PROV/i', (
string)
$object->ref) || empty(
$object->ref)) {
2044 $newref = (string)
$object->ref;
2051 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
2053 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2054 $notify =
new Notify($db);
2056 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE',
$object->socid, $object);
2059 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2064 if ($action ==
'approve' || $action ==
'approve2') {
2065 $qualified_for_stock_change = 0;
2067 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2069 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2072 $formquestion = array();
2074 $langs->load(
"stocks");
2075 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2078 if ($conf->browser->name ==
'ie') {
2081 $formquestion = array(
2085 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2088 $text = $langs->trans(
"ConfirmApproveThisOrder",
$object->ref);
2090 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2091 $notify =
new Notify($db);
2093 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE',
$object->socid, $object);
2096 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2100 if ($action ==
'refuse') {
2101 $formquestion = array(
2104 'name' =>
'refuse_note',
2105 'label' => $langs->trans(
"Reason"),
2107 'morecss' =>
'minwidth300'
2110 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder",
$object->ref),
"confirm_refuse", $formquestion, 0, 1);
2114 if ($action ==
'cancel') {
2115 $formquestion = array(
2118 'name' =>
'cancel_note',
2119 'label' => $langs->trans(
"Reason"),
2121 'morecss' =>
'minwidth300'
2125 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2126 $notify =
new Notify($db);
2129 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_CANCEL',
$object->socid, $object);
2131 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder",
$object->ref),
"confirm_cancel", $formquestion, 0, 1);
2135 if ($action ==
'commande') {
2136 $formquestion = array();
2139 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2140 $notify =
new Notify($db);
2143 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT',
$object->socid, $object);
2146 require_once DOL_DOCUMENT_ROOT.
'/webhook/class/target.class.php';
2147 $targetstatic =
new Target($db);
2148 if ($targetstatic->isTriggerCodeManualTarget(
'ORDER_SUPPLIER_SUBMIT') > 0) {
2149 $formquestion[] = array(
'type' =>
'checkbox',
'name' =>
'manual_trigger_send',
'label' => $langs->trans(
"QuestionSendManualTrigger"));
2152 $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);
2156 if ($action ==
'ask_deleteline') {
2157 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2160 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2161 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
2162 if (empty($reshook)) {
2163 $formconfirm .= $hookmanager->resPrint;
2164 } elseif ($reshook > 0) {
2165 $formconfirm = $hookmanager->resPrint;
2174 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2176 $morehtmlref =
'<div class="refidno">';
2178 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, (
int) $usercancreate,
'string',
'', 0, 1);
2179 $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);
2181 $morehtmlref .=
'<br>';
2182 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2183 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2184 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2185 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2186 $filter =
'(s.fournisseur:=:1)';
2187 $morehtmlref .= $form->select_company(
$object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2188 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2189 $morehtmlref .=
'</form>';
2191 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2193 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2195 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
2197 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.
$object->thirdparty->id.
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2203 $langs->load(
"projects");
2204 $morehtmlref .=
'<br>';
2205 if ($permissiontoadd) {
2206 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2207 if ($action !=
'classify' && $caneditproject) {
2208 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2210 $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');
2212 if (!empty(
$object->fk_project)) {
2214 $proj->fetch(
$object->fk_project);
2215 $morehtmlref .= $proj->getNomUrl(1);
2217 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2222 $morehtmlref .=
'</div>';
2225 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2228 $parameters = array();
2230 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters, $object, $action);
2231 if (empty($reshook)) {
2232 print
'<div class="fichecenter">';
2233 print
'<div class="fichehalfleft">';
2234 print
'<div class="underbanner clearboth"></div>';
2236 print
'<table class="border tableforfield centpercent">';
2239 if (
$object->methode_commande_id > 0) {
2244 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2247 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2251 if (
$object->methode_commande) {
2252 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
2257 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2258 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2263 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2264 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2266 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2267 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2270 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2271 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2272 $absolute_discount =
price2num($absolute_discount,
'MT');
2273 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2275 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2277 $thirdparty = $societe;
2279 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
2280 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2285 $langs->load(
'bills');
2286 print
'<tr><td class="nowrap">';
2287 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2288 print $langs->trans(
'PaymentConditions');
2290 if ($action !=
'editconditions' && $permissiontoadd) {
2291 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>';
2293 print
'</tr></table>';
2295 if ($action ==
'editconditions') {
2296 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id', 1,
'', 1,
$object->deposit_percent);
2298 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'none', 1,
'', 1,
$object->deposit_percent);
2304 $langs->load(
'bills');
2305 print
'<tr><td class="nowrap">';
2306 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2307 print $langs->trans(
'PaymentMode');
2309 if ($action !=
'editmode' && $permissiontoadd) {
2310 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>';
2312 print
'</tr></table>';
2314 if ($action ==
'editmode') {
2315 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2317 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'none');
2323 print
'<tr><td class="nowrap">';
2324 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2325 print $langs->trans(
'BankAccount');
2327 if ($action !=
'editbankaccount' && $permissiontoadd) {
2328 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>';
2330 print
'</tr></table>';
2332 if ($action ==
'editbankaccount') {
2333 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
2335 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'none');
2343 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2344 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2349 print
'<table class="nobordernopadding centpercent"><tr><td>';
2350 print $langs->trans(
'DateDeliveryPlanned');
2352 if ($action !=
'editdate_livraison') {
2353 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>';
2355 print
'</tr></table>';
2357 if ($action ==
'editdate_livraison') {
2358 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2359 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2360 print
'<input type="hidden" name="action" value="setdate_livraison">';
2365 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin, 0,
"setdate_livraison");
2366 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2369 $usehourmin =
'day';
2371 $usehourmin =
'dayhour';
2374 if (
$object->hasDelay() && !empty(
$object->delivery_date) && (
$object->status == $object::STATUS_ORDERSENT ||
$object->status == $object::STATUS_RECEIVED_PARTIALLY)) {
2375 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2383 print
'<table class="nobordernopadding centpercent"><tr><td>';
2384 print $langs->trans(
'IncotermLabel');
2385 print
'<td><td class="right">';
2386 if ($usercancreate) {
2387 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2391 print
'</td></tr></table>';
2394 if ($action !=
'editincoterm') {
2397 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2405 print
'<table class="nobordernopadding centpercent"><tr><td>';
2406 print $langs->trans(
"Categories");
2407 print
'<td><td class="right">';
2408 if ($usercancreate) {
2409 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=edittags&token='.
newToken().
'">'.
img_edit().
'</a>';
2413 print
'</td></tr></table>';
2416 if ($action ==
'edittags') {
2417 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2418 print
'<input type="hidden" name="action" value="settags">';
2419 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2420 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories', $object);
2421 print
'<input type="submit" class="button valignmiddle smallpaddingimp" value="'.$langs->trans(
"Modify").
'">';
2424 print $form->showCategories(
$object->id, Categorie::TYPE_SUPPLIER_ORDER, 1);
2430 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2435 print
'<div class="fichehalfright">';
2436 print
'<div class="underbanner clearboth"></div>';
2438 print
'<table class="border tableforfield centpercent">';
2440 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
2444 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2445 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2448 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2454 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2455 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2458 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2463 if (
$mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2465 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
2466 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2468 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2472 if (
$mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2474 print
'<td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
2475 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2477 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2485 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->supplier_order_min_amount));
2490 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2491 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1, $conf->currency) . $alert .
'</td>';
2494 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2509 print
'<div class="clearboth"></div><br>';
2512 $blocname =
'contacts';
2513 $title = $langs->trans(
'ContactsAddresses');
2514 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2518 $blocname =
'notes';
2519 $title = $langs->trans(
'Notes');
2520 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2529 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2530 <input type="hidden" name="token" value="'.
newToken().
'">
2531 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2532 <input type="hidden" name="mode" value="">
2533 <input type="hidden" name="page_y" value="">
2534 <input type="hidden" name="id" value="'.
$object->id.
'">
2535 <input type="hidden" name="socid" value="'.$societe->id.
'">
2538 if (!empty($conf->use_javascript_ajax) &&
$object->status == 0) {
2539 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2542 print
'<div class="div-table-responsive-no-min">';
2543 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2546 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2549 $inputalsopricewithtax = 1;
2550 $senderissupplier = 2;
2552 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY');
2564 if ($action !=
'editline') {
2567 $parameters = array();
2568 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2572 if (empty($reshook)) {
2588 if ($user->socid == 0 && $action !=
'delete') {
2589 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2590 print
'<div class="tabsAction">';
2592 $parameters = array();
2593 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2595 if (empty($reshook)) {
2599 if (
$object->status == 0 && $num > 0) {
2600 if ($usercanvalidate) {
2601 $tmpbuttonlabel = $langs->trans(
'Validate');
2603 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2606 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">';
2607 print $tmpbuttonlabel;
2619 if ($usercanorder) {
2620 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2626 if ($usercanapprove) {
2627 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)) {
2628 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2630 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2633 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2638 if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') &&
$object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) {
2640 if ($usercanapprovesecond) {
2641 if (!empty(
$object->user_approve_id2)) {
2642 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2644 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2647 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2654 if ($usercanapprove || $usercanapprovesecond) {
2655 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2657 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2662 if (empty($user->socid)) {
2664 if ($usercanorder) {
2665 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init'],
true).
'#formmailbeforetitle',
'');
2673 if (!$buttonshown && $usercanapprove) {
2676 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2680 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2683 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2687 if (in_array(
$object->status, array(3, 4, 5, 6, 7, 9))) {
2688 if ($usercanorder) {
2689 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2696 $labelofbutton = $langs->trans(
'ReceiveProducts');
2698 $labelofbutton = $langs->trans(
"CreateReception");
2699 if (!empty(
$object->linkedObjects[
'reception'])) {
2700 foreach (
$object->linkedObjects[
'reception'] as $element) {
2701 if ($element->statut >= 0) {
2714 $dispachedLines =
$object->getDispachedLines(1);
2715 $nbDispachedLines = count($dispachedLines);
2716 if ($nbDispachedLines > 0) {
2721 if (in_array(
$object->status, array(3, 4, 5))) {
2722 if (
isModEnabled(
"supplier_order") && $usercanreceive) {
2723 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.
$object->id.
'">'.$labelofbutton.
'</a></div>';
2725 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
2731 if ($usercanorder) {
2732 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>';
2734 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
2740 if ($usercanreceive) {
2741 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>';
2749 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2750 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>';
2758 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2760 if (!empty(
$object->linkedObjectsIds[
'invoice_supplier']) || (empty(
$object->linkedObjectsIds[
'invoice_supplier']) && !
getDolGlobalInt(
'SUPPLIER_ORDER_DISABLE_CLASSIFY_BILLED_FROM_SUPPLIER_ORDER'))) {
2761 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2762 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2765 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2771 if ($usercancreate &&
$object->billed > 0 &&
$object->status > $object::STATUS_DRAFT) {
2772 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyunbilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyUnbilled").
'</a>';
2776 if ($usercancreate) {
2777 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&token='.
newToken().
'&object=order">'.$langs->trans(
"ToClone").
'</a>';
2782 if ($usercanorder) {
2783 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.
newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
2788 if (!empty($usercandelete)) {
2789 if ($hasreception) {
2790 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
2792 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2802 print
'<!-- form to record supplier order -->'.
"\n";
2803 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
2805 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2806 print
'<input type="hidden" name="action" value="commande">';
2808 print
'<table class="noborder centpercent">';
2810 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
2812 print $form->selectDate($date_com ?:
'',
'', 0, 0, 0,
"commande", 1, 1);
2816 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
2817 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
2820 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
2822 print
'<tr><td class="center" colspan="2">';
2823 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
2824 print
' ';
2825 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2834 if (
GETPOST(
'modelselected')) {
2835 $action =
'presend';
2838 if ($action !=
'createorder' && $action !=
'presend') {
2839 print
'<div class="fichecenter"><div class="fichehalfleft">';
2843 $file = $conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
2844 $relativepath = $objref.
'/'.$objref.
'.pdf';
2845 $filedir = $conf->fournisseur->dir_output.
'/commande/'.$objref;
2846 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2847 $genallowed = $usercanread;
2848 $delallowed = $usercancreate;
2849 $modelpdf = (!empty(
$object->model_pdf) ?
$object->model_pdf : (!
getDolGlobalString(
'COMMANDE_SUPPLIER_ADDON_PDF') ?
'' : $conf->global->COMMANDE_SUPPLIER_ADDON_PDF));
2851 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, (
int) $genallowed, (int) $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'',
$object->thirdparty->default_lang,
'', $object);
2852 $somethingshown = $formfile->numoffiles;
2855 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'supplier_order',
'order_supplier'), 1);
2856 $linktoelem = $tmparray[
'linktoelem'];
2857 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2858 print $htmltoenteralink;
2860 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2862 print
'</div><div class="fichehalfright">';
2864 if ($action ==
'classifyreception') {
2867 print
'<!-- form to record purchase order received -->'.
"\n";
2868 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
2869 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2870 print
'<input type="hidden" name="action" value="livraison">';
2873 print
'<table class="noborder centpercent">';
2875 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
2877 print $form->selectDate($datepreselected,
'', 1, 1, 0,
"commande", 1, 1);
2878 print
"</td></tr>\n";
2880 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
2882 $liv[
''] =
' ';
2883 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
2884 $liv[
'par'] = $langs->trans(
"PartialWoman");
2885 $liv[
'nev'] = $langs->trans(
"NeverReceived");
2886 $liv[
'can'] = $langs->trans(
"Canceled");
2888 print $form->selectarray(
"type", $liv);
2891 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
2892 print
'<tr><td class="center" colspan="2">';
2893 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
2894 print
' ';
2895 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2904 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2906 $somethingshown = $formactions->showactions($object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
2908 print
'</div></div>';
2914 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
2915 $mode =
GETPOST(
'mode',
'alpha');
2916 $ws_url =
$object->thirdparty->webservices_url;
2917 $ws_key =
$object->thirdparty->webservices_key;
2918 $ws_user =
GETPOST(
'ws_user',
'alpha');
2919 $ws_password =
GETPOST(
'ws_password',
'alpha');
2920 $error_occurred =
false;
2923 $ws_ns =
'http://www.dolibarr.org/ns/';
2924 $ws_authentication = array(
2925 'dolibarrkey' => $ws_key,
2926 'sourceapplication' =>
'DolibarrWebServiceClient',
2927 'login' => $ws_user,
2928 'password' => $ws_password,
2935 if (empty($ws_url) || empty($ws_key)) {
2936 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
2938 $error_occurred =
true;
2939 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
2944 if ($mode ==
"init") {
2946 print
'<table class="border centpercent">';
2947 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2948 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2949 print
'<input type="hidden" name="action" value="webservice">';
2950 print
'<input type="hidden" name="mode" value="check">';
2952 if ($error_occurred) {
2953 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2954 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2957 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
2959 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
2961 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
2963 print
'<tr><td class="center" colspan="2">';
2964 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
2965 print
' ';
2967 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2974 } elseif ($mode ==
"check") {
2976 $ws_thirdparty =
'';
2977 $error_occurred =
false;
2980 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
2981 $soapclient_user->soap_defencoding =
'UTF-8';
2982 $soapclient_user->decodeUTF8(
false);
2985 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ws_user);
2986 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
2987 $user_status_code = $result_user[
"result"][
"result_code"];
2989 if ($user_status_code ==
"OK") {
2991 $ws_entity = $result_user[
"user"][
"entity"];
2992 $ws_authentication[
'entity'] = $ws_entity;
2993 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
2994 if (empty($ws_thirdparty)) {
2995 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
2996 $error_occurred =
true;
2999 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
3000 $soapclient_product->soap_defencoding =
'UTF-8';
3001 $soapclient_product->decodeUTF8(
false);
3005 foreach (
$object->lines as $line) {
3007 $ref_supplier = $line->ref_supplier;
3008 $line_id = $i.
"º) ".$line->product_ref.
": ";
3009 if (empty($ref_supplier)) {
3012 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
3013 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
3014 if (!$result_product) {
3015 setEventMessages($line_id.$langs->trans(
"Error").
" SOAP ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
3016 $error_occurred =
true;
3021 $status_code = $result_product[
"result"][
"result_code"];
3022 if (empty($status_code)) {
3023 setEventMessages($langs->trans(
"Error").
" SOAP '".$soapclient_product->error_str.
"'",
null,
'errors');
3024 } elseif ($status_code !=
"OK") {
3025 if ($status_code ==
"NOT_FOUND") {
3026 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
3028 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
3029 $error_occurred =
true;
3036 $supplier_price =
price($result_product[
"product"][
"price_net"]);
3037 $local_price =
null;
3040 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
3041 if (count($product_fourn_list) > 0) {
3042 foreach ($product_fourn_list as $product_fourn_line) {
3044 if ($product_fourn_line->fourn_id ==
$object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
3045 $local_price =
price($product_fourn_line->fourn_price);
3050 if ($local_price !=
null && $local_price != $supplier_price) {
3051 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
3055 if (empty($result_product[
"product"][
"status_tosell"])) {
3056 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
3060 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
3061 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
3062 $error_occurred =
true;
3063 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
3064 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
3065 $error_occurred =
true;
3067 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
3068 $error_occurred =
true;
3072 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
3073 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3074 print
'<input type="hidden" name="action" value="webservice">';
3075 print
'<input type="hidden" name="mode" value="send">';
3076 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
3077 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
3078 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
3079 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
3080 if ($error_occurred) {
3081 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3083 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
3084 print
' ';
3086 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3092 $modelmail =
'order_supplier_send';
3093 $defaulttopic =
'SendOrderRef';
3094 $diroutput = $conf->fournisseur->commande->dir_output;
3095 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3096 $trackid =
'sord'.$object->id;
3098 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.