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(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
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($mysoc,
$object->thirdparty, $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']);
732 } elseif ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
733 if (!
$object->fetch($id) > 0) {
742 $ref_fourn =
GETPOST(
'fourn_ref',
'alpha');
750 if (preg_match(
'/\*/', $vat_rate)) {
755 $vat_rate = str_replace(
'*',
'', $vat_rate);
760 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
761 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
764 if ($objectline->fetch(
GETPOSTINT(
'lineid'))) {
765 $objectline->array_options = $array_options;
766 $result = $objectline->insertExtraFields();
772 $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
775 if (is_array($extralabelsline)) {
777 foreach ($extralabelsline as $key => $value) {
778 unset($_POST[
"options_" . $key]);
784 if (!
GETPOST(
'qty',
'alpha')) {
792 if (!empty($productid)) {
794 $product->fetch($productid);
796 $type = $product->type;
798 $price_min = $product->price_min;
800 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
803 $label = $product->label;
807 setEventMessages($langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1, $conf->currency)),
null,
'errors');
812 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
816 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
821 $langs->load(
"errors");
822 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
826 $date_start_fill = !empty(
GETPOSTINT(
'date_start_fill')) ?
GETPOSTINT(
'date_start_fill') :
'NULL';
831 $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);
835 unset($_POST[
'qty']);
836 unset($_POST[
'type']);
837 unset($_POST[
'productid']);
838 unset($_POST[
'remise_percent']);
839 unset($_POST[
'price_ht']);
840 unset($_POST[
'multicurrency_price_ht']);
841 unset($_POST[
'price_ttc']);
842 unset($_POST[
'tva_tx']);
843 unset($_POST[
'product_ref']);
844 unset($_POST[
'product_label']);
845 unset($_POST[
'product_desc']);
846 unset($_POST[
'fournprice']);
847 unset($_POST[
'buying_price']);
848 unset($_POST[
'np_marginRate']);
849 unset($_POST[
'np_markRate']);
850 unset($_POST[
'dp_desc']);
851 unset($_POST[
'idprod']);
852 unset($_POST[
'units']);
853 unset($_POST[
'date_starthour']);
854 unset($_POST[
'date_startmin']);
855 unset($_POST[
'date_startsec']);
856 unset($_POST[
'date_startday']);
857 unset($_POST[
'date_startmonth']);
858 unset($_POST[
'date_startyear']);
859 unset($_POST[
'date_endhour']);
860 unset($_POST[
'date_endmin']);
861 unset($_POST[
'date_endsec']);
862 unset($_POST[
'date_endday']);
863 unset($_POST[
'date_endmonth']);
864 unset($_POST[
'date_endyear']);
865 unset($_POST[
'situations']);
866 unset($_POST[
'progress']);
879llxHeader(
'', $langs->trans(
"RepeatableSupplierInvoice"), $help_url);
881$form =
new Form($db);
883if (isModEnabled(
'project')) {
886$companystatic =
new Societe($db);
895if ($action ==
'create') {
896 print
load_fiche_titre($langs->trans(
"CreateRepeatableInvoice"),
'',
'bill');
899 $product_static =
new Product($db);
902 $result =
$object->fetch_lines();
904 print
'<form action="' . $_SERVER[
"PHP_SELF"] .
'" method="POST">';
905 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
906 print
'<input type="hidden" name="action" value="add">';
907 print
'<input type="hidden" name="facid" value="' .
$object->id .
'">';
912 if (isModEnabled(
'project')) {
919 print
'<table class="border centpercent">';
924 print
'<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans(
"Title") .
'</td><td>';
925 print
'<input class="flat quatrevingtpercent" type="text" name="title" value="' .
dol_escape_htmltag(
GETPOST(
"title",
'alphanohtml')) .
'" autofocus>';
929 print
'<tr><td class="titlefieldcreate fieldrequired">' . $langs->trans(
"RefSupplier") .
'</td><td>';
930 print
'<input class="flat maxwidth500" type="text" name="ref_supplier" value="' .
$object->ref_supplier .
'">';
934 print
'<tr><td class="titlefieldcreate">' . $langs->trans(
"Customer") .
'</td><td>' .
$object->thirdparty->getNomUrl(1,
'customer') .
'</td>';
939 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
940 print $form->getSelectInvoiceSubtype(GETPOSTISSET(
'subtype') ?
GETPOST(
'subtype') :
$object->subtype,
'subtype', 0, 0,
'');
944 $note_public = GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') :
$object->note_public;
945 $note_private = GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') :
$object->note_private;
950 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%m') .
')';
951 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%m') .
')';
952 $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%m') .
')';
953 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%B') .
')';
954 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%B') .
')';
955 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%B') .
')';
956 $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'y'),
'%Y') .
')';
957 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
$object->date,
'%Y') .
')';
960 $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans(
"DateNextInvoiceBeforeGen") . (isset(
$object->date_when) ?
' (' . $langs->trans(
"Example") .
': ' .dol_print_date(
$object->date_when,
'dayhour') .
')' :
'');
961 $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') .
')' :
'');
962 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $langs->trans(
"Count");
963 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $langs->trans(
"MaxPeriodNumber");
965 $htmltext =
'<i>' . $langs->trans(
"FollowingConstantsWillBeSubstituted") .
':<br>';
966 foreach ($substitutionarray as $key => $val) {
967 $htmltext .= $key .
' = ' . $langs->trans($val) .
'<br>';
972 print
'<tr><td class="titlefieldcreate">' . $langs->trans(
"Label") .
'</td><td>';
973 print
'<input class="flat quatrevingtpercent" type="text" name="libelle" value="' .
$object->label .
'">';
977 print
"<tr><td>" . $langs->trans(
"Author") .
"</td><td>" . $user->getFullName($langs) .
"</td></tr>";
980 print
"<tr><td>" . $langs->trans(
"PaymentConditions") .
"</td><td>";
981 print $form->getSelectConditionsPaiements(GETPOSTISSET(
'cond_reglement_id') ?
GETPOST(
'cond_reglement_id',
'int') :
$object->cond_reglement_id,
'cond_reglement_id', -1, 0, 0,
'');
985 print
"<tr><td>" . $langs->trans(
"PaymentMode") .
"</td><td>";
986 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
987 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);
991 if (isModEnabled(
'project') && is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0) {
993 $langs->load(
'projects');
994 print
'<tr><td>' . $langs->trans(
'Project') .
'</td><td>';
995 $numprojet = $formproject->select_projects(
$object->thirdparty->id, $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 0, 0,
'');
996 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>';
1001 if (
$object->fk_account > 0) {
1002 print
"<tr><td>" . $langs->trans(
'BankAccount') .
"</td><td>";
1003 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'none');
1009 $draft->fetch(
GETPOST(
'facid',
'int'));
1012 $extralabels = $extrafields->fetch_name_optionals_label($draft->table_element);
1013 if ($draft->fetch_optionals() > 0) {
1014 $object->array_options = array_merge(
$object->array_options, $draft->array_options);
1017 print
$object->showOptionals($extrafields,
'create', $parameters);
1020 print
"<tr><td>" . $langs->trans(
'Model') .
"</td><td>";
1021 include_once DOL_DOCUMENT_ROOT .
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
1023 print $form->selectarray(
'modelpdf', $list, $conf->global->INVOICE_SUPPLIER_ADDON_PDF);
1028 print
'<td class="tdtop">';
1029 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic');
1032 $doleditor =
new DolEditor(
'note_public', $note_public,
'', 80,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1033 print $doleditor->Create(1);
1036 if (empty($user->socid)) {
1038 print
'<td class="tdtop">';
1039 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate');
1042 $doleditor =
new DolEditor(
'note_private', $note_private,
'', 80,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1043 print $doleditor->Create(1);
1052 $title = $langs->trans(
"Recurrence");
1055 print
'<span class="opacitymedium">'.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name')).
'</span><br><br>';
1059 print
'<table class="border centpercent">';
1062 print
'<tr><td class="titlefieldcreate">' . $form->textwithpicto($langs->trans(
"Frequency"), $langs->transnoentitiesnoconv(
'toolTipFrequency')) .
"</td><td>";
1063 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'));
1067 print
"<tr><td>" . $langs->trans(
'NextDateToExecution') .
"</td><td>";
1069 print $form->selectDate($date_next_execution,
'', 1, 1, 0,
"add", 1, 1);
1073 print
"<tr><td>" . $langs->trans(
"MaxPeriodNumber") .
"</td><td>";
1074 print
'<input type="text" name="nb_gen_max" value="' .
GETPOST(
'nb_gen_max') .
'" size="5" />';
1078 print
"<tr><td>" . $langs->trans(
"StatusOfAutoGeneratedInvoices") .
"</td><td>";
1079 $select = array(
'0' => $langs->trans(
'BillStatusDraft'),
'1' => $langs->trans(
'BillStatusValidated'));
1080 print $form->selectarray(
'auto_validate', $select,
GETPOST(
'auto_validate'));
1085 print
"<tr><td>" . $langs->trans(
"StatusOfGeneratedDocuments") .
"</td><td>";
1086 $select = array(
'0' => $langs->trans(
'DoNotGenerateDoc'),
'1' => $langs->trans(
'AutoGenerateDoc'));
1087 print $form->selectarray(
'generate_pdf', $select,
GETPOST(
'generate_pdf'));
1090 print
'<input type="hidden" name="generate_pdf" value="1">';
1097 $title = $langs->trans(
"ProductsAndServices");
1098 if (!isModEnabled(
"service")) {
1099 $title = $langs->trans(
"Products");
1100 } elseif (!isModEnabled(
"product")) {
1101 $title = $langs->trans(
"Services");
1109 print
'<div class="div-table-responsive-no-min">';
1110 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1116 $object->printObjectLines(
'', $mysoc,
$object->thirdparty, $lineid, 0);
1124 print $form->buttonsSaveCancel(
"Create");
1141 if ($action ==
'ask_deleteline') {
1142 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&lineid=' . $lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'',
'no', 1);
1146 if ($action ==
'ask_deleteinvoice') {
1147 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id, $langs->trans(
'DeleteRepeatableInvoice'), $langs->trans(
'ConfirmDeleteRepeatableInvoice'),
'confirm_deleteinvoice',
'',
'no', 1);
1152 $author =
new User($db);
1153 $author->fetch(
$object->user_author);
1157 print
dol_get_fiche_head($head,
'card', $langs->trans(
'RepeatableInvoice'), -1,
'bill');
1161 $linkback =
'<a href="' . DOL_URL_ROOT .
'/fourn/facture/list-rec.php?restore_lastsearch_values=1' . (!empty($socid) ?
'&socid=' . $socid :
'') .
'">' . $langs->trans(
'BackToList') .
'</a>';
1164 if ($action !=
'edittitle') {
1165 $morehtmlref .= $form->editfieldkey(
$object->title,
'title',
$object->title, $object, $usercancreate,
'',
'', 0, 2);
1167 $morehtmlref .= $form->editfieldval(
'',
'title',
$object->title, $object, $usercancreate,
'string');
1169 $morehtmlref .=
'<div class="refidno">';
1171 $morehtmlref .= $form->editfieldkey(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $usercancreate,
'string',
'', 0, 1);
1172 $morehtmlref .= $form->editfieldval(
"RefSupplier",
'ref_supplier',
$object->ref_supplier, $object, $usercancreate,
'string',
'',
null,
null,
'', 1);
1174 $morehtmlref .=
'<br>' . $langs->trans(
'ThirdParty') .
' : ' .
$object->thirdparty->getNomUrl(1);
1177 if (isModEnabled(
'project')) {
1178 $langs->load(
'projects');
1179 $morehtmlref .=
'<br>' . $langs->trans(
'Project') .
' ';
1180 if ($usercancreate) {
1181 if ($action !=
'classify') {
1182 $morehtmlref .=
'<a class="editfielda" href="' . $_SERVER[
'PHP_SELF'] .
'?action=classify&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->transnoentitiesnoconv(
'SetProject')) .
'</a> : ';
1184 if ($action ==
'classify') {
1185 $morehtmlref .=
'<form method="post" action="' . $_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id .
'">';
1186 $morehtmlref .=
'<input type="hidden" name="action" value="classin">';
1187 $morehtmlref .=
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1188 $morehtmlref .= $formproject->select_projects(
$object->socid,
$object->fk_project,
'projectid', $maxlength, 0, 1, 0, 1, 0, 0,
'', 1);
1189 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="' . $langs->trans(
"Modify") .
'">';
1190 $morehtmlref .=
'</form>';
1192 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->socid,
$object->fk_project,
'none', 0, 0, 0, 1,
'',
'maxwidth300');
1195 if (!empty(
$object->fk_project)) {
1197 $project->fetch(
$object->fk_project);
1198 $morehtmlref .=
' : ' . $project->getNomUrl(1);
1199 if ($project->title) {
1200 $morehtmlref .=
' - ' . $project->title;
1207 $morehtmlref .=
'</div>';
1209 $morehtmlstatus =
'';
1211 dol_banner_tab($object,
'ref', $linkback, 1,
'title',
'none', $morehtmlref,
'', 0,
'', $morehtmlstatus);
1213 print
'<div class="fichecenter">';
1214 print
'<div class="fichehalfleft">';
1215 print
'<div class="underbanner clearboth"></div>';
1217 print
'<table class="border centpercent tableforfield">';
1221 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1222 print
$object->getSubtypeLabel(
'facture_fourn_rec');
1226 print
'<tr><td class="titlefield">' . $langs->trans(
'Author') .
'</td><td>';
1227 print $author->getNomUrl(-1);
1232 print
'<td>' . $form->editfieldkey(
"Label",
'libelle',
$object->libelle, $object, $usercancreate) .
'</td>';
1233 print
'<td>' . $form->editfieldval(
"Label",
'libelle',
$object->libelle, $object, $usercancreate) .
'</td>';
1236 print
'<tr><td>' . $langs->trans(
'AmountHT') .
'</td>';
1237 print
'<td>' .
price(
$object->total_ht, 0, $langs, 1, -1, -1, $conf->currency) .
'</td>';
1240 print
'<tr><td>' . $langs->trans(
"AmountVAT") .
'</td><td>' .
price(
$object->total_tva, 0, $langs, 1, -1, -1, $conf->currency) .
'</td>';
1244 if (($mysoc->localtax1_assuj ==
"1" && $mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
1245 print
'<tr><td>' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
1246 print
'<td class="nowrap">' .
price(
$object->total_localtax1, 1,
'', 1, -1, -1, $conf->currency) .
'</td></tr>';
1248 if (($mysoc->localtax2_assuj ==
"1" && $mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
1249 print
'<tr><td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
1250 print
'<td class=nowrap">' .
price(
$object->total_localtax2, 1,
'', 1, -1, -1, $conf->currency) .
'</td></tr>';
1253 print
'<tr><td>' . $langs->trans(
"AmountTTC") .
'</td><td colspan="3">' .
price(
$object->total_ttc, 0, $langs, 1, -1, -1, $conf->currency) .
'</td>';
1258 print
'<table class="nobordernopadding centpercent"><tr><td>';
1259 print $langs->trans(
'PaymentConditionsShort');
1261 if ($action !=
'editconditions' && $usercancreate) {
1262 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>';
1264 print
'</tr></table>';
1266 if ($action ==
'editconditions') {
1267 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
1269 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id,
$object->cond_reglement_id,
'none');
1276 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1277 print $langs->trans(
'PaymentMode');
1279 if ($action !=
'editmode' && $usercancreate) {
1280 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>';
1282 print
'</tr></table>';
1284 if ($action ==
'editmode') {
1285 $form->form_modes_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
1287 $form->form_modes_reglement($_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id,
$object->mode_reglement_id,
'none');
1292 if (isModEnabled(
"multicurrency")) {
1296 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1297 print $form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
1299 if ($usercancreate && $action !=
'editmulticurrencycode' &&
$object->suspended == $object::STATUS_SUSPENDED) {
1300 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>';
1302 print
'</tr></table>';
1304 $htmlname = (($usercancreate && $action ==
'editmulticurrencycode') ?
'multicurrency_code' :
'none');
1305 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->multicurrency_code, $htmlname);
1309 if (
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
1312 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1313 print $form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
1315 if ($usercancreate && $action !=
'editmulticurrencyrate' &&
$object->suspended == $object::STATUS_SUSPENDED &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
1316 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>';
1318 print
'</tr></table>';
1320 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
1321 if ($action ==
'actualizemulticurrencyrate') {
1324 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->multicurrency_tx, ($usercancreate ?
'multicurrency_tx' :
'none'),
$object->multicurrency_code);
1326 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->multicurrency_tx,
'none',
$object->multicurrency_code);
1327 if (
$object->statut == $object::STATUS_DRAFT &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
1328 print
'<div class="inline-block"> ';
1329 print
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=actualizemulticurrencyrate">' . $langs->trans(
"ActualizeCurrency") .
'</a>';
1340 $dateexample =
$object->date_when;
1345 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m') .
')';
1346 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%m') .
')';
1347 $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m') .
')';
1348 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B') .
')';
1349 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%B') .
')';
1350 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B') .
')';
1351 $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y') .
')';
1352 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%Y') .
')';
1353 $substitutionarray[
'__INVOICE_NEXT_YEAR__'] = $langs->trans(
"NextYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y') .
')';
1355 $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') .
')';
1357 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] =
$object->nb_gen_done;
1358 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] =
$object->nb_gen_max;
1360 $htmltext =
'<i>' . $langs->trans(
"FollowingConstantsWillBeSubstituted") .
':<br>';
1361 foreach ($substitutionarray as $key => $val) {
1362 $htmltext .= $key .
' = ' . $langs->trans($val) .
'<br>';
1364 $htmltext .=
'</i>';
1367 print
'<tr><td class="nowrap">';
1368 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1369 print $langs->trans(
'BankAccount');
1371 if ($action !=
'editbankaccount' && $usercancreate &&
$object->statut == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1372 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>';
1374 print
'</tr></table>';
1376 if ($action ==
'editbankaccount') {
1377 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'fk_account', 1);
1379 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'none');
1385 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1389 print $form->editfieldkey($form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic'),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'));
1390 print
'</td><td class="wordbreak">';
1391 print $form->editfieldval($langs->trans(
"NotePublic"),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1397 print $form->editfieldkey($form->textwithpicto($langs->trans(
"NotePrivate"), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate'),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'));
1398 print
'</td><td class="wordbreak">';
1399 print $form->editfieldval($langs->trans(
"NotePrivate"),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1404 print
'<tr><td class="nowrap">';
1405 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1406 print $langs->trans(
'Model');
1408 if ($action !=
'editmodelpdf' && $usercancreate &&
$object->statut == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1409 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>';
1411 print
'</tr></table>';
1413 if ($action ==
'editmodelpdf') {
1414 include_once DOL_DOCUMENT_ROOT .
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
1417 foreach ($models as $k => $model) {
1418 $list[] = str_replace(
':',
'|', $k) .
':' . $model;
1420 $select =
'select;' . implode(
',', $list);
1422 print $form->editfieldval($langs->trans(
'Model'),
'modelpdf',
$object->model_pdf, $object, $usercancreate, $select);
1435 print
'<div class="fichehalfright">';
1436 print
'<div class="underbanner clearboth"></div>';
1441 $title = $langs->trans(
"Recurrence");
1444 print
'<table class="border centpercent tableforfield">';
1446 print
'<tr><td colspan="2">' .
img_picto(
'',
'recurring',
'class="pictofixedwidth"') . $title .
'</td></tr>';
1449 print
'<tr><td style="width: 50%">';
1450 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1451 print $langs->trans(
'Frequency');
1453 if ($action !=
'editfrequency' && $usercancreate) {
1454 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>';
1456 print
'</tr></table>';
1458 if ($action ==
'editfrequency') {
1459 print
'<form method="post" action="' . $_SERVER[
"PHP_SELF"] .
'?facid=' .
$object->id .
'">';
1460 print
'<input type="hidden" name="action" value="setfrequency">';
1461 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1462 print
'<table class="nobordernopadding">';
1464 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'));
1466 print
'<td class="left"><input type="submit" class="button button-edit" value="' . $langs->trans(
"Modify") .
'"></td>';
1467 print
'</tr></table></form>';
1470 print $langs->trans(
'FrequencyPer_' .
$object->unit_frequency,
$object->frequency);
1472 print $langs->trans(
"NotARecurringInvoiceTemplate");
1479 if ($action ==
'date_when' ||
$object->frequency > 0) {
1480 print $form->editfieldkey($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $usercancreate,
'day');
1482 print $langs->trans(
"NextDateToExecution");
1485 if ($action ==
'date_when' ||
$object->frequency > 0) {
1486 print $form->editfieldval($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $usercancreate,
'day',
$object->date_when,
null,
'',
'', 0,
'strikeIfMaxNbGenReached');
1489 if (!
$object->isMaxNbGenReached()) {
1494 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
1501 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1502 print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max, $object, $usercancreate);
1504 print $langs->trans(
"MaxPeriodNumber");
1507 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1508 print $form->editfieldval($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max ?
$object->nb_gen_max :
'',
$object, $usercancreate);
1517 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1518 print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $usercancreate);
1520 print $langs->trans(
"StatusOfAutoGeneratedInvoices");
1523 $select =
'select;0:' . $langs->trans(
'BillStatusDraft') .
',1:' . $langs->trans(
'BillStatusValidated');
1524 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1525 print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $usercancreate, $select);
1532 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1533 print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $usercancreate);
1535 print $langs->trans(
"StatusOfGeneratedDocuments");
1539 $select =
'select;0:' . $langs->trans(
'DoNotGenerateDoc') .
',1:' . $langs->trans(
'AutogenerateDoc');
1540 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1541 print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $usercancreate, $select);
1546 print
'<input type="hidden" name="generate_pdf" value="1">';
1555 if (empty($conf->cron->enabled)) {
1556 print
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
1559 print
'<div class="underbanner clearboth"></div>';
1560 print
'<table class="border centpercent tableforfield">';
1563 print
'<tr><td style="width: 50%">' . $langs->trans(
"NbOfGenerationDone") .
'</td>';
1571 print $langs->trans(
"DateLastGeneration");
1585 print
'<div class="clearboth"></div><br>';
1588 print
' <form name="addproduct" id="addproduct" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id . (($action !=
'editline') ?
'#add' :
'#line_' .
GETPOSTINT(
'lineid')) .
'" method="POST">
1589 <input type="hidden" name="token" value="' .
newToken() .
'">
1590 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline') .
'">
1591 <input type="hidden" name="mode" value="">
1592 <input type="hidden" name="id" value="' .
$object->id .
'">
1595 if (!empty($conf->use_javascript_ajax) &&
$object->statut == 0) {
1596 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
1599 print
'<div class="div-table-responsive-no-min">';
1600 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1604 $canchangeproduct = 1;
1606 foreach (
$object->lines as $line) {
1607 $line->ref = $line->label;
1608 $line->product_label = $line->label;
1609 $line->subprice = $line->pu_ht;
1612 global $canchangeproduct;
1613 $canchangeproduct = 0;
1616 $object->printObjectLines($action, $mysoc,
$object->thirdparty, $lineid, 0);
1621 if (
$object->statut == $object::STATUS_DRAFT && $usercancreate && $action !=
'valid' && $action !=
'editline') {
1622 if ($action !=
'editline') {
1625 $parameters = array();
1626 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
1630 if (empty($reshook)) {
1631 global $senderissupplier;
1633 $senderissupplier = 2;
1648 print
'<div class="tabsAction">';
1650 if (empty(
$object->suspended)) {
1651 if ($usercancreate) {
1653 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1655 if (empty(
$object->frequency) ||
$object->date_when <= $nowlasthour) {
1656 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>';
1658 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1662 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") .
'</a></div>';
1666 if ($usercancreate) {
1667 if (empty(
$object->suspended)) {
1668 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>';
1670 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>';
1675 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")));
1679 print
'<div class="fichecenter"><div class="fichehalfleft">';
1680 print
'<a name="builddoc"></a>';
1683 $linktoelem = $form->showLinkToObjectBlock($object,
null, array(
'invoice'));
1685 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1687 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.