41require
'../../main.inc.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formorder.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
49require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
50require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
52if (isModEnabled(
'supplier_proposal')) {
53 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
55if (isModEnabled(
"product")) {
56 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
58if (isModEnabled(
'project')) {
59 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
60 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
62require_once NUSOAP_PATH.
'/nusoap.php';
64if (isModEnabled(
'variants')) {
65 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
68if (isModEnabled(
'stock')) {
69 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.dispatch.class.php';
70 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/mouvementstock.class.php';
83$langs->loadLangs(array(
'admin',
'orders',
'sendings',
'companies',
'bills',
'propal',
'receptions',
'supplier_proposal',
'deliveries',
'products',
'stocks',
'productbatch'));
84if (isModEnabled(
'incoterm')) {
85 $langs->load(
'incoterm');
90$action =
GETPOST(
'action',
'alpha');
91$confirm =
GETPOST(
'confirm',
'alpha');
92$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'purchaseordercard';
93$cancel =
GETPOST(
'cancel',
'alpha');
94$backtopage =
GETPOST(
'backtopage',
'alpha');
95$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
102$origin =
GETPOST(
'origin',
'alpha');
105$stockDelete =
GETPOST(
'stockDelete',
'int');
116if (!empty($user->socid)) {
117 $socid = $user->socid;
121$hookmanager->initHooks(array(
'ordersuppliercard',
'globalcard'));
127$extrafields->fetch_name_optionals_label(
$object->table_element);
130 $socid = $user->socid;
134if ($id > 0 || !empty($ref)) {
135 $ret =
$object->fetch($id, $ref);
139 $ret =
$object->fetch_thirdparty();
143} elseif (!empty($socid) && $socid > 0) {
145 $ret =
$object->fetch_thirdparty();
152$isdraft = (isset(
$object->statut) && (
$object->statut == $object::STATUS_DRAFT) ? 1 : 0);
153$result =
restrictedArea($user,
'fournisseur',
$object,
'commande_fournisseur',
'commande',
'fk_soc',
'rowid', $isdraft);
156$usercanread = ($user->hasRight(
"fournisseur",
"commande",
"lire") || $user->hasRight(
"supplier_order",
"lire"));
157$usercancreate = ($user->hasRight(
"fournisseur",
"commande",
"creer") || $user->hasRight(
"supplier_order",
"creer"));
158$usercandelete = (($user->hasRight(
"fournisseur",
"commande",
"supprimer") || $user->hasRight(
"supplier_order",
"supprimer")) || ($usercancreate && isset(
$object->statut) &&
$object->statut == $object::STATUS_DRAFT));
161$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_order_advance",
"validate")));
164$usercanapprove = $user->hasRight(
"fournisseur",
"commande",
"approuver");
165$usercanapprovesecond = $user->hasRight(
"fournisseur",
"commande",
"approve2");
166$usercanorder = $user->hasRight(
"fournisseur",
"commande",
"commander");
167if (!isModEnabled(
'reception')) {
168 $usercanreceive = $user->hasRight(
"fournisseur",
"commande",
"receptionner");
170 $usercanreceive = $user->hasRight(
"reception",
"creer");
174$permissionnote = $usercancreate;
175$permissiondellink = $usercancreate;
176$permissiontoedit = $usercancreate;
177$permissiontoadd = $usercancreate;
180$caneditproject =
false;
181if (isModEnabled(
'project')) {
192$parameters = array(
'socid' => $socid);
193$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
198if (empty($reshook)) {
199 $backurlforlist = DOL_URL_ROOT.
'/fourn/commande/list.php'.($socid > 0 ?
'?socid='.((int) $socid) :
'');
201 if (empty($backtopage) || ($cancel && empty($id))) {
202 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
203 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
204 $backtopage = $backurlforlist;
206 $backtopage = DOL_URL_ROOT.
'/fourn/commande/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
212 if (!empty($backtopageforcancel)) {
213 header(
"Location: ".$backtopageforcancel);
215 } elseif (!empty($backtopage)) {
216 header(
"Location: ".$backtopage);
222 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
224 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
226 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
228 if ($action ==
'setref_supplier' && $usercancreate) {
229 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'ORDER_SUPPLIER_MODIFY');
236 if ($action ==
'set_incoterms' && $usercancreate) {
244 if ($action ==
'setconditions' && $usercancreate) {
252 if ($action ==
'setmode' && $usercancreate) {
257 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
259 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
260 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
266 if ($action ==
'setbankaccount' && $usercancreate) {
274 if ($action ==
'setdate_livraison' && $usercancreate) {
275 $result =
$object->setDeliveryDate($user, $datelivraison);
282 if ($action ==
'classin' && $usercancreate && $caneditproject) {
283 $result =
$object->setProject($projectid);
292 if (!empty($new_socid) && $new_socid !=
$object->thirdparty->id) {
296 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
297 $sql .=
' SET fk_soc = '.((int) $new_socid);
298 $sql .=
' WHERE fk_soc = '.((int)
$object->thirdparty->id);
299 $sql .=
' AND rowid = '.((int)
$object->id);
301 $res = $db->query($sql);
309 foreach (
$object->lines as $l) {
310 $sql =
'SELECT price, unitprice, tva_tx, ref_fourn';
311 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
312 $sql .=
' WHERE fk_product = '.((int) $l->fk_product);
313 $sql .=
' AND fk_soc = '.((int) $new_socid);
314 $sql .=
' ORDER BY unitprice ASC';
316 $resql = $db->query($sql);
318 $num_row = $db->num_rows($resql);
319 if (empty($num_row)) {
325 $l->ref_supplier =
'';
329 $obj = $db->fetch_object($resql);
330 $l->subprice = $obj->unitprice;
331 $l->total_ht = $obj->price;
332 $l->tva_tx = $obj->tva_tx;
333 $l->total_tva = $l->total_ht * ($obj->tva_tx / 100);
334 $l->total_ttc = $l->total_ht + $l->total_tva;
335 $l->ref_supplier = $obj->ref_fourn;
346 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
350 if ($action ==
'setremisepercent' && $usercancreate) {
357 if ($action ==
'reopen' && $permissiontoadd) {
358 if (in_array(
$object->statut, array(1, 2, 3, 4, 5, 6, 7, 9))) {
361 } elseif (
$object->statut == 2) {
363 } elseif (
$object->statut == 3) {
365 } elseif (
$object->statut == 4) {
367 } elseif (
$object->statut == 5) {
373 } elseif (
$object->statut == 6) {
375 } elseif (
$object->statut == 7) {
377 } elseif (
$object->statut == 9) {
386 $result =
$object->setStatus($user, $newstatus);
388 if ($newstatus == 0) {
389 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
390 $sql .=
' SET fk_user_approve = null, fk_user_approve2 = null, date_approve = null, date_approve2 = null';
391 $sql .=
' WHERE rowid = '.((int)
$object->id);
393 $resql = $db->query($sql);
398 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
411 if ($action ==
'classifybilled' && $usercancreate) {
412 $ret =
$object->classifyBilled($user);
418 if ($action ==
'classifyunbilled' && $usercancreate) {
419 $ret =
$object->classifyUnBilled($user);
426 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
430 foreach (
$object->lines as $line) {
431 if ($line->product_type == 1) {
432 $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);
435 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !==
'' && $usercancreate) {
437 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
438 $vat_rate = str_replace(
'*',
'', $vat_rate);
441 foreach (
$object->lines as $line) {
442 $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);
444 } elseif ($action ==
'addline' && $usercancreate) {
447 $langs->load(
'errors');
452 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
456 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
457 if ($prod_entry_mode ==
'free') {
471 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
472 if (empty($remise_percent)) {
477 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
478 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
480 if (is_array($extralabelsline)) {
482 foreach ($extralabelsline as $key => $value) {
483 unset($_POST[
"options_".$key]);
487 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
488 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
491 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
492 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
495 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
496 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
499 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
500 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
503 if (
GETPOST(
'qty',
'alpha') ==
'') {
504 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
508 if (!$error && isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
509 if ($combinations =
GETPOST(
'combinations',
'array')) {
513 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
514 $idprod = $res->fk_product_child;
516 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
522 if ($prod_entry_mode !=
'free' && empty($error)) {
526 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
531 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
533 $res = $productsupplier->fetch($idprod);
536 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
538 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
539 if ($productsupplier->fourn_socid != $socid) {
540 $productsupplier->ref_supplier =
'';
543 $fksoctosearch =
$object->thirdparty->id;
544 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
546 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
549 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
550 $res = $productsupplier->fetch($idprod);
554 $label = $productsupplier->label;
558 $outputlangs = $langs;
560 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
561 $newlang =
GETPOST(
'lang_id',
'aZ09');
563 if (empty($newlang)) {
564 $newlang =
$object->thirdparty->default_lang;
566 if (!empty($newlang)) {
568 $outputlangs->setDefaultLang($newlang);
570 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
572 $desc = $productsupplier->description;
575 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
576 $desc = $productsupplier->desc_supplier;
580 if (trim($product_desc) == trim($desc) &&
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
585 $desc = $product_desc;
587 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
591 $ref_supplier = $productsupplier->ref_supplier;
595 if (!GETPOSTISSET(
'tva_tx')) {
596 $tmpidprodfournprice =
GETPOST(
'idprodfournprice',
'alpha');
597 if (is_numeric($tmpidprodfournprice) && (
int) $tmpidprodfournprice > 0) {
598 $tmpidprodfournprice = (int) $tmpidprodfournprice;
600 $tmpidprodfournprice = 0;
604 if (empty($tva_tx)) {
612 $type = $productsupplier->type;
613 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
614 $price_base_type =
'HT';
616 $pu_devise =
price2num($price_ht_devise,
'CU');
617 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
618 $price_base_type =
'TTC';
620 $pu_devise =
price2num($price_ttc_devise,
'CU');
622 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
623 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
624 $pu = $productsupplier->fourn_pu;
627 $pu = $productsupplier->fourn_pu;
628 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
638 ($price_base_type ==
'HT' ? $pu : 0),
644 $productsupplier->product_fourn_price_id,
648 ($price_base_type ==
'TTC' ? $pu : 0),
655 $productsupplier->fk_unit,
659 min($rank, count(
$object->lines) + 1)
662 if ($idprod == -99 || $idprod == 0) {
665 $langs->load(
"errors");
666 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
671 $langs->load(
"errors");
672 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
674 } elseif (empty($error)) {
675 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
676 $tva_tx = str_replace(
'*',
'', $tva_tx);
677 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
678 $desc = $product_desc;
680 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
682 $fk_unit =
GETPOST(
'units',
'alpha');
684 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
692 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
697 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
699 $price_base_type =
'HT';
700 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
702 $result =
$object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type, 0, 0, $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise);
706 if (!$error && $result > 0) {
713 $outputlangs = $langs;
716 $newlang =
$object->thirdparty->default_lang;
717 if (
GETPOST(
'lang_id',
'aZ09')) {
718 $newlang =
GETPOST(
'lang_id',
'aZ09');
721 if (!empty($newlang)) {
723 $outputlangs->setDefaultLang($newlang);
728 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
734 unset($_POST [
'prod_entry_mode']);
736 unset($_POST[
'qty']);
737 unset($_POST[
'type']);
738 unset($_POST[
'remise_percent']);
740 unset($_POST[
'price_ht']);
741 unset($_POST[
'multicurrency_price_ht']);
742 unset($_POST[
'price_ttc']);
743 unset($_POST[
'fourn_ref']);
744 unset($_POST[
'tva_tx']);
745 unset($_POST[
'label']);
746 unset($localtax1_tx);
747 unset($localtax2_tx);
748 unset($_POST[
'np_marginRate']);
749 unset($_POST[
'np_markRate']);
750 unset($_POST[
'dp_desc']);
751 unset($_POST[
'idprodfournprice']);
752 unset($_POST[
'units']);
754 unset($_POST[
'date_starthour']);
755 unset($_POST[
'date_startmin']);
756 unset($_POST[
'date_startsec']);
757 unset($_POST[
'date_startday']);
758 unset($_POST[
'date_startmonth']);
759 unset($_POST[
'date_startyear']);
760 unset($_POST[
'date_endhour']);
761 unset($_POST[
'date_endmin']);
762 unset($_POST[
'date_endsec']);
763 unset($_POST[
'date_endday']);
764 unset($_POST[
'date_endmonth']);
765 unset($_POST[
'date_endyear']);
777 if ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
784 $res = $line->fetch($lineid);
791 if (
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY') == 1) {
792 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0,
price2num(
GETPOSTINT(
'qty')), $line->fk_product,
'none',
GETPOSTINT(
'socid')) < 0) {
793 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
802 if (preg_match(
'/\*/', $vat_rate)) {
807 $vat_rate = str_replace(
'*',
'', $vat_rate);
811 if (
GETPOST(
'price_ht') !=
'') {
812 $price_base_type =
'HT';
816 $vatratecleaned = $vat_rate;
817 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
818 $vatratecleaned = trim($reg[1]);
819 $vatratecode = $reg[2];
823 $ht = (float) $ttc / (1 + ((
float) $vatratecleaned / 100));
824 $price_base_type =
'HT';
830 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
831 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
833 if (is_array($extralabelsline)) {
834 foreach ($extralabelsline as $key => $value) {
835 unset($_POST[
"options_".$key]);
841 GETPOST(
'product_desc',
'restricthtml'),
850 GETPOSTISSET(
"type") ?
GETPOST(
"type") : $line->product_type,
859 unset($_POST[
'qty']);
860 unset($_POST[
'type']);
861 unset($_POST[
'idprodfournprice']);
862 unset($_POST[
'remmise_percent']);
863 unset($_POST[
'dp_desc']);
864 unset($_POST[
'np_desc']);
866 unset($_POST[
'fourn_ref']);
867 unset($_POST[
'tva_tx']);
868 unset($_POST[
'date_start']);
869 unset($_POST[
'date_end']);
870 unset($_POST[
'units']);
871 unset($localtax1_tx);
872 unset($localtax2_tx);
874 unset($_POST[
'date_starthour']);
875 unset($_POST[
'date_startmin']);
876 unset($_POST[
'date_startsec']);
877 unset($_POST[
'date_startday']);
878 unset($_POST[
'date_startmonth']);
879 unset($_POST[
'date_startyear']);
880 unset($_POST[
'date_endhour']);
881 unset($_POST[
'date_endmin']);
882 unset($_POST[
'date_endsec']);
883 unset($_POST[
'date_endday']);
884 unset($_POST[
'date_endmonth']);
885 unset($_POST[
'date_endyear']);
890 $outputlangs = $langs;
893 $newlang =
GETPOST(
'lang_id',
'aZ09');
896 $newlang =
$object->thirdparty->default_lang;
898 if (!empty($newlang)) {
900 $outputlangs->setDefaultLang($newlang);
905 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
920 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
923 $result =
$object->deleteLine($lineid);
928 $outputlangs = $langs;
931 $newlang =
GETPOST(
'lang_id',
'aZ09');
934 $newlang =
$object->thirdparty->default_lang;
936 if (!empty($newlang)) {
938 $outputlangs->setDefaultLang($newlang);
942 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
964 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
972 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
976 $result =
$object->valid($user);
980 $outputlangs = $langs;
983 $newlang =
GETPOST(
'lang_id',
'aZ09');
986 $newlang =
$object->thirdparty->default_lang;
988 if (!empty($newlang)) {
990 $outputlangs->setDefaultLang($newlang);
995 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1008 $action =
'confirm_approve';
1018 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
1023 $qualified_for_stock_change = 0;
1025 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1027 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1031 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
1032 if (!$idwarehouse || $idwarehouse == -1) {
1034 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1040 $result =
$object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
1043 $outputlangs = $langs;
1046 $newlang =
GETPOST(
'lang_id',
'aZ09');
1049 $newlang =
$object->thirdparty->default_lang;
1051 if (!empty($newlang)) {
1053 $outputlangs->setDefaultLang($newlang);
1055 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1066 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1073 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1077 $result =
$object->refuse($user);
1079 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1087 if ($action ==
'commande') {
1088 $methodecommande =
GETPOSTINT(
'methodecommande');
1092 } elseif ($methodecommande <= 0 && !
getDolGlobalInt(
'SUPPLIER_ORDER_MODE_OPTIONAL')) {
1093 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1094 $action =
'createorder';
1098 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1104 $outputlangs = $langs;
1107 $newlang =
GETPOST(
'lang_id',
'aZ09');
1110 $newlang =
$object->thirdparty->default_lang;
1112 if (!empty($newlang)) {
1114 $outputlangs->setDefaultLang($newlang);
1116 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1127 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1135 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1138 $errorsOnDelete = array();
1193 if (empty($errOnDelete)) {
1194 $result =
$object->delete($user);
1197 header(
"Location: " . DOL_URL_ROOT .
'/fourn/commande/list.php?restore_lastsearch_values=1');
1210 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1212 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1213 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1218 $result =
$object->createFromClone($user, $socid);
1220 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1232 if ($action ==
'livraison' && $usercanreceive) {
1243 $langs->load(
"deliveries");
1253 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1264 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1268 $result =
$object->cancel($user);
1270 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1278 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1281 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1282 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1283 $trackid =
'sord'.$object->id;
1284 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1287 $upload_dir =
$conf->fournisseur->commande->dir_output;
1288 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1291 if ($action ==
'update_extras' && $permissiontoadd) {
1295 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
1303 $result =
$object->insertExtraFields(
'ORDER_SUPPLIER_MODIFY');
1312 $action =
'edit_extras';
1319 if ($action ==
'add' && $permissiontoadd) {
1321 $selectedLines =
GETPOST(
'toselect',
'array');
1323 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1339 $object->delivery_date = $datelivraison;
1341 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1342 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1348 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
1356 if (!empty($origin) && !empty($originid)) {
1357 $element = $subelement = $origin;
1358 $classname = ucfirst($subelement);
1359 if ($origin ==
'propal' || $origin ==
'proposal') {
1360 $element =
'comm/propal';
1361 $subelement =
'propal';
1362 $classname =
'Propal';
1364 if ($origin ==
'order' || $origin ==
'commande') {
1365 $element = $subelement =
'commande';
1366 $classname =
'Commande';
1368 if ($origin ==
'supplier_proposal') {
1369 $classname =
'SupplierProposal';
1370 $element =
'supplier_proposal';
1371 $subelement =
'supplier_proposal';
1375 $object->origin_id = $originid;
1379 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1380 if (!empty($other_linked_objects)) {
1381 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
1388 $srcobject =
new $classname($db);
1391 $result = $srcobject->fetch(
$object->origin_id);
1393 $tmpdate = $srcobject->delivery_date;
1394 $object->setDeliveryDate($user, $tmpdate);
1395 $object->set_id_projet($user, $srcobject->fk_project);
1397 $lines = $srcobject->lines;
1398 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1399 $srcobject->fetch_lines();
1400 $lines = $srcobject->lines;
1403 $fk_parent_line = 0;
1404 $num = count($lines);
1406 for ($i = 0; $i < $num; $i++) {
1407 if (empty($lines[$i]->subprice) || $lines[$i]->qty < 0 || !in_array($lines[$i]->
id, $selectedLines)) {
1411 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1412 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
1413 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1416 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1417 $fk_parent_line = 0;
1421 if (method_exists($lines[$i],
'fetch_optionals')) {
1422 $lines[$i]->fetch_optionals();
1423 $array_option = $lines[$i]->array_options;
1427 $product_fourn_price_id = 0;
1428 if ($origin ==
"commande") {
1430 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty,
$object->socid);
1431 $lines[$i]->subprice = 0;
1433 $ref_supplier = $productsupplier->ref_supplier;
1434 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1436 foreach ($srcobject->lines as $li) {
1437 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1438 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1439 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1440 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1441 $sql .=
' AND fk_soc = '.((int)
$object->socid);
1442 $sql .=
' ORDER BY unitprice ASC';
1444 $resql = $db->query($sql);
1446 $num_row = $db->num_rows($resql);
1447 if (empty($num_row)) {
1448 $li->remise_percent = 0;
1450 $obj = $db->fetch_object($resql);
1451 $li->subprice = $obj->unitprice;
1452 $li->remise_percent = $obj->remise_percent;
1461 $ref_supplier = $lines[$i]->ref_fourn;
1462 $product_fourn_price_id = 0;
1465 $tva_tx = $lines[$i]->tva_tx;
1467 if ($origin ==
"commande") {
1469 $soc->fetch($socid);
1470 $tva_tx =
get_default_tva($soc, $mysoc, $lines[$i]->fk_product, $product_fourn_price_id);
1475 $lines[$i]->subprice,
1478 $lines[$i]->localtax1_tx,
1479 $lines[$i]->localtax2_tx,
1480 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1481 $product_fourn_price_id,
1483 $lines[$i]->remise_percent,
1486 $lines[$i]->product_type,
1492 $lines[$i]->fk_unit,
1495 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->rowid,
1497 $lines[$i]->special_code
1507 if ($result > 0 && $lines[$i]->product_type == 9) {
1508 $fk_parent_line = $result;
1516 $parameters = array(
'objFrom' => $srcobject);
1517 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters,
$object, $action);
1541 $langs->load(
"errors");
1546 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode((
string) ($id)));
1553 if ($action ==
'addcontact' && $permissiontoadd) {
1557 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1561 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1564 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1565 $langs->load(
"errors");
1566 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1571 } elseif ($action ==
'swapstatut' &&
$object->id > 0 && $permissiontoadd) {
1574 } elseif ($action ==
'deletecontact' &&
$object->id > 0 && $permissiontoadd) {
1579 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1593$form =
new Form($db);
1596$productstatic =
new Product($db);
1597if (isModEnabled(
'project')) {
1601$title =
$object->ref.
" - ".$langs->trans(
'Card');
1602if ($action ==
'create') {
1603 $title = $langs->trans(
"NewOrderSupplier");
1605$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1606llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplier-order page-card');
1610if ($action ==
'create') {
1611 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1615 $currency_code =
$conf->currency;
1622 $societe->fetch($socid);
1625 if (!empty($origin) && !empty($originid)) {
1627 $element = $subelement = $origin;
1628 $classname = ucfirst($subelement);
1630 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1631 $element = $regs[1];
1632 $subelement = $regs[2];
1635 if ($origin ==
'propal' || $origin ==
'proposal') {
1636 $classname =
'Propal';
1637 $element =
'comm/propal';
1638 $subelement =
'propal';
1640 if ($origin ==
'order' || $origin ==
'commande') {
1641 $classname =
'Commande';
1642 $element = $subelement =
'commande';
1644 if ($origin ==
'supplier_proposal') {
1645 $classname =
'SupplierProposal';
1646 $element =
'supplier_proposal';
1647 $subelement =
'supplier_proposal';
1653 $objectsrc =
new $classname($db);
1654 $objectsrc->fetch($originid);
1655 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1656 $objectsrc->fetch_lines();
1658 $objectsrc->fetch_thirdparty();
1661 $objectsrc->fetch_optionals();
1662 $object->array_options = $objectsrc->array_options;
1664 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1665 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1667 if ($origin ==
"commande") {
1668 $cond_reglement_id = 0;
1669 $mode_reglement_id = 0;
1670 $datelivraison =
'';
1671 $objectsrc->note_private =
'';
1672 $objectsrc->note_public =
'';
1673 if ($societe =
$object->thirdparty) {
1674 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1675 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1676 if (isModEnabled(
"multicurrency")) {
1677 $currency_code = $societe->multicurrency_code;
1679 $currency_tx = $societe->multicurrency_tx;
1684 $soc = $objectsrc->thirdparty;
1686 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1687 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1688 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1689 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1690 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1691 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1696 $datelivraison = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1698 if (isModEnabled(
"multicurrency")) {
1699 if (!empty($objectsrc->multicurrency_code)) {
1700 $currency_code = $objectsrc->multicurrency_code;
1702 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1703 $currency_tx = $objectsrc->multicurrency_tx;
1707 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1708 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1711 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1714 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1715 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1717 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1718 $currency_code = $societe->multicurrency_code;
1721 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1722 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1726 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1729 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1733 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1734 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1735 print
'<input type="hidden" name="action" value="add">';
1736 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1737 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1738 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1740 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1742 if ($backtopageforcancel) {
1743 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1746 if (!empty($currency_tx)) {
1747 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1753 $parameters = array();
1755 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters,
$object, $action);
1756 if (empty($reshook)) {
1757 print
'<table class="border centpercent">';
1760 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1763 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1766 if (!empty($societe->id) && $societe->id > 0) {
1767 print $societe->getNomUrl(1,
'supplier');
1768 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1770 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1771 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1775 $(document).ready(function() {
1776 $("#socid").change(function() {
1777 console.log("We have changed the company - Reload page");
1779 $("input[name=action]").val("create");
1780 $("form[name=add]").submit();
1785 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>';
1789 if (!empty($societe->id) && $societe->id > 0) {
1791 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1793 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
1795 $thirdparty = $societe;
1797 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1798 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1804 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
1808 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
1809 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1810 print $form->getSelectConditionsPaiements((GETPOSTISSET(
'cond_reglement_id') &&
GETPOST(
'cond_reglement_id') != 0) ?
GETPOST(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1);
1814 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
1815 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1816 $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') &&
GETPOSTINT(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1821 print $langs->trans(
'DateDeliveryPlanned');
1828 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1830 print $form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin, 0,
"set");
1835 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"bank")) {
1836 $langs->load(
"bank");
1837 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
1838 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
1839 $form->select_comptes($fk_account,
'fk_account', 0,
'', 1);
1844 if (isModEnabled(
'project')) {
1847 $langs->load(
'projects');
1848 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1849 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');
1850 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>';
1855 if (isModEnabled(
'incoterm')) {
1856 $fkincoterms = (!empty(
$object->fk_incoterms) ?
$object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
1857 $locincoterms = (!empty(
$object->location_incoterms) ?
$object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
1859 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
1860 print
'<td class="maxwidthonsmartphone">';
1861 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1862 print $form->select_incoterms($fkincoterms, $locincoterms);
1867 if (isModEnabled(
"multicurrency")) {
1869 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0).
'</td>';
1870 print
'<td class="maxwidthonsmartphone">';
1871 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1872 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1876 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
1878 $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%');
1879 print $doleditor->Create(1);
1884 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
1886 $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%');
1887 print $doleditor->Create(1);
1892 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1893 print
"\n<!-- ".$classname.
" info -->";
1895 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1896 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1897 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1898 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1899 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1901 $newclassname = $classname;
1902 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
1903 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
1904 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
1905 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1906 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
1909 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1910 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
1913 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
1915 if (isModEnabled(
"multicurrency")) {
1916 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1917 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
1918 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
1923 $parameters = array();
1924 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
1925 print $hookmanager->resPrint;
1927 if (empty($reshook)) {
1928 print
$object->showOptionals($extrafields,
'create');
1936 print $form->buttonsSaveCancel(
"CreateDraft");
1939 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1940 $title = $langs->trans(
'ProductsAndServices');
1943 print
'<div class="div-table-responsive-no-min">';
1944 print
'<table class="noborder centpercent">';
1946 $selectedLines = array();
1948 $objectsrc->printOriginLinesList(
'', $selectedLines);
1954} elseif (!empty(
$object->id)) {
1956 $result =
$object->fetch($id, $ref);
1962 $societe =
$object->thirdparty;
1964 $author =
new User($db);
1965 $author->fetch(
$object->user_author_id);
1969 $title = $langs->trans(
"SupplierOrder");
1976 if ($action ==
'delete') {
1977 $arrayAjouts = array();
2008 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.((
int)
$object->id), $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete', $arrayAjouts, 0, 2, $heightModal, $widthModal);
2012 if ($action ==
'clone') {
2013 $filter =
'(s.fournisseur:=:1)';
2015 $formquestion = array(
2016 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
2019 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
2023 if ($action ==
'valid') {
2027 if (preg_match(
'/^[\(]?PROV/i',
$object->ref) || empty(
$object->ref)) {
2037 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
2038 if (isModEnabled(
'notification')) {
2039 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2040 $notify =
new Notify($db);
2042 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE',
$object->socid,
$object);
2045 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2050 if ($action ==
'approve' || $action ==
'approve2') {
2051 $qualified_for_stock_change = 0;
2053 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2055 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2058 $formquestion = array();
2059 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
2060 $langs->load(
"stocks");
2061 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2064 if (
$conf->browser->name ==
'ie') {
2067 $formquestion = array(
2071 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2074 $text = $langs->trans(
"ConfirmApproveThisOrder",
$object->ref);
2075 if (isModEnabled(
'notification')) {
2076 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2077 $notify =
new Notify($db);
2079 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE',
$object->socid,
$object);
2082 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2086 if ($action ==
'refuse') {
2087 $formquestion = array(
2090 'name' =>
'refuse_note',
2091 'label' => $langs->trans(
"Reason"),
2093 'morecss' =>
'minwidth300'
2096 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder",
$object->ref),
"confirm_refuse", $formquestion, 0, 1);
2100 if ($action ==
'cancel') {
2101 $formquestion = array(
2104 'name' =>
'cancel_note',
2105 'label' => $langs->trans(
"Reason"),
2107 'morecss' =>
'minwidth300'
2110 if (isModEnabled(
'notification')) {
2111 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2112 $notify =
new Notify($db);
2115 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_CANCEL',
$object->socid,
$object);
2117 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder",
$object->ref),
"confirm_cancel", $formquestion, 0, 1);
2121 if ($action ==
'commande') {
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 $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",
'', 0, 2);
2134 if ($action ==
'ask_deleteline') {
2135 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2138 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2139 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
2140 if (empty($reshook)) {
2141 $formconfirm .= $hookmanager->resPrint;
2142 } elseif ($reshook > 0) {
2143 $formconfirm = $hookmanager->resPrint;
2152 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2154 $morehtmlref =
'<div class="refidno">';
2156 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'', 0, 1);
2157 $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);
2159 $morehtmlref .=
'<br>';
2160 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2161 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2162 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2163 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2164 $filter =
'(s.fournisseur:=:1)';
2165 $morehtmlref .= $form->select_company(
$object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2166 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2167 $morehtmlref .=
'</form>';
2169 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2171 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2173 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
2175 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.
$object->thirdparty->id.
'&search_company='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2180 if (isModEnabled(
'project')) {
2181 $langs->load(
"projects");
2182 $morehtmlref .=
'<br>';
2183 if ($permissiontoadd) {
2184 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2185 if ($action !=
'classify' && $caneditproject) {
2186 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2188 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->socid : -1),
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 1, 0, 0, 1,
'',
'maxwidth300');
2190 if (!empty(
$object->fk_project)) {
2192 $proj->fetch(
$object->fk_project);
2193 $morehtmlref .= $proj->getNomUrl(1);
2195 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2200 $morehtmlref .=
'</div>';
2203 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2206 $parameters = array();
2208 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters,
$object, $action);
2209 if (empty($reshook)) {
2210 print
'<div class="fichecenter">';
2211 print
'<div class="fichehalfleft">';
2212 print
'<div class="underbanner clearboth"></div>';
2214 print
'<table class="border tableforfield centpercent">';
2217 if (
$object->methode_commande_id > 0) {
2222 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2225 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2229 if (
$object->methode_commande) {
2230 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
2235 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2236 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2241 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2242 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2244 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2245 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2248 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2249 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2250 $absolute_discount =
price2num($absolute_discount,
'MT');
2251 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2253 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2255 $thirdparty = $societe;
2257 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
2258 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2263 $langs->load(
'bills');
2264 print
'<tr><td class="nowrap">';
2265 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2266 print $langs->trans(
'PaymentConditions');
2268 if ($action !=
'editconditions' && $permissiontoadd) {
2269 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>';
2271 print
'</tr></table>';
2273 if ($action ==
'editconditions') {
2274 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
2276 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none');
2282 $langs->load(
'bills');
2283 print
'<tr><td class="nowrap">';
2284 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2285 print $langs->trans(
'PaymentMode');
2287 if ($action !=
'editmode' && $permissiontoadd) {
2288 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>';
2290 print
'</tr></table>';
2292 if ($action ==
'editmode') {
2293 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2295 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
2300 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"bank")) {
2301 print
'<tr><td class="nowrap">';
2302 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2303 print $langs->trans(
'BankAccount');
2305 if ($action !=
'editbankaccount' && $permissiontoadd) {
2306 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>';
2308 print
'</tr></table>';
2310 if ($action ==
'editbankaccount') {
2311 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
2313 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
2321 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2322 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2327 print
'<table class="nobordernopadding centpercent"><tr><td>';
2328 print $langs->trans(
'DateDeliveryPlanned');
2330 if ($action !=
'editdate_livraison') {
2331 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>';
2333 print
'</tr></table>';
2335 if ($action ==
'editdate_livraison') {
2336 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2337 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2338 print
'<input type="hidden" name="action" value="setdate_livraison">';
2343 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin, 0,
"setdate_livraison");
2344 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2347 $usehourmin =
'day';
2349 $usehourmin =
'dayhour';
2352 if (
$object->hasDelay() && !empty(
$object->delivery_date) && (
$object->statut == $object::STATUS_ORDERSENT ||
$object->statut == $object::STATUS_RECEIVED_PARTIALLY)) {
2353 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2359 if (isModEnabled(
'incoterm')) {
2361 print
'<table class="nobordernopadding centpercent"><tr><td>';
2362 print $langs->trans(
'IncotermLabel');
2363 print
'<td><td class="right">';
2364 if ($usercancreate) {
2365 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2369 print
'</td></tr></table>';
2372 if ($action !=
'editincoterm') {
2375 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2381 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2386 print
'<div class="fichehalfright">';
2387 print
'<div class="underbanner clearboth"></div>';
2389 print
'<table class="border tableforfield centpercent">';
2391 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
2395 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2396 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2397 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2399 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2405 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2406 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2407 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2409 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2414 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2416 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
2417 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2418 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2419 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2423 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2425 print
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
2426 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2427 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2428 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2436 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->supplier_order_min_amount));
2441 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2442 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) . $alert .
'</td>';
2443 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2445 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2460 print
'<div class="clearboth"></div><br>';
2463 $blocname =
'contacts';
2464 $title = $langs->trans(
'ContactsAddresses');
2465 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2469 $blocname =
'notes';
2470 $title = $langs->trans(
'Notes');
2471 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2480 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2481 <input type="hidden" name="token" value="'.
newToken().
'">
2482 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2483 <input type="hidden" name="mode" value="">
2484 <input type="hidden" name="page_y" value="">
2485 <input type="hidden" name="id" value="'.
$object->id.
'">
2486 <input type="hidden" name="socid" value="'.$societe->id.
'">
2489 if (!empty(
$conf->use_javascript_ajax) &&
$object->statut == 0) {
2490 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2493 print
'<div class="div-table-responsive-no-min">';
2494 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2497 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2500 $inputalsopricewithtax = 1;
2501 $senderissupplier = 2;
2503 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY');
2508 $object->printObjectLines($action,
$object->thirdparty, $mysoc, $lineid, 1);
2515 if ($action !=
'editline') {
2518 $parameters = array();
2519 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters,
$object, $action);
2523 if (empty($reshook)) {
2524 $object->formAddObjectLine(1, $societe, $mysoc);
2539 if ($user->socid == 0 && $action !=
'delete') {
2540 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2541 print
'<div class="tabsAction">';
2543 $parameters = array();
2544 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2546 if (empty($reshook)) {
2550 if (
$object->statut == 0 && $num > 0) {
2551 if ($usercanvalidate) {
2552 $tmpbuttonlabel = $langs->trans(
'Validate');
2554 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2557 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">';
2558 print $tmpbuttonlabel;
2570 if ($usercanorder) {
2571 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2577 if ($usercanapprove) {
2579 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2581 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2584 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2591 if ($usercanapprovesecond) {
2592 if (!empty(
$object->user_approve_id2)) {
2593 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2595 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2598 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2605 if ($usercanapprove || $usercanapprovesecond) {
2606 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2608 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2613 if (empty($user->socid)) {
2615 if ($usercanorder) {
2616 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
2624 if (!$buttonshown && $usercanapprove) {
2627 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2631 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2634 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2638 if (in_array(
$object->statut, array(3, 4, 5, 6, 7, 9))) {
2639 if ($usercanorder) {
2640 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2647 $labelofbutton = $langs->trans(
'ReceiveProducts');
2648 if (isModEnabled(
'reception')) {
2649 $labelofbutton = $langs->trans(
"CreateReception");
2650 if (!empty(
$object->linkedObjects[
'reception'])) {
2651 foreach (
$object->linkedObjects[
'reception'] as $element) {
2652 if ($element->statut >= 0) {
2660 if (in_array(
$object->statut, array(3, 4, 5))) {
2661 if (isModEnabled(
"supplier_order") && $usercanreceive) {
2662 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.
$object->id.
'">'.$labelofbutton.
'</a></div>';
2664 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
2670 if ($usercanorder) {
2671 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>';
2673 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
2679 if ($usercanreceive) {
2680 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>';
2687 if (isModEnabled(
"supplier_invoice") && (
$object->statut >= 2 &&
$object->statut != 7 &&
$object->billed != 1)) {
2688 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2689 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>';
2696 if (!isModEnabled(
'invoice')) {
2697 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2699 if (!empty(
$object->linkedObjectsIds[
'invoice_supplier']) || (empty(
$object->linkedObjectsIds[
'invoice_supplier']) && !
getDolGlobalInt(
'SUPPLIER_ORDER_DISABLE_CLASSIFY_BILLED_FROM_SUPPLIER_ORDER'))) {
2700 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2701 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2704 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2710 if ($usercancreate &&
$object->billed > 0 &&
$object->statut > $object::STATUS_DRAFT) {
2711 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifyunbilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyUnbilled").
'</a>';
2715 if ($usercancreate) {
2716 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&token='.
newToken().
'&object=order">'.$langs->trans(
"ToClone").
'</a>';
2721 if ($usercanorder) {
2722 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.
newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
2727 if (!empty($usercandelete)) {
2728 if ($hasreception) {
2729 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
2731 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2741 print
'<!-- form to record supplier order -->'.
"\n";
2742 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
2744 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2745 print
'<input type="hidden" name="action" value="commande">';
2747 print
'<table class="noborder centpercent">';
2749 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
2751 print $form->selectDate($date_com ?:
'',
'', 0, 0, 0,
"commande", 1, 1);
2755 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
2756 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
2759 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
2761 print
'<tr><td class="center" colspan="2">';
2762 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
2763 print
' ';
2764 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2773 if (
GETPOST(
'modelselected')) {
2774 $action =
'presend';
2777 if ($action !=
'createorder' && $action !=
'presend') {
2778 print
'<div class="fichecenter"><div class="fichehalfleft">';
2782 $file =
$conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
2783 $relativepath = $objref.
'/'.$objref.
'.pdf';
2784 $filedir =
$conf->fournisseur->dir_output.
'/commande/'.$objref;
2785 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2786 $genallowed = $usercanread;
2787 $delallowed = $usercancreate;
2790 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'', $soc->default_lang,
'',
$object);
2791 $somethingshown = $formfile->numoffiles;
2794 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'supplier_order',
'order_supplier'), 1);
2795 $linktoelem = $tmparray[
'linktoelem'];
2796 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2797 print $htmltoenteralink;
2799 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
2801 print
'</div><div class="fichehalfright">';
2803 if ($action ==
'classifyreception') {
2806 print
'<!-- form to record purchase order received -->'.
"\n";
2807 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
2808 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2809 print
'<input type="hidden" name="action" value="livraison">';
2812 print
'<table class="noborder centpercent">';
2814 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
2816 print $form->selectDate($datepreselected,
'', 1, 1, 0,
"commande", 1, 1);
2817 print
"</td></tr>\n";
2819 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
2821 $liv[
''] =
' ';
2822 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
2823 $liv[
'par'] = $langs->trans(
"PartialWoman");
2824 $liv[
'nev'] = $langs->trans(
"NeverReceived");
2825 $liv[
'can'] = $langs->trans(
"Canceled");
2827 print $form->selectarray(
"type", $liv);
2830 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
2831 print
'<tr><td class="center" colspan="2">';
2832 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
2833 print
' ';
2834 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2843 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2845 $somethingshown = $formactions->showactions(
$object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
2847 print
'</div></div>';
2853 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
2854 $mode =
GETPOST(
'mode',
'alpha');
2855 $ws_url =
$object->thirdparty->webservices_url;
2856 $ws_key =
$object->thirdparty->webservices_key;
2857 $ws_user =
GETPOST(
'ws_user',
'alpha');
2858 $ws_password =
GETPOST(
'ws_password',
'alpha');
2859 $error_occurred =
false;
2862 $ws_ns =
'http://www.dolibarr.org/ns/';
2863 $ws_authentication = array(
2864 'dolibarrkey' => $ws_key,
2865 'sourceapplication' =>
'DolibarrWebServiceClient',
2866 'login' => $ws_user,
2867 'password' => $ws_password,
2874 if (empty($ws_url) || empty($ws_key)) {
2875 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
2877 $error_occurred =
true;
2878 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
2883 if ($mode ==
"init") {
2885 print
'<table class="border centpercent">';
2886 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2887 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2888 print
'<input type="hidden" name="action" value="webservice">';
2889 print
'<input type="hidden" name="mode" value="check">';
2891 if ($error_occurred) {
2892 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2893 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2896 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
2898 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
2900 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
2902 print
'<tr><td class="center" colspan="2">';
2903 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
2904 print
' ';
2906 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2913 } elseif ($mode ==
"check") {
2915 $ws_thirdparty =
'';
2916 $error_occurred =
false;
2919 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
2920 $soapclient_user->soap_defencoding =
'UTF-8';
2921 $soapclient_user->decodeUTF8(
false);
2924 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ws_user);
2925 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
2926 $user_status_code = $result_user[
"result"][
"result_code"];
2928 if ($user_status_code ==
"OK") {
2930 $ws_entity = $result_user[
"user"][
"entity"];
2931 $ws_authentication[
'entity'] = $ws_entity;
2932 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
2933 if (empty($ws_thirdparty)) {
2934 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
2935 $error_occurred =
true;
2938 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
2939 $soapclient_product->soap_defencoding =
'UTF-8';
2940 $soapclient_product->decodeUTF8(
false);
2944 foreach (
$object->lines as $line) {
2946 $ref_supplier = $line->ref_supplier;
2947 $line_id = $i.
"º) ".$line->product_ref.
": ";
2948 if (empty($ref_supplier)) {
2951 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
2952 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
2953 if (!$result_product) {
2954 setEventMessages($line_id.$langs->trans(
"Error").
" SOAP ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
2955 $error_occurred =
true;
2960 $status_code = $result_product[
"result"][
"result_code"];
2961 if (empty($status_code)) {
2962 setEventMessages($langs->trans(
"Error").
" SOAP '".$soapclient_product->error_str.
"'",
null,
'errors');
2963 } elseif ($status_code !=
"OK") {
2964 if ($status_code ==
"NOT_FOUND") {
2965 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
2967 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
2968 $error_occurred =
true;
2975 $supplier_price =
price($result_product[
"product"][
"price_net"]);
2976 $local_price =
null;
2979 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
2980 if (count($product_fourn_list) > 0) {
2981 foreach ($product_fourn_list as $product_fourn_line) {
2983 if ($product_fourn_line->fourn_id ==
$object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
2984 $local_price =
price($product_fourn_line->fourn_price);
2989 if ($local_price !=
null && $local_price != $supplier_price) {
2990 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
2994 if (empty($result_product[
"product"][
"status_tosell"])) {
2995 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
2999 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
3000 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
3001 $error_occurred =
true;
3002 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
3003 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
3004 $error_occurred =
true;
3006 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
3007 $error_occurred =
true;
3011 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
3012 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3013 print
'<input type="hidden" name="action" value="webservice">';
3014 print
'<input type="hidden" name="mode" value="send">';
3015 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
3016 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
3017 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
3018 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
3019 if ($error_occurred) {
3020 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3022 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
3023 print
' ';
3025 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3031 $modelmail =
'order_supplier_send';
3032 $defaulttopic =
'SendOrderRef';
3033 $diroutput =
$conf->fournisseur->commande->dir_output;
3034 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3035 $trackid =
'sord'.$object->id;
3037 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
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)
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_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.
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.