36require
'../../main.inc.php';
37require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture-rec.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
40if (isModEnabled(
'project')) {
41 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';
59$langs->loadLangs(array(
'bills',
'companies',
'compta',
'admin',
'other',
'products',
'banks'));
61$action =
GETPOST(
'action',
'alpha');
62$massaction =
GETPOST(
'massaction',
'alpha');
64$confirm =
GETPOST(
'confirm',
'alpha');
65$cancel =
GETPOST(
'cancel',
'alpha');
66$toselect =
GETPOST(
'toselect',
'array');
67$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'invoicetemplatelist';
68$backtopage =
GETPOST(
'backtopage',
'alpha');
69$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
76 $socid = $user->socid;
78$objecttype =
'facture_rec';
79if ($action ==
"create" || $action ==
"add") {
84$year_date_when =
GETPOST(
'year_date_when');
85$month_date_when =
GETPOST(
'month_date_when');
86$selectedLines =
GETPOST(
'toselect',
'array');
89$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
90$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
92if (empty($page) || $page == -1) {
95$offset = $limit * $page;
100 $sortfield =
'f.titre';
102$pageprev = $page - 1;
103$pagenext = $page + 1;
106if (($id > 0 || $ref) && $action !=
'create' && $action !=
'add') {
107 $ret =
$object->fetch($id, $ref);
114$hookmanager->initHooks(array(
'invoicereccard',
'globalcard'));
118$extrafields->fetch_name_optionals_label(
$object->table_element);
120$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
122$permissionnote = $user->hasRight(
'facture',
'creer');
123$permissiondellink = $user->hasRight(
'facture',
'creer');
124$permissiontoedit = $user->hasRight(
'facture',
'creer');
126$usercanread = $user->hasRight(
'facture',
'lire');
127$usercancreate = $user->hasRight(
'facture',
'creer');
128$usercanissuepayment = $user->hasRight(
'facture',
'paiement');
129$usercandelete = $user->hasRight(
'facture',
'supprimer');
132$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'facture',
'invoice_advance',
'validate')));
133$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->send);
134$usercanreopen = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->reopen);
135$usercanunvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'facture',
'invoice_advance',
'unvalidate')));
138$usercanproductignorepricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance')) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
139$usercancreatemargin = $user->hasRight(
"margins",
"creer");
140$usercanreadallmargin = $user->hasRight(
"margins",
"liretous");
141$usercancreatewithdrarequest = $user->hasRight(
"prelevement",
"bons",
"creer");
155if (
GETPOST(
'cancel',
'alpha')) {
159if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
163$parameters = array();
164$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
169if (empty($reshook)) {
170 $backurlforlist = DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php';
172 if (empty($backtopage) || ($cancel && empty($id))) {
173 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
174 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
175 $backtopage = $backurlforlist;
177 $backtopage = DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
185 if (!empty($backtopageforcancel)) {
186 header(
"Location: ".$backtopageforcancel);
188 } elseif (!empty($backtopage)) {
189 header(
"Location: ".$backtopage);
196 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
199 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
201 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
203 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
212 if ($action ==
'add' && $usercancreate) {
213 if (!
GETPOST(
'title',
'alphanohtml')) {
214 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Title")),
null,
'errors');
229 if (empty($reyear) || empty($remonth) || empty($reday)) {
230 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Date")),
null,
'errors');
253 $object->frequency = $frequency;
255 $object->nb_gen_max = $nb_gen_max;
258 $object->fk_project = $projectid;
260 $date_next_execution =
dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
261 $object->date_when = $date_next_execution;
263 $ret = $extrafields->setOptionalsFromPost(
null, $object);
273 $srcObject->fetchObjectLinked();
275 if (!empty($srcObject->linkedObjectsIds[
'contrat'])) {
276 $contractidid = reset($srcObject->linkedObjectsIds[
'contrat']);
279 $object->origin_id = $contractidid;
286 $oldinvoice =
new Facture($db);
289 $onlylines =
GETPOST(
'toselect',
'array');
291 $result =
$object->create($user, $oldinvoice->id, 0, $onlylines);
293 $result = $oldinvoice->delete($user, 1);
308 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?facid='.
$object->id);
319 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $user->hasRight(
'facture',
'supprimer')) {
322 header(
"Location: ".DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php');
328 if ($action ==
'setconditions' && $usercancreate) {
330 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentTerm"));
332 } elseif ($action ==
'setmode' && $usercancreate) {
334 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentMode"));
336 $object->setValueFrom(
'fk_societe_rib', 0);
339 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?facid='.
$object->id);
341 } elseif ($action ==
'classin' && $usercancreate) {
343 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Project"));
345 } elseif ($action ==
'setref' && $usercancreate) {
347 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModifiedFromYToZ", $langs->transnoentitiesnoconv(
"Title"),
$object->title, $ref);
348 $result =
$object->setValueFrom(
'titre', $ref,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
354 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
355 $langs->load(
"errors");
356 setEventMessages($langs->trans(
'ErrorRefAlreadyExists', $ref),
null,
'errors');
361 } elseif ($action ==
'setbankaccount' && $usercancreate) {
363 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Bank"));
365 } elseif ($action ==
'setbankaccountcustomer' && $usercancreate) {
367 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"DebitBankAccount"));
368 $fk_societe_rib = (
GETPOSTINT(
'accountcustomerid') !=
"-1") ?
GETPOSTINT(
'accountcustomerid') : 0;
369 $result =
$object->setValueFrom(
'fk_societe_rib', $fk_societe_rib);
370 } elseif ($action ==
'setfrequency' && $usercancreate) {
372 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Frequency"));
374 } elseif ($action ==
'setdate_when' && $usercancreate) {
380 } elseif ($action ==
'setnb_gen_max' && $usercancreate) {
383 } elseif ($action ==
'setauto_validate' && $usercancreate) {
386 } elseif ($action ==
'setgenerate_pdf' && $usercancreate) {
389 } elseif ($action ==
'setmodelpdf' && $usercancreate) {
392 } elseif ($action ==
'disable' && $usercancreate) {
396 $object->context[
'actionmsg'] = $langs->trans(
"RecordDisabled");
398 $res =
$object->setValueFrom(
'suspended', 1,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
409 } elseif ($action ==
'enable' && $usercancreate) {
413 $object->context[
'actionmsg'] = $langs->trans(
"RecordEnabled");
415 $res =
$object->setValueFrom(
'suspended', 0,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
426 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
428 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
429 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
435 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
446 if ($line->delete($user) > 0) {
447 $result =
$object->update_price(1);
460 } elseif ($action ==
'update_extras' && $usercancreate) {
464 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
470 $result =
$object->insertExtraFields(
'BILLREC_MODIFY');
479 if ($action ==
'addline' && $usercancreate) {
480 $langs->load(
'errors');
485 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
488 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'alpha');
489 if ($prod_entry_mode ==
'free') {
495 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
500 $tva_tx = (
GETPOST(
'tva_tx',
'alpha') ?
GETPOST(
'tva_tx',
'alpha') : 0);
504 if (empty($remise_percent)) {
509 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
510 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
512 if (is_array($extralabelsline)) {
514 foreach ($extralabelsline as $key => $value) {
515 unset($_POST[
"options_".$key.$predef]);
519 if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) {
520 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
523 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
524 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
527 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && (!($price_ht >= 0) || $price_ht ==
'')) {
528 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
532 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
535 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
536 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
540 $langs->load(
"errors");
541 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
545 if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
551 $ret =
$object->fetch_thirdparty();
556 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
567 if (!empty($idprod) && $idprod > 0) {
569 $prod->fetch($idprod);
571 $label = ((
GETPOST(
'product_label') &&
GETPOST(
'product_label') != $prod->label) ?
GETPOST(
'product_label') :
'');
583 $datapriceofproduct = $prod->getSellPrice($mysoc,
$object->thirdparty, $pqp);
585 $pu_ht = $datapriceofproduct[
'pu_ht'];
586 $pu_ttc = $datapriceofproduct[
'pu_ttc'];
587 $price_min = $datapriceofproduct[
'price_min'];
588 $price_base_type = empty($datapriceofproduct[
'price_base_type']) ?
'HT' : $datapriceofproduct[
'price_base_type'];
592 $tmpvat = (float)
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
593 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $prod->tva_tx));
596 if (!empty($price_ht)) {
598 $pu_ttc =
price2num((
float) $pu_ht * (1 + ($tmpvat / 100)),
'MU');
599 } elseif ($tmpvat != $tmpprodvat) {
602 if ($price_base_type !=
'HT') {
603 $pu_ht =
price2num((
float) $pu_ttc / (1 + ($tmpvat / 100)),
'MU');
605 $pu_ttc =
price2num((
float) $pu_ht * (1 + ($tmpvat / 100)),
'MU');
613 $outputlangs = $langs;
615 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
616 $newlang =
GETPOST(
'lang_id',
'aZ09');
618 if (empty($newlang)) {
619 $newlang =
$object->thirdparty->default_lang;
621 if (!empty($newlang)) {
623 $outputlangs->setDefaultLang($newlang);
626 $desc = (!empty($prod->multilangs [$outputlangs->defaultlang] [
"description"])) ? $prod->multilangs [$outputlangs->defaultlang] [
"description"] : $prod->
description;
628 $desc = $prod->description;
634 if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
638 $outputlangs = $langs;
640 if (empty($newlang) &&
GETPOST(
'lang_id',
'alpha')) {
641 $newlang =
GETPOST(
'lang_id',
'alpha');
643 if (empty($newlang)) {
644 $newlang =
$object->thirdparty->default_lang;
646 if (!empty($newlang)) {
648 $outputlangs->setDefaultLang($newlang);
649 $outputlangs->load(
'products');
651 if (!empty($prod->customcode)) {
652 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
654 if (!empty($prod->customcode) && !empty($prod->country_code)) {
657 if (!empty($prod->country_code)) {
658 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $outputlangs, 0);
661 if (!empty($prod->customcode)) {
662 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
664 if (!empty($prod->customcode) && !empty($prod->country_code)) {
667 if (!empty($prod->country_code)) {
668 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $langs, 0);
676 $fk_unit = $prod->fk_unit;
680 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
681 $tva_tx = str_replace(
'*',
'', $tva_tx);
682 if (empty($tva_tx)) {
685 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
686 $desc = $product_desc;
688 $fk_unit =
GETPOST(
'units',
'alpha');
691 $date_start_fill =
GETPOSTINT(
'date_start_fill');
707 $fk_parent_line =
GETPOST(
'fk_parent_line',
'int');
709 if ($usercanproductignorepricemin && (!empty($price_min) && ((
float)
price2num($pu_ht) * (1 - (
float)
price2num($remise_percent) / 100) < (
float)
price2num($price_min)))) {
710 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
714 $result =
$object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, $idprod, $remise_percent, $price_base_type, $info_bits, 0, $pu_ttc, $type, -1, $special_code, $label, $fk_unit, 0, $date_start_fill, $date_end_fill, $fournprice, $buyingprice, $fk_parent_line);
737 unset($_POST[
'prod_entry_mode']);
739 unset($_POST[
'qty']);
740 unset($_POST[
'type']);
741 unset($_POST[
'remise_percent']);
742 unset($_POST[
'price_ht']);
743 unset($_POST[
'multicurrency_price_ht']);
744 unset($_POST[
'price_ttc']);
745 unset($_POST[
'tva_tx']);
746 unset($_POST[
'product_ref']);
747 unset($_POST[
'product_label']);
748 unset($_POST[
'product_desc']);
749 unset($_POST[
'fournprice']);
750 unset($_POST[
'buying_price']);
751 unset($_POST[
'np_marginRate']);
752 unset($_POST[
'np_markRate']);
753 unset($_POST[
'dp_desc']);
754 unset($_POST[
'idprod']);
755 unset($_POST[
'units']);
757 unset($_POST[
'date_starthour']);
758 unset($_POST[
'date_startmin']);
759 unset($_POST[
'date_startsec']);
760 unset($_POST[
'date_startday']);
761 unset($_POST[
'date_startmonth']);
762 unset($_POST[
'date_startyear']);
763 unset($_POST[
'date_endhour']);
764 unset($_POST[
'date_endmin']);
765 unset($_POST[
'date_endsec']);
766 unset($_POST[
'date_endday']);
767 unset($_POST[
'date_endmonth']);
768 unset($_POST[
'date_endyear']);
770 unset($_POST[
'date_start_fill']);
771 unset($_POST[
'date_end_fill']);
773 unset($_POST[
'situations']);
774 unset($_POST[
'progress']);
782 } elseif ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
783 if (!
$object->fetch($id) > 0) {
801 if (preg_match(
'/\*/', $vat_rate)) {
806 $vat_rate = str_replace(
'*',
'', $vat_rate);
815 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
816 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
819 if ($objectline->fetch(
GETPOSTINT(
'lineid'))) {
820 $objectline->array_options = $array_options;
821 $result = $objectline->insertExtraFields();
827 $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
830 if (is_array($extralabelsline)) {
832 foreach ($extralabelsline as $key => $value) {
833 unset($_POST[
"options_".$key]);
839 if ($special_code == 3) {
856 if (empty($remise_percent)) {
862 if (!empty($productid)) {
864 $product->fetch($productid);
866 $type = $product->type;
868 $price_min = $product->price_min;
870 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
879 setEventMessages($langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, - 1,
$conf->currency)),
null,
'errors');
884 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
888 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
893 $langs->load(
"errors");
894 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
898 $date_start_fill =
GETPOSTINT(
'date_start_fill');
900 $fk_parent_line =
GETPOST(
'fk_parent_line',
'int');
952 unset($_POST[
'qty']);
953 unset($_POST[
'type']);
954 unset($_POST[
'productid']);
955 unset($_POST[
'remise_percent']);
956 unset($_POST[
'price_ht']);
957 unset($_POST[
'multicurrency_price_ht']);
958 unset($_POST[
'price_ttc']);
959 unset($_POST[
'tva_tx']);
960 unset($_POST[
'product_ref']);
961 unset($_POST[
'product_label']);
962 unset($_POST[
'product_desc']);
963 unset($_POST[
'fournprice']);
964 unset($_POST[
'buying_price']);
965 unset($_POST[
'np_marginRate']);
966 unset($_POST[
'np_markRate']);
968 unset($_POST[
'dp_desc']);
969 unset($_POST[
'idprod']);
970 unset($_POST[
'units']);
972 unset($_POST[
'date_starthour']);
973 unset($_POST[
'date_startmin']);
974 unset($_POST[
'date_startsec']);
975 unset($_POST[
'date_startday']);
976 unset($_POST[
'date_startmonth']);
977 unset($_POST[
'date_startyear']);
978 unset($_POST[
'date_endhour']);
979 unset($_POST[
'date_endmin']);
980 unset($_POST[
'date_endsec']);
981 unset($_POST[
'date_endday']);
982 unset($_POST[
'date_endmonth']);
983 unset($_POST[
'date_endyear']);
985 unset($_POST[
'situations']);
986 unset($_POST[
'progress']);
999$title =
$object->ref.
" - ".$langs->trans(
'Card');
1004$form =
new Form($db);
1006if (isModEnabled(
'project')) {
1009 $formproject =
null;
1011$companystatic =
new Societe($db);
1019if ($action ==
'create') {
1020 print
load_fiche_titre($langs->trans(
"CreateRepeatableInvoice"),
'',
'bill');
1024 $product_static =
new Product($db);
1026 if (
$object->fetch($id, $ref) > 0) {
1027 $result =
$object->getLinesArray();
1029 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1030 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1031 print
'<input type="hidden" name="action" value="add">';
1032 print
'<input type="hidden" name="facid" value="'.$object->id.
'">';
1038 if (isModEnabled(
'project')) {
1041 if (
$object->fk_account > 0) {
1045 print
'<table class="border centpercent">';
1050 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Title").
'</td><td>';
1051 print
'<input class="flat quatrevingtpercent" type="text" name="title" value="'.dol_escape_htmltag(
GETPOST(
"title",
'alphanohtml')).
'" autofocus>';
1055 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Customer").
'</td><td>'.
$object->thirdparty->getNomUrl(1,
'customer').
'</td>';
1060 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1061 print $form->getSelectInvoiceSubtype(GETPOSTISSET(
'subtype') ?
GETPOST(
'subtype') :
$object->subtype,
'subtype', 0, 0,
'');
1065 $note_public = GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') :
$object->note_public;
1066 $note_private = GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') :
$object->note_private;
1071 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%m').
')';
1072 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%m').
')';
1074 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%B').
')';
1075 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%B').
')';
1076 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%B').
')';
1078 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%Y').
')';
1081 $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans(
"DateNextInvoiceBeforeGen").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'dayhour').
')';
1082 $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_AFTER_GEN__'] = $langs->trans(
"DateNextInvoiceAfterGen").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, 2,
'm'),
'dayhour').
')';
1083 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $langs->trans(
"Count");
1084 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $langs->trans(
"MaxPeriodNumber");
1086 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
1087 foreach ($substitutionarray as $key => $val) {
1088 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
1090 $htmltext .=
'</i>';
1093 print
"<tr><td>".$langs->trans(
"Author").
"</td><td>".$user->getFullName($langs).
"</td></tr>";
1096 print
"<tr><td>".$langs->trans(
"PaymentConditions").
"</td><td>";
1097 print $form->getSelectConditionsPaiements(GETPOSTISSET(
'cond_reglement_id') ?
GETPOSTINT(
'cond_reglement_id') :
$object->cond_reglement_id,
'cond_reglement_id', -1, 0, 0,
'');
1102 print
"<tr><td>".$langs->trans(
"PaymentMode").
"</td><td>";
1103 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1104 print $form->select_types_paiements(GETPOSTISSET(
'mode_reglement_id') ?
GETPOSTINT(
'mode_reglement_id') :
$object->mode_reglement_id,
'mode_reglement_id',
'', 0, 1, 0, 0, 1,
'', 1);
1109 print
"<tr><td>".$langs->trans(
'DebitBankAccount').
"</td><td>";
1110 $defaultRibId =
$object->thirdparty->getDefaultRib();
1111 $form->selectRib(GETPOSTISSET(
'accountcustomerid') ?
GETPOSTINT(
'accountcustomerid') : $defaultRibId,
'accountcustomerid',
'fk_soc='.
$object->socid, 1,
'', 1);
1115 $(document).ready(function() {
1116 if($("#selectmode_reglement_id option:selected").data("code") != "' . $factureRec::PAYMENTCODETOEDITSOCIETERIB .
'") {
1117 hideselectfksocieterib();
1119 $("#selectmode_reglement_id").change(function() {
1120 if($("#selectmode_reglement_id option:selected").data("code") != "'. $factureRec::PAYMENTCODETOEDITSOCIETERIB .
'") {
1121 hideselectfksocieterib(1);
1123 showselectfksocieterib();
1128 function hideselectfksocieterib(empty = 0){
1129 $("#selectaccountcustomerid").closest("tr").hide();
1131 $("#selectaccountcustomerid").val("-1").change();
1135 function showselectfksocieterib(){
1136 $("#selectaccountcustomerid").closest("tr").show();
1141 if (
$object->fk_account > 0) {
1142 print
"<tr><td>".$langs->trans(
'BankAccount').
"</td><td>";
1143 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
1152 $extralabels = $extrafields->fetch_name_optionals_label($draft->table_element);
1153 if ($draft->fetch_optionals() > 0) {
1154 $object->array_options = array_merge(
$object->array_options, $draft->array_options);
1157 print
$object->showOptionals($extrafields,
'create', $parameters);
1160 if (isModEnabled(
'project') && is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0 && is_object($formproject)) {
1162 $langs->load(
'projects');
1163 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1164 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1165 $numprojet = $formproject->select_projects(
$object->thirdparty->id, $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 0, 0,
'');
1166 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 :
'')).
'">'.
img_object($langs->trans(
"AddProject"),
'add').
'</a>';
1171 print
"<tr><td>".$langs->trans(
'Model').
"</td><td>";
1172 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
1174 print
img_picto(
'',
'generic',
'class="pictofixedwidth"');
1176 print $form->selectarray(
'modelpdf', $list,
$conf->global->FACTURE_ADDON_PDF);
1181 print
'<td class="tdtop">';
1182 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic');
1185 $doleditor =
new DolEditor(
'note_public', $note_public,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1186 print $doleditor->Create(1);
1189 if (empty($user->socid)) {
1191 print
'<td class="tdtop">';
1192 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate');
1195 $doleditor =
new DolEditor(
'note_private', $note_private,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1196 print $doleditor->Create(1);
1206 $title = $langs->trans(
"Recurrence");
1209 print
'<span class="opacitymedium">'.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name')).
'</span><br><br>';
1213 print
'<table class="border centpercent">';
1216 print
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"Frequency"), $langs->transnoentitiesnoconv(
'toolTipFrequency')).
"</td><td>";
1217 print
'<input type="text" class="width50" name="frequency" value="'.GETPOST(
'frequency',
'int').
'"> ';
1218 print $form->selectarray(
'unit_frequency', array(
'd' => $langs->trans(
'Day'),
'm' => $langs->trans(
'Month'),
'y' => $langs->trans(
'Year')), (
GETPOST(
'unit_frequency') ?
GETPOST(
'unit_frequency') :
'm'));
1222 print
"<tr><td>".$langs->trans(
'NextDateToExecution').
"</td><td>";
1224 print $form->selectDate($date_next_execution,
'', 1, 1, 0,
"add", 1, 1);
1228 print
"<tr><td>".$langs->trans(
"MaxPeriodNumber").
"</td><td>";
1229 print
'<input type="text" class="width50" name="nb_gen_max" value="'.GETPOSTINT(
'nb_gen_max').
'">';
1233 print
"<tr><td>".$langs->trans(
"StatusOfAutoGeneratedInvoices").
"</td><td>";
1234 $select = array(
'0' => $langs->trans(
'BillStatusDraft'),
'1' => $langs->trans(
'BillStatusValidated'));
1235 print $form->selectarray(
'auto_validate', $select,
GETPOSTINT(
'auto_validate'));
1240 print
"<tr><td>".$langs->trans(
"StatusOfGeneratedDocuments").
"</td><td>";
1241 $select = array(
'0' => $langs->trans(
'DoNotGenerateDoc'),
'1' => $langs->trans(
'AutoGenerateDoc'));
1242 print $form->selectarray(
'generate_pdf', $select,
GETPOSTINT(
'generate_pdf'));
1245 print
'<input type="hidden" name="generate_pdf" value="1">';
1253 $title = $langs->trans(
"ProductsAndServices");
1254 if (!isModEnabled(
'service')) {
1255 $title = $langs->trans(
"Products");
1256 } elseif (!isModEnabled(
'product')) {
1257 $title = $langs->trans(
"Services");
1265 print
'<div class="div-table-responsive-no-min">';
1266 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1270 $object->printOriginLinesList(
'', $selectedLines);
1279 if (!empty($flag_price_may_change)) {
1280 print
'<tr><td colspan="3" class="left">';
1281 print
'<select name="usenewprice" class="flat">';
1282 print
'<option value="0">'.$langs->trans(
"AlwaysUseFixedPrice").
'</option>';
1283 print
'<option value="1" disabled>'.$langs->trans(
"AlwaysUseNewPrice").
'</option>';
1289 print $form->buttonsSaveCancel(
"Create");
1302 if ($action ==
'ask_deleteline') {
1303 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'',
'no', 1);
1306 if ($action ==
'delete') {
1307 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteRepeatableInvoice'), $langs->trans(
'ConfirmDeleteRepeatableInvoice'),
'confirm_delete',
'',
'no', 1);
1311 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
1312 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1313 if (empty($reshook)) {
1314 $formconfirm .= $hookmanager->resPrint;
1315 } elseif ($reshook > 0) {
1316 $formconfirm = $hookmanager->resPrint;
1321 $author =
new User($db);
1322 $author->fetch(
$object->user_author);
1326 print
dol_get_fiche_head($head,
'card', $langs->trans(
"RepeatableInvoice"), -1,
'bill');
1330 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1333 if ($action !=
'editref') {
1334 $morehtmlref .= $form->editfieldkey(
$object->ref,
'ref',
$object->ref, $object, $user->hasRight(
'facture',
'creer'),
'',
'', 0, 2);
1336 $morehtmlref .= $form->editfieldval(
'',
'ref',
$object->ref, $object, $user->hasRight(
'facture',
'creer'),
'string');
1339 $morehtmlref .=
'<div class="refidno">';
1344 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'customer');
1346 if (isModEnabled(
'project')) {
1347 $langs->load(
"projects");
1348 $morehtmlref .=
'<br>';
1349 if ($user->hasRight(
'facture',
'creer')) {
1350 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1351 if ($action !=
'classify') {
1352 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1354 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1356 if (!empty(
$object->fk_project)) {
1358 $proj->fetch(
$object->fk_project);
1359 $morehtmlref .=
' : '.$proj->getNomUrl(1);
1361 $morehtmlref .=
' - '.$proj->title;
1368 $morehtmlref .=
'</div>';
1370 $morehtmlstatus =
'';
1372 dol_banner_tab($object,
'ref', $linkback, 1,
'title',
'none', $morehtmlref,
'', 0,
'', $morehtmlstatus);
1374 print
'<div class="fichecenter">';
1375 print
'<div class="fichehalfleft">';
1376 print
'<div class="underbanner clearboth"></div>';
1378 print
'<table class="border centpercent tableforfield">';
1382 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1384 print
$object->getSubtypeLabel(
'facture_rec');
1390 print
'<tr><td class="titlefield">'.$langs->trans(
"Author").
'</td><td>';
1391 print $author->getNomUrl(-1);
1395 print
'<tr><td>'.$langs->trans(
"AmountHT").
'</td>';
1396 print
'<td>'.price(
$object->total_ht, 0, $langs, 1, -1, -1,
$conf->currency).
'</td>';
1400 print
'<tr><td>'.$langs->trans(
"AmountVAT").
'</td><td>'.
price(
$object->total_tva, 0, $langs, 1, -1, -1,
$conf->currency).
'</td>';
1404 if (($mysoc->localtax1_assuj ==
"1" && $mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
1405 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td>';
1406 print
'<td class="nowrap">'.price(
$object->total_localtax1, 1,
'', 1, - 1, - 1,
$conf->currency).
'</td></tr>';
1408 if (($mysoc->localtax2_assuj ==
"1" && $mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
1409 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td>';
1410 print
'<td class=nowrap">'.price(
$object->total_localtax2, 1,
'', 1, - 1, - 1,
$conf->currency).
'</td></tr>';
1413 print
'<tr><td>'.$langs->trans(
"AmountTTC").
'</td><td colspan="3">'.
price(
$object->total_ttc, 0, $langs, 1, -1, -1,
$conf->currency).
'</td>';
1419 print
'<table class="nobordernopadding centpercent"><tr><td>';
1420 print $langs->trans(
'PaymentConditionsShort');
1422 if ($action !=
'editconditions' && $user->hasRight(
'facture',
'creer')) {
1423 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>';
1425 print
'</tr></table>';
1428 if ($action ==
'editconditions') {
1429 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
1431 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->cond_reglement_id,
'none');
1440 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1441 print $langs->trans(
'PaymentMode');
1443 if ($action !=
'editmode' && $user->hasRight(
'facture',
'creer')) {
1444 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>';
1446 print
'</tr></table>';
1448 if ($action ==
'editmode') {
1449 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
1451 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->mode_reglement_id,
'none');
1457 if (
$object->mode_reglement_code == $object::PAYMENTCODETOEDITSOCIETERIB) {
1458 print
'<tr><td class="nowrap">';
1459 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1460 print $langs->trans(
'DebitBankAccount');
1464 print
'<td class="right"><a class="editfielda" href="' . $_SERVER[
"PHP_SELF"] .
'?action=editbankaccountcustomer&token=' .
newToken() .
'&id=' .
$object->id .
'">' .
img_edit($langs->trans(
'SetDebitBankAccount'), 1) .
'</a></td>';
1466 print
'</tr></table>';
1469 if ($action ==
'editbankaccountcustomer') {
1470 $form->formRib($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_societe_rib,
'accountcustomerid',
'fk_soc='.$object->socid, 1, 1);
1472 $form->formRib($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_societe_rib,
'none',
'', 0, 1);
1479 print
'<tr><td class="nowrap">';
1480 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1481 print $langs->trans(
'BankAccount');
1484 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>';
1486 print
'</tr></table>';
1488 if ($action ==
'editbankaccount') {
1489 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
1491 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
1497 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1503 print
'<tr><td class="nowrap">';
1504 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1505 print $langs->trans(
'Model');
1508 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>';
1510 print
'</tr></table>';
1512 if ($action ==
'editmodelpdf') {
1513 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
1516 foreach ($models as $k => $model) {
1517 $list[] = str_replace(
':',
'|', $k).
':'.$model;
1519 $select =
'select;'.implode(
',', $list);
1520 print $form->editfieldval($langs->trans(
"Model"),
'modelpdf',
$object->model_pdf, $object, $user->hasRight(
'facture',
'creer'), $select);
1534 print
'<div class="fichehalfright">';
1535 print
'<div class="underbanner clearboth"></div>';
1541 $title = $langs->trans(
"Recurrence");
1543 print
'<table class="border centpercent tableforfield">';
1545 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
1547 print
'<tr><td colspan="2">'.img_picto(
'',
'recurring',
'class="pictofixedwidth"').$title.
'</td></tr>';
1550 print
'<tr><td style="width: 50%">';
1551 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1552 print $langs->trans(
'Frequency');
1554 if ($action !=
'editfrequency' && $user->hasRight(
'facture',
'creer')) {
1555 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>';
1557 print
'</tr></table>';
1559 if ($action ==
'editfrequency') {
1560 print
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'">';
1561 print
'<input type="hidden" name="action" value="setfrequency">';
1562 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1563 print
'<table class="nobordernopadding">';
1565 print
'<input type="text" name="frequency" class="width50 marginrightonly right" value="'.$object->frequency.
'">';
1566 print $form->selectarray(
'unit_frequency', array(
'd' => $langs->trans(
'Day'),
'm' => $langs->trans(
'Month'),
'y' => $langs->trans(
'Year')), (
$object->unit_frequency ?
$object->unit_frequency :
'm'));
1568 print
'<td class="left"><input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
"Modify").
'"></td>';
1569 print
'</tr></table></form>';
1572 print $langs->trans(
'FrequencyPer_'.
$object->unit_frequency,
$object->frequency);
1574 print
'<span class="opacitymedium">'.$langs->trans(
"NotARecurringInvoiceTemplate").
'</span>';
1581 if ($action ==
'date_when' ||
$object->frequency > 0) {
1582 print $form->editfieldkey($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $user->hasRight(
'facture',
'creer'),
'day');
1584 print $langs->trans(
"NextDateToExecution");
1587 if ($action ==
'date_when' ||
$object->frequency > 0) {
1588 print $form->editfieldval($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $user->hasRight(
'facture',
'creer'),
'day',
$object->date_when,
null,
'',
'', 0,
'strikeIfMaxNbGenReached');
1591 if (!
$object->isMaxNbGenReached()) {
1596 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
1603 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1604 print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max, $object, $user->hasRight(
'facture',
'creer'));
1606 print $langs->trans(
"MaxPeriodNumber");
1609 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1610 print $form->editfieldval($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max ?
$object->nb_gen_max :
'',
$object, $user->hasRight(
'facture',
'creer'));
1619 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1620 print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $user->hasRight(
'facture',
'creer'));
1622 print $langs->trans(
"StatusOfAutoGeneratedInvoices");
1625 $select =
'select;0:'.$langs->trans(
'BillStatusDraft').
',1:'.$langs->trans(
'BillStatusValidated');
1626 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1627 print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $user->hasRight(
'facture',
'creer'), $select);
1634 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1635 print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $user->hasRight(
'facture',
'creer'));
1637 print $langs->trans(
"StatusOfGeneratedDocuments");
1641 $select =
'select;0:'.$langs->trans(
'DoNotGenerateDoc').
',1:'.$langs->trans(
'AutogenerateDoc');
1642 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1643 print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $user->hasRight(
'facture',
'creer'), $select);
1648 print
'<input type="hidden" name="generate_pdf" value="1">';
1657 if (!isModEnabled(
'cron')) {
1658 print
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
1661 print
'<div class="underbanner clearboth"></div>';
1662 print
'<table class="border centpercent tableforfield">';
1665 print
'<tr><td style="width: 50%">'.$langs->trans(
"NbOfGenerationDone").
'</td>';
1673 print $langs->trans(
"DateLastGeneration");
1687 print
'<div class="clearboth"></div><br>';
1691 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'#add' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">';
1692 print
'<input type="hidden" name="token" value="' .
newToken().
'">';
1693 print
'<input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">';
1694 print
'<input type="hidden" name="mode" value="">';
1695 print
'<input type="hidden" name="id" value="' .
$object->id.
'">';
1696 print
'<input type="hidden" name="page_y" value="">';
1698 if (!empty(
$conf->use_javascript_ajax) &&
$object->statut == 0) {
1699 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1702 print
'<div class="div-table-responsive-no-min">';
1703 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1706 $canchangeproduct = 1;
1707 $object->printObjectLines($action, $mysoc,
$object->thirdparty, $lineid, 0);
1711 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer') && $action !=
'valid' && $action !=
'editline') {
1712 if ($action !=
'editline') {
1715 $parameters = array();
1716 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
1720 if (empty($reshook)) {
1737 print
'<div class="tabsAction">';
1739 $parameters = array();
1740 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1741 if (empty($reshook)) {
1744 'class' =>
'classfortooltip',
1747 if (empty(
$object->suspended)) {
1748 if ($user->hasRight(
'facture',
'creer')) {
1750 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1752 if (empty(
$object->frequency) ||
$object->date_when <= $nowlasthour) {
1753 print
'<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT .
'/compta/facture/card.php?action=create&socid=' .
$object->thirdparty->id .
'&fac_rec=' .
$object->id .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1755 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1759 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") .
'</a></div>';
1763 if ($user->hasRight(
'facture',
'creer')) {
1764 if (empty(
$object->suspended)) {
1765 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>';
1767 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>';
1772 print
dolGetButtonAction($langs->trans(
"Delete"),
'',
'delete', $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=delete&token=' .
newToken(),
'delete', $user->hasRight(
'facture',
'supprimer'));
1778 print
'<div class="fichecenter"><div class="fichehalfleft">';
1779 print
'<a name="builddoc"></a>';
1783 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'invoice'), 1);
1784 $linktoelem = $tmparray[
'linktoelem'];
1785 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1786 print $htmltoenteralink;
1788 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1792 print
'<div class="fichehalfright">';
1797 $morehtmlcenter =
'';
1800 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1802 $somethingshown = $formactions->showactions($object,
$object->element, (is_object(
$object->thirdparty) ?
$object->thirdparty->id : 0), 1,
'', $MAXEVENT,
'', $morehtmlcenter);
1807 print $langs->trans(
"NoRecordFound");
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.
const STATUS_DRAFT
Draft status.
Class to manage a WYSIWYG editor.
Class to manage invoices.
const TYPE_REPLACEMENT
Replacement invoice.
const TYPE_STANDARD
Standard invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
Class to manage invoice lines of templates.
Class to manage invoice templates.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
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_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
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'.
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.
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_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
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_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...
invoice_rec_prepare_head($object)
Return array head with list of tabs to view object information.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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.