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';
70$langs->loadLangs(array(
'admin',
'orders',
'sendings',
'companies',
'bills',
'propal',
'receptions',
'supplier_proposal',
'deliveries',
'products',
'stocks',
'productbatch'));
71if (isModEnabled(
'incoterm')) {
72 $langs->load(
'incoterm');
79$action =
GETPOST(
'action',
'alpha');
80$confirm =
GETPOST(
'confirm',
'alpha');
81$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'purchaseordercard';
82$backtopage =
GETPOST(
'backtopage',
'alpha');
83$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
87$cancel =
GETPOST(
'cancel',
'alpha');
89$origin =
GETPOST(
'origin',
'alpha');
102if (!empty($user->socid)) {
103 $socid = $user->socid;
107$hookmanager->initHooks(array(
'ordersuppliercard',
'globalcard'));
113$extrafields->fetch_name_optionals_label(
$object->table_element);
116 $socid = $user->socid;
120if ($id > 0 || !empty($ref)) {
121 $ret =
$object->fetch($id, $ref);
125 $ret =
$object->fetch_thirdparty();
129} elseif (!empty($socid) && $socid > 0) {
131 $ret =
$object->fetch_thirdparty();
138$isdraft = (isset(
$object->statut) && (
$object->statut == $object::STATUS_DRAFT) ? 1 : 0);
139$result =
restrictedArea($user,
'fournisseur',
$object,
'commande_fournisseur',
'commande',
'fk_soc',
'rowid', $isdraft);
142$usercanread = ($user->hasRight(
"fournisseur",
"commande",
"lire") || $user->hasRight(
"supplier_order",
"lire"));
143$usercancreate = ($user->hasRight(
"fournisseur",
"commande",
"creer") || $user->hasRight(
"supplier_order",
"creer"));
144$usercandelete = (($user->hasRight(
"fournisseur",
"commande",
"supprimer") || $user->hasRight(
"supplier_order",
"supprimer")) || ($usercancreate && isset(
$object->statut) &&
$object->statut == $object::STATUS_DRAFT));
147$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_order_advance",
"validate")));
150$usercanapprove = $user->hasRight(
"fournisseur",
"commande",
"approuver");
151$usercanapprovesecond = $user->hasRight(
"fournisseur",
"commande",
"approve2");
152$usercanorder = $user->hasRight(
"fournisseur",
"commande",
"commander");
153if (!isModEnabled(
'reception')) {
154 $usercanreceive = $user->hasRight(
"fournisseur",
"commande",
"receptionner");
156 $usercanreceive = $user->hasRight(
"reception",
"creer");
160$permissionnote = $usercancreate;
161$permissiondellink = $usercancreate;
162$permissiontoedit = $usercancreate;
163$permissiontoadd = $usercancreate;
166$caneditproject =
false;
167if (isModEnabled(
'project')) {
178$parameters = array(
'socid' => $socid);
179$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
184if (empty($reshook)) {
185 $backurlforlist = DOL_URL_ROOT.
'/fourn/commande/list.php'.($socid > 0 ?
'?socid='.((int) $socid) :
'');
187 if (empty($backtopage) || ($cancel && empty($id))) {
188 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
189 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
190 $backtopage = $backurlforlist;
192 $backtopage = DOL_URL_ROOT.
'/fourn/commande/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
198 if (!empty($backtopageforcancel)) {
199 header(
"Location: ".$backtopageforcancel);
201 } elseif (!empty($backtopage)) {
202 header(
"Location: ".$backtopage);
208 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
210 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
212 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
214 if ($action ==
'setref_supplier' && $usercancreate) {
215 $result =
$object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'ORDER_SUPPLIER_MODIFY');
222 if ($action ==
'set_incoterms' && $usercancreate) {
230 if ($action ==
'setconditions' && $usercancreate) {
238 if ($action ==
'setmode' && $usercancreate) {
243 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
245 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
246 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
252 if ($action ==
'setbankaccount' && $usercancreate) {
260 if ($action ==
'setdate_livraison' && $usercancreate) {
261 $result =
$object->setDeliveryDate($user, $datelivraison);
268 if ($action ==
'classin' && $usercancreate && $caneditproject) {
269 $result =
$object->setProject($projectid);
278 if (!empty($new_socid) && $new_socid !=
$object->thirdparty->id) {
282 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
283 $sql .=
' SET fk_soc = '.((int) $new_socid);
284 $sql .=
' WHERE fk_soc = '.((int)
$object->thirdparty->id);
285 $sql .=
' AND rowid = '.((int)
$object->id);
287 $res = $db->query($sql);
295 foreach (
$object->lines as $l) {
296 $sql =
'SELECT price, unitprice, tva_tx, ref_fourn';
297 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
298 $sql .=
' WHERE fk_product = '.((int) $l->fk_product);
299 $sql .=
' AND fk_soc = '.((int) $new_socid);
300 $sql .=
' ORDER BY unitprice ASC';
302 $resql = $db->query($sql);
304 $num_row = $db->num_rows($resql);
305 if (empty($num_row)) {
311 $l->ref_supplier =
'';
315 $obj = $db->fetch_object($resql);
316 $l->subprice = $obj->unitprice;
317 $l->total_ht = $obj->price;
318 $l->tva_tx = $obj->tva_tx;
319 $l->total_tva = $l->total_ht * ($obj->tva_tx / 100);
320 $l->total_ttc = $l->total_ht + $l->total_tva;
321 $l->ref_supplier = $obj->ref_fourn;
332 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
336 if ($action ==
'setremisepercent' && $usercancreate) {
343 if ($action ==
'reopen') {
344 if (in_array(
$object->statut, array(1, 2, 3, 4, 5, 6, 7, 9))) {
347 } elseif (
$object->statut == 2) {
349 } elseif (
$object->statut == 3) {
351 } elseif (
$object->statut == 4) {
353 } elseif (
$object->statut == 5) {
359 } elseif (
$object->statut == 6) {
361 } elseif (
$object->statut == 7) {
363 } elseif (
$object->statut == 9) {
372 $result =
$object->setStatus($user, $newstatus);
375 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
376 $sql .=
' SET billed = 0';
377 $sql .=
' WHERE rowid = '.((int)
$object->id);
379 $resql = $db->query($sql);
381 if ($newstatus == 0) {
382 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
383 $sql .=
' SET fk_user_approve = null, fk_user_approve2 = null, date_approve = null, date_approve2 = null';
384 $sql .=
' WHERE rowid = '.((int)
$object->id);
386 $resql = $db->query($sql);
391 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
404 if ($action ==
'classifybilled' && $usercancreate) {
405 $ret =
$object->classifyBilled($user);
412 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
416 foreach (
$object->lines as $line) {
417 if ($line->product_type == 1) {
418 $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);
421 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !==
'' && $usercancreate) {
423 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
424 $vat_rate = str_replace(
'*',
'', $vat_rate);
427 foreach (
$object->lines as $line) {
428 $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);
430 } elseif ($action ==
'addline' && $usercancreate) {
433 $langs->load(
'errors');
438 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
442 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
443 if ($prod_entry_mode ==
'free') {
457 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
458 if (empty($remise_percent)) {
463 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
464 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
466 if (is_array($extralabelsline)) {
468 foreach ($extralabelsline as $key => $value) {
469 unset($_POST[
"options_".$key]);
473 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
474 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
477 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
478 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
481 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
482 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
485 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
486 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
489 if (
GETPOST(
'qty',
'alpha') ==
'') {
490 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
494 if (!$error && isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
495 if ($combinations =
GETPOST(
'combinations',
'array')) {
499 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
500 $idprod = $res->fk_product_child;
502 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
508 if ($prod_entry_mode !=
'free' && empty($error)) {
512 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
517 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
519 $res = $productsupplier->fetch($idprod);
522 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
524 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
525 if ($productsupplier->fourn_socid != $socid) {
526 $productsupplier->ref_supplier =
'';
529 $fksoctosearch =
$object->thirdparty->id;
530 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
532 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
535 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
536 $res = $productsupplier->fetch($idprod);
540 $label = $productsupplier->label;
544 $outputlangs = $langs;
546 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
547 $newlang =
GETPOST(
'lang_id',
'aZ09');
549 if (empty($newlang)) {
550 $newlang =
$object->thirdparty->default_lang;
552 if (!empty($newlang)) {
554 $outputlangs->setDefaultLang($newlang);
556 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
558 $desc = $productsupplier->description;
561 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
562 $desc = $productsupplier->desc_supplier;
566 if (trim($product_desc) == trim($desc) &&
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
571 $desc = $product_desc;
573 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
577 $ref_supplier = $productsupplier->ref_supplier;
581 if (!GETPOSTISSET(
'tva_tx')) {
584 if (empty($tva_tx)) {
592 $type = $productsupplier->type;
593 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
594 $price_base_type =
'HT';
596 $pu_devise =
price2num($price_ht_devise,
'CU');
597 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
598 $price_base_type =
'TTC';
600 $pu_devise =
price2num($price_ttc_devise,
'CU');
602 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
603 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
604 $pu = $productsupplier->fourn_pu;
607 $pu = $productsupplier->fourn_pu;
608 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
618 ($price_base_type ==
'HT' ? $pu : 0),
624 $productsupplier->product_fourn_price_id,
628 ($price_base_type ==
'TTC' ? $pu : 0),
635 $productsupplier->fk_unit,
639 min($rank, count(
$object->lines) + 1)
642 if ($idprod == -99 || $idprod == 0) {
645 $langs->load(
"errors");
646 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
651 $langs->load(
"errors");
652 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
654 } elseif (empty($error)) {
655 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
656 $tva_tx = str_replace(
'*',
'', $tva_tx);
657 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
658 $desc = $product_desc;
660 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
662 $fk_unit =
GETPOST(
'units',
'alpha');
664 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
672 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
676 $pu_ht =
price2num($pu_ttc / (1 + ($tva_tx / 100)),
'MU');
678 $price_base_type =
'HT';
679 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
681 $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,
'',
'', $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise);
685 if (!$error && $result > 0) {
693 $outputlangs = $langs;
696 $newlang =
$object->thirdparty->default_lang;
697 if (
GETPOST(
'lang_id',
'aZ09')) {
698 $newlang =
GETPOST(
'lang_id',
'aZ09');
701 if (!empty($newlang)) {
703 $outputlangs->setDefaultLang($newlang);
708 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
714 unset($_POST [
'prod_entry_mode']);
716 unset($_POST[
'qty']);
717 unset($_POST[
'type']);
718 unset($_POST[
'remise_percent']);
720 unset($_POST[
'price_ht']);
721 unset($_POST[
'multicurrency_price_ht']);
722 unset($_POST[
'price_ttc']);
723 unset($_POST[
'fourn_ref']);
724 unset($_POST[
'tva_tx']);
725 unset($_POST[
'label']);
726 unset($localtax1_tx);
727 unset($localtax2_tx);
728 unset($_POST[
'np_marginRate']);
729 unset($_POST[
'np_markRate']);
730 unset($_POST[
'dp_desc']);
731 unset($_POST[
'idprodfournprice']);
732 unset($_POST[
'units']);
734 unset($_POST[
'date_starthour']);
735 unset($_POST[
'date_startmin']);
736 unset($_POST[
'date_startsec']);
737 unset($_POST[
'date_startday']);
738 unset($_POST[
'date_startmonth']);
739 unset($_POST[
'date_startyear']);
740 unset($_POST[
'date_endhour']);
741 unset($_POST[
'date_endmin']);
742 unset($_POST[
'date_endsec']);
743 unset($_POST[
'date_endday']);
744 unset($_POST[
'date_endmonth']);
745 unset($_POST[
'date_endyear']);
757 if ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
764 $res = $line->fetch($lineid);
772 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0,
price2num(
GETPOSTINT(
'qty')), $line->fk_product,
'none',
GETPOSTINT(
'socid')) < 0) {
773 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
782 if (preg_match(
'/\*/', $vat_rate)) {
787 $vat_rate = str_replace(
'*',
'', $vat_rate);
791 if (
GETPOST(
'price_ht') !=
'') {
792 $price_base_type =
'HT';
796 $vatratecleaned = $vat_rate;
797 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
798 $vatratecleaned = trim($reg[1]);
799 $vatratecode = $reg[2];
803 $ht = (float) $ttc / (1 + ($vatratecleaned / 100));
804 $price_base_type =
'HT';
810 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
811 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
813 if (is_array($extralabelsline)) {
814 foreach ($extralabelsline as $key => $value) {
815 unset($_POST[
"options_".$key]);
821 GETPOST(
'product_desc',
'restricthtml'),
830 GETPOSTISSET(
"type") ?
GETPOST(
"type") : $line->product_type,
839 unset($_POST[
'qty']);
840 unset($_POST[
'type']);
841 unset($_POST[
'idprodfournprice']);
842 unset($_POST[
'remmise_percent']);
843 unset($_POST[
'dp_desc']);
844 unset($_POST[
'np_desc']);
846 unset($_POST[
'fourn_ref']);
847 unset($_POST[
'tva_tx']);
848 unset($_POST[
'date_start']);
849 unset($_POST[
'date_end']);
850 unset($_POST[
'units']);
851 unset($localtax1_tx);
852 unset($localtax2_tx);
854 unset($_POST[
'date_starthour']);
855 unset($_POST[
'date_startmin']);
856 unset($_POST[
'date_startsec']);
857 unset($_POST[
'date_startday']);
858 unset($_POST[
'date_startmonth']);
859 unset($_POST[
'date_startyear']);
860 unset($_POST[
'date_endhour']);
861 unset($_POST[
'date_endmin']);
862 unset($_POST[
'date_endsec']);
863 unset($_POST[
'date_endday']);
864 unset($_POST[
'date_endmonth']);
865 unset($_POST[
'date_endyear']);
870 $outputlangs = $langs;
873 $newlang =
GETPOST(
'lang_id',
'aZ09');
876 $newlang =
$object->thirdparty->default_lang;
878 if (!empty($newlang)) {
880 $outputlangs->setDefaultLang($newlang);
885 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
900 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
903 $result =
$object->deleteLine($lineid);
908 $outputlangs = $langs;
911 $newlang =
GETPOST(
'lang_id',
'aZ09');
914 $newlang =
$object->thirdparty->default_lang;
916 if (!empty($newlang)) {
918 $outputlangs->setDefaultLang($newlang);
922 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
944 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
952 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
956 $result =
$object->valid($user);
960 $outputlangs = $langs;
963 $newlang =
GETPOST(
'lang_id',
'aZ09');
966 $newlang =
$object->thirdparty->default_lang;
968 if (!empty($newlang)) {
970 $outputlangs->setDefaultLang($newlang);
975 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
988 $action =
'confirm_approve';
998 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
1003 $qualified_for_stock_change = 0;
1005 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1007 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1011 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
1012 if (!$idwarehouse || $idwarehouse == -1) {
1014 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1020 $result =
$object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
1023 $outputlangs = $langs;
1026 $newlang =
GETPOST(
'lang_id',
'aZ09');
1029 $newlang =
$object->thirdparty->default_lang;
1031 if (!empty($newlang)) {
1032 $outputlangs =
new Translate(
"", $conf);
1033 $outputlangs->setDefaultLang($newlang);
1035 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1046 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1053 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1057 $result =
$object->refuse($user);
1059 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1067 if ($action ==
'commande') {
1068 $methodecommande =
GETPOSTINT(
'methodecommande');
1072 } elseif ($methodecommande <= 0 && !
getDolGlobalInt(
'SUPPLIER_ORDER_MODE_OPTIONAL')) {
1073 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1074 $action =
'createorder';
1078 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1084 $outputlangs = $langs;
1087 $newlang =
GETPOST(
'lang_id',
'aZ09');
1090 $newlang =
$object->thirdparty->default_lang;
1092 if (!empty($newlang)) {
1093 $outputlangs =
new Translate(
"", $conf);
1094 $outputlangs->setDefaultLang($newlang);
1096 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1107 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1115 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1116 $result =
$object->delete($user);
1118 header(
"Location: ".DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1');
1126 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1127 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1128 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1133 $result =
$object->createFromClone($user, $socid);
1135 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1147 if ($action ==
'livraison' && $usercanreceive) {
1158 $langs->load(
"deliveries");
1168 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1179 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1183 $result =
$object->cancel($user);
1185 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".
$object->id);
1193 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1196 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1197 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1198 $trackid =
'sord'.$object->id;
1199 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1202 $upload_dir = $conf->fournisseur->commande->dir_output;
1203 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1206 if ($action ==
'update_extras' && $permissiontoadd) {
1210 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
1218 $result =
$object->insertExtraFields(
'ORDER_SUPPLIER_MODIFY');
1227 $action =
'edit_extras';
1234 if ($action ==
'add' && $permissiontoadd) {
1236 $selectedLines =
GETPOST(
'toselect',
'array');
1238 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1254 $object->delivery_date = $datelivraison;
1256 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1257 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1263 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
1271 if (!empty($origin) && !empty($originid)) {
1272 $element = $subelement = $origin;
1273 $classname = ucfirst($subelement);
1274 if ($origin ==
'propal' || $origin ==
'proposal') {
1275 $element =
'comm/propal';
1276 $subelement =
'propal';
1277 $classname =
'Propal';
1279 if ($origin ==
'order' || $origin ==
'commande') {
1280 $element = $subelement =
'commande';
1281 $classname =
'Commande';
1283 if ($origin ==
'supplier_proposal') {
1284 $classname =
'SupplierProposal';
1285 $element =
'supplier_proposal';
1286 $subelement =
'supplier_proposal';
1290 $object->origin_id = $originid;
1294 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1295 if (!empty($other_linked_objects)) {
1296 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
1303 $srcobject =
new $classname($db);
1306 $result = $srcobject->fetch(
$object->origin_id);
1308 $tmpdate = $srcobject->delivery_date;
1309 $object->setDeliveryDate($user, $tmpdate);
1310 $object->set_id_projet($user, $srcobject->fk_project);
1312 $lines = $srcobject->lines;
1313 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1314 $srcobject->fetch_lines();
1315 $lines = $srcobject->lines;
1318 $fk_parent_line = 0;
1319 $num = count($lines);
1321 for ($i = 0; $i < $num; $i++) {
1322 if (empty($lines[$i]->subprice) || $lines[$i]->qty < 0 || !in_array($lines[$i]->
id, $selectedLines)) {
1326 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1327 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
1328 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1331 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1332 $fk_parent_line = 0;
1336 if (method_exists($lines[$i],
'fetch_optionals')) {
1337 $lines[$i]->fetch_optionals();
1338 $array_option = $lines[$i]->array_options;
1342 $product_fourn_price_id = 0;
1343 if ($origin ==
"commande") {
1345 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty,
$object->socid);
1346 $lines[$i]->subprice = 0;
1348 $ref_supplier = $productsupplier->ref_supplier;
1349 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1351 foreach ($srcobject->lines as $li) {
1352 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1353 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1354 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1355 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1356 $sql .=
' AND fk_soc = '.((int)
$object->socid);
1357 $sql .=
' ORDER BY unitprice ASC';
1359 $resql = $db->query($sql);
1361 $num_row = $db->num_rows($resql);
1362 if (empty($num_row)) {
1363 $li->remise_percent = 0;
1365 $obj = $db->fetch_object($resql);
1366 $li->subprice = $obj->unitprice;
1367 $li->remise_percent = $obj->remise_percent;
1376 $ref_supplier = $lines[$i]->ref_fourn;
1377 $product_fourn_price_id = 0;
1380 $tva_tx = $lines[$i]->tva_tx;
1382 if ($origin ==
"commande") {
1384 $soc->fetch($socid);
1385 $tva_tx =
get_default_tva($soc, $mysoc, $lines[$i]->fk_product, $product_fourn_price_id);
1390 $lines[$i]->subprice,
1393 $lines[$i]->localtax1_tx,
1394 $lines[$i]->localtax2_tx,
1395 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1396 $product_fourn_price_id,
1398 $lines[$i]->remise_percent,
1401 $lines[$i]->product_type,
1407 $lines[$i]->fk_unit,
1410 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->
rowid,
1412 $lines[$i]->special_code
1422 if ($result > 0 && $lines[$i]->product_type == 9) {
1423 $fk_parent_line = $result;
1431 $parameters = array(
'objFrom' => $srcobject);
1432 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters,
$object, $action);
1456 $langs->load(
"errors");
1461 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode((
string) ($id)));
1467 if ($action ==
'webservice' && $permissiontoadd &&
GETPOST(
'mode',
'alpha') ==
"send" && !
GETPOST(
'cancel',
'alpha')) {
1468 $ws_url =
$object->thirdparty->webservices_url;
1469 $ws_key =
$object->thirdparty->webservices_key;
1470 $ws_user =
GETPOST(
'ws_user',
'alpha');
1471 $ws_password =
GETPOST(
'ws_password',
'alpha');
1473 $ws_thirdparty =
GETPOSTINT(
'ws_thirdparty');
1476 $ws_ns =
'http://www.dolibarr.org/ns/';
1477 $ws_authentication = array(
1478 'dolibarrkey' => $ws_key,
1479 'sourceapplication' =>
'DolibarrWebServiceClient',
1480 'login' => $ws_user,
1481 'password' => $ws_password,
1482 'entity' => $ws_entity
1486 if (isModEnabled(
'webservicesclient')) {
1487 setEventMessages($langs->trans(
"WarningModuleNotActive", $langs->transnoentities(
"Module2660Name")),
null,
'mesgs');
1488 } elseif (empty($ws_url) || empty($ws_key)) {
1489 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
1490 } elseif (empty($ws_user) || empty($ws_password) || empty($ws_thirdparty)) {
1494 $soapclient_order =
new nusoap_client($ws_url.
"/webservices/server_order.php");
1495 $soapclient_order->soap_defencoding =
'UTF-8';
1496 $soapclient_order->decodeUTF8(
false);
1499 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
1500 $soapclient_product->soap_defencoding =
'UTF-8';
1501 $soapclient_product->decodeUTF8(
false);
1504 $order_lines = array();
1505 foreach (
$object->lines as $line) {
1506 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $line->ref_supplier);
1507 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
1509 if ($result_product[
"result"][
"result_code"] ==
"OK") {
1510 $order_lines[] = array(
1511 'desc' => $line->product_desc,
1512 'type' => $line->product_type,
1513 'product_id' => $result_product[
"product"][
"id"],
1514 'vat_rate' => $line->tva_tx,
1515 'qty' => $line->qty,
1516 'price' => $line->price,
1517 'unitprice' => $line->subprice,
1518 'total_net' => $line->total_ht,
1519 'total_vat' => $line->total_tva,
1520 'total' => $line->total_ttc,
1521 'date_start' => $line->date_start,
1522 'date_end' => $line->date_end,
1529 'thirdparty_id' => $ws_thirdparty,
1531 'total_net' =>
$object->total_ht,
1532 'total_var' =>
$object->total_tva,
1533 'total' =>
$object->total_ttc,
1534 'lines' => $order_lines
1537 $ws_parameters = array(
'authentication' => $ws_authentication,
'order' => $order);
1538 $result_order = $soapclient_order->call(
"createOrder", $ws_parameters, $ws_ns,
'');
1540 if (empty($result_order[
"result"][
"result_code"])) {
1541 setEventMessages($langs->trans(
"Error").
" '".$soapclient_order->error_str.
"'",
null,
'errors');
1542 } elseif ($result_order[
"result"][
"result_code"] !=
"OK") {
1543 setEventMessages($langs->trans(
"Error").
" '".$result_order[
"result"][
"result_code"].
"' - '".$result_order[
"result"][
"result_label"].
"'",
null,
'errors');
1545 setEventMessages($langs->trans(
"RemoteOrderRef").
" ".$result_order[
"ref"],
null,
'mesgs');
1551 if ($action ==
'addcontact') {
1555 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1559 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1562 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1563 $langs->load(
"errors");
1564 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1569 } elseif ($action ==
'swapstatut' &&
$object->id > 0) {
1572 } elseif ($action ==
'deletecontact' &&
$object->id > 0) {
1577 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1591$form =
new Form($db);
1594$productstatic =
new Product($db);
1595if (isModEnabled(
'project')) {
1599$title =
$object->ref.
" - ".$langs->trans(
'Card');
1600if ($action ==
'create') {
1601 $title = $langs->trans(
"NewOrderSupplier");
1603$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1604llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplier-order page-card');
1608if ($action ==
'create') {
1609 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1613 $currency_code = $conf->currency;
1618 $societe->fetch($socid);
1621 if (!empty($origin) && !empty($originid)) {
1623 $element = $subelement = $origin;
1624 $classname = ucfirst($subelement);
1626 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1627 $element = $regs[1];
1628 $subelement = $regs[2];
1631 if ($origin ==
'propal' || $origin ==
'proposal') {
1632 $classname =
'Propal';
1633 $element =
'comm/propal';
1634 $subelement =
'propal';
1636 if ($origin ==
'order' || $origin ==
'commande') {
1637 $classname =
'Commande';
1638 $element = $subelement =
'commande';
1640 if ($origin ==
'supplier_proposal') {
1641 $classname =
'SupplierProposal';
1642 $element =
'supplier_proposal';
1643 $subelement =
'supplier_proposal';
1649 $objectsrc =
new $classname($db);
1650 $objectsrc->fetch($originid);
1651 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1652 $objectsrc->fetch_lines();
1654 $objectsrc->fetch_thirdparty();
1657 $objectsrc->fetch_optionals();
1658 $object->array_options = $objectsrc->array_options;
1660 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1661 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1662 if ($origin ==
"commande") {
1663 $cond_reglement_id = 0;
1664 $mode_reglement_id = 0;
1665 $datelivraison =
'';
1666 $objectsrc->note_private =
'';
1667 $objectsrc->note_public =
'';
1668 if ($societe =
$object->thirdparty) {
1669 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1670 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1671 if (isModEnabled(
"multicurrency")) {
1672 $currency_code = $societe->multicurrency_code;
1674 $currency_tx = $societe->multicurrency_tx;
1679 $soc = $objectsrc->thirdparty;
1681 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1682 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1683 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1684 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1685 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1686 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1691 $datelivraison = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1693 if (isModEnabled(
"multicurrency")) {
1694 if (!empty($objectsrc->multicurrency_code)) {
1695 $currency_code = $objectsrc->multicurrency_code;
1697 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1698 $currency_tx = $objectsrc->multicurrency_tx;
1702 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1703 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1706 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1709 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1710 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1712 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1713 $currency_code = $societe->multicurrency_code;
1716 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1717 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1721 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1724 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1728 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1729 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1730 print
'<input type="hidden" name="action" value="add">';
1731 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1732 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1733 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1735 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1737 if ($backtopageforcancel) {
1738 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1741 if (!empty($currency_tx)) {
1742 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1748 $parameters = array();
1750 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters,
$object, $action);
1751 if (empty($reshook)) {
1752 print
'<table class="border centpercent">';
1755 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1758 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1761 if (!empty($societe->id) && $societe->id > 0) {
1762 print $societe->getNomUrl(1,
'supplier');
1763 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1765 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1766 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, null, 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1770 $(document).ready(function() {
1771 $("#socid").change(function() {
1772 console.log("We have changed the company - Reload page");
1774 $("input[name=action]").val("create");
1775 $("form[name=add]").submit();
1780 print
' <a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&client=0&fournisseur=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
1784 if (!empty($societe->id) && $societe->id > 0) {
1786 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1788 $absolute_discount = $societe->getAvailableDiscounts(
'',
'', 0, 1);
1790 $thirdparty = $societe;
1792 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1793 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1799 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
1803 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
1804 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1805 print $form->getSelectConditionsPaiements((GETPOSTISSET(
'cond_reglement_id') &&
GETPOST(
'cond_reglement_id') != 0) ?
GETPOST(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1);
1809 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
1810 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1811 $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') &&
GETPOSTINT(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1816 print $langs->trans(
'DateDeliveryPlanned');
1823 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1825 print $form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin, 0,
"set");
1830 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"bank")) {
1831 $langs->load(
"bank");
1832 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
1833 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
1834 $form->select_comptes($fk_account,
'fk_account', 0,
'', 1);
1839 if (isModEnabled(
'project')) {
1842 $langs->load(
'projects');
1843 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1844 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');
1845 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>';
1850 if (isModEnabled(
'incoterm')) {
1851 $fkincoterms = (!empty(
$object->fk_incoterms) ?
$object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
1852 $locincoterms = (!empty(
$object->location_incoterms) ?
$object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
1854 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"),
$object->label_incoterms, 1).
'</label></td>';
1855 print
'<td class="maxwidthonsmartphone">';
1856 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1857 print $form->select_incoterms($fkincoterms, $locincoterms);
1862 if (isModEnabled(
"multicurrency")) {
1864 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0).
'</td>';
1865 print
'<td class="maxwidthonsmartphone">';
1866 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1867 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1871 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
1873 $doleditor =
new DolEditor(
'note_public', isset($note_public) ? $note_public :
GETPOST(
'note_public',
'restricthtml'),
'', 80,
'dolibarr_notes',
'In', 0, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1874 print $doleditor->Create(1);
1879 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
1881 $doleditor =
new DolEditor(
'note_private', isset($note_private) ? $note_private :
GETPOST(
'note_private',
'restricthtml'),
'', 80,
'dolibarr_notes',
'In', 0, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1882 print $doleditor->Create(1);
1887 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1888 print
"\n<!-- ".$classname.
" info -->";
1890 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1891 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1892 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1893 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1894 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1896 $newclassname = $classname;
1897 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
1898 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
1899 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
1900 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1901 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
1904 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1905 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
1908 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
1910 if (isModEnabled(
"multicurrency")) {
1911 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1912 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
1913 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
1918 $parameters = array();
1919 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
1920 print $hookmanager->resPrint;
1922 if (empty($reshook)) {
1923 print
$object->showOptionals($extrafields,
'create');
1931 print $form->buttonsSaveCancel(
"CreateDraft");
1934 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1935 $title = $langs->trans(
'ProductsAndServices');
1938 print
'<div class="div-table-responsive-no-min">';
1939 print
'<table class="noborder centpercent">';
1941 $selectedLines = array();
1943 $objectsrc->printOriginLinesList(
'', $selectedLines);
1949} elseif (!empty(
$object->id)) {
1951 $result =
$object->fetch($id, $ref);
1957 $societe =
$object->thirdparty;
1959 $author =
new User($db);
1960 $author->fetch(
$object->user_author_id);
1964 $title = $langs->trans(
"SupplierOrder");
1972 if ($action ==
'delete') {
1973 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete',
'', 0, 2);
1977 if ($action ==
'clone') {
1978 $filter =
'(s.fournisseur:=:1)';
1980 $formquestion = array(
1981 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
1984 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1988 if ($action ==
'valid') {
1992 if (preg_match(
'/^[\(]?PROV/i',
$object->ref) || empty(
$object->ref)) {
2002 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
2003 if (isModEnabled(
'notification')) {
2004 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2005 $notify =
new Notify($db);
2007 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE',
$object->socid,
$object);
2010 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2015 if ($action ==
'approve' || $action ==
'approve2') {
2016 $qualified_for_stock_change = 0;
2018 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2020 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2023 $formquestion = array();
2024 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
2025 $langs->load(
"stocks");
2026 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2029 if ($conf->browser->name ==
'ie') {
2032 $formquestion = array(
2036 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2039 $text = $langs->trans(
"ConfirmApproveThisOrder",
$object->ref);
2040 if (isModEnabled(
'notification')) {
2041 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2042 $notify =
new Notify($db);
2044 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE',
$object->socid,
$object);
2047 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".
$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2051 if ($action ==
'refuse') {
2052 $formquestion = array(
2055 'name' =>
'refuse_note',
2056 'label' => $langs->trans(
"Reason"),
2058 'morecss' =>
'minwidth300'
2061 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder",
$object->ref),
"confirm_refuse", $formquestion, 0, 1);
2065 if ($action ==
'cancel') {
2066 $formquestion = array(
2069 'name' =>
'cancel_note',
2070 'label' => $langs->trans(
"Reason"),
2072 'morecss' =>
'minwidth300'
2075 if (!empty($conf->notification->enabled)) {
2076 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2077 $notify =
new Notify($db);
2079 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_CANCEL',
$object->socid,
$object);
2081 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder",
$object->ref),
"confirm_cancel", $formquestion, 0, 1);
2085 if ($action ==
'commande') {
2087 if (!empty($conf->notification->enabled)) {
2088 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2089 $notify =
new Notify($db);
2091 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT',
$object->socid,
$object);
2093 $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);
2097 if ($action ==
'ask_deleteline') {
2098 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2101 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2102 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
2103 if (empty($reshook)) {
2104 $formconfirm .= $hookmanager->resPrint;
2105 } elseif ($reshook > 0) {
2106 $formconfirm = $hookmanager->resPrint;
2115 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2117 $morehtmlref =
'<div class="refidno">';
2119 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'', 0, 1);
2120 $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);
2122 $morehtmlref .=
'<br>';
2123 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2124 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
2125 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2126 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2127 $filter =
'(s.fournisseur:=:1)';
2128 $morehtmlref .= $form->select_company(
$object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2129 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2130 $morehtmlref .=
'</form>';
2132 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2134 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2136 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
2138 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.
$object->thirdparty->id.
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2143 if (isModEnabled(
'project')) {
2144 $langs->load(
"projects");
2145 $morehtmlref .=
'<br>';
2146 if ($permissiontoadd) {
2147 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2148 if ($action !=
'classify' && $caneditproject) {
2149 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2151 $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');
2153 if (!empty(
$object->fk_project)) {
2155 $proj->fetch(
$object->fk_project);
2156 $morehtmlref .= $proj->getNomUrl(1);
2158 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2163 $morehtmlref .=
'</div>';
2166 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2169 $parameters = array();
2171 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters,
$object, $action);
2172 if (empty($reshook)) {
2173 print
'<div class="fichecenter">';
2174 print
'<div class="fichehalfleft">';
2175 print
'<div class="underbanner clearboth"></div>';
2177 print
'<table class="border tableforfield centpercent">';
2180 if (
$object->methode_commande_id > 0) {
2185 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2188 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2192 if (
$object->methode_commande) {
2193 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.
$object->getInputMethod().
'</td></tr>';
2198 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2199 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2204 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2205 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2207 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2208 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2211 $absolute_discount = $societe->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
2212 $absolute_creditnote = $societe->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
2213 $absolute_discount =
price2num($absolute_discount,
'MT');
2214 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2216 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2218 $thirdparty = $societe;
2220 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
2221 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2226 $langs->load(
'bills');
2227 print
'<tr><td class="nowrap">';
2228 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2229 print $langs->trans(
'PaymentConditions');
2231 if ($action !=
'editconditions' && $permissiontoadd) {
2232 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>';
2234 print
'</tr></table>';
2236 if ($action ==
'editconditions') {
2237 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
2239 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none');
2245 $langs->load(
'bills');
2246 print
'<tr><td class="nowrap">';
2247 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2248 print $langs->trans(
'PaymentMode');
2250 if ($action !=
'editmode' && $permissiontoadd) {
2251 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>';
2253 print
'</tr></table>';
2255 if ($action ==
'editmode') {
2256 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2258 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
2263 if (isModEnabled(
"multicurrency")) {
2267 print
'<table class="nobordernopadding centpercent"><tr><td>';
2268 print $form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0);
2270 if ($action !=
'editmulticurrencycode' &&
$object->statut == $object::STATUS_DRAFT && $permissiontoadd) {
2271 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencycode&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
2273 print
'</tr></table>';
2275 if ($action ==
'editmulticurrencycode') {
2276 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_code,
'multicurrency_code');
2278 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_code,
'none');
2283 if (
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
2286 print
'<table class="nobordernopadding centpercent"><tr>';
2288 print $form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'',
$object, 0);
2290 if ($action !=
'editmulticurrencyrate' &&
$object->statut == $object::STATUS_DRAFT &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
2291 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencyrate&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
2293 print
'</tr></table>';
2295 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
2296 if ($action ==
'actualizemulticurrencyrate') {
2299 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_tx,
'multicurrency_tx',
$object->multicurrency_code);
2301 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_tx,
'none',
$object->multicurrency_code);
2302 if (
$object->statut == $object::STATUS_DRAFT &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
2303 print
'<div class="inline-block"> ';
2304 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
2313 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"bank")) {
2314 print
'<tr><td class="nowrap">';
2315 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2316 print $langs->trans(
'BankAccount');
2318 if ($action !=
'editbankaccount' && $permissiontoadd) {
2319 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>';
2321 print
'</tr></table>';
2323 if ($action ==
'editbankaccount') {
2324 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
2326 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
2334 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2335 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2340 print
'<table class="nobordernopadding centpercent"><tr><td>';
2341 print $langs->trans(
'DateDeliveryPlanned');
2343 if ($action !=
'editdate_livraison') {
2344 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>';
2346 print
'</tr></table>';
2348 if ($action ==
'editdate_livraison') {
2349 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2350 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2351 print
'<input type="hidden" name="action" value="setdate_livraison">';
2356 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin, 0,
"setdate_livraison");
2357 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2360 $usehourmin =
'day';
2362 $usehourmin =
'dayhour';
2365 if (
$object->hasDelay() && !empty(
$object->delivery_date) && (
$object->statut == $object::STATUS_ORDERSENT ||
$object->statut == $object::STATUS_RECEIVED_PARTIALLY)) {
2366 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2372 if (isModEnabled(
'incoterm')) {
2374 print
'<table class="nobordernopadding centpercent"><tr><td>';
2375 print $langs->trans(
'IncotermLabel');
2376 print
'<td><td class="right">';
2377 if ($usercancreate) {
2378 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2382 print
'</td></tr></table>';
2385 if ($action !=
'editincoterm') {
2388 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2394 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2399 print
'<div class="fichehalfright">';
2400 print
'<div class="underbanner clearboth"></div>';
2402 print
'<table class="border tableforfield centpercent">';
2406 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2407 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2408 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
2410 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2416 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2417 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2418 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
2420 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2425 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2427 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
2428 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2429 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
2430 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2434 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2436 print
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
2437 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
2438 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
2439 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2447 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->supplier_order_min_amount));
2452 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2453 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1, $conf->currency) . $alert .
'</td>';
2454 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
2456 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2471 print
'<div class="clearboth"></div><br>';
2474 $blocname =
'contacts';
2475 $title = $langs->trans(
'ContactsAddresses');
2476 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2480 $blocname =
'notes';
2481 $title = $langs->trans(
'Notes');
2482 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2491 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">
2492 <input type="hidden" name="token" value="'.
newToken().
'">
2493 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2494 <input type="hidden" name="mode" value="">
2495 <input type="hidden" name="page_y" value="">
2496 <input type="hidden" name="id" value="'.
$object->id.
'">
2497 <input type="hidden" name="socid" value="'.$societe->id.
'">
2500 if (!empty($conf->use_javascript_ajax) &&
$object->statut == 0) {
2501 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2504 print
'<div class="div-table-responsive-no-min">';
2505 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2508 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2511 $inputalsopricewithtax = 1;
2512 $senderissupplier = 2;
2514 $senderissupplier = 1;
2519 $object->printObjectLines($action,
$object->thirdparty, $mysoc, $lineid, 1);
2526 if ($action !=
'editline') {
2529 $parameters = array();
2530 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters,
$object, $action);
2534 if (empty($reshook)) {
2535 $object->formAddObjectLine(1, $societe, $mysoc);
2550 if ($user->socid == 0 && $action !=
'delete') {
2551 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2552 print
'<div class="tabsAction">';
2554 $parameters = array();
2555 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
2557 if (empty($reshook)) {
2561 if (
$object->statut == 0 && $num > 0) {
2562 if ($usercanvalidate) {
2563 $tmpbuttonlabel = $langs->trans(
'Validate');
2565 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2568 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'">';
2569 print $tmpbuttonlabel;
2581 if ($usercanorder) {
2582 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2588 if ($usercanapprove) {
2589 if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') &&
$object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED && !empty(
$object->user_approve_id)) {
2590 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2592 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2595 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2600 if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') &&
$object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) {
2602 if ($usercanapprovesecond) {
2603 if (!empty(
$object->user_approve_id2)) {
2604 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2606 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2609 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2616 if ($usercanapprove || $usercanapprovesecond) {
2617 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2619 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2624 if (empty($user->socid)) {
2626 if ($usercanorder) {
2627 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
2635 if (!$buttonshown && $usercanapprove) {
2638 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2642 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2645 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2649 if (in_array(
$object->statut, array(3, 4, 5, 6, 7, 9))) {
2650 if ($usercanorder) {
2651 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2658 $labelofbutton = $langs->trans(
'ReceiveProducts');
2659 if (isModEnabled(
'reception')) {
2660 $labelofbutton = $langs->trans(
"CreateReception");
2661 if (!empty(
$object->linkedObjects[
'reception'])) {
2662 foreach (
$object->linkedObjects[
'reception'] as $element) {
2663 if ($element->statut >= 0) {
2671 if (in_array(
$object->statut, array(3, 4, 5))) {
2672 if (isModEnabled(
"supplier_order") && $usercanreceive) {
2673 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.
$object->id.
'">'.$labelofbutton.
'</a></div>';
2675 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
2681 if ($usercanorder) {
2682 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>';
2684 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
2690 if ($usercanreceive) {
2691 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>';
2698 if (isModEnabled(
"supplier_invoice") && (
$object->statut >= 2 &&
$object->statut != 7 &&
$object->billed != 1)) {
2699 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2700 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>';
2707 if (!isModEnabled(
'invoice')) {
2708 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2710 if (!empty(
$object->linkedObjectsIds[
'invoice_supplier']) || (empty(
$object->linkedObjectsIds[
'invoice_supplier']) && !
getDolGlobalInt(
'SUPPLIER_ORDER_DISABLE_CLASSIFY_BILLED_FROM_SUPPLIER_ORDER'))) {
2711 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2712 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2715 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2721 if (isModEnabled(
'webservicesclient') &&
$object->statut >= 2) {
2722 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=webservice&token='.
newToken().
'&mode=init">'.$langs->trans(
'CreateRemoteOrder').
'</a>';
2726 if ($usercancreate) {
2727 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&token='.
newToken().
'&object=order">'.$langs->trans(
"ToClone").
'</a>';
2732 if ($usercanorder) {
2733 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.
newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
2738 if (!empty($usercandelete)) {
2739 if ($hasreception) {
2740 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
2742 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2752 print
'<!-- form to record supplier order -->'.
"\n";
2753 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
2755 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2756 print
'<input type="hidden" name="action" value="commande">';
2758 print
'<table class="noborder centpercent">';
2760 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
2762 print $form->selectDate($date_com ?:
'',
'', 0, 0, 0,
"commande", 1, 1);
2766 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
2767 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
2770 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
2772 print
'<tr><td class="center" colspan="2">';
2773 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
2774 print
' ';
2775 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2784 if (
GETPOST(
'modelselected')) {
2785 $action =
'presend';
2788 if ($action !=
'createorder' && $action !=
'presend') {
2789 print
'<div class="fichecenter"><div class="fichehalfleft">';
2793 $file = $conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
2794 $relativepath = $objref.
'/'.$objref.
'.pdf';
2795 $filedir = $conf->fournisseur->dir_output.
'/commande/'.$objref;
2796 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2797 $genallowed = $usercanread;
2798 $delallowed = $usercancreate;
2799 $modelpdf = (!empty(
$object->model_pdf) ?
$object->model_pdf : (!
getDolGlobalString(
'COMMANDE_SUPPLIER_ADDON_PDF') ?
'' : $conf->global->COMMANDE_SUPPLIER_ADDON_PDF));
2801 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'', $soc->default_lang,
'',
$object);
2802 $somethingshown = $formfile->numoffiles;
2805 $linktoelem = $form->showLinkToObjectBlock(
$object,
null, array(
'supplier_order',
'order_supplier'));
2806 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
2808 print
'</div><div class="fichehalfright">';
2810 if ($action ==
'classifyreception') {
2813 print
'<!-- form to record purchase order received -->'.
"\n";
2814 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
2815 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2816 print
'<input type="hidden" name="action" value="livraison">';
2819 print
'<table class="noborder centpercent">';
2821 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
2823 print $form->selectDate($datepreselected,
'', 1, 1, 0,
"commande", 1, 1);
2824 print
"</td></tr>\n";
2826 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
2828 $liv[
''] =
' ';
2829 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
2830 $liv[
'par'] = $langs->trans(
"PartialWoman");
2831 $liv[
'nev'] = $langs->trans(
"NeverReceived");
2832 $liv[
'can'] = $langs->trans(
"Canceled");
2834 print $form->selectarray(
"type", $liv);
2837 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
2838 print
'<tr><td class="center" colspan="2">';
2839 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
2840 print
' ';
2841 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2850 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2852 $somethingshown = $formactions->showactions(
$object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
2854 print
'</div></div>';
2860 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
2861 $mode =
GETPOST(
'mode',
'alpha');
2862 $ws_url =
$object->thirdparty->webservices_url;
2863 $ws_key =
$object->thirdparty->webservices_key;
2864 $ws_user =
GETPOST(
'ws_user',
'alpha');
2865 $ws_password =
GETPOST(
'ws_password',
'alpha');
2868 $ws_ns =
'http://www.dolibarr.org/ns/';
2869 $ws_authentication = array(
2870 'dolibarrkey' => $ws_key,
2871 'sourceapplication' =>
'DolibarrWebServiceClient',
2872 'login' => $ws_user,
2873 'password' => $ws_password,
2880 if (empty($ws_url) || empty($ws_key)) {
2881 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
2883 $error_occurred =
true;
2884 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
2889 if ($mode ==
"init") {
2891 print
'<table class="border centpercent">';
2892 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2893 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2894 print
'<input type="hidden" name="action" value="webservice">';
2895 print
'<input type="hidden" name="mode" value="check">';
2897 if ($error_occurred) {
2898 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2899 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2902 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
2904 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
2906 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
2908 print
'<tr><td class="center" colspan="2">';
2909 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
2910 print
' ';
2912 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2919 } elseif ($mode ==
"check") {
2921 $ws_thirdparty =
'';
2922 $error_occurred =
false;
2925 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
2926 $soapclient_user->soap_defencoding =
'UTF-8';
2927 $soapclient_user->decodeUTF8(
false);
2930 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ws_user);
2931 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
2932 $user_status_code = $result_user[
"result"][
"result_code"];
2934 if ($user_status_code ==
"OK") {
2936 $ws_entity = $result_user[
"user"][
"entity"];
2937 $ws_authentication[
'entity'] = $ws_entity;
2938 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
2939 if (empty($ws_thirdparty)) {
2940 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
2941 $error_occurred =
true;
2944 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
2945 $soapclient_product->soap_defencoding =
'UTF-8';
2946 $soapclient_product->decodeUTF8(
false);
2950 foreach (
$object->lines as $line) {
2952 $ref_supplier = $line->ref_supplier;
2953 $line_id = $i.
"º) ".$line->product_ref.
": ";
2954 if (empty($ref_supplier)) {
2957 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
2958 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
2959 if (!$result_product) {
2960 setEventMessages($line_id.$langs->trans(
"Error").
" SOAP ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
2961 $error_occurred =
true;
2966 $status_code = $result_product[
"result"][
"result_code"];
2967 if (empty($status_code)) {
2968 setEventMessages($langs->trans(
"Error").
" SOAP '".$soapclient_order->error_str.
"'",
null,
'errors');
2969 } elseif ($status_code !=
"OK") {
2970 if ($status_code ==
"NOT_FOUND") {
2971 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
2973 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
2974 $error_occurred =
true;
2981 $supplier_price =
price($result_product[
"product"][
"price_net"]);
2982 $local_price =
null;
2985 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
2986 if (count($product_fourn_list) > 0) {
2987 foreach ($product_fourn_list as $product_fourn_line) {
2989 if ($product_fourn_line->fourn_id ==
$object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
2990 $local_price =
price($product_fourn_line->fourn_price);
2995 if ($local_price !=
null && $local_price != $supplier_price) {
2996 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
3000 if (empty($result_product[
"product"][
"status_tosell"])) {
3001 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
3005 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
3006 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
3007 $error_occurred =
true;
3008 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
3009 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
3010 $error_occurred =
true;
3012 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
3013 $error_occurred =
true;
3017 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
3018 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3019 print
'<input type="hidden" name="action" value="webservice">';
3020 print
'<input type="hidden" name="mode" value="send">';
3021 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
3022 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
3023 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
3024 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
3025 if ($error_occurred) {
3026 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3028 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
3029 print
' ';
3031 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3037 $modelmail =
'order_supplier_send';
3038 $defaulttopic =
'SendOrderRef';
3039 $diroutput = $conf->fournisseur->commande->dir_output;
3040 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3041 $trackid =
'sord'.$object->id;
3043 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
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.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
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.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
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'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return 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...
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.
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall TAKEPOS_SHOW_SUBPRICE right right right takeposterminal SELECT e rowid