40require
'../main.inc.php';
41require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmargin.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/supplier_proposal.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
50require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
52 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
53 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
66$langs->loadLangs(array(
'companies',
'supplier_proposal',
'compta',
'bills',
'propal',
'orders',
'products',
'sendings'));
68 $langs->load(
'margins');
76$action =
GETPOST(
'action',
'aZ09');
77$cancel =
GETPOST(
'cancel',
'alpha');
78$backtopage =
GETPOST(
'backtopage',
'alpha');
79$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
81$origin =
GETPOST(
'origin',
'alpha');
83$confirm =
GETPOST(
'confirm',
'alpha');
98$hookmanager->initHooks(array(
'supplier_proposalcard',
'globalcard'));
106$extrafields->fetch_name_optionals_label(
$object->table_element);
109if ($id > 0 || !empty($ref)) {
110 $ret =
$object->fetch($id, $ref);
112 $ret =
$object->fetch_thirdparty();
121$usercanread = $user->hasRight(
'supplier_proposal',
'lire');
122$usercancreate = $user->hasRight(
'supplier_proposal',
'creer');
123$usercandelete = $user->hasRight(
'supplier_proposal',
'supprimer');
126$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'supplier_proposal',
'validate_advance')));
127$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'supplier_proposal',
'send_advance'));
130$usercanclose = $user->hasRight(
'supplier_proposal',
'cloturer');
131$usercancreateorder = ($user->hasRight(
'fournisseur',
'commande',
'creer') || $user->hasRight(
'supplier_order',
'creer'));
134$permissionnote = $usercancreate;
135$permissiondellink = $usercancreate;
136$permissiontoedit = $usercancreate;
137$permissiontoadd = $usercancreate;
138$permissiontoeditextra = $permissiontoadd;
139if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
141 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
145if (!empty($user->socid)) {
146 $socid = $user->socid;
155$parameters = array(
'socid' => $socid);
156$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
161if (empty($reshook)) {
162 $backurlforlist = DOL_URL_ROOT.
'/supplier_proposal/list.php';
164 if (empty($backtopage) || ($cancel && empty($id))) {
165 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
166 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
167 $backtopage = $backurlforlist;
169 $backtopage = DOL_URL_ROOT.
'/supplier_proposal/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
174 if ($cancel && !($action ==
'updateline' && $usercancreate)) {
175 if (!empty($backtopageforcancel)) {
176 header(
"Location: ".$backtopageforcancel);
178 } elseif (!empty($backtopage)) {
179 header(
"Location: ".$backtopage);
185 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
187 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
189 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
192 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
193 if (
false && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
197 $result =
$object->createFromClone($user, $socid);
199 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
207 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
209 $result =
$object->delete($user);
211 header(
'Location: '.DOL_URL_ROOT.
'/supplier_proposal/list.php');
214 $langs->load(
"errors");
217 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
219 $result =
$object->deleteLine($lineid);
224 $langs->load(
"errors");
230 $outputlangs = $langs;
233 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') :
$object->thirdparty->default_lang);
234 $outputlangs->setDefaultLang($newlang);
240 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
243 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
245 } elseif ($action ==
'confirm_validate' && $confirm ==
'yes' && $usercanvalidate) {
247 $result =
$object->valid($user);
250 $outputlangs = $langs;
253 $newlang =
GETPOST(
'lang_id',
'aZ09');
256 $newlang =
$object->thirdparty->default_lang;
258 if (!empty($newlang)) {
260 $outputlangs->setDefaultLang($newlang);
268 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
271 $langs->load(
"errors");
272 if (count(
$object->errors) > 0) {
278 } elseif ($action ==
'setdate_livraison' && $usercancreate) {
283 } elseif ($action ==
'add' && $usercancreate) {
291 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Supplier")),
null,
'errors');
302 if (
GETPOST(
'createmode') ==
'copy' &&
GETPOSTINT(
'copie_supplier_proposal') > 0) {
305 $object->delivery_date = $date_delivery;
313 $object->model_pdf = $model_pdf;
315 $object->user_creation_id = $user->id;
321 setEventMessages($langs->trans(
"ErrorFailedToCopyProposal",
GETPOST(
'copie_supplier_proposal')),
null,
'errors');
325 $object->delivery_date = $date_delivery;
333 $object->model_pdf = $model_pdf;
335 $object->user_creation_id = $user->id;
344 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
348 $ret = $extrafields->setOptionalsFromPost(
null, $object);
356 if ($origin && $originid) {
358 $element = $subelement = $origin;
360 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
362 $subelement = $regs[2];
366 if ($element ==
'order') {
367 $element = $subelement =
'commande';
369 if ($element ==
'propal') {
370 $element =
'comm/propal';
371 $subelement =
'propal';
373 if ($element ==
'contract') {
374 $element = $subelement =
'contrat';
376 if ($element ==
'inter') {
377 $element = $subelement =
'fichinter';
379 if ($element ==
'shipping') {
380 $element = $subelement =
'expedition';
384 $object->origin_type = $origin;
385 $object->origin_id = $originid;
390 $object->linked_objects = array_merge(
$object->linked_objects,
GETPOST(
'other_linked_objects',
'array:int'));
397 $classname = ucfirst($subelement);
398 $srcobject =
new $classname($db);
399 '@phan-var-force Commande|Propal|Contrat|Fichinter|Expedition $srcobject';
401 dol_syslog(
"Try to find source object origin=".
$object->origin_type.
" originid=".
$object->origin_id.
" to add lines");
402 $result = $srcobject->fetch(
$object->origin_id);
405 $lines = $srcobject->lines;
406 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
407 $srcobject->fetch_lines();
408 $lines = $srcobject->lines;
412 $num = count($lines);
413 for ($i = 0; $i < $num; $i++) {
414 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
415 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
418 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
421 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
426 if (method_exists($lines[$i],
'fetch_optionals')) {
427 $lines[$i]->fetch_optionals();
428 $array_options = $lines[$i]->array_options;
430 $array_options = array();
435 $lines[$i]->subprice,
438 $lines[$i]->localtax1_tx,
439 $lines[$i]->localtax2_tx,
440 $lines[$i]->fk_product,
441 $lines[$i]->remise_percent,
444 $lines[$i]->info_bits,
447 $lines[$i]->special_code,
449 $lines[$i]->fk_fournprice,
453 $lines[$i]->ref_supplier,
466 if ($result > 0 && $lines[$i]->product_type == 9) {
467 $fk_parent_line = $result;
472 $parameters = array(
'objFrom' => $srcobject);
473 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action);
494 $categories =
GETPOST(
'categories',
'array');
495 $object->setCategories($categories);
502 $outputlangs = $langs;
505 $newlang =
GETPOST(
'lang_id',
'aZ09');
508 $newlang =
$object->thirdparty->default_lang;
510 if (!empty($newlang)) {
512 $outputlangs->setDefaultLang($newlang);
516 if (!empty($model)) {
518 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
525 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
538 } elseif ($action ==
'confirm_reopen' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
544 } elseif ($action ==
'close' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
550 } elseif ($action ==
'setstatut' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
553 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CloseAs")),
null,
'errors');
561 } elseif ($action ==
'settags' &&
isModEnabled(
'category') && $usercancreate) {
566 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
569 $triggersendname =
'PROPOSAL_SUPPLIER_SENTBYMAIL';
570 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
571 $trackid =
'spro'.$object->id;
572 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
575 $upload_dir = $conf->supplier_proposal->dir_output;
576 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
580 if ($action ==
'modif' && $usercancreate) {
585 $outputlangs = $langs;
588 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') :
$object->thirdparty->default_lang);
589 $outputlangs->setDefaultLang($newlang);
595 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
597 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
609 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') && $usercancreate) {
611 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
612 $vat_rate = str_replace(
'*',
'', $vat_rate);
615 foreach (
$object->lines as $line) {
616 $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->ref_fourn, $line->fk_unit, $line->multicurrency_subprice);
618 } elseif ($action ==
'addline' && $usercancreate) {
619 $langs->load(
'errors');
624 $line_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
628 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
630 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
631 if ($prod_entry_mode ==
'free') {
646 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
647 if (empty($remise_percent)) {
652 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
653 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
655 if (is_array($extralabelsline)) {
657 foreach ($extralabelsline as $key => $value) {
658 unset($_POST[
"options_".$key]);
662 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
663 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
666 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
667 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
671 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' &&
GETPOST(
'multicurrency_price_ht') ===
'') {
672 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPrice")),
null,
'errors');
675 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($line_desc)) {
676 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
679 if (!$error && ($qty >= 0)) {
683 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
687 if ($prod_entry_mode !=
'free' && empty($error)) {
691 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
696 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
697 $idprod = (int) $reg[1];
698 $res = $productsupplier->fetch($idprod);
701 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
703 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
704 if ($productsupplier->fourn_socid != $socid) {
705 $productsupplier->ref_supplier =
'';
708 $fksoctosearch =
$object->thirdparty->id;
709 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
711 } elseif (
GETPOSTINT(
'idprodfournprice') > 0) {
714 $idprod = $productsupplier->get_buyprice(
GETPOSTINT(
'idprodfournprice'), $qtytosearch);
715 $res = $productsupplier->fetch($idprod);
719 $label = $productsupplier->label;
723 $outputlangs = $langs;
725 if (
GETPOST(
'lang_id',
'aZ09')) {
726 $newlang =
GETPOST(
'lang_id',
'aZ09');
728 if (empty($newlang)) {
729 $newlang =
$object->thirdparty->default_lang;
731 if (!empty($newlang)) {
733 $outputlangs->setDefaultLang($newlang);
735 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
737 $desc = $productsupplier->description;
740 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
741 $desc = $productsupplier->desc_supplier;
752 $ref_supplier = $productsupplier->ref_supplier;
756 if (!GETPOSTISSET(
'tva_tx')) {
757 $tmpidprodfournprice =
GETPOST(
'idprodfournprice',
'alpha');
758 if (is_numeric($tmpidprodfournprice) && (
int) $tmpidprodfournprice > 0) {
759 $tmpidprodfournprice = (int) $tmpidprodfournprice;
761 $tmpidprodfournprice = 0;
767 if (empty($tva_tx)) {
773 $type = $productsupplier->type;
774 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
775 $price_base_type =
'HT';
777 $pu_devise =
price2num($price_ht_devise,
'CU');
778 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
779 $price_base_type =
'TTC';
781 $pu_devise =
price2num($price_ttc_devise,
'CU');
783 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
784 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
785 $pu = $productsupplier->fourn_pu;
788 $pu = $productsupplier->fourn_pu;
789 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
798 $fournprice = (is_numeric(
GETPOST(
'idprodfournprice',
'alpha')) ?
GETPOST(
'idprodfournprice',
'alpha') : -1);
803 ($price_base_type ==
'HT' ? $pu : 0),
808 $productsupplier->id,
811 ($price_base_type ==
'TTC' ? $pu : 0),
814 min($rank, count(
$object->lines) + 1),
822 $productsupplier->fk_unit,
838 if ($idprod == -99 || $idprod == 0) {
841 $langs->load(
"errors");
842 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")).
' '.$langs->trans(
"or").
' '.$langs->trans(
"NoPriceDefinedForThisSupplier"),
null,
'errors');
847 $langs->load(
"errors");
848 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
850 } elseif ((
GETPOST(
'price_ht') !==
'' ||
GETPOST(
'price_ttc') !==
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') && empty($error)) {
854 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
855 $tva_tx = str_replace(
'*',
'', $tva_tx);
856 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
862 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
870 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
874 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
876 $price_base_type =
'HT';
877 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
904 (
float) $pu_ht_devise
909 if (!$error && $result > 0) {
916 $outputlangs = $langs;
919 $newlang =
GETPOST(
'lang_id',
'aZ09');
922 $newlang =
$object->thirdparty->default_lang;
924 if (!empty($newlang)) {
926 $outputlangs->setDefaultLang($newlang);
934 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
940 unset($_POST[
'prod_entry_mode']);
942 unset($_POST[
'qty']);
943 unset($_POST[
'type']);
944 unset($_POST[
'remise_percent']);
946 unset($_POST[
'price_ht']);
947 unset($_POST[
'multicurrency_price_ht']);
948 unset($_POST[
'price_ttc']);
949 unset($_POST[
'fourn_ref']);
950 unset($_POST[
'tva_tx']);
951 unset($_POST[
'label']);
952 unset($_POST[
'product_ref']);
953 unset($_POST[
'product_label']);
954 unset($_POST[
'product_desc']);
955 unset($_POST[
'fournprice']);
956 unset($_POST[
'buying_price']);
957 unset($localtax1_tx);
958 unset($localtax2_tx);
959 unset($_POST[
'np_marginRate']);
960 unset($_POST[
'np_markRate']);
961 unset($_POST[
'dp_desc']);
962 unset($_POST[
'idprodfournprice']);
963 unset($_POST[
'units']);
965 unset($_POST[
'idprod']);
967 unset($_POST[
'date_starthour']);
968 unset($_POST[
'date_startmin']);
969 unset($_POST[
'date_startsec']);
970 unset($_POST[
'date_startday']);
971 unset($_POST[
'date_startmonth']);
972 unset($_POST[
'date_startyear']);
973 unset($_POST[
'date_endhour']);
974 unset($_POST[
'date_endmin']);
975 unset($_POST[
'date_endsec']);
976 unset($_POST[
'date_endday']);
977 unset($_POST[
'date_endmonth']);
978 unset($_POST[
'date_endyear']);
985 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'save') == $langs->trans(
"Save")) {
991 if (preg_match(
'/\*/', $vat_rate)) {
999 $vat_rate = str_replace(
'*',
'', $vat_rate);
1003 if (
GETPOST(
'price_ht') !=
'') {
1004 $price_base_type =
'HT';
1008 $vatratecleaned = $vat_rate;
1009 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
1010 $vatratecleaned = trim($reg[1]);
1011 $vatratecode = $reg[2];
1015 $ht = (float) $ttc / (1 + ((
float) $vatratecleaned / 100));
1016 $price_base_type =
'HT';
1026 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1027 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1029 if (is_array($extralabelsline)) {
1030 foreach ($extralabelsline as $key => $value) {
1031 unset($_POST[
"options_".$key]);
1036 $special_code =
GETPOST(
'special_code');
1043 if (!empty($productid)) {
1045 if (
getDolGlobalInt(
'SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY') == 1) {
1046 if ($productid > 0 && $productsupplier->get_buyprice(0, (
float)
price2num(
GETPOST(
'qty')), $productid,
'none',
GETPOSTINT(
'socid')) < 0) {
1047 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1052 $res = $product->fetch($productid);
1054 $type = $product->type;
1056 $price_min = $product->price_min;
1058 $price_min = $product->multiprices_min [
$object->thirdparty->price_level];
1064 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1068 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
1076 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1079 $result =
$object->updateline(
1100 (
float) $pu_ht_devise
1108 $outputlangs = $langs;
1110 $outputlangs =
new Translate(
"", $conf);
1111 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') :
$object->thirdparty->default_lang);
1112 $outputlangs->setDefaultLang($newlang);
1115 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1118 unset($_POST[
'qty']);
1119 unset($_POST[
'type']);
1120 unset($_POST[
'productid']);
1121 unset($_POST[
'remise_percent']);
1122 unset($_POST[
'price_ht']);
1123 unset($_POST[
'multicurrency_price_ht']);
1124 unset($_POST[
'price_ttc']);
1125 unset($_POST[
'tva_tx']);
1126 unset($_POST[
'product_ref']);
1127 unset($_POST[
'product_label']);
1128 unset($_POST[
'product_desc']);
1129 unset($_POST[
'fournprice']);
1130 unset($_POST[
'buying_price']);
1132 unset($_POST[
'date_starthour']);
1133 unset($_POST[
'date_startmin']);
1134 unset($_POST[
'date_startsec']);
1135 unset($_POST[
'date_startday']);
1136 unset($_POST[
'date_startmonth']);
1137 unset($_POST[
'date_startyear']);
1138 unset($_POST[
'date_endhour']);
1139 unset($_POST[
'date_endmin']);
1140 unset($_POST[
'date_endsec']);
1141 unset($_POST[
'date_endday']);
1142 unset($_POST[
'date_endmonth']);
1143 unset($_POST[
'date_endyear']);
1150 } elseif ($action ==
'updateline' && $usercancreate && $cancel) {
1151 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
1153 } elseif ($action ==
'classin' && $usercancreate) {
1156 } elseif ($action ==
'setavailability' && $usercancreate) {
1159 } elseif ($action ==
'setconditions' && $usercancreate) {
1161 $sql =
"SELECT code ";
1162 $sql .=
"FROM " . $db->prefix() .
"c_payment_term";
1163 $sql .=
" WHERE rowid = " .
GETPOSTINT(
'cond_reglement_id');
1164 $result = $db->query($sql);
1166 $obj = $db->fetch_object($result);
1167 if ($obj->code ==
'DEP30PCTDEL') {
1178 } elseif ($action ==
'setmode' && $usercancreate) {
1181 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
1183 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
1184 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
1187 } elseif ($action ==
'update_extras' && $permissiontoeditextra) {
1190 $attribute_name =
GETPOST(
'attribute',
'aZ09');
1193 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
1199 $result =
$object->updateExtraField($attribute_name,
'PROPOSAL_SUPPLIER_MODIFY');
1207 $action =
'edit_extras';
1217$title =
$object->ref.
" - ".$langs->trans(
'Card');
1218if ($action ==
'create') {
1219 $title = $langs->trans(
"SupplierProposalNew");
1221$help_url =
'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur';
1223llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplierproposal page-card');
1225$form =
new Form($db);
1229$companystatic =
new Societe($db);
1237if ($action ==
'create') {
1238 $currency_code = $conf->currency;
1240 print
load_fiche_titre($langs->trans(
"SupplierProposalNew"),
'',
'supplier_proposal');
1244 $res = $soc->fetch($socid);
1248 if (!empty($origin) && !empty($originid)) {
1249 $element = $subelement =
GETPOST(
'origin');
1251 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1252 $element = $regs[1];
1253 $subelement = $regs[2];
1257 if ($element ==
'order' || $element ==
'commande') {
1258 $element = $subelement =
'commande';
1260 if ($element ==
'propal') {
1261 $element =
'comm/propal';
1262 $subelement =
'propal';
1267 $classname = ucfirst($subelement);
1268 $objectsrc =
new $classname($db);
1269 '@phan-var-force Commande|Propal|CommandeFournisseur|SupplierProposal $objectsrc';
1271 $objectsrc->fetch($originid);
1272 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1273 $objectsrc->fetch_lines();
1275 $objectsrc->fetch_thirdparty();
1277 $projectid = (int) $objectsrc->fk_project;
1278 $soc = $objectsrc->thirdparty;
1280 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1281 $deposit_percent = (!empty($objectsrc->deposit_percent) ? $objectsrc->deposit_percent : (!empty($soc->deposit_percent) ? $soc->deposit_percent : 0));
1282 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1285 $objectsrc->fetch_optionals();
1286 $object->array_options = $objectsrc->array_options;
1289 if (!empty($objectsrc->multicurrency_code)) {
1290 $currency_code = $objectsrc->multicurrency_code;
1292 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1293 $currency_tx = $objectsrc->multicurrency_tx;
1297 $cond_reglement_id = $soc->cond_reglement_supplier_id;
1298 $deposit_percent = !empty($soc->deposit_percent) ? $soc->deposit_percent : 0;
1299 $mode_reglement_id = $soc->mode_reglement_supplier_id;
1300 if (
isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
1301 $currency_code = $soc->multicurrency_code;
1304 if (GETPOSTISSET(
'cond_reglement_id_deposit_percent')) {
1305 $deposit_percent =
GETPOSTFLOAT(
'cond_reglement_id_deposit_percent');
1310 print
'<form name="addprop" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1311 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1312 print
'<input type="hidden" name="action" value="add">';
1313 if ($origin !=
'project' && $originid) {
1314 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1315 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1317 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1322 $parameters = array();
1324 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierProposal', $parameters, $object, $action);
1325 if (empty($reshook)) {
1326 print
'<table class="border centpercent">';
1329 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Ref').
'</td><td colspan="2">'.$langs->trans(
"Draft").
'</td></tr>';
1333 print
'<td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1335 print
'<td colspan="2">';
1336 print $soc->getNomUrl(1,
'supplier');
1337 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1340 print
'<td colspan="2">';
1341 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1342 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1346 $(document).ready(function() {
1347 $("#socid").change(function() {
1348 console.log("We have changed the company - Reload page");
1350 $("input[name=action]").val("create");
1351 $("form[name=addprop]").submit();
1356 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>';
1363 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1365 $absolute_discount = $soc->getAvailableDiscounts(
null,
'', 0, 1);
1369 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1370 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1376 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td colspan="2">';
1377 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1378 print $form->getSelectConditionsPaiements(GETPOSTISSET(
'cond_reglement_id') ?
GETPOSTINT(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1, 0,
'', $deposit_percent);
1382 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td colspan="2">';
1383 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1384 $form->select_types_paiements(
GETPOST(
'mode_reglement_id') > 0 ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1389 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td colspan="2">';
1390 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1391 $form->select_comptes(
GETPOST(
'fk_account') > 0 ?
GETPOSTINT(
'fk_account') : $fk_account,
'fk_account', 0,
'', 1);
1397 print
'<tr><td>'.$langs->trans(
'SendingMethod').
'</td><td colspan="2">';
1398 print
img_picto(
'',
'dolly',
'class="pictofixedwidth"');
1399 $form->selectShippingMethod(
GETPOST(
'shipping_method_id') > 0 ?
GETPOSTINT(
'shipping_method_id') :
"",
'shipping_method_id',
'', 1);
1404 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td>';
1405 print
'<td colspan="2">';
1406 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1409 $tmpdte = time() + (7 *
getDolGlobalInt(
'DATE_LIVRAISON_WEEK_DELAY') * 24 * 60 * 60);
1410 $syear =
date(
"Y", $tmpdte);
1411 $smonth =
date(
"m", $tmpdte);
1412 $sday =
date(
"d", $tmpdte);
1413 print $form->selectDate($syear.
"-".$smonth.
"-".$sday,
'liv_', 0, 0, 0,
"addask");
1415 print $form->selectDate($datedelivery ? $datedelivery : -1,
'liv_', 0, 0, 0,
"addask", 1, 1);
1422 print
'<td>'.$langs->trans(
"DefaultModel").
'</td>';
1423 print
'<td colspan="2">';
1424 print
img_picto(
'',
'pdf',
'class="pictofixedwidth"');
1427 print $form->selectarray(
'model', $list, $preselected, 0, 0, 0,
'', 0, 0, 0,
'',
'', 1);
1432 $langs->load(
"projects");
1436 if ($origin ==
'project') {
1437 $projectid = ($originid ? $originid : 0);
1441 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
1443 $projSocFilter = $socid;
1444 } elseif ((
int) $soc->id == 0 ||
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS')) {
1445 $projSocFilter = -1;
1447 $projSocFilter = $soc->id;
1449 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects($projSocFilter, $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1450 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.((int) $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>';
1458 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
1459 print
'<td colspan="3" class="maxwidthonsmartphone">';
1460 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1461 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1466 print
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
1467 print $form->selectCategories(Categorie::TYPE_SUPPLIER_PROPOSAL,
'categories', $object);
1472 $parameters = array(
'colspan' =>
' colspan="3"',
'cols' => 3);
1473 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action);
1474 print $hookmanager->resPrint;
1475 if (empty($reshook)) {
1476 print
$object->showOptionals($extrafields,
'create', $parameters);
1481 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1483 if ($origin ==
'contrat') {
1487 $objectsrc->update_price(1,
'auto', 1);
1490 print
"\n<!-- ".$classname.
" info -->";
1492 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1493 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1494 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1495 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1496 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1498 print
'<tr><td>'.$langs->trans(
'CommRequest').
'</td><td colspan="2">'.$objectsrc->getNomUrl(1).
'</td></tr>';
1499 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td colspan="2">'.
price($objectsrc->total_ht).
'</td></tr>';
1500 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td colspan="2">'.
price($objectsrc->total_tva).
"</td></tr>";
1501 if (
$mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1502 print
'<tr><td>'.$langs->transcountry(
"AmountLT1",
$mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax1).
"</td></tr>";
1505 if (
$mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1506 print
'<tr><td>'.$langs->transcountry(
"AmountLT2",
$mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax2).
"</td></tr>";
1508 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td colspan="2">'.
price($objectsrc->total_ttc).
"</td></tr>";
1511 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1512 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
1513 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
1525 print
'<input type="hidden" name="createmode" value="empty">';
1529 print
'<br><table>';
1533 print
'<td><input type="radio" name="createmode" value="copy"></td>';
1534 print
'<td>'.$langs->trans(
"CopyAskFrom").
' </td>';
1536 $liste_ask = array();
1537 $liste_ask [0] =
'';
1539 $sql =
"SELECT p.rowid as id, p.ref, s.nom";
1540 $sql .=
" FROM ".MAIN_DB_PREFIX.
"supplier_proposal p";
1541 $sql .=
", ".MAIN_DB_PREFIX.
"societe s";
1542 $sql .=
" WHERE s.rowid = p.fk_soc";
1543 $sql .=
" AND p.entityy IN (".getEntity(
'supplier_proposal').
")";
1544 $sql .=
" AND p.fk_statut <> ".SupplierProposal::STATUS_DRAFT;
1545 $sql .=
" ORDER BY Id";
1547 $resql = $db->query($sql);
1549 $num = $db->num_rows($resql);
1552 $row = $db->fetch_row($resql);
1553 $askPriceSupplierRefAndSocName = $row[1].
" - ".$row[2];
1554 $liste_ask[$row[0]] = $askPriceSupplierRefAndSocName;
1557 print $form->selectarray(
"copie_supplier_proposal", $liste_ask, 0);
1563 print
'<tr><td class="tdtop"><input type="radio" name="createmode" value="empty" checked></td>';
1564 print
'<td valign="top" colspan="2">'.$langs->trans(
"CreateEmptyAsk").
'</td></tr>';
1574 print $form->buttonsSaveCancel(
"CreateDraft");
1580 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1583 $title = $langs->trans(
'ProductsAndServices');
1586 print
'<div class="div-table-responsive-no-min">';
1587 print
'<table class="noborder centpercent">';
1589 $objectsrc->printOriginLinesList();
1603 print
dol_get_fiche_head($head,
'comm', $langs->trans(
'CommRequest'), -1,
'supplier_proposal', 0,
'',
'', 0,
'', 1);
1608 if ($action ==
'clone') {
1609 $filter =
'(s.fournisseur:=:1)';
1611 $formquestion = array(
1619 'label' => $langs->trans(
"SelectThirdParty"),
1620 'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
1623 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneAsk',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1624 } elseif ($action ==
'delete') {
1626 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteAsk'), $langs->trans(
'ConfirmDeleteAsk',
$object->ref),
'confirm_delete',
'', 0, 1);
1627 } elseif ($action ==
'reopen') {
1629 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenAsk',
$object->ref),
'confirm_reopen',
'', 0, 1);
1630 } elseif ($action ==
'ask_deleteline') {
1632 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
1633 } elseif ($action ==
'validate') {
1638 $ref = substr(
$object->ref, 1, 4);
1639 if ($ref ==
'PROV') {
1640 $numref =
$object->getNextNumRef($soc);
1641 if (empty($numref)) {
1646 $numref = (string)
$object->ref;
1649 $text = $langs->trans(
'ConfirmValidateAsk', $numref);
1651 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1652 $notify =
new Notify($db);
1654 $text .= $notify->confirmMessage(
'PROPOSAL_SUPPLIER_VALIDATE',
$object->socid, $object);
1658 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateAsk'), $text,
'confirm_validate',
'', 0, 1);
1663 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
1664 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1665 if (empty($reshook)) {
1666 $formconfirm .= $hookmanager->resPrint;
1667 } elseif ($reshook > 0) {
1668 $formconfirm = $hookmanager->resPrint;
1676 $linkback =
'<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1679 $morehtmlref =
'<div class="refidno">';
1684 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
1686 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?socid='.
$object->thirdparty->id.
'&search_societe='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherProposals").
'</a>)';
1690 $langs->load(
"projects");
1691 $morehtmlref .=
'<br>';
1692 if ($usercancreate) {
1693 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1694 if ($action !=
'classify') {
1695 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1698 $canLinkAll = ($canLinkAll ===
'' || $canLinkAll ===
false) ? 0 : $canLinkAll;
1700 $projectSocId = ((int) $canLinkAll == 1) ? -1 : $currentSocId;
1701 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $projectSocId,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1703 if (!empty(
$object->fk_project)) {
1705 $proj->fetch(
$object->fk_project);
1706 $morehtmlref .= $proj->getNomUrl(1);
1708 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1713 $morehtmlref .=
'</div>';
1716 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
1719 $parameters = array();
1721 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierProposal', $parameters, $object, $action);
1722 if (empty($reshook)) {
1723 print
'<div class="fichecenter">';
1724 print
'<div class="fichehalfleft">';
1725 print
'<div class="underbanner clearboth"></div>';
1727 print
'<table class="border tableforfield centpercent">';
1731 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
1732 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
1734 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
1735 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
1738 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
1740 $absolute_discount = $soc->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
1741 $absolute_creditnote = $soc->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
1742 $absolute_discount =
price2num($absolute_discount,
'MT');
1743 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
1747 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
1748 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1753 print
'<tr><td class="titlefield">';
1754 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1755 print $langs->trans(
'PaymentConditionsShort');
1758 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>';
1760 print
'</tr></table>';
1761 print
'</td><td class="valuefield">';
1762 if ($action ==
'editconditions') {
1763 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id', 1,
'', 1,
$object->deposit_percent);
1765 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->cond_reglement_id,
'none', 1,
'', 1,
$object->deposit_percent);
1772 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1773 print $langs->trans(
'DeliveryDate');
1776 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>';
1778 print
'</tr></table>';
1779 print
'</td><td class="valuefield">';
1780 if ($action ==
'editdate_livraison') {
1781 print
'<form name="editdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post" class="formconsumeproduce">';
1782 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1783 print
'<input type="hidden" name="action" value="setdate_livraison">';
1784 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1785 print $form->selectDate(
$object->delivery_date,
'liv_', 0, 0, 0,
"editdate_livraison");
1786 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1797 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1798 print $langs->trans(
'PaymentMode');
1801 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>';
1803 print
'</tr></table>';
1804 print
'</td><td class="valuefield">';
1805 if ($action ==
'editmode') {
1806 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
1808 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'none');
1828 print
'<table width="100%" class="nobordernopadding"><tr><td>';
1829 print $langs->trans(
'BankAccount');
1831 if ($action !=
'editbankaccount' && $usercancreate) {
1832 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>';
1834 print
'</tr></table>';
1835 print
'</td><td class="valuefield">';
1836 if ($action ==
'editbankaccount') {
1837 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
1839 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'none');
1847 print
'<table class="nobordernopadding centpercent"><tr><td>';
1848 print $langs->trans(
"Categories");
1849 print
'<td><td class="right">';
1850 if ($usercancreate) {
1851 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/supplier_proposal/card.php?id='.
$object->id.
'&action=edittags&token='.
newToken().
'">'.
img_edit().
'</a>';
1855 print
'</td></tr></table>';
1858 if ($action ==
'edittags') {
1859 print
'<form method="POST" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
1860 print
'<input type="hidden" name="action" value="settags">';
1861 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1862 print $form->selectCategories(Categorie::TYPE_SUPPLIER_PROPOSAL,
'categories', $object);
1863 print
'<input type="submit" class="button valignmiddle smallpaddingimp" value="'.$langs->trans(
"Modify").
'">';
1866 print $form->showCategories(
$object->id, Categorie::TYPE_SUPPLIER_PROPOSAL, 1);
1871 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1876 print
'<div class="fichehalfright">';
1877 print
'<div class="underbanner clearboth"></div>';
1879 print
'<table class="border tableforfield centpercent">';
1881 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
1885 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
1886 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1889 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1895 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
1896 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1899 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1904 if (
$mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
1906 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
1907 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1909 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1913 if (
$mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
1915 print
'<td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
1916 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1918 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1926 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
1927 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1930 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1944 print
'<div class="clearboth"></div><br>';
1947 $blocname =
'contacts';
1948 $title = $langs->trans(
'ContactsAddresses');
1949 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1953 $blocname =
'notes';
1954 $title = $langs->trans(
'Notes');
1955 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1963 $result =
$object->getLinesArray();
1965 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'#add' :
'').
'" method="POST">
1966 <input type="hidden" name="token" value="' .
newToken().
'">
1967 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
1968 <input type="hidden" name="mode" value="">
1969 <input type="hidden" name="id" value="' .
$object->id.
'">
1974 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1977 print
'<div class="div-table-responsive-no-min">';
1978 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1981 global $forceall, $senderissupplier, $inputalsopricewithtax;
1984 $inputalsopricewithtax = 1;
1985 $senderissupplier = 2;
1986 if (
getDolGlobalInt(
'SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY')) {
1987 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY');
1991 $object->printObjectLines($action, $soc,
$mysoc, $lineid, $dateSelector);
1996 if ($action !=
'editline') {
1999 $parameters = array(
'dateSelector' => $dateSelector);
2000 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
2004 if (empty($reshook)) {
2017 if ($action ==
'statut') {
2019 $form_close =
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="POST" id="formacceptrefuse" class="formconsumeproduce paddingbottom paddingleft paddingright">';
2020 $form_close .=
'<input type="hidden" name="token" value="'.newToken().
'">';
2021 $form_close .=
'<input type="hidden" name="action" value="setstatut">';
2024 $form_close .=
'<p class="notice">'.$langs->trans(
'SupplierProposalRefFournNotice').
'</p>';
2026 $form_close .=
'<table class="border centpercent marginleftonly marginrightonly">';
2027 $form_close .=
'<tr><td>'.$langs->trans(
"CloseAs").
'</td><td class="left">';
2028 $form_close .=
'<select id="statut" name="statut" class="flat">';
2029 $form_close .=
'<option value="0"> </option>';
2030 $form_close .=
'<option value="2">'.$langs->trans(
'SupplierProposalStatusSigned').
'</option>';
2031 $form_close .=
'<option value="3">'.$langs->trans(
'SupplierProposalStatusNotSigned').
'</option>';
2032 $form_close .=
'</select>';
2033 $form_close .=
'</td></tr>';
2034 $form_close .=
'<tr><td class="left">'.$langs->trans(
'Note').
'</td><td class="left"><textarea cols="70" rows="'.ROWS_3.
'" wrap="soft" name="note">';
2035 $form_close .=
$object->note_private;
2036 $form_close .=
'</textarea></td></tr>';
2037 $form_close .=
'</table>';
2038 $form_close .= $form->buttonsSaveCancel();
2039 $form_close .=
'<a id="acceptedrefused"> </a>';
2040 $form_close .=
'</form>';
2048 if ($action !=
'presend') {
2049 print
'<div class="tabsAction">';
2051 $parameters = array();
2052 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
2054 if (empty($reshook)) {
2055 if ($action !=
'statut' && $action !=
'editline') {
2058 if (count(
$object->lines) > 0) {
2059 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=validate&token='.
newToken().
'">'.$langs->trans(
'Validate').
'</a></div>';
2066 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>';
2071 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().(!
getDolGlobalString(
'MAIN_JUMP_TAG') ?
'' :
'#reopen').
'"';
2072 print
'>'.$langs->trans(
'ReOpen').
'</a></div>';
2076 if (empty($user->socid)) {
2079 print
dolGetButtonAction(
'', $langs->trans(
'SendMail'),
'email',
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id,
'action' =>
'presend',
'mode' =>
'init'],
true).
'#formmailbeforetitle',
'');
2088 if ($usercancreateorder) {
2089 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.
'&token='.
newToken().
'">'.$langs->trans(
"AddSupplierOrderShort").
'</a></div>';
2095 print
'<div class="inline-block divButAction"><a class="butAction reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&token='.
newToken().
'&action=statut'.(!
getDolGlobalString(
'MAIN_JUMP_TAG') ?
'' :
'#acceptedrefused').
'"';
2096 print
'>'.$langs->trans(
'SetAcceptedRefused').
'</a></div>';
2101 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&token='.
newToken().
'&action=close'.(!
getDolGlobalString(
'MAIN_JUMP_TAG') ?
'' :
'#close').
'"';
2102 print
'>'.$langs->trans(
'Close').
'</a></div>';
2106 if ($usercancreate) {
2107 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&socid='.
$object->socid.
'&action=clone&object='.
$object->element.
'&token='.
newToken().
'">'.$langs->trans(
"ToClone").
'</a></div>';
2118 if ($action !=
'presend') {
2119 print
'<div class="fichecenter"><div class="fichehalfleft">';
2126 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2127 $genallowed = $usercanread;
2128 $delallowed = $usercancreate;
2130 print $formfile->showdocuments(
'supplier_proposal', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'',
'',
'', $soc->default_lang);
2134 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'supplier_proposal'), 1);
2135 $linktoelem = $tmparray[
'linktoelem'];
2136 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2137 print $htmltoenteralink;
2139 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
2143 print
'</div><div class="fichehalfright">';
2146 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2148 $somethingshown = $formactions->showactions($object,
'supplier_proposal', $socid, 1,
'', $MAXEVENT);
2150 print
'</div></div>';
2154 if (
GETPOST(
'modelselected')) {
2155 $action =
'presend';
2159 $modelmail =
'supplier_proposal_send';
2160 $defaulttopic =
'SendAskRef';
2161 $diroutput = $conf->supplier_proposal->dir_output;
2162 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
2163 $trackid =
'spro'.$object->id;
2165 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage the table of subscription to 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.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_now($mode='gmt')
Return date for now.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dolBuildUrl($url, $params=[], $addtoken=false)
Return path of url.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0, $allowdash=0)
Clean a string to use it as a file name.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
GETPOSTISARRAY($paramname, $method=0)
Return true if the parameter $paramname is submit from a POST OR GET as an array.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOSTFLOAT($paramname, $rounding='', $option=2)
Return the value of a $_GET or $_POST supervariable, converted into float.
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)
Function that returns whether VAT must be recoverable collected VAT (e.g.: VAT NPR in France)
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify 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...
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular VAT rate, when selling a product with vat $vatrate,...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
if(getDolGlobalString( 'TAKEPOS_SHOW_CUSTOMER')) print $langs trans('Date')." left Label right Qty right Price right TotalHT right TotalTTC right right right right right right right right right centpercent right TotalHT right n right VAT right n right TotalVAT right n No sujeto a RE IRPF right TotalLT1 right n right TotalLT2 right n right TotalTTC right n takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency right TotalTTC takeposcustomercurrency right takeposcustomercurrency n right PaymentTypeShortLIQ right SELECT p pos_change as p datep as date
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.
supplier_proposal_prepare_head($object)
Prepare array with list of tabs.