36require
'../../main.inc.php';
47require_once DOL_DOCUMENT_ROOT .
'/fourn/class/fournisseur.facture-rec.class.php';
48require_once DOL_DOCUMENT_ROOT .
'/fourn/class/fournisseur.product.class.php';
49require_once DOL_DOCUMENT_ROOT .
'/product/class/product.class.php';
50require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formother.class.php';
52 include_once DOL_DOCUMENT_ROOT .
'/projet/class/project.class.php';
54require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formprojet.class.php';
55require_once DOL_DOCUMENT_ROOT .
'/core/class/doleditor.class.php';
56require_once DOL_DOCUMENT_ROOT .
'/core/lib/invoice.lib.php';
57require_once DOL_DOCUMENT_ROOT .
'/core/class/extrafields.class.php';
60$langs->loadLangs(array(
'bills',
'companies',
'compta',
'admin',
'other',
'products',
'banks',
'suppliers'));
62$action =
GETPOST(
'action',
'alpha');
63$massaction =
GETPOST(
'massaction',
'alpha');
65$confirm =
GETPOST(
'confirm',
'alpha');
66$cancel =
GETPOST(
'cancel',
'alpha');
67$toselect =
GETPOST(
'toselect',
'array:int');
68$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'supplierinvoicetemplatelist';
69$backtopage =
GETPOST(
'backtopage',
'alpha');
70$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
75$ref =
GETPOST(
'title',
'alphanohtml') ?
GETPOST(
'title',
'alphanohtml') :
GETPOST(
'ref',
'alphanohtml');
76$label =
GETPOST(
'label',
'alphanohtml');
77$ref_supplier =
GETPOST(
'ref_supplier',
'alphanohtml');
79$year_date_when =
GETPOST(
'year_date_when');
80$month_date_when =
GETPOST(
'month_date_when');
84 $socid = $user->socid;
86$objecttype =
'facture_fourn_rec';
87if ($action ==
"create" || $action ==
"add") {
92$sortfield =
GETPOST(
"sortfield",
'aZ09comma');
93$sortorder =
GETPOST(
"sortorder",
'aZ09comma');
95if (empty($page) || $page == -1) {
98$offset = $limit * $page;
103 $sortfield =
'f.titre';
105$pageprev = $page - 1;
106$pagenext = $page + 1;
109if (($id > 0 || $ref) && $action !=
'create' && $action !=
'add') {
110 $ret =
$object->fetch($id, $ref);
112 setEventMessages($langs->trans(
"ErrorRecordNotFound"),
null,
'errors');
117$hookmanager->initHooks(array(
'supplierinvoicereccard',
'globalcard'));
121$extrafields->fetch_name_optionals_label(
$object->table_element);
123$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
125$permissionnote = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
126$permissiondellink = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
127$permissiontoedit = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
128$permissiontoadd = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
129$permissiontodelete = ($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer"));
130$permissiontoeditextra = $permissiontoadd;
131if (
GETPOST(
'attribute',
'aZ09') && isset($extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')])) {
133 $permissiontoeditextra =
dol_eval((
string) $extrafields->attributes[
$object->table_element][
'perms'][
GETPOST(
'attribute',
'aZ09')]);
136$usercanread = $user->hasRight(
"fournisseur",
"facture",
"lire") || $user->hasRight(
"supplier_invoice",
"lire");
137$usercancreate = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
138$usercandelete = $user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer");
139$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"validate")));
140$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"send"));
142$usercanproductignorepricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
"produit",
"ignore_price_min_advance")) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
143$usercancreatemargin = $user->hasRight(
"margins",
"creer");
144$usercanreadallmargin = $user->hasRight(
"margins",
"liretous");
145$usercancreatewithdrarequest = $user->hasRight(
"prelevement",
"bons",
"creer");
160if (
GETPOST(
'cancel',
'alpha')) {
161 if ($action !=
'updateline') {
169if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
173$parameters = array(
'socid' => $socid);
174$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
176 setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
179if (empty($reshook)) {
180 if (
GETPOST(
'cancel',
'alpha')) {
185 include DOL_DOCUMENT_ROOT .
'/core/actions_changeselectedfields.inc.php';
188 include DOL_DOCUMENT_ROOT .
'/core/actions_setnotes.inc.php';
190 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
192 include DOL_DOCUMENT_ROOT .
'/core/actions_lineupdown.inc.php';
195 if ($action ==
'add' && $permissiontoadd) {
196 if (!
GETPOST(
'title',
'alphanohtml')) {
197 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Title")),
null,
'errors');
212 if (empty($reyear) || empty($remonth) || empty($reday)) {
213 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Date")),
null,
'errors');
231 $object->frequency = $frequency;
233 $object->nb_gen_max = $nb_gen_max;
238 $date_next_execution =
dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
239 $object->date_when = $date_next_execution;
241 $ret = $extrafields->setOptionalsFromPost(
null, $object);
243 setEventMessages($extrafields->error, $extrafields->errors,
'errors');
253 $onlylines =
GETPOST(
'toselect',
'array:int');
255 $result =
$object->create($user, $oldinvoice->id, 0, $onlylines);
258 $result = $oldinvoice->delete($user, 1);
261 setEventMessages($oldinvoice->error, $oldinvoice->errors,
'errors');
273 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id);
284 if ($action ==
'confirm_deleteinvoice' && $confirm ==
'yes' && $permissiontodelete) {
286 $result =
$object->delete($user);
288 header(
'Location: ' . DOL_URL_ROOT .
'/fourn/facture/list-rec.php');
297 if ($action ==
'setconditions' && $usercancreate) {
299 } elseif ($action ==
'setmode' && $usercancreate) {
302 } elseif ($action ==
'classin' && $usercancreate) {
305 } elseif ($action ==
'setref_supplier' && $usercancreate) {
306 $result =
$object->setValueFrom(
'ref_supplier', $ref_supplier,
'',
null,
'text',
'', $user);
310 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
311 $langs->load(
"errors");
312 setEventMessages($langs->trans(
'ErrorRefAlreadyExists', $ref_supplier),
null,
'errors');
317 } elseif ($action ==
'settitle' && $permissiontoadd) {
318 $result =
$object->setValueFrom(
'titre', $ref,
'',
null,
'text',
'', $user);
325 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
326 $langs->load(
"errors");
327 setEventMessages($langs->trans(
'ErrorTitreAlreadyExists', $ref),
null,
'errors');
332 } elseif ($action ==
'setbankaccount' && $permissiontoadd) {
335 } elseif ($action ==
'setfrequency' && $permissiontoadd) {
338 } elseif ($action ==
'setdate_when' && $permissiontoadd) {
344 } elseif ($action ==
'setnb_gen_max' && $permissiontoadd) {
347 } elseif ($action ==
'setauto_validate' && $permissiontoadd) {
350 } elseif ($action ==
'setgenerate_pdf' && $permissiontoadd) {
353 } elseif ($action ==
'setmodelpdf' && $permissiontoadd) {
356 } elseif ($action ==
'disable' && $permissiontoadd) {
362 $res =
$object->setValueFrom(
'suspended', 1);
373 } elseif ($action ==
'enable' && $permissiontoadd) {
377 $object->context[
'actionmsg'] = $langs->trans(
"RecordEnabled");
381 $res =
$object->setValueFrom(
'suspended', 0);
392 } elseif ($action ==
'setmulticurrencycode' && $permissiontoadd) {
394 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
395 } elseif ($action ==
'setmulticurrencyrate' && $permissiontoadd) {
398 } elseif ($action ==
'setlabel' && $permissiontoadd) {
400 $result =
$object->setValueFrom(
'libelle', $label,
'',
null,
'text',
'', $user);
404 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $permissiontoadd) {
415 if ($line->delete($user) > 0) {
416 $result =
$object->update_price(1);
423 setEventMessages($db->lasterror(),
null,
'errors');
427 setEventMessages($line->error, $line->errors,
'errors');
429 } elseif ($action ==
'update_extras' && $permissiontoeditextra) {
432 $attribute_name =
GETPOST(
'attribute',
'aZ09');
435 $ret = $extrafields->setOptionalsFromPost(
null, $object, $attribute_name);
441 $result =
$object->updateExtraField($attribute_name,
'BILLREC_MODIFY');
449 $action =
'edit_extras';
454 if ($action ==
'addline' && $permissiontoadd) {
455 $langs->load(
'errors');
463 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'alpha');
464 if ($prod_entry_mode ==
'free') {
466 $tva_tx = (
GETPOST(
'tva_tx',
'alpha') ? (string)
GETPOST(
'tva_tx',
'alpha') : 0);
467 $ref_fournisseur = (
GETPOSTISSET(
'fourn_ref') ?
GETPOST(
'fourn_ref',
'restricthtml') :
'');
473 $qty =
GETPOST(
'qty' . $predef,
'alpha');
474 $qty = ($qty ===
'') ?
'' : (float)
price2num(
GETPOST(
'qty' . $predef,
'alpha'),
'MS', 2);
478 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
479 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
481 if (is_array($extralabelsline)) {
483 foreach ($extralabelsline as $key => $value) {
484 unset($_POST[
"options_" . $key . $predef]);
488 if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ((
float) $qty < 0)) {
489 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
492 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
493 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
496 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && (! ($price_ht >= 0) || $price_ht ==
'')) {
497 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
501 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
504 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
505 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
509 $langs->load(
"errors");
510 setEventMessages($langs->trans(
'ErrorQtyForSupplierInvoiceCantBeNegative'),
null,
'errors');
514 $ref_fournisseur =
null;
515 if ($prod_entry_mode !=
'free' && empty($error)) {
519 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
523 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
524 $idprod = (int) $reg[1];
525 $res = $productsupplier->fetch($idprod);
528 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
530 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
531 if ($productsupplier->fourn_socid != $socid) {
532 $productsupplier->ref_supplier =
'';
535 $fksoctosearch =
$object->thirdparty->id;
536 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
538 } elseif (
GETPOSTINT(
'idprodfournprice') > 0) {
540 $idprod = $productsupplier->get_buyprice(
GETPOSTINT(
'idprodfournprice'), $qtytosearch);
541 $res = $productsupplier->fetch($idprod);
542 $ref_fournisseur = $productsupplier->ref_supplier;
546 if (! $error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
549 dol_print_error($db,
$object->error);
552 $ret =
$object->fetch_thirdparty();
557 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
569 if (!empty($idprod) && $idprod > 0) {
571 $prod->fetch($idprod);
578 if (empty($tva_tx)) {
587 $pu_ht = $datapriceofproduct[
'pu_ht'];
588 $pu_ttc = $datapriceofproduct[
'pu_ttc'];
589 $price_min = $datapriceofproduct[
'price_min'];
590 $price_base_type = empty($datapriceofproduct[
'price_base_type']) ?
'HT' : $datapriceofproduct[
'price_base_type'];
591 $tva_tx = $datapriceofproduct[
'tva_tx'];
592 $tva_npr = $datapriceofproduct[
'tva_npr'];
594 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $tva_tx));
595 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string)
$prod->tva_tx));
598 if (!empty($price_ht)) {
600 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
601 } elseif ($tmpvat != $tmpprodvat) {
604 if ($price_base_type !=
'HT') {
605 $pu_ht =
price2num($pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
607 $pu_ttc =
price2num($pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
611 $outputlangs = $langs;
617 if (
GETPOST(
'lang_id',
'aZ09')) {
618 $newlang =
GETPOST(
'lang_id',
'aZ09');
620 if (empty($newlang)) {
621 $newlang =
$object->thirdparty->default_lang;
623 if (!empty($newlang)) {
625 $outputlangs->setDefaultLang($newlang);
626 $outputlangs->load(
'products');
629 $desc = (!empty(
$prod->multilangs [$outputlangs->defaultlang] [
"description"])) ?
$prod->multilangs [$outputlangs->defaultlang] [
"description"] :
$prod->
description;
631 $desc =
$prod->description;
641 if (!empty(
$prod->customcode)) {
642 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomsCode") .
': ' .
$prod->customcode;
644 if (!empty(
$prod->customcode) && !empty(
$prod->country_code)) {
647 if (!empty(
$prod->country_code)) {
648 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry(
$prod->country_code,
'', $db, $outputlangs, 0);
651 if (!empty(
$prod->customcode)) {
652 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomsCode") .
': ' .
$prod->customcode;
654 if (!empty(
$prod->customcode) && !empty(
$prod->country_code)) {
657 if (!empty(
$prod->country_code)) {
658 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry(
$prod->country_code,
'', $db, $langs, 0);
666 $fk_unit =
$prod->fk_unit;
670 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
671 $tva_tx = str_replace(
'*',
'', $tva_tx);
672 if (empty($tva_tx)) {
675 $desc = $product_desc;
680 $date_start_fill =
GETPOSTINT(
'date_start_fill');
684 $fournprice = (int) (
GETPOST(
'fournprice' . $predef) ?
GETPOST(
'fournprice' . $predef) :
'');
697 $remise_percent = (float)
price2num($remise_percent);
699 $price_min = (float)
price2num((
float) $price_min);
700 if ($usercanproductignorepricemin && (!empty($price_min) && ($pu_ht * (1 - $remise_percent / 100) < $price_min))) {
701 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
702 setEventMessages($mesg,
null,
'errors');
705 $result =
$object->addline($idprod, (
string) $ref_fournisseur, $label, $desc, $pu_ht, $pu_ttc, (
float) $qty, $remise_percent, (
string) $tva_tx, $localtax1_tx, $localtax2_tx, $price_base_type, $type, $date_start_fill, $date_end_fill, $info_bits, $special_code, -1, $fk_unit);
710 unset($_POST[
'prod_entry_mode']);
711 unset($_POST[
'qty']);
712 unset($_POST[
'type']);
713 unset($_POST[
'remise_percent']);
714 unset($_POST[
'price_ht']);
715 unset($_POST[
'multicurrency_price_ht']);
716 unset($_POST[
'price_ttc']);
717 unset($_POST[
'tva_tx']);
718 unset($_POST[
'product_ref']);
719 unset($_POST[
'product_label']);
720 unset($_POST[
'product_desc']);
721 unset($_POST[
'fournprice']);
722 unset($_POST[
'buying_price']);
723 unset($_POST[
'np_marginRate']);
724 unset($_POST[
'np_markRate']);
725 unset($_POST[
'dp_desc']);
726 unset($_POST[
'idprod']);
727 unset($_POST[
'units']);
728 unset($_POST[
'date_starthour']);
729 unset($_POST[
'date_startmin']);
730 unset($_POST[
'date_startsec']);
731 unset($_POST[
'date_startday']);
732 unset($_POST[
'date_startmonth']);
733 unset($_POST[
'date_startyear']);
734 unset($_POST[
'date_endhour']);
735 unset($_POST[
'date_endmin']);
736 unset($_POST[
'date_endsec']);
737 unset($_POST[
'date_endday']);
738 unset($_POST[
'date_endmonth']);
739 unset($_POST[
'date_endyear']);
740 unset($_POST[
'date_start_fill']);
741 unset($_POST[
'date_end_fill']);
742 unset($_POST[
'situations']);
743 unset($_POST[
'progress']);
744 unset($_POST[
'fourn_ref']);
752 } elseif ($action ==
'updateline' && $permissiontoadd && !
GETPOST(
'cancel',
'alpha')) {
753 if (!
$object->fetch($id) > 0) {
754 dol_print_error($db);
762 $ref_fourn =
GETPOST(
'fourn_ref',
'alpha');
771 if (preg_match(
'/\*/', $vat_rate)) {
776 $vat_rate = str_replace(
'*',
'', $vat_rate);
781 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
782 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
785 if ($objectline->fetch(
GETPOSTINT(
'lineid'))) {
786 $objectline->array_options = $array_options;
787 $result = $objectline->insertExtraFields();
789 setEventMessages($langs->trans(
'Error') . $result,
null,
'errors');
793 $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
796 if (is_array($extralabelsline)) {
798 foreach ($extralabelsline as $key => $value) {
799 unset($_POST[
"options_" . $key]);
805 if (!
GETPOST(
'qty',
'alpha')) {
813 if (!empty($productid)) {
815 $product->fetch($productid);
817 $type = $product->type;
819 $price_min = $product->price_min;
821 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
824 $label = $product->label;
827 if (((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
"produit",
"ignore_price_min_advance")) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS')) && $price_min && ((
float)
price2num($pu_ht) * (1 - (
float) $remise_percent / 100) < (
float)
price2num($price_min))) {
828 setEventMessages($langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency)),
null,
'errors');
833 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
837 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
842 $langs->load(
"errors");
843 setEventMessages($langs->trans(
'ErrorQtyForSupplierInvoiceCantBeNegative'),
null,
'errors');
847 $date_start_fill =
GETPOSTINT(
'date_start_fill');
852 $result =
$object->updateline(
GETPOSTINT(
'lineid'),
GETPOSTINT(
'productid'), $ref_fourn, $label, $description, (
float) $pu_ht, (
float) $qty, (
float) $remise_percent, $vat_rate, $localtax1_rate, $localtax1_rate,
'HT', $type, $date_start_fill, $date_end_fill, $info_bits, $special_code, -1);
856 unset($_POST[
'qty']);
857 unset($_POST[
'type']);
858 unset($_POST[
'productid']);
859 unset($_POST[
'remise_percent']);
860 unset($_POST[
'price_ht']);
861 unset($_POST[
'multicurrency_price_ht']);
862 unset($_POST[
'price_ttc']);
863 unset($_POST[
'tva_tx']);
864 unset($_POST[
'product_ref']);
865 unset($_POST[
'product_label']);
866 unset($_POST[
'product_desc']);
867 unset($_POST[
'fournprice']);
868 unset($_POST[
'buying_price']);
869 unset($_POST[
'np_marginRate']);
870 unset($_POST[
'np_markRate']);
871 unset($_POST[
'dp_desc']);
872 unset($_POST[
'idprod']);
873 unset($_POST[
'units']);
874 unset($_POST[
'date_starthour']);
875 unset($_POST[
'date_startmin']);
876 unset($_POST[
'date_startsec']);
877 unset($_POST[
'date_startday']);
878 unset($_POST[
'date_startmonth']);
879 unset($_POST[
'date_startyear']);
880 unset($_POST[
'date_endhour']);
881 unset($_POST[
'date_endmin']);
882 unset($_POST[
'date_endsec']);
883 unset($_POST[
'date_endday']);
884 unset($_POST[
'date_endmonth']);
885 unset($_POST[
'date_endyear']);
886 unset($_POST[
'situations']);
887 unset($_POST[
'progress']);
888 unset($_POST[
'fourn_ref']);
901$title = $langs->trans(
"RepeatableSupplierInvoice");
903llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-fourn-facture page-card-rec');
905$form =
new Form($db);
912$companystatic =
new Societe($db);
919if ($action ==
'create') {
920 print
load_fiche_titre($langs->trans(
"CreateRepeatableInvoice"),
'',
'bill');
923 $product_static =
new Product($db);
925 if (
$object->fetch($id, $ref) > 0) {
926 $result =
$object->fetch_lines();
928 print
'<form action="' . $_SERVER[
"PHP_SELF"] .
'" method="POST">';
929 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
930 print
'<input type="hidden" name="action" value="add">';
931 print
'<input type="hidden" name="facid" value="' .
$object->id .
'">';
943 print
'<table class="border centpercent">';
948 print
'<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans(
"Title") .
'</td><td>';
949 print
'<input class="flat quatrevingtpercent" type="text" name="title" value="' .
dol_escape_htmltag(
GETPOST(
"title",
'alphanohtml')) .
'" autofocus>';
953 print
'<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans(
"RefSupplier") .
'</td><td>';
954 print
'<input class="flat maxwidth500" type="text" name="ref_supplier" value="' .
$object->ref_supplier .
'">';
958 print
'<tr><td class="titlefieldcreate">' . $langs->trans(
"Supplier") .
'</td><td>' .
$object->thirdparty->getNomUrl(1,
'supplier') .
'</td>';
963 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
972 $substitutionarray = getCommonSubstitutionArray($langs, 2,
null, $object);
974 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%m') .
')';
975 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%m') .
')';
976 $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%m') .
')';
977 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%B') .
')';
978 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%B') .
')';
979 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%B') .
')';
980 $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'y'),
'%Y') .
')';
981 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%Y') .
')';
984 $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans(
"DateNextInvoiceBeforeGen") . (isset(
$object->date_when) ?
' (' . $langs->trans(
"Example") .
': ' .dol_print_date(
$object->date_when,
'dayhour') .
')' :
'');
985 $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_AFTER_GEN__'] = $langs->trans(
"DateNextInvoiceAfterGen") . (isset(
$object->date_when) ?
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date_when,
$object->frequency,
$object->unit_frequency),
'dayhour') .
')' :
'');
986 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $langs->trans(
"Count");
987 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $langs->trans(
"MaxPeriodNumber");
989 $htmltext =
'<i>' . $langs->trans(
"FollowingConstantsWillBeSubstituted") .
':<br>';
990 foreach ($substitutionarray as $key => $val) {
991 $htmltext .= $key .
' = ' . $langs->trans($val) .
'<br>';
996 print
'<tr><td class="titlefieldcreate">' . $langs->trans(
"Label") .
'</td><td>';
997 print
'<input class="flat quatrevingtpercent" type="text" name="label" value="' .
$object->label .
'">';
1001 print
"<tr><td>" . $langs->trans(
"Author") .
"</td><td>" . $user->getFullName($langs) .
"</td></tr>";
1004 print
"<tr><td>" . $langs->trans(
"PaymentConditions") .
"</td><td>";
1005 print $form->getSelectConditionsPaiements(
GETPOSTISSET(
'cond_reglement_id') ?
GETPOST(
'cond_reglement_id',
'int') :
$object->cond_reglement_id,
'cond_reglement_id', -1, 0, 0,
'');
1009 print
"<tr><td>" . $langs->trans(
"PaymentMode") .
"</td><td>";
1010 print img_picto(
'',
'payment',
'class="pictofixedwidth"');
1011 print $form->select_types_paiements(
GETPOSTISSET(
'mode_reglement_id') ?
GETPOST(
'mode_reglement_id',
'int') :
$object->mode_reglement_id,
'mode_reglement_id',
'', 0, 1, 0, 0, 1,
'', 1);
1017 $langs->load(
'projects');
1018 print
'<tr><td>' . $langs->trans(
'Project') .
'</td><td>';
1019 $numprojet = $formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->thirdparty->id : -1), $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 0, 0,
'');
1020 print
' <a href="' . DOL_URL_ROOT .
'/projet/card.php?socid=' .
$object->thirdparty->id .
'&action=create&status=1&backtopage=' . urlencode($_SERVER[
"PHP_SELF"] .
'?action=create&socid=' .
$object->thirdparty->id . (!empty($id) ?
'&id=' . $id :
'')) .
'">' . $langs->trans(
"AddProject") .
'</a>';
1025 if (
$object->fk_account > 0) {
1026 print
"<tr><td>" . $langs->trans(
'BankAccount') .
"</td><td>";
1027 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->fk_account,
'none');
1035 $extralabels = $extrafields->fetch_name_optionals_label($draft->table_element);
1036 if ($draft->fetch_optionals() > 0) {
1037 $object->array_options = array_merge(
$object->array_options, $draft->array_options);
1040 print
$object->showOptionals($extrafields,
'create', $parameters);
1043 print
"<tr><td>" . $langs->trans(
'Model') .
"</td><td>";
1044 include_once DOL_DOCUMENT_ROOT .
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
1046 print $form->selectarray(
'modelpdf', $list,
getDolGlobalString(
'INVOICE_SUPPLIER_ADDON_PDF'));
1051 print
'<td class="tdtop">';
1052 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic');
1055 $doleditor =
new DolEditor(
'note_public', $note_public,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1056 print $doleditor->Create(1);
1059 if (empty($user->socid)) {
1061 print
'<td class="tdtop">';
1062 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate');
1065 $doleditor =
new DolEditor(
'note_private', $note_private,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1066 print $doleditor->Create(1);
1075 $title = $langs->trans(
"Recurrence");
1076 print
load_fiche_titre(img_picto(
'',
'recurring',
'class="pictofixedwidth"') . $title,
'',
'');
1078 print
'<span class="opacitymedium">'.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name')).
'</span><br><br>';
1082 print
'<table class="border centpercent">';
1085 print
'<tr><td class="titlefieldcreate">' . $form->textwithpicto($langs->trans(
"Frequency"), $langs->transnoentitiesnoconv(
'toolTipFrequency')) .
"</td><td>";
1086 print
"<input type='text' class='width50' name='frequency' value='" .
GETPOSTINT(
'frequency') .
"' size='4' /> " . $form->selectarray(
'unit_frequency', array(
'd' => $langs->trans(
'Day'),
'm' => $langs->trans(
'Month'),
'y' => $langs->trans(
'Year')), (
GETPOST(
'unit_frequency') ?
GETPOST(
'unit_frequency') :
'm'));
1090 print
"<tr><td>" . $langs->trans(
'NextDateToExecution') .
"</td><td>";
1092 print $form->selectDate($date_next_execution,
'', 1, 1, 0,
"add", 1, 1);
1096 print
"<tr><td>" . $langs->trans(
"MaxPeriodNumber") .
"</td><td>";
1097 print
'<input type="text" class="width50" name="nb_gen_max" value="' .
GETPOSTINT(
'nb_gen_max') .
'">';
1101 print
"<tr><td>" . $langs->trans(
"StatusOfAutoGeneratedInvoices") .
"</td><td>";
1102 $select = array(
'0' => $langs->trans(
'BillStatusDraft'),
'1' => $langs->trans(
'BillStatusValidated'));
1103 print $form->selectarray(
'auto_validate', $select,
GETPOSTINT(
'auto_validate'));
1108 print
"<tr><td>" . $langs->trans(
"StatusOfGeneratedDocuments") .
"</td><td>";
1109 $select = array(
'0' => $langs->trans(
'DoNotGenerateDoc'),
'1' => $langs->trans(
'AutoGenerateDoc'));
1110 print $form->selectarray(
'generate_pdf', $select,
GETPOSTINT(
'generate_pdf'));
1113 print
'<input type="hidden" name="generate_pdf" value="1">';
1120 $title = $langs->trans(
"ProductsAndServices");
1122 $title = $langs->trans(
"Products");
1124 $title = $langs->trans(
"Services");
1132 print
'<div class="div-table-responsive-no-min">';
1133 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1147 print $form->buttonsSaveCancel(
"Create");
1151 dol_print_error(
null,
"Error, no invoice " .
$object->id);
1162 if ($action ==
'ask_deleteline') {
1163 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&lineid=' . $lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'',
'no', 1);
1167 if ($action ==
'ask_deleteinvoice') {
1168 $formconfirm = $form->formconfirm(
dolBuildUrl($_SERVER[
"PHP_SELF"], [
'id' =>
$object->id]), $langs->trans(
'DeleteRepeatableInvoice'), $langs->trans(
'ConfirmDeleteRepeatableInvoice'),
'confirm_deleteinvoice',
'',
'no', 1);
1173 $author =
new User($db);
1174 $author->fetch(
$object->user_creation_id);
1182 $linkback =
'<a href="' . DOL_URL_ROOT .
'/fourn/facture/list-rec.php?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
'BackToList') .
'</a>';
1185 if ($action !=
'edittitle') {
1186 $morehtmlref .= $form->editfieldkey(
$object->title,
'title',
$object->title, $object, (
int) $usercancreate,
'',
'', 0, 2);
1188 $morehtmlref .= $form->editfieldval(
'',
'title',
$object->title, $object, $usercancreate,
'string');
1190 $morehtmlref .=
'<div class="refidno">';
1192 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, (
int) $usercancreate,
'string',
'', 0, 1);
1193 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $usercancreate,
'string',
'',
null,
null,
'', 1);
1195 $morehtmlref .=
'<br>' . $langs->trans(
'ThirdParty') .
' : ' .
$object->thirdparty->getNomUrl(1);
1198 if (
isModEnabled(
'project') && $formproject !==
null) {
1199 $langs->load(
'projects');
1200 $morehtmlref .=
'<br>' . $langs->trans(
'Project') .
' ';
1201 if ($usercancreate) {
1202 if ($action !=
'classify') {
1203 $morehtmlref .=
'<a class="editfielda" href="' . $_SERVER[
'PHP_SELF'] .
'?action=classify&token=' .
newToken() .
'&id=' .
$object->id .
'">' . img_edit($langs->transnoentitiesnoconv(
'SetProject')) .
'</a> : ';
1205 if ($action ==
'classify') {
1206 $morehtmlref .=
'<form method="post" action="' . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'">';
1207 $morehtmlref .=
'<input type="hidden" name="action" value="classin">';
1208 $morehtmlref .=
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1209 $morehtmlref .= $formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->socid : -1), (string)
$object->fk_project,
'projectid', 0, 0, 1, 0, 1, 0, 0,
'', 1);
1210 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="' . $langs->trans(
"Modify") .
'">';
1211 $morehtmlref .=
'</form>';
1213 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->socid : -1),
$object->fk_project,
'none', 0, 0, 0, 1,
'',
'maxwidth300');
1216 if (!empty(
$object->fk_project)) {
1218 $project->fetch(
$object->fk_project);
1219 $morehtmlref .=
' : ' . $project->getNomUrl(1);
1220 if ($project->title) {
1221 $morehtmlref .=
' - ' . $project->title;
1228 $morehtmlref .=
'</div>';
1230 $morehtmlstatus =
'';
1232 dol_banner_tab($object,
'ref', $linkback, 1,
'title',
'none', $morehtmlref,
'', 0,
'', $morehtmlstatus);
1234 print
'<div class="fichecenter">';
1235 print
'<div class="fichehalfleft">';
1236 print
'<div class="underbanner clearboth"></div>';
1238 print
'<table class="border centpercent tableforfield">';
1242 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1243 print
$object->getSubtypeLabel(
'facture_fourn_rec');
1248 print
'<tr><td class="titlefield">' . $langs->trans(
'Author') .
'</td><td>';
1249 print $author->getNomUrl(-1);
1254 print
'<td>' . $form->editfieldkey(
"Label",
'label',
$object->label, $object, (
int) $usercancreate) .
'</td>';
1255 print
'<td>' . $form->editfieldval(
"Label",
'label',
$object->label, $object, $usercancreate) .
'</td>';
1260 print
'<table class="nobordernopadding centpercent"><tr><td>';
1261 print $langs->trans(
'PaymentConditionsShort');
1263 if ($action !=
'editconditions' && $usercancreate) {
1264 print
'<td class="right"><a class="editfielda" href="' . $_SERVER[
"PHP_SELF"] .
'?action=editconditions&token=' .
newToken() .
'&facid=' .
$object->id .
'">' . img_edit($langs->trans(
'SetConditions'), 1) .
'</a></td>';
1266 print
'</tr></table>';
1268 if ($action ==
'editconditions') {
1269 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id');
1271 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id, (
string)
$object->cond_reglement_id,
'none');
1278 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1279 print $langs->trans(
'PaymentMode');
1281 if ($action !=
'editmode' && $usercancreate) {
1282 print
'<td class="right"><a class="editfielda" href="' . $_SERVER[
"PHP_SELF"] .
'?action=editmode&token=' .
newToken() .
'&facid=' .
$object->id .
'">' . img_edit($langs->trans(
'SetMode'), 1) .
'</a></td>';
1284 print
'</tr></table>';
1286 if ($action ==
'editmode') {
1287 $form->form_modes_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
1289 $form->form_modes_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id, (
string)
$object->mode_reglement_id,
'none');
1294 print
'<tr><td class="nowrap">';
1295 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1296 print $langs->trans(
'BankAccount');
1298 if ($action !=
'editbankaccount' && $usercancreate &&
$object->status == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1299 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>';
1301 print
'</tr></table>';
1303 if ($action ==
'editbankaccount') {
1304 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
1306 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id, (
string)
$object->fk_account,
'none');
1312 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1315 print
'<tr><td class="nowrap">';
1316 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
1317 print $langs->trans(
'Model');
1319 if ($action !=
'editmodelpdf' && $usercancreate &&
$object->status == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1320 print
'<td class="right"><a class="editfielda" href="' . $_SERVER[
'PHP_SELF'] .
'?action=editmodelpdf&token=' .
newToken() .
'&id=' .
$object->id .
'">' . img_edit($langs->trans(
'SetModel'), 1) .
'</a></td>';
1322 print
'</tr></table>';
1324 if ($action ==
'editmodelpdf') {
1325 include_once DOL_DOCUMENT_ROOT .
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
1328 foreach ($models as $k => $model) {
1329 $list[] = str_replace(
':',
'|', $k) .
':' . $model;
1331 $select =
'select;' . implode(
',', $list);
1333 print $form->editfieldval($langs->trans(
'Model'),
'modelpdf',
$object->model_pdf, $object, $usercancreate, $select);
1346 print
'<div class="fichehalfright">';
1347 print
'<div class="underbanner clearboth"></div>';
1352 $title = $langs->trans(
"Recurrence");
1355 print
'<table class="border centpercent tableforfield">';
1357 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
1360 print
'<tr><td>' . $langs->trans(
'AmountHT') .
'</td>';
1361 print
'<td>' .
price(
$object->total_ht, 0, $langs, 1, -1, -1,
$conf->currency) .
'</td>';
1364 print
'<tr><td>' . $langs->trans(
"AmountVAT") .
'</td><td>' .
price(
$object->total_tva, 0, $langs, 1, -1, -1,
$conf->currency) .
'</td>';
1368 if ((
$mysoc->localtax1_assuj ==
"1" &&
$mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
1369 print
'<tr><td>' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
1370 print
'<td class="nowrap">' .
price(
$object->total_localtax1, 1,
'', 1, -1, -1,
$conf->currency) .
'</td></tr>';
1372 if ((
$mysoc->localtax2_assuj ==
"1" &&
$mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
1373 print
'<tr><td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
1374 print
'<td class=nowrap">' .
price(
$object->total_localtax2, 1,
'', 1, -1, -1,
$conf->currency) .
'</td></tr>';
1377 print
'<tr><td>' . $langs->trans(
"AmountTTC") .
'</td><td colspan="3">' .
price(
$object->total_ttc, 0, $langs, 1, -1, -1,
$conf->currency) .
'</td>';
1381 print
'<tr class="liste_titre"><td colspan="2" class="liste_titre">' . img_picto(
'',
'recurring',
'class="pictofixedwidth"') . $title .
'</td></tr>';
1384 print
'<tr><td style="width: 50%">';
1385 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1386 print $langs->trans(
'Frequency');
1388 if ($action !=
'editfrequency' && $usercancreate) {
1389 print
'<td class="right"><a class="editfielda" href="' . $_SERVER[
"PHP_SELF"] .
'?action=editfrequency&token=' .
newToken() .
'&facid=' .
$object->id .
'">' . img_edit($langs->trans(
'Edit'), 1) .
'</a></td>';
1391 print
'</tr></table>';
1393 if ($action ==
'editfrequency') {
1394 print
'<form method="post" action="' . $_SERVER[
"PHP_SELF"] .
'?facid=' .
$object->id .
'">';
1395 print
'<input type="hidden" name="action" value="setfrequency">';
1396 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1397 print
'<table class="nobordernopadding">';
1399 print
"<input type='text' name='frequency' value='" .
$object->frequency .
"' size='5' /> " . $form->selectarray(
'unit_frequency', array(
'd' => $langs->trans(
'Day'),
'm' => $langs->trans(
'Month'),
'y' => $langs->trans(
'Year')), (
$object->unit_frequency ?
$object->unit_frequency :
'm'));
1401 print
'<td class="left"><input type="submit" class="button button-edit" value="' . $langs->trans(
"Modify") .
'"></td>';
1402 print
'</tr></table></form>';
1405 print $langs->trans(
'FrequencyPer_' .
$object->unit_frequency,
$object->frequency);
1407 print
'<span class="opacitymedium">'.$langs->trans(
"NotARecurringInvoiceTemplate").
'</span>';
1415 if ($action ==
'date_when' ||
$object->frequency > 0) {
1416 print $form->editfieldkey($langs->trans(
"NextDateToExecution"),
'date_when', (
string)
$object->date_when, $object, (
int) $usercancreate,
'day');
1418 print $langs->trans(
"NextDateToExecution");
1421 if ($action ==
'date_when' ||
$object->frequency > 0) {
1422 print $form->editfieldval($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $usercancreate,
'day',
$object->date_when,
null,
'',
'', 0,
'strikeIfMaxNbGenReached');
1425 if (!
$object->isMaxNbGenReached()) {
1427 print img_warning($langs->trans(
"Late"));
1430 print img_info($langs->trans(
"MaxNumberOfGenerationReached"));
1437 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1438 print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max', (
string)
$object->nb_gen_max, $object, (
int) $usercancreate);
1440 print $langs->trans(
"MaxPeriodNumber");
1443 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1444 print $form->editfieldval($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max ?
$object->nb_gen_max :
'',
$object, $usercancreate);
1453 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1454 print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate', (
string)
$object->auto_validate, $object, (
int) $usercancreate);
1456 print $langs->trans(
"StatusOfAutoGeneratedInvoices");
1459 $select =
'select;0:' . $langs->trans(
'BillStatusDraft') .
',1:' . $langs->trans(
'BillStatusValidated');
1460 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1461 print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $usercancreate, $select);
1468 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1469 print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf', (
string)
$object->generate_pdf, $object, (
int) $usercancreate);
1471 print $langs->trans(
"StatusOfGeneratedDocuments");
1475 $select =
'select;0:' . $langs->trans(
'DoNotGenerateDoc') .
',1:' . $langs->trans(
'AutogenerateDoc');
1476 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1477 print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $usercancreate, $select);
1482 print
'<input type="hidden" name="generate_pdf" value="1">';
1493 print
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
1496 print
'<div class="underbanner clearboth"></div>';
1497 print
'<table class="border centpercent tableforfield">';
1500 print
'<tr><td style="width: 50%">' . $langs->trans(
"NbOfGenerationDone") .
'</td>';
1508 print $langs->trans(
"DateLastGeneration");
1522 print
'<div class="clearboth"></div><br>';
1525 print
' <form name="addproduct" id="addproduct" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id . (($action !=
'editline') ?
'#add' :
'#line_' .
GETPOSTINT(
'lineid')) .
'" method="POST">
1526 <input type="hidden" name="token" value="' .
newToken() .
'">
1527 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline') .
'">
1528 <input type="hidden" name="mode" value="">
1529 <input type="hidden" name="id" value="' .
$object->id .
'">
1532 if (!empty(
$conf->use_javascript_ajax) &&
$object->status == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1533 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
1536 print
'<div class="div-table-responsive-no-min">';
1537 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1541 global $canchangeproduct;
1542 $canchangeproduct = 0;
1551 if (
$object->status == FactureFournisseurRec::STATUS_NOTSUSPENDED && $usercancreate && $action !=
'valid' && $action !=
'editline') {
1552 if ($action !=
'editline') {
1555 $parameters = array();
1556 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
1558 setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
1560 if (empty($reshook)) {
1561 global $senderissupplier;
1563 $senderissupplier = 2;
1578 print
'<div class="tabsAction">';
1580 if (empty(
$object->suspended)) {
1581 if ($usercancreate) {
1583 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1585 if (empty(
$object->frequency) ||
$object->date_when <= $nowlasthour) {
1586 print
'<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT .
'/fourn/facture/card.php?action=create&socid=' .
$object->thirdparty->id .
'&fac_rec=' .
$object->id .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1588 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1592 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") .
'</a></div>';
1596 if ($usercancreate) {
1597 if (empty(
$object->suspended)) {
1598 print
'<div class="inline-block divButAction"><a class="butActionDelete" href="' . $_SERVER[
"PHP_SELF"] .
'?action=disable&id=' .
$object->id .
'&token=' .
newToken() .
'">' . $langs->trans(
"Disable") .
'</a></div>';
1600 print
'<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER[
"PHP_SELF"] .
'?action=enable&id=' .
$object->id .
'&token=' .
newToken() .
'">' . $langs->trans(
"Enable") .
'</a></div>';
1605 print dolGetButtonAction($langs->trans(
"Delete"), $langs->trans(
"Delete"),
'delete', $_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=ask_deleteinvoice&token='.
newToken(),
'delete', ($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer")), array(
'attr' => array(
'class' =>
'reposition'))).
"\n";
1609 print
'<div class="fichecenter"><div class="fichehalfleft">';
1610 print
'<a name="builddoc"></a>';
1613 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'invoice'), 1);
1614 $linktoelem = $tmparray[
'linktoelem'];
1615 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1616 print $htmltoenteralink;
1618 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1620 print
'</div></div>';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage a WYSIWYG editor.
Class to manage suppliers invoices.
Class to manage supplier invoice lines of templates.
Class to manage invoice templates.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
dol_get_last_hour($date, $gm='tzserver')
Return GMT time for last hour of a given GMT date (it replaces hours, min and second part to 23:59:59...
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
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.
$date_start
Variables from include:
dol_now($mode='gmt')
Return date for now.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dolBuildUrl($url, $params=[], $addtoken=false, $anchor='')
Return path of url.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
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.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
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...
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_clone($srcobject, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular VAT rate, when selling a product with vat $vatrate,...
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='', $morecssonpicto='widthpictotitle')
Load a title with picto.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='', $textonpictotooltip='', $cssfordropdown='info_admin')
Show information in HTML for admin users or standard users.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
supplier_invoice_rec_prepare_head($object)
Return array head with list of tabs to view object information.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $nodie=0, $mode='')
Check permissions of a user to show a page and an object.