38 require
'../main.inc.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
41 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmargin.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
43 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
45 require_once DOL_DOCUMENT_ROOT.
'/core/lib/supplier_proposal.lib.php';
46 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
47 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
48 if (!empty($conf->project->enabled)) {
49 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
50 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
54 $langs->loadLangs(array(
'companies',
'supplier_proposal',
'compta',
'bills',
'propal',
'orders',
'products',
'deliveries',
'sendings'));
56 $langs->load(
'margins');
63 $socid =
GETPOST(
'socid',
'int');
64 $action =
GETPOST(
'action',
'aZ09');
65 $cancel =
GETPOST(
'cancel',
'alpha');
66 $origin =
GETPOST(
'origin',
'alpha');
67 $originid =
GETPOST(
'originid',
'int');
68 $confirm =
GETPOST(
'confirm',
'alpha');
69 $lineid =
GETPOST(
'lineid',
'int');
70 $contactid =
GETPOST(
'contactid',
'int');
71 $projectid =
GETPOST(
'projectid',
'int');
72 $rank = (
GETPOST(
'rank',
'int') > 0) ?
GETPOST(
'rank',
'int') : -1;
75 $hidedetails = (
GETPOST(
'hidedetails',
'int') ?
GETPOST(
'hidedetails',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
76 $hidedesc = (
GETPOST(
'hidedesc',
'int') ?
GETPOST(
'hidedesc',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 1 : 0));
77 $hideref = (
GETPOST(
'hideref',
'int') ?
GETPOST(
'hideref',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
83 $hookmanager->initHooks(array(
'supplier_proposalcard',
'globalcard'));
89 $extrafields->fetch_name_optionals_label($object->table_element);
92 if ($id > 0 || !empty($ref)) {
93 $ret = $object->fetch($id, $ref);
95 $ret = $object->fetch_thirdparty();
104 $usercanread = $user->rights->supplier_proposal->lire;
105 $usercancreate = $user->rights->supplier_proposal->creer;
106 $usercandelete = $user->rights->supplier_proposal->supprimer;
109 $usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($usercancreate)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->supplier_proposal->validate_advance)));
110 $usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->supplier_proposal->send_advance);
113 $usercanclose = $user->rights->supplier_proposal->cloturer;
114 $usercancreateorder = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer);
117 $permissionnote = $usercancreate;
118 $permissiondellink = $usercancreate;
119 $permissiontoedit = $usercancreate;
120 $permissiontoadd = $usercancreate;
123 if (!empty($user->socid)) {
124 $socid = $user->socid;
126 $result =
restrictedArea($user,
'supplier_proposal', $object->id);
134 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
139 if (empty($reshook)) {
140 $backurlforlist = DOL_URL_ROOT.
'/supplier_proposal/list.php';
142 if (empty($backtopage) || ($cancel && empty($id))) {
143 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
144 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
145 $backtopage = $backurlforlist;
147 $backtopage = DOL_URL_ROOT.
'/supplier_proposal/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
153 if (!empty($backtopageforcancel)) {
154 header(
"Location: ".$backtopageforcancel);
156 } elseif (!empty($backtopage)) {
157 header(
"Location: ".$backtopage);
163 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
165 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
167 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
170 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
171 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
174 if ($object->id > 0) {
175 $result = $object->createFromClone($user, $socid);
177 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
185 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
187 $result = $object->delete($user);
189 header(
'Location: '.DOL_URL_ROOT.
'/supplier_proposal/list.php');
192 $langs->load(
"errors");
195 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
197 $result = $object->deleteline($lineid);
200 $object->line_order(
true);
202 $langs->load(
"errors");
206 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
208 $outputlangs = $langs;
211 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') : $object->thirdparty->default_lang);
212 $outputlangs->setDefaultLang($newlang);
214 $ret = $object->fetch($id);
216 $object->fetch_thirdparty();
218 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
221 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
223 } elseif ($action ==
'confirm_validate' && $confirm ==
'yes' && $usercanvalidate) {
225 $result = $object->valid($user);
227 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
228 $outputlangs = $langs;
231 $newlang =
GETPOST(
'lang_id',
'aZ09');
234 $newlang = $object->thirdparty->default_lang;
236 if (!empty($newlang)) {
238 $outputlangs->setDefaultLang($newlang);
240 $model = $object->model_pdf;
241 $ret = $object->fetch($id);
243 $object->fetch_thirdparty();
246 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
249 $langs->load(
"errors");
250 if (count($object->errors) > 0) {
256 } elseif ($action ==
'setdate_livraison' && $usercancreate) {
261 } elseif ($action ==
'add' && $usercancreate) {
263 $object->socid = $socid;
264 $object->fetch_thirdparty();
269 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Supplier")),
null,
'errors');
278 if (
GETPOST(
'createmode') ==
'copy' &&
GETPOST(
'copie_supplier_proposal')) {
279 if ($object->fetch(
GETPOST(
'copie_supplier_proposal')) > 0) {
281 $object->date_livraison = $date_delivery;
282 $object->delivery_date = $date_delivery;
283 $object->shipping_method_id =
GETPOST(
'shipping_method_id',
'int');
284 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
285 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
286 $object->fk_account =
GETPOST(
'fk_account',
'int');
289 $object->socid =
GETPOST(
'socid');
290 $object->fk_project =
GETPOST(
'projectid',
'int');
291 $object->model_pdf =
GETPOST(
'model');
292 $object->author = $user->id;
293 $object->note =
GETPOST(
'note',
'restricthtml');
294 $object->note_private =
GETPOST(
'note',
'restricthtml');
297 setEventMessages($langs->trans(
"ErrorFailedToCopyProposal",
GETPOST(
'copie_supplier_proposal')),
null,
'errors');
301 $object->date_livraison = $date_delivery;
302 $object->delivery_date = $date_delivery;
303 $object->demand_reason_id =
GETPOST(
'demand_reason_id');
304 $object->shipping_method_id =
GETPOST(
'shipping_method_id',
'int');
305 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
306 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
307 $object->fk_account =
GETPOST(
'fk_account',
'int');
308 $object->fk_project =
GETPOST(
'projectid',
'int');
309 $object->model_pdf =
GETPOST(
'model');
310 $object->author = $user->id;
311 $object->note =
GETPOST(
'note',
'restricthtml');
312 $object->note_private =
GETPOST(
'note',
'restricthtml');
314 $object->origin =
GETPOST(
'origin');
315 $object->origin_id =
GETPOST(
'originid');
319 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
323 $ret = $extrafields->setOptionalsFromPost(
null, $object);
331 if ($origin && $originid) {
333 $element = $subelement = $origin;
334 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
336 $subelement = $regs[2];
340 if ($element ==
'order') {
341 $element = $subelement =
'commande';
343 if ($element ==
'propal') {
344 $element =
'comm/propal';
345 $subelement =
'propal';
347 if ($element ==
'contract') {
348 $element = $subelement =
'contrat';
350 if ($element ==
'inter') {
351 $element = $subelement =
'ficheinter';
353 if ($element ==
'shipping') {
354 $element = $subelement =
'expedition';
357 $object->origin = $origin;
358 $object->origin_id = $originid;
361 $object->linked_objects [$object->origin] = $object->origin_id;
362 if (is_array($_POST[
'other_linked_objects']) && !empty($_POST[
'other_linked_objects'])) {
363 $object->linked_objects = array_merge($object->linked_objects, $_POST[
'other_linked_objects']);
366 $id = $object->create($user);
370 $classname = ucfirst($subelement);
371 $srcobject =
new $classname($db);
373 dol_syslog(
"Try to find source object origin=".$object->origin.
" originid=".$object->origin_id.
" to add lines");
374 $result = $srcobject->fetch($object->origin_id);
377 $lines = $srcobject->lines;
378 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
379 $srcobject->fetch_lines();
380 $lines = $srcobject->lines;
384 $num = count($lines);
385 for ($i = 0; $i < $num; $i++) {
386 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
387 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->libelle);
390 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
393 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
398 if (method_exists($lines[$i],
'fetch_optionals')) {
399 $lines[$i]->fetch_optionals();
400 $array_options = $lines[$i]->array_options;
403 $result = $object->addline(
405 $lines[$i]->subprice,
408 $lines[$i]->localtax1_tx,
409 $lines[$i]->localtax2_tx,
410 $lines[$i]->fk_product,
411 $lines[$i]->remise_percent,
414 $lines[$i]->info_bits,
417 $lines[$i]->special_code,
419 $lines[$i]->fk_fournprice,
423 $lines[$i]->ref_supplier,
436 if ($result > 0 && $lines[$i]->product_type == 9) {
437 $fk_parent_line = $result;
443 $reshook = $hookmanager->executeHooks(
'createFrom',
$parameters, $object, $action);
458 $id = $object->create($user);
466 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
467 $outputlangs = $langs;
470 $newlang =
GETPOST(
'lang_id',
'aZ09');
473 $newlang = $object->thirdparty->default_lang;
475 if (!empty($newlang)) {
477 $outputlangs->setDefaultLang($newlang);
479 $model = $object->model_pdf;
481 $ret = $object->fetch($id);
482 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
488 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
501 } elseif ($action ==
'confirm_reopen' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
507 } elseif ($action ==
'close' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
513 } elseif ($action ==
'setstatut' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
516 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CloseAs")),
null,
'errors');
521 $object->cloture($user,
GETPOST(
'statut'),
GETPOST(
'note',
'restricthtml'));
527 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
530 $triggersendname =
'PROPOSAL_SUPPLIER_SENTBYMAIL';
531 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
532 $trackid =
'spro'.$object->id;
533 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
536 $upload_dir = $conf->supplier_proposal->dir_output;
537 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
541 if ($action ==
'modif' && $usercancreate) {
542 $object->setDraft($user);
544 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
546 $outputlangs = $langs;
549 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') : $object->thirdparty->default_lang);
550 $outputlangs->setDefaultLang($newlang);
552 $ret = $object->fetch($id);
554 $object->fetch_thirdparty();
556 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
558 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
559 if (
GETPOST(
"remise_id",
'int')) {
560 if ($object->id > 0) {
561 $result = $object->insert_discount(
GETPOST(
"remise_id",
'int'));
570 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') && $usercancreate) {
572 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
573 $vat_rate = str_replace(
'*',
'', $vat_rate);
574 $localtax1_rate =
get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
575 $localtax2_rate =
get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
576 foreach ($object->lines as $line) {
577 $result = $object->updateline($line->id, $line->subprice, $line->qty, $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $line->desc,
'HT', $line->info_bits, $line->special_code, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
579 } elseif ($action ==
'addline' && $usercancreate) {
580 $langs->load(
'errors');
589 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
591 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
592 if ($prod_entry_mode ==
'free') {
594 $tva_tx = (
GETPOST(
'tva_tx',
'alpha') ?
price2num(preg_replace(
'/\s*\(.*\)/',
'',
GETPOST(
'tva_tx',
'alpha'))) : 0);
596 $idprod =
GETPOST(
'idprod',
'int');
610 if (empty($remise_percent)) {
615 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
616 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
618 if (is_array($extralabelsline)) {
620 foreach ($extralabelsline as $key => $value) {
621 unset($_POST[
"options_".$key]);
625 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
626 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
629 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
630 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
634 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
635 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPrice")),
null,
'errors');
638 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
639 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
642 if (!$error && ($qty >= 0)) {
646 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
650 if ($prod_entry_mode !=
'free' && empty($error)) {
654 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
659 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
661 $res = $productsupplier->fetch($idprod);
664 if (!empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) {
666 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
667 if ($productsupplier->fourn_socid != $socid) {
668 $productsupplier->ref_supplier =
'';
671 $fksoctosearch = $object->thirdparty->id;
672 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
674 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
677 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
678 $res = $productsupplier->fetch($idprod);
682 $label = $productsupplier->label;
685 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
686 $outputlangs = $langs;
688 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
689 $newlang =
GETPOST(
'lang_id',
'aZ09');
691 if (empty($newlang)) {
692 $newlang = $object->thirdparty->default_lang;
694 if (!empty($newlang)) {
696 $outputlangs->setDefaultLang($newlang);
698 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->description;
700 $desc = $productsupplier->description;
703 if (!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
704 $desc = $productsupplier->desc_supplier;
708 if (trim($product_desc) == trim($desc) && !empty($conf->global->PRODUIT_AUTOFILL_DESC)) {
712 if (!empty($product_desc) && !empty($conf->global->MAIN_NO_CONCAT_DESCRIPTION)) {
713 $desc = $product_desc;
715 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
716 $desc =
dol_concatdesc($desc, $product_desc,
'', !empty($conf->global->MAIN_CHANGE_ORDER_CONCAT_DESCRIPTION));
719 $ref_supplier = $productsupplier->ref_supplier;
724 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
725 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
727 if (empty($tva_tx)) {
730 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
731 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
733 $type = $productsupplier->type;
734 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'price_ht_devise') !=
'') {
735 $price_base_type =
'HT';
737 $pu_devise =
price2num($price_ht_devise,
'CU');
738 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'price_ttc_devise') !=
'') {
739 $price_base_type =
'TTC';
741 $pu_devise =
price2num($price_ttc_devise,
'CU');
743 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
744 if (empty($object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code != $object->multicurrency_code)) {
745 $pu = $productsupplier->fourn_pu;
748 $pu = $productsupplier->fourn_pu;
749 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
758 $fournprice = (is_numeric(
GETPOST(
'idprodfournprice',
'alpha')) ?
GETPOST(
'idprodfournprice',
'alpha') : -1);
761 $result = $object->addline(
763 ($price_base_type ==
'HT' ? $pu : 0),
768 $productsupplier->id,
771 ($price_base_type ==
'TTC' ? $pu : 0),
774 min($rank, count($object->lines) + 1),
782 $productsupplier->fk_unit,
798 if ($idprod == -99 || $idprod == 0) {
801 $langs->load(
"errors");
802 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")).
' '.$langs->trans(
"or").
' '.$langs->trans(
"NoPriceDefinedForThisSupplier"),
null,
'errors');
807 $langs->load(
"errors");
808 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
810 } elseif ((
GETPOST(
'price_ht') !==
'' ||
GETPOST(
'price_ttc') !==
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') && empty($error)) {
814 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
815 $tva_tx = str_replace(
'*',
'', $tva_tx);
816 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
817 $desc = $product_desc;
820 $fk_unit =
GETPOST(
'units',
'alpha');
822 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
827 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
828 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
830 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'price_ht_devise') !=
'') {
834 $pu_ht =
price2num($pu_ttc / (1 + ($tva_tx / 100)),
'MU');
836 $price_base_type =
'HT';
837 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
840 $result = $object->addline(
869 if (!$error && $result > 0) {
872 $ret = $object->fetch($object->id);
875 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
876 $outputlangs = $langs;
879 $newlang =
GETPOST(
'lang_id',
'aZ09');
882 $newlang = $object->thirdparty->default_lang;
884 if (!empty($newlang)) {
886 $outputlangs->setDefaultLang($newlang);
888 $model = $object->model_pdf;
889 $ret = $object->fetch($id);
891 $object->fetch_thirdparty();
894 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
900 unset($_POST[
'prod_entry_mode']);
902 unset($_POST[
'qty']);
903 unset($_POST[
'type']);
904 unset($_POST[
'remise_percent']);
906 unset($_POST[
'price_ht']);
907 unset($_POST[
'multicurrency_price_ht']);
908 unset($_POST[
'price_ttc']);
909 unset($_POST[
'fourn_ref']);
910 unset($_POST[
'tva_tx']);
911 unset($_POST[
'label']);
912 unset($_POST[
'product_ref']);
913 unset($_POST[
'product_label']);
914 unset($_POST[
'product_desc']);
915 unset($_POST[
'fournprice']);
916 unset($_POST[
'buying_price']);
917 unset($localtax1_tx);
918 unset($localtax2_tx);
919 unset($_POST[
'np_marginRate']);
920 unset($_POST[
'np_markRate']);
921 unset($_POST[
'dp_desc']);
922 unset($_POST[
'idprodfournprice']);
923 unset($_POST[
'units']);
925 unset($_POST[
'idprod']);
927 unset($_POST[
'date_starthour']);
928 unset($_POST[
'date_startmin']);
929 unset($_POST[
'date_startsec']);
930 unset($_POST[
'date_startday']);
931 unset($_POST[
'date_startmonth']);
932 unset($_POST[
'date_startyear']);
933 unset($_POST[
'date_endhour']);
934 unset($_POST[
'date_endmin']);
935 unset($_POST[
'date_endsec']);
936 unset($_POST[
'date_endday']);
937 unset($_POST[
'date_endmonth']);
938 unset($_POST[
'date_endyear']);
945 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'save') == $langs->trans(
"Save")) {
951 if (preg_match(
'/\*/', $vat_rate)) {
959 $vat_rate = str_replace(
'*',
'', $vat_rate);
960 $localtax1_rate =
get_localtax($vat_rate, 1, $mysoc, $object->thirdparty);
961 $localtax2_rate =
get_localtax($vat_rate, 2, $mysoc, $object->thirdparty);
963 if (
GETPOST(
'price_ht') !=
'') {
964 $price_base_type =
'HT';
968 $vatratecleaned = $vat_rate;
969 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
970 $vatratecleaned = trim($reg[1]);
971 $vatratecode = $reg[2];
975 $ht = (
float) $ttc / (1 + ((
float) $vatratecleaned / 100));
976 $price_base_type =
'HT';
982 $fournprice = (
GETPOST(
'fournprice') ?
GETPOST(
'fournprice') :
'');
983 $buyingprice = (
GETPOST(
'buying_price') !=
'' ?
GETPOST(
'buying_price') :
'');
986 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
987 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
989 if (is_array($extralabelsline)) {
990 foreach ($extralabelsline as $key => $value) {
991 unset($_POST[
"options_".$key]);
996 $special_code =
GETPOST(
'special_code');
1002 $productid =
GETPOST(
'productid',
'int');
1003 if (!empty($productid)) {
1005 if (!empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) {
1006 if ($productid > 0 && $productsupplier->get_buyprice(0,
price2num(
GETPOST(
'qty')), $productid,
'none',
GETPOST(
'socid',
'int')) < 0) {
1007 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1012 $res = $product->fetch($productid);
1014 $type = $product->type;
1016 $price_min = $product->price_min;
1017 if (!empty($conf->global->PRODUIT_MULTIPRICES) && !empty($object->thirdparty->price_level)) {
1018 $price_min = $product->multiprices_min [$object->thirdparty->price_level];
1024 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1028 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
1036 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1039 $result = $object->updateline(
1051 GETPOST(
'fk_parent_line',
'int'),
1066 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1068 $outputlangs = $langs;
1070 $outputlangs =
new Translate(
"", $conf);
1071 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') : $object->thirdparty->default_lang);
1072 $outputlangs->setDefaultLang($newlang);
1074 $ret = $object->fetch($id);
1075 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1078 unset($_POST[
'qty']);
1079 unset($_POST[
'type']);
1080 unset($_POST[
'productid']);
1081 unset($_POST[
'remise_percent']);
1082 unset($_POST[
'price_ht']);
1083 unset($_POST[
'multicurrency_price_ht']);
1084 unset($_POST[
'price_ttc']);
1085 unset($_POST[
'tva_tx']);
1086 unset($_POST[
'product_ref']);
1087 unset($_POST[
'product_label']);
1088 unset($_POST[
'product_desc']);
1089 unset($_POST[
'fournprice']);
1090 unset($_POST[
'buying_price']);
1092 unset($_POST[
'date_starthour']);
1093 unset($_POST[
'date_startmin']);
1094 unset($_POST[
'date_startsec']);
1095 unset($_POST[
'date_startday']);
1096 unset($_POST[
'date_startmonth']);
1097 unset($_POST[
'date_startyear']);
1098 unset($_POST[
'date_endhour']);
1099 unset($_POST[
'date_endmin']);
1100 unset($_POST[
'date_endsec']);
1101 unset($_POST[
'date_endday']);
1102 unset($_POST[
'date_endmonth']);
1103 unset($_POST[
'date_endyear']);
1110 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
1111 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.$object->id);
1113 } elseif ($action ==
'classin' && $usercancreate) {
1115 $object->setProject(
GETPOST(
'projectid'),
'int');
1116 } elseif ($action ==
'setavailability' && $usercancreate) {
1118 $result = $object->availability(
GETPOST(
'availability_id'));
1119 } elseif ($action ==
'setconditions' && $usercancreate) {
1121 $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id',
'int'));
1122 } elseif ($action ==
'setremisepercent' && $usercancreate) {
1123 $result = $object->set_remise_percent($user,
price2num(
GETPOST(
'remise_percent'),
'', 2));
1124 } elseif ($action ==
'setremiseabsolue' && $usercancreate) {
1125 $result = $object->set_remise_absolue($user,
price2num(
GETPOST(
'remise_absolue'),
'MU', 2));
1126 } elseif ($action ==
'setmode' && $usercancreate) {
1128 $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id',
'int'));
1129 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
1131 $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
1132 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
1134 $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx')),
GETPOST(
'calculation_mode',
'int'));
1135 } elseif ($action ==
'update_extras') {
1139 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
1145 $result = $object->insertExtraFields(
'PROPOSAL_SUPPLIER_MODIFY');
1153 $action =
'edit_extras';
1162 $title = $object->ref.
" - ".$langs->trans(
'Card');
1163 if ($action ==
'create') {
1164 $title = $langs->trans(
"SupplierProposalNew");
1166 $help_url =
'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur';
1173 $companystatic =
new Societe($db);
1174 if (!empty($conf->project->enabled)) {
1181 if ($action ==
'create') {
1182 $currency_code = $conf->currency;
1184 print
load_fiche_titre($langs->trans(
"SupplierProposalNew"),
'',
'supplier_proposal');
1188 $res = $soc->fetch($socid);
1192 if (!empty($origin) && !empty($originid)) {
1193 $element = $subelement =
GETPOST(
'origin');
1194 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1195 $element = $regs[1];
1196 $subelement = $regs[2];
1200 if ($element ==
'order' || $element ==
'commande') {
1201 $element = $subelement =
'commande';
1203 if ($element ==
'propal') {
1204 $element =
'comm/propal';
1205 $subelement =
'propal';
1210 $classname = ucfirst($subelement);
1211 $objectsrc =
new $classname($db);
1212 $objectsrc->fetch($originid);
1213 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1214 $objectsrc->fetch_lines();
1216 $objectsrc->fetch_thirdparty();
1218 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1219 $soc = $objectsrc->thirdparty;
1221 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1222 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1223 $remise_percent = (!empty($objectsrc->remise_percent) ? $objectsrc->remise_percent : (!empty($soc->remise_supplier_percent) ? $soc->remise_supplier_percent : 0));
1224 $remise_absolue = (!empty($objectsrc->remise_absolue) ? $objectsrc->remise_absolue : (!empty($soc->remise_absolue) ? $soc->remise_absolue : 0));
1227 $objectsrc->fetch_optionals();
1228 $object->array_options = $objectsrc->array_options;
1231 if (!empty($objectsrc->multicurrency_code)) {
1232 $currency_code = $objectsrc->multicurrency_code;
1234 if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) {
1235 $currency_tx = $objectsrc->multicurrency_tx;
1239 $cond_reglement_id = $soc->cond_reglement_supplier_id;
1240 $mode_reglement_id = $soc->mode_reglement_supplier_id;
1241 if (
isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
1242 $currency_code = $soc->multicurrency_code;
1248 print
'<form name="addprop" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1249 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1250 print
'<input type="hidden" name="action" value="add">';
1251 if ($origin !=
'project' && $originid) {
1252 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1253 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1258 print
'<table class="border centpercent">';
1261 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Ref').
'</td><td colspan="2">'.$langs->trans(
"Draft").
'</td></tr>';
1265 print
'<td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1267 print
'<td colspan="2">';
1268 print $soc->getNomUrl(1,
'supplier');
1269 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1272 print
'<td colspan="2">';
1273 print
img_picto(
'',
'company').$form->select_company(
'',
'socid',
's.fournisseur=1',
'SelectThirdParty', 0, 0,
null, 0,
'minwidth300');
1275 if (!empty($conf->global->RELOAD_PAGE_ON_SUPPLIER_CHANGE)) {
1277 $(document).ready(function() {
1278 $("#socid").change(function() {
1279 var socid = $(this).val();
1281 window.location.href = "'.$_SERVER[
"PHP_SELF"].
'?action=create&socid="+socid;
1286 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>';
1293 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1295 $absolute_discount = $soc->getAvailableDiscounts(
'',
'', 0, 1);
1299 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1300 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1306 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td colspan="2">';
1307 print
$form->getSelectConditionsPaiements(
GETPOST(
'cond_reglement_id') > 0 ?
GETPOST(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1);
1311 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td colspan="2">';
1312 $form->select_types_paiements(
GETPOST(
'mode_reglement_id') > 0 ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1316 if (!empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL) &&
isModEnabled(
"banque")) {
1317 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td colspan="2">';
1318 $form->select_comptes(
GETPOST(
'fk_account') > 0 ?
GETPOST(
'fk_account',
'int') : $fk_account,
'fk_account', 0,
'', 1);
1324 print
'<tr><td>'.$langs->trans(
'SendingMethod').
'</td><td colspan="2">';
1325 print
img_picto(
'',
'object_dollyrevert',
'class="pictofixedwidth"');
1326 $form->selectShippingMethod(
GETPOST(
'shipping_method_id') > 0 ?
GETPOST(
'shipping_method_id',
'int') :
"",
'shipping_method_id',
'', 1);
1331 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td>';
1332 print
'<td colspan="2">';
1334 if (!empty($conf->global->DATE_LIVRAISON_WEEK_DELAY)) {
1335 $tmpdte = time() + ((7 * $conf->global->DATE_LIVRAISON_WEEK_DELAY) * 24 * 60 * 60);
1336 $syear = date(
"Y", $tmpdte);
1337 $smonth = date(
"m", $tmpdte);
1338 $sday = date(
"d", $tmpdte);
1339 print
$form->selectDate($syear.
"-".$smonth.
"-".$sday,
'liv_',
'',
'',
'',
"addask");
1341 print
$form->selectDate($datedelivery ? $datedelivery : -1,
'liv_',
'',
'',
'',
"addask", 1, 1);
1348 print
'<td>'.$langs->trans(
"DefaultModel").
'</td>';
1349 print
'<td colspan="2">';
1351 $preselected = (!empty($conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT) ? $conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT : $conf->global->SUPPLIER_PROPOSAL_ADDON_PDF);
1352 print
$form->selectarray(
'model', $list, $preselected, 0, 0, 0,
'', 0, 0, 0,
'',
'', 1);
1356 if (!empty($conf->project->enabled)) {
1357 $langs->load(
"projects");
1361 if ($origin ==
'project') {
1362 $projectid = ($originid ? $originid : 0);
1366 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
1367 print
img_picto(
'',
'project').$formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1368 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.$soc->id.
'&action=create&status=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create&socid='.$soc->id).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
1377 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
1378 print
'<td colspan="3" class="maxwidthonsmartphone">';
1379 print
$form->selectMultiCurrency($currency_code,
'multicurrency_code');
1384 $parameters = array(
'colspan' =>
' colspan="3"',
'cols' => 3);
1385 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $object, $action);
1386 print $hookmanager->resPrint;
1387 if (empty($reshook)) {
1388 print $object->showOptionals($extrafields,
'create',
$parameters);
1393 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1395 if ($origin ==
'contrat') {
1397 $objectsrc->remise_absolue = $remise_absolue;
1398 $objectsrc->remise_percent = $remise_percent;
1399 $objectsrc->update_price(1,
'auto', 1);
1402 print
"\n<!-- ".$classname.
" info -->";
1404 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1405 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1406 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1407 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1408 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1410 print
'<tr><td>'.$langs->trans(
'CommRequest').
'</td><td colspan="2">'.$objectsrc->getNomUrl(1).
'</td></tr>';
1411 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td colspan="2">'.
price($objectsrc->total_ht).
'</td></tr>';
1412 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td colspan="2">'.
price($objectsrc->total_tva).
"</td></tr>";
1413 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1414 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax1).
"</td></tr>";
1417 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1418 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax2).
"</td></tr>";
1420 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td colspan="2">'.
price($objectsrc->total_ttc).
"</td></tr>";
1423 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1424 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
1425 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
1436 if (empty($conf->global->SUPPLIER_PROPOSAL_CLONE_ON_CREATE_PAGE)) {
1437 print
'<input type="hidden" name="createmode" value="empty">';
1440 if (!empty($conf->global->SUPPLIER_PROPOSAL_CLONE_ON_CREATE_PAGE)) {
1441 print
'<br><table>';
1445 print
'<td><input type="radio" name="createmode" value="copy"></td>';
1446 print
'<td>'.$langs->trans(
"CopyAskFrom").
' </td>';
1448 $liste_ask = array();
1449 $liste_ask [0] =
'';
1451 $sql =
"SELECT p.rowid as id, p.ref, s.nom";
1452 $sql .=
" FROM ".MAIN_DB_PREFIX.
"supplier_proposal p";
1453 $sql .=
", ".MAIN_DB_PREFIX.
"societe s";
1454 $sql .=
" WHERE s.rowid = p.fk_soc";
1455 $sql .=
" AND p.entityy IN (".getEntity(
'supplier_proposal').
")";
1456 $sql .=
" AND p.fk_statut <> ".SupplierProposal::STATUS_DRAFT;
1457 $sql .=
" ORDER BY Id";
1459 $resql = $db->query($sql);
1461 $num = $db->num_rows(
$resql);
1464 $row = $db->fetch_row(
$resql);
1465 $askPriceSupplierRefAndSocName = $row[1].
" - ".$row[2];
1466 $liste_ask[$row[0]] = $askPriceSupplierRefAndSocName;
1469 print
$form->selectarray(
"copie_supplier_proposal", $liste_ask, 0);
1475 print
'<tr><td class="tdtop"><input type="radio" name="createmode" value="empty" checked></td>';
1476 print
'<td valign="top" colspan="2">'.$langs->trans(
"CreateEmptyAsk").
'</td></tr>';
1479 if (!empty($conf->global->SUPPLIER_PROPOSAL_CLONE_ON_CREATE_PAGE)) {
1485 print
$form->buttonsSaveCancel(
"CreateDraft");
1491 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1494 $title = $langs->trans(
'ProductsAndServices');
1497 print
'<div class="div-table-responsive-no-min">';
1498 print
'<table class="noborder centpercent">';
1500 $objectsrc->printOriginLinesList();
1511 $soc->fetch($object->socid);
1513 $head = supplier_proposal_prepare_head($object);
1514 print
dol_get_fiche_head($head,
'comm', $langs->trans(
'CommRequest'), -1,
'supplier_proposal');
1519 if ($action ==
'clone') {
1521 $formquestion = array(
1529 'label' => $langs->trans(
"SelectThirdParty"),
1530 'value' =>
$form->select_company(
GETPOST(
'socid',
'int'),
'socid',
's.fournisseur=1'))
1533 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneAsk', $object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1534 } elseif ($action ==
'delete') {
1536 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteAsk'), $langs->trans(
'ConfirmDeleteAsk', $object->ref),
'confirm_delete',
'', 0, 1);
1537 } elseif ($action ==
'reopen') {
1539 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenAsk', $object->ref),
'confirm_reopen',
'', 0, 1);
1540 } elseif ($action ==
'ask_deleteline') {
1542 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
1543 } elseif ($action ==
'validate') {
1548 $ref = substr($object->ref, 1, 4);
1549 if ($ref ==
'PROV') {
1550 $numref = $object->getNextNumRef($soc);
1551 if (empty($numref)) {
1556 $numref = $object->ref;
1559 $text = $langs->trans(
'ConfirmValidateAsk', $numref);
1561 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1562 $notify =
new Notify($db);
1564 $text .= $notify->confirmMessage(
'PROPOSAL_SUPPLIER_VALIDATE', $object->socid, $object);
1568 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ValidateAsk'), $text,
'confirm_validate',
'', 0, 1);
1574 $reshook = $hookmanager->executeHooks(
'formConfirm',
$parameters, $object, $action);
1575 if (empty($reshook)) {
1577 } elseif ($reshook > 0) {
1586 $linkback =
'<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1589 $morehtmlref =
'<div class="refidno">';
1594 $morehtmlref .= $object->thirdparty->getNomUrl(1,
'supplier');
1595 if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) {
1596 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?socid='.$object->thirdparty->id.
'&search_societe='.urlencode($object->thirdparty->name).
'">'.$langs->trans(
"OtherProposals").
'</a>)';
1600 $langs->load(
"projects");
1601 $morehtmlref .=
'<br>';
1602 if ($usercancreate) {
1603 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1604 if ($action !=
'classify') {
1605 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1607 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, ($action ==
'classify' ? 1 : 0), 0, 1,
'');
1609 if (!empty($object->fk_project)) {
1611 $proj->fetch($object->fk_project);
1612 $morehtmlref .= $proj->getNomUrl(1);
1614 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1619 $morehtmlref .=
'</div>';
1622 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
1625 print
'<div class="fichecenter">';
1626 print
'<div class="fichehalfleft">';
1627 print
'<div class="underbanner clearboth"></div>';
1629 print
'<table class="border tableforfield centpercent">';
1632 if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
1633 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
1634 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
1636 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
1637 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
1640 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
1642 $absolute_discount = $soc->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
1643 $absolute_creditnote = $soc->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
1644 $absolute_discount =
price2num($absolute_discount,
'MT');
1645 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
1649 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.$object->id);
1650 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1655 print
'<tr><td class="titlefield">';
1656 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1657 print $langs->trans(
'PaymentConditionsShort');
1660 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editconditions&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetConditions'), 1).
'</a></td>';
1662 print
'</tr></table>';
1663 print
'</td><td class="valuefield">';
1664 if ($action ==
'editconditions') {
1665 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'cond_reglement_id', 1);
1667 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'none', 1);
1673 $langs->load(
'deliveries');
1675 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1676 print $langs->trans(
'DeliveryDate');
1679 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate_livraison&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetDeliveryDate'), 1).
'</a></td>';
1681 print
'</tr></table>';
1682 print
'</td><td class="valuefield">';
1683 if ($action ==
'editdate_livraison') {
1684 print
'<form name="editdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post" class="formconsumeproduce">';
1685 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1686 print
'<input type="hidden" name="action" value="setdate_livraison">';
1687 print
$form->selectDate($object->delivery_date,
'liv_',
'',
'',
'',
"editdate_livraison");
1688 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1699 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1700 print $langs->trans(
'PaymentMode');
1703 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmode&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMode'), 1).
'</a></td>';
1705 print
'</tr></table>';
1706 print
'</td><td class="valuefield">';
1707 if ($action ==
'editmode') {
1708 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
1710 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'none');
1719 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1720 print
$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
1722 if ($action !=
'editmulticurrencycode' && $object->statut == $object::STATUS_VALIDATED) {
1723 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>';
1725 print
'</tr></table>';
1726 print
'</td><td class="valuefield">';
1727 if ($action ==
'editmulticurrencycode') {
1728 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'multicurrency_code');
1730 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'none');
1735 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
1738 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1739 print
$form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
1741 if ($action !=
'editmulticurrencyrate' && $object->statut == $object::STATUS_VALIDATED && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
1742 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>';
1744 print
'</tr></table>';
1745 print
'</td><td class="valuefield">';
1746 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
1747 if ($action ==
'actualizemulticurrencyrate') {
1750 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'multicurrency_tx', $object->multicurrency_code);
1752 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'none', $object->multicurrency_code);
1753 if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
1754 print
'<div class="inline-block"> ';
1755 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
1777 if (!empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL) &&
isModEnabled(
"banque")) {
1780 print
'<table width="100%" class="nobordernopadding"><tr><td>';
1781 print $langs->trans(
'BankAccount');
1783 if ($action !=
'editbankaccount' && $usercancreate) {
1784 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>';
1786 print
'</tr></table>';
1787 print
'</td><td class="valuefield">';
1788 if ($action ==
'editbankaccount') {
1789 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'fk_account', 1);
1791 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'none');
1798 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1803 print
'<div class="fichehalfright">';
1804 print
'<div class="underbanner clearboth"></div>';
1806 print
'<table class="border tableforfield centpercent">';
1808 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code != $conf->currency)) {
1810 print
'<tr><td class="titlefieldmiddle">'.$form->editfieldkey(
'MulticurrencyAmountHT',
'multicurrency_total_ht',
'', $object, 0).
'</td>';
1811 print
'<td class="valuefield nowrap right amountcard">'.price($object->multicurrency_total_ht,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
1815 print
'<tr><td>'.$form->editfieldkey(
'MulticurrencyAmountVAT',
'multicurrency_total_tva',
'', $object, 0).
'</td>';
1816 print
'<td class="valuefield nowrap right amountcard">'.price($object->multicurrency_total_tva,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
1820 print
'<tr><td>'.$form->editfieldkey(
'MulticurrencyAmountTTC',
'multicurrency_total_ttc',
'', $object, 0).
'</td>';
1821 print
'<td class="valuefield nowrap right amountcard">'.price($object->multicurrency_total_ttc,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
1826 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
'AmountHT').
'</td>';
1827 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_ht,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1831 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td>';
1832 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_tva,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1836 if ($mysoc->localtax1_assuj ==
"1" || $object->total_localtax1 != 0) {
1837 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td>';
1838 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_localtax1,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1841 if ($mysoc->localtax2_assuj ==
"1" || $object->total_localtax2 != 0) {
1842 print
'<tr><td height="10">'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td>';
1843 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_localtax2,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1848 print
'<tr><td height="10">'.$langs->trans(
'AmountTTC').
'</td>';
1849 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_ttc,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1862 print
'<div class="clearboth"></div><br>';
1864 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
1865 $blocname =
'contacts';
1866 $title = $langs->trans(
'ContactsAddresses');
1867 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1870 if (!empty($conf->global->MAIN_DISABLE_NOTES_TAB)) {
1871 $blocname =
'notes';
1872 $title = $langs->trans(
'Notes');
1873 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1881 $result = $object->getLinesArray();
1883 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.(($action !=
'editline') ?
'#add' :
'').
'" method="POST">
1884 <input type="hidden" name="token" value="' .
newToken().
'">
1885 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
1886 <input type="hidden" name="mode" value="">
1887 <input type="hidden" name="id" value="' . $object->id.
'">
1891 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1894 print
'<div class="div-table-responsive-no-min">';
1895 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1898 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
1899 $forceall = 1; $dateSelector = 0; $inputalsopricewithtax = 1;
1900 $senderissupplier = 2;
1901 if (!empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) {
1902 $senderissupplier = 1;
1905 if (!empty($object->lines)) {
1906 $object->printObjectLines($action, $soc, $mysoc, $lineid, $dateSelector);
1911 if ($action !=
'editline') {
1915 $reshook = $hookmanager->executeHooks(
'formAddObjectLine',
$parameters, $object, $action);
1916 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
1917 if (empty($reshook))
1918 $object->formAddObjectLine($dateSelector, $soc, $mysoc);
1928 if ($action ==
'statut') {
1930 $form_close =
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="POST" id="formacceptrefuse" class="formconsumeproduce paddingbottom paddingleft paddingright">';
1931 $form_close .=
'<input type="hidden" name="token" value="'.newToken().
'">';
1932 $form_close .=
'<input type="hidden" name="action" value="setstatut">';
1934 if (!empty($conf->global->SUPPLIER_PROPOSAL_UPDATE_PRICE_ON_SUPPlIER_PROPOSAL)) {
1935 $form_close .=
'<p class="notice">'.$langs->trans(
'SupplierProposalRefFournNotice').
'</p>';
1937 $form_close .=
'<table class="border centpercent marginleftonly marginrightonly">';
1938 $form_close .=
'<tr><td>'.$langs->trans(
"CloseAs").
'</td><td class="left">';
1939 $form_close .=
'<select id="statut" name="statut" class="flat">';
1940 $form_close .=
'<option value="0"> </option>';
1941 $form_close .=
'<option value="2">'.$langs->trans(
'SupplierProposalStatusSigned').
'</option>';
1942 $form_close .=
'<option value="3">'.$langs->trans(
'SupplierProposalStatusNotSigned').
'</option>';
1943 $form_close .=
'</select>';
1944 $form_close .=
'</td></tr>';
1945 $form_close .=
'<tr><td class="left">'.$langs->trans(
'Note').
'</td><td class="left"><textarea cols="70" rows="'.ROWS_3.
'" wrap="soft" name="note">';
1946 $form_close .= $object->note_private;
1947 $form_close .=
'</textarea></td></tr>';
1948 $form_close .=
'</table>';
1949 $form_close .=
$form->buttonsSaveCancel();
1950 $form_close .=
'<a id="acceptedrefused"> </a>';
1951 $form_close .=
'</form>';
1959 if ($action !=
'presend') {
1960 print
'<div class="tabsAction">';
1963 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
1965 if (empty($reshook)) {
1966 if ($action !=
'statut' && $action !=
'editline') {
1969 if (count($object->lines) > 0) {
1970 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=validate">'.$langs->trans(
'Validate').
'</a></div>';
1977 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=modif&token='.
newToken().
'">'.$langs->trans(
'Modify').
'</a></div>';
1982 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().(empty($conf->global->MAIN_JUMP_TAG) ?
'' :
'#reopen').
'"';
1983 print
'>'.$langs->trans(
'ReOpen').
'</a></div>';
1987 if (empty($user->socid)) {
1990 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=presend&token='.
newToken().
'&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a></div>';
1992 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
'SendMail').
'</a></div>';
1999 if ($usercancreateorder) {
2000 print
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?action=create&origin='.$object->element.
'&originid='.$object->id.
'&socid='.$object->socid.
'">'.$langs->trans(
"AddSupplierOrderShort").
'</a></div>';
2006 print
'<div class="inline-block divButAction"><a class="butAction reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=statut'.(empty($conf->global->MAIN_JUMP_TAG) ?
'' :
'#acceptedrefused').
'"';
2007 print
'>'.$langs->trans(
'SetAcceptedRefused').
'</a></div>';
2012 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=close'.(empty($conf->global->MAIN_JUMP_TAG) ?
'' :
'#close').
'"';
2013 print
'>'.$langs->trans(
'Close').
'</a></div>';
2017 if ($usercancreate) {
2018 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&socid='.$object->socid.
'&action=clone&object='.$object->element.
'">'.$langs->trans(
"ToClone").
'</a></div>';
2029 if ($action !=
'presend') {
2030 print
'<div class="fichecenter"><div class="fichehalfleft">';
2037 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".$object->id;
2038 $genallowed = $usercanread;
2039 $delallowed = $usercancreate;
2041 print $formfile->showdocuments(
'supplier_proposal', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $soc->default_lang);
2045 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'supplier_proposal'));
2046 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
2049 print
'</div><div class="fichehalfright">';
2052 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2054 $somethingshown =
$formactions->showactions($object,
'supplier_proposal', $socid, 1);
2056 print
'</div></div>';
2060 if (
GETPOST(
'modelselected')) {
2061 $action =
'presend';
2065 $modelmail =
'supplier_proposal_send';
2066 $defaulttopic =
'SendAskRef';
2067 $diroutput = $conf->supplier_proposal->dir_output;
2068 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
2069 $trackid =
'spro'.$object->id;
2071 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.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
Class to manage notifications.
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 price ask supplier.
const STATUS_NOTSIGNED
Not signed quote, canceled.
const STATUS_DRAFT
Draft status.
const STATUS_VALIDATED
Validated status.
const STATUS_SIGNED
Signed quote.
const STATUS_CLOSE
Billed or closed/processed quote.
Class to manage translations.
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.
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.
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)
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 =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
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...
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') {
div float
Buy price without taxes.
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.