38 require
'../main.inc.php';
39 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
41 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmargin.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
43 require_once DOL_DOCUMENT_ROOT.
'/comm/action/class/actioncomm.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_proposal/modules_supplier_proposal.php';
45 require_once DOL_DOCUMENT_ROOT.
'/core/lib/supplier_proposal.lib.php';
46 require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
47 require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
48 if (!empty($conf->project->enabled)) {
49 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
50 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
54 $langs->loadLangs(array(
'companies',
'supplier_proposal',
'compta',
'bills',
'propal',
'orders',
'products',
'deliveries',
'sendings'));
56 $langs->load(
'margins');
63 $socid =
GETPOST(
'socid',
'int');
64 $action =
GETPOST(
'action',
'aZ09');
65 $cancel =
GETPOST(
'cancel',
'alpha');
66 $origin =
GETPOST(
'origin',
'alpha');
67 $originid =
GETPOST(
'originid',
'int');
68 $confirm =
GETPOST(
'confirm',
'alpha');
69 $lineid =
GETPOST(
'lineid',
'int');
70 $contactid =
GETPOST(
'contactid',
'int');
71 $projectid =
GETPOST(
'projectid',
'int');
72 $rank = (
GETPOST(
'rank',
'int') > 0) ?
GETPOST(
'rank',
'int') : -1;
75 $hidedetails = (
GETPOST(
'hidedetails',
'int') ?
GETPOST(
'hidedetails',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
76 $hidedesc = (
GETPOST(
'hidedesc',
'int') ?
GETPOST(
'hidedesc',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 1 : 0));
77 $hideref = (
GETPOST(
'hideref',
'int') ?
GETPOST(
'hideref',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
83 $hookmanager->initHooks(array(
'supplier_proposalcard',
'globalcard'));
89 $extrafields->fetch_name_optionals_label($object->table_element);
92 if ($id > 0 || !empty($ref)) {
93 $ret = $object->fetch($id, $ref);
95 $ret = $object->fetch_thirdparty();
104 $usercanread = $user->rights->supplier_proposal->lire;
105 $usercancreate = $user->rights->supplier_proposal->creer;
106 $usercandelete = $user->rights->supplier_proposal->supprimer;
109 $usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($usercancreate)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($user->rights->supplier_proposal->validate_advance)));
110 $usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->supplier_proposal->send_advance);
113 $usercanclose = $user->rights->supplier_proposal->cloturer;
114 $usercancreateorder = ($user->rights->fournisseur->commande->creer || $user->rights->supplier_order->creer);
117 $permissionnote = $usercancreate;
118 $permissiondellink = $usercancreate;
119 $permissiontoedit = $usercancreate;
120 $permissiontoadd = $usercancreate;
123 if (!empty($user->socid)) {
124 $socid = $user->socid;
126 $result =
restrictedArea($user,
'supplier_proposal', $object->id);
134 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
139 if (empty($reshook)) {
140 $backurlforlist = DOL_URL_ROOT.
'/supplier_proposal/list.php';
142 if (empty($backtopage) || ($cancel && empty($id))) {
143 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
144 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
145 $backtopage = $backurlforlist;
147 $backtopage = DOL_URL_ROOT.
'/supplier_proposal/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
153 if (!empty($backtopageforcancel)) {
154 header(
"Location: ".$backtopageforcancel);
156 } elseif (!empty($backtopage)) {
157 header(
"Location: ".$backtopage);
163 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
165 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
167 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
170 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $usercancreate) {
171 if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
174 if ($object->id > 0) {
175 $result = $object->createFromClone($user, $socid);
177 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
185 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $usercandelete) {
187 $result = $object->delete($user);
189 header(
'Location: '.DOL_URL_ROOT.
'/supplier_proposal/list.php');
192 $langs->load(
"errors");
195 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
197 $result = $object->deleteline($lineid);
200 $object->line_order(
true);
202 $langs->load(
"errors");
206 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
208 $outputlangs = $langs;
211 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') : $object->thirdparty->default_lang);
212 $outputlangs->setDefaultLang($newlang);
214 $ret = $object->fetch($id);
216 $object->fetch_thirdparty();
218 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
221 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
223 } elseif ($action ==
'confirm_validate' && $confirm ==
'yes' && $usercanvalidate) {
225 $result = $object->valid($user);
227 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
228 $outputlangs = $langs;
231 $newlang =
GETPOST(
'lang_id',
'aZ09');
234 $newlang = $object->thirdparty->default_lang;
236 if (!empty($newlang)) {
238 $outputlangs->setDefaultLang($newlang);
240 $model = $object->model_pdf;
241 $ret = $object->fetch($id);
243 $object->fetch_thirdparty();
246 $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
249 $langs->load(
"errors");
250 if (count($object->errors) > 0) {
256 } elseif ($action ==
'setdate_livraison' && $usercancreate) {
261 } elseif ($action ==
'add' && $usercancreate) {
263 $object->socid = $socid;
264 $object->fetch_thirdparty();
269 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Supplier")),
null,
'errors');
278 if (
GETPOST(
'createmode') ==
'copy' &&
GETPOST(
'copie_supplier_proposal')) {
279 if ($object->fetch(
GETPOST(
'copie_supplier_proposal')) > 0) {
281 $object->date_livraison = $date_delivery;
282 $object->delivery_date = $date_delivery;
283 $object->shipping_method_id =
GETPOST(
'shipping_method_id',
'int');
284 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
285 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
286 $object->fk_account =
GETPOST(
'fk_account',
'int');
289 $object->socid =
GETPOST(
'socid');
290 $object->fk_project =
GETPOST(
'projectid',
'int');
291 $object->model_pdf =
GETPOST(
'model');
292 $object->author = $user->id;
293 $object->note =
GETPOST(
'note',
'restricthtml');
294 $object->note_private =
GETPOST(
'note',
'restricthtml');
297 setEventMessages($langs->trans(
"ErrorFailedToCopyProposal",
GETPOST(
'copie_supplier_proposal')),
null,
'errors');
301 $object->date_livraison = $date_delivery;
302 $object->delivery_date = $date_delivery;
303 $object->demand_reason_id =
GETPOST(
'demand_reason_id');
304 $object->shipping_method_id =
GETPOST(
'shipping_method_id',
'int');
305 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
306 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
307 $object->fk_account =
GETPOST(
'fk_account',
'int');
308 $object->fk_project =
GETPOST(
'projectid',
'int');
309 $object->model_pdf =
GETPOST(
'model');
310 $object->author = $user->id;
311 $object->note =
GETPOST(
'note',
'restricthtml');
312 $object->note_private =
GETPOST(
'note',
'restricthtml');
314 $object->origin =
GETPOST(
'origin');
315 $object->origin_id =
GETPOST(
'originid');
319 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
323 $ret = $extrafields->setOptionalsFromPost(
null, $object);
331 if ($origin && $originid) {
333 $element = $subelement = $origin;
334 if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
336 $subelement = $regs[2];
340 if ($element ==
'order') {
341 $element = $subelement =
'commande';
343 if ($element ==
'propal') {
344 $element =
'comm/propal';
345 $subelement =
'propal';
347 if ($element ==
'contract') {
348 $element = $subelement =
'contrat';
350 if ($element ==
'inter') {
351 $element = $subelement =
'ficheinter';
353 if ($element ==
'shipping') {
354 $element = $subelement =
'expedition';
357 $object->origin = $origin;
358 $object->origin_id = $originid;
361 $object->linked_objects [$object->origin] = $object->origin_id;
362 if (is_array($_POST[
'other_linked_objects']) && !empty($_POST[
'other_linked_objects'])) {
363 $object->linked_objects = array_merge($object->linked_objects, $_POST[
'other_linked_objects']);
366 $id = $object->create($user);
370 $classname = ucfirst($subelement);
371 $srcobject =
new $classname($db);
373 dol_syslog(
"Try to find source object origin=".$object->origin.
" originid=".$object->origin_id.
" to add lines");
374 $result = $srcobject->fetch($object->origin_id);
377 $lines = $srcobject->lines;
378 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
379 $srcobject->fetch_lines();
380 $lines = $srcobject->lines;
384 $num = count($lines);
385 for ($i = 0; $i < $num; $i++) {
386 $label = (!empty($lines[$i]->label) ? $lines[$i]->label :
'');
387 $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->libelle);
390 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
393 if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
398 if (method_exists($lines[$i],
'fetch_optionals')) {
399 $lines[$i]->fetch_optionals();
400 $array_options = $lines[$i]->array_options;
403 $result = $object->addline(
405 $lines[$i]->subprice,
408 $lines[$i]->localtax1_tx,
409 $lines[$i]->localtax2_tx,
410 $lines[$i]->fk_product,
411 $lines[$i]->remise_percent,
414 $lines[$i]->info_bits,
417 $lines[$i]->special_code,
419 $lines[$i]->fk_fournprice,
423 $lines[$i]->ref_supplier,
436 if ($result > 0 && $lines[$i]->product_type == 9) {
437 $fk_parent_line = $result;
443 $reshook = $hookmanager->executeHooks(
'createFrom',
$parameters, $object, $action);
459 $id = $object->create($user);
467 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
468 $outputlangs = $langs;
471 $newlang =
GETPOST(
'lang_id',
'aZ09');
474 $newlang = $object->thirdparty->default_lang;
476 if (!empty($newlang)) {
478 $outputlangs->setDefaultLang($newlang);
480 $model = $object->model_pdf;
482 $ret = $object->fetch($id);
483 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
489 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
502 } elseif ($action ==
'confirm_reopen' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
508 } elseif ($action ==
'close' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
514 } elseif ($action ==
'setstatut' && $usercanclose && !
GETPOST(
'cancel',
'alpha')) {
517 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"CloseAs")),
null,
'errors');
522 $object->cloture($user,
GETPOST(
'statut'),
GETPOST(
'note',
'restricthtml'));
528 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
531 $triggersendname =
'PROPOSAL_SUPPLIER_SENTBYMAIL';
532 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
533 $trackid =
'spro'.$object->id;
534 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
537 $upload_dir = $conf->supplier_proposal->dir_output;
538 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
542 if ($action ==
'modif' && $usercancreate) {
543 $object->setDraft($user);
545 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
547 $outputlangs = $langs;
550 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') : $object->thirdparty->default_lang);
551 $outputlangs->setDefaultLang($newlang);
553 $ret = $object->fetch($id);
555 $object->fetch_thirdparty();
557 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
559 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
560 if (
GETPOST(
"remise_id",
'int')) {
561 if ($object->id > 0) {
562 $result = $object->insert_discount(
GETPOST(
"remise_id",
'int'));
571 if ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') && $usercancreate) {
573 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
574 $vat_rate = str_replace(
'*',
'', $vat_rate);
575 $localtax1_rate =
get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
576 $localtax2_rate =
get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
577 foreach ($object->lines as $line) {
578 $result = $object->updateline($line->id, $line->subprice, $line->qty, $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, $line->desc,
'HT', $line->info_bits, $line->special_code, $line->fk_parent_line, 0, $line->fk_fournprice, $line->pa_ht, $line->label, $line->product_type, $line->array_options, $line->fk_unit, $line->multicurrency_subprice);
580 } elseif ($action ==
'addline' && $usercancreate) {
581 $langs->load(
'errors');
590 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
592 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'aZ09');
593 if ($prod_entry_mode ==
'free') {
596 $idprod =
GETPOST(
'idprod',
'int');
609 if (empty($remise_percent)) {
614 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
615 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
617 if (is_array($extralabelsline)) {
619 foreach ($extralabelsline as $key => $value) {
620 unset($_POST[
"options_".$key]);
624 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
625 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
628 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
629 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
633 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' &&
GETPOST(
'multicurrency_price_ht') ===
'') {
634 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPrice")),
null,
'errors');
637 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
638 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Description")),
null,
'errors');
641 if (!$error && ($qty >= 0)) {
645 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
649 if ($prod_entry_mode !=
'free' && empty($error)) {
653 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
658 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
660 $res = $productsupplier->fetch($idprod);
663 if (!empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) {
665 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
666 if ($productsupplier->fourn_socid != $socid) {
667 $productsupplier->ref_supplier =
'';
670 $fksoctosearch = $object->thirdparty->id;
671 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
673 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
676 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
677 $res = $productsupplier->fetch($idprod);
681 $label = $productsupplier->label;
684 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
685 $outputlangs = $langs;
687 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
688 $newlang =
GETPOST(
'lang_id',
'aZ09');
690 if (empty($newlang)) {
691 $newlang = $object->thirdparty->default_lang;
693 if (!empty($newlang)) {
695 $outputlangs->setDefaultLang($newlang);
697 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->description;
699 $desc = $productsupplier->description;
702 if (!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
703 $desc = $productsupplier->desc_supplier;
707 if (trim($product_desc) == trim($desc) && !empty($conf->global->PRODUIT_AUTOFILL_DESC)) {
711 if (!empty($product_desc) && !empty($conf->global->MAIN_NO_CONCAT_DESCRIPTION)) {
712 $desc = $product_desc;
714 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
715 $desc =
dol_concatdesc($desc, $product_desc,
'', !empty($conf->global->MAIN_CHANGE_ORDER_CONCAT_DESCRIPTION));
718 $ref_supplier = $productsupplier->ref_supplier;
723 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
724 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
726 if (empty($tva_tx)) {
729 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
730 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
732 $type = $productsupplier->type;
733 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'price_ht_devise') !=
'') {
734 $price_base_type =
'HT';
736 $pu_devise =
price2num($price_ht_devise,
'CU');
737 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'price_ttc_devise') !=
'') {
738 $price_base_type =
'TTC';
740 $pu_devise =
price2num($price_ttc_devise,
'CU');
742 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
743 if (empty($object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code != $object->multicurrency_code)) {
744 $pu = $productsupplier->fourn_pu;
747 $pu = $productsupplier->fourn_pu;
748 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
757 $fournprice = (is_numeric(
GETPOST(
'idprodfournprice',
'alpha')) ?
GETPOST(
'idprodfournprice',
'alpha') : -1);
760 $result = $object->addline(
762 ($price_base_type ==
'HT' ? $pu : 0),
767 $productsupplier->id,
770 ($price_base_type ==
'TTC' ? $pu : 0),
773 min($rank, count($object->lines) + 1),
781 $productsupplier->fk_unit,
797 if ($idprod == -99 || $idprod == 0) {
800 $langs->load(
"errors");
801 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")).
' '.$langs->trans(
"or").
' '.$langs->trans(
"NoPriceDefinedForThisSupplier"),
null,
'errors');
806 $langs->load(
"errors");
807 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
809 } elseif ((
GETPOST(
'price_ht') !==
'' ||
GETPOST(
'price_ttc') !==
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') && empty($error)) {
813 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
814 $tva_tx = str_replace(
'*',
'', $tva_tx);
815 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
816 $desc = $product_desc;
819 $fk_unit =
GETPOST(
'units',
'alpha');
821 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
826 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
827 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
829 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'price_ht_devise') !=
'') {
833 $pu_ht =
price2num($pu_ttc / (1 + ($tva_tx / 100)),
'MU');
835 $price_base_type =
'HT';
836 $pu_ht_devise =
price2num($price_ht_devise,
'CU');
839 $result = $object->addline(
868 if (!$error && $result > 0) {
871 $ret = $object->fetch($object->id);
874 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
875 $outputlangs = $langs;
878 $newlang =
GETPOST(
'lang_id',
'aZ09');
881 $newlang = $object->thirdparty->default_lang;
883 if (!empty($newlang)) {
885 $outputlangs->setDefaultLang($newlang);
887 $model = $object->model_pdf;
888 $ret = $object->fetch($id);
890 $object->fetch_thirdparty();
893 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
899 unset($_POST[
'prod_entry_mode']);
901 unset($_POST[
'qty']);
902 unset($_POST[
'type']);
903 unset($_POST[
'remise_percent']);
905 unset($_POST[
'price_ht']);
906 unset($_POST[
'multicurrency_price_ht']);
907 unset($_POST[
'price_ttc']);
908 unset($_POST[
'fourn_ref']);
909 unset($_POST[
'tva_tx']);
910 unset($_POST[
'label']);
911 unset($_POST[
'product_ref']);
912 unset($_POST[
'product_label']);
913 unset($_POST[
'product_desc']);
914 unset($_POST[
'fournprice']);
915 unset($_POST[
'buying_price']);
916 unset($localtax1_tx);
917 unset($localtax2_tx);
918 unset($_POST[
'np_marginRate']);
919 unset($_POST[
'np_markRate']);
920 unset($_POST[
'dp_desc']);
921 unset($_POST[
'idprodfournprice']);
922 unset($_POST[
'units']);
924 unset($_POST[
'idprod']);
926 unset($_POST[
'date_starthour']);
927 unset($_POST[
'date_startmin']);
928 unset($_POST[
'date_startsec']);
929 unset($_POST[
'date_startday']);
930 unset($_POST[
'date_startmonth']);
931 unset($_POST[
'date_startyear']);
932 unset($_POST[
'date_endhour']);
933 unset($_POST[
'date_endmin']);
934 unset($_POST[
'date_endsec']);
935 unset($_POST[
'date_endday']);
936 unset($_POST[
'date_endmonth']);
937 unset($_POST[
'date_endyear']);
944 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'save') == $langs->trans(
"Save")) {
950 if (preg_match(
'/\*/', $vat_rate)) {
958 $vat_rate = str_replace(
'*',
'', $vat_rate);
959 $localtax1_rate =
get_localtax($vat_rate, 1, $mysoc, $object->thirdparty);
960 $localtax2_rate =
get_localtax($vat_rate, 2, $mysoc, $object->thirdparty);
962 if (
GETPOST(
'price_ht') !=
'') {
963 $price_base_type =
'HT';
967 $vatratecleaned = $vat_rate;
968 if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {
969 $vatratecleaned = trim($reg[1]);
970 $vatratecode = $reg[2];
974 $ht = (
float) $ttc / (1 + ((
float) $vatratecleaned / 100));
975 $price_base_type =
'HT';
981 $fournprice = (
GETPOST(
'fournprice') ?
GETPOST(
'fournprice') :
'');
982 $buyingprice = (
GETPOST(
'buying_price') !=
'' ?
GETPOST(
'buying_price') :
'');
985 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
986 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
988 if (is_array($extralabelsline)) {
989 foreach ($extralabelsline as $key => $value) {
990 unset($_POST[
"options_".$key]);
995 $special_code =
GETPOST(
'special_code');
1001 $productid =
GETPOST(
'productid',
'int');
1002 if (!empty($productid)) {
1004 if (!empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) {
1005 if ($productid > 0 && $productsupplier->get_buyprice(0,
price2num(
GETPOST(
'qty')), $productid,
'none',
GETPOST(
'socid',
'int')) < 0) {
1006 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1011 $res = $product->fetch($productid);
1013 $type = $product->type;
1015 $price_min = $product->price_min;
1016 if (!empty($conf->global->PRODUIT_MULTIPRICES) && !empty($object->thirdparty->price_level)) {
1017 $price_min = $product->multiprices_min [$object->thirdparty->price_level];
1023 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1027 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
1035 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1038 $result = $object->updateline(
1050 GETPOST(
'fk_parent_line',
'int'),
1065 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1067 $outputlangs = $langs;
1069 $outputlangs =
new Translate(
"", $conf);
1070 $newlang = (
GETPOST(
'lang_id',
'aZ09') ?
GETPOST(
'lang_id',
'aZ09') : $object->thirdparty->default_lang);
1071 $outputlangs->setDefaultLang($newlang);
1073 $ret = $object->fetch($id);
1074 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1077 unset($_POST[
'qty']);
1078 unset($_POST[
'type']);
1079 unset($_POST[
'productid']);
1080 unset($_POST[
'remise_percent']);
1081 unset($_POST[
'price_ht']);
1082 unset($_POST[
'multicurrency_price_ht']);
1083 unset($_POST[
'price_ttc']);
1084 unset($_POST[
'tva_tx']);
1085 unset($_POST[
'product_ref']);
1086 unset($_POST[
'product_label']);
1087 unset($_POST[
'product_desc']);
1088 unset($_POST[
'fournprice']);
1089 unset($_POST[
'buying_price']);
1091 unset($_POST[
'date_starthour']);
1092 unset($_POST[
'date_startmin']);
1093 unset($_POST[
'date_startsec']);
1094 unset($_POST[
'date_startday']);
1095 unset($_POST[
'date_startmonth']);
1096 unset($_POST[
'date_startyear']);
1097 unset($_POST[
'date_endhour']);
1098 unset($_POST[
'date_endmin']);
1099 unset($_POST[
'date_endsec']);
1100 unset($_POST[
'date_endday']);
1101 unset($_POST[
'date_endmonth']);
1102 unset($_POST[
'date_endyear']);
1109 } elseif ($action ==
'updateline' && $usercancreate &&
GETPOST(
'cancel',
'alpha') == $langs->trans(
"Cancel")) {
1110 header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.$object->id);
1112 } elseif ($action ==
'classin' && $usercancreate) {
1114 $object->setProject(
GETPOST(
'projectid'),
'int');
1115 } elseif ($action ==
'setavailability' && $usercancreate) {
1117 $result = $object->availability(
GETPOST(
'availability_id'));
1118 } elseif ($action ==
'setconditions' && $usercancreate) {
1120 $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id',
'int'));
1121 } elseif ($action ==
'setremisepercent' && $usercancreate) {
1122 $result = $object->set_remise_percent($user,
price2num(
GETPOST(
'remise_percent'),
'', 2));
1123 } elseif ($action ==
'setremiseabsolue' && $usercancreate) {
1124 $result = $object->set_remise_absolue($user,
price2num(
GETPOST(
'remise_absolue'),
'MU', 2));
1125 } elseif ($action ==
'setmode' && $usercancreate) {
1127 $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id',
'int'));
1128 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
1130 $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
1131 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
1133 $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx')),
GETPOST(
'calculation_mode',
'int'));
1134 } elseif ($action ==
'update_extras') {
1138 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
1144 $result = $object->insertExtraFields(
'PROPOSAL_SUPPLIER_MODIFY');
1152 $action =
'edit_extras';
1161 $title = $object->ref.
" - ".$langs->trans(
'Card');
1162 if ($action ==
'create') {
1163 $title = $langs->trans(
"SupplierProposalNew");
1165 $help_url =
'EN:Ask_Price_Supplier|FR:Demande_de_prix_fournisseur';
1172 $companystatic =
new Societe($db);
1173 if (!empty($conf->project->enabled)) {
1180 if ($action ==
'create') {
1181 $currency_code = $conf->currency;
1183 print
load_fiche_titre($langs->trans(
"SupplierProposalNew"),
'',
'supplier_proposal');
1187 $res = $soc->fetch($socid);
1191 if (!empty($origin) && !empty($originid)) {
1192 $element = $subelement =
GETPOST(
'origin');
1193 if (preg_match(
'/^([^_]+)_([^_]+)/i',
GETPOST(
'origin'), $regs)) {
1194 $element = $regs[1];
1195 $subelement = $regs[2];
1199 if ($element ==
'order' || $element ==
'commande') {
1200 $element = $subelement =
'commande';
1202 if ($element ==
'propal') {
1203 $element =
'comm/propal';
1204 $subelement =
'propal';
1209 $classname = ucfirst($subelement);
1210 $objectsrc =
new $classname($db);
1211 $objectsrc->fetch($originid);
1212 if (empty($objectsrc->lines) && method_exists($objectsrc,
'fetch_lines')) {
1213 $objectsrc->fetch_lines();
1215 $objectsrc->fetch_thirdparty();
1217 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
1218 $soc = $objectsrc->thirdparty;
1220 $cond_reglement_id = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
1221 $mode_reglement_id = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
1222 $remise_percent = (!empty($objectsrc->remise_percent) ? $objectsrc->remise_percent : (!empty($soc->remise_supplier_percent) ? $soc->remise_supplier_percent : 0));
1223 $remise_absolue = (!empty($objectsrc->remise_absolue) ? $objectsrc->remise_absolue : (!empty($soc->remise_absolue) ? $soc->remise_absolue : 0));
1226 $objectsrc->fetch_optionals();
1227 $object->array_options = $objectsrc->array_options;
1230 if (!empty($objectsrc->multicurrency_code)) {
1231 $currency_code = $objectsrc->multicurrency_code;
1233 if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) {
1234 $currency_tx = $objectsrc->multicurrency_tx;
1238 $cond_reglement_id = $soc->cond_reglement_supplier_id;
1239 $mode_reglement_id = $soc->mode_reglement_supplier_id;
1240 if (
isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
1241 $currency_code = $soc->multicurrency_code;
1247 print
'<form name="addprop" action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1248 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1249 print
'<input type="hidden" name="action" value="add">';
1250 if ($origin !=
'project' && $originid) {
1251 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
1252 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
1257 print
'<table class="border centpercent">';
1260 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
'Ref').
'</td><td colspan="2">'.$langs->trans(
"Draft").
'</td></tr>';
1264 print
'<td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
1266 print
'<td colspan="2">';
1267 print $soc->getNomUrl(1,
'supplier');
1268 print
'<input type="hidden" name="socid" value="'.$soc->id.
'">';
1271 print
'<td colspan="2">';
1272 print
img_picto(
'',
'company').$form->select_company(
'',
'socid',
's.fournisseur=1',
'SelectThirdParty', 0, 0,
null, 0,
'minwidth300');
1274 if (!empty($conf->global->RELOAD_PAGE_ON_SUPPLIER_CHANGE)) {
1276 $(document).ready(function() {
1277 $("#socid").change(function() {
1278 var socid = $(this).val();
1280 window.location.href = "'.$_SERVER[
"PHP_SELF"].
'?action=create&socid="+socid;
1285 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>';
1292 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
1294 $absolute_discount = $soc->getAvailableDiscounts(
'',
'', 0, 1);
1298 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
1299 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1305 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td colspan="2">';
1306 print
$form->getSelectConditionsPaiements(
GETPOST(
'cond_reglement_id') > 0 ?
GETPOST(
'cond_reglement_id') : $cond_reglement_id,
'cond_reglement_id', -1, 1);
1310 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td colspan="2">';
1311 $form->select_types_paiements(
GETPOST(
'mode_reglement_id') > 0 ?
GETPOST(
'mode_reglement_id') : $mode_reglement_id,
'mode_reglement_id');
1315 if (!empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL) &&
isModEnabled(
"banque")) {
1316 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td colspan="2">';
1317 $form->select_comptes(
GETPOST(
'fk_account') > 0 ?
GETPOST(
'fk_account',
'int') : $fk_account,
'fk_account', 0,
'', 1);
1323 print
'<tr><td>'.$langs->trans(
'SendingMethod').
'</td><td colspan="2">';
1324 print
img_picto(
'',
'object_dollyrevert',
'class="pictofixedwidth"');
1325 $form->selectShippingMethod(
GETPOST(
'shipping_method_id') > 0 ?
GETPOST(
'shipping_method_id',
'int') :
"",
'shipping_method_id',
'', 1);
1330 print
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td>';
1331 print
'<td colspan="2">';
1333 if (!empty($conf->global->DATE_LIVRAISON_WEEK_DELAY)) {
1334 $tmpdte = time() + ((7 * $conf->global->DATE_LIVRAISON_WEEK_DELAY) * 24 * 60 * 60);
1335 $syear = date(
"Y", $tmpdte);
1336 $smonth = date(
"m", $tmpdte);
1337 $sday = date(
"d", $tmpdte);
1338 print
$form->selectDate($syear.
"-".$smonth.
"-".$sday,
'liv_',
'',
'',
'',
"addask");
1340 print
$form->selectDate($datedelivery ? $datedelivery : -1,
'liv_',
'',
'',
'',
"addask", 1, 1);
1347 print
'<td>'.$langs->trans(
"DefaultModel").
'</td>';
1348 print
'<td colspan="2">';
1350 $preselected = (!empty($conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT) ? $conf->global->SUPPLIER_PROPOSAL_ADDON_PDF_ODT_DEFAULT : $conf->global->SUPPLIER_PROPOSAL_ADDON_PDF);
1351 print
$form->selectarray(
'model', $list, $preselected, 0, 0, 0,
'', 0, 0, 0,
'',
'', 1);
1355 if (!empty($conf->project->enabled)) {
1356 $langs->load(
"projects");
1360 if ($origin ==
'project') {
1361 $projectid = ($originid ? $originid : 0);
1365 print
'<td>'.$langs->trans(
"Project").
'</td><td colspan="2">';
1366 print
img_picto(
'',
'project').$formproject->select_projects(($soc->id > 0 ? $soc->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500');
1367 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>';
1376 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
1377 print
'<td colspan="3" class="maxwidthonsmartphone">';
1378 print
$form->selectMultiCurrency($currency_code,
'multicurrency_code');
1383 $parameters = array(
'colspan' =>
' colspan="3"',
'cols' => 3);
1384 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $object, $action);
1385 print $hookmanager->resPrint;
1386 if (empty($reshook)) {
1387 print $object->showOptionals($extrafields,
'create',
$parameters);
1392 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1394 if ($origin ==
'contrat') {
1396 $objectsrc->remise_absolue = $remise_absolue;
1397 $objectsrc->remise_percent = $remise_percent;
1398 $objectsrc->update_price(1,
'auto', 1);
1401 print
"\n<!-- ".$classname.
" info -->";
1403 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
1404 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
1405 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
1406 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
1407 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
1409 print
'<tr><td>'.$langs->trans(
'CommRequest').
'</td><td colspan="2">'.$objectsrc->getNomUrl(1).
'</td></tr>';
1410 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td colspan="2">'.
price($objectsrc->total_ht).
'</td></tr>';
1411 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td colspan="2">'.
price($objectsrc->total_tva).
"</td></tr>";
1412 if ($mysoc->localtax1_assuj ==
"1" || $objectsrc->total_localtax1 != 0) {
1413 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax1).
"</td></tr>";
1416 if ($mysoc->localtax2_assuj ==
"1" || $objectsrc->total_localtax2 != 0) {
1417 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td colspan="2">'.
price($objectsrc->total_localtax2).
"</td></tr>";
1419 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td colspan="2">'.
price($objectsrc->total_ttc).
"</td></tr>";
1422 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
1423 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
1424 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td colspan="2">'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
1435 if (empty($conf->global->SUPPLIER_PROPOSAL_CLONE_ON_CREATE_PAGE)) {
1436 print
'<input type="hidden" name="createmode" value="empty">';
1439 if (!empty($conf->global->SUPPLIER_PROPOSAL_CLONE_ON_CREATE_PAGE)) {
1440 print
'<br><table>';
1444 print
'<td><input type="radio" name="createmode" value="copy"></td>';
1445 print
'<td>'.$langs->trans(
"CopyAskFrom").
' </td>';
1447 $liste_ask = array();
1448 $liste_ask [0] =
'';
1450 $sql =
"SELECT p.rowid as id, p.ref, s.nom";
1451 $sql .=
" FROM ".MAIN_DB_PREFIX.
"supplier_proposal p";
1452 $sql .=
", ".MAIN_DB_PREFIX.
"societe s";
1453 $sql .=
" WHERE s.rowid = p.fk_soc";
1454 $sql .=
" AND p.entityy IN (".getEntity(
'supplier_proposal').
")";
1455 $sql .=
" AND p.fk_statut <> ".SupplierProposal::STATUS_DRAFT;
1456 $sql .=
" ORDER BY Id";
1458 $resql = $db->query($sql);
1460 $num = $db->num_rows(
$resql);
1463 $row = $db->fetch_row(
$resql);
1464 $askPriceSupplierRefAndSocName = $row[1].
" - ".$row[2];
1465 $liste_ask[$row[0]] = $askPriceSupplierRefAndSocName;
1468 print
$form->selectarray(
"copie_supplier_proposal", $liste_ask, 0);
1474 print
'<tr><td class="tdtop"><input type="radio" name="createmode" value="empty" checked></td>';
1475 print
'<td valign="top" colspan="2">'.$langs->trans(
"CreateEmptyAsk").
'</td></tr>';
1478 if (!empty($conf->global->SUPPLIER_PROPOSAL_CLONE_ON_CREATE_PAGE)) {
1484 print
$form->buttonsSaveCancel(
"CreateDraft");
1490 if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
1493 $title = $langs->trans(
'ProductsAndServices');
1496 print
'<div class="div-table-responsive-no-min">';
1497 print
'<table class="noborder centpercent">';
1499 $objectsrc->printOriginLinesList();
1510 $soc->fetch($object->socid);
1512 $head = supplier_proposal_prepare_head($object);
1513 print
dol_get_fiche_head($head,
'comm', $langs->trans(
'CommRequest'), -1,
'supplier_proposal');
1518 if ($action ==
'clone') {
1520 $formquestion = array(
1528 'label' => $langs->trans(
"SelectThirdParty"),
1529 'value' =>
$form->select_company(
GETPOST(
'socid',
'int'),
'socid',
's.fournisseur=1'))
1532 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneAsk', $object->ref),
'confirm_clone', $formquestion,
'yes', 1);
1533 } elseif ($action ==
'delete') {
1535 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteAsk'), $langs->trans(
'ConfirmDeleteAsk', $object->ref),
'confirm_delete',
'', 0, 1);
1536 } elseif ($action ==
'reopen') {
1538 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ReOpen'), $langs->trans(
'ConfirmReOpenAsk', $object->ref),
'confirm_reopen',
'', 0, 1);
1539 } elseif ($action ==
'ask_deleteline') {
1541 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
1542 } elseif ($action ==
'validate') {
1547 $ref = substr($object->ref, 1, 4);
1548 if ($ref ==
'PROV') {
1549 $numref = $object->getNextNumRef($soc);
1550 if (empty($numref)) {
1555 $numref = $object->ref;
1558 $text = $langs->trans(
'ConfirmValidateAsk', $numref);
1560 require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
1561 $notify =
new Notify($db);
1563 $text .= $notify->confirmMessage(
'PROPOSAL_SUPPLIER_VALIDATE', $object->socid, $object);
1567 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ValidateAsk'), $text,
'confirm_validate',
'', 0, 1);
1573 $reshook = $hookmanager->executeHooks(
'formConfirm',
$parameters, $object, $action);
1574 if (empty($reshook)) {
1576 } elseif ($reshook > 0) {
1585 $linkback =
'<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1588 $morehtmlref =
'<div class="refidno">';
1593 $morehtmlref .= $object->thirdparty->getNomUrl(1,
'supplier');
1594 if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) {
1595 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/supplier_proposal/list.php?socid='.$object->thirdparty->id.
'&search_societe='.urlencode($object->thirdparty->name).
'">'.$langs->trans(
"OtherProposals").
'</a>)';
1599 $langs->load(
"projects");
1600 $morehtmlref .=
'<br>';
1601 if ($usercancreate) {
1602 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1603 if ($action !=
'classify') {
1604 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1606 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1608 if (!empty($object->fk_project)) {
1610 $proj->fetch($object->fk_project);
1611 $morehtmlref .= $proj->getNomUrl(1);
1613 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
1618 $morehtmlref .=
'</div>';
1621 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
1624 print
'<div class="fichecenter">';
1625 print
'<div class="fichehalfleft">';
1626 print
'<div class="underbanner clearboth"></div>';
1628 print
'<table class="border tableforfield centpercent">';
1631 if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
1632 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
1633 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
1635 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
1636 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
1639 print
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
1641 $absolute_discount = $soc->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
1642 $absolute_creditnote = $soc->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
1643 $absolute_discount =
price2num($absolute_discount,
'MT');
1644 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
1648 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.$object->id);
1649 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
1654 print
'<tr><td class="titlefield">';
1655 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1656 print $langs->trans(
'PaymentConditionsShort');
1659 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>';
1661 print
'</tr></table>';
1662 print
'</td><td class="valuefield">';
1663 if ($action ==
'editconditions') {
1664 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'cond_reglement_id', 1);
1666 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'none', 1);
1672 $langs->load(
'deliveries');
1674 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1675 print $langs->trans(
'DeliveryDate');
1678 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>';
1680 print
'</tr></table>';
1681 print
'</td><td class="valuefield">';
1682 if ($action ==
'editdate_livraison') {
1683 print
'<form name="editdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post" class="formconsumeproduce">';
1684 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1685 print
'<input type="hidden" name="action" value="setdate_livraison">';
1686 print
$form->selectDate($object->delivery_date,
'liv_',
'',
'',
'',
"editdate_livraison");
1687 print
'<input type="submit" class="button button-edit" value="'.$langs->trans(
'Modify').
'">';
1698 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1699 print $langs->trans(
'PaymentMode');
1702 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>';
1704 print
'</tr></table>';
1705 print
'</td><td class="valuefield">';
1706 if ($action ==
'editmode') {
1707 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
1709 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'none');
1718 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1719 print
$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
1721 if ($action !=
'editmulticurrencycode' && $object->statut == $object::STATUS_VALIDATED) {
1722 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencycode&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
1724 print
'</tr></table>';
1725 print
'</td><td class="valuefield">';
1726 if ($action ==
'editmulticurrencycode') {
1727 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'multicurrency_code');
1729 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'none');
1734 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
1737 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1738 print
$form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
1740 if ($action !=
'editmulticurrencyrate' && $object->statut == $object::STATUS_VALIDATED && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
1741 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencyrate&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
1743 print
'</tr></table>';
1744 print
'</td><td class="valuefield">';
1745 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
1746 if ($action ==
'actualizemulticurrencyrate') {
1749 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'multicurrency_tx', $object->multicurrency_code);
1751 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'none', $object->multicurrency_code);
1752 if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
1753 print
'<div class="inline-block"> ';
1754 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
1776 if (!empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_PROPOSAL) &&
isModEnabled(
"banque")) {
1779 print
'<table width="100%" class="nobordernopadding"><tr><td>';
1780 print $langs->trans(
'BankAccount');
1782 if ($action !=
'editbankaccount' && $usercancreate) {
1783 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>';
1785 print
'</tr></table>';
1786 print
'</td><td class="valuefield">';
1787 if ($action ==
'editbankaccount') {
1788 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'fk_account', 1);
1790 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'none');
1797 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1802 print
'<div class="fichehalfright">';
1803 print
'<div class="underbanner clearboth"></div>';
1805 print
'<table class="border tableforfield centpercent">';
1807 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code != $conf->currency)) {
1809 print
'<tr><td class="titlefieldmiddle">'.$form->editfieldkey(
'MulticurrencyAmountHT',
'multicurrency_total_ht',
'', $object, 0).
'</td>';
1810 print
'<td class="valuefield nowrap right amountcard">'.price($object->multicurrency_total_ht,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
1814 print
'<tr><td>'.$form->editfieldkey(
'MulticurrencyAmountVAT',
'multicurrency_total_tva',
'', $object, 0).
'</td>';
1815 print
'<td class="valuefield nowrap right amountcard">'.price($object->multicurrency_total_tva,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
1819 print
'<tr><td>'.$form->editfieldkey(
'MulticurrencyAmountTTC',
'multicurrency_total_ttc',
'', $object, 0).
'</td>';
1820 print
'<td class="valuefield nowrap right amountcard">'.price($object->multicurrency_total_ttc,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
'</td>';
1825 print
'<tr><td class="titlefieldmiddle">'.$langs->trans(
'AmountHT').
'</td>';
1826 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_ht,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1830 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td>';
1831 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_tva,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1835 if ($mysoc->localtax1_assuj ==
"1" || $object->total_localtax1 != 0) {
1836 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td>';
1837 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_localtax1,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1840 if ($mysoc->localtax2_assuj ==
"1" || $object->total_localtax2 != 0) {
1841 print
'<tr><td height="10">'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td>';
1842 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_localtax2,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1847 print
'<tr><td height="10">'.$langs->trans(
'AmountTTC').
'</td>';
1848 print
'<td class="valuefield nowrap right amountcard">'.price($object->total_ttc,
'', $langs, 0, - 1, - 1, $conf->currency).
'</td>';
1861 print
'<div class="clearboth"></div><br>';
1863 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
1864 $blocname =
'contacts';
1865 $title = $langs->trans(
'ContactsAddresses');
1866 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1869 if (!empty($conf->global->MAIN_DISABLE_NOTES_TAB)) {
1870 $blocname =
'notes';
1871 $title = $langs->trans(
'Notes');
1872 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
1880 $result = $object->getLinesArray();
1882 print
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.(($action !=
'editline') ?
'#add' :
'').
'" method="POST">
1883 <input type="hidden" name="token" value="' .
newToken().
'">
1884 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">
1885 <input type="hidden" name="mode" value="">
1886 <input type="hidden" name="id" value="' . $object->id.
'">
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" width="100%">';
1897 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
1898 $forceall = 1; $dateSelector = 0; $inputalsopricewithtax = 1;
1899 $senderissupplier = 2;
1900 if (!empty($conf->global->SUPPLIER_PROPOSAL_WITH_PREDEFINED_PRICES_ONLY)) {
1901 $senderissupplier = 1;
1904 if (!empty($object->lines)) {
1905 $object->printObjectLines($action, $soc, $mysoc, $lineid, $dateSelector);
1910 if ($action !=
'editline') {
1914 $reshook = $hookmanager->executeHooks(
'formAddObjectLine',
$parameters, $object, $action);
1915 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
1916 if (empty($reshook))
1917 $object->formAddObjectLine($dateSelector, $soc, $mysoc);
1927 if ($action ==
'statut') {
1929 $form_close =
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="POST" id="formacceptrefuse" class="formconsumeproduce paddingbottom paddingleft paddingright">';
1930 $form_close .=
'<input type="hidden" name="token" value="'.newToken().
'">';
1931 $form_close .=
'<input type="hidden" name="action" value="setstatut">';
1933 if (!empty($conf->global->SUPPLIER_PROPOSAL_UPDATE_PRICE_ON_SUPPlIER_PROPOSAL)) {
1934 $form_close .=
'<p class="notice">'.$langs->trans(
'SupplierProposalRefFournNotice').
'</p>';
1936 $form_close .=
'<table class="border centpercent marginleftonly marginrightonly">';
1937 $form_close .=
'<tr><td>'.$langs->trans(
"CloseAs").
'</td><td class="left">';
1938 $form_close .=
'<select id="statut" name="statut" class="flat">';
1939 $form_close .=
'<option value="0"> </option>';
1940 $form_close .=
'<option value="2">'.$langs->trans(
'SupplierProposalStatusSigned').
'</option>';
1941 $form_close .=
'<option value="3">'.$langs->trans(
'SupplierProposalStatusNotSigned').
'</option>';
1942 $form_close .=
'</select>';
1943 $form_close .=
'</td></tr>';
1944 $form_close .=
'<tr><td class="left">'.$langs->trans(
'Note').
'</td><td class="left"><textarea cols="70" rows="'.ROWS_3.
'" wrap="soft" name="note">';
1945 $form_close .= $object->note_private;
1946 $form_close .=
'</textarea></td></tr>';
1947 $form_close .=
'</table>';
1948 $form_close .=
$form->buttonsSaveCancel();
1949 $form_close .=
'<a id="acceptedrefused"> </a>';
1950 $form_close .=
'</form>';
1958 if ($action !=
'presend') {
1959 print
'<div class="tabsAction">';
1962 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
1964 if (empty($reshook)) {
1965 if ($action !=
'statut' && $action !=
'editline') {
1968 if (count($object->lines) > 0) {
1969 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=validate">'.$langs->trans(
'Validate').
'</a></div>';
1976 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>';
1981 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.
newToken().(empty($conf->global->MAIN_JUMP_TAG) ?
'' :
'#reopen').
'"';
1982 print
'>'.$langs->trans(
'ReOpen').
'</a></div>';
1986 if (empty($user->socid)) {
1989 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>';
1991 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
'SendMail').
'</a></div>';
1998 if ($usercancreateorder) {
1999 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>';
2005 print
'<div class="inline-block divButAction"><a class="butAction reposition" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&token='.
newToken().
'&action=statut'.(empty($conf->global->MAIN_JUMP_TAG) ?
'' :
'#acceptedrefused').
'"';
2006 print
'>'.$langs->trans(
'SetAcceptedRefused').
'</a></div>';
2011 print
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&token='.
newToken().
'&action=close'.(empty($conf->global->MAIN_JUMP_TAG) ?
'' :
'#close').
'"';
2012 print
'>'.$langs->trans(
'Close').
'</a></div>';
2016 if ($usercancreate) {
2017 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>';
2028 if ($action !=
'presend') {
2029 print
'<div class="fichecenter"><div class="fichehalfleft">';
2036 $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".$object->id;
2037 $genallowed = $usercanread;
2038 $delallowed = $usercancreate;
2040 print $formfile->showdocuments(
'supplier_proposal', $filename, $filedir, $urlsource, $genallowed, $delallowed, $object->model_pdf, 1, 0, 0, 28, 0,
'', 0,
'', $soc->default_lang);
2044 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'supplier_proposal'));
2045 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
2048 print
'</div><div class="fichehalfright">';
2051 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
2053 $somethingshown =
$formactions->showactions($object,
'supplier_proposal', $socid, 1);
2055 print
'</div></div>';
2059 if (
GETPOST(
'modelselected')) {
2060 $action =
'presend';
2064 $modelmail =
'supplier_proposal_send';
2065 $defaulttopic =
'SendAskRef';
2066 $diroutput = $conf->supplier_proposal->dir_output;
2067 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_PROPOSAL_TO';
2068 $trackid =
'spro'.$object->id;
2070 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif($action=='specimen') elseif($action=='setmodel') elseif($action=='del') elseif($action=='setdoc') $formactions
View.
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
Class to manage notifications.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage price ask supplier.
const STATUS_NOTSIGNED
Not signed quote, canceled.
const STATUS_DRAFT
Draft status.
const STATUS_VALIDATED
Validated status.
const STATUS_SIGNED
Signed quote.
const STATUS_CLOSE
Billed or closed/processed quote.
Class to manage translations.
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='')
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='')
Set event messages in dol_events session object.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists('dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Fonction qui renvoie si tva doit etre tva percue recuperable.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="", $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
$formconfirm
if ($action == 'delbookkeepingyear') {
div float
Buy price without taxes.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.