43require
'../main.inc.php';
54require_once DOL_DOCUMENT_ROOT .
'/core/class/doleditor.class.php';
55require_once DOL_DOCUMENT_ROOT .
'/categories/class/categorie.class.php';
56require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formfile.class.php';
57require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formorder.class.php';
58require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formmargin.class.php';
59require_once DOL_DOCUMENT_ROOT .
'/core/modules/commande/modules_commande.php';
60require_once DOL_DOCUMENT_ROOT .
'/core/lib/functions2.lib.php';
61require_once DOL_DOCUMENT_ROOT .
'/core/lib/order.lib.php';
63require_once DOL_DOCUMENT_ROOT .
'/comm/action/class/actioncomm.class.php';
64require_once DOL_DOCUMENT_ROOT .
'/commande/class/commande.class.php';
65require_once DOL_DOCUMENT_ROOT .
'/product/class/html.formproduct.class.php';
68 require_once DOL_DOCUMENT_ROOT .
'/comm/propal/class/propal.class.php';
72 require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formprojet.class.php';
73 require_once DOL_DOCUMENT_ROOT .
'/projet/class/project.class.php';
77 require_once DOL_DOCUMENT_ROOT .
'/variants/class/ProductCombination.class.php';
82$langs->loadLangs(array(
'orders',
'sendings',
'companies',
'bills',
'propal',
'products',
'other'));
85 $langs->load(
'incoterm');
88 $langs->load(
'margins');
91 $langs->load(
'productbatch');
98$action =
GETPOST(
'action',
'aZ09');
99$cancel =
GETPOST(
'cancel',
'alpha');
100$confirm =
GETPOST(
'confirm',
'alpha');
101$backtopage =
GETPOST(
'backtopage',
'alpha');
102$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
107$origin =
GETPOST(
'origin',
'alpha');
120if (!empty($user->socid)) {
121 $socid = $user->socid;
126$price_base_type =
null;
127$lineClassName =
null;
128$remise_percent =
null;
130$availability_id =
null;
131$shipping_method_id =
null;
133$demand_reason_id =
null;
142$hookmanager->initHooks(array(
'ordercard',
'globalcard'));
149$extrafields->fetch_name_optionals_label(
$object->table_element);
152include DOL_DOCUMENT_ROOT .
'/core/actions_fetchobject.inc.php';
155$usercanread = $user->hasRight(
"commande",
"lire");
156$usercancreate = $user->hasRight(
"commande",
"creer");
157$usercandelete = $user->hasRight(
"commande",
"supprimer");
160$usercanclose = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'commande',
'order_advance',
'close')));
161$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'commande',
'order_advance',
'validate')));
162$usercancancel = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'commande',
'order_advance',
'annuler')));
163$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'commande',
'order_advance',
'send'));
164$usercangeneratedoc = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'commande',
'order_advance',
'generetedoc'));
166$usermustrespectpricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance')) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
167$usercancreatepurchaseorder = ($user->hasRight(
'fournisseur',
'commande',
'creer') || $user->hasRight(
'supplier_order',
'creer'));
169$permissionnote = $usercancreate;
170$permissiondellink = $usercancreate;
171$permissiontoadd = $usercancreate;
172$permissiontoeditextra = $usercancreate;
173if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
175 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
182$selectedLines = array();
189$parameters = array(
'socid' => $socid);
191$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
196if (empty($reshook)) {
197 $backurlforlist = DOL_URL_ROOT .
'/commande/list.php';
199 if (empty($backtopage) || ($cancel && empty($id))) {
200 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
201 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
202 $backtopage = $backurlforlist;
204 $backtopage = DOL_URL_ROOT .
'/commande/card.php?id=' . ((!empty($id) &&
$id > 0) ? $id :
'__ID__');
209 $selectedLines =
GETPOST(
'toselect',
'array:int');
212 if (!empty($backtopageforcancel)) {
213 header(
"Location: " . $backtopageforcancel);
215 } elseif (!empty($backtopage)) {
216 header(
"Location: " . $backtopage);
222 include DOL_DOCUMENT_ROOT .
'/core/actions_setnotes.inc.php';
224 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
226 include DOL_DOCUMENT_ROOT .
'/core/actions_lineupdown.inc.php';
229 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
231 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'IdThirdParty')),
null,
'errors');
237 $result = $objectutil->createFromClone($user, $socid, (GETPOSTISSET(
'entity') ?
GETPOSTINT(
'entity') : null));
239 $warningMsgLineList = array();
241 foreach ($objectutil->lines as $line) {
242 if (!is_object($line->product)) {
243 $line->fetch_product();
245 if (is_object($line->product) && $line->product->id > 0) {
246 if (empty($line->product->status)) {
247 $warningMsgLineList[$line->id] = $langs->trans(
'WarningLineProductNotToSell', $line->product->ref);
251 if (!empty($warningMsgLineList)) {
255 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?id=' . $result);
263 } elseif ($action ==
'reopen' && $usercancreate) {
268 $result =
$object->setDraft($user, $idwarehouse);
273 $result =
$object->set_reopen($user);
281 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
283 $result =
$object->delete($user);
285 header(
'Location: list.php?restore_lastsearch_values=1');
290 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
292 $result =
$object->deleteLine($user, $lineid);
297 $outputlangs = $langs;
300 $newlang =
GETPOST(
'lang_id',
'aZ09');
303 $newlang =
$object->thirdparty->default_lang;
305 if (!empty($newlang)) {
307 $outputlangs->setDefaultLang($newlang);
311 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
314 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
319 } elseif ($action ==
'confirm_delete_subtotalline' && $confirm ==
'yes' && $usercancreate) {
320 $result =
$object->deleteSubtotalLine($langs,
GETPOSTINT(
'lineid'), (
bool)
GETPOST(
'deletecorrespondingsubtotalline'), $user);
325 $outputlangs = $langs;
328 $newlang =
GETPOST(
'lang_id',
'aZ09');
331 $newlang =
$object->thirdparty->default_lang;
333 if (!empty($newlang)) {
335 $outputlangs->setDefaultLang($newlang);
339 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
342 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id);
347 } elseif ($action ==
'classin' && $usercancreate) {
350 } elseif ($action ==
'add' && $usercancreate) {
355 if ($datecommande ==
'') {
356 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Date')),
null,
'errors');
362 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Customer")),
null,
'errors');
373 $object->date_commande = $datecommande;
386 $object->delivery_date = $date_delivery;
392 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
393 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
396 $ret = $extrafields->setOptionalsFromPost(
null, $object);
402 if (!empty($origin) && !empty($originid)) {
404 $element = $subelement = $origin;
406 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
408 $subelement = $regs[2];
412 if ($element ==
'order') {
413 $element = $subelement =
'commande';
415 if ($element ==
'propal') {
416 $element =
'comm/propal';
417 $subelement =
'propal';
419 if ($element ==
'contract') {
420 $element = $subelement =
'contrat';
424 $object->origin_type = $origin;
425 $object->origin_id = $originid;
429 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
430 if (!empty($other_linked_objects)) {
431 $object->linked_objects = array_merge(
$object->linked_objects, $other_linked_objects);
435 $object_id =
$object->create($user);
437 if ($object_id > 0) {
440 $classname = ucfirst($subelement);
441 $srcobject =
new $classname(
$db);
442 '@phan-var-force Commande|Propal|Contrat $srcobject';
445 dol_syslog(
"Try to find source object origin=" .
$object->origin .
" originid=" .
$object->origin_id .
" to add lines");
446 $result = $srcobject->fetch(
$object->origin_id);
448 $lines = $srcobject->lines;
449 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
450 $srcobject->fetch_lines();
451 $lines = $srcobject->lines;
455 $num = count($lines);
457 for ($i = 0; $i < $num; $i++) {
458 if (!in_array($lines[$i]->
id, $selectedLines)) {
462 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
463 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
464 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
469 if ($lines[$i]->date_debut_reel) {
472 if ($lines[$i]->date_start) {
475 $date_end = $lines[$i]->date_fin_prevue;
476 if ($lines[$i]->date_fin_reel) {
477 $date_end = $lines[$i]->date_fin_reel;
479 if ($lines[$i]->date_end) {
480 $date_end = $lines[$i]->date_end;
484 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
489 if (method_exists($lines[$i],
'fetch_optionals')) {
490 $lines[$i]->fetch_optionals();
491 $array_options = $lines[$i]->array_options;
494 $tva_tx = $lines[$i]->tva_tx;
495 if (!empty($lines[$i]->vat_src_code) && !preg_match(
'/\(/', $tva_tx)) {
496 $tva_tx .=
' (' . $lines[$i]->vat_src_code .
')';
500 $line_price_base_type = $lines[$i]->getPriceBaseType();
503 $lines[$i]->subprice,
506 $lines[$i]->localtax1_tx,
507 $lines[$i]->localtax2_tx,
508 $lines[$i]->fk_product,
509 $lines[$i]->remise_percent,
510 $lines[$i]->info_bits,
511 $lines[$i]->fk_remise_except,
512 $line_price_base_type,
513 (
float) $lines[$i]->subprice_ttc,
518 $lines[$i]->special_code,
520 $lines[$i]->fk_fournprice,
537 foreach (
$object->lines as $line) {
538 if ($line->id == $result) {
539 $line->extraparams = $lines[$i]->extraparams;
540 $line->setExtraParameters();
545 if ($result > 0 && $lines[$i]->product_type == 9) {
546 $fk_parent_line = $result;
580 $parameters = array(
'objFrom' => $srcobject);
582 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
597 $object_id =
$object->create($user);
602 if ($object_id > 0) {
605 $result =
$object->add_contact(
GETPOSTINT(
'contactid'), $type_contact_code,
'external');
617 $categories =
GETPOST(
'categories',
'array');
618 if (method_exists($object,
'setCategories')) {
619 $object->setCategories($categories);
624 if ($object_id > 0 && !$error) {
626 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' . $object_id);
634 } elseif ($action ==
'classifybilled' && $usercancreate) {
635 $ret =
$object->classifyBilled($user);
640 } elseif ($action ==
'classifyunbilled' && $usercancreate) {
641 $ret =
$object->classifyUnBilled($user);
645 } elseif ($action ==
'setref_client' && $usercancreate) {
651 } elseif ($action ==
'setremise' && $usercancreate) {
656 } elseif ($action ==
'setabsolutediscount' && $usercancreate) {
664 } elseif ($action ==
'setdate' && $usercancreate) {
667 $result =
$object->set_date($user, $date);
671 } elseif ($action ==
'setdate_livraison' && $usercancreate) {
675 $result =
$object->setDeliveryDate($user, $date_delivery);
679 } elseif ($action ==
'setmode' && $usercancreate) {
684 } elseif ($action ==
'setposinfo' && $usercancreate) {
688 $result =
$object->update($user);
692 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
694 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
695 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
698 } elseif ($action ==
'setavailability' && $usercancreate) {
703 } elseif ($action ==
'setdemandreason' && $usercancreate) {
708 } elseif ($action ==
'setconditions' && $usercancreate) {
715 $outputlangs = $langs;
716 $newlang =
GETPOST(
'lang_id',
'alpha');
718 $newlang =
$object->thirdparty->default_lang;
720 if (!empty($newlang)) {
722 $outputlangs->setDefaultLang($newlang);
726 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
729 } elseif ($action ==
'set_incoterms' &&
isModEnabled(
'incoterm') && $usercancreate) {
735 } elseif ($action ==
'setbankaccount' && $usercancreate) {
741 } elseif ($action ==
'setshippingmethod' && $usercancreate) {
747 } elseif ($action ==
'setwarehouse' && $usercancreate) {
753 } elseif ($action ==
'settags' &&
isModEnabled(
'category') && $usercancreate) {
758 } elseif ($action ==
'addline' &&
GETPOST(
'updateallvatlinesblock',
'alpha') &&
GETPOST(
'vatforblocklines',
'alpha') !==
'' && $usercancreate) {
759 $tx_tva =
GETPOST(
'vatforblocklines') ?
GETPOST(
'vatforblocklines') : 0;
760 $object->updateSubtotalLineBlockLines($langs,
$object->getRangOfLine($lineid),
'tva', $tx_tva);
761 } elseif ($action ==
'addline' &&
GETPOST(
'updatealldiscountlinesblock',
'alpha') &&
GETPOST(
'discountforblocklines',
'alpha') !==
'' && $usercancreate) {
762 $discount =
GETPOST(
'discountforblocklines') ?
GETPOST(
'discountforblocklines') : 0;
763 $object->updateSubtotalLineBlockLines($langs,
$object->getRangOfLine($lineid),
'discount', $discount);
764 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
768 foreach (
$object->lines as $line) {
769 if ($line->special_code == SUBTOTALS_SPECIAL_CODE) {
772 if ($line->product_type == 1) {
774 $line_price_base_type = $line->getPriceBaseType();
775 $line_pu = ($line_price_base_type ===
'TTC') ? (
float) $line->subprice_ttc : (float) $line->subprice;
776 $result =
$object->updateline($line->id, $line->desc, $line_pu, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line_price_base_type, $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);
779 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'alpha') &&
GETPOST(
'vatforalllines',
'alpha') !==
'' && $usercancreate) {
781 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
782 $vat_rate = str_replace(
'*',
'', $vat_rate);
785 foreach (
$object->lines as $line) {
786 if ($line->special_code == SUBTOTALS_SPECIAL_CODE) {
790 $line_price_base_type = $line->getPriceBaseType();
791 $line_pu = ($line_price_base_type ===
'TTC') ? (
float) $line->subprice_ttc : (float) $line->subprice;
792 $result =
$object->updateline($line->id, $line->desc, $line_pu, $line->qty, $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $line_price_base_type, $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);
794 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'alpha') &&
GETPOST(
'remiseforalllines',
'alpha') !==
'' && $usercancreate) {
796 $remise_percent = (
GETPOST(
'remiseforalllines') ?
GETPOST(
'remiseforalllines') : 0);
797 $remise_percent = str_replace(
'*',
'', $remise_percent);
798 foreach (
$object->lines as $line) {
799 if ($line->special_code == SUBTOTALS_SPECIAL_CODE) {
802 $tvatx = $line->tva_tx;
803 if (!empty($line->vat_src_code)) {
804 $tvatx .=
' (' . $line->vat_src_code .
')';
807 $line_price_base_type = $line->getPriceBaseType();
808 $line_pu = ($line_price_base_type ===
'TTC') ? (
float) $line->subprice_ttc : (float) $line->subprice;
809 $result =
$object->updateline($line->id, $line->desc, $line_pu, $line->qty, (
float) $remise_percent, $tvatx, $line->localtax1_tx, $line->localtax2_tx, $line_price_base_type, $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);
811 } elseif ($action ==
'addline' && $usercancreate && (
812 (
GETPOST(
'submitforallmargins',
'alpha') &&
GETPOST(
'marginforalllines',
'alpha') !==
'') ||
813 (
GETPOST(
'submitforallmark',
'alpha') &&
GETPOST(
'markforalllines',
'alpha') !==
'')
817 $margin_rate = GETPOSTISSET(
'marginforalllines') ?
GETPOST(
'marginforalllines',
'int') :
'';
818 $mark_rate = GETPOSTISSET(
'markforalllines') ?
GETPOST(
'markforalllines',
'int') :
'';
819 foreach (
$object->lines as &$line) {
820 if ($line->subprice > 0) {
821 if ($line->special_code == SUBTOTALS_SPECIAL_CODE) {
824 $subprice_multicurrency = $line->subprice;
825 if (is_numeric($margin_rate) && $margin_rate > 0) {
826 $line->subprice = (float)
price2num((
float) $line->pa_ht * (1 + (float) $margin_rate / 100),
'MU');
827 } elseif (is_numeric($mark_rate) && $mark_rate > 0) {
828 $line->subprice = (float) ($line->pa_ht / (1 - ((
float) $mark_rate / 100)));
830 $line->subprice = (float) $line->pa_ht;
833 if ($line->fk_product > 0) {
835 $res =
$prod->fetch($line->fk_product);
837 if (
$prod->price_min > $line->subprice) {
838 $price_subprice =
price($line->subprice, 0, $outlangs, 1, -1, -1,
'auto');
839 $price_price_min =
price(
$prod->price_min, 0, $outlangs, 1, -1, -1,
'auto');
840 setEventMessages(
$prod->ref .
' - ' .
$prod->label .
' (' . $price_subprice .
' < ' . $price_price_min .
' ' . strtolower($langs->trans(
"MinPrice")) .
')' .
"\n",
null,
'warnings');
850 $multicurrency_subprice = (float) $line->subprice * $line->multicurrency_subprice / $subprice_multicurrency;
852 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx,
'HT', $line->info_bits, $line->date_start, $line->date_end, $line->product_type, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->product_ref, $line->special_code, $line->array_options, $line->fk_unit, $multicurrency_subprice);
855 if (is_numeric($margin_rate) && empty($mark_rate)) {
856 $line->marge_tx = $margin_rate;
857 } elseif (is_numeric($mark_rate) && empty($margin_rate)) {
858 $line->marque_tx = $mark_rate;
860 $line->total_ht = $line->qty * (float) $line->subprice;
861 $line->total_tva = $line->tva_tx * $line->qty * (float) $line->subprice;
862 $line->total_ttc = (1 + $line->tva_tx) * $line->qty * (
float) $line->subprice;
864 $line->multicurrency_total_ht = $line->qty * (float) $subprice_multicurrency * $line->multicurrency_subprice / $line->subprice;
865 $line->multicurrency_total_tva = $line->tva_tx * $line->qty * (float) $subprice_multicurrency * $line->multicurrency_subprice / $line->subprice;
866 $line->multicurrency_total_ttc = (1 + $line->tva_tx) * $line->qty * (
float) $subprice_multicurrency * $line->multicurrency_subprice / $line->subprice;
868 $line->multicurrency_subprice = $multicurrency_subprice;
874 } elseif ($action ==
'confirm_addtextline' && $usercancreate) {
877 $langs->load(
'subtotals');
879 $desc =
GETPOST(
'subtotaltextcontent',
'restricthtml');
882 $result =
$object->addSubtotalLine($langs, $desc, 0, array());
893 $outputlangs = $langs;
894 $newlang =
GETPOST(
'lang_id',
'alpha');
896 $newlang =
$object->thirdparty->default_lang;
898 if (!empty($newlang)) {
900 $outputlangs->setDefaultLang($newlang);
903 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
908 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' . $id);
910 } elseif ($action ==
'confirm_addtitleline' && $usercancreate) {
913 $langs->load(
'subtotals');
915 $desc =
GETPOST(
'subtotallinedesc',
'alphanohtml');
916 $depth =
GETPOSTINT(
'subtotallinelevel') ?? 1;
918 $subtotal_options = array();
920 foreach (Commande::$TITLE_OPTIONS as $option) {
921 $value =
GETPOST($option,
'alphanohtml');
923 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
928 $result =
$object->addSubtotalLine($langs, $desc, (
int) $depth, $subtotal_options);
939 $outputlangs = $langs;
940 $newlang =
GETPOST(
'lang_id',
'alpha');
942 $newlang =
$object->thirdparty->default_lang;
944 if (!empty($newlang)) {
946 $outputlangs->setDefaultLang($newlang);
949 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
954 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' . $id);
956 } elseif ($action ==
'confirm_addsubtotalline' && $usercancreate) {
959 $langs->load(
'subtotals');
961 $choosen_line =
GETPOST(
'subtotaltitleline',
'alphanohtml');
962 foreach (
$object->lines as $line) {
963 if ($line->desc == $choosen_line && $line->special_code == SUBTOTALS_SPECIAL_CODE) {
965 $depth = -$line->qty;
969 $subtotal_options = array();
971 foreach (Commande::$SUBTOTAL_OPTIONS as $option) {
972 $value =
GETPOST($option,
'alphanohtml');
974 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
979 if (isset($desc) && isset($depth)) {
980 $result =
$object->addSubtotalLine($langs, $desc, (
int) $depth, $subtotal_options);
983 $object->errors[] = $langs->trans(
"CorrespondingTitleNotFound");
992 $outputlangs = $langs;
993 $newlang =
GETPOST(
'lang_id',
'alpha');
995 $newlang =
$object->thirdparty->default_lang;
997 if (!empty($newlang)) {
999 $outputlangs->setDefaultLang($newlang);
1002 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1007 header(
'Location: ' . $_SERVER[
"PHP_SELF"] .
'?id=' . $id);
1009 } elseif ($action ==
'addline' && !
GETPOST(
'submitforalllines',
'alpha') && $usercancreate) {
1010 $langs->load(
'errors');
1015 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
1018 $price_ht_devise =
'';
1020 $price_ttc_devise =
'';
1022 if (
GETPOST(
'price_ht') !==
'') {
1025 if (
GETPOST(
'multicurrency_price_ht') !==
'') {
1028 if (
GETPOST(
'price_ttc') !==
'') {
1031 if (
GETPOST(
'multicurrency_price_ttc') !==
'') {
1032 $price_ttc_devise =
price2num(
GETPOST(
'multicurrency_price_ttc'),
'CU', 2);
1035 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
1036 if ($prod_entry_mode ==
'free') {
1042 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
1047 $tva_tx =
GETPOST(
'tva_tx',
'alpha');
1051 $remise_percent = (GETPOSTISSET(
'remise_percent' . $predef) ?
price2num(
GETPOST(
'remise_percent' . $predef,
'alpha'),
'', 2) : 0);
1052 if (empty($remise_percent)) {
1053 $remise_percent = 0;
1057 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1058 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
1060 if (is_array($extralabelsline)) {
1062 foreach ($extralabelsline as $key => $value) {
1063 unset($_POST[
"options_" . $key]);
1067 $price_to_test_sign = ($price_ht ? $price_ht : $price_ttc);
1069 if ((empty($idprod) || $idprod < 0) && ($price_to_test_sign < 0) && ($qty < 0)) {
1070 $langs->load(
"errors");
1071 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1074 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
1075 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
1078 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && $price_ht ===
'' && $price_ht_devise ===
'' && $price_ttc ===
'' && $price_ttc_devise ===
'') {
1079 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
1083 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1088 setEventMessages($langs->trans(
'FieldCannotBeNegative', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1092 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
1093 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
1097 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
1098 if ($combinations =
GETPOST(
'combinations',
'array:alphanohtml')) {
1102 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1103 $idprod = $res->fk_product_child;
1105 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1111 if (!$error && (!empty($line_desc) || (!empty($idprod) && $idprod > 0))) {
1119 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
1130 if (!empty($idprod) && $idprod > 0) {
1132 $prod->fetch($idprod);
1144 $pu_ht =
$prod->price;
1145 $pu_ttc =
$prod->price_ttc;
1146 $price_min =
$prod->price_min;
1147 $price_min_ttc =
$prod->price_min_ttc;
1148 $price_base_type =
$prod->price_base_type;
1152 require_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1156 $filter = array(
't.fk_product' => (
string)
$prod->id,
't.fk_soc' => (
string)
$object->thirdparty->id);
1159 $pricebycustomerexist =
false;
1160 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
1163 if (count($prodcustprice->lines) > 0) {
1164 $date_now = (int) floor(
dol_now() / 86400) * 86400;
1165 foreach ($prodcustprice->lines as $k => $custprice_line) {
1166 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
1167 $pricebycustomerexist =
true;
1168 $pu_ht =
price($custprice_line->price);
1169 $pu_ttc =
price($custprice_line->price_ttc);
1170 $price_min =
price($custprice_line->price_min);
1171 $price_min_ttc =
price($custprice_line->price_min_ttc);
1172 $price_base_type = $custprice_line->price_base_type;
1189 if (!$pricebycustomerexist && !empty(
$object->thirdparty->price_level)) {
1190 $pu_ht =
$prod->multiprices[
$object->thirdparty->price_level];
1191 $pu_ttc =
$prod->multiprices_ttc[
$object->thirdparty->price_level];
1192 $price_min =
$prod->multiprices_min[
$object->thirdparty->price_level];
1193 $price_min_ttc =
$prod->multiprices_min_ttc[
$object->thirdparty->price_level];
1194 $price_base_type =
$prod->multiprices_base_type[
$object->thirdparty->price_level];
1196 if (isset(
$prod->multiprices_tva_tx[
$object->thirdparty->price_level])) {
1197 $tva_tx =
$prod->multiprices_tva_tx[
$object->thirdparty->price_level];
1199 if (isset(
$prod->multiprices_recuperableonly[
$object->thirdparty->price_level])) {
1200 $tva_npr =
$prod->multiprices_recuperableonly[
$object->thirdparty->price_level];
1205 $pu_ht =
$prod->multiprices[
$object->thirdparty->price_level];
1206 $pu_ttc =
$prod->multiprices_ttc[
$object->thirdparty->price_level];
1207 $price_min =
$prod->multiprices_min[
$object->thirdparty->price_level];
1208 $price_min_ttc =
$prod->multiprices_min_ttc[
$object->thirdparty->price_level];
1209 $price_base_type =
$prod->multiprices_base_type[
$object->thirdparty->price_level];
1211 if (isset(
$prod->multiprices_tva_tx[
$object->thirdparty->price_level])) {
1212 $tva_tx =
$prod->multiprices_tva_tx[
$object->thirdparty->price_level];
1214 if (isset(
$prod->multiprices_recuperableonly[
$object->thirdparty->price_level])) {
1215 $tva_npr =
$prod->multiprices_recuperableonly[
$object->thirdparty->price_level];
1220 require_once DOL_DOCUMENT_ROOT .
'/product/class/productcustomerprice.class.php';
1224 $filter = array(
't.fk_product' => (
string)
$prod->id,
't.fk_soc' => (
string)
$object->thirdparty->id);
1226 $result = $prodcustprice->fetchAll(
'',
'', 0, 0, $filter);
1229 if (count($prodcustprice->lines) > 0) {
1230 $date_now = (int) floor(
dol_now() / 86400) * 86400;
1231 foreach ($prodcustprice->lines as $k => $custprice_line) {
1232 if ($custprice_line->date_begin <= $date_now && (empty($custprice_line->date_end) || $date_now <= $custprice_line->date_end)) {
1233 $pu_ht =
price($custprice_line->price);
1234 $pu_ttc =
price($custprice_line->price_ttc);
1235 $price_min =
price($custprice_line->price_min);
1236 $price_min_ttc =
price($custprice_line->price_min_ttc);
1237 $price_base_type = $custprice_line->price_base_type;
1255 if (
$prod->prices_by_qty[0]) {
1260 foreach (
$prod->prices_by_qty_list[0] as $priceforthequantityarray) {
1261 if ($priceforthequantityarray[
'rowid'] != $pqp) {
1265 if ($priceforthequantityarray[
'price_base_type'] ==
'HT') {
1266 $pu_ht = $priceforthequantityarray[
'unitprice'];
1268 $pu_ttc = $priceforthequantityarray[
'unitprice'];
1276 if (
$prod->prices_by_qty[
$object->thirdparty->price_level]) {
1280 foreach (
$prod->prices_by_qty_list[
$object->thirdparty->price_level] as $priceforthequantityarray) {
1281 if ($priceforthequantityarray[
'rowid'] != $pqp) {
1285 if ($priceforthequantityarray[
'price_base_type'] ==
'HT') {
1286 $pu_ht = $priceforthequantityarray[
'unitprice'];
1288 $pu_ttc = $priceforthequantityarray[
'unitprice'];
1296 $tmpvat = (float)
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
1297 $tmpprodvat = (float)
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string)
$prod->tva_tx));
1302 if (!empty($price_ht) || (
string) $price_ht ===
'0') {
1303 $pu_ht = (float)
price2num($price_ht,
'MU');
1304 $pu_ttc = (float)
price2num((
float) $pu_ht * (1 + ((float) $tmpvat / 100)),
'MU');
1305 $price_base_type =
'HT';
1306 } elseif (!empty($price_ht_devise) || (
string) $price_ht_devise ===
'0') {
1307 $pu_ht_devise =
price2num($price_ht_devise,
'MU');
1308 $pu_ttc_devise = (float)
price2num((
float) $pu_ht_devise * (1 + ((float) $tmpvat / 100)),
'MU');
1311 $price_base_type =
'HT';
1312 } elseif (!empty($price_ttc) || (
string) $price_ttc ===
'0') {
1313 $pu_ttc = (float)
price2num($price_ttc,
'MU');
1314 $pu_ht = (float)
price2num((
float) $pu_ttc / (1 + ((float) $tmpvat / 100)),
'MU');
1315 $price_base_type =
'TTC';
1316 } elseif (!empty($price_ttc_devise) || (
string) $price_ttc_devise ===
'0') {
1317 $pu_ttc_devise = (float)
price2num($price_ttc_devise,
'MU');
1318 $pu_ht_devise = (float)
price2num((
float) $pu_ttc_devise / (1 + ((float) $tmpvat / 100)),
'MU');
1321 $price_base_type =
'TTC';
1322 } elseif ($tmpvat != $tmpprodvat) {
1324 if ($price_base_type !=
'HT') {
1325 $pu_ht = (float)
price2num((
float) $pu_ttc / (1 + ((float) $tmpvat / 100)),
'MU');
1327 $pu_ttc = (float)
price2num((
float) $pu_ht * (1 + ((float) $tmpvat / 100)),
'MU');
1335 $outputlangs = $langs;
1337 if (
GETPOST(
'lang_id',
'aZ09')) {
1338 $newlang =
GETPOST(
'lang_id',
'aZ09');
1340 if (empty($newlang)) {
1341 $newlang =
$object->thirdparty->default_lang;
1343 if (!empty($newlang)) {
1345 $outputlangs->setDefaultLang($newlang);
1348 $desc = (!empty(
$prod->multilangs[$outputlangs->defaultlang][
"description"])) ?
$prod->multilangs[$outputlangs->defaultlang][
"description"] :
$prod->
description;
1350 $desc =
$prod->description;
1366 $outputlangs = $langs;
1368 if (
GETPOST(
'lang_id',
'alpha')) {
1369 $newlang =
GETPOST(
'lang_id',
'alpha');
1371 if (empty($newlang)) {
1372 $newlang =
$object->thirdparty->default_lang;
1374 if (!empty($newlang)) {
1376 $outputlangs->setDefaultLang($newlang);
1377 $outputlangs->load(
'products');
1379 if (!empty(
$prod->customcode)) {
1380 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomsCode") .
': ' .
$prod->customcode;
1382 if (!empty(
$prod->customcode) && !empty(
$prod->country_code)) {
1385 if (!empty(
$prod->country_code)) {
1386 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry(
$prod->country_code,
'',
$db, $outputlangs, 0);
1389 if (!empty(
$prod->customcode)) {
1390 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomsCode") .
': ' .
$prod->customcode;
1392 if (!empty(
$prod->customcode) && !empty(
$prod->country_code)) {
1395 if (!empty(
$prod->country_code)) {
1396 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry(
$prod->country_code,
'',
$db, $langs, 0);
1403 $type =
$prod->type;
1404 $fk_unit =
$prod->fk_unit;
1408 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
1409 $tva_tx = str_replace(
'*',
'', $tva_tx);
1410 if (empty($tva_tx)) {
1413 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1416 $fk_unit =
GETPOST(
'units',
'alpha');
1417 $pu_ht_devise =
price2num($price_ht_devise,
'MU');
1418 $pu_ttc_devise =
price2num($price_ttc_devise,
'MU');
1420 if ($pu_ttc && !$pu_ht) {
1421 $price_base_type =
'TTC';
1435 $fournprice = (int) (
GETPOST(
'fournprice'.$predef) ?
GETPOST(
'fournprice'.$predef) : 0);
1436 $buyingprice =
price2num((
GETPOST(
'buying_price'.$predef) !=
'' ?
GETPOST(
'buying_price'.$predef) :
''),
'', 2);
1439 $pu_equivalent = $pu_ht;
1440 $pu_equivalent_ttc = $pu_ttc;
1442 $currency_tx =
$object->multicurrency_tx;
1446 if ($pu_ht ==
'' && $pu_ht_devise !=
'' && $currency_tx !=
'' && !empty((
float) $currency_tx)) {
1447 $pu_equivalent = (float) $pu_ht_devise / (
float) $currency_tx;
1449 if ($pu_ttc ==
'' && $pu_ttc_devise !=
'' && $currency_tx !=
'' && !empty((
float) $currency_tx)) {
1450 $pu_equivalent_ttc = (float) $pu_ttc_devise / (
float) $currency_tx;
1467 if ($usermustrespectpricemin) {
1468 if ($pu_equivalent && $price_min && (((
float)
price2num($pu_equivalent) * (1 - $remise_percent / 100)) < (
float)
price2num($price_min)) && $price_base_type ==
'HT') {
1469 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1472 } 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') {
1473 $mesg = $langs->trans(
"CantBeLessThanMinPriceInclTax",
price(
price2num($price_min_ttc,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1481 $result =
$object->addline($desc, $pu_ht, (
float) $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,
GETPOSTINT(
'fk_parent_line'), (
int) $fournprice, $buyingprice, $label, $array_options, $fk_unit,
'', 0, (
float) $pu_ht_devise);
1493 $outputlangs = $langs;
1494 $newlang =
GETPOST(
'lang_id',
'alpha');
1496 $newlang =
$object->thirdparty->default_lang;
1498 if (!empty($newlang)) {
1500 $outputlangs->setDefaultLang($newlang);
1503 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1506 unset($_POST[
'prod_entry_mode']);
1508 unset($_POST[
'qty']);
1509 unset($_POST[
'type']);
1510 unset($_POST[
'remise_percent']);
1511 unset($_POST[
'price_ht']);
1512 unset($_POST[
'multicurrency_price_ht']);
1513 unset($_POST[
'price_ttc']);
1514 unset($_POST[
'tva_tx']);
1515 unset($_POST[
'product_ref']);
1516 unset($_POST[
'product_label']);
1517 unset($_POST[
'product_desc']);
1518 unset($_POST[
'fournprice']);
1519 unset($_POST[
'buying_price']);
1520 unset($_POST[
'np_marginRate']);
1521 unset($_POST[
'np_markRate']);
1522 unset($_POST[
'dp_desc']);
1523 unset($_POST[
'idprod']);
1524 unset($_POST[
'units']);
1526 unset($_POST[
'date_starthour']);
1527 unset($_POST[
'date_startmin']);
1528 unset($_POST[
'date_startsec']);
1529 unset($_POST[
'date_startday']);
1530 unset($_POST[
'date_startmonth']);
1531 unset($_POST[
'date_startyear']);
1532 unset($_POST[
'date_endhour']);
1533 unset($_POST[
'date_endmin']);
1534 unset($_POST[
'date_endsec']);
1535 unset($_POST[
'date_endday']);
1536 unset($_POST[
'date_endmonth']);
1537 unset($_POST[
'date_endyear']);
1539 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
1548 } elseif ($action ==
'updatetitleline' && GETPOSTISSET(
"save") && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
1551 $langs->load(
'subtotals');
1553 $desc =
GETPOST(
'line_desc',
'alphanohtml') ?? $langs->trans(
"Title");
1556 $subtotal_options = array();
1558 foreach (Commande::$TITLE_OPTIONS as $option) {
1559 $value =
GETPOST($option,
'alphanohtml');
1561 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
1566 $result =
$object->updateSubtotalLine($langs,
GETPOSTINT(
'lineid'), $desc, $depth, $subtotal_options);
1577 $outputlangs = $langs;
1578 $newlang =
GETPOST(
'lang_id',
'alpha');
1580 $newlang =
$object->thirdparty->default_lang;
1582 if (!empty($newlang)) {
1584 $outputlangs->setDefaultLang($newlang);
1587 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1592 } elseif ($action ==
'updatetextline' && GETPOSTISSET(
"save") && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
1595 $langs->load(
'subtotals');
1597 $desc =
GETPOST(
'line_desc',
'restricthtml');
1600 $result =
$object->updateSubtotalLine($langs,
GETPOSTINT(
'lineid'), $desc, 0, array());
1611 $outputlangs = $langs;
1612 $newlang =
GETPOST(
'lang_id',
'alpha');
1614 $newlang =
$object->thirdparty->default_lang;
1616 if (!empty($newlang)) {
1618 $outputlangs->setDefaultLang($newlang);
1621 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1626 } elseif ($action ==
'updatesubtotalline' && GETPOSTISSET(
"save") && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
1629 $langs->load(
'subtotals');
1631 $desc =
GETPOST(
'line_desc',
'alphanohtml');
1634 $subtotal_options = array();
1636 foreach (Commande::$SUBTOTAL_OPTIONS as $option) {
1637 $value =
GETPOST($option,
'alphanohtml');
1639 $subtotal_options[$option] = $value ==
'on' ? 1 : $value;
1644 $result =
$object->updateSubtotalLine($langs,
GETPOSTINT(
'lineid'), $desc, $depth, $subtotal_options);
1652 $outputlangs = $langs;
1653 $newlang =
GETPOST(
'lang_id',
'alpha');
1655 $newlang =
$object->thirdparty->default_lang;
1657 if (!empty($newlang)) {
1659 $outputlangs->setDefaultLang($newlang);
1662 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1667 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'save')) {
1680 if (preg_match(
'/\*/',
GETPOST(
'tva_tx'))) {
1685 $vat_rate = (
GETPOST(
'tva_tx') ?
GETPOST(
'tva_tx',
'alpha') : 0);
1686 $vat_rate = str_replace(
'*',
'', $vat_rate);
1698 $pu_equivalent = $pu_ht;
1699 $pu_equivalent_ttc = $pu_ttc;
1701 $currency_tx =
$object->multicurrency_tx;
1705 if ($pu_ht ==
'' && $pu_ht_devise !=
'' && $currency_tx !=
'' && !empty((
float) $currency_tx)) {
1706 $pu_equivalent = (float) $pu_ht_devise / (
float) $currency_tx;
1708 if ($pu_ttc ==
'' && $pu_ttc_devise !=
'' && $currency_tx !=
'' && !empty((
float) $currency_tx)) {
1709 $pu_equivalent_ttc = (float) $pu_ttc_devise / (
float) $currency_tx;
1724 $fournprice = (int) (
GETPOST(
'fournprice') ?
GETPOST(
'fournprice') :
'');
1728 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1729 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1731 if (is_array($extralabelsline)) {
1732 foreach ($extralabelsline as $key => $value) {
1733 unset($_POST[
"options_" . $key]);
1749 $price_base_type =
'HT';
1750 if (empty($pu_ht) && !empty($pu_ttc)) {
1752 $price_base_type =
'TTC';
1753 } elseif (!empty($pu_ht) && !empty($pu_ttc)) {
1754 foreach (
$object->lines as $line_obj) {
1757 if ($line_obj->wasEnteredIncludingTax()) {
1759 $price_base_type =
'TTC';
1768 if (!empty($productid)) {
1770 $product->fetch($productid);
1772 $type = $product->type;
1774 $price_min = $product->price_min;
1776 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
1778 $price_min_ttc = $product->price_min_ttc;
1780 $price_min_ttc = $product->multiprices_min_ttc[
$object->thirdparty->price_level];
1786 if ($usermustrespectpricemin) {
1787 if ($pu_equivalent && $price_min && (((
float)
price2num($pu_equivalent) * (1 - (
float) $remise_percent / 100)) < (float)
price2num($price_min)) && $price_base_type ==
'HT') {
1788 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1791 $action =
'editline';
1792 } elseif ($pu_equivalent_ttc && $price_min_ttc && (((
float)
price2num($pu_equivalent_ttc) * (1 - (
float) $remise_percent / 100)) < (
float)
price2num($price_min_ttc)) && $price_base_type ==
'TTC') {
1793 $mesg = $langs->trans(
"CantBeLessThanMinPriceInclTax",
price(
price2num($price_min_ttc,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
1796 $action =
'editline';
1801 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1805 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
1807 $action =
'editline';
1812 setEventMessages($langs->trans(
'FieldCannotBeNegative', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1814 $action =
'editline';
1819 if ($qty < $object->expeditions[
GETPOST(
'lineid',
'int')]) {
1820 setEventMessages($langs->trans(
'ErrorQtyOrderedLessQtyShipped'),
null,
'errors');
1822 $action =
'editline';
1829 if (!$user->hasRight(
'margins',
'creer')) {
1830 foreach (
$object->lines as &$line) {
1832 $fournprice = $line->fk_fournprice;
1833 $buyingprice = $line->pa_ht;
1839 $result =
$object->updateline(
GETPOSTINT(
'lineid'), $description, (
float) $pu, (
float) $qty, (
float) $remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $price_base_type, $info_bits,
$date_start, $date_end, $type,
GETPOSTINT(
'fk_parent_line'), 0, (
int) $fournprice, $buyingprice, $label, $special_code, $array_options,
GETPOSTINT(
'units'), (
float) $pu_ht_devise);
1847 $outputlangs = $langs;
1850 $newlang =
GETPOST(
'lang_id',
'aZ09');
1853 $newlang =
$object->thirdparty->default_lang;
1855 if (!empty($newlang)) {
1857 $outputlangs->setDefaultLang($newlang);
1861 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1864 unset($_POST[
'qty']);
1865 unset($_POST[
'type']);
1866 unset($_POST[
'productid']);
1867 unset($_POST[
'remise_percent']);
1868 unset($_POST[
'price_ht']);
1869 unset($_POST[
'multicurrency_price_ht']);
1870 unset($_POST[
'price_ttc']);
1871 unset($_POST[
'tva_tx']);
1872 unset($_POST[
'product_ref']);
1873 unset($_POST[
'product_label']);
1874 unset($_POST[
'product_desc']);
1875 unset($_POST[
'fournprice']);
1876 unset($_POST[
'buying_price']);
1878 unset($_POST[
'date_starthour']);
1879 unset($_POST[
'date_startmin']);
1880 unset($_POST[
'date_startsec']);
1881 unset($_POST[
'date_startday']);
1882 unset($_POST[
'date_startmonth']);
1883 unset($_POST[
'date_startyear']);
1884 unset($_POST[
'date_endhour']);
1885 unset($_POST[
'date_endmin']);
1886 unset($_POST[
'date_endsec']);
1887 unset($_POST[
'date_endday']);
1888 unset($_POST[
'date_endmonth']);
1889 unset($_POST[
'date_endyear']);
1896 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'cancel',
'alpha')) {
1897 header(
'Location: ' . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id);
1899 } elseif ($action ==
'confirm_validate' && $confirm ==
'yes' && $usercanvalidate) {
1902 $qualified_for_stock_change = 0;
1904 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1906 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1911 if (!$idwarehouse || $idwarehouse == -1) {
1913 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1919 $locationTarget =
'';
1923 $result =
$object->valid($user, $idwarehouse);
1928 $deposit_percent_from_payment_terms = (float)
getDictionaryValue(
'c_payment_term',
'deposit_percent',
$object->cond_reglement_id);
1931 GETPOST(
'generate_deposit',
'alpha') ==
'on' && !empty($deposit_percent_from_payment_terms)
1932 &&
isModEnabled(
'invoice') && $user->hasRight(
'facture',
'creer')
1934 require_once DOL_DOCUMENT_ROOT .
'/compta/facture/class/facture.class.php';
1937 $forceFields = array();
1939 if (GETPOSTISSET(
'date_pointoftax')) {
1947 $locationTarget = DOL_URL_ROOT .
'/compta/facture/card.php?id=' . $deposit->id;
1959 $outputlangs = $langs;
1962 $newlang =
GETPOST(
'lang_id',
'aZ09');
1965 $newlang =
$object->thirdparty->default_lang;
1967 if (!empty($newlang)) {
1969 $outputlangs->setDefaultLang($newlang);
1974 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1977 $deposit->fetch($deposit->id);
1978 $deposit->generateDocument($deposit->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1982 if ($locationTarget) {
1983 header(
'Location: ' . $locationTarget);
1994 } elseif ($action ==
'confirm_modif' && $usercancreate) {
1996 $idwarehouse =
GETPOST(
'idwarehouse');
1998 $qualified_for_stock_change = 0;
2000 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2002 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2007 if (!$idwarehouse || $idwarehouse == -1) {
2009 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
2015 $result =
$object->setDraft($user, $idwarehouse);
2019 $outputlangs = $langs;
2022 $newlang =
GETPOST(
'lang_id',
'aZ09');
2025 $newlang =
$object->thirdparty->default_lang;
2027 if (!empty($newlang)) {
2029 $outputlangs->setDefaultLang($newlang);
2034 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
2040 } elseif ($action ==
'confirm_shipped' && $confirm ==
'yes' && $usercanclose) {
2041 $result =
$object->cloture($user);
2045 } elseif ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanvalidate) {
2048 $qualified_for_stock_change = 0;
2050 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2052 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2057 if (!$idwarehouse || $idwarehouse == -1) {
2059 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
2065 $result =
$object->cancel($user, $idwarehouse);
2073 if ($action ==
'update_extras' && $permissiontoeditextra) {
2076 $attribute_name =
GETPOST(
'attribute',
'aZ09');
2079 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
2086 $result =
$object->updateExtraField($attribute_name,
'ORDER_MODIFY');
2094 $action =
'edit_extras';
2100 $fromElement =
GETPOST(
'fromelement');
2101 $fromElementid =
GETPOST(
'fromelementid');
2102 $importLines =
GETPOST(
'line_checkbox');
2104 if (!empty($importLines) && is_array($importLines) && !empty($fromElement) && ctype_alpha($fromElement) && !empty($fromElementid)) {
2105 if ($fromElement ==
'commande') {
2106 dol_include_once(
'/' . $fromElement .
'/class/' . $fromElement .
'.class.php');
2107 $lineClassName =
'OrderLine';
2108 } elseif ($fromElement ==
'propal') {
2109 dol_include_once(
'/comm/' . $fromElement .
'/class/' . $fromElement .
'.class.php');
2110 $lineClassName =
'PropaleLigne';
2111 } elseif ($fromElement ==
'facture') {
2112 dol_include_once(
'/compta/' . $fromElement .
'/class/' . $fromElement .
'.class.php');
2113 $lineClassName =
'FactureLigne';
2115 $nextRang = count(
$object->lines) + 1;
2118 foreach ($importLines as $lineId) {
2119 $lineId = intval($lineId);
2120 $originLine =
new $lineClassName(
$db);
2121 if (intval($fromElementid) > 0 && $originLine->fetch($lineId) > 0) {
2122 $originLine->fetch_optionals();
2123 $desc = $originLine->desc;
2124 $pu_ht = $originLine->subprice;
2125 $qty = $originLine->qty;
2126 $txtva = $originLine->tva_tx;
2127 $txlocaltax1 = $originLine->localtax1_tx;
2128 $txlocaltax2 = $originLine->localtax2_tx;
2129 $fk_product = $originLine->fk_product;
2130 $remise_percent = $originLine->remise_percent;
2132 $date_end = $originLine->date_end;
2133 $fk_code_ventilation = 0;
2134 $info_bits = $originLine->info_bits;
2135 $fk_remise_except = $originLine->fk_remise_except;
2136 $price_base_type =
'HT';
2138 $type = $originLine->product_type;
2139 $rang = $nextRang++;
2140 $special_code = $originLine->special_code;
2141 $origin = $originLine->element;
2142 $origin_id = $originLine->id;
2143 $fk_parent_line = 0;
2144 $fk_fournprice = $originLine->fk_fournprice;
2145 $pa_ht = $originLine->pa_ht;
2146 $label = $originLine->label;
2147 $array_options = $originLine->array_options;
2148 $situation_percent = 100;
2150 $fk_unit = $originLine->fk_unit;
2151 $pu_ht_devise = $originLine->multicurrency_subprice;
2153 $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);
2172 include DOL_DOCUMENT_ROOT .
'/core/actions_printing.inc.php';
2176 $permissiontoadd = $usercancreate;
2177 include DOL_DOCUMENT_ROOT .
'/core/actions_builddoc.inc.php';
2180 $triggersendname =
'ORDER_SENTBYMAIL';
2182 $autocopy =
'MAIN_MAIL_AUTOCOPY_ORDER_TO';
2183 $trackid =
'ord' .
$object->id;
2184 include DOL_DOCUMENT_ROOT .
'/core/actions_sendmails.inc.php';
2188 if ($action ==
'addcontact') {
2192 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
2196 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?id=" .
$object->id);
2199 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
2200 $langs->load(
"errors");
2201 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
2206 } elseif ($action ==
'swapstatut') {
2213 } elseif ($action ==
'deletecontact') {
2215 $result =
$object->delete_contact($lineid);
2218 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
"?id=" .
$object->id);
2232$title =
$object->ref .
" - " . $langs->trans(
'Card');
2233if ($action ==
'create') {
2234 $title = $langs->trans(
"NewOrder");
2236$help_url =
'EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes|DE:Modul_Kundenaufträge';
2238llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-order page-card');
2250if ($action ==
'create' && $usercancreate) {
2255 $res = $soc->fetch($socid);
2258 $currency_code =
$conf->currency;
2260 $cond_reglement_id =
GETPOSTINT(
'cond_reglement_id');
2261 $deposit_percent =
GETPOSTFLOAT(
'cond_reglement_id_deposit_percent');
2262 $mode_reglement_id =
GETPOSTINT(
'mode_reglement_id');
2265 if (!empty($origin) && !empty($originid)) {
2267 $element = $subelement = $origin;
2269 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
2270 $element = $regs[1];
2271 $subelement = $regs[2];
2274 if ($element ==
'project') {
2275 $projectid = $originid;
2277 if (!$cond_reglement_id) {
2278 $cond_reglement_id = $soc->cond_reglement_id;
2280 if (!$deposit_percent) {
2281 $deposit_percent = $soc->deposit_percent;
2283 if (!$mode_reglement_id) {
2284 $mode_reglement_id = $soc->mode_reglement_id;
2286 if (!$remise_percent) {
2287 $remise_percent = $soc->remise_percent;
2291 if ($element ==
'order' || $element ==
'commande') {
2292 $element = $subelement =
'commande';
2293 } elseif ($element ==
'propal') {
2294 $element =
'comm/propal';
2295 $subelement =
'propal';
2296 } elseif ($element ==
'contract') {
2297 $element = $subelement =
'contrat';
2302 $classname = ucfirst($subelement);
2303 $objectsrc =
new $classname(
$db);
2304 '@phan-var-force Commande|Propal|Contrat $objectsrc';
2305 $objectsrc->fetch($originid);
2306 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
2307 $objectsrc->fetch_lines();
2309 $objectsrc->fetch_thirdparty();
2312 $objectsrc->fetch_optionals();
2313 $object->array_options = $objectsrc->array_options;
2315 $projectid = (int) $objectsrc->fk_project;
2316 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
2318 $soc = $objectsrc->thirdparty;
2319 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
2320 $deposit_percent = (!empty($objectsrc->deposit_percent) ? $objectsrc->deposit_percent : (!empty($soc->deposit_percent) ? $soc->deposit_percent :
null));
2321 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
2322 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
2323 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : 0);
2324 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
2325 $warehouse_id = (!empty($objectsrc->warehouse_id) ? $objectsrc->warehouse_id : (!empty($soc->warehouse_id) ? $soc->warehouse_id : 0));
2326 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
2329 $date_delivery = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
'');
2332 if (!empty($objectsrc->multicurrency_code)) {
2333 $currency_code = $objectsrc->multicurrency_code;
2335 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
2336 $currency_tx = $objectsrc->multicurrency_tx;
2340 $note_private =
$object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
2341 $note_public =
$object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
2344 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
2347 $cond_reglement_id = empty($soc->cond_reglement_id) ? $cond_reglement_id : $soc->cond_reglement_id;
2348 $deposit_percent = empty($soc->deposit_percent) ? $deposit_percent : $soc->deposit_percent;
2349 $mode_reglement_id = empty($soc->mode_reglement_id) ? $mode_reglement_id : $soc->mode_reglement_id;
2350 $fk_account = empty($soc->mode_reglement_id) ? $fk_account : $soc->fk_account;
2351 $availability_id = 0;
2352 $shipping_method_id = empty($soc->shipping_method_id) ? $shipping_method_id : $soc->shipping_method_id;
2353 $warehouse_id = $soc->fk_warehouse;
2354 $demand_reason_id = $soc->demand_reason_id;
2357 if (
isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
2358 $currency_code = $soc->multicurrency_code;
2361 $note_private =
$object->getDefaultCreateValueFor(
'note_private');
2362 $note_public =
$object->getDefaultCreateValueFor(
'note_public');
2366 if (!
GETPOST(
'changecompany')) {
2367 if (GETPOSTISSET(
'cond_reglement_id')) {
2368 $cond_reglement_id =
GETPOSTINT(
'cond_reglement_id');
2370 if (GETPOSTISSET(
'deposit_percent')) {
2373 if (GETPOSTISSET(
'mode_reglement_id')) {
2374 $mode_reglement_id =
GETPOSTINT(
'mode_reglement_id');
2376 if (GETPOSTISSET(
'cond_reglement_id')) {
2382 if ($soc->fk_warehouse > 0) {
2383 $warehouse_id = $soc->fk_warehouse;
2390 $warehouse_id = $user->fk_warehouse;
2394 print
'<form name="crea_commande" action="' . $_SERVER[
"PHP_SELF"] .
'" method="POST">';
2395 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
2396 print
'<input type="hidden" name="action" value="add">';
2397 print
'<input type="hidden" name="changecompany" value="0">';
2398 print
'<input type="hidden" name="remise_percent" value="' . $soc->remise_percent .
'">';
2399 print
'<input type="hidden" name="origin" value="' . $origin .
'">';
2400 print
'<input type="hidden" name="originid" value="' . $originid .
'">';
2401 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
2402 if (!empty($currency_tx)) {
2403 print
'<input type="hidden" name="originmulticurrency_tx" value="' . $currency_tx .
'">';
2409 $parameters = array();
2411 $reshook = $hookmanager->executeHooks(
'tabContentCreateOrder', $parameters, $object, $action);
2412 if (empty($reshook)) {
2413 print
'<table class="border centpercent">';
2420 print
'<td class="fieldrequired">' . $langs->trans(
'Customer') .
'</td>';
2423 print $soc->getNomUrl(1,
'customer');
2424 print
'<input type="hidden" name="socid" value="' . $soc->id .
'">';
2427 print
'<td class="valuefieldcreate">';
2428 $filter =
'((s.client:IN:1,2,3) AND (s.status:=:1))';
2429 print
img_picto(
'',
'company',
'class="pictofixedwidth"') . $form->select_company(
'',
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
2433 $(document).ready(function() {
2434 $("#socid").change(function() {
2435 console.log("We have changed the company - Reload page");
2436 var socid = $(this).val();
2438 $("input[name=action]").val("create");
2439 $("input[name=changecompany]").val("1");
2440 $("form[name=crea_commande]").submit();
2445 print
' <a href="' . DOL_URL_ROOT .
'/societe/card.php?action=create&customer=3&fournisseur=0&backtopage=' . urlencode($_SERVER[
"PHP_SELF"] .
'?action=create') .
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="' . $langs->trans(
"AddThirdParty") .
'"></span></a>';
2448 print
'</tr>' .
"\n";
2453 if (
getDolGlobalString(
'MAIN_USE_PROPAL_REFCLIENT_FOR_ORDER') && !empty($origin) && !empty($originid)) {
2454 print $langs->trans(
'RefProposal') .
'</td><td>';
2455 print
'<input type="text" name="ref_client" value="' . $ref_client .
'">';
2457 print $form->textwithpicto($langs->trans(
'RefCustomer'), $langs->trans(
'RefOfOnCustomerSide', $langs->transnoentitiesnoconv(
"Order"))) .
'</td><td>';
2458 print
'<input type="text" name="ref_client" value="' .
GETPOST(
'ref_client') .
'">';
2468 print $form->textwithpicto($langs->trans(
"DefaultContact"), $langs->trans(
"TypeContact_commande_external_" . $type_contact_code));
2470 print
img_picto(
'',
'contact',
'class="pictofixedwidth"');
2472 print $form->select_contact($soc->id, $contactid,
'contactid', 1, empty($srccontactslist) ?
"" : $srccontactslist,
'', 1,
'maxwidth300 widthcentpercentminusx', true);
2476 print
'<tr><td>' . $langs->trans(
'Discounts') .
'</td><td>';
2478 $absolute_discount = $soc->getAvailableDiscounts();
2482 $backtopage = $_SERVER[
"PHP_SELF"] .
'?socid=' . $thirdparty->id .
'&action=' . $action .
'&origin=' . urlencode((
string) (
GETPOST(
'origin'))) .
'&originid=' . urlencode((
string) (
GETPOSTINT(
'originid')));
2483 include DOL_DOCUMENT_ROOT .
'/core/tpl/object_discounts.tpl.php';
2491 print
'<tr><td class="fieldrequired">' . $langs->trans(
'Date') .
'</td><td>';
2492 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2493 print $form->selectDate($dateorder,
're', 0, 0, 0,
"crea_commande", 1, 1);
2497 print
'<tr><td>' . $langs->trans(
"DateDeliveryPlanned") .
'</td>';
2498 print
'<td colspan="3">';
2499 $date_delivery = ($date_delivery ? $date_delivery :
$object->delivery_date);
2500 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2501 print $form->selectDate($date_delivery ? $date_delivery : -1,
'liv_', 1, 1, 1);
2506 print
'<tr class="fielddeliverydelay"><td>' . $langs->trans(
'AvailabilityPeriod') .
'</td><td>';
2507 print
img_picto(
'',
'clock',
'class="pictofixedwidth"');
2508 $form->selectAvailabilityDelay((GETPOSTISSET(
'availability_id') ?
GETPOST(
'availability_id') : $availability_id),
'availability_id',
'', 1,
'maxwidth200 widthcentpercentminusx');
2512 print
'<tr><td class="nowrap">' . $langs->trans(
'PaymentConditionsShort') .
'</td><td>';
2513 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2514 print $form->getSelectConditionsPaiements((
int) $cond_reglement_id,
'cond_reglement_id', 1, 1, 0,
'maxwidth200 widthcentpercentminusx', (
float) $deposit_percent);
2518 print
'<tr><td>' . $langs->trans(
'PaymentMode') .
'</td><td>';
2519 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2520 print $form->select_types_paiements((
string) $mode_reglement_id,
'mode_reglement_id',
'CRDT', 0, 1, 0, 0, 1,
'maxwidth200 widthcentpercentminusx', 1);
2525 print
'<tr><td>' . $langs->trans(
'BankAccount') .
'</td><td>';
2526 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"') . $form->select_comptes((
int) $fk_account,
'fk_account', 0,
'', 1,
'', 0,
'maxwidth200 widthcentpercentminusx', 1);
2532 print
'<tr><td>' . $langs->trans(
'SendingMethod') .
'</td><td>';
2533 print
img_picto(
'',
'object_dolly',
'class="pictofixedwidth"');
2534 $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');
2540 print
'<tr><td>' . $langs->trans(
'Warehouse') .
'</td><td>';
2541 print
img_picto(
'',
'stock',
'class="pictofixedwidth"') . $formproduct->selectWarehouses(((GETPOSTISSET(
'warehouse_id') && !
GETPOSTINT(
'changecompany')) ?
GETPOST(
'warehouse_id') : $warehouse_id),
'warehouse_id',
'', 1, 0, 0,
'', 0, 0, array(),
'maxwidth500 widthcentpercentminusxx');
2546 print
'<tr><td>' . $langs->trans(
'Source') .
'</td><td>';
2547 print
img_picto(
'',
'question',
'class="pictofixedwidth"');
2548 $form->selectInputReason((GETPOSTISSET(
'demand_reason_id') ?
GETPOST(
'demand_reason_id') : $demand_reason_id),
'demand_reason_id',
'', 1,
'maxwidth200 widthcentpercentminusx');
2555 $langs->load(
"projects");
2557 print
'<td>'.$langs->trans(
"Project").
'</td><td>';
2558 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects((($soc->id > 0 && !
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_CUSTOMERS')) ? $soc->id : -1), (GETPOSTISSET(
'projectid') ?
GETPOST(
'projectid') : $projectid),
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500 widthcentpercentminusxx');
2559 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>';
2567 print
'<td><label for="incoterm_id">' . $form->textwithpicto($langs->trans(
"IncotermLabel"), !empty($objectsrc->fk_incoterms) ? (
string) $objectsrc->fk_incoterms : (
string) $soc->fk_incoterms, 1) .
'</label></td>';
2568 print
'<td class="maxwidthonsmartphone">';
2569 $incoterm_id =
GETPOST(
'incoterm_id');
2570 $location_incoterms =
GETPOST(
'location_incoterms');
2571 if (empty($incoterm_id)) {
2572 $incoterm_id = (!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms : $soc->fk_incoterms);
2573 $location_incoterms = (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms : $soc->location_incoterms);
2575 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2576 print $form->select_incoterms($incoterm_id, $location_incoterms);
2581 $parameters = array();
2582 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
2583 $parameters[
'objectsrc'] = $objectsrc;
2585 $parameters[
'socid'] = $socid;
2588 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
2589 print $hookmanager->resPrint;
2590 if (empty($reshook)) {
2591 if (
getDolGlobalString(
'THIRDPARTY_PROPAGATE_EXTRAFIELDS_TO_ORDER') && !empty($soc->id)) {
2594 $tpExtrafieldLabels = $tpExtrafields->fetch_name_optionals_label($soc->table_element);
2595 if ($soc->fetch_optionals() > 0) {
2596 $object->array_options = array_merge(
$object->array_options, $soc->array_options);
2600 print
$object->showOptionals($extrafields,
'create', $parameters);
2604 include_once DOL_DOCUMENT_ROOT .
'/core/modules/commande/modules_commande.php';
2606 if (is_array($list) && count($list) > 0) {
2607 print
'<tr><td>' . $langs->trans(
'DefaultModel') .
'</td>';
2610 print
img_picto(
'',
'pdf',
'class="pictofixedwidth"');
2611 print $form->selectarray(
'model', $list, $preselected, 0, 0, 0,
'', 0, 0, 0,
'',
'maxwidth200 widthcentpercentminusx', 1);
2618 print
'<td>' . $form->editfieldkey(
"Currency",
'multicurrency_code',
'', $object, 0) .
'</td>';
2619 print
'<td class="maxwidthonsmartphone">';
2620 print
img_picto(
'',
'currency',
'class="pictofixedwidth"') . $form->selectMultiCurrency(((GETPOSTISSET(
'multicurrency_code') && !
GETPOST(
'changecompany')) ?
GETPOST(
'multicurrency_code') : $currency_code),
'multicurrency_code', 0,
'', false,
'maxwidth200 widthcentpercentminusx');
2626 print
'<tr><td>' . $langs->trans(
"Categories") .
'</td><td colspan="3">';
2627 print $form->selectCategories(Categorie::TYPE_ORDER,
'categories', $object);
2633 print
'<td class="tdtop">' . $langs->trans(
'NotePublic') .
'</td>';
2636 $doleditor =
new DolEditor(
'note_public', (
string) $note_public,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
2637 print $doleditor->Create(1);
2642 if (empty($user->socid)) {
2644 print
'<td class="tdtop">' . $langs->trans(
'NotePrivate') .
'</td>';
2647 $doleditor =
new DolEditor(
'note_private', (
string) $note_private,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
2648 print $doleditor->Create(1);
2653 if (!empty($origin) && !empty($originid) && is_object($objectsrc) && !empty($classname)) {
2655 if ($origin ==
'contrat') {
2657 $objectsrc->update_price(1);
2660 print
"\n<!-- " . $classname .
" info -->\n";
2661 print
'<input type="hidden" name="amount" value="' . $objectsrc->total_ht .
'">' .
"\n";
2662 print
'<input type="hidden" name="total" value="' . $objectsrc->total_ttc .
'">' .
"\n";
2663 print
'<input type="hidden" name="tva" value="' . $objectsrc->total_tva .
'">' .
"\n";
2664 print
'<input type="hidden" name="origin" value="' . $objectsrc->element .
'">';
2665 print
'<input type="hidden" name="originid" value="' . $objectsrc->id .
'">';
2667 switch ($classname) {
2669 $newclassname =
'CommercialProposal';
2672 $newclassname =
'Order';
2675 $newclassname =
'Sending';
2678 $newclassname =
'Contract';
2681 $newclassname = $classname;
2684 print
'<tr><td>' . $langs->trans($newclassname) .
'</td><td>' . $objectsrc->getNomUrl(1) .
'</td></tr>';
2687 print
'<tr><td>' . $langs->trans(
'AmountHT') .
'</td><td>' .
price($objectsrc->total_ht) .
'</td></tr>';
2688 print
'<tr><td>' . $langs->trans(
'AmountVAT') .
'</td><td>' .
price($objectsrc->total_tva) .
"</td></tr>";
2689 if (
$mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
2690 print
'<tr><td>' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td><td>' .
price($objectsrc->total_localtax1) .
"</td></tr>";
2693 if (
$mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
2694 print
'<tr><td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td><td>' .
price($objectsrc->total_localtax2) .
"</td></tr>";
2697 print
'<tr><td>' . $langs->trans(
'AmountTTC') .
'</td><td>' .
price($objectsrc->total_ttc) .
"</td></tr>";
2700 print
'<tr><td>' . $langs->trans(
'MulticurrencyAmountHT') .
'</td><td>' .
price($objectsrc->multicurrency_total_ht) .
'</td></tr>';
2701 print
'<tr><td>' . $langs->trans(
'MulticurrencyAmountVAT') .
'</td><td>' .
price($objectsrc->multicurrency_total_tva) .
"</td></tr>";
2702 print
'<tr><td>' . $langs->trans(
'MulticurrencyAmountTTC') .
'</td><td>' .
price($objectsrc->multicurrency_total_ttc) .
"</td></tr>";
2713 print $form->buttonsSaveCancel(
"CreateDraft");
2716 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
2717 $title = $langs->trans(
'ProductsAndServices');
2720 print
'<div class="div-table-responsive-no-min">';
2721 print
'<table class="noborder centpercent">';
2723 $objectsrc->printOriginLinesList(
'', $selectedLines);
2741 $author->fetch(
$object->user_author_id);
2744 $res =
$object->fetch_optionals();
2747 print
dol_get_fiche_head($head,
'order', $langs->trans(
"CustomerOrder"), -1,
$object->picto, 0,
'',
'', 0,
'', 1);
2752 if ($action ==
'delete') {
2753 $formconfirm = $form->formconfirm(
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id]), $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete',
'', 0, 1);
2757 if ($action ==
'validate') {
2759 $ref = substr(
$object->ref, 1, 4);
2760 if ($ref ==
'PROV' || $ref ==
'') {
2761 $numref =
$object->getNextNumRef($soc);
2762 if (empty($numref)) {
2770 $text = $langs->trans(
'ConfirmValidateOrder', $numref);
2772 require_once DOL_DOCUMENT_ROOT .
'/core/class/notify.class.php';
2775 $text .= $notify->confirmMessage(
'ORDER_VALIDATE',
$object->socid, $object);
2778 $qualified_for_stock_change = 0;
2780 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2782 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2785 $formquestion = array();
2787 $langs->load(
"stocks");
2789 if (
$conf->browser->name ==
'ie') {
2792 $formquestion = array(
2796 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockDecrease"),
'value' => $formproduct->selectWarehouses(
GETPOSTINT(
'idwarehouse') ?
GETPOSTINT(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2802 foreach (
$object->lines as $line) {
2803 $res = $line->fetch_product();
2805 if ($line->product->isService() && $line->product->isMandatoryPeriod() && (empty($line->date_start) || empty($line->date_end))) {
2811 if ($nbMandated > 0) {
2813 setEventMessages($langs->trans(
"mandatoryPeriodNeedTobeSetMsgValidate"),
null,
'errors');
2816 $text .=
'<div><span class="clearboth nowraponall warning">' .
img_warning() . $langs->trans(
"mandatoryPeriodNeedTobeSetMsgValidate") .
'</span></div>';
2820 if (
getDolGlobalInt(
'SALE_ORDER_SUGGEST_DOWN_PAYMENT_INVOICE_CREATION')) {
2825 $deposit_percent_from_payment_terms = (float)
getDictionaryValue(
'c_payment_term',
'deposit_percent',
$object->cond_reglement_id);
2827 if (!empty($deposit_percent_from_payment_terms) &&
isModEnabled(
'invoice') && $user->hasRight(
'facture',
'creer')) {
2828 require_once DOL_DOCUMENT_ROOT .
'/compta/facture/class/facture.class.php';
2832 $eligibleForDepositGeneration =
true;
2834 if (array_key_exists(
'facture',
$object->linkedObjects)) {
2835 foreach (
$object->linkedObjects[
'facture'] as $invoice) {
2836 '@phan-var-force Facture $invoice';
2838 $eligibleForDepositGeneration =
false;
2844 if ($eligibleForDepositGeneration && array_key_exists(
'propal',
$object->linkedObjects)) {
2845 foreach (
$object->linkedObjects[
'propal'] as $proposal) {
2846 $proposal->fetchObjectLinked();
2848 if (array_key_exists(
'facture', $proposal->linkedObjects)) {
2849 foreach ($proposal->linkedObjects[
'facture'] as $invoice) {
2850 '@phan-var-force Facture $invoice';
2852 $eligibleForDepositGeneration =
false;
2860 if ($eligibleForDepositGeneration) {
2861 $formquestion[] = array(
2862 'type' =>
'checkbox',
2864 'name' =>
'generate_deposit',
2865 'label' => $form->textwithpicto($langs->trans(
'GenerateDeposit',
$object->deposit_percent), $langs->trans(
'DepositGenerationPermittedByThePaymentTermsSelected'))
2868 $formquestion[] = array(
2870 'tdclass' =>
'fieldrequired showonlyifgeneratedeposit',
2872 'label' => $langs->trans(
'DateInvoice'),
2878 $formquestion[] = array(
2880 'tdclass' =>
'fieldrequired showonlyifgeneratedeposit',
2881 'name' =>
'date_pointoftax',
2882 'label' => $langs->trans(
'DatePointOfTax'),
2888 $paymentTermsSelect = $form->getSelectConditionsPaiements(0,
'cond_reglement_id', -1, 0, 0,
'minwidth200');
2890 $formquestion[] = array(
2892 'tdclass' =>
'fieldrequired showonlyifgeneratedeposit',
2893 'name' =>
'cond_reglement_id',
2894 'label' => $langs->trans(
'PaymentTerm'),
2895 'value' => $paymentTermsSelect
2898 $formquestion[] = array(
2899 'type' =>
'checkbox',
2900 'tdclass' =>
'showonlyifgeneratedeposit',
2901 'name' =>
'validate_generated_deposit',
2902 'label' => $langs->trans(
'ValidateGeneratedDeposit')
2905 $formquestion[] = array(
2906 'type' =>
'onecolumn',
2909 $(document).ready(function() {
2910 $("[name=generate_deposit]").change(function () {
2911 let $self = $(this);
2912 let $target = $(".showonlyifgeneratedeposit").parent(".tagtr");
2914 if (! $self.parents(".tagtr").is(":hidden") && $self.is(":checked")) {
2931 $formconfirm = $form->formconfirm(
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id]), $langs->trans(
'ValidateOrder'), $text,
'confirm_validate', $formquestion, 0, 1, 240);
2936 if ($action ==
'modif') {
2937 $qualified_for_stock_change = 0;
2939 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2941 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2944 $text = $langs->trans(
'ConfirmUnvalidateOrder',
$object->ref);
2945 $formquestion = array();
2947 $langs->load(
"stocks");
2949 if (
$conf->browser->name ==
'ie') {
2958 'name' =>
'idwarehouse',
2959 'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
2960 'value' => $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo)
2965 $formconfirm = $form->formconfirm(
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id]), $langs->trans(
'UnvalidateOrder'), $text,
'confirm_modif', $formquestion,
"yes", 1, 220);
2969 if ($action ==
'shipped') {
2970 $formconfirm = $form->formconfirm(
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id]), $langs->trans(
'CloseOrder'), $langs->trans(
'ConfirmCloseOrder'),
'confirm_shipped',
'', 0, 1);
2974 if ($action ==
'cancel') {
2975 $qualified_for_stock_change = 0;
2977 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
2979 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
2982 $text = $langs->trans(
'ConfirmCancelOrder',
$object->ref);
2983 $formquestion = array();
2985 $langs->load(
"stocks");
2987 if (
$conf->browser->name ==
'ie') {
2990 $formquestion = array(
2994 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
2998 $formconfirm = $form->formconfirm(
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id]), $langs->trans(
"Cancel"), $text,
'confirm_cancel', $formquestion, 0, 1);
3002 if ($action ==
'ask_deleteline') {
3003 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&lineid=' . $lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
3007 if ($action ==
'ask_subtotal_deleteline') {
3008 $langs->load(
"subtotals");
3009 $title =
"DeleteSubtotalLine";
3010 $question =
"ConfirmDeleteSubtotalLine";
3011 if (
GETPOST(
'type') ==
'title') {
3012 $formconfirm = array(array(
'type' =>
'checkbox',
'name' =>
'deletecorrespondingsubtotalline',
'label' => $langs->trans(
"DeleteCorrespondingSubtotalLine"),
'value' => 0));
3013 $title =
"DeleteTitleLine";
3014 $question =
"ConfirmDeleteTitleLine";
3016 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&lineid=' . $lineid, $langs->trans($title), $langs->trans($question),
'confirm_delete_subtotalline', $formconfirm,
'no', 1);
3020 if ($action ==
'clone') {
3021 $filter =
'(s.client:IN:1,2,3)';
3023 $formquestion = array(
3024 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter,
'', 0, 0, array(), 0,
'maxwidth300'))
3026 $formconfirm = $form->formconfirm(
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id]), $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
3030 if ($action ==
'add_title_line') {
3031 $langs->load(
'subtotals');
3033 $depth_array =
$object->getPossibleLevels($langs);
3034 include DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_create.tpl.php';
3035 } elseif ($action ==
'add_subtotal_line') {
3036 $langs->load(
'subtotals');
3038 $titles =
$object->getPossibleTitles();
3039 include DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_create.tpl.php';
3040 } elseif ($action ==
'add_text_line') {
3041 $langs->load(
'subtotals');
3043 include DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_create.tpl.php';
3047 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
3049 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
3050 if (empty($reshook)) {
3051 $formconfirm .= $hookmanager->resPrint;
3052 } elseif ($reshook > 0) {
3053 $formconfirm = $hookmanager->resPrint;
3062 $linkback =
'<a href="' . DOL_URL_ROOT .
'/commande/list.php?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
"BackToList") .
'</a>';
3064 $morehtmlref =
'<div class="refidno">';
3066 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_client',
$object->ref_client, $object, (
int) $usercancreate,
'string',
'', 0, 1);
3067 $morehtmlref .= $form->editfieldval(
"RefCustomer",
'ref_client',
$object->ref_client, $object, (
int) $usercancreate,
'string' . (isset(
$conf->global->THIRDPARTY_REF_INPUT_SIZE) ?
':' .
getDolGlobalString(
'THIRDPARTY_REF_INPUT_SIZE') :
''),
'', null, null,
'', 1);
3069 $morehtmlref .=
'<br>' . $soc->getNomUrl(1,
'customer');
3071 $morehtmlref .=
' (<a href="' . DOL_URL_ROOT .
'/commande/list.php?socid=' . ((int)
$object->thirdparty->id) .
'">' . $langs->trans(
"OtherOrders") .
'</a>)';
3075 $langs->load(
"projects");
3076 $morehtmlref .=
'<br>';
3077 if ($usercancreate) {
3078 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
3079 if ($action !=
'classify') {
3080 $morehtmlref .=
'<a class="editfielda" href="' . $_SERVER[
'PHP_SELF'] .
'?action=classify&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->transnoentitiesnoconv(
'SetProject')) .
'</a> ';
3082 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->socid, (
string)
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
3084 if (!empty(
$object->fk_project)) {
3086 $proj->fetch(
$object->fk_project);
3087 $morehtmlref .= $proj->getNomUrl(1);
3089 $morehtmlref .=
'<span class="opacitymedium"> - ' .
dol_escape_htmltag($proj->title) .
'</span>';
3094 $morehtmlref .=
'</div>';
3096 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
3099 $parameters = array();
3101 $reshook = $hookmanager->executeHooks(
'tabContentViewOrder', $parameters, $object, $action);
3102 if (empty($reshook)) {
3103 print
'<div class="fichecenter">';
3104 print
'<div class="fichehalfleft">';
3105 print
'<div class="underbanner clearboth"></div>';
3107 print
'<table class="border tableforfield centpercent">';
3111 $langs->load(
"cashdesk");
3112 print
'<tr><td class="fieldname_type">';
3113 print
'<table class="nobordernopadding centpercent"><tr><td>';
3114 print $form->textwithpicto($langs->trans(
'PointOfSale'), $langs->trans(
'POSInfo'));
3116 if ($action !=
'editposinfo' && $usercancreate) {
3117 print
'<td class="right"><a class="editfielda" href="' . $_SERVER[
"PHP_SELF"] .
'?action=editposinfo&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->trans(
'SetPOSInfo'), 1) .
'</a></td>';
3119 print
'</tr></table>';
3120 print
'</td><td class="valuefield fieldname_type">';
3121 print
'<form method="POST" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'" name="formposinfo">';
3122 print
'<input type="hidden" name="action" value="setposinfo">';
3123 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
3124 if ($action ==
'editposinfo') {
3125 print
'<input type="text" class="maxwidth150" name="posmodule" placeholder="' . $langs->trans(
"POSModule") .
'" value="' .
$object->module_source .
'"> ';
3126 print
'<input type="text" class="maxwidth100" name="posterminal" placeholder="' . $langs->trans(
"Terminal") .
'" value="' .
$object->pos_source .
'">';
3127 print
'<input type="submit" class="button" name="submitposinfo" value="' . $langs->trans(
"Submit") .
'">';
3130 print
'<span class="opacitymediumbycolor paddingleft">' .
dolPrintHTML(ucfirst(
$object->module_source) .
' - ' . $langs->transnoentitiesnoconv(
"Terminal") .
' ' .
$object->pos_source) .
'</span>';
3137 if ($soc->outstanding_limit) {
3139 print
'<tr><td class="titlefield">';
3140 print $langs->trans(
'OutstandingBill');
3141 print
'</td><td class="valuefield">';
3142 $arrayoutstandingbills = $soc->getOutstandingBills();
3143 print
price($arrayoutstandingbills[
'opened']) .
' / ';
3144 print
price($soc->outstanding_limit, 0,
'', 1, -1, -1,
$conf->currency);
3151 $filterabsolutediscount =
"fk_facture_source IS NULL";
3152 $filtercreditnote =
"fk_facture_source IS NOT NULL";
3154 $filterabsolutediscount =
"fk_facture_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS RECEIVED)%')";
3155 $filtercreditnote =
"fk_facture_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS RECEIVED)%')";
3158 $addrelativediscount =
'<a href="' . DOL_URL_ROOT .
'/comm/remise.php?id=' . $soc->id .
'&backtopage=' . urlencode($_SERVER[
"PHP_SELF"]) .
'?facid=' .
$object->id .
'">' . $langs->trans(
"EditRelativeDiscounts") .
'</a>';
3159 $addabsolutediscount =
'<a href="' . DOL_URL_ROOT .
'/comm/remx.php?id=' . $soc->id .
'&backtopage=' . urlencode($_SERVER[
"PHP_SELF"]) .
'?facid=' .
$object->id .
'">' . $langs->trans(
"EditGlobalDiscounts") .
'</a>';
3160 $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>';
3162 print
'<tr><td class="titlefield">' . $langs->trans(
'Discounts') .
'</td><td class="valuefield">';
3164 $absolute_discount = $soc->getAvailableDiscounts(
null, $filterabsolutediscount);
3165 $absolute_creditnote = $soc->getAvailableDiscounts(
null, $filtercreditnote);
3166 $absolute_discount =
price2num($absolute_discount,
'MT');
3167 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
3171 $backtopage = $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id;
3172 include DOL_DOCUMENT_ROOT .
'/core/tpl/object_discounts.tpl.php';
3179 print $form->editfieldkey(
"Date",
'date',
'', $object, (
int) $editenable);
3180 print
'</td><td class="valuefield">';
3181 if ($action ==
'editdate') {
3182 print
'<form name="setdate" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'" method="post">';
3183 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
3184 print
'<input type="hidden" name="action" value="setdate">';
3185 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
3186 print $form->selectDate(
$object->date,
'order_', 0, 0, 0,
"setdate");
3187 print
'<input type="submit" class="button button-edit" value="' . $langs->trans(
'Modify') .
'">';
3192 print
' ' .
img_picto($langs->trans(
"Late") .
' : ' .
$object->showDelay(),
"warning");
3200 $editenable = $usercancreate;
3201 print $form->editfieldkey(
"DateDeliveryPlanned",
'date_livraison',
'', $object, (
int) $editenable);
3202 print
'</td><td class="valuefield">';
3203 if ($action ==
'editdate_livraison') {
3204 print
'<form name="setdate_livraison" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'" method="post">';
3205 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
3206 print
'<input type="hidden" name="action" value="setdate_livraison">';
3207 print
'<input type="hidden" name="backtopage" value="' . $backtopage .
'">';
3208 print $form->selectDate(
$object->delivery_date ?
$object->delivery_date : -1,
'liv_', 1, 1, 0,
"setdate_livraison", 1, 0);
3209 print
'<input type="submit" class="button button-edit" value="' . $langs->trans(
'Modify') .
'">';
3214 print
' ' .
img_picto($langs->trans(
"Late") .
' : ' .
$object->showDelay(),
"warning");
3219 $shippableInfos =
$object->getShippableInfos();
3221 if (!empty($shippableInfos[
'has_product'])) {
3223 print $form->textwithtooltip(
'', $shippableInfos[
'textinfo'], 2, 1, $shippableInfos[
'texticon'],
'', 2);
3225 if (!empty($shippableInfos[
'warning'])) {
3227 print $form->textwithtooltip(
'', $langs->trans(
"NotEnoughForAllOrders"), 2, 1,
img_picto(
'',
'error',
'', 0, 0, 0,
'',
'2'),
'', 2);
3235 print
'<tr class="fielddeliverydelay"><td>';
3236 $editenable = $usercancreate;
3237 print $form->editfieldkey(
"AvailabilityPeriod",
'availability',
'', $object, (
int) $editenable);
3238 print
'</td><td class="valuefield">';
3239 if ($action ==
'editavailability') {
3240 $form->form_availability($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->availability_id,
'availability_id', 1);
3242 $form->form_availability($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->availability_id,
'none', 1);
3249 $editenable = $usercancreate;
3250 print $form->editfieldkey(
"SendingMethod",
'shippingmethod',
'', $object, (
int) $editenable);
3251 print
'</td><td class="valuefield">';
3252 if ($action ==
'editshippingmethod') {
3253 $form->formSelectShippingMethod($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->shipping_method_id,
'shipping_method_id', 1);
3255 $form->formSelectShippingMethod($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->shipping_method_id,
'none');
3263 $langs->load(
'stocks');
3265 $editenable = $usercancreate;
3266 print $form->editfieldkey(
"Warehouse",
'warehouse',
'', $object, (
int) $editenable);
3267 print
'</td><td class="valuefield">';
3268 if ($action ==
'editwarehouse') {
3269 $formproduct->formSelectWarehouses($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->warehouse_id,
'warehouse_id', 1);
3271 $formproduct->formSelectWarehouses($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->warehouse_id,
'none');
3279 $editenable = $usercancreate;
3280 print $form->editfieldkey(
"Source",
'demandreason',
'', $object, (
int) $editenable);
3281 print
'</td><td class="valuefield">';
3282 if ($action ==
'editdemandreason') {
3283 $form->formInputReason($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->demand_reason_id,
'demand_reason_id', 1);
3285 $form->formInputReason($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->demand_reason_id,
'none');
3291 $editenable = $usercancreate;
3292 print $form->editfieldkey(
"PaymentConditionsShort",
'conditions',
'', $object, (
int) $editenable);
3293 print
'</td><td class="valuefield">';
3294 if ($action ==
'editconditions') {
3295 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id', 1,
'', 1,
$object->deposit_percent);
3297 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->cond_reglement_id,
'none', 1,
'', 1,
$object->deposit_percent);
3305 $editenable = $usercancreate;
3306 print $form->editfieldkey(
"PaymentMode",
'mode',
'', $object, (
int) $editenable);
3307 print
'</td><td class="valuefield">';
3308 if ($action ==
'editmode') {
3309 $form->form_modes_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
3311 $form->form_modes_reglement($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->mode_reglement_id,
'none');
3329 $tmparray =
$object->getTotalWeightVolume();
3330 $totalWeight = $tmparray[
'weight'];
3331 $totalVolume = $tmparray[
'volume'];
3333 print
'<tr><td>' . $langs->trans(
"CalculatedWeight") .
'</td>';
3334 print
'<td class="valuefield">';
3339 print
'<tr><td>' . $langs->trans(
"CalculatedVolume") .
'</td>';
3340 print
'<td class="valuefield">';
3350 $editenable = $usercancreate;
3351 print $form->editfieldkey(
"IncotermLabel",
'incoterm',
'', $object, (
int) $editenable);
3353 print
'<td class="valuefield">';
3354 if ($action !=
'editincoterm') {
3355 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
3357 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id);
3365 $editenable = $usercancreate;
3366 print $form->editfieldkey(
"BankAccount",
'bankaccount',
'', $object, (
int) $editenable);
3367 print
'</td><td class="valuefield">';
3368 if ($action ==
'editbankaccount') {
3369 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
3371 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->fk_account,
'none');
3380 print
'<table class="nobordernopadding centpercent"><tr><td>';
3381 print $langs->trans(
"Categories");
3382 print
'<td><td class="right">';
3383 if ($usercancreate) {
3384 print
'<a class="editfielda" href="' . DOL_URL_ROOT .
'/commande/card.php?id=' .
$object->id .
'&action=edittags&token=' .
newToken() .
'">' .
img_edit() .
'</a>';
3388 print
'</td></tr></table>';
3391 if ($action ==
'edittags') {
3392 print
'<form method="POST" action="' . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'">';
3393 print
'<input type="hidden" name="action" value="settags">';
3394 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
3395 print $form->selectCategories(Categorie::TYPE_ORDER,
'categories', $object);
3396 print
'<input type="submit" class="button valignmiddle smallpaddingimp" value="' . $langs->trans(
"Modify") .
'">';
3399 print $form->showCategories(
$object->id, Categorie::TYPE_ORDER, 1);
3405 include DOL_DOCUMENT_ROOT .
'/core/tpl/extrafields_view.tpl.php';
3410 print
'<div class="fichehalfright">';
3411 print
'<div class="underbanner clearboth"></div>';
3413 print
'<table class="border tableforfield centpercent">';
3415 include DOL_DOCUMENT_ROOT .
'/core/tpl/object_currency_amount.tpl.php';
3419 $alert =
' ' .
img_warning($langs->trans(
'OrderMinAmount') .
': ' .
price(
$object->thirdparty->order_min_amount));
3423 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
3424 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3427 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3432 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
3433 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 1, -1, -1,
$conf->currency) .
'</td>';
3436 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 1, -1, -1,
$object->multicurrency_code) .
'</td>';
3441 if (
$mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
3443 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
3444 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 1, -1, -1,
$conf->currency) .
'</td>';
3448 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_localtax1, 0, $langs, 1, -1, -1,
$object->multicurrency_code) .
'</td>';
3454 if (
$mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
3456 print
'<td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
3457 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 1, -1, -1,
$conf->currency) .
'</td>';
3461 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_localtax2, 0, $langs, 1, -1, -1,
$object->multicurrency_code) .
'</td>';
3467 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
3468 print
'<td class="valuefield nowrap right amountcard">' .
price(
$object->total_ttc, 1,
'', 1, -1, -1,
$conf->currency) .
'</td>';
3471 print
'<td class="valuefield nowrap right amountcard">' .
price(
$object->multicurrency_total_ttc, 1,
'', 1, -1, -1,
$object->multicurrency_code) .
'</td>';
3473 print
'</tr>' .
"\n";
3482 $formmargin->displayMarginInfos($object);
3489 print
'<div class="clearboth"></div><br>';
3492 $blocname =
'contacts';
3493 $title = $langs->trans(
'ContactsAddresses');
3494 include DOL_DOCUMENT_ROOT .
'/core/tpl/bloc_showhide.tpl.php';
3498 $blocname =
'notes';
3499 $title = $langs->trans(
'Notes');
3500 include DOL_DOCUMENT_ROOT .
'/core/tpl/bloc_showhide.tpl.php';
3508 $result =
$object->getLinesArray();
3512 global $inputalsopricewithtax;
3513 $inputalsopricewithtax = 1;
3515 print
'<form name="addproduct" id="addproduct" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'" method="POST">
3516 <input type="hidden" name="token" value="' .
newToken() .
'">
3517 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline') .
'">
3518 <input type="hidden" name="mode" value="">
3519 <input type="hidden" name="page_y" value="">
3520 <input type="hidden" name="id" value="' .
$object->id .
'">
3521 <input type="hidden" name="backtopage" value="' . $backtopage .
'">
3526 include DOL_DOCUMENT_ROOT .
'/core/tpl/subtotal_ajaxrow.tpl.php';
3528 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
3532 print
'<div class="div-table-responsive-no-min">';
3533 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
3537 $object->printObjectLines($action,
$mysoc, $soc, $lineid, 1);
3544 if ($action !=
'editline') {
3547 $parameters = array();
3549 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
3553 if (empty($reshook)) {
3557 $parameters = array();
3558 $reshook = $hookmanager->executeHooks(
'formEditObjectLine', $parameters, $object, $action);
3572 if ($action !=
'presend' && $action !=
'editline') {
3573 print
'<div class="tabsAction">';
3575 $parameters = array();
3576 $arrayforbutaction = array();
3578 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
3579 if (empty($reshook)) {
3580 $numlines = count(
$object->lines);
3588 if (empty($user->socid)) {
3591 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'action' =>
'presend',
'id' =>
$object->id,
'mode' =>
'init'],
true) .
'#formmailbeforetitle',
'');
3593 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email', $_SERVER[
'PHP_SELF'] .
'#',
'',
false);
3601 $langs->load(
'subtotals');
3603 $url_button = array();
3605 $url_button[] = array(
3606 'lang' =>
'subtotals',
3608 'perm' => (
bool) $usercancreate,
3609 'label' => $langs->trans(
'AddTitleLine'),
3610 'url' =>
'/commande/card.php?id=' .
$object->id .
'&action=add_title_line&token=' .
newToken()
3613 $url_button[] = array(
3614 'lang' =>
'subtotals',
3616 'perm' => (
bool) $usercancreate,
3617 'label' => $langs->trans(
'AddSubtotalLine'),
3618 'url' =>
'/commande/card.php?id=' .
$object->id .
'&action=add_subtotal_line&token=' .
newToken()
3621 $url_button[] = array(
3622 'lang' =>
'subtotals',
3624 'perm' => (
bool) $usercancreate,
3625 'label' => $langs->trans(
'AddTextLine'),
3626 'url' =>
'/commande/card.php?id=' .
$object->id .
'&action=add_text_line&token=' .
newToken()
3628 print
dolGetButtonAction(
'', $langs->trans(
'SubTotal'),
'default', $url_button,
'',
true);
3633 if ($numlines > 0) {
3636 $langs->load(
"errors");
3637 print
dolGetButtonAction($langs->trans(
"ErrorObjectMustHaveLinesToBeValidated",
$object->ref), $langs->trans(
'Validate'),
'default',
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'action' =>
'validate',
'id' =>
$object->id],
true), (
string)
$object->id, -1);
3648 $arrayforbutaction[] = array(
3651 'perm' => $usercancreatepurchaseorder,
3652 'label' =>
'AddPurchaseOrder',
3653 'url' =>
'/fourn/commande/card.php?action=create&origin=' . urlencode(
$object->element) .
'&originid=' . ((
int)
$object->id)
3665 $arrayforbutaction[] = array(
3666 'lang' =>
'interventions',
3668 'perm' => ($user->hasRight(
'ficheinter',
'creer') == 1),
3669 'label' =>
'AddIntervention',
3670 'url' =>
'/fichinter/card.php?action=create&origin=' . urlencode(
$object->element) .
'&originid=' . ((
int)
$object->id) .
'&socid=' . ((
int)
$object->socid),
3676 $arrayforbutaction[] = [
3677 'lang' =>
'contracts',
3679 'perm' => ($user->hasRight(
'contrat',
'creer') == 1),
3680 'label' =>
'AddContract',
3681 'url' =>
'/contrat/card.php?action=create&origin=' .
$object->element .
'&originid=' .
$object->id .
'&socid=' .
$object->socid,
3696 $numshipping =
$object->countNbOfShipments();
3699 if ((
getDolGlobalInt(
'MAIN_SUBMODULE_EXPEDITION') && $user->hasRight(
'expedition',
'creer')) || (
getDolGlobalInt(
'MAIN_SUBMODULE_DELIVERY') && $user->hasRight(
'expedition',
'delivery',
'creer'))) {
3701 $arrayforbutaction[] = array(
3702 'lang' =>
'sendings',
3704 'perm' => $user->hasRight(
'expedition',
'creer'),
3705 'label' =>
'CreateShipment',
3706 'url' =>
'/expedition/shipment.php?id=' .
$object->id
3711 $arrayforbutaction[] = array(
3712 'lang' =>
'sendings',
3715 'label' =>
'CreateShipment',
3716 'url' =>
'/expedition/shipment.php?id=' .
$object->id
3723 $arrayforbutaction[] = array(
3726 'perm' => ($user->hasRight(
'facture',
'creer') && !
getDolGlobalInt(
'WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER')),
3727 'label' =>
'CreateBill',
3728 'url' =>
'/compta/facture/card.php?action=create&token=' .
newToken() .
'&origin=' . urlencode(
$object->element) .
'&originid=' .
$object->id .
'&socid=' .
$object->socid
3737 $actionButtonsParameters = [
3738 "areDropdownButtons" => !
getDolGlobalInt(
"MAIN_REMOVE_DROPDOWN_CREATE_BUTTONS_ON_ORDER")
3741 if ($numlines > 0) {
3742 print
dolGetButtonAction(
'', $langs->trans(
"Create"),
'default', $arrayforbutaction, (
string)
$object->id, 1, $actionButtonsParameters);
3744 print
dolGetButtonAction($langs->trans(
"ErrorObjectMustHaveLinesToBeValidated",
$object->ref), $langs->trans(
"Create"),
'default', $arrayforbutaction, (
string)
$object->id, 0, $actionButtonsParameters);
3766 if ($usercancreate) {
3772 print
'<a class="butActionDelete" href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=cancel&token=' .
newToken() .
'">' . $langs->trans(
"CancelOrder") .
'</a>';
3776 if ($usercandelete) {
3778 if ($numshipping == 0 && !$stocksent) {
3781 print
dolGetButtonAction($langs->trans(
'ShippingExist'), $langs->trans(
'Delete'),
'default', $_SERVER[
'PHP_SELF'] .
'#',
'',
false);
3789 if (
GETPOST(
'modelselected')) {
3790 $action =
'presend';
3793 if ($action !=
'presend') {
3794 print
'<div class="fichecenter"><div class="fichehalfleft">';
3795 print
'<a name="builddoc"></a>';
3798 $relativepath = $objref .
'/' . $objref .
'.pdf';
3799 $filedir =
$conf->commande->multidir_output[
$object->entity ??
$conf->entity] .
'/' . $objref;
3801 $genallowed = $usercanread;
3802 $delallowed = $usercancreate;
3803 $tooltipAfterComboOfModels =
'';
3805 $tooltipAfterComboOfModels = $langs->trans(
"AccordingToYourSetupTheFileWillBeConcatenated",
getDolGlobalString(
'MAIN_INFO_ORDER_TERMSOFSALE'));
3808 print $formfile->showdocuments(
'commande', $objref, $filedir, $urlsource, $genallowed, (
int) $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang,
'', $object, 0,
'remove_file', $tooltipAfterComboOfModels);
3812 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'order'), 1);
3813 $linktoelem = $tmparray[
'linktoelem'];
3814 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
3815 print $htmltoenteralink;
3817 $compatibleImportElementsList =
false;
3822 $compatibleImportElementsList = array(
'commande',
'propal',
'facture',
'subscription');
3824 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem, $compatibleImportElementsList);
3828 include_once DOL_DOCUMENT_ROOT .
'/core/lib/payments.lib.php';
3829 $validpaymentmethod = getValidOnlinePaymentMethods(
'');
3830 $useonlinepayment = count($validpaymentmethod);
3833 $useonlinepayment = 0;
3836 print
'<br><!-- Link to pay -->';
3837 require_once DOL_DOCUMENT_ROOT .
'/core/lib/payments.lib.php';
3838 print showOnlinePaymentUrl(
'order',
$object->ref) .
'<br>';
3841 print
'</div><div class="fichehalfright">';
3846 $morehtmlcenter =
dolGetButtonTitle($langs->trans(
'FullConversation'),
'',
'fa fa-comments imgforviewmode',
dolBuildUrl(DOL_URL_ROOT .
'/commande/messaging.php', [
'id' =>
$object->id]));
3847 $morehtmlcenter .=
dolGetButtonTitle($langs->trans(
'SeeAll'),
'',
'fa fa-bars imgforviewmode',
dolBuildUrl(DOL_URL_ROOT .
'/commande/agenda.php', [
'id' =>
$object->id]));
3850 include_once DOL_DOCUMENT_ROOT .
'/core/class/html.formactions.class.php';
3852 $somethingshown = $formactions->showactions($object,
'order', $socid, 1,
'', $MAXEVENT,
'', $morehtmlcenter);
3854 print
'</div></div>';
3858 $modelmail =
'order_send';
3859 $defaulttopic =
'SendOrderRef';
3861 $trackid =
'ord' .
$object->id;
3863 include DOL_DOCUMENT_ROOT .
'/core/tpl/card_presend.tpl.php';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage 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.
$date_start
Variables from include:
dol_now($mode='gmt')
Return date for now.
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...
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
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.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
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...
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
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 rate, when selling a product with vat $vatrate,...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
dolPrintHTML($s, $allowiframe=0, $moreallowedtags=array())
Return a string (that can be on several lines) ready to be output on a HTML page.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
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.
showDimensionInBestUnit($dimension, $unit, $type, $outputlangs, $round=-1, $forceunitoutput='no', $use_short_label=0)
Output a dimension with best unit.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
print $langs trans("Show") . '< td style="' . $timeColor . '" align="center"> s</td > badge status0 badge status4 badge status3 Error badge status8< td align="center">< span class="badge ' . $badge . '"></span ></td >< td align="center">< a href="#" class="button button-small" onclick="openLogModal(this)" data-req="' . dol_escape_htmltag($reqSafe) . '" data-res="' . dol_escape_htmltag($resSafe) . '" data-err="' . dol_escape_htmltag($errSafe) . '">< span class="fa fa-search-plus"></span ></a ></td ></tr >< tr >< td colspan="' . $colspan . '" class="opacitymedium"></td ></tr ></table ></div ></form > logModal none logModal none s a JSON string
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.