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';
53if (isModEnabled(
'supplier_proposal')) {
54 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
56if (isModEnabled(
"product")) {
57 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
59if (isModEnabled(
'project')) {
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';
65if (isModEnabled(
'variants')) {
66 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
69if (isModEnabled(
'stock')) {
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',
'deliveries',
'products',
'stocks',
'productbatch'));
85if (isModEnabled(
'incoterm')) {
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");
168if (!isModEnabled(
'reception')) {
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;
187if (isModEnabled(
'project')) {
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, (
float) $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')) {
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);
1001 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
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)) {
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)) {
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(
"deliveries");
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');
1292 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_id = $originid;
1348 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1349 if (!empty($other_linked_objects)) {
1350 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
1357 $srcobject =
new $classname($db);
1360 $result = $srcobject->fetch(
$object->origin_id);
1362 if (empty(
$object->delivery_date)) {
1363 $tmpdate = $srcobject->delivery_date;
1364 $object->setDeliveryDate($user, $tmpdate);
1366 $object->set_id_projet($user, $srcobject->fk_project);
1368 $lines = $srcobject->lines;
1369 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1370 $srcobject->fetch_lines();
1371 $lines = $srcobject->lines;
1374 $fk_parent_line = 0;
1375 $num = count($lines);
1377 for ($i = 0; $i < $num; $i++) {
1379 empty($lines[$i]->subprice)
1380 || $lines[$i]->qty < 0
1381 || !in_array($lines[$i]->
id, $selectedLines)
1382 || $lines[$i]->special_code == SUBTOTALS_SPECIAL_CODE
1387 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1388 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
1389 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1391 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1392 $fk_parent_line = 0;
1396 if (method_exists($lines[$i],
'fetch_optionals')) {
1397 $lines[$i]->fetch_optionals();
1398 $array_option = $lines[$i]->array_options;
1400 $array_option = array();
1404 $product_fourn_price_id = 0;
1405 if ($origin ==
"commande") {
1407 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty,
$object->socid);
1408 $lines[$i]->subprice = 0;
1410 $ref_supplier = $productsupplier->ref_supplier;
1411 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1413 foreach ($srcobject->lines as $li) {
1414 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1415 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1416 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1417 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1418 $sql .=
' AND fk_soc = '.((int)
$object->socid);
1419 $sql .=
' ORDER BY unitprice ASC';
1421 $resql = $db->query($sql);
1423 $num_row = $db->num_rows($resql);
1424 if (empty($num_row)) {
1425 $li->remise_percent = 0;
1427 $obj = $db->fetch_object($resql);
1428 $li->subprice = $obj->unitprice;
1429 $li->remise_percent = $obj->remise_percent;
1438 $ref_supplier = $lines[$i]->ref_fourn;
1439 $product_fourn_price_id = 0;
1442 $tva_tx = $lines[$i]->tva_tx;
1444 if ($origin ==
"commande") {
1446 $soc->fetch($socid);
1447 $tva_tx =
get_default_tva($soc, $mysoc, $lines[$i]->fk_product, $product_fourn_price_id);
1452 $lines[$i]->subprice,
1455 $lines[$i]->localtax1_tx,
1456 $lines[$i]->localtax2_tx,
1457 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1458 $product_fourn_price_id,
1460 $lines[$i]->remise_percent,
1463 $lines[$i]->product_type,
1469 $lines[$i]->fk_unit,
1472 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->rowid,
1474 $lines[$i]->special_code
1484 if ($result > 0 && $lines[$i]->product_type == 9) {
1485 $fk_parent_line = $result;
1493 $parameters = array(
'objFrom' => $srcobject);
1494 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters,
$object, $action);
1517 if (isModEnabled(
'category')) {
1518 $categories =
GETPOST(
'categories',
'array');
1519 if (method_exists(
$object,
'setCategories')) {
1520 $object->setCategories($categories);
1525 $langs->load(
"errors");
1530 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode((
string) ($id)));
1537 if ($action ==
'addcontact' && $permissiontoadd) {
1541 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1545 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1548 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1549 $langs->load(
"errors");
1550 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1555 } elseif ($action ==
'swapstatut' &&
$object->id > 0 && $permissiontoadd) {
1558 } elseif ($action ==
'deletecontact' &&
$object->id > 0 && $permissiontoadd) {
1563 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1577$form =
new Form($db);
1580$productstatic =
new Product($db);
1581if (isModEnabled(
'project')) {
1585$title =
$object->ref.
" - ".$langs->trans(
'Card');
1586if ($action ==
'create') {
1587 $title = $langs->trans(
"NewOrderSupplier");
1589$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1590llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplier-order page-card');
1594if ($action ==
'create') {
1595 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1599 $currency_code =
$conf->currency;
1606 $societe->fetch($socid);
1609 if (!empty($origin) && !empty($originid)) {
1611 $element = $subelement = $origin;
1612 $classname = ucfirst($subelement);
1614 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1615 $element = $regs[1];
1616 $subelement = $regs[2];
1619 if ($origin ==
'propal' || $origin ==
'proposal') {
1620 $classname =
'Propal';
1621 $element =
'comm/propal';
1622 $subelement =
'propal';
1624 if ($origin ==
'order' || $origin ==
'commande') {
1625 $classname =
'Commande';
1626 $element = $subelement =
'commande';
1628 if ($origin ==
'supplier_proposal') {
1629 $classname =
'SupplierProposal';
1630 $element =
'supplier_proposal';
1631 $subelement =
'supplier_proposal';
1637 $objectsrc =
new $classname($db);
1638 $objectsrc->fetch($originid);
1639 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1640 $objectsrc->fetch_lines();
1642 $objectsrc->fetch_thirdparty();
1645 $objectsrc->fetch_optionals();
1646 $object->array_options = $objectsrc->array_options;
1648 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1649 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1651 if ($origin ==
"commande") {
1652 $cond_reglement_id = 0;
1653 $mode_reglement_id = 0;
1654 $datelivraison =
'';
1655 $objectsrc->note_private =
'';
1656 $objectsrc->note_public =
'';
1657 if ($societe =
$object->thirdparty) {
1658 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1659 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1660 if (isModEnabled(
"multicurrency")) {
1661 $currency_code = $societe->multicurrency_code;
1663 $currency_tx = $societe->multicurrency_tx;
1668 $soc = $objectsrc->thirdparty;
1670 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1671 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1672 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1673 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1674 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1675 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1680 $datelivraison = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1682 if (isModEnabled(
"multicurrency")) {
1683 if (!empty($objectsrc->multicurrency_code)) {
1684 $currency_code = $objectsrc->multicurrency_code;
1686 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1687 $currency_tx = $objectsrc->multicurrency_tx;
1691 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1692 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1695 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1698 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1699 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1701 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1702 $currency_code = $societe->multicurrency_code;
1705 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1706 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1710 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1713 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1717 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1718 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1719 print
'<input type="hidden" name="action" value="add">';
1720 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1721 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1722 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1723 print
'<input type="hidden" name="changecompany" value="0">';
1725 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1727 if ($backtopageforcancel) {
1728 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1731 if (!empty($currency_tx)) {
1732 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1738 $parameters = array();
1740 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters,
$object, $action);
1741 if (empty($reshook)) {
1742 print
'<table class="border centpercent">';
1745 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1748 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1751 if (!empty($societe->id) && $societe->id > 0) {
1752 print $societe->getNomUrl(1,
'supplier');
1753 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1755 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1756 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1760 $(document).ready(function() {
1761 $("#socid").change(function() {
1762 console.log("We have changed the company - Reload page");
1764 $("input[name=action]").val("create");
1765 $("input[name=changecompany]").val("1");
1766 $("form[name=add]").submit();
1771 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>';
1775 if (!empty($societe->id) && $societe->id > 0) {
1777 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1779 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
1781 $thirdparty = $societe;
1783 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1784 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1790 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
1794 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
1795 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1796 print $form->getSelectConditionsPaiements((GETPOSTISSET(
'cond_reglement_id') &&
GETPOST(
'cond_reglement_id') != 0) ?
GETPOSTINT(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1);
1800 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
1801 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1802 $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') &&
GETPOSTINT(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1807 print $langs->trans(
'DateDeliveryPlanned');
1814 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1816 print $form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin, 0,
"set");
1821 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"bank")) {
1822 $langs->load(
"bank");
1823 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
1824 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
1825 $form->select_comptes($fk_account ??
'',
'fk_account', 0,
'', 1);
1830 if (isModEnabled(
'project')) {
1833 $langs->load(
'projects');
1834 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1835 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $societe->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1836 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>';
1841 if (isModEnabled(
'incoterm')) {
1842 $fkincoterms = (!empty(
$object->fk_incoterms) ?
$object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
1843 $locincoterms = (!empty(
$object->location_incoterms) ?
$object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
1845 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
1846 print
'<td class="maxwidthonsmartphone">';
1847 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1848 print $form->select_incoterms($fkincoterms, $locincoterms);
1853 if (isModEnabled(
"multicurrency")) {
1855 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0).
'</td>';
1856 print
'<td class="maxwidthonsmartphone">';
1857 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1858 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1863 if (isModEnabled(
"category")) {
1864 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
1865 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories',
$object);
1869 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
1871 $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%');
1872 print $doleditor->Create(1);
1877 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
1879 $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%');
1880 print $doleditor->Create(1);
1885 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1886 print
"\n<!-- ".$classname.
" info -->";
1888 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1889 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1890 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1891 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1892 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1894 $newclassname = $classname;
1895 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
1896 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
1897 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
1898 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1899 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
1902 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1903 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
1906 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
1908 if (isModEnabled(
"multicurrency")) {
1909 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1910 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
1911 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
1916 $parameters = array();
1917 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
1918 print $hookmanager->resPrint;
1920 if (empty($reshook)) {
1921 if (
getDolGlobalString(
'THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_SUPPLIER_ORDER') && !empty($societe->id)) {
1924 $tpExtrafieldLabels = $tpExtrafields->fetch_name_optionals_label($societe->table_element);
1925 if ($societe->fetch_optionals() > 0) {
1926 $object->array_options = array_merge(
$object->array_options, $societe->array_options);
1930 print
$object->showOptionals($extrafields,
'create');
1938 print $form->buttonsSaveCancel(
"CreateDraft");
1941 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1942 $title = $langs->trans(
'ProductsAndServices');
1945 print
'<div class="div-table-responsive-no-min">';
1946 print
'<table class="noborder centpercent">';
1948 $selectedLines = array();
1950 $objectsrc->printOriginLinesList(
'', $selectedLines);
1956} elseif (!empty(
$object->id)) {
1958 $result =
$object->fetch($id, $ref);
1961 $societe =
$object->thirdparty;
1963 $author =
new User($db);
1964 $author->fetch(
$object->user_author_id);
1968 $title = $langs->trans(
"SupplierOrder");
1975 if ($action ==
'delete') {
1976 $arrayAjouts = array();
2007 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.((
int)
$object->id), $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete', $arrayAjouts, 0, 2, $heightModal, $widthModal);
2011 if ($action ==
'clone') {
2012 $filter =
'(s.fournisseur:=:1)';
2014 $formquestion = array(
2015 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
2018 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
2022 if ($action ==
'valid') {
2026 if (preg_match(
'/^[\(]?PROV/i',
$object->ref) || empty(
$object->ref)) {
2036 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
2037 if (isModEnabled(
'notification')) {
2038 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2039 $notify =
new Notify($db);
2041 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE',
$object->socid,
$object);
2044 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2049 if ($action ==
'approve' || $action ==
'approve2') {
2050 $qualified_for_stock_change = 0;
2052 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2054 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2057 $formquestion = array();
2058 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
2059 $langs->load(
"stocks");
2060 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2063 if (
$conf->browser->name ==
'ie') {
2066 $formquestion = array(
2070 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2073 $text = $langs->trans(
"ConfirmApproveThisOrder",
$object->ref);
2074 if (isModEnabled(
'notification')) {
2075 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2076 $notify =
new Notify($db);
2078 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE',
$object->socid,
$object);
2081 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2085 if ($action ==
'refuse') {
2086 $formquestion = array(
2089 'name' =>
'refuse_note',
2090 'label' => $langs->trans(
"Reason"),
2092 'morecss' =>
'minwidth300'
2095 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder",
$object->ref),
"confirm_refuse", $formquestion, 0, 1);
2099 if ($action ==
'cancel') {
2100 $formquestion = array(
2103 'name' =>
'cancel_note',
2104 'label' => $langs->trans(
"Reason"),
2106 'morecss' =>
'minwidth300'
2109 if (isModEnabled(
'notification')) {
2110 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2111 $notify =
new Notify($db);
2114 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_CANCEL',
$object->socid,
$object);
2116 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder",
$object->ref),
"confirm_cancel", $formquestion, 0, 1);
2120 if ($action ==
'commande') {
2121 $formquestion = array();
2123 if (isModEnabled(
'notification')) {
2124 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2125 $notify =
new Notify($db);
2128 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT',
$object->socid,
$object);
2130 if (isModEnabled(
'webhook')) {
2131 require_once DOL_DOCUMENT_ROOT.
'/webhook/class/target.class.php';
2132 $targetstatic =
new Target($db);
2133 if ($targetstatic->isTriggerCodeManualTarget(
'ORDER_SUPPLIER_SUBMIT') > 0) {
2134 $formquestion[] = array(
'type' =>
'checkbox',
'name' =>
'manual_trigger_send',
'label' => $langs->trans(
"QuestionSendManualTrigger"));
2137 $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);
2141 if ($action ==
'ask_deleteline') {
2142 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2145 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2146 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
2147 if (empty($reshook)) {
2148 $formconfirm .= $hookmanager->resPrint;
2149 } elseif ($reshook > 0) {
2150 $formconfirm = $hookmanager->resPrint;
2159 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2161 $morehtmlref =
'<div class="refidno">';
2163 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier,
$object, (
int) $usercancreate,
'string',
'', 0, 1);
2164 $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);
2166 $morehtmlref .=
'<br>';
2167 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2168 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2169 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2170 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2171 $filter =
'(s.fournisseur:=:1)';
2172 $morehtmlref .= $form->select_company(
$object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2173 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2174 $morehtmlref .=
'</form>';
2176 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2178 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2180 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
2182 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.
$object->thirdparty->id.
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2187 if (isModEnabled(
'project')) {
2188 $langs->load(
"projects");
2189 $morehtmlref .=
'<br>';
2190 if ($permissiontoadd) {
2191 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2192 if ($action !=
'classify' && $caneditproject) {
2193 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2195 $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');
2197 if (!empty(
$object->fk_project)) {
2199 $proj->fetch(
$object->fk_project);
2200 $morehtmlref .= $proj->getNomUrl(1);
2202 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2207 $morehtmlref .=
'</div>';
2210 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2213 $parameters = array();
2215 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters,
$object, $action);
2216 if (empty($reshook)) {
2217 print
'<div class="fichecenter">';
2218 print
'<div class="fichehalfleft">';
2219 print
'<div class="underbanner clearboth"></div>';
2221 print
'<table class="border tableforfield centpercent">';
2224 if (
$object->methode_commande_id > 0) {
2229 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2232 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2236 if (
$object->methode_commande) {
2237 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
2242 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2243 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2248 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2249 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2251 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2252 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2255 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2256 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2257 $absolute_discount =
price2num($absolute_discount,
'MT');
2258 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2260 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2262 $thirdparty = $societe;
2264 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
2265 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2270 $langs->load(
'bills');
2271 print
'<tr><td class="nowrap">';
2272 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2273 print $langs->trans(
'PaymentConditions');
2275 if ($action !=
'editconditions' && $permissiontoadd) {
2276 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>';
2278 print
'</tr></table>';
2280 if ($action ==
'editconditions') {
2281 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id');
2283 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->cond_reglement_id,
'none');
2289 $langs->load(
'bills');
2290 print
'<tr><td class="nowrap">';
2291 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2292 print $langs->trans(
'PaymentMode');
2294 if ($action !=
'editmode' && $permissiontoadd) {
2295 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>';
2297 print
'</tr></table>';
2299 if ($action ==
'editmode') {
2300 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2302 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'none');
2307 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"bank")) {
2308 print
'<tr><td class="nowrap">';
2309 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2310 print $langs->trans(
'BankAccount');
2312 if ($action !=
'editbankaccount' && $permissiontoadd) {
2313 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>';
2315 print
'</tr></table>';
2317 if ($action ==
'editbankaccount') {
2318 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
2320 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'none');
2328 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2329 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2334 print
'<table class="nobordernopadding centpercent"><tr><td>';
2335 print $langs->trans(
'DateDeliveryPlanned');
2337 if ($action !=
'editdate_livraison') {
2338 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>';
2340 print
'</tr></table>';
2342 if ($action ==
'editdate_livraison') {
2343 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2344 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2345 print
'<input type="hidden" name="action" value="setdate_livraison">';
2350 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin, 0,
"setdate_livraison");
2351 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2354 $usehourmin =
'day';
2356 $usehourmin =
'dayhour';
2359 if (
$object->hasDelay() && !empty(
$object->delivery_date) && (
$object->status == $object::STATUS_ORDERSENT ||
$object->status == $object::STATUS_RECEIVED_PARTIALLY)) {
2360 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2366 if (isModEnabled(
'incoterm')) {
2368 print
'<table class="nobordernopadding centpercent"><tr><td>';
2369 print $langs->trans(
'IncotermLabel');
2370 print
'<td><td class="right">';
2371 if ($usercancreate) {
2372 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2376 print
'</td></tr></table>';
2379 if ($action !=
'editincoterm') {
2382 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2388 if (isModEnabled(
'category')) {
2390 print
'<table class="nobordernopadding centpercent"><tr><td>';
2391 print $langs->trans(
"Categories");
2392 print
'<td><td class="right">';
2393 if ($usercancreate) {
2394 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=edittags&token='.
newToken().
'">'.
img_edit().
'</a>';
2398 print
'</td></tr></table>';
2401 if ($action ==
'edittags') {
2402 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2403 print
'<input type="hidden" name="action" value="settags">';
2404 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2405 print $form->selectCategories(Categorie::TYPE_SUPPLIER_ORDER,
'categories',
$object);
2406 print
'<input type="submit" class="button valignmiddle smallpaddingimp" value="'.$langs->trans(
"Modify").
'">';
2409 print $form->showCategories(
$object->id, Categorie::TYPE_SUPPLIER_ORDER, 1);
2415 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2420 print
'<div class="fichehalfright">';
2421 print
'<div class="underbanner clearboth"></div>';
2423 print
'<table class="border tableforfield centpercent">';
2425 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
2429 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2430 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2431 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2433 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2439 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2440 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2441 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2443 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2448 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2450 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
2451 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2452 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2453 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2457 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2459 print
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
2460 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2461 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2462 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2470 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->supplier_order_min_amount));
2475 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2476 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) . $alert .
'</td>';
2477 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2479 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2494 print
'<div class="clearboth"></div><br>';
2497 $blocname =
'contacts';
2498 $title = $langs->trans(
'ContactsAddresses');
2499 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2503 $blocname =
'notes';
2504 $title = $langs->trans(
'Notes');
2505 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2514 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2515 <input type="hidden" name="token" value="'.
newToken().
'">
2516 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2517 <input type="hidden" name="mode" value="">
2518 <input type="hidden" name="page_y" value="">
2519 <input type="hidden" name="id" value="'.
$object->id.
'">
2520 <input type="hidden" name="socid" value="'.$societe->id.
'">
2523 if (!empty(
$conf->use_javascript_ajax) &&
$object->status == 0) {
2524 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2527 print
'<div class="div-table-responsive-no-min">';
2528 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2531 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2534 $inputalsopricewithtax = 1;
2535 $senderissupplier = 2;
2537 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY');
2542 $object->printObjectLines($action,
$object->thirdparty, $mysoc, $lineid, 1);
2549 if ($action !=
'editline') {
2552 $parameters = array();
2553 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters,
$object, $action);
2557 if (empty($reshook)) {
2558 $object->formAddObjectLine(1, $societe, $mysoc);
2573 if ($user->socid == 0 && $action !=
'delete') {
2574 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2575 print
'<div class="tabsAction">';
2577 $parameters = array();
2578 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2580 if (empty($reshook)) {
2584 if (
$object->status == 0 && $num > 0) {
2585 if ($usercanvalidate) {
2586 $tmpbuttonlabel = $langs->trans(
'Validate');
2588 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2591 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">';
2592 print $tmpbuttonlabel;
2604 if ($usercanorder) {
2605 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2611 if ($usercanapprove) {
2613 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2615 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2618 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2625 if ($usercanapprovesecond) {
2626 if (!empty(
$object->user_approve_id2)) {
2627 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2629 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2632 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2639 if ($usercanapprove || $usercanapprovesecond) {
2640 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2642 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2647 if (empty($user->socid)) {
2649 if ($usercanorder) {
2650 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
2658 if (!$buttonshown && $usercanapprove) {
2661 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2665 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2668 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2672 if (in_array(
$object->status, array(3, 4, 5, 6, 7, 9))) {
2673 if ($usercanorder) {
2674 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2681 $labelofbutton = $langs->trans(
'ReceiveProducts');
2682 if (isModEnabled(
'reception')) {
2683 $labelofbutton = $langs->trans(
"CreateReception");
2684 if (!empty(
$object->linkedObjects[
'reception'])) {
2685 foreach (
$object->linkedObjects[
'reception'] as $element) {
2686 if ($element->statut >= 0) {
2699 $dispachedLines =
$object->getDispachedLines(1);
2700 $nbDispachedLines = count($dispachedLines);
2701 if ($nbDispachedLines > 0) {
2706 if (in_array(
$object->status, array(3, 4, 5))) {
2707 if (isModEnabled(
"supplier_order") && $usercanreceive) {
2708 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.
$object->id.
'">'.$labelofbutton.
'</a></div>';
2710 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
2716 if ($usercanorder) {
2717 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>';
2719 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
2725 if ($usercanreceive) {
2726 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>';
2733 if (isModEnabled(
"supplier_invoice") && (
$object->status >= 2 &&
$object->status != 7 &&
$object->billed != 1)) {
2734 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2735 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>';
2742 if (!isModEnabled(
'invoice')) {
2743 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2745 if (!empty(
$object->linkedObjectsIds[
'invoice_supplier']) || (empty(
$object->linkedObjectsIds[
'invoice_supplier']) && !
getDolGlobalInt(
'SUPPLIER_ORDER_DISABLE_CLASSIFY_BILLED_FROM_SUPPLIER_ORDER'))) {
2746 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2747 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2750 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2756 if ($usercancreate &&
$object->billed > 0 &&
$object->status > $object::STATUS_DRAFT) {
2757 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyunbilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyUnbilled").
'</a>';
2761 if ($usercancreate) {
2762 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&token='.
newToken().
'&object=order">'.$langs->trans(
"ToClone").
'</a>';
2767 if ($usercanorder) {
2768 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.
newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
2773 if (!empty($usercandelete)) {
2774 if ($hasreception) {
2775 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
2777 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2787 print
'<!-- form to record supplier order -->'.
"\n";
2788 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
2790 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2791 print
'<input type="hidden" name="action" value="commande">';
2793 print
'<table class="noborder centpercent">';
2795 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
2797 print $form->selectDate($date_com ?:
'',
'', 0, 0, 0,
"commande", 1, 1);
2801 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
2802 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
2805 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
2807 print
'<tr><td class="center" colspan="2">';
2808 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
2809 print
' ';
2810 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2819 if (
GETPOST(
'modelselected')) {
2820 $action =
'presend';
2823 if ($action !=
'createorder' && $action !=
'presend') {
2824 print
'<div class="fichecenter"><div class="fichehalfleft">';
2828 $file =
$conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
2829 $relativepath = $objref.
'/'.$objref.
'.pdf';
2830 $filedir =
$conf->fournisseur->dir_output.
'/commande/'.$objref;
2831 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2832 $genallowed = $usercanread;
2833 $delallowed = $usercancreate;
2836 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, (
int) $genallowed, (int) $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'',
$object->thirdparty->default_lang,
'',
$object);
2837 $somethingshown = $formfile->numoffiles;
2840 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'supplier_order',
'order_supplier'), 1);
2841 $linktoelem = $tmparray[
'linktoelem'];
2842 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2843 print $htmltoenteralink;
2845 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
2847 print
'</div><div class="fichehalfright">';
2849 if ($action ==
'classifyreception') {
2852 print
'<!-- form to record purchase order received -->'.
"\n";
2853 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
2854 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2855 print
'<input type="hidden" name="action" value="livraison">';
2858 print
'<table class="noborder centpercent">';
2860 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
2862 print $form->selectDate($datepreselected,
'', 1, 1, 0,
"commande", 1, 1);
2863 print
"</td></tr>\n";
2865 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
2867 $liv[
''] =
' ';
2868 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
2869 $liv[
'par'] = $langs->trans(
"PartialWoman");
2870 $liv[
'nev'] = $langs->trans(
"NeverReceived");
2871 $liv[
'can'] = $langs->trans(
"Canceled");
2873 print $form->selectarray(
"type", $liv);
2876 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
2877 print
'<tr><td class="center" colspan="2">';
2878 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
2879 print
' ';
2880 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2889 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2891 $somethingshown = $formactions->showactions(
$object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
2893 print
'</div></div>';
2899 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
2900 $mode =
GETPOST(
'mode',
'alpha');
2901 $ws_url =
$object->thirdparty->webservices_url;
2902 $ws_key =
$object->thirdparty->webservices_key;
2903 $ws_user =
GETPOST(
'ws_user',
'alpha');
2904 $ws_password =
GETPOST(
'ws_password',
'alpha');
2905 $error_occurred =
false;
2908 $ws_ns =
'http://www.dolibarr.org/ns/';
2909 $ws_authentication = array(
2910 'dolibarrkey' => $ws_key,
2911 'sourceapplication' =>
'DolibarrWebServiceClient',
2912 'login' => $ws_user,
2913 'password' => $ws_password,
2920 if (empty($ws_url) || empty($ws_key)) {
2921 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
2923 $error_occurred =
true;
2924 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
2929 if ($mode ==
"init") {
2931 print
'<table class="border centpercent">';
2932 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2933 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2934 print
'<input type="hidden" name="action" value="webservice">';
2935 print
'<input type="hidden" name="mode" value="check">';
2937 if ($error_occurred) {
2938 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2939 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2942 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
2944 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
2946 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
2948 print
'<tr><td class="center" colspan="2">';
2949 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
2950 print
' ';
2952 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2959 } elseif ($mode ==
"check") {
2961 $ws_thirdparty =
'';
2962 $error_occurred =
false;
2965 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
2966 $soapclient_user->soap_defencoding =
'UTF-8';
2967 $soapclient_user->decodeUTF8(
false);
2970 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ws_user);
2971 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
2972 $user_status_code = $result_user[
"result"][
"result_code"];
2974 if ($user_status_code ==
"OK") {
2976 $ws_entity = $result_user[
"user"][
"entity"];
2977 $ws_authentication[
'entity'] = $ws_entity;
2978 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
2979 if (empty($ws_thirdparty)) {
2980 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
2981 $error_occurred =
true;
2984 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
2985 $soapclient_product->soap_defencoding =
'UTF-8';
2986 $soapclient_product->decodeUTF8(
false);
2990 foreach (
$object->lines as $line) {
2992 $ref_supplier = $line->ref_supplier;
2993 $line_id = $i.
"º) ".$line->product_ref.
": ";
2994 if (empty($ref_supplier)) {
2997 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
2998 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
2999 if (!$result_product) {
3000 setEventMessages($line_id.$langs->trans(
"Error").
" SOAP ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
3001 $error_occurred =
true;
3006 $status_code = $result_product[
"result"][
"result_code"];
3007 if (empty($status_code)) {
3008 setEventMessages($langs->trans(
"Error").
" SOAP '".$soapclient_product->error_str.
"'",
null,
'errors');
3009 } elseif ($status_code !=
"OK") {
3010 if ($status_code ==
"NOT_FOUND") {
3011 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
3013 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
3014 $error_occurred =
true;
3021 $supplier_price =
price($result_product[
"product"][
"price_net"]);
3022 $local_price =
null;
3025 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
3026 if (count($product_fourn_list) > 0) {
3027 foreach ($product_fourn_list as $product_fourn_line) {
3029 if ($product_fourn_line->fourn_id ==
$object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
3030 $local_price =
price($product_fourn_line->fourn_price);
3035 if ($local_price !=
null && $local_price != $supplier_price) {
3036 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
3040 if (empty($result_product[
"product"][
"status_tosell"])) {
3041 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
3045 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
3046 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
3047 $error_occurred =
true;
3048 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
3049 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
3050 $error_occurred =
true;
3052 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
3053 $error_occurred =
true;
3057 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
3058 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3059 print
'<input type="hidden" name="action" value="webservice">';
3060 print
'<input type="hidden" name="mode" value="send">';
3061 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
3062 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
3063 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
3064 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
3065 if ($error_occurred) {
3066 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3068 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
3069 print
' ';
3071 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3077 $modelmail =
'order_supplier_send';
3078 $defaulttopic =
'SendOrderRef';
3079 $diroutput =
$conf->fournisseur->commande->dir_output;
3080 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3081 $trackid =
'sord'.$object->id;
3083 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
$id
Support class for third parties, contacts, members, users or resources.
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $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_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...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
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.
GETPOSTFLOAT($paramname, $rounding='')
Return the value of a $_GET or $_POST supervariable, converted into float.
dol_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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, 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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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.