40require
'../../main.inc.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formorder.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
48require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
49require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
51if (isModEnabled(
'supplier_proposal')) {
52 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
54if (isModEnabled(
"product")) {
55 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
57if (isModEnabled(
'project')) {
58 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
59 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
61require_once NUSOAP_PATH.
'/nusoap.php';
63if (isModEnabled(
'variants')) {
64 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
69$langs->loadLangs(array(
'admin',
'orders',
'sendings',
'companies',
'bills',
'propal',
'receptions',
'supplier_proposal',
'deliveries',
'products',
'stocks',
'productbatch'));
70if (isModEnabled(
'incoterm')) {
71 $langs->load(
'incoterm');
78$action =
GETPOST(
'action',
'alpha');
79$confirm =
GETPOST(
'confirm',
'alpha');
80$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'purchaseordercard';
81$backtopage =
GETPOST(
'backtopage',
'alpha');
82$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
84$socid =
GETPOST(
'socid',
'int');
85$projectid =
GETPOST(
'projectid',
'int');
86$cancel =
GETPOST(
'cancel',
'alpha');
87$lineid =
GETPOST(
'lineid',
'int');
88$origin =
GETPOST(
'origin',
'alpha');
97$datelivraison =
dol_mktime(
GETPOST(
'liv_hour',
'int'),
GETPOST(
'liv_min',
'int'),
GETPOST(
'liv_sec',
'int'),
GETPOST(
'liv_month',
'int'),
GETPOST(
'liv_day',
'int'),
GETPOST(
'liv_year',
'int'));
101if (!empty($user->socid)) {
102 $socid = $user->socid;
106$hookmanager->initHooks(array(
'ordersuppliercard',
'globalcard'));
112$extrafields->fetch_name_optionals_label($object->table_element);
115 $socid = $user->socid;
119if ($id > 0 || !empty($ref)) {
120 $ret = $object->fetch($id, $ref);
124 $ret = $object->fetch_thirdparty();
128} elseif (!empty($socid) && $socid > 0) {
129 $object->socid = $socid;
130 $ret = $object->fetch_thirdparty();
137$isdraft = (isset($object->statut) && ($object->statut == $object::STATUS_DRAFT) ? 1 : 0);
138$result =
restrictedArea($user,
'fournisseur', $object,
'commande_fournisseur',
'commande',
'fk_soc',
'rowid', $isdraft);
141$usercanread = ($user->hasRight(
"fournisseur",
"commande",
"lire") || $user->hasRight(
"supplier_order",
"lire"));
142$usercancreate = ($user->hasRight(
"fournisseur",
"commande",
"creer") || $user->hasRight(
"supplier_order",
"creer"));
143$usercandelete = (($user->hasRight(
"fournisseur",
"commande",
"supprimer") || $user->hasRight(
"supplier_order",
"supprimer")) || ($usercancreate && isset($object->statut) && $object->statut == $object::STATUS_DRAFT));
146$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_order_advance",
"validate")));
149$usercanapprove = $user->hasRight(
"fournisseur",
"commande",
"approuver");
150$usercanapprovesecond = $user->hasRight(
"fournisseur",
"commande",
"approve2");
151$usercanorder = $user->hasRight(
"fournisseur",
"commande",
"commander");
152if (!isModEnabled(
'reception')) {
153 $usercanreceive = $user->hasRight(
"fournisseur",
"commande",
"receptionner");
155 $usercanreceive = $user->hasRight(
"reception",
"creer");
159$permissionnote = $usercancreate;
160$permissiondellink = $usercancreate;
161$permissiontoedit = $usercancreate;
162$permissiontoadd = $usercancreate;
165$caneditproject =
false;
166if (isModEnabled(
'project')) {
177$parameters = array(
'socid'=>$socid);
178$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
183if (empty($reshook)) {
184 $backurlforlist = DOL_URL_ROOT.
'/fourn/commande/list.php'.($socid > 0 ?
'?socid='.((int) $socid) :
'');
186 if (empty($backtopage) || ($cancel && empty($id))) {
187 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
188 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
189 $backtopage = $backurlforlist;
191 $backtopage = DOL_URL_ROOT.
'/fourn/commande/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
197 if (!empty($backtopageforcancel)) {
198 header(
"Location: ".$backtopageforcancel);
200 } elseif (!empty($backtopage)) {
201 header(
"Location: ".$backtopage);
207 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
209 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
211 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
213 if ($action ==
'setref_supplier' && $usercancreate) {
214 $result = $object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'ORDER_SUPPLIER_MODIFY');
221 if ($action ==
'set_incoterms' && $usercancreate) {
222 $result = $object->setIncoterms(
GETPOST(
'incoterm_id',
'int'),
GETPOST(
'location_incoterms',
'alpha'));
229 if ($action ==
'setconditions' && $usercancreate) {
230 $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id',
'int'));
237 if ($action ==
'setmode' && $usercancreate) {
238 $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id',
'int'));
242 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
244 $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
245 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
247 $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx')),
GETPOST(
'calculation_mode',
'int'));
251 if ($action ==
'setbankaccount' && $usercancreate) {
252 $result = $object->setBankAccount(
GETPOST(
'fk_account',
'int'));
259 if ($action ==
'setdate_livraison' && $usercancreate) {
260 $result = $object->setDeliveryDate($user, $datelivraison);
267 if ($action ==
'classin' && $usercancreate && $caneditproject) {
268 $result = $object->setProject($projectid);
276 $new_socid =
GETPOST(
'new_socid',
'int');
277 if (!empty($new_socid) && $new_socid != $object->thirdparty->id) {
281 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
282 $sql .=
' SET fk_soc = '.((int) $new_socid);
283 $sql .=
' WHERE fk_soc = '.((int) $object->thirdparty->id);
284 $sql .=
' AND rowid = '.((int) $object->id);
286 $res = $db->query($sql);
294 foreach ($object->lines as $l) {
295 $sql =
'SELECT price, unitprice, tva_tx, ref_fourn';
296 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
297 $sql .=
' WHERE fk_product = '.((int) $l->fk_product);
298 $sql .=
' AND fk_soc = '.((int) $new_socid);
299 $sql .=
' ORDER BY unitprice ASC';
301 $resql = $db->query($sql);
303 $num_row = $db->num_rows($resql);
304 if (empty($num_row)) {
310 $l->ref_supplier =
'';
314 $obj = $db->fetch_object($resql);
315 $l->subprice = $obj->unitprice;
316 $l->total_ht = $obj->price;
317 $l->tva_tx = $obj->tva_tx;
318 $l->total_tva = $l->total_ht * ($obj->tva_tx / 100);
319 $l->total_ttc = $l->total_ht + $l->total_tva;
320 $l->ref_supplier = $obj->ref_fourn;
328 $object->update_price();
331 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.$object->id);
335 if ($action ==
'setremisepercent' && $usercancreate) {
342 if ($action ==
'reopen') {
343 if (in_array($object->statut, array(1, 2, 3, 4, 5, 6, 7, 9))) {
344 if ($object->statut == 1) {
346 } elseif ($object->statut == 2) {
348 } elseif ($object->statut == 3) {
350 } elseif ($object->statut == 4) {
352 } elseif ($object->statut == 5) {
358 } elseif ($object->statut == 6) {
360 } elseif ($object->statut == 7) {
362 } elseif ($object->statut == 9) {
371 $result = $object->setStatus($user, $newstatus);
374 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
375 $sql .=
' SET billed = 0';
376 $sql .=
' WHERE rowid = '.((int) $object->id);
378 $resql = $db->query($sql);
380 if ($newstatus == 0) {
381 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
382 $sql .=
' SET fk_user_approve = null, fk_user_approve2 = null, date_approve = null, date_approve2 = null';
383 $sql .=
' WHERE rowid = '.((int) $object->id);
385 $resql = $db->query($sql);
390 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
403 if ($action ==
'classifybilled' && $usercancreate) {
404 $ret = $object->classifyBilled($user);
411 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !==
'' && $usercancreate) {
413 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
414 $vat_rate = str_replace(
'*',
'', $vat_rate);
415 $localtax1_rate =
get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
416 $localtax2_rate =
get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
417 foreach ($object->lines as $line) {
418 $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);
420 } elseif ($action ==
'addline' && $usercancreate) {
423 $langs->load(
'errors');
428 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
432 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
433 if ($prod_entry_mode ==
'free') {
436 $idprod =
GETPOST(
'idprod',
'int');
447 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
448 if (empty($remise_percent)) {
453 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
454 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
456 if (is_array($extralabelsline)) {
458 foreach ($extralabelsline as $key => $value) {
459 unset($_POST[
"options_".$key]);
463 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
464 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
467 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
468 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
471 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
472 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
475 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
476 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
479 if (
GETPOST(
'qty',
'alpha') ==
'') {
480 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
484 if (!$error && isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
485 if ($combinations =
GETPOST(
'combinations',
'array')) {
489 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
490 $idprod = $res->fk_product_child;
492 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
498 if ($prod_entry_mode !=
'free' && empty($error)) {
502 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
507 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
509 $res = $productsupplier->fetch($idprod);
512 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
514 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
515 if ($productsupplier->fourn_socid != $socid) {
516 $productsupplier->ref_supplier =
'';
519 $fksoctosearch = $object->thirdparty->id;
520 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
522 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
525 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
526 $res = $productsupplier->fetch($idprod);
530 $label = $productsupplier->label;
534 $outputlangs = $langs;
536 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
537 $newlang =
GETPOST(
'lang_id',
'aZ09');
539 if (empty($newlang)) {
540 $newlang = $object->thirdparty->default_lang;
542 if (!empty($newlang)) {
544 $outputlangs->setDefaultLang($newlang);
546 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
548 $desc = $productsupplier->description;
551 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
552 $desc = $productsupplier->desc_supplier;
556 if (trim($product_desc) == trim($desc) &&
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
561 $desc = $product_desc;
563 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
567 $ref_supplier = $productsupplier->ref_supplier;
571 if (!GETPOSTISSET(
'tva_tx')) {
572 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
573 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
574 if (empty($tva_tx)) {
579 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
580 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
582 $type = $productsupplier->type;
583 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
584 $price_base_type =
'HT';
586 $pu_devise =
price2num($price_ht_devise,
'CU');
587 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
588 $price_base_type =
'TTC';
590 $pu_devise =
price2num($price_ttc_devise,
'CU');
592 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
593 if (empty($object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code != $object->multicurrency_code)) {
594 $pu = $productsupplier->fourn_pu;
597 $pu = $productsupplier->fourn_pu;
598 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
606 $result = $object->addline(
608 ($price_base_type ==
'HT' ? $pu : 0),
614 $productsupplier->product_fourn_price_id,
618 ($price_base_type ==
'TTC' ? $pu : 0),
625 $productsupplier->fk_unit,
629 min($rank, count($object->lines) + 1)
632 if ($idprod == -99 || $idprod == 0) {
635 $langs->load(
"errors");
636 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
641 $langs->load(
"errors");
642 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
644 } elseif (empty($error)) {
645 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
646 $tva_tx = str_replace(
'*',
'', $tva_tx);
647 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
648 $desc = $product_desc;
650 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
652 $fk_unit =
GETPOST(
'units',
'alpha');
654 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
659 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
660 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
662 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
666 $pu_ht =
price2num($pu_ttc / (1 + ($tva_tx / 100)),
'MU');
668 $price_base_type =
'HT';
669 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
671 $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);
675 if (!$error && $result > 0) {
678 $ret = $object->fetch($object->id);
682 $outputlangs = $langs;
685 $newlang = $object->thirdparty->default_lang;
686 if (
GETPOST(
'lang_id',
'aZ09')) {
687 $newlang =
GETPOST(
'lang_id',
'aZ09');
690 if (!empty($newlang)) {
692 $outputlangs->setDefaultLang($newlang);
694 $model = $object->model_pdf;
695 $ret = $object->fetch($id);
697 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
703 unset($_POST [
'prod_entry_mode']);
705 unset($_POST[
'qty']);
706 unset($_POST[
'type']);
707 unset($_POST[
'remise_percent']);
709 unset($_POST[
'price_ht']);
710 unset($_POST[
'multicurrency_price_ht']);
711 unset($_POST[
'price_ttc']);
712 unset($_POST[
'fourn_ref']);
713 unset($_POST[
'tva_tx']);
714 unset($_POST[
'label']);
715 unset($localtax1_tx);
716 unset($localtax2_tx);
717 unset($_POST[
'np_marginRate']);
718 unset($_POST[
'np_markRate']);
719 unset($_POST[
'dp_desc']);
720 unset($_POST[
'idprodfournprice']);
721 unset($_POST[
'units']);
723 unset($_POST[
'date_starthour']);
724 unset($_POST[
'date_startmin']);
725 unset($_POST[
'date_startsec']);
726 unset($_POST[
'date_startday']);
727 unset($_POST[
'date_startmonth']);
728 unset($_POST[
'date_startyear']);
729 unset($_POST[
'date_endhour']);
730 unset($_POST[
'date_endmin']);
731 unset($_POST[
'date_endsec']);
732 unset($_POST[
'date_endday']);
733 unset($_POST[
'date_endmonth']);
734 unset($_POST[
'date_endyear']);
746 if ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
753 $res = $line->fetch($lineid);
761 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0,
price2num(
GETPOST(
'qty',
'int')), $line->fk_product,
'none',
GETPOST(
'socid',
'int')) < 0) {
762 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
771 if (preg_match(
'/\*/', $vat_rate)) {
776 $vat_rate = str_replace(
'*',
'', $vat_rate);
777 $localtax1_rate =
get_localtax($vat_rate, 1, $mysoc, $object->thirdparty);
778 $localtax2_rate =
get_localtax($vat_rate, 2, $mysoc, $object->thirdparty);
780 if (
GETPOST(
'price_ht') !=
'') {
781 $price_base_type =
'HT';
785 $vatratecleaned = $vat_rate;
786 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
787 $vatratecleaned = trim($reg[1]);
788 $vatratecode = $reg[2];
792 $ht = (float) $ttc / (1 + ($vatratecleaned / 100));
793 $price_base_type =
'HT';
799 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
800 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
802 if (is_array($extralabelsline)) {
803 foreach ($extralabelsline as $key => $value) {
804 unset($_POST[
"options_".$key]);
808 $result = $object->updateline(
810 GETPOST(
'product_desc',
'restricthtml'),
819 GETPOSTISSET(
"type") ?
GETPOST(
"type") : $line->product_type,
828 unset($_POST[
'qty']);
829 unset($_POST[
'type']);
830 unset($_POST[
'idprodfournprice']);
831 unset($_POST[
'remmise_percent']);
832 unset($_POST[
'dp_desc']);
833 unset($_POST[
'np_desc']);
835 unset($_POST[
'fourn_ref']);
836 unset($_POST[
'tva_tx']);
837 unset($_POST[
'date_start']);
838 unset($_POST[
'date_end']);
839 unset($_POST[
'units']);
840 unset($localtax1_tx);
841 unset($localtax2_tx);
843 unset($_POST[
'date_starthour']);
844 unset($_POST[
'date_startmin']);
845 unset($_POST[
'date_startsec']);
846 unset($_POST[
'date_startday']);
847 unset($_POST[
'date_startmonth']);
848 unset($_POST[
'date_startyear']);
849 unset($_POST[
'date_endhour']);
850 unset($_POST[
'date_endmin']);
851 unset($_POST[
'date_endsec']);
852 unset($_POST[
'date_endday']);
853 unset($_POST[
'date_endmonth']);
854 unset($_POST[
'date_endyear']);
859 $outputlangs = $langs;
862 $newlang =
GETPOST(
'lang_id',
'aZ09');
865 $newlang = $object->thirdparty->default_lang;
867 if (!empty($newlang)) {
869 $outputlangs->setDefaultLang($newlang);
871 $model = $object->model_pdf;
872 $ret = $object->fetch($id);
874 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
889 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
892 $result = $object->deleteline($lineid);
895 $object->line_order(
true);
897 $outputlangs = $langs;
900 $newlang =
GETPOST(
'lang_id',
'aZ09');
903 $newlang = $object->thirdparty->default_lang;
905 if (!empty($newlang)) {
907 $outputlangs->setDefaultLang($newlang);
910 $ret = $object->fetch($object->id);
911 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
933 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
941 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
944 $object->date_commande =
dol_now();
945 $result = $object->valid($user);
949 $outputlangs = $langs;
952 $newlang =
GETPOST(
'lang_id',
'aZ09');
955 $newlang = $object->thirdparty->default_lang;
957 if (!empty($newlang)) {
959 $outputlangs->setDefaultLang($newlang);
961 $model = $object->model_pdf;
962 $ret = $object->fetch($id);
964 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
976 if (!$error && !
getDolGlobalString(
'SUPPLIER_ORDER_NO_DIRECT_APPROVE') && $usercanapprove && !(
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $object->hasProductsOrServices(1))) {
977 $action =
'confirm_approve';
987 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
990 $idwarehouse =
GETPOST(
'idwarehouse',
'int');
992 $qualified_for_stock_change = 0;
994 $qualified_for_stock_change = $object->hasProductsOrServices(2);
996 $qualified_for_stock_change = $object->hasProductsOrServices(1);
1000 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
1001 if (!$idwarehouse || $idwarehouse == -1) {
1003 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1009 $result = $object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
1012 $outputlangs = $langs;
1015 $newlang =
GETPOST(
'lang_id',
'aZ09');
1018 $newlang = $object->thirdparty->default_lang;
1020 if (!empty($newlang)) {
1021 $outputlangs =
new Translate(
"", $conf);
1022 $outputlangs->setDefaultLang($newlang);
1024 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1035 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1042 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1044 $object->refuse_note =
GETPOST(
'refuse_note');
1046 $result = $object->refuse($user);
1048 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1056 if ($action ==
'commande') {
1057 $methodecommande =
GETPOST(
'methodecommande',
'int');
1061 } elseif ($methodecommande <= 0) {
1062 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1063 $action =
'createorder';
1067 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1070 $result = $object->commande($user,
GETPOST(
"datecommande"),
GETPOST(
"methode",
'int'),
GETPOST(
'comment',
'alphanohtml'));
1073 $outputlangs = $langs;
1076 $newlang =
GETPOST(
'lang_id',
'aZ09');
1079 $newlang = $object->thirdparty->default_lang;
1081 if (!empty($newlang)) {
1082 $outputlangs =
new Translate(
"", $conf);
1083 $outputlangs->setDefaultLang($newlang);
1085 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1096 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1104 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1105 $result = $object->delete($user);
1107 header(
"Location: ".DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1');
1115 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1116 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1117 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1119 if ($object->id > 0) {
1120 $orig = clone $object;
1122 $result = $object->createFromClone($user, $socid);
1124 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1136 if ($action ==
'livraison' && $usercanreceive) {
1145 $result = $object->Livraison($user, $date_liv,
GETPOST(
"type"),
GETPOST(
"comment"));
1147 $langs->load(
"deliveries");
1150 } elseif ($result == -3) {
1159 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1170 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1172 $object->cancel_note =
GETPOST(
'cancel_note');
1174 $result = $object->cancel($user);
1176 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1184 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1187 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1188 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1189 $trackid =
'sord'.$object->id;
1190 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1193 $upload_dir = $conf->fournisseur->commande->dir_output;
1194 $permissiontoadd = $usercancreate;
1195 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1198 if ($action ==
'update_extras') {
1199 $object->oldcopy =
dol_clone($object, 2);
1202 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
1210 $result = $object->insertExtraFields(
'ORDER_SUPPLIER_MODIFY');
1219 $action =
'edit_extras';
1226 if ($action ==
'add' && $usercancreate) {
1228 $selectedLines =
GETPOST(
'toselect',
'array');
1230 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1239 $object->ref_supplier =
GETPOST(
'refsupplier');
1240 $object->socid = $socid;
1241 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id',
'int');
1242 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id',
'int');
1243 $object->fk_account =
GETPOST(
'fk_account',
'int');
1244 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
1245 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
1246 $object->delivery_date = $datelivraison;
1247 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
1248 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1249 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1250 $object->multicurrency_tx =
price2num(
GETPOST(
'originmulticurrency_tx',
'alpha'));
1251 $object->fk_project =
GETPOST(
'projectid',
'int');
1255 $ret = $extrafields->setOptionalsFromPost(
null, $object);
1263 if (!empty($origin) && !empty($originid)) {
1264 $element = $subelement = $origin;
1265 $classname = ucfirst($subelement);
1266 if ($origin ==
'propal' || $origin ==
'proposal') {
1267 $element =
'comm/propal';
1268 $subelement =
'propal';
1269 $classname =
'Propal';
1271 if ($origin ==
'order' || $origin ==
'commande') {
1272 $element = $subelement =
'commande';
1273 $classname =
'Commande';
1275 if ($origin ==
'supplier_proposal') {
1276 $classname =
'SupplierProposal';
1277 $element =
'supplier_proposal';
1278 $subelement =
'supplier_proposal';
1281 $object->origin = $origin;
1282 $object->origin_id = $originid;
1285 $object->linked_objects [$object->origin] = $object->origin_id;
1286 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1287 if (!empty($other_linked_objects)) {
1288 $object->linked_objects = array_merge($object->linked_objects, $other_linked_objects);
1291 $id = $object->create($user);
1295 $srcobject =
new $classname($db);
1297 dol_syslog(
"Try to find source object origin=".$object->origin.
" originid=".$object->origin_id.
" to add lines");
1298 $result = $srcobject->fetch($object->origin_id);
1300 $tmpdate = $srcobject->delivery_date;
1301 $object->setDeliveryDate($user, $tmpdate);
1302 $object->set_id_projet($user, $srcobject->fk_project);
1304 $lines = $srcobject->lines;
1305 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1306 $srcobject->fetch_lines();
1307 $lines = $srcobject->lines;
1310 $fk_parent_line = 0;
1311 $num = count($lines);
1313 for ($i = 0; $i < $num; $i++) {
1314 if (empty($lines[$i]->subprice) || $lines[$i]->qty <= 0 || !in_array($lines[$i]->
id, $selectedLines)) {
1318 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1319 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->product_desc);
1320 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1323 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1324 $fk_parent_line = 0;
1328 if (method_exists($lines[$i],
'fetch_optionals')) {
1329 $lines[$i]->fetch_optionals();
1330 $array_option = $lines[$i]->array_options;
1334 $product_fourn_price_id = 0;
1335 if ($origin ==
"commande") {
1337 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty, $object->socid);
1338 $lines[$i]->subprice = 0;
1340 $ref_supplier = $productsupplier->ref_supplier;
1341 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1343 foreach ($srcobject->lines as $li) {
1344 $sql =
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
1345 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
1346 $sql .=
' WHERE fk_product = '.((int) $li->fk_product);
1347 $sql .=
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
1348 $sql .=
' AND fk_soc = '.((int) $object->socid);
1349 $sql .=
' ORDER BY unitprice ASC';
1351 $resql = $db->query($sql);
1353 $num_row = $db->num_rows($resql);
1354 if (empty($num_row)) {
1355 $li->remise_percent = 0;
1357 $obj = $db->fetch_object($resql);
1358 $li->subprice = $obj->unitprice;
1359 $li->remise_percent = $obj->remise_percent;
1368 $ref_supplier = $lines[$i]->ref_fourn;
1369 $product_fourn_price_id = 0;
1372 $tva_tx = $lines[$i]->tva_tx;
1374 if ($origin ==
"commande") {
1376 $soc->fetch($socid);
1377 $tva_tx =
get_default_tva($soc, $mysoc, $lines[$i]->fk_product, $product_fourn_price_id);
1380 $result = $object->addline(
1382 $lines[$i]->subprice,
1385 $lines[$i]->localtax1_tx,
1386 $lines[$i]->localtax2_tx,
1387 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1388 $product_fourn_price_id,
1390 $lines[$i]->remise_percent,
1393 $lines[$i]->product_type,
1399 $lines[$i]->fk_unit,
1402 !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->
rowid,
1404 $lines[$i]->special_code
1414 if ($result > 0 && $lines[$i]->product_type == 9) {
1415 $fk_parent_line = $result;
1423 $parameters = array(
'objFrom' => $srcobject);
1424 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
1439 $id = $object->create($user);
1448 $langs->load(
"errors");
1451 $_GET[
'socid'] = $_POST[
'socid'];
1454 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode($id));
1460 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') ==
"send" && !
GETPOST(
'cancel',
'alpha')) {
1461 $ws_url = $object->thirdparty->webservices_url;
1462 $ws_key = $object->thirdparty->webservices_key;
1463 $ws_user =
GETPOST(
'ws_user',
'alpha');
1464 $ws_password =
GETPOST(
'ws_password',
'alpha');
1465 $ws_entity =
GETPOST(
'ws_entity',
'int');
1466 $ws_thirdparty =
GETPOST(
'ws_thirdparty',
'int');
1469 $ws_ns =
'http://www.dolibarr.org/ns/';
1470 $ws_authentication = array(
1471 'dolibarrkey'=>$ws_key,
1472 'sourceapplication'=>
'DolibarrWebServiceClient',
1474 'password'=>$ws_password,
1475 'entity'=>$ws_entity
1479 if (empty($conf->syncsupplierwebservices->enabled)) {
1480 setEventMessages($langs->trans(
"WarningModuleNotActive", $langs->transnoentities(
"Module2650Name")),
null,
'mesgs');
1481 } elseif (empty($ws_url) || empty($ws_key)) {
1482 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
1483 } elseif (empty($ws_user) || empty($ws_password) || empty($ws_thirdparty)) {
1487 $soapclient_order =
new nusoap_client($ws_url.
"/webservices/server_order.php");
1488 $soapclient_order->soap_defencoding =
'UTF-8';
1489 $soapclient_order->decodeUTF8(
false);
1492 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
1493 $soapclient_product->soap_defencoding =
'UTF-8';
1494 $soapclient_product->decodeUTF8(
false);
1497 $order_lines = array();
1498 foreach ($object->lines as $line) {
1499 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $line->ref_supplier);
1500 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
1502 if ($result_product[
"result"][
"result_code"] ==
"OK") {
1503 $order_lines[] = array(
1504 'desc' => $line->product_desc,
1505 'type' => $line->product_type,
1506 'product_id' => $result_product[
"product"][
"id"],
1507 'vat_rate' => $line->tva_tx,
1508 'qty' => $line->qty,
1509 'price' => $line->price,
1510 'unitprice' => $line->subprice,
1511 'total_net' => $line->total_ht,
1512 'total_vat' => $line->total_tva,
1513 'total' => $line->total_ttc,
1514 'date_start' => $line->date_start,
1515 'date_end' => $line->date_end,
1522 'thirdparty_id' => $ws_thirdparty,
1524 'total_net' => $object->total_ht,
1525 'total_var' => $object->total_tva,
1526 'total' => $object->total_ttc,
1527 'lines' => $order_lines
1530 $ws_parameters = array(
'authentication'=>$ws_authentication,
'order' => $order);
1531 $result_order = $soapclient_order->call(
"createOrder", $ws_parameters, $ws_ns,
'');
1533 if (empty($result_order[
"result"][
"result_code"])) {
1534 setEventMessages($langs->trans(
"SOAPError").
" '".$soapclient_order->error_str.
"'",
null,
'errors');
1535 } elseif ($result_order[
"result"][
"result_code"] !=
"OK") {
1536 setEventMessages($langs->trans(
"SOAPError").
" '".$result_order[
"result"][
"result_code"].
"' - '".$result_order[
"result"][
"result_label"].
"'",
null,
'errors');
1538 setEventMessages($langs->trans(
"RemoteOrderRef").
" ".$result_order[
"ref"],
null,
'mesgs');
1544 if ($action ==
'addcontact') {
1545 if ($object->id > 0) {
1548 $result = $object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1552 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1555 if ($object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1556 $langs->load(
"errors");
1557 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1562 } elseif ($action ==
'swapstatut' && $object->id > 0) {
1564 $result = $object->swapContactStatus(
GETPOST(
'ligne',
'int'));
1565 } elseif ($action ==
'deletecontact' && $object->id > 0) {
1567 $result = $object->delete_contact(
GETPOST(
"lineid",
'int'));
1570 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1584$form =
new Form($db);
1587$productstatic =
new Product($db);
1588if (isModEnabled(
'project')) {
1592$title = $object->ref.
" - ".$langs->trans(
'Card');
1593if ($action ==
'create') {
1594 $title = $langs->trans(
"NewOrderSupplier");
1596$help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1601if ($action ==
'create') {
1602 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1606 $currency_code = $conf->currency;
1611 $societe->fetch($socid);
1614 if (!empty($origin) && !empty($originid)) {
1616 $element = $subelement = $origin;
1617 $classname = ucfirst($subelement);
1619 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1620 $element = $regs[1];
1621 $subelement = $regs[2];
1624 if ($origin ==
'propal' || $origin ==
'proposal') {
1625 $classname =
'Propal';
1626 $element =
'comm/propal';
1627 $subelement =
'propal';
1629 if ($origin ==
'order' || $origin ==
'commande') {
1630 $classname =
'Commande';
1631 $element = $subelement =
'commande';
1633 if ($origin ==
'supplier_proposal') {
1634 $classname =
'SupplierProposal';
1635 $element =
'supplier_proposal';
1636 $subelement =
'supplier_proposal';
1642 $objectsrc =
new $classname($db);
1643 $objectsrc->fetch($originid);
1644 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1645 $objectsrc->fetch_lines();
1647 $objectsrc->fetch_thirdparty();
1650 $objectsrc->fetch_optionals();
1651 $object->array_options = $objectsrc->array_options;
1653 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1654 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1655 if ($origin ==
"commande") {
1656 $cond_reglement_id = 0;
1657 $mode_reglement_id = 0;
1658 $delivery_date =
'';
1659 $objectsrc->note_private =
'';
1660 $objectsrc->note_public =
'';
1661 if ($societe = $object->thirdparty) {
1662 $cond_reglement_id = $societe->cond_reglement_supplier_id;
1663 $mode_reglement_id = $societe->mode_reglement_supplier_id;
1664 if (isModEnabled(
"multicurrency")) {
1665 $currency_code = $societe->multicurrency_code;
1667 $currency_tx = $societe->multicurrency_tx;
1672 $soc = $objectsrc->thirdparty;
1674 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1675 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1676 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1677 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1678 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1679 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1684 $datedelivery = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1686 if (isModEnabled(
"multicurrency")) {
1687 if (!empty($objectsrc->multicurrency_code)) {
1688 $currency_code = $objectsrc->multicurrency_code;
1690 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1691 $currency_tx = $objectsrc->multicurrency_tx;
1695 $note_private = $object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1696 $note_public = $object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1699 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1702 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1703 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1705 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1706 $currency_code = $societe->multicurrency_code;
1709 $note_private = $object->getDefaultCreateValueFor(
'note_private');
1710 $note_public = $object->getDefaultCreateValueFor(
'note_public');
1714 if (empty($cond_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
1715 $cond_reglement_id = $conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID;
1717 if (empty($mode_reglement_id) &&
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
1718 $mode_reglement_id = $conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID;
1721 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1722 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1723 print
'<input type="hidden" name="action" value="add">';
1724 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1725 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1726 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1728 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1730 if ($backtopageforcancel) {
1731 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1734 if (!empty($currency_tx)) {
1735 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1741 $parameters = array();
1743 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters, $object, $action);
1744 if (empty($reshook)) {
1745 print
'<table class="border centpercent">';
1748 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1751 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1754 if (!empty($societe->id) && $societe->id > 0) {
1755 print $societe->getNomUrl(1,
'supplier');
1756 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1758 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1759 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, null, 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1763 $(document).ready(function() {
1764 $("#socid").change(function() {
1765 console.log("We have changed the company - Reload page");
1767 $("input[name=action]").val("create");
1768 $("form[name=add]").submit();
1773 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>';
1777 if (!empty($societe->id) && $societe->id > 0) {
1779 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1781 $absolute_discount = $societe->getAvailableDiscounts(
'',
'', 0, 1);
1783 $thirdparty = $societe;
1785 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1786 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1792 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
1796 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
1797 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1798 print $form->getSelectConditionsPaiements((GETPOSTISSET(
'cond_reglement_id') &&
GETPOST(
'cond_reglement_id') != 0) ?
GETPOST(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1);
1802 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
1803 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1804 $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') &&
GETPOST(
'mode_reglement_id') != 0) ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1809 print $langs->trans(
'DateDeliveryPlanned');
1816 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1817 print $form->selectDate($datedelivery ?: -1,
'liv_', $usehourmin, $usehourmin,
'',
"set");
1821 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"banque")) {
1822 $langs->load(
"bank");
1823 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
1824 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"');
1825 $form->select_comptes($fk_account,
'fk_account', 0,
'', 1);
1830 if (isModEnabled(
'project')) {
1833 $langs->load(
'projects');
1834 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1835 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $societe->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1836 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?action=create&status=1'.(!empty($societe->id) ?
'&socid='.$societe->id :
"").
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create'.(!empty($societe->id) ?
'&socid='.$societe->id :
"")).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
1841 if (isModEnabled(
'incoterm')) {
1842 $fkincoterms = (!empty($object->fk_incoterms) ? $object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
1843 $locincoterms = (!empty($object->location_incoterms) ? $object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
1845 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $object->label_incoterms, 1).
'</label></td>';
1846 print
'<td class="maxwidthonsmartphone">';
1847 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
1848 print $form->select_incoterms($fkincoterms, $locincoterms);
1853 if (isModEnabled(
"multicurrency")) {
1855 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
1856 print
'<td class="maxwidthonsmartphone">';
1857 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1858 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1862 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
1864 $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%');
1865 print $doleditor->Create(1);
1870 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
1872 $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%');
1873 print $doleditor->Create(1);
1878 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1879 print
"\n<!-- ".$classname.
" info -->";
1881 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1882 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1883 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1884 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1885 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1887 $newclassname = $classname;
1888 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
1889 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
1890 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
1891 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1892 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
1895 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1896 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
1899 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
1901 if (isModEnabled(
"multicurrency")) {
1902 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1903 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
1904 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
1909 $parameters = array();
1910 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1911 print $hookmanager->resPrint;
1913 if (empty($reshook)) {
1914 print $object->showOptionals($extrafields,
'create');
1922 print $form->buttonsSaveCancel(
"CreateDraft");
1925 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1926 $title = $langs->trans(
'ProductsAndServices');
1929 print
'<div class="div-table-responsive-no-min">';
1930 print
'<table class="noborder centpercent">';
1932 $selectedLines = array();
1934 $objectsrc->printOriginLinesList(
'', $selectedLines);
1940} elseif (!empty($object->id)) {
1942 $result = $object->fetch($id, $ref);
1943 $object->fetch_thirdparty();
1945 $societe = $object->thirdparty;
1947 $author =
new User($db);
1948 $author->fetch($object->user_author_id);
1952 $title = $langs->trans(
"SupplierOrder");
1959 if ($action ==
'delete') {
1960 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete',
'', 0, 2);
1964 if ($action ==
'clone') {
1965 $filter =
'(s.fournisseur:=:1)';
1967 $formquestion = array(
1968 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOST(
'socid',
'int'),
'socid', $filter))
1971 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder', $object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1975 if ($action ==
'valid') {
1976 $object->date_commande =
dol_now();
1979 if (preg_match(
'/^[\(]?PROV/i', $object->ref) || empty($object->ref)) {
1980 $newref = $object->getNextNumRef($object->thirdparty);
1982 $newref = $object->ref;
1989 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
1990 if (isModEnabled(
'notification')) {
1991 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1992 $notify =
new Notify($db);
1994 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE', $object->socid, $object);
1997 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
2002 if ($action ==
'approve' || $action ==
'approve2') {
2003 $qualified_for_stock_change = 0;
2005 $qualified_for_stock_change = $object->hasProductsOrServices(2);
2007 $qualified_for_stock_change = $object->hasProductsOrServices(1);
2010 $formquestion = array();
2011 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
2012 $langs->load(
"stocks");
2013 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2016 if ($conf->browser->name ==
'ie') {
2019 $formquestion = array(
2023 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOST(
'idwarehouse',
'int'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2026 $text = $langs->trans(
"ConfirmApproveThisOrder", $object->ref);
2027 if (isModEnabled(
'notification')) {
2028 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2029 $notify =
new Notify($db);
2031 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE', $object->socid, $object);
2034 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
2038 if ($action ==
'refuse') {
2039 $formquestion = array(
2042 'name' =>
'refuse_note',
2043 'label' => $langs->trans(
"Reason"),
2045 'morecss' =>
'minwidth300'
2048 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder", $object->ref),
"confirm_refuse", $formquestion, 0, 1);
2052 if ($action ==
'cancel') {
2053 $formquestion = array(
2056 'name' =>
'cancel_note',
2057 'label' => $langs->trans(
"Reason"),
2059 'morecss' =>
'minwidth300'
2062 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder", $object->ref),
"confirm_cancel", $formquestion, 0, 1);
2066 if ($action ==
'commande') {
2068 if (!empty($conf->notification->enabled)) {
2069 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2070 $notify =
new Notify($db);
2072 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT', $object->socid, $object);
2074 $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);
2078 if ($action ==
'ask_deleteline') {
2079 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2082 $parameters = array(
'formConfirm' => $formconfirm,
'lineid'=>$lineid);
2083 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
2084 if (empty($reshook)) {
2085 $formconfirm .= $hookmanager->resPrint;
2086 } elseif ($reshook > 0) {
2087 $formconfirm = $hookmanager->resPrint;
2096 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2098 $morehtmlref =
'<div class="refidno">';
2100 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $usercancreate,
'string',
'', 0, 1);
2101 $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);
2103 $morehtmlref .=
'<br>';
2104 if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2105 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
2106 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2107 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2108 $filter =
'(s.fournisseur:=:1)';
2109 $morehtmlref .= $form->select_company($object->thirdparty->id,
'new_socid', $filter,
'', 0, 0, array(), 0,
'minwidth300');
2110 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2111 $morehtmlref .=
'</form>';
2113 if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action !=
'edit_thirdparty') {
2115 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2117 $morehtmlref .= $object->thirdparty->getNomUrl(1,
'supplier');
2119 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.$object->thirdparty->id.
'&search_company='.urlencode($object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2124 if (isModEnabled(
'project')) {
2125 $langs->load(
"projects");
2126 $morehtmlref .=
'<br>';
2127 if ($permissiontoadd) {
2128 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2129 if ($action !=
'classify' && $caneditproject) {
2130 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2132 $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');
2134 if (!empty($object->fk_project)) {
2136 $proj->fetch($object->fk_project);
2137 $morehtmlref .= $proj->getNomUrl(1);
2139 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2144 $morehtmlref .=
'</div>';
2147 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2150 $parameters = array();
2152 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters, $object, $action);
2153 if (empty($reshook)) {
2154 print
'<div class="fichecenter">';
2155 print
'<div class="fichehalfleft">';
2156 print
'<div class="underbanner clearboth"></div>';
2158 print
'<table class="border tableforfield centpercent">';
2161 if ($object->methode_commande_id > 0) {
2166 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2167 print $object->date_commande ?
dol_print_date($object->date_commande, $usehourmin ?
'dayhour' :
'day') :
'';
2168 if ($object->hasDelay() && !empty($object->delivery_date) && !empty($object->date_commande)) {
2169 print
' '.img_picto($langs->trans(
"Late").
' : '.$object->showDelay(),
"warning");
2173 if ($object->methode_commande) {
2174 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.$object->getInputMethod().
'</td></tr>';
2179 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2180 print
'<td>'.$author->getNomUrl(-1,
'', 0, 0, 0).
'</td>';
2185 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2186 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2188 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2189 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2192 $absolute_discount = $societe->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
2193 $absolute_creditnote = $societe->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
2194 $absolute_discount =
price2num($absolute_discount,
'MT');
2195 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2197 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2199 $thirdparty = $societe;
2201 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.$object->id);
2202 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2207 $langs->load(
'bills');
2208 print
'<tr><td class="nowrap">';
2209 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2210 print $langs->trans(
'PaymentConditions');
2212 if ($action !=
'editconditions') {
2213 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>';
2215 print
'</tr></table>';
2217 if ($action ==
'editconditions') {
2218 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'cond_reglement_id');
2220 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'none');
2226 $langs->load(
'bills');
2227 print
'<tr><td class="nowrap">';
2228 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2229 print $langs->trans(
'PaymentMode');
2231 if ($action !=
'editmode') {
2232 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>';
2234 print
'</tr></table>';
2236 if ($action ==
'editmode') {
2237 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2239 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'none');
2244 if (isModEnabled(
"multicurrency")) {
2248 print
'<table class="nobordernopadding centpercent"><tr><td>';
2249 print $form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
2251 if ($action !=
'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT) {
2252 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>';
2254 print
'</tr></table>';
2256 if ($action ==
'editmulticurrencycode') {
2257 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'multicurrency_code');
2259 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'none');
2264 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
2267 print
'<table class="nobordernopadding centpercent"><tr>';
2269 print $form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
2271 if ($action !=
'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
2272 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>';
2274 print
'</tr></table>';
2276 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
2277 if ($action ==
'actualizemulticurrencyrate') {
2280 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'multicurrency_tx', $object->multicurrency_code);
2282 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'none', $object->multicurrency_code);
2283 if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
2284 print
'<div class="inline-block"> ';
2285 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
2294 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"banque")) {
2295 print
'<tr><td class="nowrap">';
2296 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2297 print $langs->trans(
'BankAccount');
2299 if ($action !=
'editbankaccount' && $usercancreate) {
2300 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>';
2302 print
'</tr></table>';
2304 if ($action ==
'editbankaccount') {
2305 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'fk_account', 1);
2307 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'none');
2315 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2316 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2321 print
'<table class="nobordernopadding centpercent"><tr><td>';
2322 print $langs->trans(
'DateDeliveryPlanned');
2324 if ($action !=
'editdate_livraison') {
2325 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>';
2327 print
'</tr></table>';
2329 if ($action ==
'editdate_livraison') {
2330 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
2331 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2332 print
'<input type="hidden" name="action" value="setdate_livraison">';
2337 print $form->selectDate($object->delivery_date ? $object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin,
'',
"setdate_livraison");
2338 print
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
2341 $usehourmin =
'day';
2343 $usehourmin =
'dayhour';
2345 print $object->delivery_date ?
dol_print_date($object->delivery_date, $usehourmin) :
' ';
2346 if ($object->hasDelay() && !empty($object->delivery_date) && ($object->statut == $object::STATUS_ORDERSENT || $object->statut == $object::STATUS_RECEIVED_PARTIALLY)) {
2347 print
' '.img_picto($langs->trans(
"Late").
' : '.$object->showDelay(),
"warning");
2353 if (isModEnabled(
'incoterm')) {
2355 print
'<table class="nobordernopadding centpercent"><tr><td>';
2356 print $langs->trans(
'IncotermLabel');
2357 print
'<td><td class="right">';
2358 if ($usercancreate) {
2359 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.$object->id.
'&action=editincoterm&token='.newToken().
'">'.
img_edit().
'</a>';
2363 print
'</td></tr></table>';
2366 if ($action !=
'editincoterm') {
2367 print $form->textwithpicto(
dol_escape_htmltag($object->display_incoterms()), $object->label_incoterms, 1);
2369 print $form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms :
''), (!empty($object->location_incoterms) ? $object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.$object->id);
2375 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2380 print
'<div class="fichehalfright">';
2381 print
'<div class="underbanner clearboth"></div>';
2383 print
'<table class="border tableforfield centpercent">';
2387 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2388 print
'<td class="nowrap amountcard right">' .
price($object->total_ht,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
2389 if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
2391 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_ht,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
2397 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2398 print
'<td class="nowrap amountcard right">' .
price($object->total_tva,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
2399 if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
2401 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_tva,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
2406 if ($mysoc->localtax1_assuj ==
"1" || $object->total_localtax1 != 0) {
2408 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
2409 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax1,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
2410 if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
2411 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax1,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
2415 if ($mysoc->localtax2_assuj ==
"1" || $object->total_localtax2 != 0) {
2417 print
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
2418 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax2,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
2419 if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
2420 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax2,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
2427 if (
getDolGlobalString(
'ORDER_MANAGE_MIN_AMOUNT') && $object->total_ht < $object->thirdparty->supplier_order_min_amount) {
2428 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price($object->thirdparty->supplier_order_min_amount));
2433 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2434 print
'<td class="nowrap amountcard right">' .
price($object->total_ttc,
'', $langs, 0, -1, -1, $conf->currency) . $alert .
'</td>';
2435 if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
2437 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_ttc,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
2452 print
'<div class="clearboth"></div><br>';
2455 $blocname =
'contacts';
2456 $title = $langs->trans(
'ContactsAddresses');
2457 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2461 $blocname =
'notes';
2462 $title = $langs->trans(
'Notes');
2463 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2472 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOST(
'lineid',
'int')).
'" method="POST">
2473 <input type="hidden" name="token" value="'.newToken().
'">
2474 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2475 <input type="hidden" name="mode" value="">
2476 <input type="hidden" name="page_y" value="">
2477 <input type="hidden" name="id" value="'.$object->id.
'">
2478 <input type="hidden" name="socid" value="'.$societe->id.
'">
2481 if (!empty($conf->use_javascript_ajax) && $object->statut == 0) {
2482 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2485 print
'<div class="div-table-responsive-no-min">';
2486 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2489 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2492 $inputalsopricewithtax = 1;
2493 $senderissupplier = 2;
2495 $senderissupplier = 1;
2499 if (!empty($object->lines)) {
2500 $object->printObjectLines($action, $object->thirdparty, $mysoc, $lineid, 1);
2503 $num = count($object->lines);
2507 if ($action !=
'editline') {
2510 $parameters = array();
2511 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2515 if (empty($reshook)) {
2516 $object->formAddObjectLine(1, $societe, $mysoc);
2531 if ($user->socid == 0 && $action !=
'delete') {
2532 if ($action !=
'createorder' && $action !=
'presend' && $action !=
'editline') {
2533 print
'<div class="tabsAction">';
2535 $parameters = array();
2536 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2538 if (empty($reshook)) {
2539 $object->fetchObjectLinked();
2542 if ($object->statut == 0 && $num > 0) {
2543 if ($usercanvalidate) {
2544 $tmpbuttonlabel = $langs->trans(
'Validate');
2546 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2549 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=valid">';
2550 print $tmpbuttonlabel;
2562 if ($usercanorder) {
2563 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2569 if ($usercanapprove) {
2570 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)) {
2571 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2573 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2576 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2581 if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) {
2583 if ($usercanapprovesecond) {
2584 if (!empty($object->user_approve_id2)) {
2585 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2587 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2590 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2597 if ($usercanapprove || $usercanapprovesecond) {
2598 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2600 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2605 if (empty($user->socid)) {
2607 if ($usercanorder) {
2608 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
2616 if (!$buttonshown && $usercanapprove) {
2618 || (
getDolGlobalString(
'SUPPLIER_ORDER_REOPEN_BY_APPROVER_ONLY') && $user->id == $object->user_approve_id)) {
2619 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2623 if (!$buttonshown && $usercanapprovesecond &&
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
2625 || (
getDolGlobalString(
'SUPPLIER_ORDER_REOPEN_BY_APPROVER2_ONLY') && $user->id == $object->user_approve_id2)) {
2626 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2630 if (in_array($object->statut, array(3, 4, 5, 6, 7, 9))) {
2631 if ($usercanorder) {
2632 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2639 $labelofbutton = $langs->trans(
'ReceiveProducts');
2640 if (isModEnabled(
'reception')) {
2641 $labelofbutton = $langs->trans(
"CreateReception");
2642 if (!empty($object->linkedObjects[
'reception'])) {
2643 foreach ($object->linkedObjects[
'reception'] as $element) {
2644 if ($element->statut >= 0) {
2652 if (in_array($object->statut, array(3, 4, 5))) {
2653 if (isModEnabled(
"supplier_order") && $usercanreceive) {
2654 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.$object->id.
'">'.$labelofbutton.
'</a></div>';
2656 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
2662 if ($usercanorder) {
2663 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=createorder#makeorder">'.$langs->trans(
"MakeOrder").
'</a></div>';
2665 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
2671 if ($usercanreceive) {
2672 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>';
2679 if (isModEnabled(
"supplier_invoice") && ($object->statut >= 2 && $object->statut != 7 && $object->billed != 1)) {
2680 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2681 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>';
2687 if ($usercancreate && $object->statut >= 2 && $object->statut != 7 && $object->billed != 1) {
2688 if (!isModEnabled(
'facture')) {
2689 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=classifybilled&token='.newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2691 if (!empty($object->linkedObjectsIds[
'invoice_supplier'])) {
2692 if ($user->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
"supplier_invoice",
"creer")) {
2693 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=classifybilled&token='.newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2696 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2702 if (!empty($conf->syncsupplierwebservices->enabled) && $object->statut >= 2) {
2703 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=webservice&token='.newToken().
'&mode=init">'.$langs->trans(
'CreateRemoteOrder').
'</a>';
2707 if ($usercancreate) {
2708 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&socid='.$object->socid.
'&action=clone&object=order">'.$langs->trans(
"ToClone").
'</a>';
2713 if ($usercanorder) {
2714 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=cancel">'.$langs->trans(
"CancelOrder").
'</a>';
2719 if (!empty($usercandelete)) {
2720 if ($hasreception) {
2721 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
2723 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2733 print
'<!-- form to record supplier order -->'.
"\n";
2734 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
2736 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2737 print
'<input type="hidden" name="action" value="commande">';
2739 print
'<table class="noborder centpercent">';
2741 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
2742 $date_com =
dol_mktime(
GETPOST(
'rehour',
'int'),
GETPOST(
'remin',
'int'),
GETPOST(
'resec',
'int'),
GETPOST(
'remonth',
'int'),
GETPOST(
'reday',
'int'),
GETPOST(
'reyear',
'int'));
2743 print $form->selectDate($date_com ?:
'',
'', 0, 0,
'',
"commande", 1, 1);
2747 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
2748 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
2751 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
2753 print
'<tr><td class="center" colspan="2">';
2754 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
2755 print
' ';
2756 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2765 if (
GETPOST(
'modelselected')) {
2766 $action =
'presend';
2769 if ($action !=
'createorder' && $action !=
'presend') {
2770 print
'<div class="fichecenter"><div class="fichehalfleft">';
2774 $file = $conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
2775 $relativepath = $objref.
'/'.$objref.
'.pdf';
2776 $filedir = $conf->fournisseur->dir_output.
'/commande/'.$objref;
2777 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".$object->id;
2778 $genallowed = $usercanread;
2779 $delallowed = $usercancreate;
2780 $modelpdf = (!empty($object->model_pdf) ? $object->model_pdf : (!
getDolGlobalString(
'COMMANDE_SUPPLIER_ADDON_PDF') ?
'' : $conf->global->COMMANDE_SUPPLIER_ADDON_PDF));
2782 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'', $object->thirdparty->default_lang,
'', $object);
2783 $somethingshown = $formfile->numoffiles;
2786 $linktoelem = $form->showLinkToObjectBlock($object,
null, array(
'supplier_order',
'order_supplier'));
2787 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2789 print
'</div><div class="fichehalfright">';
2791 if ($action ==
'classifyreception') {
2794 print
'<!-- form to record purchase order received -->'.
"\n";
2795 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
2796 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2797 print
'<input type="hidden" name="action" value="livraison">';
2800 print
'<table class="noborder centpercent">';
2802 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
2804 print $form->selectDate($datepreselected,
'', 1, 1,
'',
"commande", 1, 1);
2805 print
"</td></tr>\n";
2807 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
2809 $liv[
''] =
' ';
2810 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
2811 $liv[
'par'] = $langs->trans(
"PartialWoman");
2812 $liv[
'nev'] = $langs->trans(
"NeverReceived");
2813 $liv[
'can'] = $langs->trans(
"Canceled");
2815 print $form->selectarray(
"type", $liv);
2818 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
2819 print
'<tr><td class="center" colspan="2">';
2820 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
2821 print
' ';
2822 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2831 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2833 $somethingshown =
$formactions->showactions($object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
2835 print
'</div></div>';
2841 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
2842 $mode =
GETPOST(
'mode',
'alpha');
2843 $ws_url = $object->thirdparty->webservices_url;
2844 $ws_key = $object->thirdparty->webservices_key;
2845 $ws_user =
GETPOST(
'ws_user',
'alpha');
2846 $ws_password =
GETPOST(
'ws_password',
'alpha');
2849 $ws_ns =
'http://www.dolibarr.org/ns/';
2850 $ws_authentication = array(
2851 'dolibarrkey'=>$ws_key,
2852 'sourceapplication'=>
'DolibarrWebServiceClient',
2854 'password'=>$ws_password,
2861 if (empty($ws_url) || empty($ws_key)) {
2862 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
2864 $error_occurred =
true;
2865 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
2870 if ($mode ==
"init") {
2872 print
'<table class="border centpercent">';
2873 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
2874 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2875 print
'<input type="hidden" name="action" value="webservice">';
2876 print
'<input type="hidden" name="mode" value="check">';
2878 if ($error_occurred) {
2879 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2880 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2883 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
2885 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
2887 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
2889 print
'<tr><td class="center" colspan="2">';
2890 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
2891 print
' ';
2893 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2900 } elseif ($mode ==
"check") {
2902 $ws_thirdparty =
'';
2903 $error_occurred =
false;
2906 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
2907 $soapclient_user->soap_defencoding =
'UTF-8';
2908 $soapclient_user->decodeUTF8(
false);
2911 $ws_parameters = array(
'authentication'=>$ws_authentication,
'id' =>
'',
'ref'=>$ws_user);
2912 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
2913 $user_status_code = $result_user[
"result"][
"result_code"];
2915 if ($user_status_code ==
"OK") {
2917 $ws_entity = $result_user[
"user"][
"entity"];
2918 $ws_authentication[
'entity'] = $ws_entity;
2919 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
2920 if (empty($ws_thirdparty)) {
2921 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
2922 $error_occurred =
true;
2925 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
2926 $soapclient_product->soap_defencoding =
'UTF-8';
2927 $soapclient_product->decodeUTF8(
false);
2931 foreach ($object->lines as $line) {
2933 $ref_supplier = $line->ref_supplier;
2934 $line_id = $i.
"º) ".$line->product_ref.
": ";
2935 if (empty($ref_supplier)) {
2938 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
2939 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
2940 if (!$result_product) {
2941 setEventMessages($line_id.$langs->trans(
"SOAPError").
" ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
2942 $error_occurred =
true;
2947 $status_code = $result_product[
"result"][
"result_code"];
2948 if (empty($status_code)) {
2949 setEventMessages($langs->trans(
"SOAPError").
" '".$soapclient_order->error_str.
"'",
null,
'errors');
2950 } elseif ($status_code !=
"OK") {
2951 if ($status_code ==
"NOT_FOUND") {
2952 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
2954 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
2955 $error_occurred =
true;
2962 $supplier_price =
price($result_product[
"product"][
"price_net"]);
2963 $local_price =
null;
2966 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
2967 if (count($product_fourn_list) > 0) {
2968 foreach ($product_fourn_list as $product_fourn_line) {
2970 if ($product_fourn_line->fourn_id == $object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
2971 $local_price =
price($product_fourn_line->fourn_price);
2976 if ($local_price !=
null && $local_price != $supplier_price) {
2977 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
2981 if (empty($result_product[
"product"][
"status_tosell"])) {
2982 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
2986 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
2987 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
2988 $error_occurred =
true;
2989 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
2990 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
2991 $error_occurred =
true;
2993 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
2994 $error_occurred =
true;
2998 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
2999 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3000 print
'<input type="hidden" name="action" value="webservice">';
3001 print
'<input type="hidden" name="mode" value="send">';
3002 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
3003 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
3004 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
3005 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
3006 if ($error_occurred) {
3007 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
3009 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
3010 print
' ';
3012 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
3018 $modelmail =
'order_supplier_send';
3019 $defaulttopic =
'SendOrderRef';
3020 $diroutput = $conf->fournisseur->commande->dir_output;
3021 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
3022 $trackid =
'sord'.$object->id;
3024 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif( $action=='specimen') elseif($action=='setmodel') elseif( $action=='del') elseif($action=='setdoc') $formactions
View.
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 notifications.
Class ProductCombination Used to represent a product combination.
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_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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 formated 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.
get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="", $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier 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...
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...
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall right right takeposterminal SELECT e rowid
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.