36require
'../../main.inc.php';
37require_once DOL_DOCUMENT_ROOT .
'/fourn/class/fournisseur.facture-rec.class.php';
38require_once DOL_DOCUMENT_ROOT .
'/fourn/class/fournisseur.product.class.php';
39require_once DOL_DOCUMENT_ROOT .
'/product/class/product.class.php';
40require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formother.class.php';
41if (isModEnabled(
'project')) {
42 include_once DOL_DOCUMENT_ROOT .
'/projet/class/project.class.php';
44require_once DOL_DOCUMENT_ROOT .
'/core/class/html.formprojet.class.php';
45require_once DOL_DOCUMENT_ROOT .
'/core/class/doleditor.class.php';
46require_once DOL_DOCUMENT_ROOT .
'/core/lib/invoice.lib.php';
47require_once DOL_DOCUMENT_ROOT .
'/core/class/extrafields.class.php';
50$langs->loadLangs(array(
'bills',
'companies',
'compta',
'admin',
'other',
'products',
'banks',
'suppliers'));
52$action =
GETPOST(
'action',
'alpha');
53$massaction =
GETPOST(
'massaction',
'alpha');
55$confirm =
GETPOST(
'confirm',
'alpha');
56$cancel =
GETPOST(
'cancel',
'alpha');
57$toselect =
GETPOST(
'toselect',
'array');
58$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'supplierinvoicetemplatelist';
61$sortfield =
GETPOST(
"sortfield",
'alpha');
62$sortorder =
GETPOST(
"sortorder",
'alpha');
68$title =
GETPOST(
'title',
'alpha');
69$libelle =
GETPOST(
'libelle',
'alpha');
70$ref_supplier =
GETPOST(
'ref_supplier',
'alpha');
72$year_date_when =
GETPOST(
'year_date_when');
73$month_date_when =
GETPOST(
'month_date_when');
77 $socid = $user->socid;
79$objecttype =
'facture_fourn_rec';
80if ($action ==
"create" || $action ==
"add") {
84if (empty($page) || $page == -1) {
87$offset = $limit * $page;
92 $sortfield =
'f.titre';
98if (($id > 0 || $title) && $action !=
'create' && $action !=
'add') {
99 $ret =
$object->fetch($id, $title);
106$hookmanager->initHooks(array(
'supplierinvoicereccard',
'globalcard'));
110$extrafields->fetch_name_optionals_label(
$object->table_element);
112$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
114$permissionnote = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
115$permissiondellink = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
116$permissiontoedit = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
118$usercanread = $user->hasRight(
"fournisseur",
"facture",
"lire") || $user->hasRight(
"supplier_invoice",
"lire");
119$usercancreate = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
120$usercandelete = $user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer");
121$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"validate")));
122$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"send"));
124$usercanproductignorepricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
"produit",
"ignore_price_min_advance")) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
125$usercancreatemargin = $user->hasRight(
"margins",
"creer");
126$usercanreadallmargin = $user->hasRight(
"margins",
"liretous");
127$usercancreatewithdrarequest = $user->hasRight(
"prelevement",
"bons",
"creer");
140if (
GETPOST(
'cancel',
'alpha')) {
144if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
148$parameters = array(
'socid' => $socid);
149$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
154if (empty($reshook)) {
155 if (
GETPOST(
'cancel',
'alpha')) {
160 include DOL_DOCUMENT_ROOT .
'/core/actions_changeselectedfields.inc.php';
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 ==
'add') {
171 if (!
GETPOST(
'title',
'alphanohtml')) {
172 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Title")),
null,
'errors');
187 if (empty($reyear) || empty($remonth) || empty($reday)) {
188 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Date")),
null,
'errors');
207 $object->frequency = $frequency;
209 $object->nb_gen_max = $nb_gen_max;
213 $date_next_execution =
dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
214 $object->date_when = $date_next_execution;
216 $ret = $extrafields->setOptionalsFromPost(
null, $object);
228 $result =
$object->create($user, $oldinvoice->id);
231 $result = $oldinvoice->delete($user, 1);
246 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id);
260 if ($action ==
'confirm_deleteinvoice' && $confirm ==
'yes' && ($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer"))) {
263 header(
'Location: ' . DOL_URL_ROOT .
'/fourn/facture/list-rec.php');
269 if ($action ==
'setconditions' && $usercancreate) {
271 } elseif ($action ==
'setmode' && $usercancreate) {
274 } elseif ($action ==
'classin' && $usercancreate) {
277 } elseif ($action ==
'setref_supplier' && $usercancreate) {
278 $result =
$object->setValueFrom(
'ref_supplier', $ref_supplier,
'',
null,
'text',
'', $user);
282 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
283 $langs->load(
"errors");
284 setEventMessages($langs->trans(
'ErrorRefAlreadyExists', $ref_supplier),
null,
'errors');
289 } elseif ($action ==
'settitle' && $usercancreate) {
290 $result =
$object->setValueFrom(
'titre', $title,
'',
null,
'text',
'', $user);
298 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
299 $langs->load(
"errors");
300 setEventMessages($langs->trans(
'ErrorTitreAlreadyExists', $title),
null,
'errors');
305 } elseif ($action ==
'setbankaccount' && $usercancreate) {
308 } elseif ($action ==
'setfrequency' && $usercancreate) {
311 } elseif ($action ==
'setdate_when' && $usercancreate) {
317 } elseif ($action ==
'setnb_gen_max' && $usercancreate) {
320 } elseif ($action ==
'setauto_validate' && $usercancreate) {
323 } elseif ($action ==
'setgenerate_pdf' && $usercancreate) {
326 } elseif ($action ==
'setmodelpdf' && $usercancreate) {
329 } elseif ($action ==
'disable' && $usercancreate) {
335 $res =
$object->setValueFrom(
'suspended', 1);
346 } elseif ($action ==
'enable' && $usercancreate) {
352 $res =
$object->setValueFrom(
'suspended', 0);
363 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
365 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
366 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
369 } elseif ($action ==
'setlibelle' && $usercancreate) {
374 $result =
$object->update($user);
382 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
393 if ($line->delete($user) > 0) {
394 $result =
$object->update_price(1);
407 } elseif ($action ==
'update_extras' && $usercancreate) {
411 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
417 $result =
$object->insertExtraFields(
'BILLREC_MODIFY');
426 if ($action ==
'addline' && $usercancreate) {
427 $langs->load(
'errors');
432 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
435 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'alpha');
436 if ($prod_entry_mode ==
'free') {
438 $tva_tx = (
GETPOST(
'tva_tx',
'alpha') ?
GETPOST(
'tva_tx',
'alpha') : 0);
439 $ref_fournisseur = (GETPOSTISSET(
'fourn_ref') ?
GETPOST(
'fourn_ref',
'restricthtml') :
'');
449 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
450 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
452 if (is_array($extralabelsline)) {
454 foreach ($extralabelsline as $key => $value) {
455 unset($_POST[
"options_" . $key . $predef]);
459 if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) {
460 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
463 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
464 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
467 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && (! ($price_ht >= 0) || $price_ht ==
'')) {
468 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
472 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
475 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
476 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
480 $langs->load(
"errors");
481 setEventMessages($langs->trans(
'ErrorQtyForSupplierInvoiceCantBeNegative'),
null,
'errors');
485 if ($prod_entry_mode !=
'free' && empty($error)) {
489 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
493 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
494 $idprod = (int) $reg[1];
495 $res = $productsupplier->fetch($idprod);
498 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
500 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
501 if ($productsupplier->fourn_socid != $socid) {
502 $productsupplier->ref_supplier =
'';
505 $fksoctosearch =
$object->thirdparty->id;
506 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
508 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
510 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
511 $res = $productsupplier->fetch($idprod);
512 $ref_fournisseur = $productsupplier->ref_supplier;
516 if (! $error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
522 $ret =
$object->fetch_thirdparty();
525 $date_start =
dol_mktime(
GETPOST(
'date_start' . $predef .
'hour'),
GETPOST(
'date_start' . $predef .
'min'),
GETPOST(
'date_start' . $predef .
'sec'),
GETPOST(
'date_start' . $predef .
'month'),
GETPOST(
'date_start' . $predef .
'day'),
GETPOST(
'date_start' . $predef .
'year'));
526 $date_end =
dol_mktime(
GETPOST(
'date_end' . $predef .
'hour'),
GETPOST(
'date_end' . $predef .
'min'),
GETPOST(
'date_end' . $predef .
'sec'),
GETPOST(
'date_end' . $predef .
'month'),
GETPOST(
'date_end' . $predef .
'day'),
GETPOST(
'date_end' . $predef .
'year'));
527 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
538 if (!empty($idprod) && $idprod > 0) {
540 $prod->fetch($idprod);
542 $label = ((
GETPOST(
'product_label') &&
GETPOST(
'product_label') != $prod->label) ?
GETPOST(
'product_label') :
'');
547 if (empty($tva_tx)) {
554 $datapriceofproduct = $prod->getSellPrice(
$object->thirdparty, $mysoc, $pqp);
556 $pu_ht = $datapriceofproduct[
'pu_ht'];
557 $pu_ttc = $datapriceofproduct[
'pu_ttc'];
558 $price_min = $datapriceofproduct[
'price_min'];
559 $price_base_type = empty($datapriceofproduct[
'price_base_type']) ?
'HT' : $datapriceofproduct[
'price_base_type'];
560 $tva_tx = $datapriceofproduct[
'tva_tx'];
561 $tva_npr = $datapriceofproduct[
'tva_npr'];
563 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
564 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $prod->tva_tx));
567 if (!empty($price_ht)) {
569 $pu_ttc =
price2num($pu_ht * (1 + ($tmpvat / 100)),
'MU');
570 } elseif ($tmpvat != $tmpprodvat) {
573 if ($price_base_type !=
'HT') {
574 $pu_ht =
price2num($pu_ttc / (1 + ($tmpvat / 100)),
'MU');
576 $pu_ttc =
price2num($pu_ht * (1 + ($tmpvat / 100)),
'MU');
584 $outputlangs = $langs;
586 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
587 $newlang =
GETPOST(
'lang_id',
'aZ09');
589 if (empty($newlang)) {
590 $newlang =
$object->thirdparty->default_lang;
592 if (!empty($newlang)) {
594 $outputlangs->setDefaultLang($newlang);
597 $desc = (!empty($prod->multilangs [$outputlangs->defaultlang] [
"description"])) ? $prod->multilangs [$outputlangs->defaultlang] [
"description"] : $prod->
description;
599 $desc = $prod->description;
605 if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
609 $outputlangs = $langs;
611 if (empty($newlang) &&
GETPOST(
'lang_id',
'alpha')) {
612 $newlang =
GETPOST(
'lang_id',
'alpha');
614 if (empty($newlang)) {
615 $newlang =
$object->thirdparty->default_lang;
617 if (!empty($newlang)) {
619 $outputlangs->setDefaultLang($newlang);
620 $outputlangs->load(
'products');
622 if (!empty($prod->customcode)) {
623 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomCode") .
': ' . $prod->customcode;
625 if (!empty($prod->customcode) && !empty($prod->country_code)) {
628 if (!empty($prod->country_code)) {
629 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry($prod->country_code, 0, $db, $outputlangs, 0);
632 if (!empty($prod->customcode)) {
633 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomCode") .
': ' . $prod->customcode;
635 if (!empty($prod->customcode) && !empty($prod->country_code)) {
638 if (!empty($prod->country_code)) {
639 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry($prod->country_code, 0, $db, $langs, 0);
647 $fk_unit = $prod->fk_unit;
651 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
652 $tva_tx = str_replace(
'*',
'', $tva_tx);
653 if (empty($tva_tx)) {
656 $desc = $product_desc;
658 $fk_unit =
GETPOST(
'units',
'alpha');
661 $date_start_fill = !empty(
GETPOSTINT(
'date_start_fill')) ?
GETPOSTINT(
'date_start_fill') : null;
678 $remise_percent = (float)
price2num($remise_percent);
680 $price_min = (float)
price2num($price_min);
681 if ($usercanproductignorepricemin && (!empty($price_min) && ($pu_ht * (1 - $remise_percent / 100) < $price_min))) {
682 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1, $conf->currency));
686 $result =
$object->addline($idprod, $ref_fournisseur, $label, $desc, $pu_ht, $pu_ttc, $qty, $remise_percent, $tva_tx, $localtax1_tx, $localtax2_tx, $price_base_type, $type, $date_start_fill, $date_end_fill, $info_bits, $special_code, -1, $fk_unit);
691 unset($_POST[
'prod_entry_mode']);
692 unset($_POST[
'qty']);
693 unset($_POST[
'type']);
694 unset($_POST[
'remise_percent']);
695 unset($_POST[
'price_ht']);
696 unset($_POST[
'multicurrency_price_ht']);
697 unset($_POST[
'price_ttc']);
698 unset($_POST[
'tva_tx']);
699 unset($_POST[
'product_ref']);
700 unset($_POST[
'product_label']);
701 unset($_POST[
'product_desc']);
702 unset($_POST[
'fournprice']);
703 unset($_POST[
'buying_price']);
704 unset($_POST[
'np_marginRate']);
705 unset($_POST[
'np_markRate']);
706 unset($_POST[
'dp_desc']);
707 unset($_POST[
'idprod']);
708 unset($_POST[
'units']);
709 unset($_POST[
'date_starthour']);
710 unset($_POST[
'date_startmin']);
711 unset($_POST[
'date_startsec']);
712 unset($_POST[
'date_startday']);
713 unset($_POST[
'date_startmonth']);
714 unset($_POST[
'date_startyear']);
715 unset($_POST[
'date_endhour']);
716 unset($_POST[
'date_endmin']);
717 unset($_POST[
'date_endsec']);
718 unset($_POST[
'date_endday']);
719 unset($_POST[
'date_endmonth']);
720 unset($_POST[
'date_endyear']);
721 unset($_POST[
'date_start_fill']);
722 unset($_POST[
'date_end_fill']);
723 unset($_POST[
'situations']);
724 unset($_POST[
'progress']);
725 unset($_POST[
'fourn_ref']);
733 } elseif ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
734 if (!
$object->fetch($id) > 0) {
743 $ref_fourn =
GETPOST(
'fourn_ref',
'alpha');
751 if (preg_match(
'/\*/', $vat_rate)) {
756 $vat_rate = str_replace(
'*',
'', $vat_rate);
761 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
762 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
765 if ($objectline->fetch(
GETPOSTINT(
'lineid'))) {
766 $objectline->array_options = $array_options;
767 $result = $objectline->insertExtraFields();
773 $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
776 if (is_array($extralabelsline)) {
778 foreach ($extralabelsline as $key => $value) {
779 unset($_POST[
"options_" . $key]);
785 if (!
GETPOST(
'qty',
'alpha')) {
793 if (!empty($productid)) {
795 $product->fetch($productid);
797 $type = $product->type;
799 $price_min = $product->price_min;
801 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
804 $label = $product->label;
808 setEventMessages($langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1, $conf->currency)),
null,
'errors');
813 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
817 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
822 $langs->load(
"errors");
823 setEventMessages($langs->trans(
'ErrorQtyForSupplierInvoiceCantBeNegative'),
null,
'errors');
827 $date_start_fill = !empty(
GETPOSTINT(
'date_start_fill')) ?
GETPOSTINT(
'date_start_fill') :
'NULL';
832 $result =
$object->updateline(
GETPOSTINT(
'lineid'),
GETPOSTINT(
'productid'), $ref_fourn, $label, $description, $pu_ht, $qty, $remise_percent, $vat_rate, $localtax1_rate, $localtax1_rate,
'HT', $type, $date_start_fill, $date_end_fill, $info_bits, $special_code, -1);
836 unset($_POST[
'qty']);
837 unset($_POST[
'type']);
838 unset($_POST[
'productid']);
839 unset($_POST[
'remise_percent']);
840 unset($_POST[
'price_ht']);
841 unset($_POST[
'multicurrency_price_ht']);
842 unset($_POST[
'price_ttc']);
843 unset($_POST[
'tva_tx']);
844 unset($_POST[
'product_ref']);
845 unset($_POST[
'product_label']);
846 unset($_POST[
'product_desc']);
847 unset($_POST[
'fournprice']);
848 unset($_POST[
'buying_price']);
849 unset($_POST[
'np_marginRate']);
850 unset($_POST[
'np_markRate']);
851 unset($_POST[
'dp_desc']);
852 unset($_POST[
'idprod']);
853 unset($_POST[
'units']);
854 unset($_POST[
'date_starthour']);
855 unset($_POST[
'date_startmin']);
856 unset($_POST[
'date_startsec']);
857 unset($_POST[
'date_startday']);
858 unset($_POST[
'date_startmonth']);
859 unset($_POST[
'date_startyear']);
860 unset($_POST[
'date_endhour']);
861 unset($_POST[
'date_endmin']);
862 unset($_POST[
'date_endsec']);
863 unset($_POST[
'date_endday']);
864 unset($_POST[
'date_endmonth']);
865 unset($_POST[
'date_endyear']);
866 unset($_POST[
'situations']);
867 unset($_POST[
'progress']);
868 unset($_POST[
'fourn_ref']);
881llxHeader(
'', $langs->trans(
"RepeatableSupplierInvoice"), $help_url);
883$form =
new Form($db);
885if (isModEnabled(
'project')) {
888$companystatic =
new Societe($db);
897if ($action ==
'create') {
898 print
load_fiche_titre($langs->trans(
"CreateRepeatableInvoice"),
'',
'bill');
901 $product_static =
new Product($db);
904 $result =
$object->fetch_lines();
906 print
'<form action="' . $_SERVER[
"PHP_SELF"] .
'" method="POST">';
907 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
908 print
'<input type="hidden" name="action" value="add">';
909 print
'<input type="hidden" name="facid" value="' .
$object->id .
'">';
914 if (isModEnabled(
'project')) {
921 print
'<table class="border centpercent">';
926 print
'<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans(
"Title") .
'</td><td>';
927 print
'<input class="flat quatrevingtpercent" type="text" name="title" value="' .
dol_escape_htmltag(
GETPOST(
"title",
'alphanohtml')) .
'" autofocus>';
931 print
'<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans(
"RefSupplier") .
'</td><td>';
932 print
'<input class="flat maxwidth500" type="text" name="ref_supplier" value="' .
$object->ref_supplier .
'">';
936 print
'<tr><td class="titlefieldcreate">' . $langs->trans(
"Supplier") .
'</td><td>' .
$object->thirdparty->getNomUrl(1,
'supplier') .
'</td>';
941 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
942 print $form->getSelectInvoiceSubtype(GETPOSTISSET(
'subtype') ?
GETPOST(
'subtype') :
$object->subtype,
'subtype', 0, 0,
'');
946 $note_public = GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') :
$object->note_public;
947 $note_private = GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') :
$object->note_private;
952 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%m') .
')';
953 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%m') .
')';
954 $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%m') .
')';
955 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%B') .
')';
956 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%B') .
')';
957 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%B') .
')';
958 $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'y'),
'%Y') .
')';
959 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%Y') .
')';
962 $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans(
"DateNextInvoiceBeforeGen") . (isset(
$object->date_when) ?
' (' . $langs->trans(
"Example") .
': ' .dol_print_date(
$object->date_when,
'dayhour') .
')' :
'');
963 $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') .
')' :
'');
964 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $langs->trans(
"Count");
965 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $langs->trans(
"MaxPeriodNumber");
967 $htmltext =
'<i>' . $langs->trans(
"FollowingConstantsWillBeSubstituted") .
':<br>';
968 foreach ($substitutionarray as $key => $val) {
969 $htmltext .= $key .
' = ' . $langs->trans($val) .
'<br>';
974 print
'<tr><td class="titlefieldcreate">' . $langs->trans(
"Label") .
'</td><td>';
975 print
'<input class="flat quatrevingtpercent" type="text" name="libelle" value="' .
$object->label .
'">';
979 print
"<tr><td>" . $langs->trans(
"Author") .
"</td><td>" . $user->getFullName($langs) .
"</td></tr>";
982 print
"<tr><td>" . $langs->trans(
"PaymentConditions") .
"</td><td>";
983 print $form->getSelectConditionsPaiements(GETPOSTISSET(
'cond_reglement_id') ?
GETPOST(
'cond_reglement_id',
'int') :
$object->cond_reglement_id,
'cond_reglement_id', -1, 0, 0,
'');
987 print
"<tr><td>" . $langs->trans(
"PaymentMode") .
"</td><td>";
988 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
989 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);
993 if (isModEnabled(
'project') && is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0) {
995 $langs->load(
'projects');
996 print
'<tr><td>' . $langs->trans(
'Project') .
'</td><td>';
997 $numprojet = $formproject->select_projects(
$object->thirdparty->id, $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 0, 0,
'');
998 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>';
1003 if (
$object->fk_account > 0) {
1004 print
"<tr><td>" . $langs->trans(
'BankAccount') .
"</td><td>";
1005 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'none');
1011 $draft->fetch(
GETPOST(
'facid',
'int'));
1014 $extralabels = $extrafields->fetch_name_optionals_label($draft->table_element);
1015 if ($draft->fetch_optionals() > 0) {
1016 $object->array_options = array_merge(
$object->array_options, $draft->array_options);
1019 print
$object->showOptionals($extrafields,
'create', $parameters);
1022 print
"<tr><td>" . $langs->trans(
'Model') .
"</td><td>";
1023 include_once DOL_DOCUMENT_ROOT .
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
1025 print $form->selectarray(
'modelpdf', $list, $conf->global->INVOICE_SUPPLIER_ADDON_PDF);
1030 print
'<td class="tdtop">';
1031 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic');
1034 $doleditor =
new DolEditor(
'note_public', $note_public,
'', 80,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1035 print $doleditor->Create(1);
1038 if (empty($user->socid)) {
1040 print
'<td class="tdtop">';
1041 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate');
1044 $doleditor =
new DolEditor(
'note_private', $note_private,
'', 80,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1045 print $doleditor->Create(1);
1054 $title = $langs->trans(
"Recurrence");
1057 print
'<span class="opacitymedium">'.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name')).
'</span><br><br>';
1061 print
'<table class="border centpercent">';
1064 print
'<tr><td class="titlefieldcreate">' . $form->textwithpicto($langs->trans(
"Frequency"), $langs->transnoentitiesnoconv(
'toolTipFrequency')) .
"</td><td>";
1065 print
"<input type='text' 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'));
1069 print
"<tr><td>" . $langs->trans(
'NextDateToExecution') .
"</td><td>";
1071 print $form->selectDate($date_next_execution,
'', 1, 1, 0,
"add", 1, 1);
1075 print
"<tr><td>" . $langs->trans(
"MaxPeriodNumber") .
"</td><td>";
1076 print
'<input type="text" name="nb_gen_max" value="' .
GETPOST(
'nb_gen_max') .
'" size="5" />';
1080 print
"<tr><td>" . $langs->trans(
"StatusOfAutoGeneratedInvoices") .
"</td><td>";
1081 $select = array(
'0' => $langs->trans(
'BillStatusDraft'),
'1' => $langs->trans(
'BillStatusValidated'));
1082 print $form->selectarray(
'auto_validate', $select,
GETPOST(
'auto_validate'));
1087 print
"<tr><td>" . $langs->trans(
"StatusOfGeneratedDocuments") .
"</td><td>";
1088 $select = array(
'0' => $langs->trans(
'DoNotGenerateDoc'),
'1' => $langs->trans(
'AutoGenerateDoc'));
1089 print $form->selectarray(
'generate_pdf', $select,
GETPOST(
'generate_pdf'));
1092 print
'<input type="hidden" name="generate_pdf" value="1">';
1099 $title = $langs->trans(
"ProductsAndServices");
1100 if (!isModEnabled(
"service")) {
1101 $title = $langs->trans(
"Products");
1102 } elseif (!isModEnabled(
"product")) {
1103 $title = $langs->trans(
"Services");
1111 print
'<div class="div-table-responsive-no-min">';
1112 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1118 $object->printObjectLines(
'',
$object->thirdparty, $mysoc, $lineid, 0);
1126 print $form->buttonsSaveCancel(
"Create");
1143 if ($action ==
'ask_deleteline') {
1144 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&lineid=' . $lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'',
'no', 1);
1148 if ($action ==
'ask_deleteinvoice') {
1149 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id, $langs->trans(
'DeleteRepeatableInvoice'), $langs->trans(
'ConfirmDeleteRepeatableInvoice'),
'confirm_deleteinvoice',
'',
'no', 1);
1154 $author =
new User($db);
1155 $author->fetch(
$object->user_author);
1159 print
dol_get_fiche_head($head,
'card', $langs->trans(
'RepeatableInvoice'), -1,
'bill');
1163 $linkback =
'<a href="' . DOL_URL_ROOT .
'/fourn/facture/list-rec.php?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
'BackToList') .
'</a>';
1166 if ($action !=
'edittitle') {
1167 $morehtmlref .= $form->editfieldkey(
$object->title,
'title',
$object->title, $object, $usercancreate,
'',
'', 0, 2);
1169 $morehtmlref .= $form->editfieldval(
'',
'title',
$object->title, $object, $usercancreate,
'string');
1171 $morehtmlref .=
'<div class="refidno">';
1173 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $usercancreate,
'string',
'', 0, 1);
1174 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $usercancreate,
'string',
'',
null,
null,
'', 1);
1176 $morehtmlref .=
'<br>' . $langs->trans(
'ThirdParty') .
' : ' .
$object->thirdparty->getNomUrl(1);
1179 if (isModEnabled(
'project')) {
1180 $langs->load(
'projects');
1181 $morehtmlref .=
'<br>' . $langs->trans(
'Project') .
' ';
1182 if ($usercancreate) {
1183 if ($action !=
'classify') {
1184 $morehtmlref .=
'<a class="editfielda" href="' . $_SERVER[
'PHP_SELF'] .
'?action=classify&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->transnoentitiesnoconv(
'SetProject')) .
'</a> : ';
1186 if ($action ==
'classify') {
1187 $morehtmlref .=
'<form method="post" action="' . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'">';
1188 $morehtmlref .=
'<input type="hidden" name="action" value="classin">';
1189 $morehtmlref .=
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1190 $morehtmlref .= $formproject->select_projects(
$object->socid,
$object->fk_project,
'projectid', $maxlength, 0, 1, 0, 1, 0, 0,
'', 1);
1191 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="' . $langs->trans(
"Modify") .
'">';
1192 $morehtmlref .=
'</form>';
1194 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->socid,
$object->fk_project,
'none', 0, 0, 0, 1,
'',
'maxwidth300');
1197 if (!empty(
$object->fk_project)) {
1199 $project->fetch(
$object->fk_project);
1200 $morehtmlref .=
' : ' . $project->getNomUrl(1);
1201 if ($project->title) {
1202 $morehtmlref .=
' - ' . $project->title;
1209 $morehtmlref .=
'</div>';
1211 $morehtmlstatus =
'';
1213 dol_banner_tab($object,
'ref', $linkback, 1,
'title',
'none', $morehtmlref,
'', 0,
'', $morehtmlstatus);
1215 print
'<div class="fichecenter">';
1216 print
'<div class="fichehalfleft">';
1217 print
'<div class="underbanner clearboth"></div>';
1219 print
'<table class="border centpercent tableforfield">';
1223 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1224 print
$object->getSubtypeLabel(
'facture_fourn_rec');
1228 print
'<tr><td class="titlefield">' . $langs->trans(
'Author') .
'</td><td>';
1229 print $author->getNomUrl(-1);
1234 print
'<td>' . $form->editfieldkey(
"Label",
'libelle',
$object->libelle, $object, $usercancreate) .
'</td>';
1235 print
'<td>' . $form->editfieldval(
"Label",
'libelle',
$object->libelle, $object, $usercancreate) .
'</td>';
1238 print
'<tr><td>' . $langs->trans(
'AmountHT') .
'</td>';
1239 print
'<td>' .
price(
$object->total_ht, 0, $langs, 1, -1, -1, $conf->currency) .
'</td>';
1242 print
'<tr><td>' . $langs->trans(
"AmountVAT") .
'</td><td>' .
price(
$object->total_tva, 0, $langs, 1, -1, -1, $conf->currency) .
'</td>';
1246 if (($mysoc->localtax1_assuj ==
"1" && $mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
1247 print
'<tr><td>' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
1248 print
'<td class="nowrap">' .
price(
$object->total_localtax1, 1,
'', 1, -1, -1, $conf->currency) .
'</td></tr>';
1250 if (($mysoc->localtax2_assuj ==
"1" && $mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
1251 print
'<tr><td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
1252 print
'<td class=nowrap">' .
price(
$object->total_localtax2, 1,
'', 1, -1, -1, $conf->currency) .
'</td></tr>';
1255 print
'<tr><td>' . $langs->trans(
"AmountTTC") .
'</td><td colspan="3">' .
price(
$object->total_ttc, 0, $langs, 1, -1, -1, $conf->currency) .
'</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,
$object->cond_reglement_id,
'cond_reglement_id');
1271 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id,
$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,
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
1289 $form->form_modes_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id,
$object->mode_reglement_id,
'none');
1294 if (isModEnabled(
"multicurrency")) {
1298 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1299 print $form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
1301 if ($usercancreate && $action !=
'editmulticurrencycode' &&
$object->suspended == $object::STATUS_SUSPENDED) {
1302 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>';
1304 print
'</tr></table>';
1306 $htmlname = (($usercancreate && $action ==
'editmulticurrencycode') ?
'multicurrency_code' :
'none');
1307 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->multicurrency_code, $htmlname);
1311 if (
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
1314 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1315 print $form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
1317 if ($usercancreate && $action !=
'editmulticurrencyrate' &&
$object->suspended == $object::STATUS_SUSPENDED &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
1318 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>';
1320 print
'</tr></table>';
1322 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
1323 if ($action ==
'actualizemulticurrencyrate') {
1326 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->multicurrency_tx, ($usercancreate ?
'multicurrency_tx' :
'none'),
$object->multicurrency_code);
1328 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->multicurrency_tx,
'none',
$object->multicurrency_code);
1329 if (
$object->statut == $object::STATUS_DRAFT &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
1330 print
'<div class="inline-block"> ';
1331 print
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=actualizemulticurrencyrate">' . $langs->trans(
"ActualizeCurrency") .
'</a>';
1342 $dateexample =
$object->date_when;
1347 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m') .
')';
1348 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%m') .
')';
1349 $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m') .
')';
1350 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B') .
')';
1351 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%B') .
')';
1352 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B') .
')';
1353 $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y') .
')';
1354 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%Y') .
')';
1355 $substitutionarray[
'__INVOICE_NEXT_YEAR__'] = $langs->trans(
"NextYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y') .
')';
1357 $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans(
"DateNextInvoiceBeforeGen") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date((
$object->date_when ?
$object->date_when :
dol_now()),
'dayhour') .
')';
1359 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] =
$object->nb_gen_done;
1360 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] =
$object->nb_gen_max;
1362 $htmltext =
'<i>' . $langs->trans(
"FollowingConstantsWillBeSubstituted") .
':<br>';
1363 foreach ($substitutionarray as $key => $val) {
1364 $htmltext .= $key .
' = ' . $langs->trans($val) .
'<br>';
1366 $htmltext .=
'</i>';
1369 print
'<tr><td class="nowrap">';
1370 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1371 print $langs->trans(
'BankAccount');
1373 if ($action !=
'editbankaccount' && $usercancreate &&
$object->statut == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1374 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>';
1376 print
'</tr></table>';
1378 if ($action ==
'editbankaccount') {
1379 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'fk_account', 1);
1381 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'none');
1387 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1391 print $form->editfieldkey($form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic'),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'));
1392 print
'</td><td class="wordbreak">';
1393 print $form->editfieldval($langs->trans(
"NotePublic"),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1399 print $form->editfieldkey($form->textwithpicto($langs->trans(
"NotePrivate"), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate'),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'));
1400 print
'</td><td class="wordbreak">';
1401 print $form->editfieldval($langs->trans(
"NotePrivate"),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1406 print
'<tr><td class="nowrap">';
1407 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1408 print $langs->trans(
'Model');
1410 if ($action !=
'editmodelpdf' && $usercancreate &&
$object->statut == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1411 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>';
1413 print
'</tr></table>';
1415 if ($action ==
'editmodelpdf') {
1416 include_once DOL_DOCUMENT_ROOT .
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
1419 foreach ($models as $k => $model) {
1420 $list[] = str_replace(
':',
'|', $k) .
':' . $model;
1422 $select =
'select;' . implode(
',', $list);
1424 print $form->editfieldval($langs->trans(
'Model'),
'modelpdf',
$object->model_pdf, $object, $usercancreate, $select);
1437 print
'<div class="fichehalfright">';
1438 print
'<div class="underbanner clearboth"></div>';
1443 $title = $langs->trans(
"Recurrence");
1446 print
'<table class="border centpercent tableforfield">';
1448 print
'<tr><td colspan="2">' .
img_picto(
'',
'recurring',
'class="pictofixedwidth"') . $title .
'</td></tr>';
1451 print
'<tr><td style="width: 50%">';
1452 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1453 print $langs->trans(
'Frequency');
1455 if ($action !=
'editfrequency' && $usercancreate) {
1456 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>';
1458 print
'</tr></table>';
1460 if ($action ==
'editfrequency') {
1461 print
'<form method="post" action="' . $_SERVER[
"PHP_SELF"] .
'?facid=' .
$object->id .
'">';
1462 print
'<input type="hidden" name="action" value="setfrequency">';
1463 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1464 print
'<table class="nobordernopadding">';
1466 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'));
1468 print
'<td class="left"><input type="submit" class="button button-edit" value="' . $langs->trans(
"Modify") .
'"></td>';
1469 print
'</tr></table></form>';
1472 print $langs->trans(
'FrequencyPer_' .
$object->unit_frequency,
$object->frequency);
1474 print $langs->trans(
"NotARecurringInvoiceTemplate");
1481 if ($action ==
'date_when' ||
$object->frequency > 0) {
1482 print $form->editfieldkey($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $usercancreate,
'day');
1484 print $langs->trans(
"NextDateToExecution");
1487 if ($action ==
'date_when' ||
$object->frequency > 0) {
1488 print $form->editfieldval($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $usercancreate,
'day',
$object->date_when,
null,
'',
'', 0,
'strikeIfMaxNbGenReached');
1491 if (!
$object->isMaxNbGenReached()) {
1496 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
1503 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1504 print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max, $object, $usercancreate);
1506 print $langs->trans(
"MaxPeriodNumber");
1509 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1510 print $form->editfieldval($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max ?
$object->nb_gen_max :
'',
$object, $usercancreate);
1519 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1520 print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $usercancreate);
1522 print $langs->trans(
"StatusOfAutoGeneratedInvoices");
1525 $select =
'select;0:' . $langs->trans(
'BillStatusDraft') .
',1:' . $langs->trans(
'BillStatusValidated');
1526 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1527 print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $usercancreate, $select);
1534 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1535 print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $usercancreate);
1537 print $langs->trans(
"StatusOfGeneratedDocuments");
1541 $select =
'select;0:' . $langs->trans(
'DoNotGenerateDoc') .
',1:' . $langs->trans(
'AutogenerateDoc');
1542 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1543 print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $usercancreate, $select);
1548 print
'<input type="hidden" name="generate_pdf" value="1">';
1557 if (empty($conf->cron->enabled)) {
1558 print
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
1561 print
'<div class="underbanner clearboth"></div>';
1562 print
'<table class="border centpercent tableforfield">';
1565 print
'<tr><td style="width: 50%">' . $langs->trans(
"NbOfGenerationDone") .
'</td>';
1573 print $langs->trans(
"DateLastGeneration");
1587 print
'<div class="clearboth"></div><br>';
1590 print
' <form name="addproduct" id="addproduct" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id . (($action !=
'editline') ?
'#add' :
'#line_' .
GETPOSTINT(
'lineid')) .
'" method="POST">
1591 <input type="hidden" name="token" value="' .
newToken() .
'">
1592 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline') .
'">
1593 <input type="hidden" name="mode" value="">
1594 <input type="hidden" name="id" value="' .
$object->id .
'">
1597 if (!empty($conf->use_javascript_ajax) &&
$object->statut == 0) {
1598 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
1601 print
'<div class="div-table-responsive-no-min">';
1602 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1606 $canchangeproduct = 1;
1608 foreach (
$object->lines as $line) {
1609 $line->ref = $line->label;
1610 $line->product_label = $line->label;
1611 $line->subprice = $line->pu_ht;
1614 global $canchangeproduct;
1615 $canchangeproduct = 0;
1618 $object->printObjectLines($action,
$object->thirdparty, $mysoc, $lineid, 0);
1623 if (
$object->statut == $object::STATUS_DRAFT && $usercancreate && $action !=
'valid' && $action !=
'editline') {
1624 if ($action !=
'editline') {
1627 $parameters = array();
1628 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
1632 if (empty($reshook)) {
1633 global $senderissupplier;
1635 $senderissupplier = 2;
1650 print
'<div class="tabsAction">';
1652 if (empty(
$object->suspended)) {
1653 if ($usercancreate) {
1655 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1657 if (empty(
$object->frequency) ||
$object->date_when <= $nowlasthour) {
1658 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>';
1660 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1664 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") .
'</a></div>';
1668 if ($usercancreate) {
1669 if (empty(
$object->suspended)) {
1670 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>';
1672 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>';
1677 print
dolGetButtonAction($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")));
1681 print
'<div class="fichecenter"><div class="fichehalfleft">';
1682 print
'<a name="builddoc"></a>';
1685 $linktoelem = $form->showLinkToObjectBlock($object,
null, array(
'invoice'));
1687 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1689 print
'</div></div>';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
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 models.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
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.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending and br at end.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.: VAT NPR in France)
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
img_info($titlealt='default')
Show info logo.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
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, $mode=0)
Check permissions of a user to show a page and an object.