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';
50$langs->loadLangs(array(
'bills',
'companies',
'compta',
'admin',
'other',
'products',
'banks'));
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') :
'invoicetemplatelist';
59$backtopage =
GETPOST(
'backtopage',
'alpha');
60$backtopageforcancel =
GETPOST(
'backtopageforcancel',
'alpha');
67 $socid = $user->socid;
69$objecttype =
'facture_rec';
70if ($action ==
"create" || $action ==
"add") {
75$year_date_when =
GETPOST(
'year_date_when');
76$month_date_when =
GETPOST(
'month_date_when');
77$selectedLines =
GETPOST(
'toselect',
'array');
80$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
81$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
83if (empty($page) || $page == -1) {
86$offset = $limit * $page;
91 $sortfield =
'f.titre';
97if (($id > 0 || $ref) && $action !=
'create' && $action !=
'add') {
98 $ret =
$object->fetch($id, $ref);
108$hookmanager->initHooks(array(
'invoicereccard',
'globalcard'));
112$extrafields->fetch_name_optionals_label(
$object->table_element);
114$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
116$permissionnote = $user->hasRight(
'facture',
'creer');
117$permissiondellink = $user->hasRight(
'facture',
'creer');
118$permissiontoedit = $user->hasRight(
'facture',
'creer');
120$usercanread = $user->hasRight(
'facture',
'lire');
121$usercancreate = $user->hasRight(
'facture',
'creer');
122$usercanissuepayment = $user->hasRight(
'facture',
'paiement');
123$usercandelete = $user->hasRight(
'facture',
'supprimer');
126$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'facture',
'invoice_advance',
'validate')));
127$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->send);
128$usercanreopen = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->reopen);
129$usercanunvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'facture',
'invoice_advance',
'unvalidate')));
132$usercanproductignorepricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance')) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
133$usercancreatemargin = $user->hasRight(
"margins",
"creer");
134$usercanreadallmargin = $user->hasRight(
"margins",
"liretous");
135$usercancreatewithdrarequest = $user->hasRight(
"prelevement",
"bons",
"creer");
149if (
GETPOST(
'cancel',
'alpha')) {
153if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
157$parameters = array();
158$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
163if (empty($reshook)) {
164 $backurlforlist = DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php';
166 if (empty($backtopage) || ($cancel && empty($id))) {
167 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
168 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
169 $backtopage = $backurlforlist;
171 $backtopage = DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
179 if (!empty($backtopageforcancel)) {
180 header(
"Location: ".$backtopageforcancel);
182 } elseif (!empty($backtopage)) {
183 header(
"Location: ".$backtopage);
190 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
193 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
195 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
197 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
206 if ($action ==
'add') {
207 if (!
GETPOST(
'title',
'alphanohtml')) {
208 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Title")),
null,
'errors');
223 if (empty($reyear) || empty($remonth) || empty($reday)) {
224 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Date")),
null,
'errors');
246 $object->frequency = $frequency;
248 $object->nb_gen_max = $nb_gen_max;
251 $object->fk_project = $projectid;
253 $date_next_execution =
dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
254 $object->date_when = $date_next_execution;
256 $ret = $extrafields->setOptionalsFromPost(
null, $object);
266 $srcObject->fetchObjectLinked();
268 if (!empty($srcObject->linkedObjectsIds[
'contrat'])) {
269 $contractidid = reset($srcObject->linkedObjectsIds[
'contrat']);
272 $object->origin_id = $contractidid;
279 $oldinvoice =
new Facture($db);
282 $onlylines =
GETPOST(
'toselect',
'array');
284 $result =
$object->create($user, $oldinvoice->id, 0, $onlylines);
286 $result = $oldinvoice->delete($user, 1);
301 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?facid='.
$object->id);
312 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $user->hasRight(
'facture',
'supprimer')) {
315 header(
"Location: ".DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php');
321 if ($action ==
'setconditions' && $usercancreate) {
323 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentTerm"));
325 } elseif ($action ==
'setmode' && $usercancreate) {
327 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentMode"));
329 } elseif ($action ==
'classin' && $usercancreate) {
331 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Project"));
333 } elseif ($action ==
'setref' && $usercancreate) {
335 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModifiedFromYToZ", $langs->transnoentitiesnoconv(
"Title"),
$object->title, $ref);
336 $result =
$object->setValueFrom(
'titre', $ref,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
342 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
343 $langs->load(
"errors");
344 setEventMessages($langs->trans(
'ErrorRefAlreadyExists', $ref),
null,
'errors');
349 } elseif ($action ==
'setbankaccount' && $usercancreate) {
351 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Bank"));
353 } elseif ($action ==
'setfrequency' && $usercancreate) {
355 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Frequency"));
357 } elseif ($action ==
'setdate_when' && $usercancreate) {
363 } elseif ($action ==
'setnb_gen_max' && $usercancreate) {
366 } elseif ($action ==
'setauto_validate' && $usercancreate) {
369 } elseif ($action ==
'setgenerate_pdf' && $usercancreate) {
372 } elseif ($action ==
'setmodelpdf' && $usercancreate) {
375 } elseif ($action ==
'disable' && $usercancreate) {
379 $object->context[
'actionmsg'] = $langs->trans(
"RecordDisabled");
381 $res =
$object->setValueFrom(
'suspended', 1,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
392 } elseif ($action ==
'enable' && $usercancreate) {
396 $object->context[
'actionmsg'] = $langs->trans(
"RecordEnabled");
398 $res =
$object->setValueFrom(
'suspended', 0,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
409 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
411 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
412 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
418 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
429 if ($line->delete($user) > 0) {
430 $result =
$object->update_price(1);
443 } elseif ($action ==
'update_extras' && $usercancreate) {
447 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
453 $result =
$object->insertExtraFields(
'BILLREC_MODIFY');
462 if ($action ==
'addline' && $user->hasRight(
'facture',
'creer')) {
463 $langs->load(
'errors');
468 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
471 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'alpha');
472 if ($prod_entry_mode ==
'free') {
478 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
483 $tva_tx = (
GETPOST(
'tva_tx',
'alpha') ?
GETPOST(
'tva_tx',
'alpha') : 0);
487 if (empty($remise_percent)) {
492 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
493 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
495 if (is_array($extralabelsline)) {
497 foreach ($extralabelsline as $key => $value) {
498 unset($_POST[
"options_".$key.$predef]);
502 if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) {
503 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
506 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
507 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
510 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && (!($price_ht >= 0) || $price_ht ==
'')) {
511 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
515 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
518 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
519 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
523 $langs->load(
"errors");
524 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
528 if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
534 $ret =
$object->fetch_thirdparty();
539 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
550 if (!empty($idprod) && $idprod > 0) {
552 $prod->fetch($idprod);
554 $label = ((
GETPOST(
'product_label') &&
GETPOST(
'product_label') != $prod->label) ?
GETPOST(
'product_label') :
'');
566 $datapriceofproduct = $prod->getSellPrice($mysoc,
$object->thirdparty, $pqp);
568 $pu_ht = $datapriceofproduct[
'pu_ht'];
569 $pu_ttc = $datapriceofproduct[
'pu_ttc'];
570 $price_min = $datapriceofproduct[
'price_min'];
571 $price_base_type = empty($datapriceofproduct[
'price_base_type']) ?
'HT' : $datapriceofproduct[
'price_base_type'];
575 $tmpvat = (float)
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
576 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $prod->tva_tx));
579 if (!empty($price_ht)) {
581 $pu_ttc =
price2num($pu_ht * (1 + ($tmpvat / 100)),
'MU');
582 } elseif ($tmpvat != $tmpprodvat) {
585 if ($price_base_type !=
'HT') {
586 $pu_ht =
price2num($pu_ttc / (1 + ($tmpvat / 100)),
'MU');
588 $pu_ttc =
price2num($pu_ht * (1 + ($tmpvat / 100)),
'MU');
596 $outputlangs = $langs;
598 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
599 $newlang =
GETPOST(
'lang_id',
'aZ09');
601 if (empty($newlang)) {
602 $newlang =
$object->thirdparty->default_lang;
604 if (!empty($newlang)) {
606 $outputlangs->setDefaultLang($newlang);
609 $desc = (!empty($prod->multilangs [$outputlangs->defaultlang] [
"description"])) ? $prod->multilangs [$outputlangs->defaultlang] [
"description"] : $prod->
description;
611 $desc = $prod->description;
617 if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
621 $outputlangs = $langs;
623 if (empty($newlang) &&
GETPOST(
'lang_id',
'alpha')) {
624 $newlang =
GETPOST(
'lang_id',
'alpha');
626 if (empty($newlang)) {
627 $newlang =
$object->thirdparty->default_lang;
629 if (!empty($newlang)) {
631 $outputlangs->setDefaultLang($newlang);
632 $outputlangs->load(
'products');
634 if (!empty($prod->customcode)) {
635 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
637 if (!empty($prod->customcode) && !empty($prod->country_code)) {
640 if (!empty($prod->country_code)) {
641 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code, 0, $db, $outputlangs, 0);
644 if (!empty($prod->customcode)) {
645 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
647 if (!empty($prod->customcode) && !empty($prod->country_code)) {
650 if (!empty($prod->country_code)) {
651 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code, 0, $db, $langs, 0);
659 $fk_unit = $prod->fk_unit;
663 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
664 $tva_tx = str_replace(
'*',
'', $tva_tx);
665 if (empty($tva_tx)) {
668 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
669 $desc = $product_desc;
671 $fk_unit =
GETPOST(
'units',
'alpha');
674 $date_start_fill =
GETPOSTINT(
'date_start_fill');
690 $fk_parent_line =
GETPOST(
'fk_parent_line',
'int');
692 if ($usercanproductignorepricemin && (!empty($price_min) && (
price2num($pu_ht) * (1 -
price2num($remise_percent) / 100) <
price2num($price_min)))) {
693 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, - 1, $conf->currency));
697 $result =
$object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, $idprod, $remise_percent, $price_base_type, $info_bits,
'', $pu_ttc, $type, -1, $special_code, $label, $fk_unit, 0, $date_start_fill, $date_end_fill, $fournprice, $buyingprice, $fk_parent_line);
720 unset($_POST[
'prod_entry_mode']);
722 unset($_POST[
'qty']);
723 unset($_POST[
'type']);
724 unset($_POST[
'remise_percent']);
725 unset($_POST[
'price_ht']);
726 unset($_POST[
'multicurrency_price_ht']);
727 unset($_POST[
'price_ttc']);
728 unset($_POST[
'tva_tx']);
729 unset($_POST[
'product_ref']);
730 unset($_POST[
'product_label']);
731 unset($_POST[
'product_desc']);
732 unset($_POST[
'fournprice']);
733 unset($_POST[
'buying_price']);
734 unset($_POST[
'np_marginRate']);
735 unset($_POST[
'np_markRate']);
736 unset($_POST[
'dp_desc']);
737 unset($_POST[
'idprod']);
738 unset($_POST[
'units']);
740 unset($_POST[
'date_starthour']);
741 unset($_POST[
'date_startmin']);
742 unset($_POST[
'date_startsec']);
743 unset($_POST[
'date_startday']);
744 unset($_POST[
'date_startmonth']);
745 unset($_POST[
'date_startyear']);
746 unset($_POST[
'date_endhour']);
747 unset($_POST[
'date_endmin']);
748 unset($_POST[
'date_endsec']);
749 unset($_POST[
'date_endday']);
750 unset($_POST[
'date_endmonth']);
751 unset($_POST[
'date_endyear']);
753 unset($_POST[
'date_start_fill']);
754 unset($_POST[
'date_end_fill']);
756 unset($_POST[
'situations']);
757 unset($_POST[
'progress']);
765 } elseif ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
766 if (!
$object->fetch($id) > 0) {
784 if (preg_match(
'/\*/', $vat_rate)) {
789 $vat_rate = str_replace(
'*',
'', $vat_rate);
798 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
799 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
802 if ($objectline->fetch(
GETPOSTINT(
'lineid'))) {
803 $objectline->array_options = $array_options;
804 $result = $objectline->insertExtraFields();
810 $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
813 if (is_array($extralabelsline)) {
815 foreach ($extralabelsline as $key => $value) {
816 unset($_POST[
"options_".$key]);
822 if ($special_code == 3) {
839 if (empty($remise_percent)) {
845 if (!empty($productid)) {
847 $product->fetch($productid);
849 $type = $product->type;
851 $price_min = $product->price_min;
853 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
862 setEventMessages($langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, - 1, $conf->currency)),
null,
'errors');
867 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
871 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
876 $langs->load(
"errors");
877 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
881 $date_start_fill =
GETPOSTINT(
'date_start_fill');
883 $fk_parent_line =
GETPOST(
'fk_parent_line',
'int');
935 unset($_POST[
'qty']);
936 unset($_POST[
'type']);
937 unset($_POST[
'productid']);
938 unset($_POST[
'remise_percent']);
939 unset($_POST[
'price_ht']);
940 unset($_POST[
'multicurrency_price_ht']);
941 unset($_POST[
'price_ttc']);
942 unset($_POST[
'tva_tx']);
943 unset($_POST[
'product_ref']);
944 unset($_POST[
'product_label']);
945 unset($_POST[
'product_desc']);
946 unset($_POST[
'fournprice']);
947 unset($_POST[
'buying_price']);
948 unset($_POST[
'np_marginRate']);
949 unset($_POST[
'np_markRate']);
951 unset($_POST[
'dp_desc']);
952 unset($_POST[
'idprod']);
953 unset($_POST[
'units']);
955 unset($_POST[
'date_starthour']);
956 unset($_POST[
'date_startmin']);
957 unset($_POST[
'date_startsec']);
958 unset($_POST[
'date_startday']);
959 unset($_POST[
'date_startmonth']);
960 unset($_POST[
'date_startyear']);
961 unset($_POST[
'date_endhour']);
962 unset($_POST[
'date_endmin']);
963 unset($_POST[
'date_endsec']);
964 unset($_POST[
'date_endday']);
965 unset($_POST[
'date_endmonth']);
966 unset($_POST[
'date_endyear']);
968 unset($_POST[
'situations']);
969 unset($_POST[
'progress']);
982$title =
$object->ref.
" - ".$langs->trans(
'Card');
987$form =
new Form($db);
989if (isModEnabled(
'project')) {
992$companystatic =
new Societe($db);
1002if ($action ==
'create') {
1003 print
load_fiche_titre($langs->trans(
"CreateRepeatableInvoice"),
'',
'bill');
1006 $product_static =
new Product($db);
1008 if (
$object->fetch($id, $ref) > 0) {
1009 $result =
$object->getLinesArray();
1011 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1012 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1013 print
'<input type="hidden" name="action" value="add">';
1014 print
'<input type="hidden" name="facid" value="'.$object->id.
'">';
1019 if (isModEnabled(
'project')) {
1022 if (
$object->fk_account > 0) {
1026 print
'<table class="border centpercent">';
1031 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Title").
'</td><td>';
1032 print
'<input class="flat quatrevingtpercent" type="text" name="title" value="'.dol_escape_htmltag(
GETPOST(
"title",
'alphanohtml')).
'" autofocus>';
1036 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Customer").
'</td><td>'.
$object->thirdparty->getNomUrl(1,
'customer').
'</td>';
1041 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1042 print $form->getSelectInvoiceSubtype(GETPOSTISSET(
'subtype') ?
GETPOST(
'subtype') :
$object->subtype,
'subtype', 0, 0,
'');
1046 $note_public = GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') :
$object->note_public;
1047 $note_private = GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') :
$object->note_private;
1052 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%m').
')';
1053 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%m').
')';
1055 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%B').
')';
1056 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%B').
')';
1057 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%B').
')';
1059 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%Y').
')';
1062 $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').
')';
1063 $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').
')';
1064 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $langs->trans(
"Count");
1065 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $langs->trans(
"MaxPeriodNumber");
1067 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
1068 foreach ($substitutionarray as $key => $val) {
1069 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
1071 $htmltext .=
'</i>';
1074 print
"<tr><td>".$langs->trans(
"Author").
"</td><td>".$user->getFullName($langs).
"</td></tr>";
1077 print
"<tr><td>".$langs->trans(
"PaymentConditions").
"</td><td>";
1078 print $form->getSelectConditionsPaiements(GETPOSTISSET(
'cond_reglement_id') ?
GETPOSTINT(
'cond_reglement_id') :
$object->cond_reglement_id,
'cond_reglement_id', -1, 0, 0,
'');
1083 print
"<tr><td>".$langs->trans(
"PaymentMode").
"</td><td>";
1084 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1085 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);
1090 if (
$object->fk_account > 0) {
1091 print
"<tr><td>".$langs->trans(
'BankAccount').
"</td><td>";
1092 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
1101 $extralabels = $extrafields->fetch_name_optionals_label($draft->table_element);
1102 if ($draft->fetch_optionals() > 0) {
1103 $object->array_options = array_merge(
$object->array_options, $draft->array_options);
1106 print
$object->showOptionals($extrafields,
'create', $parameters);
1109 if (isModEnabled(
'project') && is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0) {
1111 $langs->load(
'projects');
1112 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1113 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1114 $numprojet = $formproject->select_projects(
$object->thirdparty->id, $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 0, 0,
'');
1115 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>';
1120 print
"<tr><td>".$langs->trans(
'Model').
"</td><td>";
1121 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
1123 print
img_picto(
'',
'generic',
'class="pictofixedwidth"');
1125 print $form->selectarray(
'modelpdf', $list, $conf->global->FACTURE_ADDON_PDF);
1130 print
'<td class="tdtop">';
1131 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic');
1134 $doleditor =
new DolEditor(
'note_public', $note_public,
'', 80,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1135 print $doleditor->Create(1);
1138 if (empty($user->socid)) {
1140 print
'<td class="tdtop">';
1141 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate');
1144 $doleditor =
new DolEditor(
'note_private', $note_private,
'', 80,
'dolibarr_notes',
'In', 0,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1145 print $doleditor->Create(1);
1155 $title = $langs->trans(
"Recurrence");
1158 print
'<span class="opacitymedium">'.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name')).
'</span><br><br>';
1162 print
'<table class="border centpercent">';
1165 print
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"Frequency"), $langs->transnoentitiesnoconv(
'toolTipFrequency')).
"</td><td>";
1166 print
'<input type="text" class="width50" name="frequency" value="'.GETPOST(
'frequency',
'int').
'"> ';
1167 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'));
1171 print
"<tr><td>".$langs->trans(
'NextDateToExecution').
"</td><td>";
1173 print $form->selectDate($date_next_execution,
'', 1, 1, 0,
"add", 1, 1);
1177 print
"<tr><td>".$langs->trans(
"MaxPeriodNumber").
"</td><td>";
1178 print
'<input type="text" class="width50" name="nb_gen_max" value="'.GETPOSTINT(
'nb_gen_max').
'">';
1182 print
"<tr><td>".$langs->trans(
"StatusOfAutoGeneratedInvoices").
"</td><td>";
1183 $select = array(
'0' => $langs->trans(
'BillStatusDraft'),
'1' => $langs->trans(
'BillStatusValidated'));
1184 print $form->selectarray(
'auto_validate', $select,
GETPOSTINT(
'auto_validate'));
1189 print
"<tr><td>".$langs->trans(
"StatusOfGeneratedDocuments").
"</td><td>";
1190 $select = array(
'0' => $langs->trans(
'DoNotGenerateDoc'),
'1' => $langs->trans(
'AutoGenerateDoc'));
1191 print $form->selectarray(
'generate_pdf', $select,
GETPOSTINT(
'generate_pdf'));
1194 print
'<input type="hidden" name="generate_pdf" value="1">';
1202 $title = $langs->trans(
"ProductsAndServices");
1203 if (!isModEnabled(
'service')) {
1204 $title = $langs->trans(
"Products");
1205 } elseif (!isModEnabled(
'product')) {
1206 $title = $langs->trans(
"Services");
1214 print
'<div class="div-table-responsive-no-min">';
1215 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1219 $object->printOriginLinesList(
'', $selectedLines);
1228 if (!empty($flag_price_may_change)) {
1229 print
'<tr><td colspan="3" class="left">';
1230 print
'<select name="usenewprice" class="flat">';
1231 print
'<option value="0">'.$langs->trans(
"AlwaysUseFixedPrice").
'</option>';
1232 print
'<option value="1" disabled>'.$langs->trans(
"AlwaysUseNewPrice").
'</option>';
1238 print $form->buttonsSaveCancel(
"Create");
1253 if ($action ==
'ask_deleteline') {
1254 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'',
'no', 1);
1257 if ($action ==
'delete') {
1258 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteRepeatableInvoice'), $langs->trans(
'ConfirmDeleteRepeatableInvoice'),
'confirm_delete',
'',
'no', 1);
1262 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
1263 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1264 if (empty($reshook)) {
1265 $formconfirm .= $hookmanager->resPrint;
1266 } elseif ($reshook > 0) {
1267 $formconfirm = $hookmanager->resPrint;
1272 $author =
new User($db);
1273 $author->fetch(
$object->user_author);
1277 print
dol_get_fiche_head($head,
'card', $langs->trans(
"RepeatableInvoice"), -1,
'bill');
1281 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1284 if ($action !=
'editref') {
1285 $morehtmlref .= $form->editfieldkey(
$object->ref,
'ref',
$object->ref, $object, $user->hasRight(
'facture',
'creer'),
'',
'', 0, 2);
1287 $morehtmlref .= $form->editfieldval(
'',
'ref',
$object->ref, $object, $user->hasRight(
'facture',
'creer'),
'string');
1290 $morehtmlref .=
'<div class="refidno">';
1295 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'customer');
1297 if (isModEnabled(
'project')) {
1298 $langs->load(
"projects");
1299 $morehtmlref .=
'<br>';
1300 if ($user->hasRight(
'facture',
'creer')) {
1301 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1302 if ($action !=
'classify') {
1303 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1305 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1307 if (!empty(
$object->fk_project)) {
1309 $proj->fetch(
$object->fk_project);
1310 $morehtmlref .=
' : '.$proj->getNomUrl(1);
1312 $morehtmlref .=
' - '.$proj->title;
1319 $morehtmlref .=
'</div>';
1321 $morehtmlstatus =
'';
1323 dol_banner_tab($object,
'ref', $linkback, 1,
'title',
'none', $morehtmlref,
'', 0,
'', $morehtmlstatus);
1325 print
'<div class="fichecenter">';
1326 print
'<div class="fichehalfleft">';
1327 print
'<div class="underbanner clearboth"></div>';
1329 print
'<table class="border centpercent tableforfield">';
1333 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1335 print
$object->getSubtypeLabel(
'facture_rec');
1341 print
'<tr><td class="titlefield">'.$langs->trans(
"Author").
'</td><td>';
1342 print $author->getNomUrl(-1);
1346 print
'<tr><td>'.$langs->trans(
"AmountHT").
'</td>';
1347 print
'<td>'.price(
$object->total_ht, 0, $langs, 1, -1, -1, $conf->currency).
'</td>';
1351 print
'<tr><td>'.$langs->trans(
"AmountVAT").
'</td><td>'.
price(
$object->total_tva, 0, $langs, 1, -1, -1, $conf->currency).
'</td>';
1355 if (($mysoc->localtax1_assuj ==
"1" && $mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
1356 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td>';
1357 print
'<td class="nowrap">'.price(
$object->total_localtax1, 1,
'', 1, - 1, - 1, $conf->currency).
'</td></tr>';
1359 if (($mysoc->localtax2_assuj ==
"1" && $mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
1360 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td>';
1361 print
'<td class=nowrap">'.price(
$object->total_localtax2, 1,
'', 1, - 1, - 1, $conf->currency).
'</td></tr>';
1364 print
'<tr><td>'.$langs->trans(
"AmountTTC").
'</td><td colspan="3">'.
price(
$object->total_ttc, 0, $langs, 1, -1, -1, $conf->currency).
'</td>';
1370 print
'<table class="nobordernopadding centpercent"><tr><td>';
1371 print $langs->trans(
'PaymentConditionsShort');
1373 if ($action !=
'editconditions' && $user->hasRight(
'facture',
'creer')) {
1374 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>';
1376 print
'</tr></table>';
1378 if ($action ==
'editconditions') {
1379 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
1381 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->cond_reglement_id,
'none');
1387 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1388 print $langs->trans(
'PaymentMode');
1390 if ($action !=
'editmode' && $user->hasRight(
'facture',
'creer')) {
1391 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>';
1393 print
'</tr></table>';
1395 if ($action ==
'editmode') {
1396 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
1398 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->mode_reglement_id,
'none');
1403 if (isModEnabled(
'multicurrency')) {
1407 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1408 print $form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
1410 if ($usercancreate && $action !=
'editmulticurrencycode' &&
$object->suspended == $object::STATUS_SUSPENDED) {
1411 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencycode&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
1413 print
'</tr></table>';
1415 $htmlname = (($usercancreate && $action ==
'editmulticurrencycode') ?
'multicurrency_code' :
'none');
1416 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_code, $htmlname);
1420 if (
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
1423 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1424 print $form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
1426 if ($usercancreate && $action !=
'editmulticurrencyrate' &&
$object->suspended == $object::STATUS_SUSPENDED &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
1427 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencyrate&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
1429 print
'</tr></table>';
1431 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
1432 if ($action ==
'actualizemulticurrencyrate') {
1435 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_tx, ($usercancreate ?
'multicurrency_tx' :
'none'),
$object->multicurrency_code);
1437 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_tx,
'none',
$object->multicurrency_code);
1438 if (
$object->statut == $object::STATUS_DRAFT &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
1439 print
'<div class="inline-block"> ';
1440 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
1451 $dateexample =
$object->date_when;
1457 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m').
')';
1458 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%m').
')';
1459 $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m').
')';
1460 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B').
')';
1461 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%B').
')';
1462 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B').
')';
1463 $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y').
')';
1464 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%Y').
')';
1465 $substitutionarray[
'__INVOICE_NEXT_YEAR__'] = $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y').
')';
1467 $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').
')';
1469 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] =
$object->nb_gen_done;
1470 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] =
$object->nb_gen_max;
1472 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
1473 foreach ($substitutionarray as $key => $val) {
1474 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
1476 $htmltext .=
'</i>';
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';
1502 print $form->editfieldkey($form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic'),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'));
1503 print
'</td><td class="wordbreak">';
1504 print $form->editfieldval($langs->trans(
"NotePublic"),
'note_public',
$object->note_public, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1510 print $form->editfieldkey($form->textwithpicto($langs->trans(
"NotePrivate"), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate'),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'));
1511 print
'</td><td class="wordbreak">';
1512 print $form->editfieldval($langs->trans(
"NotePrivate"),
'note_private',
$object->note_private, $object, $user->hasRight(
'facture',
'creer'),
'textarea:'.ROWS_4.
':90%',
'',
null,
null,
'', 1);
1517 print
'<tr><td class="nowrap">';
1518 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1519 print $langs->trans(
'Model');
1522 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>';
1524 print
'</tr></table>';
1526 if ($action ==
'editmodelpdf') {
1527 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
1530 foreach ($models as $k => $model) {
1531 $list[] = str_replace(
':',
'|', $k).
':'.$model;
1533 $select =
'select;'.implode(
',', $list);
1534 print $form->editfieldval($langs->trans(
"Model"),
'modelpdf',
$object->model_pdf, $object, $user->hasRight(
'facture',
'creer'), $select);
1548 print
'<div class="fichehalfright">';
1549 print
'<div class="underbanner clearboth"></div>';
1555 $title = $langs->trans(
"Recurrence");
1557 print
'<table class="border centpercent tableforfield">';
1559 print
'<tr><td colspan="2">'.img_picto(
'',
'recurring',
'class="pictofixedwidth"').$title.
'</td></tr>';
1562 print
'<tr><td style="width: 50%">';
1563 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1564 print $langs->trans(
'Frequency');
1566 if ($action !=
'editfrequency' && $user->hasRight(
'facture',
'creer')) {
1567 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>';
1569 print
'</tr></table>';
1571 if ($action ==
'editfrequency') {
1572 print
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'">';
1573 print
'<input type="hidden" name="action" value="setfrequency">';
1574 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1575 print
'<table class="nobordernopadding">';
1577 print
'<input type="text" name="frequency" class="width50 marginrightonly right" value="'.$object->frequency.
'">';
1578 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'));
1580 print
'<td class="left"><input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
"Modify").
'"></td>';
1581 print
'</tr></table></form>';
1584 print $langs->trans(
'FrequencyPer_'.
$object->unit_frequency,
$object->frequency);
1586 print
'<span class="opacitymedium">'.$langs->trans(
"NotARecurringInvoiceTemplate").
'</span>';
1593 if ($action ==
'date_when' ||
$object->frequency > 0) {
1594 print $form->editfieldkey($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $user->hasRight(
'facture',
'creer'),
'day');
1596 print $langs->trans(
"NextDateToExecution");
1599 if ($action ==
'date_when' ||
$object->frequency > 0) {
1600 print $form->editfieldval($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $user->hasRight(
'facture',
'creer'),
'day',
$object->date_when,
null,
'',
'', 0,
'strikeIfMaxNbGenReached');
1603 if (!
$object->isMaxNbGenReached()) {
1608 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
1615 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1616 print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max, $object, $user->hasRight(
'facture',
'creer'));
1618 print $langs->trans(
"MaxPeriodNumber");
1621 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1622 print $form->editfieldval($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max ?
$object->nb_gen_max :
'',
$object, $user->hasRight(
'facture',
'creer'));
1631 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1632 print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $user->hasRight(
'facture',
'creer'));
1634 print $langs->trans(
"StatusOfAutoGeneratedInvoices");
1637 $select =
'select;0:'.$langs->trans(
'BillStatusDraft').
',1:'.$langs->trans(
'BillStatusValidated');
1638 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1639 print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $user->hasRight(
'facture',
'creer'), $select);
1646 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1647 print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $user->hasRight(
'facture',
'creer'));
1649 print $langs->trans(
"StatusOfGeneratedDocuments");
1653 $select =
'select;0:'.$langs->trans(
'DoNotGenerateDoc').
',1:'.$langs->trans(
'AutogenerateDoc');
1654 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1655 print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $user->hasRight(
'facture',
'creer'), $select);
1660 print
'<input type="hidden" name="generate_pdf" value="1">';
1669 if (!isModEnabled(
'cron')) {
1670 print
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
1673 print
'<div class="underbanner clearboth"></div>';
1674 print
'<table class="border centpercent tableforfield">';
1677 print
'<tr><td style="width: 50%">'.$langs->trans(
"NbOfGenerationDone").
'</td>';
1685 print $langs->trans(
"DateLastGeneration");
1699 print
'<div class="clearboth"></div><br>';
1703 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'#add' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">';
1704 print
'<input type="hidden" name="token" value="' .
newToken().
'">';
1705 print
'<input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">';
1706 print
'<input type="hidden" name="mode" value="">';
1707 print
'<input type="hidden" name="id" value="' .
$object->id.
'">';
1708 print
'<input type="hidden" name="page_y" value="">';
1710 if (!empty($conf->use_javascript_ajax) &&
$object->statut == 0) {
1711 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1714 print
'<div class="div-table-responsive-no-min">';
1715 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1718 $canchangeproduct = 1;
1719 $object->printObjectLines($action, $mysoc,
$object->thirdparty, $lineid, 0);
1723 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer') && $action !=
'valid' && $action !=
'editline') {
1724 if ($action !=
'editline') {
1727 $parameters = array();
1728 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
1732 if (empty($reshook)) {
1749 print
'<div class="tabsAction">';
1751 $parameters = array();
1752 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1753 if (empty($reshook)) {
1756 'class' =>
'classfortooltip',
1759 if (empty(
$object->suspended)) {
1760 if ($user->hasRight(
'facture',
'creer')) {
1762 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1764 if (empty(
$object->frequency) ||
$object->date_when <= $nowlasthour) {
1765 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>';
1767 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1771 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") .
'</a></div>';
1775 if ($user->hasRight(
'facture',
'creer')) {
1776 if (empty(
$object->suspended)) {
1777 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>';
1779 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>';
1784 print
dolGetButtonAction($langs->trans(
"Delete"),
'',
'delete', $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=delete&token=' .
newToken(),
'delete', $user->hasRight(
'facture',
'supprimer'));
1790 print
'<div class="fichecenter"><div class="fichehalfleft">';
1791 print
'<a name="builddoc"></a>';
1795 $linktoelem = $form->showLinkToObjectBlock($object,
null, array(
'invoice'));
1797 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1801 print
'<div class="fichehalfright">';
1806 $morehtmlcenter =
'';
1809 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1811 $morehtmlcenter =
'';
1812 $somethingshown = $formactions->showactions($object,
$object->element, (is_object(
$object->thirdparty) ?
$object->thirdparty->id : 0), 1,
'', $MAXEVENT,
'', $morehtmlcenter);
1817 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()
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.
Class to manage invoice lines of templates.
Class to manage invoice templates.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
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)
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.
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
get_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.
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.