41require
'../main.inc.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formorder.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmargin.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/lib/order.lib.php';
51require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
52require_once DOL_DOCUMENT_ROOT.
'/commande/class/commande.class.php';
54if (isModEnabled(
"propal")) {
55 require_once DOL_DOCUMENT_ROOT.
'/comm/propal/class/propal.class.php';
58if (isModEnabled(
'project')) {
59 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
60 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
63if (isModEnabled(
'variants')) {
64 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
78$langs->loadLangs(array(
'orders',
'sendings',
'companies',
'bills',
'propal',
'deliveries',
'products',
'other'));
80if (isModEnabled(
'incoterm')) {
81 $langs->load(
'incoterm');
83if (isModEnabled(
'margin')) {
84 $langs->load(
'margins');
86if (isModEnabled(
'productbatch')) {
87 $langs->load(
'productbatch');
94$action =
GETPOST(
'action',
'aZ09');
95$cancel =
GETPOST(
'cancel',
'alpha');
96$confirm =
GETPOST(
'confirm',
'alpha');
97$backtopage =
GETPOST(
'backtopage',
'alpha');
102$origin =
GETPOST(
'origin',
'alpha');
112if (!empty($user->socid)) {
113 $socid = $user->socid;
118$price_base_type =
null;
119$lineClassName =
null;
120$remise_percent =
null;
122$availability_id =
null;
123$shipping_method_id =
null;
125$demand_reason_id =
null;
132$hookmanager->initHooks(array(
'ordercard',
'globalcard'));
140$extrafields->fetch_name_optionals_label(
$object->table_element);
143include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
146$usercanread = $user->hasRight(
"commande",
"lire");
147$usercancreate = $user->hasRight(
"commande",
"creer");
148$usercandelete = $user->hasRight(
"commande",
"supprimer");
151$usercanclose = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'commande',
'order_advance',
'close')));
152$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'commande',
'order_advance',
'validate')));
153$usercancancel = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'commande',
'order_advance',
'annuler')));
154$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'commande',
'order_advance',
'send'));
155$usercangeneretedoc = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'commande',
'order_advance',
'generetedoc'));
157$usermustrespectpricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance')) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
158$usercancreatepurchaseorder = ($user->hasRight(
'fournisseur',
'commande',
'creer') || $user->hasRight(
'supplier_order',
'creer'));
160$permissionnote = $usercancreate;
161$permissiondellink = $usercancreate;
162$permissiontoadd = $usercancreate;
169$selectedLines = array();
176$parameters = array(
'socid' => $socid);
178$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
183if (empty($reshook)) {
184 $backurlforlist = DOL_URL_ROOT.
'/commande/list.php';
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.
'/commande/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
196 $selectedLines =
GETPOST(
'toselect',
'array');
199 if (!empty($backtopageforcancel)) {
200 header(
"Location: ".$backtopageforcancel);
202 } elseif (!empty($backtopage)) {
203 header(
"Location: ".$backtopage);
209 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
211 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
213 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
216 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
218 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'IdThirdParty')),
null,
'errors');
224 $result =
$object->createFromClone($user, $socid);
226 $warningMsgLineList = array();
228 foreach (
$object->lines as $line) {
229 if (!is_object($line->product)) {
230 $line->fetch_product();
232 if (is_object($line->product) && $line->product->id > 0) {
233 if (empty($line->product->status)) {
234 $warningMsgLineList[$line->id] = $langs->trans(
'WarningLineProductNotToSell', $line->product->ref);
238 if (!empty($warningMsgLineList)) {
242 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
251 } elseif ($action ==
'reopen' && $usercancreate) {
256 $result =
$object->setDraft($user, $idwarehouse);
261 $result =
$object->set_reopen($user);
269 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
271 $result =
$object->delete($user);
273 header(
'Location: list.php?restore_lastsearch_values=1');
278 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
280 $result =
$object->deleteLine($user, $lineid);
285 $outputlangs = $langs;
288 $newlang =
GETPOST(
'lang_id',
'aZ09');
291 $newlang =
$object->thirdparty->default_lang;
293 if (!empty($newlang)) {
295 $outputlangs->setDefaultLang($newlang);
299 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
302 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
307 } elseif ($action ==
'classin' && $usercancreate) {
310 } elseif ($action ==
'add' && $usercancreate) {
315 if ($datecommande ==
'') {
316 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Date')),
null,
'errors');
322 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Customer")),
null,
'errors');
333 $object->date_commande = $datecommande;
346 $object->delivery_date = $date_delivery;
352 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
353 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
357 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
364 if (!empty($origin) && !empty($originid)) {
366 $element = $subelement = $origin;
368 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
369 $element = $regs [1];
370 $subelement = $regs [2];
374 if ($element ==
'order') {
375 $element = $subelement =
'commande';
377 if ($element ==
'propal') {
378 $element =
'comm/propal';
379 $subelement =
'propal';
381 if ($element ==
'contract') {
382 $element = $subelement =
'contrat';
386 $object->origin_id = $originid;
390 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
391 if (!empty($other_linked_objects)) {
392 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
396 $object_id =
$object->create($user);
398 if ($object_id > 0) {
401 $classname = ucfirst($subelement);
402 $srcobject =
new $classname($db);
403 '@phan-var-force Commande|Propal|Contrat $srcobject';
406 $result = $srcobject->fetch(
$object->origin_id);
408 $lines = $srcobject->lines;
409 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
410 $srcobject->fetch_lines();
411 $lines = $srcobject->lines;
415 $num = count($lines);
417 for ($i = 0; $i < $num; $i++) {
418 if (!in_array($lines[$i]->
id, $selectedLines)) {
422 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
423 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
424 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
428 $date_start = $lines[$i]->date_debut_prevue;
429 if ($lines[$i]->date_debut_reel) {
430 $date_start = $lines[$i]->date_debut_reel;
432 if ($lines[$i]->date_start) {
433 $date_start = $lines[$i]->date_start;
435 $date_end = $lines[$i]->date_fin_prevue;
436 if ($lines[$i]->date_fin_reel) {
437 $date_end = $lines[$i]->date_fin_reel;
439 if ($lines[$i]->date_end) {
440 $date_end = $lines[$i]->date_end;
444 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
449 if (method_exists($lines[$i],
'fetch_optionals')) {
450 $lines[$i]->fetch_optionals();
451 $array_options = $lines[$i]->array_options;
454 $tva_tx = $lines[$i]->tva_tx;
455 if (!empty($lines[$i]->vat_src_code) && !preg_match(
'/\(/', $tva_tx)) {
456 $tva_tx .=
' ('.$lines[$i]->vat_src_code.
')';
461 $lines[$i]->subprice,
464 $lines[$i]->localtax1_tx,
465 $lines[$i]->localtax2_tx,
466 $lines[$i]->fk_product,
467 $lines[$i]->remise_percent,
468 $lines[$i]->info_bits,
469 $lines[$i]->fk_remise_except,
476 $lines[$i]->special_code,
478 $lines[$i]->fk_fournprice,
493 if ($result > 0 && $lines[$i]->product_type == 9) {
494 $fk_parent_line = $result;
529 $parameters = array(
'objFrom' => $srcobject);
531 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters,
$object, $action);
546 $object_id =
$object->create($user);
551 if ($object_id > 0) {
565 if ($object_id > 0 && !$error) {
567 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object_id);
575 } elseif ($action ==
'classifybilled' && $usercancreate) {
576 $ret =
$object->classifyBilled($user);
581 } elseif ($action ==
'classifyunbilled' && $usercancreate) {
582 $ret =
$object->classifyUnBilled($user);
586 } elseif ($action ==
'setref_client' && $usercancreate) {
592 } elseif ($action ==
'setremise' && $usercancreate) {
597 } elseif ($action ==
'setabsolutediscount' && $usercancreate) {
605 } elseif ($action ==
'setdate' && $usercancreate) {
608 $result =
$object->set_date($user, $date);
612 } elseif ($action ==
'setdate_livraison' && $usercancreate) {
616 $result =
$object->setDeliveryDate($user, $date_delivery);
620 } elseif ($action ==
'setmode' && $usercancreate) {
625 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
627 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
628 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
631 } elseif ($action ==
'setavailability' && $usercancreate) {
636 } elseif ($action ==
'setdemandreason' && $usercancreate) {
641 } elseif ($action ==
'setconditions' && $usercancreate) {
648 $outputlangs = $langs;
649 $newlang =
GETPOST(
'lang_id',
'alpha');
651 $newlang =
$object->thirdparty->default_lang;
653 if (!empty($newlang)) {
655 $outputlangs->setDefaultLang($newlang);
659 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
662 } elseif ($action ==
'set_incoterms' && isModEnabled(
'incoterm') && $usercancreate) {
668 } elseif ($action ==
'setbankaccount' && $usercancreate) {
674 } elseif ($action ==
'setshippingmethod' && $usercancreate) {
680 } elseif ($action ==
'setwarehouse' && $usercancreate) {
690 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
694 foreach (
$object->lines as $line) {
695 if ($line->product_type == 1) {
696 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
'HT', $line->info_bits, $alldate_start, $alldate_end, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
699 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'alpha') &&
GETPOST(
'vatforalllines',
'alpha') !==
'' && $usercancreate) {
701 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
702 $vat_rate = str_replace(
'*',
'', $vat_rate);
705 foreach (
$object->lines as $line) {
706 $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->date_start, $line->date_end, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
708 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'alpha') &&
GETPOST(
'remiseforalllines',
'alpha') !==
'' && $usercancreate) {
710 $remise_percent = (
GETPOST(
'remiseforalllines') ?
GETPOST(
'remiseforalllines') : 0);
711 $remise_percent = str_replace(
'*',
'', $remise_percent);
712 foreach (
$object->lines as $line) {
713 $tvatx = $line->tva_tx;
714 if (!empty($line->vat_src_code)) {
715 $tvatx .=
' ('.$line->vat_src_code.
')';
717 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $remise_percent, $tvatx, $line->localtax1_tx, $line->localtax2_tx,
'HT', $line->info_bits, $line->date_start, $line->date_end, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->special_code, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
719 } elseif ($action ==
'addline' && !
GETPOST(
'submitforalllines',
'alpha') && $usercancreate) {
720 $langs->load(
'errors');
725 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
728 $price_ht_devise =
'';
730 $price_ttc_devise =
'';
736 if (
GETPOST(
'price_ht') !==
'') {
739 if (
GETPOST(
'multicurrency_price_ht') !==
'') {
742 if (
GETPOST(
'price_ttc') !==
'') {
745 if (
GETPOST(
'multicurrency_price_ttc') !==
'') {
749 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
750 if ($prod_entry_mode ==
'free') {
756 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
761 $tva_tx =
GETPOST(
'tva_tx',
'alpha');
765 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
766 if (empty($remise_percent)) {
771 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
772 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
774 if (is_array($extralabelsline)) {
776 foreach ($extralabelsline as $key => $value) {
777 unset($_POST[
"options_".$key]);
781 if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) {
782 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
785 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
786 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
789 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && $price_ht ===
'' && $price_ht_devise ===
'' && $price_ttc ===
'' && $price_ttc_devise ===
'') {
790 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
794 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
798 setEventMessages($langs->trans(
'FieldCannotBeNegative', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
801 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
802 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
806 if (!$error && isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
807 if ($combinations =
GETPOST(
'combinations',
'array')) {
811 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
812 $idprod = $res->fk_product_child;
814 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
820 if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
824 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
826 $price_min = $price_min_ttc = 0;
832 if (!empty($idprod) && $idprod > 0) {
834 $prod->fetch($idprod);
836 $label = ((
GETPOST(
'product_label') &&
GETPOST(
'product_label') != $prod->label) ?
GETPOST(
'product_label') :
'');
845 $pu_ht = $prod->price;
846 $pu_ttc = $prod->price_ttc;
847 $price_min = $prod->price_min;
848 $price_min_ttc = $prod->price_min_ttc;
849 $price_base_type = $prod->price_base_type;
853 require_once DOL_DOCUMENT_ROOT.
'/product/class/productcustomerprice.class.php';
857 $filter = array(
't.fk_product' => $prod->id,
't.fk_soc' =>
$object->thirdparty->id);
860 $pricebycustomerexist =
false;
861 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
863 if (count($prodcustprice->lines) > 0) {
864 $pricebycustomerexist =
true;
865 $pu_ht =
price($prodcustprice->lines[0]->price);
866 $pu_ttc =
price($prodcustprice->lines[0]->price_ttc);
867 $price_min =
price($prodcustprice->lines[0]->price_min);
868 $price_min_ttc =
price($prodcustprice->lines[0]->price_min_ttc);
869 $price_base_type = $prodcustprice->lines[0]->price_base_type;
870 $tva_tx = $prodcustprice->lines[0]->tva_tx;
871 if ($prodcustprice->lines[0]->default_vat_code && !preg_match(
'/\(.*\)/', (
string) $tva_tx)) {
872 $tva_tx .=
' ('.$prodcustprice->lines[0]->default_vat_code.
')';
874 $tva_npr = $prodcustprice->lines[0]->recuperableonly;
875 if (empty($tva_tx)) {
883 if (!$pricebycustomerexist && !empty(
$object->thirdparty->price_level)) {
884 $pu_ht = $prod->multiprices[
$object->thirdparty->price_level];
885 $pu_ttc = $prod->multiprices_ttc[
$object->thirdparty->price_level];
886 $price_min = $prod->multiprices_min[
$object->thirdparty->price_level];
887 $price_min_ttc = $prod->multiprices_min_ttc[
$object->thirdparty->price_level];
888 $price_base_type = $prod->multiprices_base_type[
$object->thirdparty->price_level];
890 if (isset($prod->multiprices_tva_tx[
$object->thirdparty->price_level])) {
891 $tva_tx = $prod->multiprices_tva_tx[
$object->thirdparty->price_level];
893 if (isset($prod->multiprices_recuperableonly[
$object->thirdparty->price_level])) {
894 $tva_npr = $prod->multiprices_recuperableonly[
$object->thirdparty->price_level];
901 $pu_ht = $prod->multiprices[
$object->thirdparty->price_level];
902 $pu_ttc = $prod->multiprices_ttc[
$object->thirdparty->price_level];
903 $price_min = $prod->multiprices_min[
$object->thirdparty->price_level];
904 $price_min_ttc = $prod->multiprices_min_ttc[
$object->thirdparty->price_level];
905 $price_base_type = $prod->multiprices_base_type[
$object->thirdparty->price_level];
907 if (isset($prod->multiprices_tva_tx[
$object->thirdparty->price_level])) {
908 $tva_tx = $prod->multiprices_tva_tx[
$object->thirdparty->price_level];
910 if (isset($prod->multiprices_recuperableonly[
$object->thirdparty->price_level])) {
911 $tva_npr = $prod->multiprices_recuperableonly[
$object->thirdparty->price_level];
916 require_once DOL_DOCUMENT_ROOT.
'/product/class/productcustomerprice.class.php';
920 $filter = array(
't.fk_product' => $prod->id,
't.fk_soc' =>
$object->thirdparty->id);
922 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
924 if (count($prodcustprice->lines) > 0) {
925 $pu_ht =
price($prodcustprice->lines[0]->price);
926 $pu_ttc =
price($prodcustprice->lines[0]->price_ttc);
927 $price_min =
price($prodcustprice->lines[0]->price_min);
928 $price_min_ttc =
price($prodcustprice->lines[0]->price_min_ttc);
929 $price_base_type = $prodcustprice->lines[0]->price_base_type;
930 $tva_tx = $prodcustprice->lines[0]->tva_tx;
931 if ($prodcustprice->lines[0]->default_vat_code && !preg_match(
'/\(.*\)/', $tva_tx)) {
932 $tva_tx .=
' ('.$prodcustprice->lines[0]->default_vat_code.
')';
934 $tva_npr = $prodcustprice->lines[0]->recuperableonly;
935 if (empty($tva_tx)) {
944 if ($prod->prices_by_qty[0]) {
949 foreach ($prod->prices_by_qty_list[0] as $priceforthequantityarray) {
950 if ($priceforthequantityarray[
'rowid'] != $pqp) {
954 if ($priceforthequantityarray[
'price_base_type'] ==
'HT') {
955 $pu_ht = $priceforthequantityarray[
'unitprice'];
957 $pu_ttc = $priceforthequantityarray[
'unitprice'];
965 if ($prod->prices_by_qty[
$object->thirdparty->price_level]) {
969 foreach ($prod->prices_by_qty_list[
$object->thirdparty->price_level] as $priceforthequantityarray) {
970 if ($priceforthequantityarray[
'rowid'] != $pqp) {
974 if ($priceforthequantityarray[
'price_base_type'] ==
'HT') {
975 $pu_ht = $priceforthequantityarray[
'unitprice'];
977 $pu_ttc = $priceforthequantityarray[
'unitprice'];
985 $tmpvat = (float)
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
986 $tmpprodvat = (float)
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $prod->tva_tx));
989 if (!empty($price_ht) || $price_ht ===
'0') {
990 $pu_ht = (float)
price2num($price_ht,
'MU');
991 $pu_ttc = (float)
price2num((
float) $pu_ht * (1 + ($tmpvat / 100)),
'MU');
992 } elseif (!empty($price_ttc) || $price_ttc ===
'0') {
993 $pu_ttc = (float)
price2num($price_ttc,
'MU');
994 $pu_ht = (float)
price2num((
float) $pu_ttc / (1 + ($tmpvat / 100)),
'MU');
995 } elseif ($tmpvat != $tmpprodvat) {
997 if ($price_base_type !=
'HT') {
998 $pu_ht = (float)
price2num($pu_ttc / (1 + ($tmpvat / 100)),
'MU');
1000 $pu_ttc = (float)
price2num($pu_ht * (1 + ($tmpvat / 100)),
'MU');
1008 $outputlangs = $langs;
1010 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1011 $newlang =
GETPOST(
'lang_id',
'aZ09');
1013 if (empty($newlang)) {
1014 $newlang =
$object->thirdparty->default_lang;
1016 if (!empty($newlang)) {
1018 $outputlangs->setDefaultLang($newlang);
1021 $desc = (!empty($prod->multilangs[$outputlangs->defaultlang][
"description"])) ? $prod->multilangs[$outputlangs->defaultlang][
"description"] : $prod->
description;
1023 $desc = $prod->description;
1032 $desc = $product_desc;
1038 if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
1042 $outputlangs = $langs;
1044 if (empty($newlang) &&
GETPOST(
'lang_id',
'alpha')) {
1045 $newlang =
GETPOST(
'lang_id',
'alpha');
1047 if (empty($newlang)) {
1048 $newlang =
$object->thirdparty->default_lang;
1050 if (!empty($newlang)) {
1052 $outputlangs->setDefaultLang($newlang);
1053 $outputlangs->load(
'products');
1055 if (!empty($prod->customcode)) {
1056 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
1058 if (!empty($prod->customcode) && !empty($prod->country_code)) {
1061 if (!empty($prod->country_code)) {
1062 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $outputlangs, 0);
1065 if (!empty($prod->customcode)) {
1066 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
1068 if (!empty($prod->customcode) && !empty($prod->country_code)) {
1071 if (!empty($prod->country_code)) {
1072 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $langs, 0);
1079 $type = $prod->type;
1080 $fk_unit = $prod->fk_unit;
1084 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
1085 $tva_tx = str_replace(
'*',
'', $tva_tx);
1086 if (empty($tva_tx)) {
1089 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1090 $desc = $product_desc;
1092 $fk_unit =
GETPOST(
'units',
'alpha');
1093 $pu_ht_devise =
price2num($price_ht_devise,
'MU');
1094 $pu_ttc_devise =
price2num($price_ttc_devise,
'MU');
1096 if ($pu_ttc && !$pu_ht) {
1097 $price_base_type =
'TTC';
1115 $pu_equivalent = $pu_ht;
1116 $pu_equivalent_ttc = $pu_ttc;
1118 $currency_tx =
$object->multicurrency_tx;
1122 if ($pu_ht ==
'' && $pu_ht_devise !=
'' && $currency_tx !=
'') {
1123 $pu_equivalent = (float) $pu_ht_devise * (
float) $currency_tx;
1125 if ($pu_ttc ==
'' && $pu_ttc_devise !=
'' && $currency_tx !=
'') {
1126 $pu_equivalent_ttc = (float) $pu_ttc_devise * (
float) $currency_tx;
1143 if ($usermustrespectpricemin) {
1144 if ($pu_equivalent && $price_min && (((
float)
price2num($pu_equivalent) * (1 - $remise_percent / 100)) < (
float)
price2num($price_min)) && $price_base_type ==
'HT') {
1145 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1148 } elseif ($pu_equivalent_ttc && $price_min_ttc && (((
float)
price2num($pu_equivalent_ttc) * (1 - $remise_percent / 100)) < (
float)
price2num($price_min_ttc)) && $price_base_type ==
'TTC') {
1149 $mesg = $langs->trans(
"CantBeLessThanMinPriceInclTax",
price(
price2num($price_min_ttc,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1157 $result =
$object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, $idprod, $remise_percent, $info_bits, 0, $price_base_type, $pu_ttc, $date_start, $date_end, $type, min($rank, count(
$object->lines) + 1), 0,
GETPOST(
'fk_parent_line'), $fournprice, $buyingprice, $label, $array_options, $fk_unit,
'', 0, $pu_ht_devise);
1165 $outputlangs = $langs;
1166 $newlang =
GETPOST(
'lang_id',
'alpha');
1168 $newlang =
$object->thirdparty->default_lang;
1170 if (!empty($newlang)) {
1172 $outputlangs->setDefaultLang($newlang);
1175 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1178 unset($_POST[
'prod_entry_mode']);
1180 unset($_POST[
'qty']);
1181 unset($_POST[
'type']);
1182 unset($_POST[
'remise_percent']);
1183 unset($_POST[
'price_ht']);
1184 unset($_POST[
'multicurrency_price_ht']);
1185 unset($_POST[
'price_ttc']);
1186 unset($_POST[
'tva_tx']);
1187 unset($_POST[
'product_ref']);
1188 unset($_POST[
'product_label']);
1189 unset($_POST[
'product_desc']);
1190 unset($_POST[
'fournprice']);
1191 unset($_POST[
'buying_price']);
1192 unset($_POST[
'np_marginRate']);
1193 unset($_POST[
'np_markRate']);
1194 unset($_POST[
'dp_desc']);
1195 unset($_POST[
'idprod']);
1196 unset($_POST[
'units']);
1198 unset($_POST[
'date_starthour']);
1199 unset($_POST[
'date_startmin']);
1200 unset($_POST[
'date_startsec']);
1201 unset($_POST[
'date_startday']);
1202 unset($_POST[
'date_startmonth']);
1203 unset($_POST[
'date_startyear']);
1204 unset($_POST[
'date_endhour']);
1205 unset($_POST[
'date_endmin']);
1206 unset($_POST[
'date_endsec']);
1207 unset($_POST[
'date_endday']);
1208 unset($_POST[
'date_endmonth']);
1209 unset($_POST[
'date_endyear']);
1215 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'save')) {
1227 if (preg_match(
'/\*/',
GETPOST(
'tva_tx'))) {
1232 $vat_rate = (
GETPOST(
'tva_tx') ?
GETPOST(
'tva_tx',
'alpha') : 0);
1233 $vat_rate = str_replace(
'*',
'', $vat_rate);
1245 $pu_equivalent = $pu_ht;
1246 $pu_equivalent_ttc = $pu_ttc;
1248 $currency_tx =
$object->multicurrency_tx;
1252 if ($pu_ht ==
'' && $pu_ht_devise !=
'' && $currency_tx !=
'') {
1253 $pu_equivalent = (float) $pu_ht_devise * (
float) $currency_tx;
1255 if ($pu_ttc ==
'' && $pu_ttc_devise !=
'' && $currency_tx !=
'') {
1256 $pu_equivalent_ttc = (float) $pu_ttc_devise * (
float) $currency_tx;
1275 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1276 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1278 if (is_array($extralabelsline)) {
1279 foreach ($extralabelsline as $key => $value) {
1280 unset($_POST[
"options_".$key]);
1285 $special_code =
GETPOST(
'special_code');
1294 if (!empty($productid)) {
1296 $product->fetch($productid);
1298 $type = $product->type;
1300 $price_min = $product->price_min;
1302 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
1304 $price_min_ttc = $product->price_min_ttc;
1306 $price_min_ttc = $product->multiprices_min_ttc[
$object->thirdparty->price_level];
1312 if ($usermustrespectpricemin) {
1313 if ($pu_equivalent && $price_min && (((
float)
price2num($pu_equivalent) * (1 - $remise_percent / 100)) < (float)
price2num($price_min)) && $price_base_type ==
'HT') {
1314 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1317 $action =
'editline';
1318 } elseif ($pu_equivalent_ttc && $price_min_ttc && (((
float)
price2num($pu_equivalent_ttc) * (1 - $remise_percent / 100)) < (
float)
price2num($price_min_ttc)) && $price_base_type ==
'TTC') {
1319 $mesg = $langs->trans(
"CantBeLessThanMinPriceInclTax",
price(
price2num($price_min_ttc,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1322 $action =
'editline';
1327 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1331 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
1333 $action =
'editline';
1338 setEventMessages($langs->trans(
'FieldCannotBeNegative', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1340 $action =
'editline';
1345 if ($qty < $object->expeditions[
GETPOST(
'lineid',
'int')]) {
1346 setEventMessages($langs->trans(
'ErrorQtyOrderedLessQtyShipped'),
null,
'errors');
1348 $action =
'editline';
1353 if (!$user->hasRight(
'margins',
'creer')) {
1354 foreach (
$object->lines as &$line) {
1356 $fournprice = $line->fk_fournprice;
1357 $buyingprice = $line->pa_ht;
1363 $price_base_type =
'HT';
1365 if (empty($pu) && !empty($pu_ttc)) {
1367 $price_base_type =
'TTC';
1370 $result =
$object->updateline(
GETPOSTINT(
'lineid'), $description, $pu, $qty, $remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $price_base_type, $info_bits, $date_start, $date_end, $type,
GETPOST(
'fk_parent_line'), 0, $fournprice, $buyingprice, $label, $special_code, $array_options,
GETPOST(
'units'), $pu_ht_devise);
1375 $outputlangs = $langs;
1378 $newlang =
GETPOST(
'lang_id',
'aZ09');
1381 $newlang =
$object->thirdparty->default_lang;
1383 if (!empty($newlang)) {
1385 $outputlangs->setDefaultLang($newlang);
1389 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1392 unset($_POST[
'qty']);
1393 unset($_POST[
'type']);
1394 unset($_POST[
'productid']);
1395 unset($_POST[
'remise_percent']);
1396 unset($_POST[
'price_ht']);
1397 unset($_POST[
'multicurrency_price_ht']);
1398 unset($_POST[
'price_ttc']);
1399 unset($_POST[
'tva_tx']);
1400 unset($_POST[
'product_ref']);
1401 unset($_POST[
'product_label']);
1402 unset($_POST[
'product_desc']);
1403 unset($_POST[
'fournprice']);
1404 unset($_POST[
'buying_price']);
1406 unset($_POST[
'date_starthour']);
1407 unset($_POST[
'date_startmin']);
1408 unset($_POST[
'date_startsec']);
1409 unset($_POST[
'date_startday']);
1410 unset($_POST[
'date_startmonth']);
1411 unset($_POST[
'date_startyear']);
1412 unset($_POST[
'date_endhour']);
1413 unset($_POST[
'date_endmin']);
1414 unset($_POST[
'date_endsec']);
1415 unset($_POST[
'date_endday']);
1416 unset($_POST[
'date_endmonth']);
1417 unset($_POST[
'date_endyear']);
1422 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'cancel',
'alpha')) {
1423 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
1425 } elseif ($action ==
'confirm_validate' && $confirm ==
'yes' && $usercanvalidate) {
1428 $qualified_for_stock_change = 0;
1430 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1432 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1436 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_VALIDATE_ORDER') && $qualified_for_stock_change) {
1437 if (!$idwarehouse || $idwarehouse == -1) {
1439 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1445 $locationTarget =
'';
1449 $result =
$object->valid($user, $idwarehouse);
1454 $deposit_percent_from_payment_terms = (float)
getDictionaryValue(
'c_payment_term',
'deposit_percent',
$object->cond_reglement_id);
1457 GETPOST(
'generate_deposit',
'alpha') ==
'on' && !empty($deposit_percent_from_payment_terms)
1458 && isModEnabled(
'invoice') && $user->hasRight(
'facture',
'creer')
1460 require_once DOL_DOCUMENT_ROOT .
'/compta/facture/class/facture.class.php';
1463 $forceFields = array();
1465 if (GETPOSTISSET(
'date_pointoftax')) {
1473 $locationTarget = DOL_URL_ROOT .
'/compta/facture/card.php?id=' . $deposit->id;
1485 $outputlangs = $langs;
1488 $newlang =
GETPOST(
'lang_id',
'aZ09');
1491 $newlang =
$object->thirdparty->default_lang;
1493 if (!empty($newlang)) {
1495 $outputlangs->setDefaultLang($newlang);
1500 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1503 $deposit->fetch($deposit->id);
1504 $deposit->generateDocument($deposit->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1508 if ($locationTarget) {
1509 header(
'Location: ' . $locationTarget);
1520 } elseif ($action ==
'confirm_modif' && $usercancreate) {
1522 $idwarehouse =
GETPOST(
'idwarehouse');
1524 $qualified_for_stock_change = 0;
1526 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1528 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1532 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_VALIDATE_ORDER') && $qualified_for_stock_change) {
1533 if (!$idwarehouse || $idwarehouse == -1) {
1535 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1541 $result =
$object->setDraft($user, $idwarehouse);
1545 $outputlangs = $langs;
1548 $newlang =
GETPOST(
'lang_id',
'aZ09');
1551 $newlang =
$object->thirdparty->default_lang;
1553 if (!empty($newlang)) {
1555 $outputlangs->setDefaultLang($newlang);
1560 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1566 } elseif ($action ==
'confirm_shipped' && $confirm ==
'yes' && $usercanclose) {
1567 $result =
$object->cloture($user);
1571 } elseif ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanvalidate) {
1574 $qualified_for_stock_change = 0;
1576 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1578 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1582 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_VALIDATE_ORDER') && $qualified_for_stock_change) {
1583 if (!$idwarehouse || $idwarehouse == -1) {
1585 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1591 $result =
$object->cancel($idwarehouse);
1599 if ($action ==
'update_extras' && $usercancreate) {
1601 $attribute_name =
GETPOST(
'attribute',
'restricthtml');
1604 $ret = $extrafields->setOptionalsFromPost(
null,
$object, $attribute_name);
1611 $result =
$object->updateExtraField($attribute_name,
'ORDER_MODIFY');
1619 $action =
'edit_extras';
1624 if ($action ==
'import_lines_from_object'
1628 $fromElement =
GETPOST(
'fromelement');
1629 $fromElementid =
GETPOST(
'fromelementid');
1630 $importLines =
GETPOST(
'line_checkbox');
1632 if (!empty($importLines) && is_array($importLines) && !empty($fromElement) && ctype_alpha($fromElement) && !empty($fromElementid)) {
1633 if ($fromElement ==
'commande') {
1635 $lineClassName =
'OrderLine';
1636 } elseif ($fromElement ==
'propal') {
1637 dol_include_once(
'/comm/'.$fromElement.
'/class/'.$fromElement.
'.class.php');
1638 $lineClassName =
'PropaleLigne';
1639 } elseif ($fromElement ==
'facture') {
1640 dol_include_once(
'/compta/'.$fromElement.
'/class/'.$fromElement.
'.class.php');
1641 $lineClassName =
'FactureLigne';
1643 $nextRang = count(
$object->lines) + 1;
1646 foreach ($importLines as $lineId) {
1647 $lineId = intval($lineId);
1648 $originLine =
new $lineClassName($db);
1649 if (intval($fromElementid) > 0 && $originLine->fetch($lineId) > 0) {
1650 $originLine->fetch_optionals();
1651 $desc = $originLine->desc;
1652 $pu_ht = $originLine->subprice;
1653 $qty = $originLine->qty;
1654 $txtva = $originLine->tva_tx;
1655 $txlocaltax1 = $originLine->localtax1_tx;
1656 $txlocaltax2 = $originLine->localtax2_tx;
1657 $fk_product = $originLine->fk_product;
1658 $remise_percent = $originLine->remise_percent;
1659 $date_start = $originLine->date_start;
1660 $date_end = $originLine->date_end;
1661 $fk_code_ventilation = 0;
1662 $info_bits = $originLine->info_bits;
1663 $fk_remise_except = $originLine->fk_remise_except;
1664 $price_base_type =
'HT';
1666 $type = $originLine->product_type;
1667 $rang = $nextRang++;
1668 $special_code = $originLine->special_code;
1669 $origin = $originLine->element;
1670 $origin_id = $originLine->id;
1671 $fk_parent_line = 0;
1672 $fk_fournprice = $originLine->fk_fournprice;
1673 $pa_ht = $originLine->pa_ht;
1674 $label = $originLine->label;
1675 $array_options = $originLine->array_options;
1676 $situation_percent = 100;
1678 $fk_unit = $originLine->fk_unit;
1679 $pu_ht_devise = $originLine->multicurrency_subprice;
1681 $res =
$object->addline($desc, $pu_ht, $qty, $txtva, $txlocaltax1, $txlocaltax2, $fk_product, $remise_percent, $info_bits, $fk_remise_except, $price_base_type, $pu_ttc, $date_start, $date_end, $type, $rang, $special_code, $fk_parent_line, $fk_fournprice, $pa_ht, $label, $array_options, $fk_unit, $origin, $origin_id, $pu_ht_devise);
1700 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1703 $upload_dir = !empty(
$conf->commande->multidir_output[
$object->entity]) ?
$conf->commande->multidir_output[
$object->entity] :
$conf->commande->dir_output;
1704 $permissiontoadd = $usercancreate;
1705 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1708 $triggersendname =
'ORDER_SENTBYMAIL';
1710 $autocopy =
'MAIN_MAIL_AUTOCOPY_ORDER_TO';
1711 $trackid =
'ord'.$object->id;
1712 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1716 if ($action ==
'addcontact' && $usercancreate) {
1720 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1724 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1727 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1728 $langs->load(
"errors");
1729 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1734 } elseif ($action ==
'swapstatut' && $usercancreate) {
1741 } elseif ($action ==
'deletecontact' && $usercancreate) {
1743 $result =
$object->delete_contact($lineid);
1746 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
1760$title =
$object->ref.
" - ".$langs->trans(
'Card');
1761if ($action ==
'create') {
1762 $title = $langs->trans(
"NewOrder");
1764$help_url =
'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge';
1766llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-order page-card');
1768$form =
new Form($db);
1772if (isModEnabled(
'project')) {
1777if ($action ==
'create' && $usercancreate) {
1782 $res = $soc->fetch($socid);
1787 $currency_code =
$conf->currency;
1789 $cond_reglement_id =
GETPOSTINT(
'cond_reglement_id');
1790 $deposit_percent =
GETPOSTFLOAT(
'cond_reglement_id_deposit_percent');
1791 $mode_reglement_id =
GETPOSTINT(
'mode_reglement_id');
1794 if (!empty($origin) && !empty($originid)) {
1796 $element = $subelement = $origin;
1798 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1799 $element = $regs[1];
1800 $subelement = $regs[2];
1803 if ($element ==
'project') {
1804 $projectid = $originid;
1806 if (!$cond_reglement_id) {
1807 $cond_reglement_id = $soc->cond_reglement_id;
1809 if (!$deposit_percent) {
1810 $deposit_percent = $soc->deposit_percent;
1812 if (!$mode_reglement_id) {
1813 $mode_reglement_id = $soc->mode_reglement_id;
1815 if (!$remise_percent) {
1816 $remise_percent = $soc->remise_percent;
1824 if ($element ==
'order' || $element ==
'commande') {
1825 $element = $subelement =
'commande';
1826 } elseif ($element ==
'propal') {
1827 $element =
'comm/propal';
1828 $subelement =
'propal';
1829 } elseif ($element ==
'contract') {
1830 $element = $subelement =
'contrat';
1835 $classname = ucfirst($subelement);
1836 $objectsrc =
new $classname($db);
1837 '@phan-var-force Commande|Propal|Contrat $objectsrc';
1838 $objectsrc->fetch($originid);
1839 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1840 $objectsrc->fetch_lines();
1842 $objectsrc->fetch_thirdparty();
1845 $objectsrc->fetch_optionals();
1846 $object->array_options = $objectsrc->array_options;
1848 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1849 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1851 $soc = $objectsrc->thirdparty;
1852 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1853 $deposit_percent = (!empty($objectsrc->deposit_percent) ? $objectsrc->deposit_percent : (!empty($soc->deposit_percent) ? $soc->deposit_percent :
null));
1854 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1855 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1856 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : 0);
1857 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1858 $warehouse_id = (!empty($objectsrc->warehouse_id) ? $objectsrc->warehouse_id : (!empty($soc->warehouse_id) ? $soc->warehouse_id : 0));
1859 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1864 $date_delivery = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
1866 if (isModEnabled(
"multicurrency")) {
1867 if (!empty($objectsrc->multicurrency_code)) {
1868 $currency_code = $objectsrc->multicurrency_code;
1870 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1871 $currency_tx = $objectsrc->multicurrency_tx;
1875 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
1876 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
1879 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1882 $cond_reglement_id = empty($soc->cond_reglement_id) ? $cond_reglement_id : $soc->cond_reglement_id;
1883 $deposit_percent = empty($soc->deposit_percent) ? $deposit_percent : $soc->deposit_percent;
1884 $mode_reglement_id = empty($soc->mode_reglement_id) ? $mode_reglement_id : $soc->mode_reglement_id;
1885 $fk_account = empty($soc->mode_reglement_id) ? $fk_account : $soc->fk_account;
1886 $availability_id = 0;
1887 $shipping_method_id = $soc->shipping_method_id;
1888 $warehouse_id = $soc->fk_warehouse;
1889 $demand_reason_id = $soc->demand_reason_id;
1894 if (isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
1895 $currency_code = $soc->multicurrency_code;
1898 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
1899 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
1903 if (!
GETPOST(
'changecompany')) {
1904 if (GETPOSTISSET(
'cond_reglement_id')) {
1905 $cond_reglement_id =
GETPOSTINT(
'cond_reglement_id');
1907 if (GETPOSTISSET(
'deposit_percent')) {
1910 if (GETPOSTISSET(
'mode_reglement_id')) {
1911 $mode_reglement_id =
GETPOSTINT(
'mode_reglement_id');
1913 if (GETPOSTISSET(
'cond_reglement_id')) {
1919 if ($soc->fk_warehouse > 0) {
1920 $warehouse_id = $soc->fk_warehouse;
1922 if (isModEnabled(
'stock') && empty($warehouse_id) &&
getDolGlobalString(
'WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER')) {
1927 $warehouse_id = $user->fk_warehouse;
1931 print
'<form name="crea_commande" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1932 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1933 print
'<input type="hidden" name="action" value="add">';
1934 print
'<input type="hidden" name="changecompany" value="0">';
1935 print
'<input type="hidden" name="remise_percent" value="'.$soc->remise_percent.
'">';
1936 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1937 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1938 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1939 if (!empty($currency_tx)) {
1940 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1946 $parameters = array();
1948 $reshook = $hookmanager->executeHooks(
'tabContentCreateOrder', $parameters,
$object, $action);
1949 if (empty($reshook)) {
1950 print
'<table class="border centpercent">';
1953 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
"Draft").
'</td></tr>';
1956 print
'<tr><td>'.$langs->trans(
'RefCustomer').
'</td><td>';
1957 if (
getDolGlobalString(
'MAIN_USE_PROPAL_REFCLIENT_FOR_ORDER') && !empty($origin) && !empty($originid)) {
1958 print
'<input type="text" name="ref_client" value="'.$ref_client.
'"></td>';
1960 print
'<input type="text" name="ref_client" value="'.GETPOST(
'ref_client').
'"></td>';
1966 print
'<td class="fieldrequired">'.$langs->trans(
'Customer').
'</td>';
1969 print $soc->getNomUrl(1,
'customer');
1970 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1973 print
'<td class="valuefieldcreate">';
1974 $filter =
'((s.client:IN:1,2,3) AND (s.status:=:1))';
1975 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(
'',
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1979 $(document).ready(function() {
1980 $("#socid").change(function() {
1981 console.log("We have changed the company - Reload page");
1982 var socid = $(this).val();
1984 $("input[name=action]").val("create");
1985 $("input[name=changecompany]").val("1");
1986 $("form[name=crea_commande]").submit();
1991 print
' <a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&client=3&fournisseur=0&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
1999 print
"<tr><td>".$langs->trans(
"DefaultContact").
'</td><td>';
2000 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2002 print $form->select_contact($soc->id, $contactid,
'contactid', 1, empty($srccontactslist) ?
"" : $srccontactslist,
'', 1,
'maxwidth300 widthcentpercentminusx', true);
2006 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2008 $absolute_discount = $soc->getAvailableDiscounts();
2012 $backtopage = $_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.urlencode((
string) (
GETPOST(
'origin'))).
'&originid='.urlencode((
string) (
GETPOSTINT(
'originid')));
2013 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2019 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Date').
'</td><td>';
2020 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2021 print $form->selectDate(
'',
're', 0, 0, 0,
"crea_commande", 1, 1);
2025 print
'<tr><td>'.$langs->trans(
"DateDeliveryPlanned").
'</td>';
2026 print
'<td colspan="3">';
2027 $date_delivery = ($date_delivery ? $date_delivery :
$object->delivery_date);
2028 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2029 print $form->selectDate($date_delivery ? $date_delivery : -1,
'liv_', 1, 1, 1);
2034 print
'<tr class="fielddeliverydelay"><td>'.$langs->trans(
'AvailabilityPeriod').
'</td><td>';
2035 print
img_picto(
'',
'clock',
'class="pictofixedwidth"');
2036 $form->selectAvailabilityDelay((GETPOSTISSET(
'availability_id') ?
GETPOST(
'availability_id') : $availability_id),
'availability_id',
'', 1,
'maxwidth200 widthcentpercentminusx');
2040 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2041 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2042 print $form->getSelectConditionsPaiements($cond_reglement_id,
'cond_reglement_id', 1, 1, 0,
'maxwidth200 widthcentpercentminusx', $deposit_percent);
2046 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2047 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2048 print $form->select_types_paiements($mode_reglement_id,
'mode_reglement_id',
'CRDT', 0, 1, 0, 0, 1,
'maxwidth200 widthcentpercentminusx', 1);
2052 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_ORDER') && isModEnabled(
"bank")) {
2053 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2054 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"').$form->select_comptes($fk_account,
'fk_account', 0,
'', 1,
'', 0,
'maxwidth200 widthcentpercentminusx', 1);
2059 if (isModEnabled(
'shipping')) {
2060 print
'<tr><td>'.$langs->trans(
'SendingMethod').
'</td><td>';
2061 print
img_picto(
'',
'object_dolly',
'class="pictofixedwidth"');
2062 $form->selectShippingMethod(((GETPOSTISSET(
'shipping_method_id') &&
GETPOSTINT(
'shipping_method_id') != 0) ?
GETPOST(
'shipping_method_id') : $shipping_method_id),
'shipping_method_id',
'', 1,
'', 0,
'maxwidth200 widthcentpercentminusx');
2067 if (isModEnabled(
'stock') &&
getDolGlobalString(
'WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER')) {
2068 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2070 print
'<tr><td>'.$langs->trans(
'Warehouse').
'</td><td>';
2071 print
img_picto(
'',
'stock',
'class="pictofixedwidth"').$formproduct->selectWarehouses((GETPOSTISSET(
'warehouse_id') ?
GETPOST(
'warehouse_id') : $warehouse_id),
'warehouse_id',
'', 1, 0, 0,
'', 0, 0, array(),
'maxwidth500 widthcentpercentminusxx');
2076 print
'<tr><td>'.$langs->trans(
'Source').
'</td><td>';
2077 print
img_picto(
'',
'question',
'class="pictofixedwidth"');
2078 $form->selectInputReason((GETPOSTISSET(
'demand_reason_id') ?
GETPOST(
'demand_reason_id') : $demand_reason_id),
'demand_reason_id',
'', 1,
'maxwidth200 widthcentpercentminusx');
2084 if (isModEnabled(
'project')) {
2085 $langs->load(
"projects");
2087 print
'<td>'.$langs->trans(
"Project").
'</td><td>';
2088 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects(($soc->id > 0 ? $soc->id : -1), (GETPOSTISSET(
'projectid') ?
GETPOST(
'projectid') : $projectid),
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500 widthcentpercentminusxx');
2089 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.$soc->id.
'&action=create&status=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create&socid='.$soc->id).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
2095 if (isModEnabled(
'incoterm')) {
2097 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), !empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms : $soc->fk_incoterms, 1).
'</label></td>';
2098 print
'<td class="maxwidthonsmartphone">';
2099 $incoterm_id =
GETPOST(
'incoterm_id');
2100 $location_incoterms =
GETPOST(
'location_incoterms');
2101 if (empty($incoterm_id)) {
2102 $incoterm_id = (!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms : $soc->fk_incoterms);
2103 $location_incoterms = (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms : $soc->location_incoterms);
2105 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2106 print $form->select_incoterms($incoterm_id, $location_incoterms);
2111 $parameters = array();
2112 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
2113 $parameters[
'objectsrc'] = $objectsrc;
2115 $parameters[
'socid'] = $socid;
2118 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
2119 print $hookmanager->resPrint;
2120 if (empty($reshook)) {
2121 if (
getDolGlobalString(
'THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_ORDER') && !empty($soc->id)) {
2124 $tpExtrafieldLabels = $tpExtrafields->fetch_name_optionals_label($soc->table_element);
2125 if ($soc->fetch_optionals() > 0) {
2126 $object->array_options = array_merge(
$object->array_options, $soc->array_options);
2130 print
$object->showOptionals($extrafields,
'create', $parameters);
2134 print
'<tr><td>'.$langs->trans(
'DefaultModel').
'</td>';
2136 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2139 print
img_picto(
'',
'pdf',
'class="pictofixedwidth"');
2140 print $form->selectarray(
'model', $liste, $preselected, 0, 0, 0,
'', 0, 0, 0,
'',
'maxwidth200 widthcentpercentminusx', 1);
2144 if (isModEnabled(
"multicurrency")) {
2146 print
'<td>'.$form->editfieldkey(
"Currency",
'multicurrency_code',
'',
$object, 0).
'</td>';
2147 print
'<td class="maxwidthonsmartphone">';
2148 print
img_picto(
'',
'currency',
'class="pictofixedwidth"').$form->selectMultiCurrency(((GETPOSTISSET(
'multicurrency_code') && !
GETPOST(
'changecompany')) ?
GETPOST(
'multicurrency_code') : $currency_code),
'multicurrency_code', 0,
'', 0,
'maxwidth200 widthcentpercentminusx');
2154 print
'<td class="tdtop">'.$langs->trans(
'NotePublic').
'</td>';
2157 $doleditor =
new DolEditor(
'note_public', $note_public,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
2158 print $doleditor->Create(1);
2163 if (empty($user->socid)) {
2165 print
'<td class="tdtop">'.$langs->trans(
'NotePrivate').
'</td>';
2168 $doleditor =
new DolEditor(
'note_private', $note_private,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
2169 print $doleditor->Create(1);
2174 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
2176 if ($origin ==
'contrat') {
2180 $objectsrc->update_price(1);
2183 print
"\n<!-- ".$classname.
" info -->";
2185 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2186 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2187 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2188 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2189 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2191 switch ($classname) {
2193 $newclassname =
'CommercialProposal';
2196 $newclassname =
'Order';
2199 $newclassname =
'Sending';
2202 $newclassname =
'Contract';
2205 $newclassname = $classname;
2208 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1).
'</td></tr>';
2211 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2212 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2213 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
2214 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2217 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
2218 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2221 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2223 if (isModEnabled(
"multicurrency")) {
2224 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
2225 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
2226 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
2237 print $form->buttonsSaveCancel(
"CreateDraft");
2240 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
2241 $title = $langs->trans(
'ProductsAndServices');
2244 print
'<div class="div-table-responsive-no-min">';
2245 print
'<table class="noborder centpercent">';
2247 $objectsrc->printOriginLinesList(
'', $selectedLines);
2259 $product_static =
new Product($db);
2264 $author =
new User($db);
2265 $author->fetch(
$object->user_author_id);
2268 $res =
$object->fetch_optionals();
2271 print
dol_get_fiche_head($head,
'order', $langs->trans(
"CustomerOrder"), -1,
'order');
2276 if ($action ==
'delete') {
2277 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete',
'', 0, 1);
2281 if ($action ==
'validate') {
2283 $ref = substr(
$object->ref, 1, 4);
2284 if ($ref ==
'PROV' || $ref ==
'') {
2285 $numref =
$object->getNextNumRef($soc);
2286 if (empty($numref)) {
2294 $text = $langs->trans(
'ConfirmValidateOrder', $numref);
2295 if (isModEnabled(
'notification')) {
2296 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
2297 $notify =
new Notify($db);
2299 $text .= $notify->confirmMessage(
'ORDER_VALIDATE',
$object->socid,
$object);
2302 $qualified_for_stock_change = 0;
2304 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2306 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2309 $formquestion = array();
2310 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_VALIDATE_ORDER') && $qualified_for_stock_change) {
2311 $langs->load(
"stocks");
2312 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2315 if (
$conf->browser->name ==
'ie') {
2318 $formquestion = array(
2322 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockDecrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse') ?
GETPOSTINT(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2328 foreach (
$object->lines as $line) {
2329 $res = $line->fetch_product();
2331 if ($line->product->isService() && $line->product->isMandatoryPeriod() && (empty($line->date_start) || empty($line->date_end))) {
2337 if ($nbMandated > 0) {
2339 setEventMessages($langs->trans(
"mandatoryPeriodNeedTobeSetMsgValidate"),
null,
'errors');
2342 $text .=
'<div><span class="clearboth nowraponall warning">'.img_warning().$langs->trans(
"mandatoryPeriodNeedTobeSetMsgValidate").
'</span></div>';
2346 if (
getDolGlobalInt(
'SALE_ORDER_SUGGEST_DOWN_PAYMENT_INVOICE_CREATION')) {
2351 $deposit_percent_from_payment_terms = (float)
getDictionaryValue(
'c_payment_term',
'deposit_percent',
$object->cond_reglement_id);
2353 if (!empty($deposit_percent_from_payment_terms) && isModEnabled(
'invoice') && $user->hasRight(
'facture',
'creer')) {
2354 require_once DOL_DOCUMENT_ROOT .
'/compta/facture/class/facture.class.php';
2358 $eligibleForDepositGeneration =
true;
2360 if (array_key_exists(
'facture',
$object->linkedObjects)) {
2361 foreach (
$object->linkedObjects[
'facture'] as $invoice) {
2362 '@phan-var-force Facture $invoice';
2364 $eligibleForDepositGeneration =
false;
2370 if ($eligibleForDepositGeneration && array_key_exists(
'propal',
$object->linkedObjects)) {
2371 foreach (
$object->linkedObjects[
'propal'] as $proposal) {
2372 $proposal->fetchObjectLinked();
2374 if (array_key_exists(
'facture', $proposal->linkedObjects)) {
2375 foreach ($proposal->linkedObjects[
'facture'] as $invoice) {
2376 '@phan-var-force Facture $invoice';
2378 $eligibleForDepositGeneration =
false;
2386 if ($eligibleForDepositGeneration) {
2387 $formquestion[] = array(
2388 'type' =>
'checkbox',
2390 'name' =>
'generate_deposit',
2391 'label' => $form->textwithpicto($langs->trans(
'GenerateDeposit',
$object->deposit_percent), $langs->trans(
'DepositGenerationPermittedByThePaymentTermsSelected'))
2394 $formquestion[] = array(
2396 'tdclass' =>
'fieldrequired showonlyifgeneratedeposit',
2398 'label' => $langs->trans(
'DateInvoice'),
2404 $formquestion[] = array(
2406 'tdclass' =>
'fieldrequired showonlyifgeneratedeposit',
2407 'name' =>
'date_pointoftax',
2408 'label' => $langs->trans(
'DatePointOfTax'),
2415 $paymentTermsSelect = $form->getSelectConditionsPaiements(0,
'cond_reglement_id', -1, 0, 0,
'minwidth200');
2417 $formquestion[] = array(
2419 'tdclass' =>
'fieldrequired showonlyifgeneratedeposit',
2420 'name' =>
'cond_reglement_id',
2421 'label' => $langs->trans(
'PaymentTerm'),
2422 'value' => $paymentTermsSelect
2425 $formquestion[] = array(
2426 'type' =>
'checkbox',
2427 'tdclass' =>
'showonlyifgeneratedeposit',
2428 'name' =>
'validate_generated_deposit',
2429 'label' => $langs->trans(
'ValidateGeneratedDeposit')
2432 $formquestion[] = array(
2433 'type' =>
'onecolumn',
2436 $(document).ready(function() {
2437 $("[name=generate_deposit]").change(function () {
2438 let $self = $(this);
2439 let $target = $(".showonlyifgeneratedeposit").parent(".tagtr");
2441 if (! $self.parents(".tagtr").is(":hidden") && $self.is(":checked")) {
2458 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_validate', $formquestion, 0, 1, 240);
2463 if ($action ==
'modif') {
2464 $qualified_for_stock_change = 0;
2466 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2468 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2471 $text = $langs->trans(
'ConfirmUnvalidateOrder',
$object->ref);
2472 $formquestion = array();
2473 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_VALIDATE_ORDER') && $qualified_for_stock_change) {
2474 $langs->load(
"stocks");
2475 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2478 if (
$conf->browser->name ==
'ie') {
2481 $formquestion = array(
2485 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2489 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnvalidateOrder'), $text,
'confirm_modif', $formquestion,
"yes", 1, 220);
2495 if ($action ==
'shipped') {
2496 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'CloseOrder'), $langs->trans(
'ConfirmCloseOrder'),
'confirm_shipped',
'', 0, 1);
2502 if ($action ==
'cancel') {
2503 $qualified_for_stock_change = 0;
2505 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2507 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2510 $text = $langs->trans(
'ConfirmCancelOrder',
$object->ref);
2511 $formquestion = array();
2512 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_VALIDATE_ORDER') && $qualified_for_stock_change) {
2513 $langs->load(
"stocks");
2514 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2517 if (
$conf->browser->name ==
'ie') {
2520 $formquestion = array(
2524 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2528 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
"Cancel"), $text,
'confirm_cancel', $formquestion, 0, 1);
2532 if ($action ==
'ask_deleteline') {
2533 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2537 if ($action ==
'clone') {
2538 $filter =
'(s.client:IN:1,2,3)';
2540 $formquestion = array(
2541 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter,
'', 0, 0, array(), 0,
'maxwidth300'))
2543 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
2547 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
2549 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
2550 if (empty($reshook)) {
2551 $formconfirm .= $hookmanager->resPrint;
2552 } elseif ($reshook > 0) {
2553 $formconfirm = $hookmanager->resPrint;
2562 $linkback =
'<a href="'.DOL_URL_ROOT.
'/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2564 $morehtmlref =
'<div class="refidno">';
2566 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_client',
$object->ref_client,
$object, $usercancreate,
'string',
'', 0, 1);
2567 $morehtmlref .= $form->editfieldval(
"RefCustomer",
'ref_client',
$object->ref_client,
$object, $usercancreate,
'string'.(isset(
$conf->global->THIRDPARTY_REF_INPUT_SIZE) ?
':' .
getDolGlobalString(
'THIRDPARTY_REF_INPUT_SIZE') :
''),
'', null, null,
'', 1);
2569 $morehtmlref .=
'<br>'.$soc->getNomUrl(1,
'customer');
2571 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/commande/list.php?socid='.
$object->thirdparty->id.
'&search_societe='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2574 if (isModEnabled(
'project')) {
2575 $langs->load(
"projects");
2576 $morehtmlref .=
'<br>';
2577 if ($usercancreate) {
2578 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2579 if ($action !=
'classify') {
2580 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2582 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
2584 if (!empty(
$object->fk_project)) {
2586 $proj->fetch(
$object->fk_project);
2587 $morehtmlref .= $proj->getNomUrl(1);
2589 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2594 $morehtmlref .=
'</div>';
2597 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2600 $parameters = array();
2602 $reshook = $hookmanager->executeHooks(
'tabContentViewOrder', $parameters,
$object, $action);
2603 if (empty($reshook)) {
2604 print
'<div class="fichecenter">';
2605 print
'<div class="fichehalfleft">';
2606 print
'<div class="underbanner clearboth"></div>';
2608 print
'<table class="border tableforfield centpercent">';
2610 if ($soc->outstanding_limit) {
2612 print
'<tr><td class="titlefield">';
2613 print $langs->trans(
'OutstandingBill');
2614 print
'</td><td class="valuefield">';
2615 $arrayoutstandingbills = $soc->getOutstandingBills();
2616 print
price($arrayoutstandingbills[
'opened']).
' / ';
2617 print
price($soc->outstanding_limit, 0,
'', 1, - 1, - 1,
$conf->currency);
2624 $filterabsolutediscount =
"fk_facture_source IS NULL";
2625 $filtercreditnote =
"fk_facture_source IS NOT NULL";
2627 $filterabsolutediscount =
"fk_facture_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS RECEIVED)%')";
2628 $filtercreditnote =
"fk_facture_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS RECEIVED)%')";
2631 $addrelativediscount =
'<a href="'.DOL_URL_ROOT.
'/comm/remise.php?id='.$soc->id.
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"]).
'?facid='.
$object->id.
'">'.$langs->trans(
"EditRelativeDiscounts").
'</a>';
2632 $addabsolutediscount =
'<a href="'.DOL_URL_ROOT.
'/comm/remx.php?id='.$soc->id.
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"]).
'?facid='.
$object->id.
'">'.$langs->trans(
"EditGlobalDiscounts").
'</a>';
2633 $addcreditnote =
'<a href="'.DOL_URL_ROOT.
'/compta/facture/card.php?action=create&socid='.$soc->id.
'&type=2&backtopage='.urlencode($_SERVER[
"PHP_SELF"]).
'?facid='.
$object->id.
'">'.$langs->trans(
"AddCreditNote").
'</a>';
2635 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td class="valuefield">';
2637 $absolute_discount = $soc->getAvailableDiscounts(
null, $filterabsolutediscount);
2638 $absolute_creditnote = $soc->getAvailableDiscounts(
null, $filtercreditnote);
2639 $absolute_discount =
price2num($absolute_discount,
'MT');
2640 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2644 $backtopage = $_SERVER[
"PHP_SELF"].
'?id='.
$object->id;
2645 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2652 print $form->editfieldkey(
"Date",
'date',
'',
$object, $editenable);
2653 print
'</td><td class="valuefield">';
2654 if ($action ==
'editdate') {
2655 print
'<form name="setdate" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2656 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2657 print
'<input type="hidden" name="action" value="setdate">';
2658 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2659 print $form->selectDate(
$object->date,
'order_', 0, 0, 0,
"setdate");
2660 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
2665 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2673 $editenable = $usercancreate;
2674 print $form->editfieldkey(
"DateDeliveryPlanned",
'date_livraison',
'',
$object, $editenable);
2675 print
'</td><td class="valuefield">';
2676 if ($action ==
'editdate_livraison') {
2677 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post">';
2678 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2679 print
'<input type="hidden" name="action" value="setdate_livraison">';
2680 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2681 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', 1, 1, 0,
"setdate_livraison", 1, 0);
2682 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
2687 print
' '.img_picto($langs->trans(
"Late").
' : '.
$object->showDelay(),
"warning");
2694 print
'<tr class="fielddeliverydelay"><td>';
2695 $editenable = $usercancreate;
2696 print $form->editfieldkey(
"AvailabilityPeriod",
'availability',
'',
$object, $editenable);
2697 print
'</td><td class="valuefield">';
2698 if ($action ==
'editavailability') {
2699 $form->form_availability($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->availability_id,
'availability_id', 1);
2701 $form->form_availability($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->availability_id,
'none', 1);
2706 if (isModEnabled(
'shipping')) {
2708 $editenable = $usercancreate;
2709 print $form->editfieldkey(
"SendingMethod",
'shippingmethod',
'',
$object, $editenable);
2710 print
'</td><td class="valuefield">';
2711 if ($action ==
'editshippingmethod') {
2712 $form->formSelectShippingMethod($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->shipping_method_id,
'shipping_method_id', 1);
2714 $form->formSelectShippingMethod($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->shipping_method_id,
'none');
2721 if (isModEnabled(
'stock') &&
getDolGlobalString(
'WAREHOUSE_ASK_WAREHOUSE_DURING_ORDER')) {
2722 $langs->load(
'stocks');
2723 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2726 $editenable = $usercancreate;
2727 print $form->editfieldkey(
"Warehouse",
'warehouse',
'',
$object, $editenable);
2728 print
'</td><td class="valuefield">';
2729 if ($action ==
'editwarehouse') {
2730 $formproduct->formSelectWarehouses($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->warehouse_id,
'warehouse_id', 1);
2732 $formproduct->formSelectWarehouses($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->warehouse_id,
'none');
2740 $editenable = $usercancreate;
2741 print $form->editfieldkey(
"Source",
'demandreason',
'',
$object, $editenable);
2742 print
'</td><td class="valuefield">';
2743 if ($action ==
'editdemandreason') {
2744 $form->formInputReason($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->demand_reason_id,
'demand_reason_id', 1);
2746 $form->formInputReason($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->demand_reason_id,
'none');
2752 $editenable = $usercancreate;
2753 print $form->editfieldkey(
"PaymentConditionsShort",
'conditions',
'',
$object, $editenable);
2754 print
'</td><td class="valuefield">';
2755 if ($action ==
'editconditions') {
2756 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id', 1,
'', 1,
$object->deposit_percent);
2758 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none', 1,
'', 1,
$object->deposit_percent);
2766 $editenable = $usercancreate;
2767 print $form->editfieldkey(
"PaymentMode",
'mode',
'',
$object, $editenable);
2768 print
'</td><td class="valuefield">';
2769 if ($action ==
'editmode') {
2770 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
2772 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
2790 $tmparray =
$object->getTotalWeightVolume();
2791 $totalWeight = $tmparray[
'weight'];
2792 $totalVolume = $tmparray[
'volume'];
2794 print
'<tr><td>'.$langs->trans(
"CalculatedWeight").
'</td>';
2795 print
'<td class="valuefield">';
2800 print
'<tr><td>'.$langs->trans(
"CalculatedVolume").
'</td>';
2801 print
'<td class="valuefield">';
2809 if (isModEnabled(
'incoterm')) {
2811 $editenable = $usercancreate;
2812 print $form->editfieldkey(
"IncotermLabel",
'incoterm',
'',
$object, $editenable);
2814 print
'<td class="valuefield">';
2815 if ($action !=
'editincoterm') {
2816 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
2818 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
2824 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_ORDER') && isModEnabled(
"bank")) {
2826 $editenable = $usercancreate;
2827 print $form->editfieldkey(
"BankAccount",
'bankaccount',
'',
$object, $editenable);
2828 print
'</td><td class="valuefield">';
2829 if ($action ==
'editbankaccount') {
2830 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
2832 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
2839 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2844 print
'<div class="fichehalfright">';
2845 print
'<div class="underbanner clearboth"></div>';
2847 print
'<table class="border tableforfield centpercent">';
2849 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
2853 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->order_min_amount));
2857 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
2858 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2859 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2861 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2866 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
2867 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2868 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2870 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2875 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2877 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
2878 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2879 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2882 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2888 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2890 print
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
2891 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
2892 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2895 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
2901 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
2902 print
'<td class="valuefield nowrap right amountcard">' .
price(
$object->total_ttc, 1,
'', 1, -1, -1,
$conf->currency) .
'</td>';
2903 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
2905 print
'<td class="valuefield nowrap right amountcard">' .
price(
$object->multicurrency_total_ttc, 1,
'', 1, -1, -1,
$object->multicurrency_code) .
'</td>';
2915 if (isModEnabled(
'margin')) {
2916 $formmargin->displayMarginInfos(
$object);
2923 print
'<div class="clearboth"></div><br>';
2926 $blocname =
'contacts';
2927 $title = $langs->trans(
'ContactsAddresses');
2928 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2932 $blocname =
'notes';
2933 $title = $langs->trans(
'Notes');
2934 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2942 $result =
$object->getLinesArray();
2946 global $inputalsopricewithtax;
2947 $inputalsopricewithtax = 1;
2949 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="POST">
2950 <input type="hidden" name="token" value="' .
newToken().
'">
2951 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2952 <input type="hidden" name="mode" value="">
2953 <input type="hidden" name="page_y" value="">
2954 <input type="hidden" name="id" value="' .
$object->id.
'">
2955 <input type="hidden" name="backtopage" value="'.$backtopage.
'">
2959 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2962 print
'<div class="div-table-responsive-no-min">';
2963 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
2967 $object->printObjectLines($action, $mysoc, $soc, $lineid, 1);
2974 if ($action !=
'editline') {
2977 $parameters = array();
2979 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters,
$object, $action);
2983 if (empty($reshook)) {
2984 $object->formAddObjectLine(1, $mysoc, $soc);
2987 $parameters = array();
2988 $reshook = $hookmanager->executeHooks(
'formEditObjectLine', $parameters,
$object, $action);
3002 if ($action !=
'presend' && $action !=
'editline') {
3003 print
'<div class="tabsAction">';
3005 $parameters = array();
3007 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
3008 if (empty($reshook)) {
3009 $numlines = count(
$object->lines);
3017 if (empty($user->socid)) {
3020 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
"PHP_SELF"].
'?action=presend&token='.
newToken().
'&id='.
$object->id.
'&mode=init#formmailbeforetitle',
'');
3022 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
3029 if ($numlines > 0) {
3032 print
dolGetButtonAction($langs->trans(
"ErrorObjectMustHaveLinesToBeValidated",
$object->ref), $langs->trans(
'Validate'),
'default', $_SERVER[
"PHP_SELF"].
'?action=validate&token='.
newToken().
'&id='.
$object->id,
$object->id, 0);
3040 $arrayforbutaction = array();
3044 $arrayforbutaction[] = array(
3047 'perm' => $usercancreatepurchaseorder,
3048 'label' =>
'AddPurchaseOrder',
3049 'url' =>
'/fourn/commande/card.php?action=create&origin=' . urlencode(
$object->element) .
'&originid=' . ((
int)
$object->id)
3060 $arrayforbutaction[] = array(
3061 'lang' =>
'interventions',
3063 'perm' => ($user->hasRight(
'ficheinter',
'creer') == 1),
3064 'label' =>
'AddIntervention',
3065 'url' =>
'/fichinter/card.php?action=create&origin=' .
$object->element .
'&originid=' .
$object->id .
'&socid=' .
$object->socid,
3080 $arrayforbutaction[] = array(
3081 'lang' =>
'contracts',
3083 'perm' => ($user->hasRight(
'contrat',
'creer') == 1),
3084 'label' =>
'AddContract',
3085 'url' =>
'/contrat/card.php?action=create&origin=' .
$object->element .
'&originid=' .
$object->id .
'&socid=' .
$object->socid,
3096 if (isModEnabled(
'shipping')) {
3097 $numshipping =
$object->countNbOfShipments();
3102 if ((
getDolGlobalInt(
'MAIN_SUBMODULE_EXPEDITION') && $user->hasRight(
'expedition',
'creer')) || (
getDolGlobalInt(
'MAIN_SUBMODULE_DELIVERY') && $user->hasRight(
'expedition',
'delivery',
'creer'))) {
3103 $arrayforbutaction[] = array(
3104 'lang' =>
'sendings',
3106 'perm' => $user->hasRight(
'expedition',
'creer'),
3107 'label' =>
'CreateShipment',
3108 'url' =>
'/expedition/shipment.php?id=' .
$object->id
3117 $langs->load(
"errors");
3118 print
dolGetButtonAction($langs->trans(
'ErrorModuleSetupNotComplete'), $langs->trans(
'CreateShipment'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
3123 $arrayforbutaction[] = array(
3126 'perm' => ($user->hasRight(
'facture',
'creer') && !
getDolGlobalInt(
'WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')),
3127 'label' =>
'CreateBill',
3128 'url' =>
'/compta/facture/card.php?action=create&token=' .
newToken() .
'&origin=' . urlencode(
$object->element) .
'&originid=' .
$object->id .
'&socid=' .
$object->socid
3137 $actionButtonsParameters = [
3138 "areDropdownButtons" => !
getDolGlobalInt(
"MAIN_REMOVE_DROPDOWN_CREATE_BUTTONS_ON_ORDER")
3141 if ($numlines > 0) {
3142 print
dolGetButtonAction(
'', $langs->trans(
"Create"),
'default', $arrayforbutaction,
$object->id, 1, $actionButtonsParameters);
3144 print
dolGetButtonAction($langs->trans(
"ErrorObjectMustHaveLinesToBeValidated",
$object->ref), $langs->trans(
"Create"),
'default', $arrayforbutaction,
$object->id, 0, $actionButtonsParameters);
3149 print
dolGetButtonAction(
'', $langs->trans(
'ClassifyShipped'),
'default', $_SERVER[
"PHP_SELF"].
'?action=shipped&token='.
newToken().
'&id='.
$object->id,
'');
3156 print
dolGetButtonAction(
'', $langs->trans(
'ClassifyBilled'),
'default', $_SERVER[
"PHP_SELF"].
'?action=classifybilled&token='.
newToken().
'&id='.
$object->id,
'');
3161 print
dolGetButtonAction(
'', $langs->trans(
'ClassifyUnBilled'),
'delete', $_SERVER[
"PHP_SELF"].
'?action=classifyunbilled&token='.
newToken().
'&id='.
$object->id,
'');
3166 if ($usercancreate) {
3172 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=cancel&token='.
newToken().
'">'.$langs->trans(
"CancelOrder").
'</a>';
3176 if ($usercandelete) {
3177 if ($numshipping == 0) {
3180 print
dolGetButtonAction($langs->trans(
'ShippingExist'), $langs->trans(
'Delete'),
'default', $_SERVER[
'PHP_SELF'].
'#',
'',
false);
3188 if (
GETPOST(
'modelselected')) {
3189 $action =
'presend';
3192 if ($action !=
'presend') {
3193 print
'<div class="fichecenter"><div class="fichehalfleft">';
3194 print
'<a name="builddoc"></a>';
3197 $relativepath = $objref.
'/'.$objref.
'.pdf';
3198 $filedir =
$conf->commande->multidir_output[
$object->entity].
'/'.$objref;
3199 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
3200 $genallowed = $usercanread;
3201 $delallowed = $usercancreate;
3202 print $formfile->showdocuments(
'commande', $objref, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang,
'',
$object);
3206 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'order'), 1);
3207 $linktoelem = $tmparray[
'linktoelem'];
3208 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
3209 print $htmltoenteralink;
3211 $compatibleImportElementsList =
false;
3214 $compatibleImportElementsList = array(
'commande',
'propal',
'facture');
3216 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem, $compatibleImportElementsList);
3220 include_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
3221 $validpaymentmethod = getValidOnlinePaymentMethods(
'');
3222 $useonlinepayment = count($validpaymentmethod);
3225 $useonlinepayment = 0;
3228 print
'<br><!-- Link to pay -->';
3229 require_once DOL_DOCUMENT_ROOT.
'/core/lib/payments.lib.php';
3230 print showOnlinePaymentUrl(
'order',
$object->ref).
'<br>';
3233 print
'</div><div class="fichehalfright">';
3237 $morehtmlcenter =
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode', DOL_URL_ROOT.
'/commande/agenda.php?id='.
$object->id);
3240 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
3242 $somethingshown = $formactions->showactions(
$object,
'order', $socid, 1,
'', $MAXEVENT,
'', $morehtmlcenter);
3244 print
'</div></div>';
3248 $modelmail =
'order_send';
3249 $defaulttopic =
'SendOrderRef';
3251 $trackid =
'ord'.$object->id;
3253 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage customers orders.
const STATUS_SHIPMENTONPROCESS
Shipment on process.
const STATUS_CLOSED
Closed (Sent, billed or not)
const STATUS_CANCELED
Canceled status.
const STATUS_DRAFT
Draft status.
const STATUS_VALIDATED
Validated status.
Class to manage a WYSIWYG editor.
static createDepositFromOrigin(CommonObject $origin, $date, $payment_terms_id, User $user, $notrigger=0, $autoValidateDeposit=false, $overrideFields=array())
Creates a deposit from a proposal or an order by grouping lines by VAT rates.
const TYPE_DEPOSIT
Deposit invoice.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage the table of subscription to notifications.
Class ProductCombination Used to represent the relation between a product and one of its variants.
File of class to manage predefined price products or services by customer.
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.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
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.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
showDimensionInBestUnit($dimension, $unit, $type, $outputlangs, $round=-1, $forceunitoutput='no', $use_short_label=0)
Output a dimension with best unit.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
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...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='')
Return the value of a $_GET or $_POST supervariable, converted into float.
if(!function_exists( 'utf8_encode')) if(!function_exists('utf8_decode')) if(!function_exists( 'str_starts_with')) if(!function_exists('str_ends_with')) if(!function_exists( 'str_contains')) getMultidirOutput($object, $module='', $forobject=0, $mode='output')
Return the full path of the directory where a module (or an object of a module) stores its files.
dol_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
getDictionaryValue($tablename, $field, $id, $checkentity=false, $rowidfield='rowid')
Return the value of a filed into a dictionary for the record $id.
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
commande_prepare_head(Commande $object)
Prepare array with list of tabs.
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.