40require
'../main.inc.php';
41require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmargin.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/lib/supplier_proposal.lib.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
50if (isModEnabled(
'project')) {
51 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
52 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
56$langs->loadLangs(array(
'companies',
'supplier_proposal',
'compta',
'bills',
'propal',
'orders',
'products',
'deliveries',
'sendings'));
57if (isModEnabled(
'margin')) {
58 $langs->load(
'margins');
66$action =
GETPOST(
'action',
'aZ09');
67$cancel =
GETPOST(
'cancel',
'alpha');
68$backtopage =
GETPOST(
'backtopage',
'alpha');
69$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
71$origin =
GETPOST(
'origin',
'alpha');
73$confirm =
GETPOST(
'confirm',
'alpha');
88$hookmanager->initHooks(array(
'supplier_proposalcard',
'globalcard'));
96$extrafields->fetch_name_optionals_label(
$object->table_element);
99if ($id > 0 || !empty($ref)) {
100 $ret =
$object->fetch($id, $ref);
102 $ret =
$object->fetch_thirdparty();
111$usercanread = $user->hasRight(
'supplier_proposal',
'lire');
112$usercancreate = $user->hasRight(
'supplier_proposal',
'creer');
113$usercandelete = $user->hasRight(
'supplier_proposal',
'supprimer');
116$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'supplier_proposal',
'validate_advance')));
117$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
'supplier_proposal',
'send_advance'));
120$usercanclose = $user->hasRight(
'supplier_proposal',
'cloturer');
121$usercancreateorder = ($user->hasRight(
'fournisseur',
'commande',
'creer') || $user->hasRight(
'supplier_order',
'creer'));
124$permissionnote = $usercancreate;
125$permissiondellink = $usercancreate;
126$permissiontoedit = $usercancreate;
127$permissiontoadd = $usercancreate;
130if (!empty($user->socid)) {
131 $socid = $user->socid;
140$parameters = array(
'socid' => $socid);
141$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
146if (empty($reshook)) {
147 $backurlforlist = DOL_URL_ROOT.
'/supplier_proposal/list.php';
149 if (empty($backtopage) || ($cancel && empty($id))) {
150 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
151 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
152 $backtopage = $backurlforlist;
154 $backtopage = DOL_URL_ROOT.
'/supplier_proposal/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
160 if (!empty($backtopageforcancel)) {
161 header(
"Location: ".$backtopageforcancel);
163 } elseif (!empty($backtopage)) {
164 header(
"Location: ".$backtopage);
170 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
172 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
174 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
177 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
178 if (
false && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
182 $result =
$object->createFromClone($user, $socid);
184 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
192 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
194 $result =
$object->delete($user);
196 header(
'Location: '.DOL_URL_ROOT.
'/supplier_proposal/list.php');
199 $langs->load(
"errors");
202 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
204 $result =
$object->deleteLine($lineid);
209 $langs->load(
"errors");
215 $outputlangs = $langs;
218 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') :
$object->thirdparty->default_lang);
219 $outputlangs->setDefaultLang($newlang);
225 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
228 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
230 } elseif ($action ==
'confirm_validate' && $confirm ==
'yes' && $usercanvalidate) {
232 $result =
$object->valid($user);
235 $outputlangs = $langs;
238 $newlang =
GETPOST(
'lang_id',
'aZ09');
241 $newlang =
$object->thirdparty->default_lang;
243 if (!empty($newlang)) {
245 $outputlangs->setDefaultLang($newlang);
253 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
256 $langs->load(
"errors");
257 if (count(
$object->errors) > 0) {
263 } elseif ($action ==
'setdate_livraison' && $usercancreate) {
268 } elseif ($action ==
'add' && $usercancreate) {
276 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Supplier")),
null,
'errors');
285 if (
GETPOST(
'createmode') ==
'copy' &&
GETPOST(
'copie_supplier_proposal')) {
288 $object->delivery_date = $date_delivery;
297 $object->user_creation_id = $user->id;
303 setEventMessages($langs->trans(
"ErrorFailedToCopyProposal",
GETPOST(
'copie_supplier_proposal')),
null,
'errors');
307 $object->delivery_date = $date_delivery;
316 $object->user_creation_id = $user->id;
324 if (isModEnabled(
"multicurrency")) {
325 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
329 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
337 if ($origin && $originid) {
339 $element = $subelement = $origin;
340 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
342 $subelement = $regs[2];
346 if ($element ==
'order') {
347 $element = $subelement =
'commande';
349 if ($element ==
'propal') {
350 $element =
'comm/propal';
351 $subelement =
'propal';
353 if ($element ==
'contract') {
354 $element = $subelement =
'contrat';
356 if ($element ==
'inter') {
357 $element = $subelement =
'fichinter';
359 if ($element ==
'shipping') {
360 $element = $subelement =
'expedition';
364 $object->origin_id = $originid;
369 $object->linked_objects = array_merge(
$object->linked_objects,
GETPOST(
'other_linked_objects',
'array:int'));
376 $classname = ucfirst($subelement);
377 $srcobject =
new $classname($db);
378 '@phan-var-force Commande|Propal|Contrat|Fichinter|Expedition $srcobject';
381 $result = $srcobject->fetch(
$object->origin_id);
384 $lines = $srcobject->lines;
385 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
386 $srcobject->fetch_lines();
387 $lines = $srcobject->lines;
391 $num = count($lines);
392 for ($i = 0; $i < $num; $i++) {
393 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
394 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc :
'');
397 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
400 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
405 if (method_exists($lines[$i],
'fetch_optionals')) {
406 $lines[$i]->fetch_optionals();
407 $array_options = $lines[$i]->array_options;
409 $array_options = array();
414 $lines[$i]->subprice,
417 $lines[$i]->localtax1_tx,
418 $lines[$i]->localtax2_tx,
419 $lines[$i]->fk_product,
420 $lines[$i]->remise_percent,
423 $lines[$i]->info_bits,
426 $lines[$i]->special_code,
428 $lines[$i]->fk_fournprice,
432 $lines[$i]->ref_supplier,
445 if ($result > 0 && $lines[$i]->product_type == 9) {
446 $fk_parent_line = $result;
451 $parameters = array(
'objFrom' => $srcobject);
452 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters,
$object, $action);
477 $outputlangs = $langs;
480 $newlang =
GETPOST(
'lang_id',
'aZ09');
483 $newlang =
$object->thirdparty->default_lang;
485 if (!empty($newlang)) {
487 $outputlangs->setDefaultLang($newlang);
492 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
498 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
511 } elseif ($action ==
'confirm_reopen' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
517 } elseif ($action ==
'close' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
523 } elseif ($action ==
'setstatut' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
526 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CloseAs")),
null,
'errors');
537 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
540 $triggersendname =
'PROPOSAL_SUPPLIER_SENTBYMAIL';
541 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
542 $trackid =
'spro'.$object->id;
543 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
546 $upload_dir = $conf->supplier_proposal->dir_output;
547 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
551 if ($action ==
'modif' && $usercancreate) {
556 $outputlangs = $langs;
559 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') :
$object->thirdparty->default_lang);
560 $outputlangs->setDefaultLang($newlang);
566 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
568 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
580 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') && $usercancreate) {
582 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
583 $vat_rate = str_replace(
'*',
'', $vat_rate);
586 foreach (
$object->lines as $line) {
587 $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);
589 } elseif ($action ==
'addline' && $usercancreate) {
590 $langs->load(
'errors');
595 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
599 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
601 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
602 if ($prod_entry_mode ==
'free') {
617 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
618 if (empty($remise_percent)) {
623 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
624 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
626 if (is_array($extralabelsline)) {
628 foreach ($extralabelsline as $key => $value) {
629 unset($_POST[
"options_".$key]);
633 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
634 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
637 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
638 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
642 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' &&
GETPOST(
'multicurrency_price_ht') ===
'') {
643 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPrice")),
null,
'errors');
646 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
647 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
650 if (!$error && ($qty >= 0)) {
654 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
658 if ($prod_entry_mode !=
'free' && empty($error)) {
662 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
667 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
669 $res = $productsupplier->fetch($idprod);
672 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
674 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
675 if ($productsupplier->fourn_socid != $socid) {
676 $productsupplier->ref_supplier =
'';
679 $fksoctosearch =
$object->thirdparty->id;
680 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
682 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
685 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
686 $res = $productsupplier->fetch($idprod);
690 $label = $productsupplier->label;
694 $outputlangs = $langs;
696 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
697 $newlang =
GETPOST(
'lang_id',
'aZ09');
699 if (empty($newlang)) {
700 $newlang =
$object->thirdparty->default_lang;
702 if (!empty($newlang)) {
704 $outputlangs->setDefaultLang($newlang);
706 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
708 $desc = $productsupplier->description;
711 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
712 $desc = $productsupplier->desc_supplier;
716 if (trim($product_desc) == trim($desc) &&
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
721 $desc = $product_desc;
723 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
727 $ref_supplier = $productsupplier->ref_supplier;
731 if (!GETPOSTISSET(
'tva_tx')) {
732 $tmpidprodfournprice =
GETPOST(
'idprodfournprice',
'alpha');
733 if (is_numeric($tmpidprodfournprice) && (
int) $tmpidprodfournprice > 0) {
734 $tmpidprodfournprice = (int) $tmpidprodfournprice;
736 $tmpidprodfournprice = 0;
742 if (empty($tva_tx)) {
748 $type = $productsupplier->type;
749 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
750 $price_base_type =
'HT';
752 $pu_devise =
price2num($price_ht_devise,
'CU');
753 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
754 $price_base_type =
'TTC';
756 $pu_devise =
price2num($price_ttc_devise,
'CU');
758 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
759 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
760 $pu = $productsupplier->fourn_pu;
763 $pu = $productsupplier->fourn_pu;
764 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
773 $fournprice = (is_numeric(
GETPOST(
'idprodfournprice',
'alpha')) ?
GETPOST(
'idprodfournprice',
'alpha') : -1);
778 ($price_base_type ==
'HT' ? $pu : 0),
783 $productsupplier->id,
786 ($price_base_type ==
'TTC' ? $pu : 0),
789 min($rank, count(
$object->lines) + 1),
797 $productsupplier->fk_unit,
813 if ($idprod == -99 || $idprod == 0) {
816 $langs->load(
"errors");
817 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")).
' '.$langs->trans(
"or").
' '.$langs->trans(
"NoPriceDefinedForThisSupplier"),
null,
'errors');
822 $langs->load(
"errors");
823 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
825 } elseif ((
GETPOST(
'price_ht') !==
'' ||
GETPOST(
'price_ttc') !==
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') && empty($error)) {
829 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
830 $tva_tx = str_replace(
'*',
'', $tva_tx);
831 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
832 $desc = $product_desc;
835 $fk_unit =
GETPOST(
'units',
'alpha');
837 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
845 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
849 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
851 $price_base_type =
'HT';
852 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
884 if (!$error && $result > 0) {
891 $outputlangs = $langs;
894 $newlang =
GETPOST(
'lang_id',
'aZ09');
897 $newlang =
$object->thirdparty->default_lang;
899 if (!empty($newlang)) {
901 $outputlangs->setDefaultLang($newlang);
909 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
915 unset($_POST[
'prod_entry_mode']);
917 unset($_POST[
'qty']);
918 unset($_POST[
'type']);
919 unset($_POST[
'remise_percent']);
921 unset($_POST[
'price_ht']);
922 unset($_POST[
'multicurrency_price_ht']);
923 unset($_POST[
'price_ttc']);
924 unset($_POST[
'fourn_ref']);
925 unset($_POST[
'tva_tx']);
926 unset($_POST[
'label']);
927 unset($_POST[
'product_ref']);
928 unset($_POST[
'product_label']);
929 unset($_POST[
'product_desc']);
930 unset($_POST[
'fournprice']);
931 unset($_POST[
'buying_price']);
932 unset($localtax1_tx);
933 unset($localtax2_tx);
934 unset($_POST[
'np_marginRate']);
935 unset($_POST[
'np_markRate']);
936 unset($_POST[
'dp_desc']);
937 unset($_POST[
'idprodfournprice']);
938 unset($_POST[
'units']);
940 unset($_POST[
'idprod']);
942 unset($_POST[
'date_starthour']);
943 unset($_POST[
'date_startmin']);
944 unset($_POST[
'date_startsec']);
945 unset($_POST[
'date_startday']);
946 unset($_POST[
'date_startmonth']);
947 unset($_POST[
'date_startyear']);
948 unset($_POST[
'date_endhour']);
949 unset($_POST[
'date_endmin']);
950 unset($_POST[
'date_endsec']);
951 unset($_POST[
'date_endday']);
952 unset($_POST[
'date_endmonth']);
953 unset($_POST[
'date_endyear']);
960 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'save') == $langs->trans(
"Save")) {
966 if (preg_match(
'/\*/', $vat_rate)) {
974 $vat_rate = str_replace(
'*',
'', $vat_rate);
978 if (
GETPOST(
'price_ht') !=
'') {
979 $price_base_type =
'HT';
983 $vatratecleaned = $vat_rate;
984 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
985 $vatratecleaned = trim($reg[1]);
986 $vatratecode = $reg[2];
990 $ht = (float) $ttc / (1 + ((
float) $vatratecleaned / 100));
991 $price_base_type =
'HT';
997 $fournprice = (
GETPOST(
'fournprice') ?
GETPOST(
'fournprice') :
'');
998 $buyingprice = (
GETPOST(
'buying_price') !=
'' ?
GETPOST(
'buying_price') :
'');
1001 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1002 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1004 if (is_array($extralabelsline)) {
1005 foreach ($extralabelsline as $key => $value) {
1006 unset($_POST[
"options_".$key]);
1011 $special_code =
GETPOST(
'special_code');
1018 if (!empty($productid)) {
1021 if ($productid > 0 && $productsupplier->get_buyprice(0,
price2num(
GETPOST(
'qty')), $productid,
'none',
GETPOSTINT(
'socid')) < 0) {
1022 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1027 $res = $product->fetch($productid);
1029 $type = $product->type;
1031 $price_min = $product->price_min;
1033 $price_min = $product->multiprices_min [
$object->thirdparty->price_level];
1039 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1043 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
1051 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1054 $result =
$object->updateline(
1083 $outputlangs = $langs;
1085 $outputlangs =
new Translate(
"", $conf);
1086 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') :
$object->thirdparty->default_lang);
1087 $outputlangs->setDefaultLang($newlang);
1090 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1093 unset($_POST[
'qty']);
1094 unset($_POST[
'type']);
1095 unset($_POST[
'productid']);
1096 unset($_POST[
'remise_percent']);
1097 unset($_POST[
'price_ht']);
1098 unset($_POST[
'multicurrency_price_ht']);
1099 unset($_POST[
'price_ttc']);
1100 unset($_POST[
'tva_tx']);
1101 unset($_POST[
'product_ref']);
1102 unset($_POST[
'product_label']);
1103 unset($_POST[
'product_desc']);
1104 unset($_POST[
'fournprice']);
1105 unset($_POST[
'buying_price']);
1107 unset($_POST[
'date_starthour']);
1108 unset($_POST[
'date_startmin']);
1109 unset($_POST[
'date_startsec']);
1110 unset($_POST[
'date_startday']);
1111 unset($_POST[
'date_startmonth']);
1112 unset($_POST[
'date_startyear']);
1113 unset($_POST[
'date_endhour']);
1114 unset($_POST[
'date_endmin']);
1115 unset($_POST[
'date_endsec']);
1116 unset($_POST[
'date_endday']);
1117 unset($_POST[
'date_endmonth']);
1118 unset($_POST[
'date_endyear']);
1125 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
1126 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
1128 } elseif ($action ==
'classin' && $usercancreate) {
1131 } elseif ($action ==
'setavailability' && $usercancreate) {
1134 } elseif ($action ==
'setconditions' && $usercancreate) {
1141 } elseif ($action ==
'setmode' && $usercancreate) {
1144 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
1146 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
1147 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
1150 } elseif ($action ==
'update_extras' && $usercancreate) {
1152 $attribute_name =
GETPOST(
'attribute',
'restricthtml');
1155 $ret = $extrafields->setOptionalsFromPost(
null,
$object, $attribute_name);
1161 $result =
$object->updateExtraField($attribute_name,
'PROPOSAL_SUPPLIER_MODIFY');
1169 $action =
'edit_extras';
1179$title =
$object->ref.
" - ".$langs->trans(
'Card');
1180if ($action ==
'create') {
1181 $title = $langs->trans(
"SupplierProposalNew");
1183$help_url =
'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur';
1185llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-supplierproposal page-card');
1187$form =
new Form($db);
1191$companystatic =
new Societe($db);
1192if (isModEnabled(
'project')) {
1199if ($action ==
'create') {
1200 $currency_code = $conf->currency;
1202 print
load_fiche_titre($langs->trans(
"SupplierProposalNew"),
'',
'supplier_proposal');
1206 $res = $soc->fetch($socid);
1210 if (!empty($origin) && !empty($originid)) {
1211 $element = $subelement =
GETPOST(
'origin');
1213 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1214 $element = $regs[1];
1215 $subelement = $regs[2];
1219 if ($element ==
'order' || $element ==
'commande') {
1220 $element = $subelement =
'commande';
1222 if ($element ==
'propal') {
1223 $element =
'comm/propal';
1224 $subelement =
'propal';
1229 $classname = ucfirst($subelement);
1230 $objectsrc =
new $classname($db);
1231 '@phan-var-force Commande|Propal|CommandeFournisseur|SupplierProposal $objectsrc';
1232 $objectsrc->fetch($originid);
1233 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1234 $objectsrc->fetch_lines();
1236 $objectsrc->fetch_thirdparty();
1238 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1239 $soc = $objectsrc->thirdparty;
1241 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1242 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1245 $objectsrc->fetch_optionals();
1246 $object->array_options = $objectsrc->array_options;
1248 if (isModEnabled(
"multicurrency")) {
1249 if (!empty($objectsrc->multicurrency_code)) {
1250 $currency_code = $objectsrc->multicurrency_code;
1252 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
1253 $currency_tx = $objectsrc->multicurrency_tx;
1257 $cond_reglement_id = $soc->cond_reglement_supplier_id;
1258 $mode_reglement_id = $soc->mode_reglement_supplier_id;
1259 if (isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
1260 $currency_code = $soc->multicurrency_code;
1266 print
'<form name="addprop" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1267 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1268 print
'<input type="hidden" name="action" value="add">';
1269 if ($origin !=
'project' && $originid) {
1270 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1271 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1273 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1278 $parameters = array();
1280 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierProposal', $parameters,
$object, $action);
1281 if (empty($reshook)) {
1282 print
'<table class="border centpercent">';
1285 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Ref').
'</td><td colspan="2">'.$langs->trans(
"Draft").
'</td></tr>';
1289 print
'<td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1291 print
'<td colspan="2">';
1292 print $soc->getNomUrl(1,
'supplier');
1293 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1296 print
'<td colspan="2">';
1297 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
1298 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company((empty($socid) ?
'' : $socid),
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 maxwidth500 widthcentpercentminusxx');
1302 $(document).ready(function() {
1303 $("#socid").change(function() {
1304 console.log("We have changed the company - Reload page");
1306 $("input[name=action]").val("create");
1307 $("form[name=addprop]").submit();
1312 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>';
1319 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1321 $absolute_discount = $soc->getAvailableDiscounts(
null,
'', 0, 1);
1325 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1326 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1332 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td colspan="2">';
1333 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1334 print $form->getSelectConditionsPaiements(
GETPOST(
'cond_reglement_id') > 0 ?
GETPOST(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1);
1338 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td colspan="2">';
1339 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1340 $form->select_types_paiements(
GETPOST(
'mode_reglement_id') > 0 ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1344 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') && isModEnabled(
"bank")) {
1345 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td colspan="2">';
1346 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
1347 $form->select_comptes(
GETPOST(
'fk_account') > 0 ?
GETPOSTINT(
'fk_account') : $fk_account,
'fk_account', 0,
'', 1);
1352 if (isModEnabled(
"shipping")) {
1353 print
'<tr><td>'.$langs->trans(
'SendingMethod').
'</td><td colspan="2">';
1354 print
img_picto(
'',
'dolly',
'class="pictofixedwidth"');
1355 $form->selectShippingMethod(
GETPOST(
'shipping_method_id') > 0 ?
GETPOSTINT(
'shipping_method_id') :
"",
'shipping_method_id',
'', 1);
1360 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td>';
1361 print
'<td colspan="2">';
1362 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
1365 $tmpdte = time() + (7 *
getDolGlobalInt(
'DATE_LIVRAISON_WEEK_DELAY') * 24 * 60 * 60);
1366 $syear = date(
"Y", $tmpdte);
1367 $smonth = date(
"m", $tmpdte);
1368 $sday = date(
"d", $tmpdte);
1369 print $form->selectDate($syear.
"-".$smonth.
"-".$sday,
'liv_', 0, 0, 0,
"addask");
1371 print $form->selectDate($datedelivery ? $datedelivery : -1,
'liv_', 0, 0, 0,
"addask", 1, 1);
1378 print
'<td>'.$langs->trans(
"DefaultModel").
'</td>';
1379 print
'<td colspan="2">';
1380 print
img_picto(
'',
'pdf',
'class="pictofixedwidth"');
1382 $preselected = (
getDolGlobalString(
'SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT') ? $conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT : $conf->global->SUPPLIER_PROPOSAL_ADDON_PDF);
1383 print $form->selectarray(
'model', $list, $preselected, 0, 0, 0,
'', 0, 0, 0,
'',
'', 1);
1387 if (isModEnabled(
'project')) {
1388 $langs->load(
"projects");
1392 if ($origin ==
'project') {
1393 $projectid = ($originid ? $originid : 0);
1397 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
1398 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1399 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>';
1406 if (isModEnabled(
"multicurrency")) {
1408 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0).
'</td>';
1409 print
'<td colspan="3" class="maxwidthonsmartphone">';
1410 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
1411 print $form->selectMultiCurrency($currency_code,
'multicurrency_code');
1416 $parameters = array(
'colspan' =>
' colspan="3"',
'cols' => 3);
1417 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
1418 print $hookmanager->resPrint;
1419 if (empty($reshook)) {
1420 print
$object->showOptionals($extrafields,
'create', $parameters);
1425 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1427 if ($origin ==
'contrat') {
1431 $objectsrc->update_price(1,
'auto', 1);
1434 print
"\n<!-- ".$classname.
" info -->";
1436 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1437 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1438 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1439 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1440 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1442 print
'<tr><td>'.$langs->trans(
'CommRequest').
'</td><td colspan="2">'.$objectsrc->getNomUrl(1).
'</td></tr>';
1443 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td colspan="2">'.
price($objectsrc->total_ht).
'</td></tr>';
1444 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td colspan="2">'.
price($objectsrc->total_tva).
"</td></tr>";
1445 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1446 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax1).
"</td></tr>";
1449 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1450 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax2).
"</td></tr>";
1452 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td colspan="2">'.
price($objectsrc->total_ttc).
"</td></tr>";
1454 if (isModEnabled(
"multicurrency")) {
1455 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1456 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
1457 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
1469 print
'<input type="hidden" name="createmode" value="empty">';
1473 print
'<br><table>';
1477 print
'<td><input type="radio" name="createmode" value="copy"></td>';
1478 print
'<td>'.$langs->trans(
"CopyAskFrom").
' </td>';
1480 $liste_ask = array();
1481 $liste_ask [0] =
'';
1483 $sql =
"SELECT p.rowid as id, p.ref, s.nom";
1484 $sql .=
" FROM ".MAIN_DB_PREFIX.
"supplier_proposal p";
1485 $sql .=
", ".MAIN_DB_PREFIX.
"societe s";
1486 $sql .=
" WHERE s.rowid = p.fk_soc";
1487 $sql .=
" AND p.entityy IN (".getEntity(
'supplier_proposal').
")";
1488 $sql .=
" AND p.fk_statut <> ".SupplierProposal::STATUS_DRAFT;
1489 $sql .=
" ORDER BY Id";
1491 $resql = $db->query($sql);
1493 $num = $db->num_rows($resql);
1496 $row = $db->fetch_row($resql);
1497 $askPriceSupplierRefAndSocName = $row[1].
" - ".$row[2];
1498 $liste_ask[$row[0]] = $askPriceSupplierRefAndSocName;
1501 print $form->selectarray(
"copie_supplier_proposal", $liste_ask, 0);
1507 print
'<tr><td class="tdtop"><input type="radio" name="createmode" value="empty" checked></td>';
1508 print
'<td valign="top" colspan="2">'.$langs->trans(
"CreateEmptyAsk").
'</td></tr>';
1518 print $form->buttonsSaveCancel(
"CreateDraft");
1524 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1527 $title = $langs->trans(
'ProductsAndServices');
1530 print
'<div class="div-table-responsive-no-min">';
1531 print
'<table class="noborder centpercent">';
1533 $objectsrc->printOriginLinesList();
1547 print
dol_get_fiche_head($head,
'comm', $langs->trans(
'CommRequest'), -1,
'supplier_proposal');
1552 if ($action ==
'clone') {
1553 $filter =
'(s.fournisseur:=:1)';
1555 $formquestion = array(
1563 'label' => $langs->trans(
"SelectThirdParty"),
1564 'value' => $form->select_company(
GETPOSTINT(
'socid'),
'socid', $filter))
1567 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneAsk',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1568 } elseif ($action ==
'delete') {
1570 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteAsk'), $langs->trans(
'ConfirmDeleteAsk',
$object->ref),
'confirm_delete',
'', 0, 1);
1571 } elseif ($action ==
'reopen') {
1573 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenAsk',
$object->ref),
'confirm_reopen',
'', 0, 1);
1574 } elseif ($action ==
'ask_deleteline') {
1576 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
1577 } elseif ($action ==
'validate') {
1582 $ref = substr(
$object->ref, 1, 4);
1583 if ($ref ==
'PROV') {
1584 $numref =
$object->getNextNumRef($soc);
1585 if (empty($numref)) {
1593 $text = $langs->trans(
'ConfirmValidateAsk', $numref);
1594 if (isModEnabled(
'notification')) {
1595 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1596 $notify =
new Notify($db);
1598 $text .= $notify->confirmMessage(
'PROPOSAL_SUPPLIER_VALIDATE',
$object->socid,
$object);
1602 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateAsk'), $text,
'confirm_validate',
'', 0, 1);
1607 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
1608 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
1609 if (empty($reshook)) {
1610 $formconfirm .= $hookmanager->resPrint;
1611 } elseif ($reshook > 0) {
1612 $formconfirm = $hookmanager->resPrint;
1620 $linkback =
'<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1623 $morehtmlref =
'<div class="refidno">';
1628 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'supplier');
1630 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?socid='.
$object->thirdparty->id.
'&search_societe='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherProposals").
'</a>)';
1633 if (isModEnabled(
'project')) {
1634 $langs->load(
"projects");
1635 $morehtmlref .=
'<br>';
1636 if ($usercancreate) {
1637 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1638 if ($action !=
'classify') {
1639 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1641 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1643 if (!empty(
$object->fk_project)) {
1645 $proj->fetch(
$object->fk_project);
1646 $morehtmlref .= $proj->getNomUrl(1);
1648 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1653 $morehtmlref .=
'</div>';
1656 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
1659 $parameters = array();
1661 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierProposal', $parameters,
$object, $action);
1662 if (empty($reshook)) {
1663 print
'<div class="fichecenter">';
1664 print
'<div class="fichehalfleft">';
1665 print
'<div class="underbanner clearboth"></div>';
1667 print
'<table class="border tableforfield centpercent">';
1671 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
1672 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
1674 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
1675 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
1678 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
1680 $absolute_discount = $soc->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
1681 $absolute_creditnote = $soc->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
1682 $absolute_discount =
price2num($absolute_discount,
'MT');
1683 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
1687 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
1688 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1693 print
'<tr><td class="titlefield">';
1694 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1695 print $langs->trans(
'PaymentConditionsShort');
1698 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>';
1700 print
'</tr></table>';
1701 print
'</td><td class="valuefield">';
1702 if ($action ==
'editconditions') {
1703 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id', 1);
1705 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none', 1);
1711 $langs->load(
'deliveries');
1713 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1714 print $langs->trans(
'DeliveryDate');
1717 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>';
1719 print
'</tr></table>';
1720 print
'</td><td class="valuefield">';
1721 if ($action ==
'editdate_livraison') {
1722 print
'<form name="editdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="post" class="formconsumeproduce">';
1723 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1724 print
'<input type="hidden" name="action" value="setdate_livraison">';
1725 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
1726 print $form->selectDate(
$object->delivery_date,
'liv_', 0, 0, 0,
"editdate_livraison");
1727 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1738 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1739 print $langs->trans(
'PaymentMode');
1742 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>';
1744 print
'</tr></table>';
1745 print
'</td><td class="valuefield">';
1746 if ($action ==
'editmode') {
1747 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
1749 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
1766 if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL') && isModEnabled(
"bank")) {
1769 print
'<table width="100%" class="nobordernopadding"><tr><td>';
1770 print $langs->trans(
'BankAccount');
1772 if ($action !=
'editbankaccount' && $usercancreate) {
1773 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>';
1775 print
'</tr></table>';
1776 print
'</td><td class="valuefield">';
1777 if ($action ==
'editbankaccount') {
1778 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
1780 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
1787 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1792 print
'<div class="fichehalfright">';
1793 print
'<div class="underbanner clearboth"></div>';
1795 print
'<table class="border tableforfield centpercent">';
1797 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
1801 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
1802 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1803 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
1805 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1811 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') .
'</td>';
1812 print
'<td class="nowrap amountcard right">' .
price(
$object->total_tva, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1813 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
1815 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1820 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
1822 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
1823 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1824 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
1825 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1829 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
1831 print
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
1832 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1833 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
1834 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1842 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
1843 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
1844 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
1846 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
1860 print
'<div class="clearboth"></div><br>';
1863 $blocname =
'contacts';
1864 $title = $langs->trans(
'ContactsAddresses');
1865 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1869 $blocname =
'notes';
1870 $title = $langs->trans(
'Notes');
1871 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1879 $result =
$object->getLinesArray();
1881 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'#add' :
'').
'" method="POST">
1882 <input type="hidden" name="token" value="' .
newToken().
'">
1883 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
1884 <input type="hidden" name="mode" value="">
1885 <input type="hidden" name="id" value="' .
$object->id.
'">
1886 <input type="hidden" name="backtopage" value="'.$backtopage.
'">
1890 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1893 print
'<div class="div-table-responsive-no-min">';
1894 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1897 global $forceall, $senderissupplier, $inputalsopricewithtax;
1900 $inputalsopricewithtax = 1;
1901 $senderissupplier = 2;
1903 $senderissupplier = 1;
1907 $object->printObjectLines($action, $soc, $mysoc, $lineid, $dateSelector);
1912 if ($action !=
'editline') {
1915 $parameters = array(
'dateSelector' => $dateSelector);
1916 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters,
$object, $action);
1920 if (empty($reshook)) {
1921 $object->formAddObjectLine($dateSelector, $soc, $mysoc);
1933 if ($action ==
'statut') {
1935 $form_close =
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="POST" id="formacceptrefuse" class="formconsumeproduce paddingbottom paddingleft paddingright">';
1936 $form_close .=
'<input type="hidden" name="token" value="'.newToken().
'">';
1937 $form_close .=
'<input type="hidden" name="action" value="setstatut">';
1940 $form_close .=
'<p class="notice">'.$langs->trans(
'SupplierProposalRefFournNotice').
'</p>';
1942 $form_close .=
'<table class="border centpercent marginleftonly marginrightonly">';
1943 $form_close .=
'<tr><td>'.$langs->trans(
"CloseAs").
'</td><td class="left">';
1944 $form_close .=
'<select id="statut" name="statut" class="flat">';
1945 $form_close .=
'<option value="0"> </option>';
1946 $form_close .=
'<option value="2">'.$langs->trans(
'SupplierProposalStatusSigned').
'</option>';
1947 $form_close .=
'<option value="3">'.$langs->trans(
'SupplierProposalStatusNotSigned').
'</option>';
1948 $form_close .=
'</select>';
1949 $form_close .=
'</td></tr>';
1950 $form_close .=
'<tr><td class="left">'.$langs->trans(
'Note').
'</td><td class="left"><textarea cols="70" rows="'.ROWS_3.
'" wrap="soft" name="note">';
1951 $form_close .=
$object->note_private;
1952 $form_close .=
'</textarea></td></tr>';
1953 $form_close .=
'</table>';
1954 $form_close .= $form->buttonsSaveCancel();
1955 $form_close .=
'<a id="acceptedrefused"> </a>';
1956 $form_close .=
'</form>';
1964 if ($action !=
'presend') {
1965 print
'<div class="tabsAction">';
1967 $parameters = array();
1968 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
1970 if (empty($reshook)) {
1971 if ($action !=
'statut' && $action !=
'editline') {
1974 if (count(
$object->lines) > 0) {
1975 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>';
1982 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>';
1987 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').
'"';
1988 print
'>'.$langs->trans(
'ReOpen').
'</a></div>';
1992 if (empty($user->socid)) {
1995 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>';
1997 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
'SendMail').
'</a></div>';
2004 if ($usercancreateorder) {
2005 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>';
2011 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').
'"';
2012 print
'>'.$langs->trans(
'SetAcceptedRefused').
'</a></div>';
2017 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').
'"';
2018 print
'>'.$langs->trans(
'Close').
'</a></div>';
2022 if ($usercancreate) {
2023 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>';
2034 if ($action !=
'presend') {
2035 print
'<div class="fichecenter"><div class="fichehalfleft">';
2042 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
2043 $genallowed = $usercanread;
2044 $delallowed = $usercancreate;
2046 print $formfile->showdocuments(
'supplier_proposal', $filename, $filedir, $urlsource, $genallowed, $delallowed,
$object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $soc->default_lang);
2050 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'supplier_proposal'), 1);
2051 $linktoelem = $tmparray[
'linktoelem'];
2052 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
2053 print $htmltoenteralink;
2055 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
2059 print
'</div><div class="fichehalfright">';
2062 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2064 $somethingshown = $formactions->showactions(
$object,
'supplier_proposal', $socid, 1,
'', $MAXEVENT);
2066 print
'</div></div>';
2070 if (
GETPOST(
'modelselected')) {
2071 $action =
'presend';
2075 $modelmail =
'supplier_proposal_send';
2076 $defaulttopic =
'SendAskRef';
2077 $diroutput = $conf->supplier_proposal->dir_output;
2078 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
2079 $trackid =
'spro'.$object->id;
2081 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
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_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
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.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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)
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_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
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, when selling a product with vat $vatrate,...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
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.