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);
117$hookmanager->initHooks(array(
'invoicereccard',
'globalcard'));
121$extrafields->fetch_name_optionals_label(
$object->table_element);
123$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
125$permissionnote = $user->hasRight(
'facture',
'creer');
126$permissiondellink = $user->hasRight(
'facture',
'creer');
127$permissiontoedit = $user->hasRight(
'facture',
'creer');
129$usercanread = $user->hasRight(
'facture',
'lire');
130$usercancreate = $user->hasRight(
'facture',
'creer');
131$usercanissuepayment = $user->hasRight(
'facture',
'paiement');
132$usercandelete = $user->hasRight(
'facture',
'supprimer');
135$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'facture',
'invoice_advance',
'validate')));
136$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->send);
137$usercanreopen = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->reopen);
138$usercanunvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
'facture',
'invoice_advance',
'unvalidate')));
141$usercanproductignorepricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !$user->hasRight(
'produit',
'ignore_price_min_advance')) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
142$usercancreatemargin = $user->hasRight(
"margins",
"creer");
143$usercanreadallmargin = $user->hasRight(
"margins",
"liretous");
144$usercancreatewithdrarequest = $user->hasRight(
"prelevement",
"bons",
"creer");
158if (
GETPOST(
'cancel',
'alpha')) {
162if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
166$parameters = array();
167$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
172if (empty($reshook)) {
173 $backurlforlist = DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php';
175 if (empty($backtopage) || ($cancel && empty($id))) {
176 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
177 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
178 $backtopage = $backurlforlist;
180 $backtopage = DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
188 if (!empty($backtopageforcancel)) {
189 header(
"Location: ".$backtopageforcancel);
191 } elseif (!empty($backtopage)) {
192 header(
"Location: ".$backtopage);
199 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
202 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
204 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
206 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
215 if ($action ==
'add' && $usercancreate) {
216 if (!
GETPOST(
'title',
'alphanohtml')) {
217 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Title")),
null,
'errors');
232 if (empty($reyear) || empty($remonth) || empty($reday)) {
233 setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Date")),
null,
'errors');
256 $object->frequency = $frequency;
258 $object->nb_gen_max = $nb_gen_max;
261 $object->fk_project = $projectid;
263 $date_next_execution =
dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
264 $object->date_when = $date_next_execution;
266 $ret = $extrafields->setOptionalsFromPost(
null, $object);
276 $srcObject->fetchObjectLinked();
278 if (!empty($srcObject->linkedObjectsIds[
'contrat'])) {
279 $contractidid = reset($srcObject->linkedObjectsIds[
'contrat']);
282 $object->origin_id = $contractidid;
289 $oldinvoice =
new Facture($db);
292 $onlylines =
GETPOST(
'toselect',
'array');
294 $result =
$object->create($user, $oldinvoice->id, 0, $onlylines);
296 $result = $oldinvoice->delete($user, 1);
311 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?facid='.
$object->id);
322 if ($action ==
'confirm_delete' && $confirm ==
'yes' && $user->hasRight(
'facture',
'supprimer')) {
325 header(
"Location: ".DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php');
331 if ($action ==
'setconditions' && $usercancreate) {
333 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentTerm"));
335 } elseif ($action ==
'setmode' && $usercancreate) {
337 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentMode"));
339 $object->setValueFrom(
'fk_societe_rib', 0);
342 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?facid='.
$object->id);
344 } elseif ($action ==
'classin' && $usercancreate) {
346 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Project"));
348 } elseif ($action ==
'setref' && $usercancreate) {
350 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModifiedFromYToZ", $langs->transnoentitiesnoconv(
"Title"),
$object->title, $ref);
351 $result =
$object->setValueFrom(
'titre', $ref,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
357 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
358 $langs->load(
"errors");
359 setEventMessages($langs->trans(
'ErrorRefAlreadyExists', $ref),
null,
'errors');
364 } elseif ($action ==
'setbankaccount' && $usercancreate) {
366 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Bank"));
368 } elseif ($action ==
'setbankaccountcustomer' && $usercancreate) {
370 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"DebitBankAccount"));
371 $fk_societe_rib = (
GETPOSTINT(
'accountcustomerid') !=
"-1") ?
GETPOSTINT(
'accountcustomerid') : 0;
372 $result =
$object->setValueFrom(
'fk_societe_rib', $fk_societe_rib);
373 } elseif ($action ==
'setfrequency' && $usercancreate) {
375 $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Frequency"));
377 } elseif ($action ==
'setdate_when' && $usercancreate) {
383 } elseif ($action ==
'setnb_gen_max' && $usercancreate) {
386 } elseif ($action ==
'setauto_validate' && $usercancreate) {
389 } elseif ($action ==
'setgenerate_pdf' && $usercancreate) {
392 } elseif ($action ==
'setmodelpdf' && $usercancreate) {
395 } elseif ($action ==
'disable' && $usercancreate) {
399 $object->context[
'actionmsg'] = $langs->trans(
"RecordDisabled");
401 $res =
$object->setValueFrom(
'suspended', 1,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
412 } elseif ($action ==
'enable' && $usercancreate) {
416 $object->context[
'actionmsg'] = $langs->trans(
"RecordEnabled");
418 $res =
$object->setValueFrom(
'suspended', 0,
'',
null,
'text',
'', $user,
'BILLREC_MODIFY');
429 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
431 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
432 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
438 if ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
449 if ($line->delete($user) > 0) {
450 $result =
$object->update_price(1);
463 } elseif ($action ==
'update_extras' && $usercancreate) {
467 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
473 $result =
$object->insertExtraFields(
'BILLREC_MODIFY');
482 if ($action ==
'addline' && $usercancreate) {
483 $langs->load(
'errors');
488 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
491 $prod_entry_mode =
GETPOST(
'prod_entry_mode',
'alpha');
492 if ($prod_entry_mode ==
'free') {
498 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
503 $tva_tx = (
GETPOST(
'tva_tx',
'alpha') ?
GETPOST(
'tva_tx',
'alpha') : 0);
507 if (empty($remise_percent)) {
512 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
513 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
515 if (is_array($extralabelsline)) {
517 foreach ($extralabelsline as $key => $value) {
518 unset($_POST[
"options_".$key.$predef]);
522 if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) {
523 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
526 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) &&
GETPOST(
'type') < 0) {
527 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
530 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && (!($price_ht >= 0) || $price_ht ==
'')) {
531 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")),
null,
'errors');
535 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
538 if ($prod_entry_mode ==
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
539 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
543 $langs->load(
"errors");
544 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
548 if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
554 $ret =
$object->fetch_thirdparty();
559 $price_base_type = (
GETPOST(
'price_base_type',
'alpha') ?
GETPOST(
'price_base_type',
'alpha') :
'HT');
570 if (!empty($idprod) && $idprod > 0) {
572 $prod->fetch($idprod);
574 $label = ((
GETPOST(
'product_label') &&
GETPOST(
'product_label') != $prod->label) ?
GETPOST(
'product_label') :
'');
586 $datapriceofproduct = $prod->getSellPrice($mysoc,
$object->thirdparty, $pqp);
588 $pu_ht = $datapriceofproduct[
'pu_ht'];
589 $pu_ttc = $datapriceofproduct[
'pu_ttc'];
590 $price_min = $datapriceofproduct[
'price_min'];
591 $price_base_type = empty($datapriceofproduct[
'price_base_type']) ?
'HT' : $datapriceofproduct[
'price_base_type'];
595 $tmpvat = (float)
price2num(preg_replace(
'/\s*\(.*\)/',
'', $tva_tx));
596 $tmpprodvat =
price2num(preg_replace(
'/\s*\(.*\)/',
'', (
string) $prod->tva_tx));
599 if (!empty($price_ht)) {
601 $pu_ttc =
price2num((
float) $pu_ht * (1 + ($tmpvat / 100)),
'MU');
602 } elseif ($tmpvat != $tmpprodvat) {
605 if ($price_base_type !=
'HT') {
606 $pu_ht =
price2num((
float) $pu_ttc / (1 + ($tmpvat / 100)),
'MU');
608 $pu_ttc =
price2num((
float) $pu_ht * (1 + ($tmpvat / 100)),
'MU');
616 $outputlangs = $langs;
618 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
619 $newlang =
GETPOST(
'lang_id',
'aZ09');
621 if (empty($newlang)) {
622 $newlang =
$object->thirdparty->default_lang;
624 if (!empty($newlang)) {
626 $outputlangs->setDefaultLang($newlang);
629 $desc = (!empty($prod->multilangs [$outputlangs->defaultlang] [
"description"])) ? $prod->multilangs [$outputlangs->defaultlang] [
"description"] : $prod->
description;
631 $desc = $prod->description;
637 if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
641 $outputlangs = $langs;
643 if (empty($newlang) &&
GETPOST(
'lang_id',
'alpha')) {
644 $newlang =
GETPOST(
'lang_id',
'alpha');
646 if (empty($newlang)) {
647 $newlang =
$object->thirdparty->default_lang;
649 if (!empty($newlang)) {
651 $outputlangs->setDefaultLang($newlang);
652 $outputlangs->load(
'products');
654 if (!empty($prod->customcode)) {
655 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
657 if (!empty($prod->customcode) && !empty($prod->country_code)) {
660 if (!empty($prod->country_code)) {
661 $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $outputlangs, 0);
664 if (!empty($prod->customcode)) {
665 $tmptxt .= $langs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
667 if (!empty($prod->customcode) && !empty($prod->country_code)) {
670 if (!empty($prod->country_code)) {
671 $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code,
'', $db, $langs, 0);
679 $fk_unit = $prod->fk_unit;
683 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
684 $tva_tx = str_replace(
'*',
'', $tva_tx);
685 if (empty($tva_tx)) {
688 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
689 $desc = $product_desc;
691 $fk_unit =
GETPOST(
'units',
'alpha');
694 $date_start_fill =
GETPOSTINT(
'date_start_fill');
710 $fk_parent_line =
GETPOST(
'fk_parent_line',
'int');
712 if ($usercanproductignorepricemin && (!empty($price_min) && ((
float)
price2num($pu_ht) * (1 - (
float)
price2num($remise_percent) / 100) < (
float)
price2num($price_min)))) {
713 $mesg = $langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, -1,
$conf->currency));
717 $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);
740 unset($_POST[
'prod_entry_mode']);
742 unset($_POST[
'qty']);
743 unset($_POST[
'type']);
744 unset($_POST[
'remise_percent']);
745 unset($_POST[
'price_ht']);
746 unset($_POST[
'multicurrency_price_ht']);
747 unset($_POST[
'price_ttc']);
748 unset($_POST[
'tva_tx']);
749 unset($_POST[
'product_ref']);
750 unset($_POST[
'product_label']);
751 unset($_POST[
'product_desc']);
752 unset($_POST[
'fournprice']);
753 unset($_POST[
'buying_price']);
754 unset($_POST[
'np_marginRate']);
755 unset($_POST[
'np_markRate']);
756 unset($_POST[
'dp_desc']);
757 unset($_POST[
'idprod']);
758 unset($_POST[
'units']);
760 unset($_POST[
'date_starthour']);
761 unset($_POST[
'date_startmin']);
762 unset($_POST[
'date_startsec']);
763 unset($_POST[
'date_startday']);
764 unset($_POST[
'date_startmonth']);
765 unset($_POST[
'date_startyear']);
766 unset($_POST[
'date_endhour']);
767 unset($_POST[
'date_endmin']);
768 unset($_POST[
'date_endsec']);
769 unset($_POST[
'date_endday']);
770 unset($_POST[
'date_endmonth']);
771 unset($_POST[
'date_endyear']);
773 unset($_POST[
'date_start_fill']);
774 unset($_POST[
'date_end_fill']);
776 unset($_POST[
'situations']);
777 unset($_POST[
'progress']);
785 } elseif ($action ==
'updateline' && $usercancreate && !
GETPOST(
'cancel',
'alpha')) {
786 if (!
$object->fetch($id) > 0) {
804 if (preg_match(
'/\*/', $vat_rate)) {
809 $vat_rate = str_replace(
'*',
'', $vat_rate);
818 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
819 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
822 if ($objectline->fetch(
GETPOSTINT(
'lineid'))) {
823 $objectline->array_options = $array_options;
824 $result = $objectline->insertExtraFields();
830 $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
833 if (is_array($extralabelsline)) {
835 foreach ($extralabelsline as $key => $value) {
836 unset($_POST[
"options_".$key]);
842 if ($special_code == 3) {
859 if (empty($remise_percent)) {
865 if (!empty($productid)) {
867 $product->fetch($productid);
869 $type = $product->type;
871 $price_min = $product->price_min;
873 $price_min = $product->multiprices_min[
$object->thirdparty->price_level];
882 setEventMessages($langs->trans(
"CantBeLessThanMinPrice",
price(
price2num($price_min,
'MU'), 0, $langs, 0, 0, - 1,
$conf->currency)),
null,
'errors');
887 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
891 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
896 $langs->load(
"errors");
897 setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'),
null,
'errors');
901 $date_start_fill =
GETPOSTINT(
'date_start_fill');
903 $fk_parent_line =
GETPOST(
'fk_parent_line',
'int');
955 unset($_POST[
'qty']);
956 unset($_POST[
'type']);
957 unset($_POST[
'productid']);
958 unset($_POST[
'remise_percent']);
959 unset($_POST[
'price_ht']);
960 unset($_POST[
'multicurrency_price_ht']);
961 unset($_POST[
'price_ttc']);
962 unset($_POST[
'tva_tx']);
963 unset($_POST[
'product_ref']);
964 unset($_POST[
'product_label']);
965 unset($_POST[
'product_desc']);
966 unset($_POST[
'fournprice']);
967 unset($_POST[
'buying_price']);
968 unset($_POST[
'np_marginRate']);
969 unset($_POST[
'np_markRate']);
971 unset($_POST[
'dp_desc']);
972 unset($_POST[
'idprod']);
973 unset($_POST[
'units']);
975 unset($_POST[
'date_starthour']);
976 unset($_POST[
'date_startmin']);
977 unset($_POST[
'date_startsec']);
978 unset($_POST[
'date_startday']);
979 unset($_POST[
'date_startmonth']);
980 unset($_POST[
'date_startyear']);
981 unset($_POST[
'date_endhour']);
982 unset($_POST[
'date_endmin']);
983 unset($_POST[
'date_endsec']);
984 unset($_POST[
'date_endday']);
985 unset($_POST[
'date_endmonth']);
986 unset($_POST[
'date_endyear']);
988 unset($_POST[
'situations']);
989 unset($_POST[
'progress']);
1002$title =
$object->ref.
" - ".$langs->trans(
'Card');
1007$form =
new Form($db);
1009if (isModEnabled(
'project')) {
1012 $formproject =
null;
1014$companystatic =
new Societe($db);
1022if ($action ==
'create') {
1023 print
load_fiche_titre($langs->trans(
"CreateRepeatableInvoice"),
'',
'bill');
1027 $product_static =
new Product($db);
1029 if (
$object->fetch($id, $ref) > 0) {
1030 $result =
$object->getLinesArray();
1032 print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
1033 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1034 print
'<input type="hidden" name="action" value="add">';
1035 print
'<input type="hidden" name="facid" value="'.$object->id.
'">';
1041 if (isModEnabled(
'project')) {
1044 if (
$object->fk_account > 0) {
1048 print
'<table class="border centpercent">';
1053 print
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Title").
'</td><td>';
1054 print
'<input class="flat quatrevingtpercent" type="text" name="title" value="'.dol_escape_htmltag(
GETPOST(
"title",
'alphanohtml')).
'" autofocus>';
1058 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Customer").
'</td><td>'.
$object->thirdparty->getNomUrl(1,
'customer').
'</td>';
1063 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1064 print $form->getSelectInvoiceSubtype(GETPOSTISSET(
'subtype') ?
GETPOST(
'subtype') :
$object->subtype,
'subtype', 0, 0,
'');
1068 $note_public = GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') :
$object->note_public;
1069 $note_private = GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') :
$object->note_private;
1074 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%m').
')';
1075 $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%m').
')';
1077 $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, -1,
'm'),
'%B').
')';
1078 $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%B').
')';
1079 $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(
$object->date, 1,
'm'),
'%B').
')';
1081 $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
$object->date,
'%Y').
')';
1084 $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').
')';
1085 $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').
')';
1086 $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $langs->trans(
"Count");
1087 $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $langs->trans(
"MaxPeriodNumber");
1089 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
1090 foreach ($substitutionarray as $key => $val) {
1091 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
1093 $htmltext .=
'</i>';
1096 print
"<tr><td>".$langs->trans(
"Author").
"</td><td>".$user->getFullName($langs).
"</td></tr>";
1099 print
"<tr><td>".$langs->trans(
"PaymentConditions").
"</td><td>";
1100 print $form->getSelectConditionsPaiements(GETPOSTISSET(
'cond_reglement_id') ?
GETPOSTINT(
'cond_reglement_id') :
$object->cond_reglement_id,
'cond_reglement_id', -1, 0, 0,
'');
1105 print
"<tr><td>".$langs->trans(
"PaymentMode").
"</td><td>";
1106 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
1107 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);
1112 print
"<tr><td>".$langs->trans(
'DebitBankAccount').
"</td><td>";
1113 $defaultRibId =
$object->thirdparty->getDefaultRib();
1114 $form->selectRib(GETPOSTISSET(
'accountcustomerid') ?
GETPOSTINT(
'accountcustomerid') : $defaultRibId,
'accountcustomerid',
'fk_soc='.
$object->socid, 1,
'', 1);
1118 $(document).ready(function() {
1119 if($("#selectmode_reglement_id option:selected").data("code") != "' . $factureRec::PAYMENTCODETOEDITSOCIETERIB .
'") {
1120 hideselectfksocieterib();
1122 $("#selectmode_reglement_id").change(function() {
1123 if($("#selectmode_reglement_id option:selected").data("code") != "'. $factureRec::PAYMENTCODETOEDITSOCIETERIB .
'") {
1124 hideselectfksocieterib(1);
1126 showselectfksocieterib();
1131 function hideselectfksocieterib(empty = 0){
1132 $("#selectaccountcustomerid").closest("tr").hide();
1134 $("#selectaccountcustomerid").val("-1").change();
1138 function showselectfksocieterib(){
1139 $("#selectaccountcustomerid").closest("tr").show();
1144 if (
$object->fk_account > 0) {
1145 print
"<tr><td>".$langs->trans(
'BankAccount').
"</td><td>";
1146 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
1155 $extralabels = $extrafields->fetch_name_optionals_label($draft->table_element);
1156 if ($draft->fetch_optionals() > 0) {
1157 $object->array_options = array_merge(
$object->array_options, $draft->array_options);
1160 print
$object->showOptionals($extrafields,
'create', $parameters);
1163 if (isModEnabled(
'project') && is_object(
$object->thirdparty) &&
$object->thirdparty->id > 0 && is_object($formproject)) {
1165 $langs->load(
'projects');
1166 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
1167 print
img_picto(
'',
'project',
'class="pictofixedwidth"');
1168 $numprojet = $formproject->select_projects(
$object->thirdparty->id, $projectid,
'projectid', 0, 0, 1, 0, 0, 0, 0,
'', 0, 0,
'');
1169 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>';
1174 print
"<tr><td>".$langs->trans(
'Model').
"</td><td>";
1175 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
1177 print
img_picto(
'',
'generic',
'class="pictofixedwidth"');
1179 print $form->selectarray(
'modelpdf', $list,
$conf->global->FACTURE_ADDON_PDF);
1184 print
'<td class="tdtop">';
1185 print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1,
'help',
'', 0, 2,
'notepublic');
1188 $doleditor =
new DolEditor(
'note_public', $note_public,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
1189 print $doleditor->Create(1);
1192 if (empty($user->socid)) {
1194 print
'<td class="tdtop">';
1195 print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext, 1,
'help',
'', 0, 2,
'noteprivate');
1198 $doleditor =
new DolEditor(
'note_private', $note_private,
'', 80,
'dolibarr_notes',
'In',
false,
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
1199 print $doleditor->Create(1);
1209 $title = $langs->trans(
"Recurrence");
1212 print
'<span class="opacitymedium">'.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name')).
'</span><br><br>';
1216 print
'<table class="border centpercent">';
1219 print
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"Frequency"), $langs->transnoentitiesnoconv(
'toolTipFrequency')).
"</td><td>";
1220 print
'<input type="text" class="width50" name="frequency" value="'.GETPOST(
'frequency',
'int').
'"> ';
1221 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'));
1225 print
"<tr><td>".$langs->trans(
'NextDateToExecution').
"</td><td>";
1227 print $form->selectDate($date_next_execution,
'', 1, 1, 0,
"add", 1, 1);
1231 print
"<tr><td>".$langs->trans(
"MaxPeriodNumber").
"</td><td>";
1232 print
'<input type="text" class="width50" name="nb_gen_max" value="'.GETPOSTINT(
'nb_gen_max').
'">';
1236 print
"<tr><td>".$langs->trans(
"StatusOfAutoGeneratedInvoices").
"</td><td>";
1237 $select = array(
'0' => $langs->trans(
'BillStatusDraft'),
'1' => $langs->trans(
'BillStatusValidated'));
1238 print $form->selectarray(
'auto_validate', $select,
GETPOSTINT(
'auto_validate'));
1243 print
"<tr><td>".$langs->trans(
"StatusOfGeneratedDocuments").
"</td><td>";
1244 $select = array(
'0' => $langs->trans(
'DoNotGenerateDoc'),
'1' => $langs->trans(
'AutoGenerateDoc'));
1245 print $form->selectarray(
'generate_pdf', $select,
GETPOSTINT(
'generate_pdf'));
1248 print
'<input type="hidden" name="generate_pdf" value="1">';
1256 $title = $langs->trans(
"ProductsAndServices");
1257 if (!isModEnabled(
'service')) {
1258 $title = $langs->trans(
"Products");
1259 } elseif (!isModEnabled(
'product')) {
1260 $title = $langs->trans(
"Services");
1268 print
'<div class="div-table-responsive-no-min">';
1269 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1273 $object->printOriginLinesList(
'', $selectedLines);
1282 if (!empty($flag_price_may_change)) {
1283 print
'<tr><td colspan="3" class="left">';
1284 print
'<select name="usenewprice" class="flat">';
1285 print
'<option value="0">'.$langs->trans(
"AlwaysUseFixedPrice").
'</option>';
1286 print
'<option value="1" disabled>'.$langs->trans(
"AlwaysUseNewPrice").
'</option>';
1292 print $form->buttonsSaveCancel(
"Create");
1305 if ($action ==
'ask_deleteline') {
1306 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'',
'no', 1);
1309 if ($action ==
'delete') {
1310 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteRepeatableInvoice'), $langs->trans(
'ConfirmDeleteRepeatableInvoice'),
'confirm_delete',
'',
'no', 1);
1314 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
1315 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
1316 if (empty($reshook)) {
1317 $formconfirm .= $hookmanager->resPrint;
1318 } elseif ($reshook > 0) {
1319 $formconfirm = $hookmanager->resPrint;
1324 $author =
new User($db);
1325 $author->fetch(
$object->user_author);
1329 print
dol_get_fiche_head($head,
'card', $langs->trans(
"RepeatableInvoice"), -1,
'bill');
1333 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
1336 if ($action !=
'editref') {
1337 $morehtmlref .= $form->editfieldkey(
$object->ref,
'ref',
$object->ref, $object, $user->hasRight(
'facture',
'creer'),
'',
'', 0, 2);
1339 $morehtmlref .= $form->editfieldval(
'',
'ref',
$object->ref, $object, $user->hasRight(
'facture',
'creer'),
'string');
1342 $morehtmlref .=
'<div class="refidno">';
1347 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'customer');
1349 if (isModEnabled(
'project')) {
1350 $langs->load(
"projects");
1351 $morehtmlref .=
'<br>';
1352 if ($user->hasRight(
'facture',
'creer')) {
1353 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
1354 if ($action !=
'classify') {
1355 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
1357 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
1359 if (!empty(
$object->fk_project)) {
1361 $proj->fetch(
$object->fk_project);
1362 $morehtmlref .=
' : '.$proj->getNomUrl(1);
1364 $morehtmlref .=
' - '.$proj->title;
1371 $morehtmlref .=
'</div>';
1373 $morehtmlstatus =
'';
1375 dol_banner_tab($object,
'ref', $linkback, 1,
'title',
'none', $morehtmlref,
'', 0,
'', $morehtmlstatus);
1377 print
'<div class="fichecenter">';
1378 print
'<div class="fichehalfleft">';
1379 print
'<div class="underbanner clearboth"></div>';
1381 print
'<table class="border centpercent tableforfield">';
1385 print
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
1387 print
$object->getSubtypeLabel(
'facture_rec');
1393 print
'<tr><td class="titlefield">'.$langs->trans(
"Author").
'</td><td>';
1394 print $author->getNomUrl(-1);
1398 print
'<tr><td>'.$langs->trans(
"AmountHT").
'</td>';
1399 print
'<td>'.price(
$object->total_ht, 0, $langs, 1, -1, -1,
$conf->currency).
'</td>';
1403 print
'<tr><td>'.$langs->trans(
"AmountVAT").
'</td><td>'.
price(
$object->total_tva, 0, $langs, 1, -1, -1,
$conf->currency).
'</td>';
1407 if (($mysoc->localtax1_assuj ==
"1" && $mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
1408 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td>';
1409 print
'<td class="nowrap">'.price(
$object->total_localtax1, 1,
'', 1, - 1, - 1,
$conf->currency).
'</td></tr>';
1411 if (($mysoc->localtax2_assuj ==
"1" && $mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
1412 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td>';
1413 print
'<td class=nowrap">'.price(
$object->total_localtax2, 1,
'', 1, - 1, - 1,
$conf->currency).
'</td></tr>';
1416 print
'<tr><td>'.$langs->trans(
"AmountTTC").
'</td><td colspan="3">'.
price(
$object->total_ttc, 0, $langs, 1, -1, -1,
$conf->currency).
'</td>';
1422 print
'<table class="nobordernopadding centpercent"><tr><td>';
1423 print $langs->trans(
'PaymentConditionsShort');
1425 if ($action !=
'editconditions' && $user->hasRight(
'facture',
'creer')) {
1426 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>';
1428 print
'</tr></table>';
1430 if ($action ==
'editconditions') {
1431 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
1433 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->cond_reglement_id,
'none');
1439 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1440 print $langs->trans(
'PaymentMode');
1442 if ($action !=
'editmode' && $user->hasRight(
'facture',
'creer')) {
1443 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>';
1445 print
'</tr></table>';
1447 if ($action ==
'editmode') {
1448 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'CRDT', 1, 1);
1450 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id,
$object->mode_reglement_id,
'none');
1456 if (
$object->mode_reglement_code == $object::PAYMENTCODETOEDITSOCIETERIB) {
1457 print
'<tr><td class="nowrap">';
1458 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1459 print $langs->trans(
'DebitBankAccount');
1463 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>';
1465 print
'</tr></table>';
1468 if ($action ==
'editbankaccountcustomer') {
1469 $form->formRib($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_societe_rib,
'accountcustomerid',
'fk_soc='.$object->socid, 1, 1);
1471 $form->formRib($_SERVER[
'PHP_SELF'] .
'?id=' .
$object->id,
$object->fk_societe_rib,
'none',
'', 0, 1);
1478 print
'<tr><td class="nowrap">';
1479 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1480 print $langs->trans(
'BankAccount');
1483 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>';
1485 print
'</tr></table>';
1487 if ($action ==
'editbankaccount') {
1488 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
1490 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
1496 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
1502 print
'<tr><td class="nowrap">';
1503 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
1504 print $langs->trans(
'Model');
1507 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>';
1509 print
'</tr></table>';
1511 if ($action ==
'editmodelpdf') {
1512 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
1515 foreach ($models as $k => $model) {
1516 $list[] = str_replace(
':',
'|', $k).
':'.$model;
1518 $select =
'select;'.implode(
',', $list);
1519 print $form->editfieldval($langs->trans(
"Model"),
'modelpdf',
$object->model_pdf, $object, $user->hasRight(
'facture',
'creer'), $select);
1533 print
'<div class="fichehalfright">';
1534 print
'<div class="underbanner clearboth"></div>';
1540 $title = $langs->trans(
"Recurrence");
1542 print
'<table class="border centpercent tableforfield">';
1544 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
1546 print
'<tr><td colspan="2">'.img_picto(
'',
'recurring',
'class="pictofixedwidth"').$title.
'</td></tr>';
1549 print
'<tr><td style="width: 50%">';
1550 print
'<table class="nobordernopadding" width="100%"><tr><td>';
1551 print $langs->trans(
'Frequency');
1553 if ($action !=
'editfrequency' && $user->hasRight(
'facture',
'creer')) {
1554 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>';
1556 print
'</tr></table>';
1558 if ($action ==
'editfrequency') {
1559 print
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'">';
1560 print
'<input type="hidden" name="action" value="setfrequency">';
1561 print
'<input type="hidden" name="token" value="'.newToken().
'">';
1562 print
'<table class="nobordernopadding">';
1564 print
'<input type="text" name="frequency" class="width50 marginrightonly right" value="'.$object->frequency.
'">';
1565 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'));
1567 print
'<td class="left"><input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
"Modify").
'"></td>';
1568 print
'</tr></table></form>';
1571 print $langs->trans(
'FrequencyPer_'.
$object->unit_frequency,
$object->frequency);
1573 print
'<span class="opacitymedium">'.$langs->trans(
"NotARecurringInvoiceTemplate").
'</span>';
1580 if ($action ==
'date_when' ||
$object->frequency > 0) {
1581 print $form->editfieldkey($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $user->hasRight(
'facture',
'creer'),
'day');
1583 print $langs->trans(
"NextDateToExecution");
1586 if ($action ==
'date_when' ||
$object->frequency > 0) {
1587 print $form->editfieldval($langs->trans(
"NextDateToExecution"),
'date_when',
$object->date_when, $object, $user->hasRight(
'facture',
'creer'),
'day',
$object->date_when,
null,
'',
'', 0,
'strikeIfMaxNbGenReached');
1590 if (!
$object->isMaxNbGenReached()) {
1595 print
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
1602 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1603 print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max, $object, $user->hasRight(
'facture',
'creer'));
1605 print $langs->trans(
"MaxPeriodNumber");
1608 if ($action ==
'nb_gen_max' ||
$object->frequency > 0) {
1609 print $form->editfieldval($langs->trans(
"MaxPeriodNumber"),
'nb_gen_max',
$object->nb_gen_max ?
$object->nb_gen_max :
'',
$object, $user->hasRight(
'facture',
'creer'));
1618 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1619 print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $user->hasRight(
'facture',
'creer'));
1621 print $langs->trans(
"StatusOfAutoGeneratedInvoices");
1624 $select =
'select;0:'.$langs->trans(
'BillStatusDraft').
',1:'.$langs->trans(
'BillStatusValidated');
1625 if ($action ==
'auto_validate' ||
$object->frequency > 0) {
1626 print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"),
'auto_validate',
$object->auto_validate, $object, $user->hasRight(
'facture',
'creer'), $select);
1633 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1634 print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $user->hasRight(
'facture',
'creer'));
1636 print $langs->trans(
"StatusOfGeneratedDocuments");
1640 $select =
'select;0:'.$langs->trans(
'DoNotGenerateDoc').
',1:'.$langs->trans(
'AutogenerateDoc');
1641 if ($action ==
'generate_pdf' ||
$object->frequency > 0) {
1642 print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"),
'generate_pdf',
$object->generate_pdf, $object, $user->hasRight(
'facture',
'creer'), $select);
1647 print
'<input type="hidden" name="generate_pdf" value="1">';
1656 if (!isModEnabled(
'cron')) {
1657 print
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
1660 print
'<div class="underbanner clearboth"></div>';
1661 print
'<table class="border centpercent tableforfield">';
1664 print
'<tr><td style="width: 50%">'.$langs->trans(
"NbOfGenerationDone").
'</td>';
1672 print $langs->trans(
"DateLastGeneration");
1686 print
'<div class="clearboth"></div><br>';
1690 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.(($action !=
'editline') ?
'#add' :
'#line_'.
GETPOSTINT(
'lineid')).
'" method="POST">';
1691 print
'<input type="hidden" name="token" value="' .
newToken().
'">';
1692 print
'<input type="hidden" name="action" value="' . (($action !=
'editline') ?
'addline' :
'updateline').
'">';
1693 print
'<input type="hidden" name="mode" value="">';
1694 print
'<input type="hidden" name="id" value="' .
$object->id.
'">';
1695 print
'<input type="hidden" name="page_y" value="">';
1697 if (!empty(
$conf->use_javascript_ajax) &&
$object->statut == 0) {
1698 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
1701 print
'<div class="div-table-responsive-no-min">';
1702 print
'<table id="tablelines" class="noborder noshadow centpercent">';
1705 $canchangeproduct = 1;
1706 $object->printObjectLines($action, $mysoc,
$object->thirdparty, $lineid, 0);
1710 if (
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer') && $action !=
'valid' && $action !=
'editline') {
1711 if ($action !=
'editline') {
1714 $parameters = array();
1715 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action);
1719 if (empty($reshook)) {
1736 print
'<div class="tabsAction">';
1738 $parameters = array();
1739 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action);
1740 if (empty($reshook)) {
1743 'class' =>
'classfortooltip',
1746 if (empty(
$object->suspended)) {
1747 if ($user->hasRight(
'facture',
'creer')) {
1749 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1751 if (empty(
$object->frequency) ||
$object->date_when <= $nowlasthour) {
1752 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>';
1754 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' .
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) .
'">' . $langs->trans(
"CreateBill") .
'</a></div>';
1758 print
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") .
'</a></div>';
1762 if ($user->hasRight(
'facture',
'creer')) {
1763 if (empty(
$object->suspended)) {
1764 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>';
1766 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>';
1771 print
dolGetButtonAction($langs->trans(
"Delete"),
'',
'delete', $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=delete&token=' .
newToken(),
'delete', $user->hasRight(
'facture',
'supprimer'));
1777 print
'<div class="fichecenter"><div class="fichehalfleft">';
1778 print
'<a name="builddoc"></a>';
1782 $tmparray = $form->showLinkToObjectBlock($object, array(), array(
'invoice'), 1);
1783 $linktoelem = $tmparray[
'linktoelem'];
1784 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
1785 print $htmltoenteralink;
1787 $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
1791 print
'<div class="fichehalfright">';
1796 $morehtmlcenter =
'';
1799 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
1801 $morehtmlcenter =
'';
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
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
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.
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.