38 require
'../../main.inc.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
41 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formorder.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
43 require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
45 require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
46 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
47 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
50 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
53 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
56 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
57 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
59 require_once NUSOAP_PATH.
'/nusoap.php';
62 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
67 $langs->loadLangs(array(
'admin',
'orders',
'sendings',
'companies',
'bills',
'propal',
'receptions',
'supplier_proposal',
'deliveries',
'products',
'stocks',
'productbatch'));
69 $langs->load(
'incoterm');
76 $action =
GETPOST(
'action',
'alpha');
77 $confirm =
GETPOST(
'confirm',
'alpha');
78 $contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'purchaseordercard';
80 $backtopage =
GETPOST(
'backtopage',
'alpha');
81 $backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
83 $socid =
GETPOST(
'socid',
'int');
84 $projectid =
GETPOST(
'projectid',
'int');
85 $cancel =
GETPOST(
'cancel',
'alpha');
86 $lineid =
GETPOST(
'lineid',
'int');
87 $origin =
GETPOST(
'origin',
'alpha');
89 $rank = (
GETPOST(
'rank',
'int') > 0) ?
GETPOST(
'rank',
'int') : -1;
92 $hidedetails = (
GETPOST(
'hidedetails',
'int') ?
GETPOST(
'hidedetails',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
93 $hidedesc = (
GETPOST(
'hidedesc',
'int') ?
GETPOST(
'hidedesc',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 1 : 0));
94 $hideref = (
GETPOST(
'hideref',
'int') ?
GETPOST(
'hideref',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
96 $datelivraison =
dol_mktime(
GETPOST(
'liv_hour',
'int'),
GETPOST(
'liv_min',
'int'),
GETPOST(
'liv_sec',
'int'),
GETPOST(
'liv_month',
'int'),
GETPOST(
'liv_day',
'int'),
GETPOST(
'liv_year',
'int'));
100 if (!empty($user->socid)) {
101 $socid = $user->socid;
105 $hookmanager->initHooks(array(
'ordersuppliercard',
'globalcard'));
111 $extrafields->fetch_name_optionals_label($object->table_element);
114 $socid = $user->socid;
118 if ($id > 0 || !empty($ref)) {
119 $ret = $object->fetch($id, $ref);
123 $ret = $object->fetch_thirdparty();
127 } elseif (!empty($socid) && $socid > 0) {
128 $object->socid = $socid;
129 $ret = $object->fetch_thirdparty();
136 $isdraft = (isset($object->statut) && ($object->statut == $object::STATUS_DRAFT) ? 1 : 0);
137 $result =
restrictedArea($user,
'fournisseur', $id,
'commande_fournisseur',
'commande',
'fk_soc',
'rowid', $isdraft);
140 $usercanread = ($user->rights->fournisseur->commande->lire || $user->rights->supplier_order->lire);
141 $usercancreate = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer);
142 $usercandelete = (($user->rights->fournisseur->commande->supprimer || $user->rights->supplier_order->supprimer) || ($usercancreate && isset($object->statut) && $object->statut == $object::STATUS_DRAFT));
145 $usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($usercancreate)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->fournisseur->supplier_order_advance->validate)));
148 $usercanapprove = !empty($user->rights->fournisseur->commande->approuver) ? $user->rights->fournisseur->commande->approuver : 0;
149 $usercanapprovesecond = !empty($user->rights->fournisseur->commande->approve2) ? $user->rights->fournisseur->commande->approve2 : 0;
150 $usercanorder = !empty($user->rights->fournisseur->commande->commander) ? $user->rights->fournisseur->commande->commander : 0;
151 if (empty($conf->reception->enabled)) {
152 $usercanreceive = $user->rights->fournisseur->commande->receptionner;
154 $usercanreceive = $user->rights->reception->creer;
158 $permissionnote = $usercancreate;
159 $permissiondellink = $usercancreate;
160 $permissiontoedit = $usercancreate;
161 $permissiontoadd = $usercancreate;
164 $caneditproject =
false;
166 $caneditproject = empty($conf->global->SUPPLIER_ORDER_FORBID_EDIT_PROJECT) || ($object->statut ==
CommandeFournisseur::STATUS_DRAFT && preg_match(
'/^[\(]?PROV/i', $object->ref));
177 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
182 if (empty($reshook)) {
183 $backurlforlist = DOL_URL_ROOT.
'/fourn/commande/list.php'.($socid > 0 ?
'?socid='.((int) $socid) :
'');
185 if (empty($backtopage) || ($cancel && empty($id))) {
186 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
187 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
188 $backtopage = $backurlforlist;
190 $backtopage = DOL_URL_ROOT.
'/fourn/commande/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
196 if (!empty($backtopageforcancel)) {
197 header(
"Location: ".$backtopageforcancel);
199 } elseif (!empty($backtopage)) {
200 header(
"Location: ".$backtopage);
206 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
208 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
210 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
212 if ($action ==
'setref_supplier' && $usercancreate) {
213 $result = $object->setValueFrom(
'ref_supplier',
GETPOST(
'ref_supplier',
'alpha'),
'',
null,
'text',
'', $user,
'ORDER_SUPPLIER_MODIFY');
220 if ($action ==
'set_incoterms' && $usercancreate) {
221 $result = $object->setIncoterms(
GETPOST(
'incoterm_id',
'int'),
GETPOST(
'location_incoterms',
'alpha'));
228 if ($action ==
'setconditions' && $usercancreate) {
229 $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id',
'int'));
236 if ($action ==
'setmode' && $usercancreate) {
237 $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id',
'int'));
241 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
243 $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
244 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
246 $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx')),
GETPOST(
'calculation_mode',
'int'));
250 if ($action ==
'setbankaccount' && $usercancreate) {
251 $result = $object->setBankAccount(
GETPOST(
'fk_account',
'int'));
258 if ($action ==
'setdate_livraison' && $usercancreate) {
259 $result = $object->setDeliveryDate($user, $datelivraison);
266 if ($action ==
'classin' && $usercancreate && $caneditproject) {
267 $result = $object->setProject($projectid);
274 if (!empty($conf->global->MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER) && $action ==
'set_thirdparty' && $usercancreate && $object->statut ==
CommandeFournisseur::STATUS_DRAFT) {
275 $new_socid =
GETPOST(
'new_socid',
'int');
276 if (!empty($new_socid) && $new_socid != $object->thirdparty->id) {
280 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
281 $sql .=
' SET fk_soc = '.((int) $new_socid);
282 $sql .=
' WHERE fk_soc = '.((int) $object->thirdparty->id);
283 $sql .=
' AND rowid = '.((int) $object->id);
285 $res = $db->query($sql);
293 foreach ($object->lines as $l) {
294 $sql =
'SELECT price, unitprice, tva_tx, ref_fourn';
295 $sql .=
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
296 $sql .=
' WHERE fk_product = '.((int) $l->fk_product);
297 $sql .=
' AND fk_soc = '.((int) $new_socid);
298 $sql .=
' ORDER BY unitprice ASC';
300 $resql = $db->query($sql);
302 $num_row = $db->num_rows(
$resql);
303 if (empty($num_row)) {
309 $l->ref_supplier =
'';
313 $obj = $db->fetch_object(
$resql);
314 $l->subprice = $obj->unitprice;
315 $l->total_ht = $obj->price;
316 $l->tva_tx = $obj->tva_tx;
317 $l->total_tva = $l->total_ht * ($obj->tva_tx / 100);
318 $l->total_ttc = $l->total_ht + $l->total_tva;
319 $l->ref_supplier = $obj->ref_fourn;
327 $object->update_price();
330 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.$object->id);
334 if ($action ==
'setremisepercent' && $usercancreate) {
341 if ($action ==
'reopen') {
342 if (in_array($object->statut, array(1, 2, 3, 4, 5, 6, 7, 9))) {
343 if ($object->statut == 1) {
345 } elseif ($object->statut == 2) {
347 } elseif ($object->statut == 3) {
349 } elseif ($object->statut == 4) {
351 } elseif ($object->statut == 5) {
357 } elseif ($object->statut == 6) {
359 } elseif ($object->statut == 7) {
361 } elseif ($object->statut == 9) {
370 $result = $object->setStatus($user, $newstatus);
373 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
374 $sql .=
' SET billed = 0';
375 $sql .=
' WHERE rowid = '.((int) $object->id);
377 $resql = $db->query($sql);
379 if ($newstatus == 0) {
380 $sql =
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
381 $sql .=
' SET fk_user_approve = null, fk_user_approve2 = null, date_approve = null, date_approve2 = null';
382 $sql .=
' WHERE rowid = '.((int) $object->id);
384 $resql = $db->query($sql);
389 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
402 if ($action ==
'classifybilled' && $usercancreate) {
403 $ret = $object->classifyBilled($user);
410 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') && $usercancreate) {
412 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
413 $vat_rate = str_replace(
'*',
'', $vat_rate);
414 $localtax1_rate =
get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
415 $localtax2_rate =
get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
416 foreach ($object->lines as $line) {
417 $result = $object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate,
'HT', $line->info_bits, $line->product_type, 0, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice, $line->ref_supplier);
419 } elseif ($action ==
'addline' && $usercancreate) {
422 $langs->load(
'errors');
431 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
432 if ($prod_entry_mode ==
'free') {
435 $idprod =
GETPOST(
'idprod',
'int');
447 if (empty($remise_percent)) {
452 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
453 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
455 if (is_array($extralabelsline)) {
457 foreach ($extralabelsline as $key => $value) {
458 unset($_POST[
"options_".$key]);
462 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
463 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
466 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
467 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
470 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
471 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
474 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
475 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
478 if (
GETPOST(
'qty',
'alpha') ==
'') {
479 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
483 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
484 if ($combinations =
GETPOST(
'combinations',
'array')) {
488 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
489 $idprod = $res->fk_product_child;
491 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
497 if ($prod_entry_mode !=
'free' && empty($error)) {
501 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
506 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
508 $res = $productsupplier->fetch($idprod);
511 if (!empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) {
513 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
514 if ($productsupplier->fourn_socid != $socid) {
515 $productsupplier->ref_supplier =
'';
518 $fksoctosearch = $object->thirdparty->id;
519 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
521 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
524 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
525 $res = $productsupplier->fetch($idprod);
529 $label = $productsupplier->label;
532 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
533 $outputlangs = $langs;
535 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
536 $newlang =
GETPOST(
'lang_id',
'aZ09');
538 if (empty($newlang)) {
539 $newlang = $object->thirdparty->default_lang;
541 if (!empty($newlang)) {
543 $outputlangs->setDefaultLang($newlang);
545 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->description;
547 $desc = $productsupplier->description;
550 if (!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
551 $desc = $productsupplier->desc_supplier;
555 if (trim($product_desc) == trim($desc) && !empty($conf->global->PRODUIT_AUTOFILL_DESC)) {
559 if (!empty($product_desc) && !empty($conf->global->MAIN_NO_CONCAT_DESCRIPTION)) {
560 $desc = $product_desc;
562 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
563 $desc =
dol_concatdesc($desc, $product_desc,
'', !empty($conf->global->MAIN_CHANGE_ORDER_CONCAT_DESCRIPTION));
566 $ref_supplier = $productsupplier->ref_supplier;
571 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
572 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
573 if (empty($tva_tx)) {
578 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
579 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
581 $type = $productsupplier->type;
582 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'price_ht_devise') !=
'') {
583 $price_base_type =
'HT';
585 $pu_devise =
price2num($price_ht_devise,
'CU');
586 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'price_ttc_devise') !=
'') {
587 $price_base_type =
'TTC';
589 $pu_devise =
price2num($price_ttc_devise,
'CU');
591 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
592 if (empty($object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code != $object->multicurrency_code)) {
593 $pu = $productsupplier->fourn_pu;
596 $pu = $productsupplier->fourn_pu;
597 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
605 $result = $object->addline(
607 ($price_base_type ==
'HT' ? $pu : 0),
613 $productsupplier->product_fourn_price_id,
617 ($price_base_type ==
'TTC' ? $pu : 0),
624 $productsupplier->fk_unit,
628 min($rank, count($object->lines) + 1)
631 if ($idprod == -99 || $idprod == 0) {
634 $langs->load(
"errors");
635 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
640 $langs->load(
"errors");
641 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
643 } elseif (empty($error)) {
644 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
645 $tva_tx = str_replace(
'*',
'', $tva_tx);
646 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
647 $desc = $product_desc;
649 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
651 $fk_unit =
GETPOST(
'units',
'alpha');
653 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
658 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
659 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
661 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'price_ht_devise') !=
'') {
665 $pu_ht =
price2num($pu_ttc / (1 + ($tva_tx / 100)),
'MU');
667 $price_base_type =
'HT';
668 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
670 $result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type,
'',
'', $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise);
674 if (!$error && $result > 0) {
677 $ret = $object->fetch($object->id);
680 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
681 $outputlangs = $langs;
684 $newlang = $object->thirdparty->default_lang;
685 if (
GETPOST(
'lang_id',
'aZ09'))
686 $newlang =
GETPOST(
'lang_id',
'aZ09');
688 if (!empty($newlang)) {
690 $outputlangs->setDefaultLang($newlang);
692 $model = $object->model_pdf;
693 $ret = $object->fetch($id);
695 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
701 unset($_POST [
'prod_entry_mode']);
703 unset($_POST[
'qty']);
704 unset($_POST[
'type']);
705 unset($_POST[
'remise_percent']);
707 unset($_POST[
'price_ht']);
708 unset($_POST[
'multicurrency_price_ht']);
709 unset($_POST[
'price_ttc']);
710 unset($_POST[
'fourn_ref']);
711 unset($_POST[
'tva_tx']);
712 unset($_POST[
'label']);
713 unset($localtax1_tx);
714 unset($localtax2_tx);
715 unset($_POST[
'np_marginRate']);
716 unset($_POST[
'np_markRate']);
717 unset($_POST[
'dp_desc']);
718 unset($_POST[
'idprodfournprice']);
719 unset($_POST[
'units']);
721 unset($_POST[
'date_starthour']);
722 unset($_POST[
'date_startmin']);
723 unset($_POST[
'date_startsec']);
724 unset($_POST[
'date_startday']);
725 unset($_POST[
'date_startmonth']);
726 unset($_POST[
'date_startyear']);
727 unset($_POST[
'date_endhour']);
728 unset($_POST[
'date_endmin']);
729 unset($_POST[
'date_endsec']);
730 unset($_POST[
'date_endday']);
731 unset($_POST[
'date_endmonth']);
732 unset($_POST[
'date_endyear']);
744 if ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
751 $res = $line->fetch($lineid);
758 if (!empty($conf->global->SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY)) {
759 if ($line->fk_product > 0 && $productsupplier->get_buyprice(0,
price2num(
GETPOST(
'qty',
'int')), $line->fk_product,
'none',
GETPOST(
'socid',
'int')) < 0) {
760 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
769 if (preg_match(
'/\*/', $vat_rate)) {
774 $vat_rate = str_replace(
'*',
'', $vat_rate);
775 $localtax1_rate =
get_localtax($vat_rate, 1, $mysoc, $object->thirdparty);
776 $localtax2_rate =
get_localtax($vat_rate, 2, $mysoc, $object->thirdparty);
778 if (
GETPOST(
'price_ht') !=
'') {
779 $price_base_type =
'HT';
783 $vatratecleaned = $vat_rate;
784 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
785 $vatratecleaned = trim($reg[1]);
786 $vatratecode = $reg[2];
790 $ht = $ttc / (1 + ($vatratecleaned / 100));
791 $price_base_type =
'HT';
797 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
798 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
800 if (is_array($extralabelsline)) {
801 foreach ($extralabelsline as $key => $value) {
802 unset($_POST[
"options_".$key]);
806 $result = $object->updateline(
808 GETPOST(
'product_desc',
'restricthtml'),
826 unset($_POST[
'qty']);
827 unset($_POST[
'type']);
828 unset($_POST[
'idprodfournprice']);
829 unset($_POST[
'remmise_percent']);
830 unset($_POST[
'dp_desc']);
831 unset($_POST[
'np_desc']);
833 unset($_POST[
'fourn_ref']);
834 unset($_POST[
'tva_tx']);
835 unset($_POST[
'date_start']);
836 unset($_POST[
'date_end']);
837 unset($_POST[
'units']);
838 unset($localtax1_tx);
839 unset($localtax2_tx);
841 unset($_POST[
'date_starthour']);
842 unset($_POST[
'date_startmin']);
843 unset($_POST[
'date_startsec']);
844 unset($_POST[
'date_startday']);
845 unset($_POST[
'date_startmonth']);
846 unset($_POST[
'date_startyear']);
847 unset($_POST[
'date_endhour']);
848 unset($_POST[
'date_endmin']);
849 unset($_POST[
'date_endsec']);
850 unset($_POST[
'date_endday']);
851 unset($_POST[
'date_endmonth']);
852 unset($_POST[
'date_endyear']);
856 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
857 $outputlangs = $langs;
860 $newlang =
GETPOST(
'lang_id',
'aZ09');
863 $newlang = $object->thirdparty->default_lang;
865 if (!empty($newlang)) {
867 $outputlangs->setDefaultLang($newlang);
869 $model = $object->model_pdf;
870 $ret = $object->fetch($id);
872 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
887 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
890 $result = $object->deleteline($lineid);
893 $object->line_order(
true);
895 $outputlangs = $langs;
898 $newlang =
GETPOST(
'lang_id',
'aZ09');
901 $newlang = $object->thirdparty->default_lang;
903 if (!empty($newlang)) {
905 $outputlangs->setDefaultLang($newlang);
907 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
908 $ret = $object->fetch($object->id);
909 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
921 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
929 if ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
932 $object->date_commande =
dol_now();
933 $result = $object->valid($user);
936 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
937 $outputlangs = $langs;
940 $newlang =
GETPOST(
'lang_id',
'aZ09');
943 $newlang = $object->thirdparty->default_lang;
945 if (!empty($newlang)) {
947 $outputlangs->setDefaultLang($newlang);
949 $model = $object->model_pdf;
950 $ret = $object->fetch($id);
952 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
964 if (!$error && empty($conf->global->SUPPLIER_ORDER_NO_DIRECT_APPROVE) && $usercanapprove && !(!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER) && $object->hasProductsOrServices(1))) {
965 $action =
'confirm_approve';
975 if (($action ==
'confirm_approve' || $action ==
'confirm_approve2') && $confirm ==
'yes' && $usercanapprove) {
978 $idwarehouse =
GETPOST(
'idwarehouse',
'int');
980 $qualified_for_stock_change = 0;
981 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
982 $qualified_for_stock_change = $object->hasProductsOrServices(2);
984 $qualified_for_stock_change = $object->hasProductsOrServices(1);
988 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER) && $qualified_for_stock_change) {
989 if (!$idwarehouse || $idwarehouse == -1) {
991 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
997 $result = $object->approve($user, $idwarehouse, ($action ==
'confirm_approve2' ? 1 : 0));
999 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1000 $outputlangs = $langs;
1003 $newlang =
GETPOST(
'lang_id',
'aZ09');
1006 $newlang = $object->thirdparty->default_lang;
1008 if (!empty($newlang)) {
1009 $outputlangs =
new Translate(
"", $conf);
1010 $outputlangs->setDefaultLang($newlang);
1012 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1023 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1030 if ($action ==
'confirm_refuse' && $confirm ==
'yes' && $usercanapprove) {
1032 $object->refuse_note =
GETPOST(
'refuse_note');
1034 $result = $object->refuse($user);
1036 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1044 if ($action ==
'commande') {
1045 $methodecommande =
GETPOST(
'methodecommande',
'int');
1049 } elseif ($methodecommande <= 0) {
1050 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")),
null,
'errors');
1051 $action =
'makeorder';
1055 if ($action ==
'confirm_commande' && $confirm ==
'yes' && $usercanorder) {
1058 $result = $object->commande($user,
GETPOST(
"datecommande"),
GETPOST(
"methode",
'int'),
GETPOST(
'comment',
'alphanohtml'));
1060 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1061 $outputlangs = $langs;
1064 $newlang =
GETPOST(
'lang_id',
'aZ09');
1067 $newlang = $object->thirdparty->default_lang;
1069 if (!empty($newlang)) {
1070 $outputlangs =
new Translate(
"", $conf);
1071 $outputlangs->setDefaultLang($newlang);
1073 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1084 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1092 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
1093 $result = $object->delete($user);
1095 header(
"Location: ".DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1');
1103 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
1104 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
1105 setEventMessages($langs->trans(
"NoCloneOptionsSpecified"),
null,
'errors');
1107 if ($object->id > 0) {
1108 $orig = clone $object;
1110 $result = $object->createFromClone($user, $socid);
1112 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
1124 if ($action ==
'livraison' && $usercanreceive) {
1133 $result = $object->Livraison($user, $date_liv,
GETPOST(
"type"),
GETPOST(
"comment"));
1135 $langs->load(
"deliveries");
1138 } elseif ($result == -3) {
1147 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")),
null,
'errors');
1158 if ($action ==
'confirm_cancel' && $confirm ==
'yes' && $usercanorder) {
1160 $object->cancel_note =
GETPOST(
'cancel_note');
1162 $result = $object->cancel($user);
1164 header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
1172 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1175 $triggersendname =
'ORDER_SUPPLIER_SENTBYMAIL';
1176 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
1177 $trackid =
'sord'.$object->id;
1178 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1181 $upload_dir = $conf->fournisseur->commande->dir_output;
1182 $permissiontoadd = $usercancreate;
1183 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1186 if ($action ==
'update_extras') {
1190 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
1198 $result = $object->insertExtraFields(
'ORDER_SUPPLIER_MODIFY');
1207 $action =
'edit_extras';
1214 if ($action ==
'add' && $usercancreate) {
1216 $selectedLines =
GETPOST(
'toselect',
'array');
1218 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1227 $object->ref_supplier =
GETPOST(
'refsupplier');
1228 $object->socid = $socid;
1229 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id',
'int');
1230 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id',
'int');
1231 $object->fk_account =
GETPOST(
'fk_account',
'int');
1232 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
1233 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
1234 $object->date_livraison = $datelivraison;
1235 $object->delivery_date = $datelivraison;
1236 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
1237 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1238 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1239 $object->multicurrency_tx =
price2num(
GETPOST(
'originmulticurrency_tx',
'alpha'));
1240 $object->fk_project =
GETPOST(
'projectid',
'int');
1244 $ret = $extrafields->setOptionalsFromPost(
null, $object);
1252 if (!empty($origin) && !empty($originid)) {
1253 $element = $subelement = $origin;
1254 $classname = ucfirst($subelement);
1255 if ($origin ==
'propal' || $origin ==
'proposal') {
1256 $element =
'comm/propal'; $subelement =
'propal';
1257 $classname =
'Propal';
1259 if ($origin ==
'order' || $origin ==
'commande') {
1260 $element = $subelement =
'commande';
1261 $classname =
'Commande';
1263 if ($origin ==
'supplier_proposal') {
1264 $classname =
'SupplierProposal';
1265 $element =
'supplier_proposal';
1266 $subelement =
'supplier_proposal';
1269 $object->origin = $origin;
1270 $object->origin_id = $originid;
1273 $object->linked_objects [$object->origin] = $object->origin_id;
1274 $other_linked_objects =
GETPOST(
'other_linked_objects',
'array');
1275 if (!empty($other_linked_objects)) {
1276 $object->linked_objects = array_merge($object->linked_objects, $other_linked_objects);
1279 $id = $object->create($user);
1283 $srcobject =
new $classname($db);
1285 dol_syslog(
"Try to find source object origin=".$object->origin.
" originid=".$object->origin_id.
" to add lines");
1286 $result = $srcobject->fetch($object->origin_id);
1288 $tmpdate = ($srcobject->delivery_date ? $srcobject->delivery_date : $srcobject->date_livraison);
1289 $object->setDeliveryDate($user, $tmpdate);
1290 $object->set_id_projet($user, $srcobject->fk_project);
1292 $lines = $srcobject->lines;
1293 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1294 $srcobject->fetch_lines();
1295 $lines = $srcobject->lines;
1298 $fk_parent_line = 0;
1299 $num = count($lines);
1301 for ($i = 0; $i < $num; $i++) {
1302 if (empty($lines[$i]->subprice) || $lines[$i]->qty <= 0 || !in_array($lines[$i]->
id, $selectedLines)) {
1306 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
1307 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->product_desc);
1308 $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
1311 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
1312 $fk_parent_line = 0;
1316 if (method_exists($lines[$i],
'fetch_optionals')) {
1317 $lines[$i]->fetch_optionals();
1318 $array_option = $lines[$i]->array_options;
1322 $product_fourn_price_id = 0;
1323 if ($origin ==
"commande") {
1325 $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty, $srcobject->socid);
1327 $ref_supplier = $productsupplier->ref_supplier;
1328 $product_fourn_price_id = $productsupplier->product_fourn_price_id;
1331 $ref_supplier = $lines[$i]->ref_fourn;
1332 $product_fourn_price_id = 0;
1335 $tva_tx = $lines[$i]->tva_tx;
1337 if ($origin ==
"commande") {
1338 $soc =
new societe($db);
1339 $soc->fetch($socid);
1340 $tva_tx =
get_default_tva($soc, $mysoc, $lines[$i]->fk_product, $product_fourn_price_id);
1343 $object->special_code = $lines[$i]->special_code;
1345 $result = $object->addline(
1347 $lines[$i]->subprice,
1350 $lines[$i]->localtax1_tx,
1351 $lines[$i]->localtax2_tx,
1352 $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
1353 $product_fourn_price_id,
1355 $lines[$i]->remise_percent,
1358 $lines[$i]->product_type,
1364 $lines[$i]->fk_unit,
1367 !empty($lines[$i]->
id) ? $lines[$i]->
id : $lines[$i]->
rowid
1376 if ($result > 0 && $lines[$i]->product_type == 9) {
1377 $fk_parent_line = $result;
1386 $reshook = $hookmanager->executeHooks(
'createFrom',
$parameters, $object, $action);
1400 $id = $object->create($user);
1409 $langs->load(
"errors");
1412 $_GET[
'socid'] = $_POST[
'socid'];
1415 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode($id));
1421 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') ==
"send" && !
GETPOST(
'cancel',
'alpha')) {
1422 $ws_url = $object->thirdparty->webservices_url;
1423 $ws_key = $object->thirdparty->webservices_key;
1424 $ws_user =
GETPOST(
'ws_user',
'alpha');
1425 $ws_password =
GETPOST(
'ws_password',
'alpha');
1426 $ws_entity =
GETPOST(
'ws_entity',
'int');
1427 $ws_thirdparty =
GETPOST(
'ws_thirdparty',
'int');
1430 $ws_ns =
'http://www.dolibarr.org/ns/';
1431 $ws_authentication = array(
1432 'dolibarrkey'=>$ws_key,
1433 'sourceapplication'=>
'DolibarrWebServiceClient',
1435 'password'=>$ws_password,
1436 'entity'=>$ws_entity
1440 if (empty($conf->syncsupplierwebservices->enabled)) {
1441 setEventMessages($langs->trans(
"WarningModuleNotActive", $langs->transnoentities(
"Module2650Name")),
null,
'mesgs');
1442 } elseif (empty($ws_url) || empty($ws_key)) {
1443 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
1444 } elseif (empty($ws_user) || empty($ws_password) || empty($ws_thirdparty)) {
1448 $soapclient_order =
new nusoap_client($ws_url.
"/webservices/server_order.php");
1449 $soapclient_order->soap_defencoding =
'UTF-8';
1450 $soapclient_order->decodeUTF8(
false);
1453 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
1454 $soapclient_product->soap_defencoding =
'UTF-8';
1455 $soapclient_product->decodeUTF8(
false);
1458 $order_lines = array();
1459 foreach ($object->lines as $line) {
1460 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $line->ref_supplier);
1461 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
1463 if ($result_product[
"result"][
"result_code"] ==
"OK") {
1464 $order_lines[] = array(
1465 'desc' => $line->product_desc,
1466 'type' => $line->product_type,
1467 'product_id' => $result_product[
"product"][
"id"],
1468 'vat_rate' => $line->tva_tx,
1469 'qty' => $line->qty,
1470 'price' => $line->price,
1471 'unitprice' => $line->subprice,
1472 'total_net' => $line->total_ht,
1473 'total_vat' => $line->total_tva,
1474 'total' => $line->total_ttc,
1475 'date_start' => $line->date_start,
1476 'date_end' => $line->date_end,
1483 'thirdparty_id' => $ws_thirdparty,
1485 'total_net' => $object->total_ht,
1486 'total_var' => $object->total_tva,
1487 'total' => $object->total_ttc,
1488 'lines' => $order_lines
1491 $ws_parameters = array(
'authentication'=>$ws_authentication,
'order' => $order);
1492 $result_order = $soapclient_order->call(
"createOrder", $ws_parameters, $ws_ns,
'');
1494 if (empty($result_order[
"result"][
"result_code"])) {
1495 setEventMessages($langs->trans(
"SOAPError").
" '".$soapclient_order->error_str.
"'",
null,
'errors');
1496 } elseif ($result_order[
"result"][
"result_code"] !=
"OK") {
1497 setEventMessages($langs->trans(
"SOAPError").
" '".$result_order[
"result"][
"result_code"].
"' - '".$result_order[
"result"][
"result_label"].
"'",
null,
'errors');
1499 setEventMessages($langs->trans(
"RemoteOrderRef").
" ".$result_order[
"ref"],
null,
'mesgs');
1504 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $usercancreate) {
1505 if ($action ==
'addcontact') {
1506 if ($object->id > 0) {
1509 $result = $object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1513 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1516 if ($object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1517 $langs->load(
"errors");
1518 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1523 } elseif ($action ==
'swapstatut' && $object->id > 0) {
1525 $result = $object->swapContactStatus(
GETPOST(
'ligne',
'int'));
1526 } elseif ($action ==
'deletecontact' && $object->id > 0) {
1528 $result = $object->delete_contact(
GETPOST(
"lineid",
'int'));
1531 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1548 $productstatic =
new Product($db);
1553 $title = $object->ref.
" - ".$langs->trans(
'Card');
1554 if ($action ==
'create') {
1555 $title = $langs->trans(
"NewOrderSupplier");
1557 $help_url =
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
1562 if ($action ==
'create') {
1563 print
load_fiche_titre($langs->trans(
'NewOrderSupplier'),
'',
'supplier_order');
1567 $currency_code = $conf->currency;
1572 $societe->fetch($socid);
1575 if (!empty($origin) && !empty($originid)) {
1577 $element = $subelement = $origin;
1578 $classname = ucfirst($subelement);
1580 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
1581 $element = $regs[1];
1582 $subelement = $regs[2];
1585 if ($origin ==
'propal' || $origin ==
'proposal') {
1586 $classname =
'Propal';
1587 $element =
'comm/propal'; $subelement =
'propal';
1589 if ($origin ==
'order' || $origin ==
'commande') {
1590 $classname =
'Commande';
1591 $element = $subelement =
'commande';
1593 if ($origin ==
'supplier_proposal') {
1594 $classname =
'SupplierProposal';
1595 $element =
'supplier_proposal';
1596 $subelement =
'supplier_proposal';
1603 $objectsrc =
new $classname($db);
1604 $objectsrc->fetch($originid);
1605 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1606 $objectsrc->fetch_lines();
1608 $objectsrc->fetch_thirdparty();
1611 $objectsrc->fetch_optionals();
1612 $object->array_options = $objectsrc->array_options;
1614 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1615 $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client :
'');
1617 $soc = $objectsrc->client;
1618 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1619 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1620 $fk_account = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
1621 $availability_id = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
1622 $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
1623 $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
1624 $remise_percent = (!empty($objectsrc->remise_percent) ? $objectsrc->remise_percent : (!empty($soc->remise_supplier_percent) ? $soc->remise_supplier_percent : 0));
1625 $remise_absolue = (!empty($objectsrc->remise_absolue) ? $objectsrc->remise_absolue : (!empty($soc->remise_absolue) ? $soc->remise_absolue : 0));
1626 $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE) ?-1 :
'';
1628 $datedelivery = (!empty($objectsrc->date_livraison) ? $objectsrc->date_livraison : (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date :
''));
1631 if (!empty($objectsrc->multicurrency_code)) {
1632 $currency_code = $objectsrc->multicurrency_code;
1634 if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) {
1635 $currency_tx = $objectsrc->multicurrency_tx;
1639 $note_private = $object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private :
null));
1640 $note_public = $object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public :
null));
1643 $srccontactslist = $objectsrc->liste_contact(-1,
'external', 1);
1645 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
1646 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
1648 if (
isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1649 $currency_code = $societe->multicurrency_code;
1652 $note_private = $object->getDefaultCreateValueFor(
'note_private');
1653 $note_public = $object->getDefaultCreateValueFor(
'note_public');
1657 if (empty($cond_reglement_id) && !empty($conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID)) {
1658 $cond_reglement_id = $conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID;
1660 if (empty($mode_reglement_id) && !empty($conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID)) {
1661 $mode_reglement_id = $conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID;
1664 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
1665 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1666 print
'<input type="hidden" name="action" value="add">';
1667 print
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ?
'' : $soc->remise_supplier_percent).
'">';
1668 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1669 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1671 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1673 if ($backtopageforcancel) {
1674 print
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
1677 if (!empty($currency_tx)) {
1678 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
1683 print
'<table class="border centpercent">';
1686 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
1689 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1692 if (!empty($societe->id) && $societe->id > 0) {
1693 print $societe->getNomUrl(1,
'supplier');
1694 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
1696 print
img_picto(
'',
'company').$form->select_company((empty($socid) ?
'' : $socid),
'socid',
'(s.fournisseur=1 AND s.status=1)',
'SelectThirdParty', 1, 0,
null, 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1698 if (!empty($conf->global->RELOAD_PAGE_ON_SUPPLIER_CHANGE)) {
1700 $(document).ready(function() {
1701 $("#socid").change(function() {
1702 var socid = $(this).val();
1703 var prjid = $("#projectid").val();
1705 window.location.href = "'.$_SERVER[
"PHP_SELF"].
'?action=create&socid="+socid+"&projectid="+prjid
1710 print
' <a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&client=0&fournisseur=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
1714 if (!empty($societe->id) && $societe->id > 0) {
1716 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1718 $absolute_discount = $societe->getAvailableDiscounts(
'',
'', 0, 1);
1720 $thirdparty = $societe;
1722 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1723 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1729 print
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
1733 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
1734 print
$form->getSelectConditionsPaiements(
GETPOSTISSET(
'cond_reglement_id') ?
GETPOST(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id');
1738 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
1739 $form->select_types_paiements(
GETPOSTISSET(
'mode_reglement_id') ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1744 print $langs->trans(
'DateDeliveryPlanned');
1748 if (!empty($conf->global->SUPPLIER_ORDER_USE_HOUR_FOR_DELIVERY_DATE)) {
1751 print
$form->selectDate($datelivraison ? $datelivraison : -1,
'liv_', $usehourmin, $usehourmin,
'',
"set");
1755 if (!empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER) &&
isModEnabled(
"banque")) {
1756 $langs->load(
"bank");
1757 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
1758 print
img_picto(
'',
'bank_account',
'class="paddingrightonly"');
1759 $form->select_comptes($fk_account,
'fk_account', 0,
'', 1);
1767 $langs->load(
'projects');
1768 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1769 print
img_picto(
'',
'project').$formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $societe->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1770 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?action=create&status=1'.(!empty($societe->id) ?
'&socid='.$societe->id :
"").
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create'.(!empty($societe->id) ?
'&socid='.$societe->id :
"")).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
1776 $fkincoterms = (!empty($object->fk_incoterms) ? $object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms :
''));
1777 $locincoterms = (!empty($object->location_incoterms) ? $object->location_incoterms : ($socid > 0 ? $societe->location_incoterms :
''));
1779 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $object->label_incoterms, 1).
'</label></td>';
1780 print
'<td class="maxwidthonsmartphone">';
1781 print
$form->select_incoterms($fkincoterms, $locincoterms);
1788 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
1789 print
'<td class="maxwidthonsmartphone">';
1790 print
$form->selectMultiCurrency($currency_code,
'multicurrency_code');
1794 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
1796 $doleditor =
new DolEditor(
'note_public', isset($note_public) ? $note_public :
GETPOST(
'note_public',
'restricthtml'),
'', 80,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_3,
'90%');
1797 print $doleditor->Create(1);
1802 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
1804 $doleditor =
new DolEditor(
'note_private', isset($note_private) ? $note_private :
GETPOST(
'note_private',
'restricthtml'),
'', 80,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_3,
'90%');
1805 print $doleditor->Create(1);
1810 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1811 print
"\n<!-- ".$classname.
" info -->";
1813 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1814 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1815 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1816 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1817 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1819 $newclassname = $classname;
1820 print
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1,
'supplier').
'</td></tr>';
1821 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
1822 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
1823 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1824 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
1827 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1828 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
1831 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
1834 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1835 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
1836 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
1842 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $object, $action);
1843 print $hookmanager->resPrint;
1845 if (empty($reshook)) {
1846 print $object->showOptionals($extrafields,
'create');
1854 print
$form->buttonsSaveCancel(
"CreateDraft");
1857 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1858 $title = $langs->trans(
'ProductsAndServices');
1861 print
'<div class="div-table-responsive-no-min">';
1862 print
'<table class="noborder centpercent">';
1864 $objectsrc->printOriginLinesList(
'', $selectedLines);
1870 } elseif (!empty($object->id)) {
1871 $result = $object->fetch($id, $ref);
1872 $object->fetch_thirdparty();
1874 $societe = $object->thirdparty;
1876 $author =
new User($db);
1877 $author->fetch($object->user_author_id);
1881 $title = $langs->trans(
"SupplierOrder");
1888 if ($action ==
'delete') {
1889 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'),
'confirm_delete',
'', 0, 2);
1893 if ($action ==
'clone') {
1895 $formquestion = array(
1896 array(
'type' =>
'other',
'name' =>
'socid',
'label' => $langs->trans(
"SelectThirdParty"),
'value' =>
$form->select_company(
GETPOST(
'socid',
'int'),
'socid',
'(s.fournisseur=1)'))
1899 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder', $object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1903 if ($action ==
'valid') {
1904 $object->date_commande =
dol_now();
1907 if (preg_match(
'/^[\(]?PROV/i', $object->ref) || empty($object->ref)) {
1908 $newref = $object->getNextNumRef($object->thirdparty);
1910 $newref = $object->ref;
1917 $text = $langs->trans(
'ConfirmValidateOrder', $newref);
1919 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1920 $notify =
new Notify($db);
1922 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE', $object->socid, $object);
1925 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ValidateOrder'), $text,
'confirm_valid',
'', 0, 1);
1930 if ($action ==
'approve' || $action ==
'approve2') {
1931 $qualified_for_stock_change = 0;
1932 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
1933 $qualified_for_stock_change = $object->hasProductsOrServices(2);
1935 $qualified_for_stock_change = $object->hasProductsOrServices(1);
1938 $formquestion = array();
1939 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER) && $qualified_for_stock_change) {
1940 $langs->load(
"stocks");
1941 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
1944 if ($conf->browser->name ==
'ie') {
1947 $formquestion = array(
1951 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"),
'value' => $formproduct->selectWarehouses(
GETPOST(
'idwarehouse',
'int'),
'idwarehouse',
'', 1, 0, 0,
'', 0, $forcecombo))
1954 $text = $langs->trans(
"ConfirmApproveThisOrder", $object->ref);
1956 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1957 $notify =
new Notify($db);
1959 $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE', $object->socid, $object);
1962 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".$object->id, $langs->trans(
"ApproveThisOrder"), $text,
"confirm_".$action, $formquestion, 1, 1, 240);
1966 if ($action ==
'refuse') {
1967 $formquestion = array(
1970 'name' =>
'refuse_note',
1971 'label' => $langs->trans(
"Reason"),
1973 'morecss' =>
'minwidth300'
1976 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder", $object->ref),
"confirm_refuse", $formquestion, 0, 1);
1980 if ($action ==
'cancel') {
1981 $formquestion = array(
1984 'name' =>
'cancel_note',
1985 'label' => $langs->trans(
"Reason"),
1987 'morecss' =>
'minwidth300'
1990 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder", $object->ref),
"confirm_cancel", $formquestion, 0, 1);
1994 if ($action ==
'commande') {
1996 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".$object->id.
"&datecommande=".$date_com.
"&methode=".
GETPOST(
"methodecommande").
"&comment=".urlencode(
GETPOST(
"comment")), $langs->trans(
"MakeOrder"), $langs->trans(
"ConfirmMakeOrder",
dol_print_date($date_com,
'day')),
"confirm_commande",
'', 0, 2);
2000 if ($action ==
'ask_deleteline') {
2001 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
2005 $reshook = $hookmanager->executeHooks(
'formConfirm',
$parameters, $object, $action);
2006 if (empty($reshook)) {
2008 } elseif ($reshook > 0) {
2018 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
2020 $morehtmlref =
'<div class="refidno">';
2022 $morehtmlref .=
$form->editfieldkey(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $usercancreate,
'string',
'', 0, 1);
2023 $morehtmlref .=
$form->editfieldval(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $usercancreate,
'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ?
':'.$conf->global->THIRDPARTY_REF_INPUT_SIZE :
''),
'',
null,
null,
'', 1);
2025 $morehtmlref .=
'<br>';
2026 if (!empty($conf->global->MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER) && !empty($usercancreate) && $action ==
'edit_thirdparty') {
2027 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
2028 $morehtmlref .=
'<input type="hidden" name="action" value="set_thirdparty">';
2029 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2030 $morehtmlref .=
$form->select_company($object->thirdparty->id,
'new_socid',
's.fournisseur=1',
'', 0, 0, array(), 0,
'minwidth300');
2031 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
2032 $morehtmlref .=
'</form>';
2034 if (empty($conf->global->MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER) || $action !=
'edit_thirdparty') {
2036 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
2038 $morehtmlref .= $object->thirdparty->getNomUrl(1,
'supplier');
2039 if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) {
2040 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.$object->thirdparty->id.
'&search_company='.urlencode($object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
2046 $langs->load(
"projects");
2047 $morehtmlref .=
'<br>';
2048 if ($permissiontoadd) {
2049 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
2050 if ($action !=
'classify' && $caneditproject) {
2051 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
2053 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, ($action ==
'classify' ? 1 : 0), 0, 1,
'');
2055 if (!empty($object->fk_project)) {
2057 $proj->fetch($object->fk_project);
2058 $morehtmlref .= $proj->getNomUrl(1);
2060 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
2065 $morehtmlref .=
'</div>';
2068 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
2071 print
'<div class="fichecenter">';
2072 print
'<div class="fichehalfleft">';
2073 print
'<div class="underbanner clearboth"></div>';
2075 print
'<table class="border tableforfield centpercent">';
2078 if ($object->methode_commande_id > 0) {
2080 if (!empty($conf->global->SUPPLIER_ORDER_USE_HOUR_FOR_DELIVERY_DATE)) {
2083 print
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
2084 print $object->date_commande ?
dol_print_date($object->date_commande, $usehourmin ?
'dayhour' :
'day') :
'';
2085 if ($object->hasDelay() && !empty($object->date_delivery) && !empty($object->date_commande)) {
2086 print
' '.img_picto($langs->trans(
"Late").
' : '.$object->showDelay(),
"warning");
2090 if ($object->methode_commande) {
2091 print
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.$object->getInputMethod().
'</td></tr>';
2096 print
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
2097 print
'<td>'.$author->getNomUrl(1,
'', 0, 0, 0).
'</td>';
2101 if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
2102 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2103 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2105 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2106 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2109 $absolute_discount = $societe->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
2110 $absolute_creditnote = $societe->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
2111 $absolute_discount =
price2num($absolute_discount,
'MT');
2112 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2114 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
2116 $thirdparty = $societe;
2118 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.$object->id);
2119 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2124 $langs->load(
'bills');
2125 print
'<tr><td class="nowrap">';
2126 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2127 print $langs->trans(
'PaymentConditions');
2129 if ($action !=
'editconditions') {
2130 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editconditions&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetConditions'), 1).
'</a></td>';
2132 print
'</tr></table>';
2134 if ($action ==
'editconditions') {
2135 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'cond_reglement_id');
2137 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'none');
2143 $langs->load(
'bills');
2144 print
'<tr><td class="nowrap">';
2145 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2146 print $langs->trans(
'PaymentMode');
2148 if ($action !=
'editmode') {
2149 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmode&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetMode'), 1).
'</a></td>';
2151 print
'</tr></table>';
2153 if ($action ==
'editmode') {
2154 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
2156 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'none');
2165 print
'<table class="nobordernopadding centpercent"><tr><td>';
2166 print
$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
2168 if ($action !=
'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT) {
2169 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencycode&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
2171 print
'</tr></table>';
2173 if ($action ==
'editmulticurrencycode') {
2174 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'multicurrency_code');
2176 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'none');
2181 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
2184 print
'<table class="nobordernopadding centpercent"><tr>';
2186 print
$form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
2188 if ($action !=
'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
2189 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencyrate&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
2191 print
'</tr></table>';
2193 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
2194 if ($action ==
'actualizemulticurrencyrate') {
2197 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'multicurrency_tx', $object->multicurrency_code);
2199 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'none', $object->multicurrency_code);
2200 if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
2201 print
'<div class="inline-block"> ';
2202 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
2211 if (!empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER) &&
isModEnabled(
"banque")) {
2212 print
'<tr><td class="nowrap">';
2213 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
2214 print $langs->trans(
'BankAccount');
2216 if ($action !=
'editbankaccount' && $usercancreate) {
2217 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editbankaccount&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetBankAccount'), 1).
'</a></td>';
2219 print
'</tr></table>';
2221 if ($action ==
'editbankaccount') {
2222 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'fk_account', 1);
2224 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'none');
2232 print
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'),
'info',
'style="cursor:help"').
'</td>';
2233 print
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
2238 print
'<table class="nobordernopadding centpercent"><tr><td>';
2239 print $langs->trans(
'DateDeliveryPlanned');
2241 if ($action !=
'editdate_livraison') {
2242 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate_livraison&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetDeliveryDate'), 1).
'</a></td>';
2244 print
'</tr></table>';
2246 if ($action ==
'editdate_livraison') {
2247 print
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
2248 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2249 print
'<input type="hidden" name="action" value="setdate_livraison">';
2251 if (!empty($conf->global->SUPPLIER_ORDER_USE_HOUR_FOR_DELIVERY_DATE)) {
2254 print
$form->selectDate($object->delivery_date ? $object->delivery_date : -1,
'liv_', $usehourmin, $usehourmin,
'',
"setdate_livraison");
2255 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
2258 $usehourmin =
'day';
2259 if (!empty($conf->global->SUPPLIER_ORDER_USE_HOUR_FOR_DELIVERY_DATE)) {
2260 $usehourmin =
'dayhour';
2262 print $object->delivery_date ?
dol_print_date($object->delivery_date, $usehourmin) :
' ';
2263 if ($object->hasDelay() && !empty($object->delivery_date)) {
2264 print
' '.img_picto($langs->trans(
"Late").
' : '.$object->showDelay(),
"warning");
2272 print
'<table class="nobordernopadding centpercent"><tr><td>';
2273 print $langs->trans(
'IncotermLabel');
2274 print
'<td><td class="right">';
2275 if ($usercancreate) {
2276 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
2280 print
'</td></tr></table>';
2283 if ($action !=
'editincoterm') {
2286 print
$form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms :
''), (!empty($object->location_incoterms) ? $object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.$object->id);
2292 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
2297 print
'<div class="fichehalfright">';
2298 print
'<div class="underbanner clearboth"></div>';
2300 print
'<table class="border tableforfield centpercent">';
2302 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
2304 print
'<tr><td class="titlefieldmiddle">'.$form->editfieldkey(
'MulticurrencyAmountHT',
'multicurrency_total_ht',
'', $object, 0).
'</td>';
2305 print
'<td class="nowrap right amountcard">'.price($object->multicurrency_total_ht,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
2309 print
'<tr><td>'.$form->editfieldkey(
'MulticurrencyAmountVAT',
'multicurrency_total_tva',
'', $object, 0).
'</td>';
2310 print
'<td class="nowrap right amountcard">'.price($object->multicurrency_total_tva,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
2314 print
'<tr><td>'.$form->editfieldkey(
'MulticurrencyAmountTTC',
'multicurrency_total_ttc',
'', $object, 0).
'</td>';
2315 print
'<td class="nowrap right amountcard">'.price($object->multicurrency_total_ttc,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
2321 if (!empty($conf->global->ORDER_MANAGE_MIN_AMOUNT) && $object->total_ht < $object->thirdparty->supplier_order_min_amount) {
2322 $alert =
' '.img_warning($langs->trans(
'OrderMinAmount').
': '.
price($object->thirdparty->supplier_order_min_amount));
2324 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
"AmountHT").
'</td>';
2325 print
'<td class="nowrap right amountcard">'.price($object->total_ht,
'', $langs, 1, -1, -1, $conf->currency).$alert.
'</td>';
2329 print
'<tr><td>'.$langs->trans(
"AmountVAT").
'</td>';
2330 print
'<td class="nowrap right amountcard">'.price($object->total_tva,
'', $langs, 1, -1, -1, $conf->currency).
'</td>';
2334 if ($mysoc->localtax1_assuj ==
"1" || $object->total_localtax1 != 0) {
2335 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td>';
2336 print
'<td class="nowrap right amountcard">'.price($object->total_localtax1,
'', $langs, 1, -1, -1, $conf->currency).
'</td>';
2339 if ($mysoc->localtax2_assuj ==
"1" || $object->total_localtax2 != 0) {
2340 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td>';
2341 print
'<td class="nowrap right amountcard">'.price($object->total_localtax2,
'', $langs, 1, -1, -1, $conf->currency).
'</td>';
2346 print
'<tr><td>'.$langs->trans(
"AmountTTC").
'</td>';
2347 print
'<td class="nowrap right amountcard">'.price($object->total_ttc,
'', $langs, 1, -1, -1, $conf->currency).
'</td>';
2361 print
'<div class="clearboth"></div><br>';
2363 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
2364 $blocname =
'contacts';
2365 $title = $langs->trans(
'ContactsAddresses');
2366 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2369 if (!empty($conf->global->MAIN_DISABLE_NOTES_TAB)) {
2370 $blocname =
'notes';
2371 $title = $langs->trans(
'Notes');
2372 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
2381 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.(($action !=
'editline') ?
'' :
'#line_'.
GETPOST(
'lineid',
'int')).
'" method="POST">
2382 <input type="hidden" name="token" value="'.
newToken().
'">
2383 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
2384 <input type="hidden" name="mode" value="">
2385 <input type="hidden" name="page_y" value="">
2386 <input type="hidden" name="id" value="'.$object->id.
'">
2387 <input type="hidden" name="socid" value="'.$societe->id.
'">
2390 if (!empty($conf->use_javascript_ajax) && $object->statut == 0) {
2391 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
2394 print
'<div class="div-table-responsive-no-min">';
2395 print
'<table id="tablelines" class="noborder noshadow centpercent">';
2398 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
2399 $forceall = 1; $dateSelector = 0; $inputalsopricewithtax = 1;
2400 $senderissupplier = 2;
2401 if (!empty($conf->global->SUPPLIER_ORDER_WITH_PREDEFINED_PRICES_ONLY)) {
2402 $senderissupplier = 1;
2406 if (!empty($object->lines)) {
2407 $object->printObjectLines($action, $object->thirdparty, $mysoc, $lineid, 1);
2410 $num = count($object->lines);
2414 if ($action !=
'editline') {
2418 $reshook = $hookmanager->executeHooks(
'formAddObjectLine',
$parameters, $object, $action);
2419 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
2420 if (empty($reshook))
2421 $object->formAddObjectLine(1, $societe, $mysoc);
2434 if ($user->socid == 0 && $action !=
'delete') {
2435 if ($action !=
'makeorder' && $action !=
'presend' && $action !=
'editline') {
2436 print
'<div class="tabsAction">';
2439 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
2441 if (empty($reshook)) {
2442 $object->fetchObjectLinked();
2445 if ($object->statut == 0 && $num > 0) {
2446 if ($usercanvalidate) {
2447 $tmpbuttonlabel = $langs->trans(
'Validate');
2448 if ($usercanapprove && empty($conf->global->SUPPLIER_ORDER_NO_DIRECT_APPROVE)) {
2449 $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
2452 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=valid">';
2453 print $tmpbuttonlabel;
2465 if ($usercanorder) {
2466 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Modify").
'</a>';
2472 if ($usercanapprove) {
2473 if (!empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED && !empty($object->user_approve_id)) {
2474 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2476 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
2479 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
2484 if (!empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) {
2486 if ($usercanapprovesecond) {
2487 if (!empty($object->user_approve_id2)) {
2488 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2490 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
2493 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
2500 if ($usercanapprove || $usercanapprovesecond) {
2501 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
2503 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
2508 if (empty($user->socid)) {
2510 if ($usercanorder) {
2511 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
2519 if (!$buttonshown && $usercanapprove) {
2520 if (empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER_ONLY)
2521 || (!empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER_ONLY) && $user->id == $object->user_approve_id)) {
2522 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2526 if (!$buttonshown && $usercanapprovesecond && !empty($conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED)) {
2527 if (empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER2_ONLY)
2528 || (!empty($conf->global->SUPPLIER_ORDER_REOPEN_BY_APPROVER2_ONLY) && $user->id == $object->user_approve_id2)) {
2529 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
2533 if (in_array($object->statut, array(3, 4, 5, 6, 7, 9))) {
2534 if ($usercanorder) {
2535 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
2541 if (
isModEnabled(
'stock') && (!empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION) || !empty($conf->global->STOCK_CALCULATE_ON_RECEPTION_CLOSE))) {
2542 $labelofbutton = $langs->trans(
'ReceiveProducts');
2543 if ($conf->reception->enabled) {
2544 $labelofbutton = $langs->trans(
"CreateReception");
2545 if (!empty($object->linkedObjects[
'reception'])) {
2546 foreach ($object->linkedObjects[
'reception'] as $element) {
2547 if ($element->statut >= 0) {
2555 if (in_array($object->statut, array(3, 4, 5))) {
2556 if (((
isModEnabled(
"fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) ||
isModEnabled(
"supplier_order")) && $usercanreceive) {
2557 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.$object->id.
'">'.$labelofbutton.
'</a></div>';
2559 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
2565 if ($usercanorder) {
2566 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=makeorder#makeorder">'.$langs->trans(
"MakeOrder").
'</a></div>';
2568 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
2574 if ($usercanreceive) {
2575 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&token='.
newToken().
'&action=classifyreception#classifyreception">'.$langs->trans(
"ClassifyReception").
'</a></div>';
2582 if (((
isModEnabled(
"fournisseur") && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) ||
isModEnabled(
"supplier_invoice")) && ($object->statut >= 2 && $object->statut != 7 && $object->billed != 1)) {
2583 if ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer) {
2584 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?action=create&origin='.$object->element.
'&originid='.$object->id.
'&socid='.$object->socid.
'">'.$langs->trans(
"CreateBill").
'</a>';
2590 if ($usercancreate && $object->statut >= 2 && $object->statut != 7 && $object->billed != 1) {
2592 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2594 if (!empty($object->linkedObjectsIds[
'invoice_supplier'])) {
2595 if ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer) {
2596 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=classifybilled&token='.
newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2599 print
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
2605 if (!empty($conf->syncsupplierwebservices->enabled) && $object->statut >= 2) {
2606 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=webservice&token='.
newToken().
'&mode=init">'.$langs->trans(
'CreateRemoteOrder').
'</a>';
2610 if ($usercancreate) {
2611 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&socid='.$object->socid.
'&action=clone&object=order">'.$langs->trans(
"ToClone").
'</a>';
2616 if ($usercanorder) {
2617 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=cancel">'.$langs->trans(
"CancelOrder").
'</a>';
2622 if (!empty($usercandelete)) {
2623 if ($hasreception) {
2624 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
2626 print
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.
newToken().
'">'.$langs->trans(
"Delete").
'</a>';
2636 print
'<!-- form to record supplier order -->'.
"\n";
2637 print
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
2639 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2640 print
'<input type="hidden" name="action" value="commande">';
2642 print
'<table class="noborder centpercent">';
2644 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
2645 $date_com =
dol_mktime(
GETPOST(
'rehour',
'int'),
GETPOST(
'remin',
'int'),
GETPOST(
'resec',
'int'),
GETPOST(
'remonth',
'int'),
GETPOST(
'reday',
'int'),
GETPOST(
'reyear',
'int'));
2646 if (empty($date_com)) {
2649 print
$form->selectDate($date_com,
'', 1, 1,
'',
"commande", 1, 1);
2653 print
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
2654 $formorder->selectInputMethod(
GETPOST(
'methodecommande'),
"methodecommande", 1);
2657 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
2659 print
'<tr><td class="center" colspan="2">';
2660 print
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
2661 print
' ';
2662 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2671 if (
GETPOST(
'modelselected')) {
2672 $action =
'presend';
2675 if ($action !=
'makeorder' && $action !=
'presend' ) {
2676 print
'<div class="fichecenter"><div class="fichehalfleft">';
2680 $file = $conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
2681 $relativepath = $objref.
'/'.$objref.
'.pdf';
2682 $filedir = $conf->fournisseur->dir_output.
'/commande/'.$objref;
2683 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".$object->id;
2684 $genallowed = $usercanread;
2685 $delallowed = $usercancreate;
2686 $modelpdf = (!empty($object->model_pdf) ? $object->model_pdf : (empty($conf->global->COMMANDE_SUPPLIER_ADDON_PDF) ?
'' : $conf->global->COMMANDE_SUPPLIER_ADDON_PDF));
2688 print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 0, 0,
'',
'',
'', $object->thirdparty->default_lang,
'', $object);
2689 $somethingshown = $formfile->numoffiles;
2692 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'supplier_order',
'order_supplier'));
2693 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
2695 print
'</div><div class="fichehalfright">';
2697 if ($action ==
'classifyreception') {
2700 print
'<!-- form to record purchase order received -->'.
"\n";
2701 print
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
2702 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2703 print
'<input type="hidden" name="action" value="livraison">';
2706 print
'<table class="noborder centpercent">';
2708 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
2710 print
$form->selectDate($datepreselected,
'', 1, 1,
'',
"commande", 1, 1);
2711 print
"</td></tr>\n";
2713 print
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
2715 $liv[
''] =
' ';
2716 $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
2717 $liv[
'par'] = $langs->trans(
"PartialWoman");
2718 $liv[
'nev'] = $langs->trans(
"NeverReceived");
2719 $liv[
'can'] = $langs->trans(
"Canceled");
2721 print
$form->selectarray(
"type", $liv);
2724 print
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
2725 print
'<tr><td class="center" colspan="2">';
2726 print
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
2727 print
' ';
2728 print
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
2737 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2739 $somethingshown =
$formactions->showactions($object,
'order_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
2741 print
'</div></div>';
2747 if ($action ==
'webservice' &&
GETPOST(
'mode',
'alpha') !=
"send" && !
GETPOST(
'cancel',
'alpha')) {
2748 $mode =
GETPOST(
'mode',
'alpha');
2749 $ws_url = $object->thirdparty->webservices_url;
2750 $ws_key = $object->thirdparty->webservices_key;
2751 $ws_user =
GETPOST(
'ws_user',
'alpha');
2752 $ws_password =
GETPOST(
'ws_password',
'alpha');
2755 $ws_ns =
'http://www.dolibarr.org/ns/';
2756 $ws_authentication = array(
2757 'dolibarrkey'=>$ws_key,
2758 'sourceapplication'=>
'DolibarrWebServiceClient',
2760 'password'=>$ws_password,
2767 if (empty($ws_url) || empty($ws_key)) {
2768 setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"),
null,
'errors');
2770 $error_occurred =
true;
2771 } elseif ($mode !=
"init" && (empty($ws_user) || empty($ws_password))) {
2776 if ($mode ==
"init") {
2778 print
'<table class="border centpercent">';
2779 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
2780 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2781 print
'<input type="hidden" name="action" value="webservice">';
2782 print
'<input type="hidden" name="mode" value="check">';
2784 if ($error_occurred) {
2785 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2786 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2789 print
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
2791 print
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
2793 print
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
2795 print
'<tr><td class="center" colspan="2">';
2796 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
2797 print
' ';
2799 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2806 } elseif ($mode ==
"check") {
2808 $ws_thirdparty =
'';
2809 $error_occurred =
false;
2812 $soapclient_user =
new nusoap_client($ws_url.
"/webservices/server_user.php");
2813 $soapclient_user->soap_defencoding =
'UTF-8';
2814 $soapclient_user->decodeUTF8(
false);
2817 $ws_parameters = array(
'authentication'=>$ws_authentication,
'id' =>
'',
'ref'=>$ws_user);
2818 $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns,
'');
2819 $user_status_code = $result_user[
"result"][
"result_code"];
2821 if ($user_status_code ==
"OK") {
2823 $ws_entity = $result_user[
"user"][
"entity"];
2824 $ws_authentication[
'entity'] = $ws_entity;
2825 $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
2826 if (empty($ws_thirdparty)) {
2827 setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"),
null,
'errors');
2828 $error_occurred =
true;
2831 $soapclient_product =
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
2832 $soapclient_product->soap_defencoding =
'UTF-8';
2833 $soapclient_product->decodeUTF8(
false);
2837 foreach ($object->lines as $line) {
2839 $ref_supplier = $line->ref_supplier;
2840 $line_id = $i.
"º) ".$line->product_ref.
": ";
2841 if (empty($ref_supplier)) {
2844 $ws_parameters = array(
'authentication' => $ws_authentication,
'id' =>
'',
'ref' => $ref_supplier);
2845 $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns,
'');
2846 if (!$result_product) {
2847 setEventMessages($line_id.$langs->trans(
"SOAPError").
" ".$soapclient_product->error_str.
" - ".$soapclient_product->response,
null,
'errors');
2848 $error_occurred =
true;
2853 $status_code = $result_product[
"result"][
"result_code"];
2854 if (empty($status_code)) {
2855 setEventMessages($langs->trans(
"SOAPError").
" '".$soapclient_order->error_str.
"'",
null,
'errors');
2856 } elseif ($status_code !=
"OK") {
2857 if ($status_code ==
"NOT_FOUND") {
2858 setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'",
null,
'warnings');
2860 setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'",
null,
'errors');
2861 $error_occurred =
true;
2868 $supplier_price =
price($result_product[
"product"][
"price_net"]);
2869 $local_price =
null;
2872 $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
2873 if (count($product_fourn_list) > 0) {
2874 foreach ($product_fourn_list as $product_fourn_line) {
2876 if ($product_fourn_line->fourn_id == $object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
2877 $local_price =
price($product_fourn_line->fourn_price);
2882 if ($local_price !=
null && $local_price != $supplier_price) {
2883 setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price,
null,
'warnings');
2887 if (empty($result_product[
"product"][
"status_tosell"])) {
2888 setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'",
null,
'warnings');
2892 } elseif ($user_status_code ==
"PERMISSION_DENIED") {
2893 setEventMessages($langs->trans(
"RemoteUserNotPermission"),
null,
'errors');
2894 $error_occurred =
true;
2895 } elseif ($user_status_code ==
"BAD_CREDENTIALS") {
2896 setEventMessages($langs->trans(
"RemoteUserBadCredentials"),
null,
'errors');
2897 $error_occurred =
true;
2899 setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'",
null,
'errors');
2900 $error_occurred =
true;
2904 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
2905 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2906 print
'<input type="hidden" name="action" value="webservice">';
2907 print
'<input type="hidden" name="mode" value="send">';
2908 print
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
2909 print
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
2910 print
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
2911 print
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
2912 if ($error_occurred) {
2913 print
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
2915 print
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
2916 print
' ';
2918 print
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
2924 $modelmail =
'order_supplier_send';
2925 $defaulttopic =
'SendOrderRef';
2926 $diroutput = $conf->fournisseur->commande->dir_output;
2927 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
2928 $trackid =
'sord'.$object->id;
2930 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif($action=='specimen') elseif($action=='setmodel') elseif($action=='del') elseif($action=='setdoc') $formactions
View.
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage predefined suppliers products.
const STATUS_RECEIVED_PARTIALLY
Received partially.
const STATUS_VALIDATED
Validated status.
const STATUS_DRAFT
Draft status.
const STATUS_ACCEPTED
Accepted.
const STATUS_ORDERSENT
Order sent, shipment on process.
Class to manage line orders.
Class to manage a WYSIWYG editor.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
Class to manage notifications.
Class ProductCombination Used to represent a product combination.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
print *****$script_file(".$version.") pid c cd cd cd description as p label as s rowid
ordersupplier_prepare_head(CommandeFournisseur $object)
Prepare array with list of tabs.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists('dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_print_url($url, $target='_blank', $max=32, $withpicto=0)
Show Url link.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Fonction qui renvoie si tva doit etre tva percue recuperable.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
dol_htmloutput_events($disabledoutputofmessages=0)
Print formated messages to output (Used to show messages on html output).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="", $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
$formconfirm
if ($action == 'delbookkeepingyear') {
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.