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");
117$permissiontoadd = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
118$permissiontodelete = ($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer"));
120$usercanread = $user->hasRight(
"fournisseur",
"facture",
"lire") || $user->hasRight(
"supplier_invoice",
"lire");
121$usercancreate = $user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer");
122$usercandelete = $user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer");
123$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"validate")));
124$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"send"));
126$usercanproductignorepricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
"produit",
"ignore_price_min_advance")) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
127$usercancreatemargin = $user->hasRight(
"margins",
"creer");
128$usercanreadallmargin = $user->hasRight(
"margins",
"liretous");
129$usercancreatewithdrarequest = $user->hasRight(
"prelevement",
"bons",
"creer");
142if (
GETPOST(
'cancel',
'alpha')) {
146if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
150$parameters = array(
'socid' => $socid);
151$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
156if (empty($reshook)) {
157 if (
GETPOST(
'cancel',
'alpha')) {
162 include DOL_DOCUMENT_ROOT .
'/core/actions_changeselectedfields.inc.php';
165 include DOL_DOCUMENT_ROOT .
'/core/actions_setnotes.inc.php';
167 include DOL_DOCUMENT_ROOT .
'/core/actions_dellink.inc.php';
169 include DOL_DOCUMENT_ROOT .
'/core/actions_lineupdown.inc.php';
172 if ($action ==
'add' && $permissiontoadd) {
173 if (!
GETPOST(
'title',
'alphanohtml')) {
174 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Title")),
null,
'errors');
189 if (empty($reyear) || empty($remonth) || empty($reday)) {
190 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Date")),
null,
'errors');
209 $object->frequency = $frequency;
211 $object->nb_gen_max = $nb_gen_max;
215 $date_next_execution =
dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
216 $object->date_when = $date_next_execution;
218 $ret = $extrafields->setOptionalsFromPost(
null, $object);
230 $result =
$object->create($user, $oldinvoice->id);
233 $result = $oldinvoice->delete($user, 1);
248 header(
"Location: " . $_SERVER[
'PHP_SELF'] .
'?facid=' .
$object->id);
262 if ($action ==
'confirm_deleteinvoice' && $confirm ==
'yes' && $permissiontodelete) {
265 header(
'Location: ' . DOL_URL_ROOT .
'/fourn/facture/list-rec.php');
271 if ($action ==
'setconditions' && $usercancreate) {
273 } elseif ($action ==
'setmode' && $usercancreate) {
276 } elseif ($action ==
'classin' && $usercancreate) {
279 } elseif ($action ==
'setref_supplier' && $usercancreate) {
280 $result =
$object->setValueFrom(
'ref_supplier', $ref_supplier,
'',
null,
'text',
'', $user);
284 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
285 $langs->load(
"errors");
286 setEventMessages($langs->trans(
'ErrorRefAlreadyExists', $ref_supplier),
null,
'errors');
291 } elseif ($action ==
'settitle' && $permissiontoadd) {
292 $result =
$object->setValueFrom(
'titre', $title,
'',
null,
'text',
'', $user);
300 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
301 $langs->load(
"errors");
302 setEventMessages($langs->trans(
'ErrorTitreAlreadyExists', $title),
null,
'errors');
307 } elseif ($action ==
'setbankaccount' && $permissiontoadd) {
310 } elseif ($action ==
'setfrequency' && $permissiontoadd) {
313 } elseif ($action ==
'setdate_when' && $permissiontoadd) {
319 } elseif ($action ==
'setnb_gen_max' && $permissiontoadd) {
322 } elseif ($action ==
'setauto_validate' && $permissiontoadd) {
325 } elseif ($action ==
'setgenerate_pdf' && $permissiontoadd) {
328 } elseif ($action ==
'setmodelpdf' && $permissiontoadd) {
331 } elseif ($action ==
'disable' && $permissiontoadd) {
337 $res =
$object->setValueFrom(
'suspended', 1);
348 } elseif ($action ==
'enable' && $permissiontoadd) {
354 $res =
$object->setValueFrom(
'suspended', 0);
365 } elseif ($action ==
'setmulticurrencycode' && $permissiontoadd) {
367 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
368 } elseif ($action ==
'setmulticurrencyrate' && $permissiontoadd) {
371 } elseif ($action ==
'setlibelle' && $permissiontoadd) {
376 $result =
$object->update($user);
384 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $permissiontoadd) {
395 if ($line->delete($user) > 0) {
396 $result =
$object->update_price(1);
409 } elseif ($action ==
'update_extras' && $permissiontoadd) {
413 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
419 $result =
$object->insertExtraFields(
'BILLREC_MODIFY');
428 if ($action ==
'addline' && $permissiontoadd) {
429 $langs->load(
'errors');
434 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
437 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'alpha');
438 if ($prod_entry_mode ==
'free') {
440 $tva_tx = (
GETPOST(
'tva_tx',
'alpha') ?
GETPOST(
'tva_tx',
'alpha') : 0);
441 $ref_fournisseur = (GETPOSTISSET(
'fourn_ref') ?
GETPOST(
'fourn_ref',
'restricthtml') :
'');
451 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
452 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
454 if (is_array($extralabelsline)) {
456 foreach ($extralabelsline as $key => $value) {
457 unset($_POST[
"options_" . $key . $predef]);
461 if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) {
462 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
465 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
466 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
469 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && (! ($price_ht >= 0) || $price_ht ==
'')) {
470 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
474 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
477 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
478 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
482 $langs->load(
"errors");
483 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
487 if ($prod_entry_mode !=
'free' && empty($error)) {
491 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
495 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
496 $idprod = (int) $reg[1];
497 $res = $productsupplier->fetch($idprod);
500 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
502 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
503 if ($productsupplier->fourn_socid != $socid) {
504 $productsupplier->ref_supplier =
'';
507 $fksoctosearch =
$object->thirdparty->id;
508 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
510 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
512 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
513 $res = $productsupplier->fetch($idprod);
514 $ref_fournisseur = $productsupplier->ref_supplier;
518 if (! $error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
524 $ret =
$object->fetch_thirdparty();
527 $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'));
528 $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'));
529 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
540 if (!empty($idprod) && $idprod > 0) {
542 $prod->fetch($idprod);
544 $label = ((
GETPOST(
'product_label') &&
GETPOST(
'product_label') != $prod->label) ?
GETPOST(
'product_label') :
'');
549 if (empty($tva_tx)) {
556 $datapriceofproduct = $prod->getSellPrice($mysoc,
$object->thirdparty, $pqp);
558 $pu_ht = $datapriceofproduct[
'pu_ht'];
559 $pu_ttc = $datapriceofproduct[
'pu_ttc'];
560 $price_min = $datapriceofproduct[
'price_min'];
561 $price_base_type = empty($datapriceofproduct[
'price_base_type']) ?
'HT' : $datapriceofproduct[
'price_base_type'];
562 $tva_tx = $datapriceofproduct[
'tva_tx'];
563 $tva_npr = $datapriceofproduct[
'tva_npr'];
565 $tmpvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $tva_tx));
566 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $prod->tva_tx));
569 if (!empty($price_ht)) {
571 $pu_ttc =
price2num((
float) $pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
572 } elseif ($tmpvat != $tmpprodvat) {
575 if ($price_base_type !=
'HT') {
576 $pu_ht =
price2num($pu_ttc / (1 + ((
float) $tmpvat / 100)),
'MU');
578 $pu_ttc =
price2num($pu_ht * (1 + ((
float) $tmpvat / 100)),
'MU');
586 $outputlangs = $langs;
588 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
589 $newlang =
GETPOST(
'lang_id',
'aZ09');
591 if (empty($newlang)) {
592 $newlang =
$object->thirdparty->default_lang;
594 if (!empty($newlang)) {
596 $outputlangs->setDefaultLang($newlang);
599 $desc = (!empty($prod->multilangs [$outputlangs->defaultlang] [
"description"])) ? $prod->multilangs [$outputlangs->defaultlang] [
"description"] : $prod->
description;
601 $desc = $prod->description;
607 if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
611 $outputlangs = $langs;
613 if (empty($newlang) &&
GETPOST(
'lang_id',
'alpha')) {
614 $newlang =
GETPOST(
'lang_id',
'alpha');
616 if (empty($newlang)) {
617 $newlang =
$object->thirdparty->default_lang;
619 if (!empty($newlang)) {
621 $outputlangs->setDefaultLang($newlang);
622 $outputlangs->load(
'products');
624 if (!empty($prod->customcode)) {
625 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomCode") .
': ' . $prod->customcode;
627 if (!empty($prod->customcode) && !empty($prod->country_code)) {
630 if (!empty($prod->country_code)) {
631 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry($prod->country_code,
'', $db, $outputlangs, 0);
634 if (!empty($prod->customcode)) {
635 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomCode") .
': ' . $prod->customcode;
637 if (!empty($prod->customcode) && !empty($prod->country_code)) {
640 if (!empty($prod->country_code)) {
641 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin") .
': ' .
getCountry($prod->country_code,
'', $db, $langs, 0);
649 $fk_unit = $prod->fk_unit;
653 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
654 $tva_tx = str_replace(
'*',
'', $tva_tx);
655 if (empty($tva_tx)) {
658 $desc = $product_desc;
660 $fk_unit =
GETPOST(
'units',
'alpha');
663 $date_start_fill = !empty(
GETPOSTINT(
'date_start_fill')) ?
GETPOSTINT(
'date_start_fill') : null;
680 $remise_percent = (float)
price2num($remise_percent);
682 $price_min = (float)
price2num($price_min);
683 if ($usercanproductignorepricemin && (!empty($price_min) && ($pu_ht * (1 - $remise_percent / 100) < $price_min))) {
684 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1, $conf->currency));
688 $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);
693 unset($_POST[
'prod_entry_mode']);
694 unset($_POST[
'qty']);
695 unset($_POST[
'type']);
696 unset($_POST[
'remise_percent']);
697 unset($_POST[
'price_ht']);
698 unset($_POST[
'multicurrency_price_ht']);
699 unset($_POST[
'price_ttc']);
700 unset($_POST[
'tva_tx']);
701 unset($_POST[
'product_ref']);
702 unset($_POST[
'product_label']);
703 unset($_POST[
'product_desc']);
704 unset($_POST[
'fournprice']);
705 unset($_POST[
'buying_price']);
706 unset($_POST[
'np_marginRate']);
707 unset($_POST[
'np_markRate']);
708 unset($_POST[
'dp_desc']);
709 unset($_POST[
'idprod']);
710 unset($_POST[
'units']);
711 unset($_POST[
'date_starthour']);
712 unset($_POST[
'date_startmin']);
713 unset($_POST[
'date_startsec']);
714 unset($_POST[
'date_startday']);
715 unset($_POST[
'date_startmonth']);
716 unset($_POST[
'date_startyear']);
717 unset($_POST[
'date_endhour']);
718 unset($_POST[
'date_endmin']);
719 unset($_POST[
'date_endsec']);
720 unset($_POST[
'date_endday']);
721 unset($_POST[
'date_endmonth']);
722 unset($_POST[
'date_endyear']);
723 unset($_POST[
'date_start_fill']);
724 unset($_POST[
'date_end_fill']);
725 unset($_POST[
'situations']);
726 unset($_POST[
'progress']);
734 } elseif ($action ==
'updateline' && $permissiontoadd && !
GETPOST(
'cancel',
'alpha')) {
735 if (!
$object->fetch($id) > 0) {
744 $ref_fourn =
GETPOST(
'fourn_ref',
'alpha');
752 if (preg_match(
'/\*/', $vat_rate)) {
757 $vat_rate = str_replace(
'*',
'', $vat_rate);
762 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
763 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
766 if ($objectline->fetch(
GETPOSTINT(
'lineid'))) {
767 $objectline->array_options = $array_options;
768 $result = $objectline->insertExtraFields();
774 $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
777 if (is_array($extralabelsline)) {
779 foreach ($extralabelsline as $key => $value) {
780 unset($_POST[
"options_" . $key]);
786 if (!
GETPOST(
'qty',
'alpha')) {
794 if (!empty($productid)) {
796 $product->fetch($productid);
798 $type = $product->type;
800 $price_min = $product->price_min;
802 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
805 $label = $product->label;
808 if (((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
"produit",
"ignore_price_min_advance")) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS')) && $price_min && ((
float)
price2num($pu_ht) * (1 - (
float) $remise_percent / 100) < (
float)
price2num($price_min))) {
809 setEventMessages($langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1, $conf->currency)),
null,
'errors');
814 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
818 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
823 $langs->load(
"errors");
824 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
828 $date_start_fill = !empty(
GETPOSTINT(
'date_start_fill')) ?
GETPOSTINT(
'date_start_fill') :
'NULL';
833 $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);
837 unset($_POST[
'qty']);
838 unset($_POST[
'type']);
839 unset($_POST[
'productid']);
840 unset($_POST[
'remise_percent']);
841 unset($_POST[
'price_ht']);
842 unset($_POST[
'multicurrency_price_ht']);
843 unset($_POST[
'price_ttc']);
844 unset($_POST[
'tva_tx']);
845 unset($_POST[
'product_ref']);
846 unset($_POST[
'product_label']);
847 unset($_POST[
'product_desc']);
848 unset($_POST[
'fournprice']);
849 unset($_POST[
'buying_price']);
850 unset($_POST[
'np_marginRate']);
851 unset($_POST[
'np_markRate']);
852 unset($_POST[
'dp_desc']);
853 unset($_POST[
'idprod']);
854 unset($_POST[
'units']);
855 unset($_POST[
'date_starthour']);
856 unset($_POST[
'date_startmin']);
857 unset($_POST[
'date_startsec']);
858 unset($_POST[
'date_startday']);
859 unset($_POST[
'date_startmonth']);
860 unset($_POST[
'date_startyear']);
861 unset($_POST[
'date_endhour']);
862 unset($_POST[
'date_endmin']);
863 unset($_POST[
'date_endsec']);
864 unset($_POST[
'date_endday']);
865 unset($_POST[
'date_endmonth']);
866 unset($_POST[
'date_endyear']);
867 unset($_POST[
'situations']);
868 unset($_POST[
'progress']);
882llxHeader(
'', $langs->trans(
"RepeatableSupplierInvoice"), $help_url,
'', 0, 0,
'',
'',
'',
'mod-fourn-facture page-card-rec');
884$form =
new Form($db);
886if (isModEnabled(
'project')) {
889$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(
"Customer") .
'</td><td>' .
$object->thirdparty->getNomUrl(1,
'customer') .
'</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(
'', $mysoc,
$object->thirdparty, $lineid, 0);
1126 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');
1294 $dateexample =
$object->date_when;
1299 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m') .
')';
1300 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%m') .
')';
1301 $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m') .
')';
1302 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B') .
')';
1303 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%B') .
')';
1304 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B') .
')';
1305 $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y') .
')';
1306 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date($dateexample,
'%Y') .
')';
1307 $substitutionarray[
'__INVOICE_NEXT_YEAR__'] = $langs->trans(
"NextYearOfInvoice") .
' (' . $langs->trans(
"Example") .
': ' .
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y') .
')';
1309 $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') .
')';
1311 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] =
$object->nb_gen_done;
1312 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] =
$object->nb_gen_max;
1314 $htmltext =
'<i>' . $langs->trans(
"FollowingConstantsWillBeSubstituted") .
':<br>';
1315 foreach ($substitutionarray as $key => $val) {
1316 $htmltext .= $key .
' = ' . $langs->trans($val) .
'<br>';
1318 $htmltext .=
'</i>';
1321 print
'<tr><td class="nowrap">';
1322 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1323 print $langs->trans(
'BankAccount');
1325 if ($action !=
'editbankaccount' && $usercancreate &&
$object->statut == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1326 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>';
1328 print
'</tr></table>';
1330 if ($action ==
'editbankaccount') {
1331 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'fk_account', 1);
1333 $form->formSelectAccount($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_account,
'none');
1339 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1343 print $form->editfieldkey($form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic'),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'));
1344 print
'</td><td class="wordbreak">';
1345 print $form->editfieldval($langs->trans(
"NotePublic"),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1351 print $form->editfieldkey($form->textwithpicto($langs->trans(
"NotePrivate"), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate'),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'));
1352 print
'</td><td class="wordbreak">';
1353 print $form->editfieldval($langs->trans(
"NotePrivate"),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1358 print
'<tr><td class="nowrap">';
1359 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1360 print $langs->trans(
'Model');
1362 if ($action !=
'editmodelpdf' && $usercancreate &&
$object->statut == FactureFournisseurRec::STATUS_NOTSUSPENDED) {
1363 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>';
1365 print
'</tr></table>';
1367 if ($action ==
'editmodelpdf') {
1368 include_once DOL_DOCUMENT_ROOT .
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
1371 foreach ($models as $k => $model) {
1372 $list[] = str_replace(
':',
'|', $k) .
':' . $model;
1374 $select =
'select;' . implode(
',', $list);
1376 print $form->editfieldval($langs->trans(
'Model'),
'modelpdf',
$object->model_pdf, $object, $usercancreate, $select);
1389 print
'<div class="fichehalfright">';
1390 print
'<div class="underbanner clearboth"></div>';
1395 $title = $langs->trans(
"Recurrence");
1398 print
'<table class="border centpercent tableforfield">';
1400 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
1402 print
'<tr><td colspan="2">' .
img_picto(
'',
'recurring',
'class="pictofixedwidth"') . $title .
'</td></tr>';
1405 print
'<tr><td style="width: 50%">';
1406 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1407 print $langs->trans(
'Frequency');
1409 if ($action !=
'editfrequency' && $usercancreate) {
1410 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>';
1412 print
'</tr></table>';
1414 if ($action ==
'editfrequency') {
1415 print
'<form method="post" action="' . $_SERVER[
"PHP_SELF"] .
'?facid=' .
$object->id .
'">';
1416 print
'<input type="hidden" name="action" value="setfrequency">';
1417 print
'<input type="hidden" name="token" value="' .
newToken() .
'">';
1418 print
'<table class="nobordernopadding">';
1420 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'));
1422 print
'<td class="left"><input type="submit" class="button button-edit" value="' . $langs->trans(
"Modify") .
'"></td>';
1423 print
'</tr></table></form>';
1426 print $langs->trans(
'FrequencyPer_' .
$object->unit_frequency,
$object->frequency);
1428 print $langs->trans(
"NotARecurringInvoiceTemplate");
1435 if ($action ==
'date_when' ||
$object->frequency > 0) {
1436 print $form->editfieldkey($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $usercancreate,
'day');
1438 print $langs->trans(
"NextDateToExecution");
1441 if ($action ==
'date_when' ||
$object->frequency > 0) {
1442 print $form->editfieldval($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $usercancreate,
'day',
$object->date_when,
null,
'',
'', 0,
'strikeIfMaxNbGenReached');
1445 if (!
$object->isMaxNbGenReached()) {
1450 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
1457 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1458 print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max, $object, $usercancreate);
1460 print $langs->trans(
"MaxPeriodNumber");
1463 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1464 print $form->editfieldval($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max ?
$object->nb_gen_max :
'',
$object, $usercancreate);
1473 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1474 print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $usercancreate);
1476 print $langs->trans(
"StatusOfAutoGeneratedInvoices");
1479 $select =
'select;0:' . $langs->trans(
'BillStatusDraft') .
',1:' . $langs->trans(
'BillStatusValidated');
1480 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1481 print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $usercancreate, $select);
1488 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1489 print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $usercancreate);
1491 print $langs->trans(
"StatusOfGeneratedDocuments");
1495 $select =
'select;0:' . $langs->trans(
'DoNotGenerateDoc') .
',1:' . $langs->trans(
'AutogenerateDoc');
1496 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1497 print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $usercancreate, $select);
1502 print
'<input type="hidden" name="generate_pdf" value="1">';
1511 if (empty($conf->cron->enabled)) {
1512 print
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
1515 print
'<div class="underbanner clearboth"></div>';
1516 print
'<table class="border centpercent tableforfield">';
1519 print
'<tr><td style="width: 50%">' . $langs->trans(
"NbOfGenerationDone") .
'</td>';
1527 print $langs->trans(
"DateLastGeneration");
1541 print
'<div class="clearboth"></div><br>';
1544 print
' <form name="addproduct" id="addproduct" action="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id . (($action !=
'editline') ?
'#add' :
'#line_' .
GETPOSTINT(
'lineid')) .
'" method="POST">
1545 <input type="hidden" name="token" value="' .
newToken() .
'">
1546 <input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline') .
'">
1547 <input type="hidden" name="mode" value="">
1548 <input type="hidden" name="id" value="' .
$object->id .
'">
1551 if (!empty($conf->use_javascript_ajax) &&
$object->statut == 0) {
1552 include DOL_DOCUMENT_ROOT .
'/core/tpl/ajaxrow.tpl.php';
1555 print
'<div class="div-table-responsive-no-min">';
1556 print
'<table id="tablelines" class="noborder noshadow" width="100%">';
1560 $canchangeproduct = 1;
1562 foreach (
$object->lines as $line) {
1563 $line->ref = $line->label;
1564 $line->product_label = $line->label;
1565 $line->subprice = $line->pu_ht;
1568 global $canchangeproduct;
1569 $canchangeproduct = 0;
1572 $object->printObjectLines($action, $mysoc,
$object->thirdparty, $lineid, 0);
1577 if (
$object->statut == $object::STATUS_DRAFT && $usercancreate && $action !=
'valid' && $action !=
'editline') {
1578 if ($action !=
'editline') {
1581 $parameters = array();
1582 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
1586 if (empty($reshook)) {
1587 global $senderissupplier;
1589 $senderissupplier = 2;
1604 print
'<div class="tabsAction">';
1606 if (empty(
$object->suspended)) {
1607 if ($usercancreate) {
1609 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1611 if (empty(
$object->frequency) ||
$object->date_when <= $nowlasthour) {
1612 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>';
1614 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1618 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") .
'</a></div>';
1622 if ($usercancreate) {
1623 if (empty(
$object->suspended)) {
1624 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>';
1626 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>';
1631 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")));
1635 print
'<div class="fichecenter"><div class="fichehalfleft">';
1636 print
'<a name="builddoc"></a>';
1639 $linktoelem = $form->showLinkToObjectBlock($object,
null, array(
'invoice'));
1641 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1643 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($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage a WYSIWYG editor.
Class to manage suppliers invoices.
Class to manage supplier invoice lines of templates.
Class to manage invoice templates.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage Dolibarr users.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
dol_get_last_hour($date, $gm='tzserver')
Return GMT time for last hour of a given GMT date (it replaces hours, min and second part to 23:59:59...
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_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.
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 a 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.