39require
'../../main.inc.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
43require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture-rec.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/fourn/class/paiementfourn.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
50require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
51if (isModEnabled(
"product")) {
52 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
53 require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
55if (isModEnabled(
'project')) {
56 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
57 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
60if (isModEnabled(
'variants')) {
61 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
63if (isModEnabled(
'accounting')) {
64 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
76$langs->loadLangs(array(
'bills',
'compta',
'suppliers',
'companies',
'products',
'banks',
'admin'));
77if (isModEnabled(
'incoterm')) {
78 $langs->load(
'incoterm');
83$action =
GETPOST(
'action',
'aZ09');
86$cancel =
GETPOST(
'cancel',
'alpha');
87$backtopage =
GETPOST(
'backtopage',
'alpha');
88$backtopageforcancel =
'';
92$origin =
GETPOST(
'origin',
'alpha');
103$hookmanager->initHooks(array(
'invoicesuppliercard',
'globalcard'));
109$extrafields->fetch_name_optionals_label(
$object->table_element);
112if ($id > 0 || !empty($ref)) {
113 $ret =
$object->fetch($id, $ref);
117 $ret =
$object->fetch_thirdparty();
125if (!empty($user->socid)) {
126 $socid = $user->socid;
130$result =
restrictedArea($user,
'fournisseur', $id,
'facture_fourn',
'facture',
'fk_soc',
'rowid', $isdraft);
133$usercanread = ($user->hasRight(
"fournisseur",
"facture",
"lire") || $user->hasRight(
"supplier_invoice",
"lire"));
134$usercancreate = ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"));
135$usercandelete = (($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer")) || ($usercancreate &&
$object->is_erasable() == 1));
136$usercancreatecontract = $user->hasRight(
"contrat",
"creer");
139$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"validate")));
140$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"send"));
143$permissionnote = $usercancreate;
144$permissiondellink = $usercancreate;
145$permissiontoedit = $usercancreate;
146$permissiontoadd = $usercancreate;
147$permissiontodelete = $usercandelete;
156$parameters = array(
'socid' => $socid);
157$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
162if (empty($reshook)) {
163 $backurlforlist = DOL_URL_ROOT.
'/fourn/facture/list.php';
165 if (empty($backtopage) || ($cancel && empty($id))) {
166 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
167 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
168 $backtopage = $backurlforlist;
170 $backtopage = DOL_URL_ROOT.
'/fourn/facture/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
176 if (!empty($backtopageforcancel)) {
177 header(
"Location: ".$backtopageforcancel);
179 } elseif (!empty($backtopage)) {
180 header(
"Location: ".$backtopage);
186 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
188 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
190 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
193 if (
GETPOST(
'linkedOrder') && empty($cancel) && $id > 0 && $permissiontoadd) {
196 $result =
$object->add_object_linked(
'order_supplier',
GETPOST(
'linkedOrder'));
200 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontoadd) {
202 '@phan-var-force FactureFournisseur $objectutil';
204 if (
GETPOST(
'newsupplierref',
'alphanohtml')) {
205 $objectutil->ref_supplier =
GETPOST(
'newsupplierref',
'alphanohtml');
209 $result = $objectutil->createFromClone($user, $id);
211 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
214 $langs->load(
"errors");
218 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
219 $idwarehouse =
GETPOST(
'idwarehouse');
224 $qualified_for_stock_change = 0;
226 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
228 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
232 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
233 $langs->load(
"stocks");
234 if (!$idwarehouse || $idwarehouse == -1) {
236 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
244 $result =
$object->validate($user,
'', $idwarehouse);
254 $outputlangs = $langs;
257 $newlang =
GETPOST(
'lang_id',
'aZ09');
260 $newlang =
$object->thirdparty->default_lang;
262 if (!empty($newlang)) {
264 $outputlangs->setDefaultLang($newlang);
269 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
276 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
280 $isErasable =
$object->is_erasable();
282 if ($usercandelete && $isErasable > 0) {
283 $revertstock =
GETPOST(
'revertstock');
286 $idwarehouse =
GETPOST(
'idwarehouse');
288 $qualified_for_stock_change = 0;
290 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
292 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
296 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
297 $langs->load(
"stocks");
298 if (!$idwarehouse || $idwarehouse == -1) {
300 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
303 $result =
$object->setDraft($user, $idwarehouse);
312 $result =
$object->delete($user);
314 header(
'Location: list.php?restore_lastsearch_values=1');
321 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
323 $result =
$object->deleteLine($lineid);
343 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
350 } elseif ($action ==
'unlinkdiscount' && $usercancreate) {
353 $result = $discount->fetch(
GETPOSTINT(
"discountid"));
354 $discount->unlink_invoice();
355 } elseif ($action ==
'confirm_paid' && $confirm ==
'yes' && $usercancreate) {
357 $result =
$object->setPaid($user);
361 } elseif ($action ==
'confirm_paid_partially' && $confirm ==
'yes' && $usercancreate) {
364 $close_code =
GETPOST(
"close_code",
'restricthtml');
365 $close_note =
GETPOST(
"close_note",
'restricthtml');
367 $result =
$object->setPaid($user, $close_code, $close_note);
372 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
374 } elseif ($action ==
'confirm_canceled' && $confirm ==
'yes' && $usercancreate) {
377 $close_code =
GETPOST(
"close_code",
'restricthtml');
378 $close_note =
GETPOST(
"close_note",
'restricthtml');
380 $result =
$object->setCanceled($user, $close_code, $close_note);
385 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
390 if ($action ==
'setref_supplier' && $usercancreate) {
393 if (
$object->update($user) < 0) {
397 $outputlangs = $langs;
400 $newlang =
GETPOST(
'lang_id',
'aZ09');
403 $newlang =
$object->thirdparty->default_lang;
405 if (!empty($newlang)) {
407 $outputlangs->setDefaultLang($newlang);
411 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
417 if ($action ==
'setconditions' && $usercancreate) {
419 $object->cond_reglement_code = 0;
420 $object->cond_reglement_id = 0;
435 $new_date_echeance =
$object->calculate_date_lim_reglement();
436 if ($new_date_echeance) {
437 $object->date_echeance = $new_date_echeance;
442 $result =
$object->update($user);
454 } elseif ($action ==
'set_incoterms' && isModEnabled(
'incoterm') && $usercancreate) {
457 } elseif ($action ==
'setmode' && $usercancreate) {
460 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
462 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
463 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
466 } elseif ($action ==
'setbankaccount' && $usercancreate) {
469 } elseif ($action ==
'setvatreversecharge' && $usercancreate) {
471 $vatreversecharge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
472 $result =
$object->setVATReverseCharge($vatreversecharge);
475 if ($action ==
'settransportmode' && $usercancreate) {
478 } elseif ($action ==
'setlabel' && $usercancreate) {
482 $result =
$object->update($user);
486 } elseif ($action ==
'setdatef' && $usercancreate) {
490 setEventMessages($langs->trans(
"WarningInvoiceDateInFuture"),
null,
'warnings');
492 setEventMessages($langs->trans(
"WarningInvoiceDateTooFarInFuture"),
null,
'warnings');
499 $date_echence_calc =
$object->calculate_date_lim_reglement();
500 if (!empty(
$object->date_echeance)) {
501 $object->date_echeance = $date_echence_calc;
507 $result =
$object->update($user);
511 } elseif ($action ==
'setdate_lim_reglement' && $usercancreate) {
516 setEventMessages($langs->trans(
"DatePaymentTermCantBeLowerThanObjectDate"),
null,
'warnings');
518 $result =
$object->update($user);
522 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
538 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
540 $discount->fetch(
GETPOSTINT(
"remise_id_for_payment"));
544 $remaintopay =
$object->getRemainToPay(0);
548 setEventMessages($langs->trans(
"ErrorDiscountLargerThanRemainToPaySplitItBefore"),
null,
'errors');
552 $result = $discount->link_to_invoice(0, $id);
559 $newremaintopay =
$object->getRemainToPay(0);
560 if ($newremaintopay == 0) {
571 $outputlangs = $langs;
574 $newlang =
GETPOST(
'lang_id',
'aZ09');
577 $newlang =
$object->thirdparty->default_lang;
579 if (!empty($newlang)) {
581 $outputlangs->setDefaultLang($newlang);
585 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
590 } elseif ($action ==
'confirm_converttoreduc' && $confirm ==
'yes' && $usercancreate) {
598 $result = $discountcheck->fetch(0, 0,
$object->id);
610 $amount_ht = $amount_tva = $amount_ttc = array();
611 $multicurrency_amount_ht = $multicurrency_amount_tva = $multicurrency_amount_ttc = array();
615 foreach (
$object->lines as $line) {
616 if ($line->product_type < 9 && $line->total_ht != 0) {
617 $keyforvatrate = $line->tva_tx.($line->vat_src_code ?
' ('.$line->vat_src_code.
')' :
'');
619 $amount_ht[$keyforvatrate] += $line->total_ht;
620 $amount_tva[$keyforvatrate] += $line->total_tva;
621 $amount_ttc[$keyforvatrate] += $line->total_ttc;
622 $multicurrency_amount_ht[$keyforvatrate] += $line->multicurrency_total_ht;
623 $multicurrency_amount_tva[$keyforvatrate] += $line->multicurrency_total_tva;
624 $multicurrency_amount_ttc[$keyforvatrate] += $line->multicurrency_total_ttc;
628 '@phan-var-force array<string,float> $amount_ht
629 @phan-var-force array<string,float> $amount_tva
630 @phan-var-force array<string,float> $amount_ttc
631 @phan-var-force array<string,float> $multicurrency_amount_ht
632 @phan-var-force array<string,float> $multicurrency_amount_tva
633 @phan-var-force array<string,float> $multicurrency_amount_ttc';
637 $alreadypaid =
$object->getSommePaiement();
638 if ($alreadypaid && abs($alreadypaid) < abs(
$object->total_ttc)) {
639 $ratio = abs((
$object->total_ttc - $alreadypaid) /
$object->total_ttc);
640 foreach ($amount_ht as $vatrate => $val) {
641 $amount_ht[$vatrate] =
price2num($amount_ht[$vatrate] * $ratio,
'MU');
642 $amount_tva[$vatrate] =
price2num($amount_tva[$vatrate] * $ratio,
'MU');
643 $amount_ttc[$vatrate] =
price2num($amount_ttc[$vatrate] * $ratio,
'MU');
644 $multicurrency_amount_ht[$vatrate] =
price2num($multicurrency_amount_ht[$vatrate] * $ratio,
'MU');
645 $multicurrency_amount_tva[$vatrate] =
price2num($multicurrency_amount_tva[$vatrate] * $ratio,
'MU');
646 $multicurrency_amount_ttc[$vatrate] =
price2num($multicurrency_amount_ttc[$vatrate] * $ratio,
'MU');
655 $discount->description =
'(CREDIT_NOTE)';
657 $discount->description =
'(DEPOSIT)';
659 $discount->description =
'(EXCESS PAID)';
661 setEventMessages($langs->trans(
'CantConvertToReducAnInvoiceOfThisType'),
null,
'errors');
663 $discount->discount_type = 1;
664 $discount->fk_soc =
$object->socid;
665 $discount->socid =
$object->socid;
666 $discount->fk_invoice_supplier_source =
$object->id;
674 $sql =
'SELECT SUM(pf.amount) as total_paiements';
675 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf, '.MAIN_DB_PREFIX.
'paiementfourn as p';
676 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id AND c.entity IN ('.
getEntity(
'c_paiement').
')';
677 $sql .=
' WHERE pf.fk_facturefourn = '.((int)
$object->id);
678 $sql .=
' AND pf.fk_paiementfourn = p.rowid';
679 $sql .=
' AND p.entity IN ('.getEntity(
'invoice').
')';
681 $resql = $db->query($sql);
686 $res = $db->fetch_object($resql);
687 $total_paiements = $res->total_paiements;
690 $total_creditnote_and_deposit = 0;
691 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
692 $sql .=
" re.description, re.fk_invoice_supplier_source";
693 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
694 $sql .=
" WHERE fk_invoice_supplier = ".((int)
$object->id);
695 $resql = $db->query($sql);
696 if (!empty($resql)) {
697 while ($obj = $db->fetch_object($resql)) {
698 $total_creditnote_and_deposit += $obj->amount_ttc;
704 $discount->amount_ht = $discount->amount_ttc = $total_paiements + $total_creditnote_and_deposit -
$object->total_ttc;
705 $discount->amount_tva = 0;
706 $discount->tva_tx = 0;
707 $discount->vat_src_code =
'';
709 $result = $discount->create($user);
715 foreach ($amount_ht as $tva_tx => $xxx) {
716 $discount->amount_ht = abs((
float) $amount_ht[$tva_tx]);
717 $discount->amount_tva = abs((
float) $amount_tva[$tva_tx]);
718 $discount->amount_ttc = abs((
float) $amount_ttc[$tva_tx]);
719 $discount->multicurrency_amount_ht = abs((
float) $multicurrency_amount_ht[$tva_tx]);
720 $discount->multicurrency_amount_tva = abs((
float) $multicurrency_amount_tva[$tva_tx]);
721 $discount->multicurrency_amount_ttc = abs((
float) $multicurrency_amount_ttc[$tva_tx]);
726 if (preg_match(
'/\((.*)\)/', $tva_tx, $reg)) {
727 $vat_src_code = $reg[1];
728 $tva_tx = preg_replace(
'/\s*\(.*\)/',
'', $tva_tx);
731 $discount->tva_tx = abs((
float) $tva_tx);
732 $discount->vat_src_code = $vat_src_code;
734 $result = $discount->create($user);
745 $result =
$object->setPaid($user);
760 } elseif ($action ==
'confirm_delete_paiement' && $confirm ==
'yes' && $usercancreate) {
765 $result = $paiementfourn->fetch(
GETPOST(
'paiement_id'));
767 $result = $paiementfourn->delete($user);
769 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
777 } elseif ($action ==
'add' && $usercancreate) {
782 $selectedLines =
GETPOST(
'toselect',
'array');
790 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
804 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
809 if (empty($dateinvoice)) {
810 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
822 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ReplaceInvoice")),
null,
'errors');
836 $object->date_echeance = $datedue;
842 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
843 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
845 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
846 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
867 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"CorrectInvoice")),
null,
'errors');
870 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
875 if (empty($dateinvoice)) {
876 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
886 if (!
GETPOST(
'ref_supplier')) {
887 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplierBill')),
null,
'errors');
895 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
910 $object->date_echeance = $datedue;
916 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
917 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
919 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
920 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
925 $object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice :
'';
934 if (
GETPOSTINT(
'invoiceAvoirWithLines') == 1 && $id > 0) {
936 if ($facture_source->fetch(
$object->fk_facture_source) > 0) {
939 foreach ($facture_source->lines as $line) {
941 if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
945 $line->fk_facture_fourn =
$object->id;
946 $line->fk_parent_line = $fk_parent_line;
948 $line->subprice = -$line->subprice;
949 $line->pa_ht = -((float) $line->pa_ht);
950 $line->total_ht = -$line->total_ht;
951 $line->total_tva = -$line->total_tva;
952 $line->total_ttc = -$line->total_ttc;
953 $line->total_localtax1 = -$line->total_localtax1;
954 $line->total_localtax2 = -$line->total_localtax2;
956 $result = $line->insert();
961 if ($result > 0 && $line->product_type == 9) {
962 $fk_parent_line = $result;
970 if (
GETPOSTINT(
'invoiceAvoirWithPaymentRestAmount') == 1 &&
$id > 0) {
972 if ($facture_source->fetch(
$object->fk_facture_source) > 0) {
973 $totalpaid = $facture_source->getSommePaiement();
974 $totalcreditnotes = $facture_source->getSumCreditNotesUsed();
975 $totaldeposits = $facture_source->getSumDepositsUsed();
976 $remain_to_pay = abs($facture_source->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits);
977 $desc = $langs->trans(
'invoiceAvoirLineWithPaymentRestAmount');
978 $retAddLine =
$object->addline($desc, $remain_to_pay, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
'TTC');
980 if ($retAddLine < 0) {
988 if (empty($dateinvoice)) {
990 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
1000 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
1010 $object->note_public = trim(
GETPOST(
'note_public',
'restricthtml'));
1011 $object->note_private = trim(
GETPOST(
'note_private',
'restricthtml'));
1022 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1023 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1027 $object->fac_rec = $fac_recid;
1029 $fac_rec->fetch(
$object->fac_rec);
1030 $fac_rec->fetch_lines();
1031 $object->lines = $fac_rec->lines;
1038 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1043 if (empty($dateinvoice)) {
1044 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
1054 if (!
GETPOST(
'ref_supplier')) {
1055 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplierBill')),
null,
'errors');
1063 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
1080 $object->date_echeance = $datedue;
1086 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
1087 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
1089 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1090 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1095 if (empty(
$object->date_echeance)) {
1096 $object->date_echeance =
$object->calculate_date_lim_reglement();
1102 if (!$error &&
GETPOST(
'origin',
'alpha') &&
GETPOST(
'originid')) {
1104 $element = $subelement =
GETPOST(
'origin',
'alpha');
1112 if ($element ==
'order') {
1113 $element = $subelement =
'commande';
1115 if ($element ==
'propal') {
1116 $element =
'comm/propal';
1117 $subelement =
'propal';
1119 if ($element ==
'contract') {
1120 $element = $subelement =
'contrat';
1122 if ($element ==
'order_supplier') {
1124 $subelement =
'fournisseur.commande';
1126 if ($element ==
'project') {
1127 $element =
'projet';
1134 $classname = ucfirst($subelement);
1135 if ($classname ==
'Fournisseur.commande') {
1136 $classname =
'CommandeFournisseur';
1138 $objectsrc =
new $classname($db);
1139 $objectsrc->fetch($originid);
1140 $objectsrc->fetch_thirdparty();
1147 if (
$object->origin ==
'reception') {
1148 $objectsrc->fetchObjectLinked();
1150 if (count($objectsrc->linkedObjectsIds[
'order_supplier']) > 0) {
1151 foreach ($objectsrc->linkedObjectsIds[
'order_supplier'] as $key => $value) {
1152 $object->linkedObjectsIds[
'order_supplier'] = $value;
1162 $classname = ucfirst($subelement);
1163 if ($classname ==
'Fournisseur.commande') {
1164 $classname =
'CommandeFournisseur';
1166 $srcobject =
new $classname($db);
1168 $result = $srcobject->fetch(
GETPOSTINT(
'originid'));
1171 $typeamount =
GETPOST(
'typedeposit',
'alpha');
1176 $amountdeposit = array();
1178 if ($typeamount ==
'amount') {
1179 $amount = $valuedeposit;
1181 $amount = $srcobject->total_ttc * ((float) $valuedeposit / 100);
1184 $TTotalByTva = array();
1185 foreach ($srcobject->lines as &$line) {
1186 if (!empty($line->special_code)) {
1189 $TTotalByTva[$line->tva_tx] += $line->total_ttc;
1191 '@phan-var-force array<string,float> $TTotalByTva';
1193 $amount_ttc_diff = 0.;
1194 foreach ($TTotalByTva as $tva => &$total) {
1195 $coef = $total / $srcobject->total_ttc;
1196 $am = $amount * $coef;
1197 $amount_ttc_diff += $am;
1198 $amountdeposit[$tva] += $am / (1 + (float) $tva / 100);
1201 if ($typeamount ==
'amount') {
1202 $amountdeposit[0] = $valuedeposit;
1203 } elseif ($typeamount ==
'variable') {
1206 $lines = $srcobject->lines;
1207 $numlines = count($lines);
1208 for ($i = 0; $i < $numlines; $i++) {
1210 if (empty($lines[$i]->qty)) {
1213 if (!empty($lines[$i]->special_code)) {
1217 $totalamount += $lines[$i]->total_ht;
1218 $tva_tx = $lines[$i]->tva_tx;
1219 $amountdeposit[$tva_tx] += ($lines[$i]->total_ht * (float) $valuedeposit) / 100;
1223 if ($totalamount == 0) {
1224 $amountdeposit[0] = 0;
1229 $amountdeposit[0] = 0;
1233 $amount_ttc_diff = $amountdeposit[0];
1236 foreach ($amountdeposit as $tva => $amount) {
1237 if (empty($amount)) {
1242 'amount' =>
'FixAmount',
1243 'variable' =>
'VarAmount'
1245 $descline =
'(DEPOSIT)';
1247 if ($typeamount ==
'amount') {
1248 $descline .=
' ('.price($valuedeposit, 0, $langs, 0, - 1, - 1, (!empty(
$object->multicurrency_code) ?
$object->multicurrency_code :
$conf->currency)).
')';
1249 } elseif ($typeamount ==
'variable') {
1250 $descline .=
' ('.$valuedeposit.
'%)';
1253 $descline .=
' - '.$srcobject->ref;
1283 $diff =
$object->total_ttc - $amount_ttc_diff;
1287 $subprice_diff =
$object->lines[0]->subprice - $diff / (1 +
$object->lines[0]->tva_tx / 100);
1293 $object->lines[0]->localtax1_tx,
1294 $object->lines[0]->localtax2_tx,
1296 $object->lines[0]->fk_product,
1299 $object->lines[0]->product_type,
1300 $object->lines[0]->remise_percent,
1302 $object->lines[0]->date_start,
1311 } elseif ($result > 0) {
1312 $lines = $srcobject->lines;
1313 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1314 $srcobject->fetch_lines();
1315 $lines = $srcobject->lines;
1318 $num = count($lines);
1319 for ($i = 0; $i < $num; $i++) {
1320 if (!in_array($lines[$i]->
id, $selectedLines)) {
1324 $desc = ($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->product_label);
1325 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
1328 if (method_exists($lines[$i],
'fetch_optionals')) {
1329 $lines[$i]->fetch_optionals();
1334 $date_start = $lines[$i]->date_debut_prevue;
1335 if ($lines[$i]->date_debut_reel) {
1336 $date_start = $lines[$i]->date_debut_reel;
1338 if ($lines[$i]->date_start) {
1339 $date_start = $lines[$i]->date_start;
1341 $date_end = $lines[$i]->date_fin_prevue;
1342 if ($lines[$i]->date_fin_reel) {
1343 $date_end = $lines[$i]->date_fin_reel;
1345 if ($lines[$i]->date_end) {
1346 $date_end = $lines[$i]->date_end;
1349 $tva_tx = $lines[$i]->tva_tx;
1351 if (!empty($lines[$i]->vat_src_code) && !preg_match(
'/\(/', (
string) $tva_tx)) {
1352 $tva_tx .=
' ('.$lines[$i]->vat_src_code.
')';
1356 $object->special_code = $lines[$i]->special_code;
1361 $pu_currency = $lines[$i]->multicurrency_subprice;
1363 $pu = $lines[$i]->subprice;
1372 $lines[$i]->localtax1_tx,
1373 $lines[$i]->localtax2_tx,
1375 $lines[$i]->fk_product,
1376 $lines[$i]->remise_percent,
1380 $lines[$i]->info_bits,
1385 $lines[$i]->array_options,
1386 $lines[$i]->fk_unit,
1389 $lines[$i]->ref_supplier,
1390 $lines[$i]->special_code
1407 } elseif (!$error) {
1417 $langs->load(
"errors");
1427 $outputlangs = $langs;
1428 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1435 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1438 } elseif ($action ==
'updateline' && $usercancreate) {
1442 if (!
$object->fetch($id) > 0) {
1448 $tva_tx = str_replace(
'*',
'', $tva_tx);
1450 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_subprice') !=
'') {
1452 $price_base_type =
'HT';
1455 $price_base_type =
'TTC';
1458 if (
GETPOST(
'productid') > 0) {
1460 if (
getDolGlobalInt(
'SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY') == 1) {
1462 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1467 $prod->fetch(
GETPOST(
'productid'));
1468 $label = $prod->description;
1469 if (trim(
GETPOST(
'product_desc',
'restricthtml')) != trim($label)) {
1470 $label =
GETPOST(
'product_desc',
'restricthtml');
1473 $type = $prod->type;
1475 $label =
GETPOST(
'product_desc',
'restricthtml');
1484 if (preg_match(
'/\*/', $tva_tx)) {
1489 $tva_tx = str_replace(
'*',
'', $tva_tx);
1497 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1498 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1500 if (is_array($extralabelsline)) {
1501 foreach ($extralabelsline as $key => $value) {
1502 unset($_POST[
"options_".$key]);
1506 $result =
$object->updateline(
1528 unset($_POST[
'label']);
1529 unset($_POST[
'fourn_ref']);
1530 unset($_POST[
'date_starthour']);
1531 unset($_POST[
'date_startmin']);
1532 unset($_POST[
'date_startsec']);
1533 unset($_POST[
'date_startday']);
1534 unset($_POST[
'date_startmonth']);
1535 unset($_POST[
'date_startyear']);
1536 unset($_POST[
'date_endhour']);
1537 unset($_POST[
'date_endmin']);
1538 unset($_POST[
'date_endsec']);
1539 unset($_POST[
'date_endday']);
1540 unset($_POST[
'date_endmonth']);
1541 unset($_POST[
'date_endyear']);
1542 unset($_POST[
'price_ttc']);
1543 unset($_POST[
'price_ht']);
1550 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
1554 foreach (
$object->lines as $line) {
1555 if ($line->product_type == 1) {
1556 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $line->tva_tx, $line->localtax1_tx, $line->localtax2_tx, $line->qty, $line->fk_product,
'HT', $line->info_bits, $line->product_type, $line->remise_percent, 0, $alldate_start, $alldate_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice, $line->ref_supplier, $line->rang);
1559 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !=
'' && $usercancreate) {
1561 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
1562 $vat_rate = str_replace(
'*',
'', $vat_rate);
1565 foreach (
$object->lines as $line) {
1566 $result =
$object->updateline($line->id, $line->desc, $line->subprice, $vat_rate, $localtax1_rate, $localtax2_rate, $line->qty, $line->fk_product,
'HT', $line->info_bits, $line->product_type, $line->remise_percent, 0, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice, $line->ref_supplier, $line->rang);
1568 } elseif ($action ==
'addline' && $usercancreate) {
1577 $ret =
$object->fetch_thirdparty();
1579 $langs->load(
'errors');
1584 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
1588 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
1589 if ($prod_entry_mode ==
'free') {
1596 $price_ht_devise =
'';
1598 $price_ttc_devise =
'';
1600 if (
GETPOST(
'price_ht') !==
'') {
1603 if (
GETPOST(
'multicurrency_price_ht') !==
'') {
1606 if (
GETPOST(
'price_ttc') !==
'') {
1609 if (
GETPOST(
'multicurrency_price_ttc') !==
'') {
1610 $price_ttc_devise =
price2num(
GETPOST(
'multicurrency_price_ttc'),
'CU', 2);
1617 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
1618 if (empty($remise_percent)) {
1619 $remise_percent = 0;
1623 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1624 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
1626 if (is_array($extralabelsline)) {
1628 foreach ($extralabelsline as $key => $value) {
1629 unset($_POST[
"options_".$key]);
1633 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
1634 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1637 if ($prod_entry_mode ==
'free' && (!
GETPOST(
'idprodfournprice') ||
GETPOST(
'idprodfournprice') ==
'-1') &&
GETPOST(
'type') < 0) {
1638 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
1643 if ($prod_entry_mode ==
'free' && (!
GETPOST(
'idprodfournprice') ||
GETPOST(
'idprodfournprice') ==
'-1')
1644 && (((
float) $price_ht < 0 && !
getDolGlobalString(
'SUPPLIER_INVOICE_ENABLE_NEGATIVE_LINES')) || $price_ht ===
'')
1645 && (((
float) $price_ht_devise < 0 && !
getDolGlobalString(
'SUPPLIER_INVOICE_ENABLE_NEGATIVE_LINES')) || $price_ht_devise ===
'')
1646 && ((
float) $price_ttc < 0 && !
getDolGlobalString(
'SUPPLIER_INVOICE_ENABLE_NEGATIVE_LINES') || $price_ttc ===
'')
1647 && ((
float) $price_ttc_devise < 0 && !
getDolGlobalString(
'SUPPLIER_INVOICE_ENABLE_NEGATIVE_LINES') || $price_ttc_devise ===
'')
1648 &&
$object->type != $object::TYPE_CREDIT_NOTE) {
1649 if (((
float) $price_ht < 0 || (
float) $price_ttc < 0) && !
getDolGlobalString(
'SUPPLIER_INVOICE_ENABLE_NEGATIVE_LINES')) {
1650 $langs->load(
"errors");
1651 if (
$object->type == $object::TYPE_DEPOSIT) {
1653 setEventMessages($langs->trans(
"ErrorLinesCantBeNegativeOnDeposits"),
null,
'errors');
1655 setEventMessages($langs->trans(
"ErrorFieldCantBeNegativeOnInvoice", $langs->transnoentitiesnoconv(
"UnitPrice"), $langs->transnoentitiesnoconv(
"CustomerAbsoluteDiscountShort")),
null,
'errors');
1660 if ($prod_entry_mode ==
'free' && (!
GETPOST(
'idprodfournprice') ||
GETPOST(
'idprodfournprice') ==
'-1') &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
1661 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
1665 if ($prod_entry_mode ==
'free' && (!
GETPOST(
'idprodfournprice') ||
GETPOST(
'idprodfournprice') ==
'-1') && !
GETPOST(
'dp_desc')) {
1666 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
1669 if (!
GETPOST(
'qty',
'alpha')) {
1670 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1674 if (!$error && isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
1675 if ($combinations =
GETPOST(
'combinations',
'array')) {
1679 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1680 $idprod = $res->fk_product_child;
1682 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1688 if ($prod_entry_mode !=
'free' && empty($error)) {
1692 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
1697 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
1699 $res = $productsupplier->fetch($idprod);
1702 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
1704 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1705 if ($productsupplier->fourn_socid != $socid) {
1706 $productsupplier->ref_supplier =
'';
1709 $fksoctosearch =
$object->thirdparty->id;
1710 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1712 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
1713 $qtytosearch = $qty;
1715 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
1716 $res = $productsupplier->fetch($idprod);
1720 $label = $productsupplier->label;
1723 $outputlangs = $langs;
1725 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1726 $newlang =
GETPOST(
'lang_id',
'aZ09');
1728 if (empty($newlang)) {
1729 $newlang =
$object->thirdparty->default_lang;
1731 if (!empty($newlang)) {
1733 $outputlangs->setDefaultLang($newlang);
1735 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
1737 $desc = $productsupplier->description;
1740 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
1741 $desc = $productsupplier->desc_supplier;
1745 if (trim($product_desc) == trim($desc) &&
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
1749 $desc = $product_desc;
1751 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
1755 $ref_supplier = $productsupplier->ref_supplier;
1758 if (!GETPOSTISSET(
'tva_tx')) {
1759 $tmpidprodfournprice =
GETPOST(
'idprodfournprice',
'alpha');
1760 if (is_numeric($tmpidprodfournprice) && (
int) $tmpidprodfournprice > 0) {
1761 $tmpidprodfournprice = (int) $tmpidprodfournprice;
1763 $tmpidprodfournprice = 0;
1769 if (empty($tva_tx) || empty($tva_npr)) {
1775 $type = $productsupplier->type;
1776 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1777 $price_base_type =
'HT';
1779 $pu_devise =
price2num($price_ht_devise,
'CU');
1780 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
1781 $price_base_type =
'TTC';
1783 $pu_devise =
price2num($price_ttc_devise,
'CU');
1785 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
1786 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
1787 $pu = $productsupplier->fourn_pu;
1790 $pu = $productsupplier->fourn_pu;
1791 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
1795 $ref_supplier = $productsupplier->ref_supplier;
1816 min($rank, count(
$object->lines) + 1),
1819 $productsupplier->fk_unit,
1822 GETPOST(
'fourn_ref',
'alpha'),
1826 if ($idprod == -99 || $idprod == 0) {
1829 $langs->load(
"errors");
1830 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
1832 if ($idprod == -1) {
1835 $langs->load(
"errors");
1836 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
1838 } elseif (empty($error)) {
1839 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
1840 $tva_tx = str_replace(
'*',
'', $tva_tx);
1841 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1842 $desc = $product_desc;
1844 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1846 $fk_unit =
GETPOST(
'units',
'alpha');
1848 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
1856 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1860 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
1862 $price_base_type =
'HT';
1863 $pu_devise =
price2num($price_ht_devise,
'CU');
1865 $result =
$object->addline($product_desc, $pu_ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $tva_npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit, 0, $pu_devise, $ref_supplier);
1869 if (!$error && $result > 0) {
1874 $outputlangs = $langs;
1877 $newlang =
GETPOST(
'lang_id',
'aZ09');
1880 $newlang =
$object->thirdparty->default_lang;
1882 if (!empty($newlang)) {
1884 $outputlangs->setDefaultLang($newlang);
1889 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1895 unset($_POST [
'prod_entry_mode']);
1897 unset($_POST[
'qty']);
1898 unset($_POST[
'type']);
1899 unset($_POST[
'remise_percent']);
1900 unset($_POST[
'pu']);
1901 unset($_POST[
'price_ht']);
1902 unset($_POST[
'multicurrency_price_ht']);
1903 unset($_POST[
'price_ttc']);
1904 unset($_POST[
'fourn_ref']);
1905 unset($_POST[
'tva_tx']);
1906 unset($_POST[
'label']);
1907 unset($localtax1_tx);
1908 unset($localtax2_tx);
1909 unset($_POST[
'np_marginRate']);
1910 unset($_POST[
'np_markRate']);
1911 unset($_POST[
'dp_desc']);
1912 unset($_POST[
'idprodfournprice']);
1913 unset($_POST[
'units']);
1915 unset($_POST[
'date_starthour']);
1916 unset($_POST[
'date_startmin']);
1917 unset($_POST[
'date_startsec']);
1918 unset($_POST[
'date_startday']);
1919 unset($_POST[
'date_startmonth']);
1920 unset($_POST[
'date_startyear']);
1921 unset($_POST[
'date_endhour']);
1922 unset($_POST[
'date_endmin']);
1923 unset($_POST[
'date_endsec']);
1924 unset($_POST[
'date_endday']);
1925 unset($_POST[
'date_endmonth']);
1926 unset($_POST[
'date_endyear']);
1933 } elseif ($action ==
'classin' && $usercancreate) {
1935 $result =
$object->setProject($projectid);
1936 } elseif ($action ==
'confirm_edit' && $confirm ==
'yes' && $usercancreate) {
1940 $totalpaid =
$object->getSommePaiement();
1941 $resteapayer =
$object->total_ttc - $totalpaid;
1944 $ventilExportCompta =
$object->getVentilExportCompta();
1946 if (!$ventilExportCompta) {
1949 $idwarehouse =
GETPOST(
'idwarehouse');
1953 $qualified_for_stock_change = 0;
1955 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1957 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1961 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
1962 $langs->load(
"stocks");
1963 if (!$idwarehouse || $idwarehouse == -1) {
1965 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1970 $object->setDraft($user, $idwarehouse);
1974 $outputlangs = $langs;
1977 $newlang =
GETPOST(
'lang_id',
'aZ09');
1980 $newlang =
$object->thirdparty->default_lang;
1982 if (!empty($newlang)) {
1984 $outputlangs->setDefaultLang($newlang);
1989 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1998 } elseif ($action ==
'reopen' && $usercancreate) {
2000 $result =
$object->fetch($id);
2003 $result =
$object->setUnpaid($user);
2005 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
2014 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
2017 $triggersendname =
'BILL_SUPPLIER_SENTBYMAIL';
2019 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
2020 $trackid =
'sinv'.$object->id;
2021 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
2024 $upload_dir =
$conf->fournisseur->facture->dir_output;
2025 $permissiontoadd = $usercancreate;
2026 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
2029 if ($action ==
'calculate' && $usercancreate) {
2030 $calculationrule =
GETPOST(
'calculationrule');
2034 $result =
$object->update_price(0, (($calculationrule ==
'totalofround') ?
'0' :
'1'), 0,
$object->thirdparty);
2040 if ($action ==
'update_extras' && $usercancreate) {
2044 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
2051 $result =
$object->insertExtraFields(
'BILL_SUPPLIER_MODIFY');
2059 $action =
'edit_extras';
2064 if ($action ==
'addcontact' && $usercancreate) {
2065 $result =
$object->fetch($id);
2067 if ($result > 0 && $id > 0) {
2070 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
2074 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
2077 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
2078 $langs->load(
"errors");
2079 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
2084 } elseif ($action ==
'swapstatut' && $usercancreate) {
2091 } elseif ($action ==
'deletecontact' && $usercancreate) {
2097 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
2111$form =
new Form($db);
2113$bankaccountstatic =
new Account($db);
2115if (isModEnabled(
'project')) {
2121$title =
$object->ref.
" - ".$langs->trans(
'Card');
2122if ($action ==
'create') {
2123 $title = $langs->trans(
"NewSupplierInvoice");
2125$help_url =
'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
2126llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-fourn-facture page-card');
2129if ($action ==
'create') {
2131 $selectedLines = array();
2133 print
load_fiche_titre($langs->trans(
'NewSupplierInvoice'),
'',
'supplier_invoice');
2137 $currency_code =
$conf->currency;
2143 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
2144 $currency_code = $societe->multicurrency_code;
2148 if (!empty($origin) && !empty($originid)) {
2150 $element = $subelement = $origin;
2152 if ($element ==
'project') {
2153 $projectid = $originid;
2154 $element =
'projet';
2158 if ($element ==
'order') {
2159 $element = $subelement =
'commande';
2161 if ($element ==
'propal') {
2162 $element =
'comm/propal';
2163 $subelement =
'propal';
2165 if ($element ==
'contract') {
2166 $element = $subelement =
'contrat';
2168 if ($element ==
'order_supplier') {
2170 $subelement =
'fournisseur.commande';
2174 $classname = ucfirst($subelement);
2175 if ($classname ==
'Fournisseur.commande') {
2176 $classname =
'CommandeFournisseur';
2178 $objectsrc =
new $classname($db);
2179 '@phan-var-force Project|Commande|Propal|Facture|Contrat|CommandeFournisseur|CommonObject $objectsrc';
2180 $objectsrc->fetch($originid);
2181 $objectsrc->fetch_thirdparty();
2183 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
2185 $soc = $objectsrc->thirdparty;
2187 $cond_reglement_id = 0;
2188 $mode_reglement_id = 0;
2192 $transport_mode_id = 0;
2195 if (!empty($objectsrc->cond_reglement_id)) {
2196 $cond_reglement_id = $objectsrc->cond_reglement_id;
2198 if (!empty($objectsrc->mode_reglement_id)) {
2199 $mode_reglement_id = $objectsrc->mode_reglement_id;
2201 if (!empty($objectsrc->fk_account)) {
2202 $fk_account = $objectsrc->fk_account;
2204 if (!empty($objectsrc->transport_mode_id)) {
2205 $transport_mode_id = $objectsrc->transport_mode_id;
2208 if (empty($cond_reglement_id)
2209 || empty($mode_reglement_id)
2210 || empty($fk_account)
2211 || empty($transport_mode_id)
2213 if ($origin ==
'reception') {
2215 if (!isset($objectsrc->supplier_order)) {
2216 $objectsrc->fetch_origin();
2219 if (!empty($objectsrc->origin_object)) {
2220 $originObject = $objectsrc->origin_object;
2221 if (empty($cond_reglement_id) && !empty($originObject->cond_reglement_id)) {
2222 $cond_reglement_id = $originObject->cond_reglement_id;
2224 if (empty($mode_reglement_id) && !empty($originObject->mode_reglement_id)) {
2225 $mode_reglement_id = $originObject->mode_reglement_id;
2227 if (empty($fk_account) && !empty($originObject->fk_account)) {
2228 $fk_account = $originObject->fk_account;
2230 if (empty($transport_mode_id) && !empty($originObject->transport_mode_id)) {
2231 $transport_mode_id = $originObject->transport_mode_id;
2238 if (empty($cond_reglement_id) && !empty($soc->cond_reglement_supplier_id)) {
2239 $cond_reglement_id = $soc->cond_reglement_supplier_id;
2241 if (empty($mode_reglement_id) && !empty($soc->mode_reglement_supplier_id)) {
2242 $mode_reglement_id = $soc->mode_reglement_supplier_id;
2244 if (empty($fk_account) && !empty($soc->fk_account)) {
2245 $fk_account = $soc->fk_account;
2247 if (empty($transport_mode_id) && !empty($soc->transport_mode_id)) {
2248 $transport_mode_id = $soc->transport_mode_id;
2253 if (isModEnabled(
"multicurrency")) {
2254 if (!empty($objectsrc->multicurrency_code)) {
2255 $currency_code = $objectsrc->multicurrency_code;
2257 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
2258 $currency_tx = $objectsrc->multicurrency_tx;
2263 $dateinvoice = ($datetmp ==
'' ? (!
getDolGlobalString(
'MAIN_AUTOFILL_DATE') ? -1 :
'') : $datetmp);
2265 $datedue = ($datetmp ==
'' ? -1 : $datetmp);
2268 $objectsrc->fetch_optionals();
2269 $object->array_options = $objectsrc->array_options;
2271 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
2272 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
2273 $vat_reverse_charge = (empty($societe) ?
'' : $societe->vat_reverse_charge);
2274 $transport_mode_id = !empty($societe->transport_mode_supplier_id) ? $societe->transport_mode_supplier_id : 0;
2275 $fk_account = !empty($societe->fk_account) ? $societe->fk_account : 0;
2277 $dateinvoice = ($datetmp ==
'' ? (
getDolGlobalInt(
'MAIN_AUTOFILL_DATE') ?
'' : -1) : $datetmp);
2279 $datedue = ($datetmp ==
'' ? -1 : $datetmp);
2281 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
2282 $currency_code = $societe->multicurrency_code;
2287 if (empty($cond_reglement_id)) {
2288 $cond_reglement_id =
GETPOST(
"cond_reglement_id");
2292 if (empty($mode_reglement_id)) {
2293 $mode_reglement_id =
GETPOST(
"mode_reglement_id");
2297 if (!
GETPOST(
'changecompany')) {
2298 if (GETPOSTISSET(
'cond_reglement_id')) {
2299 $cond_reglement_id =
GETPOSTINT(
'cond_reglement_id');
2301 if (GETPOSTISSET(
'mode_reglement_id')) {
2302 $mode_reglement_id =
GETPOSTINT(
'mode_reglement_id');
2304 if (GETPOSTISSET(
'cond_reglement_id')) {
2309 $note_public =
$object->getDefaultCreateValueFor(
'note_public', ((!empty($origin) && !empty($originid) && is_object($objectsrc) &&
getDolGlobalString(
'FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM')) ? $objectsrc->note_public : null));
2310 $note_private =
$object->getDefaultCreateValueFor(
'note_private', ((!empty($origin) && !empty($originid) && is_object($objectsrc) &&
getDolGlobalString(
'FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM')) ? $objectsrc->note_private : null));
2312 if ($origin ==
'contrat') {
2313 $langs->load(
"admin");
2314 $text = $langs->trans(
"ToCreateARecurringInvoice");
2315 $text .=
' '.$langs->trans(
"ToCreateARecurringInvoiceGene", $langs->transnoentitiesnoconv(
"MenuFinancial"), $langs->transnoentitiesnoconv(
"SupplierBills"), $langs->transnoentitiesnoconv(
"ListOfTemplates"));
2317 $text .=
' '.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name'));
2319 print
info_admin($text, 0, 0,
'0',
'opacitymedium').
'<br>';
2322 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2323 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2324 print
'<input type="hidden" name="action" value="add">';
2325 print
'<input type="hidden" name="changecompany" value="0">';
2327 if (!empty($societe->id) && $societe->id > 0) {
2328 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">'.
"\n";
2330 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
2331 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
2332 if (!empty($currency_tx)) {
2333 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
2335 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2340 $parameters = array();
2342 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierInvoice', $parameters,
$object, $action);
2343 if (empty($reshook)) {
2344 print
'<table class="border centpercent">';
2347 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
2351 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2352 $invoice_predefined->fetch($fac_recid);
2356 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
2359 if (!empty($societe->id) && $societe->id > 0 && ($fac_recid <= 0 || !empty($invoice_predefined->frequency))) {
2360 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
2361 print $societe->getNomUrl(1,
'supplier');
2362 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
2364 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
2365 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(empty($societe->id) ? 0 : $societe->id,
'socid', $filter,
'SelectThirdParty', 1, 0, array(), 0,
'minwidth175 widthcentpercentminusxx maxwidth500');
2368 print
'<script type="text/javascript">
2369 $(document).ready(function() {
2370 $("#socid").change(function() {
2371 console.log("We have changed the company - Reload page");
2373 $("input[name=action]").val("create");
2374 $("input[name=changecompany]").val("1");
2375 $("form[name=add]").submit();
2380 if ($fac_recid <= 0) {
2381 print
' <a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&client=0&fournisseur=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
2387 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2388 $invoice_predefined->fetch($fac_recid);
2390 $dateinvoice = $invoice_predefined->date_when;
2391 if (empty($projectid)) {
2392 $projectid = $invoice_predefined->fk_project;
2394 $cond_reglement_id = $invoice_predefined->cond_reglement_id;
2395 $mode_reglement_id = $invoice_predefined->mode_reglement_id;
2396 $fk_account = $invoice_predefined->fk_account;
2397 $note_public = $invoice_predefined->note_public;
2398 $note_private = $invoice_predefined->note_private;
2400 if (!empty($invoice_predefined->multicurrency_code)) {
2401 $currency_code = $invoice_predefined->multicurrency_code;
2403 if (!empty($invoice_predefined->multicurrency_tx)) {
2404 $currency_tx = $invoice_predefined->multicurrency_tx;
2407 $sql =
'SELECT r.rowid, r.titre as title, r.total_ttc';
2408 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as r';
2409 $sql .=
' WHERE r.fk_soc = '. (int) $invoice_predefined->socid;
2411 $resql = $db->query($sql);
2413 $num = $db->num_rows($resql);
2417 print
'<tr><td>'.$langs->trans(
'CreateFromRepeatableInvoice').
'</td><td>';
2419 print
'<select class="flat" id="fac_rec" name="fac_rec">';
2420 print
'<option value="0" selected></option>';
2422 $objp = $db->fetch_object($resql);
2423 print
'<option value="'.$objp->rowid.
'"';
2424 if ($fac_recid == $objp->rowid) {
2426 $exampletemplateinvoice->fetch($fac_recid);
2428 print
'>'.$objp->title.
' ('.
price($objp->total_ttc).
' '.$langs->trans(
"TTC").
')</option>';
2434 print
'<script type="text/javascript">
2435 $(document).ready(function() {
2436 $("#fac_rec").change(function() {
2437 console.log("We have changed the template invoice - Reload page");
2439 $("input[name=action]").val("create");
2440 $("form[name=add]").submit();
2454 print
'<tr><td class="fieldrequired">'.$langs->trans(
'RefSupplierBill').
'</td><td><input name="ref_supplier" value="'.(GETPOSTISSET(
'ref_supplier') ?
GETPOST(
'ref_supplier') : (!empty($objectsrc->ref_supplier) ? $objectsrc->ref_supplier :
'')).
'" type="text"';
2455 if (!empty($societe->id) && $societe->id > 0) {
2461 print
'<tr><td class="tdtop fieldrequired">'.$langs->trans(
'Type').
'</td><td>';
2463 print
'<div class="tagtable">'.
"\n";
2466 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2467 $tmp =
'<input type="radio" id="radio_standard" name="type" value="0"'.(GETPOSTINT(
'type') ?
'' :
'checked').
'> ';
2468 $desc = $form->textwithpicto($tmp.
'<label for="radio_standard">'.$langs->trans(
"InvoiceStandardAsk").
'</label>', $langs->transnoentities(
"InvoiceStandardDesc"), 1,
'help',
'', 0, 3);
2470 print
'</div></div>';
2472 if (empty($origin) || ($origin ==
'order_supplier' && !empty($originid))) {
2475 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2476 $tmp =
'<input type="radio" id="radio_deposit" name="type" value="3"' . (
GETPOSTINT(
'type') == 3 ?
' checked' :
'') .
'> ';
2477 print
'<script type="text/javascript">
2478 jQuery(document).ready(function() {
2479 jQuery("#typestandardinvoice, #valuestandardinvoice").click(function() {
2480 jQuery("#radio_standard").prop("checked", true);
2482 jQuery("#typedeposit, #valuedeposit").click(function() {
2483 jQuery("#radio_deposit").prop("checked", true);
2485 jQuery("#typedeposit").change(function() {
2486 console.log("We change type of down payment");
2487 jQuery("#radio_deposit").prop("checked", true);
2488 setRadioForTypeOfInvoice();
2490 jQuery("#radio_standard, #radio_deposit, #radio_replacement, #radio_template").change(function() {
2491 setRadioForTypeOfInvoice();
2493 function setRadioForTypeOfInvoice() {
2494 console.log("Change radio");
2495 if (jQuery("#radio_deposit").prop("checked") && (jQuery("#typedeposit").val() == \'amount\' || jQuery("#typedeposit").val() == \'variable\')) {
2496 jQuery(".checkforselect").prop("disabled", true);
2497 jQuery(".checkforselect").prop("checked", false);
2499 jQuery(".checkforselect").prop("disabled", false);
2500 jQuery(".checkforselect").prop("checked", true);
2506 $tmp = $tmp.
'<label for="radio_deposit" >'.$langs->trans(
"InvoiceDeposit").
'</label>';
2508 $desc = $form->textwithpicto($tmp, $langs->transnoentities(
"InvoiceDepositDesc"), 1,
'help',
'', 0, 3);
2509 print
'<table class="nobordernopadding"><tr>';
2513 if ($origin ==
'order_supplier') {
2514 print
'<td class="nowrap" style="padding-left: 15px">';
2516 'amount' => $langs->transnoentitiesnoconv(
'FixAmount', $langs->transnoentitiesnoconv(
'Deposit')),
2517 'variable' => $langs->transnoentitiesnoconv(
'VarAmountOneLine', $langs->transnoentitiesnoconv(
'Deposit')),
2518 'variablealllines' => $langs->transnoentitiesnoconv(
'VarAmountAllLines')
2520 print $form->selectarray(
'typedeposit', $arraylist,
GETPOST(
'typedeposit',
'aZ09'), 0, 0, 0,
'', 1);
2522 print
'<td class="nowrap" style="padding-left: 5px">';
2523 print
'<span class="opacitymedium paddingleft">'.$langs->trans(
"AmountOrPercent").
'</span><input type="text" id="valuedeposit" name="valuedeposit" class="width75 right" value="' .
GETPOSTINT(
'valuedeposit') .
'"/>';
2526 print
'</tr></table>';
2528 print
'</div></div>';
2597 if (empty($origin)) {
2598 if (!empty($societe->id) && $societe->id > 0) {
2602 $facids = $facturestatic->list_qualified_avoir_supplier_invoices($societe->id);
2609 foreach ($facids as $key => $valarray) {
2610 $newinvoice_static->id = $key;
2611 $newinvoice_static->ref = $valarray [
'ref'];
2612 $newinvoice_static->status = $valarray [
'status'];
2613 $newinvoice_static->statut = $valarray [
'status'];
2614 $newinvoice_static->type = $valarray [
'type'];
2615 $newinvoice_static->paid = $valarray [
'paye'];
2616 $newinvoice_static->paye = $valarray [
'paye'];
2618 $optionsav .=
'<option value="'.$key.
'"';
2620 $optionsav .=
' selected';
2623 $optionsav .= $newinvoice_static->ref;
2624 $optionsav .=
' ('.$newinvoice_static->getLibStatut(1, $valarray [
'paymentornot']).
')';
2625 $optionsav .=
'</option>';
2628 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2629 $tmp =
'<input type="radio" id="radio_creditnote" name="type" value="2"'.(GETPOST(
'type') == 2 ?
' checked' :
'');
2631 $tmp .=
' disabled';
2635 print
'<script type="text/javascript">
2636 jQuery(document).ready(function() {
2637 if (! jQuery("#radio_creditnote").is(":checked"))
2639 jQuery("#credit_note_options").hide();
2641 jQuery("#radio_creditnote").click(function() {
2642 jQuery("#credit_note_options").show();
2644 jQuery("#radio_standard, #radio_replacement, #radio_deposit").click(function() {
2645 jQuery("#credit_note_options").hide();
2649 $text = $tmp.
'<label for="radio_creditnote">'.$langs->transnoentities(
"InvoiceAvoirAsk").
'</label> ';
2651 $text .=
'<select class="flat valignmiddle" name="fac_avoir" id="fac_avoir"';
2653 $text .=
' disabled';
2657 $text .=
'<option value="-1"></option>';
2658 $text .= $optionsav;
2660 $text .=
'<option value="-1">'.$langs->trans(
"NoInvoiceToCorrect").
'</option>';
2662 $text .=
'</select>';
2663 $desc = $form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2666 print
'<div id="credit_note_options" class="clearboth">';
2667 print
' <input type="checkbox" name="invoiceAvoirWithLines" id="invoiceAvoirWithLines" value="1" onclick="if($(this).is(\':checked\') ) { $(\'#radio_creditnote\').prop(\'checked\', true); $(\'#invoiceAvoirWithPaymentRestAmount\').removeAttr(\'checked\'); }" '.(GETPOSTINT(
'invoiceAvoirWithLines') > 0 ?
'checked' :
'').
' /> ';
2668 print
'<label for="invoiceAvoirWithLines">'.$langs->trans(
'invoiceAvoirWithLines').
"</label>";
2669 print
'<br> <input type="checkbox" name="invoiceAvoirWithPaymentRestAmount" id="invoiceAvoirWithPaymentRestAmount" value="1" onclick="if($(this).is(\':checked\') ) { $(\'#radio_creditnote\').prop(\'checked\', true); $(\'#invoiceAvoirWithLines\').removeAttr(\'checked\'); }" '.(GETPOSTINT(
'invoiceAvoirWithPaymentRestAmount') > 0 ?
'checked' :
'').
' /> ';
2670 print
'<label for="invoiceAvoirWithPaymentRestAmount">'.$langs->trans(
'invoiceAvoirWithPaymentRestAmount').
"</label>";
2673 print
'</div></div>';
2676 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2678 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="0" disabled> ';
2680 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="2"> ';
2682 $text = $tmp.$langs->trans(
"InvoiceAvoir").
' ';
2683 $text .=
'<span class="opacitymedium">('.$langs->trans(
"YouMustCreateInvoiceFromSupplierThird").
')</span> ';
2684 $desc = $form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2686 print
'</div></div>'.
"\n";
2697 print
'<tr><td class="fieldrequired">'.$langs->trans(
'InvoiceSubtype').
'</td><td colspan="2">';
2698 print $form->getSelectInvoiceSubtype(
GETPOST(
'subtype'),
'subtype', 1, 0,
'');
2702 if (!empty($societe->id) && $societe->id > 0) {
2704 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2706 $thirdparty = $societe;
2708 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$societe->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
2709 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2715 print
'<tr><td>'.$langs->trans(
'Label').
'</td><td><input class="minwidth200" name="label" value="'.
dol_escape_htmltag(
GETPOST(
'label')).
'" type="text"></td></tr>';
2718 print
'<tr><td class="fieldrequired">'.$langs->trans(
'DateInvoice').
'</td><td>';
2719 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2720 print $form->selectDate($dateinvoice,
'', 0, 0, 0,
"add", 1, 1);
2724 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2725 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2726 print $form->getSelectConditionsPaiements($cond_reglement_id,
'cond_reglement_id', -1, 1);
2731 print
'<tr><td>'.$langs->trans(
'DateMaxPayment').
'</td><td>';
2732 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2733 print $form->selectDate($datedue,
'ech', 0, 0, 0,
"add", 1, 1);
2737 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2738 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2739 $form->select_types_paiements($mode_reglement_id,
'mode_reglement_id',
'DBIT', 0, 1, 0, 0, 1,
'maxwidth200 widthcentpercentminusx');
2743 if (isModEnabled(
"bank")) {
2744 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2746 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"').$form->select_comptes($fk_account,
'fk_account', 0,
'', 1,
'', 0,
'maxwidth200 widthcentpercentminusx', 1);
2751 if (isModEnabled(
'project')) {
2754 $langs->load(
'projects');
2755 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
2756 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $societe->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500 widthcentpercentminusxx');
2757 print
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.(!empty($soc->id) ? $soc->id : 0).
'&action=create&status=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create&socid='.(!empty($soc->id) ? $soc->id : 0).($fac_recid > 0 ?
'&fac_rec='.$fac_recid :
'')).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
2762 if (isModEnabled(
'incoterm')) {
2764 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), !empty($objectsrc->label_incoterms) ? $objectsrc->label_incoterms :
'', 1).
'</label></td>';
2765 print
'<td colspan="3" class="maxwidthonsmartphone">';
2766 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2767 print $form->select_incoterms(GETPOSTISSET(
'incoterm_id') ?
GETPOST(
'incoterm_id',
'alphanohtml') : (!empty($objectsrc->fk_incoterms) ? $objectsrc->fk_incoterms :
''), GETPOSTISSET(
'location_incoterms') ?
GETPOST(
'location_incoterms',
'alphanohtml') : (!empty($objectsrc->location_incoterms) ? $objectsrc->location_incoterms :
''));
2773 require_once DOL_DOCUMENT_ROOT .
'/core/lib/company.lib.php';
2774 print
'<tr><td>' . $langs->trans(
'VATReverseCharge') .
'</td><td>';
2776 if (GETPOSTISSET(
'vat_reverse_charge')) {
2777 $vat_reverse_charge = (
GETPOST(
'vat_reverse_charge',
'alpha') ==
'on' ||
GETPOST(
'vat_reverse_charge',
'alpha') ==
'1') ? 1 : 0;
2778 } elseif ($vat_reverse_charge == 1 || $societe->vat_reverse_charge == 1 || ($societe->country_code !=
'FR' &&
isInEEC($societe) && !empty($societe->tva_intra))) {
2779 $vat_reverse_charge = 1;
2781 $vat_reverse_charge = 0;
2784 print
'<input type="checkbox" name="vat_reverse_charge"'. (!empty($vat_reverse_charge) ?
' checked ' :
'') .
'>';
2789 if (isModEnabled(
"multicurrency")) {
2791 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0).
'</td>';
2792 print
'<td class="maxwidthonsmartphone">';
2793 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
2794 $used_currency_code = $currency_code;
2795 if (!
GETPOST(
'changecompany')) {
2796 $used_currency_code = GETPOSTISSET(
'multicurrency_code') ?
GETPOST(
'multicurrency_code',
'alpha') : $currency_code;
2798 print $form->selectMultiCurrency($used_currency_code,
'multicurrency_code');
2804 if ($fac_recid > 0) {
2805 $dateexample = $dateinvoice;
2806 if (empty($dateexample)) {
2809 $substitutionarray = array(
2810 '__TOTAL_HT__' => $langs->trans(
"AmountHT").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ht).
')',
2811 '__TOTAL_TTC__' => $langs->trans(
"AmountTTC").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ttc).
')',
2812 '__INVOICE_PREVIOUS_MONTH__' => $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m').
')',
2813 '__INVOICE_MONTH__' => $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%m').
')',
2814 '__INVOICE_NEXT_MONTH__' => $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m').
')',
2815 '__INVOICE_PREVIOUS_MONTH_TEXT__' => $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B').
')',
2816 '__INVOICE_MONTH_TEXT__' => $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%B').
')',
2817 '__INVOICE_NEXT_MONTH_TEXT__' => $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B').
')',
2818 '__INVOICE_PREVIOUS_YEAR__' => $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y').
')',
2819 '__INVOICE_YEAR__' => $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%Y').
')',
2820 '__INVOICE_NEXT_YEAR__' => $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y').
')'
2823 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
2824 foreach ($substitutionarray as $key => $val) {
2825 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
2827 $htmltext .=
'</i>';
2831 if (isModEnabled(
'intracommreport')) {
2832 $langs->loadLangs(array(
"intracommreport"));
2833 print
'<!-- If module intracomm on -->'.
"\n";
2834 print
'<tr><td>'.$langs->trans(
'IntracommReportTransportMode').
'</td><td>';
2835 $form->selectTransportMode(GETPOSTISSET(
'transport_mode_id') ?
GETPOST(
'transport_mode_id') : $transport_mode_id,
'transport_mode_id');
2839 if (empty($reshook)) {
2840 print
$object->showOptionals($extrafields,
'create');
2844 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
2846 $doleditor =
new DolEditor(
'note_public', (GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') : $note_public),
'', 80,
'dolibarr_notes',
'In', false, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
2847 print $doleditor->Create(1);
2853 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
2855 $doleditor =
new DolEditor(
'note_private', (GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') : $note_private),
'', 80,
'dolibarr_notes',
'In', false, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
2856 print $doleditor->Create(1);
2862 if (!empty($objectsrc) && is_object($objectsrc)) {
2863 print
"\n<!-- ".$classname.
" info -->";
2865 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2866 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2867 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2868 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2869 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2871 $txt = $langs->trans($classname);
2872 if ($classname ==
'CommandeFournisseur') {
2873 $langs->load(
'orders');
2874 $txt = $langs->trans(
"SupplierOrder");
2876 print
'<tr><td>'.$txt.
'</td><td>'.$objectsrc->getNomUrl(1);
2878 $objectsrc->fetchObjectLinked($originid, $origin,
null,
'invoice_supplier');
2880 $invoice_supplier = $objectsrc->linkedObjects[
'invoice_supplier'];
2881 '@phan-var-force null|FactureFournisseur[] $invoice_supplier';
2884 if (is_array($invoice_supplier)) {
2885 $cntinvoice = count($invoice_supplier);
2887 if ($cntinvoice >= 1) {
2889 echo
' ('.$langs->trans(
'LatestRelatedBill').end($invoice_supplier)->getNomUrl(1).
')';
2894 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2895 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2896 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2897 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2900 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2901 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2903 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2905 if (isModEnabled(
"multicurrency")) {
2906 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
2907 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
2908 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
2913 $parameters = array();
2914 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
2915 print $hookmanager->resPrint;
2923 print $form->buttonsSaveCancel(
"CreateDraft");
2926 if (!empty($objectsrc) && is_object($objectsrc)) {
2929 $title = $langs->trans(
'ProductsAndServices');
2932 print
'<div class="div-table-responsive-no-min">';
2933 print
'<table class="noborder centpercent">';
2935 $objectsrc->printOriginLinesList(
'', $selectedLines);
2943 if ($id > 0 || !empty($ref)) {
2949 $productstatic =
new Product($db);
2951 $result =
$object->fetch($id, $ref);
2953 $langs->load(
"errors");
2954 print $langs->trans(
"ErrorRecordNotFound");
2960 $result =
$object->fetch_thirdparty();
2966 $societe =
$object->thirdparty;
2968 $totalpaid =
$object->getSommePaiement();
2969 $totalcreditnotes =
$object->getSumCreditNotesUsed();
2970 $totaldeposits =
$object->getSumDepositsUsed();
2978 $resteapayer =
price2num(
$object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
2981 $multicurrency_resteapayer = 0;
2982 if (isModEnabled(
"multicurrency")) {
2983 $multicurrency_totalpaid =
$object->getSommePaiement(1);
2984 $multicurrency_totalcreditnotes =
$object->getSumCreditNotesUsed(1);
2985 $multicurrency_totaldeposits =
$object->getSumDepositsUsed(1);
2986 $multicurrency_resteapayer =
price2num(
$object->multicurrency_total_ttc - $multicurrency_totalpaid - $multicurrency_totalcreditnotes - $multicurrency_totaldeposits,
'MT');
2990 if ($resteapayer == 0 && $multicurrency_resteapayer != 0 &&
$object->multicurrency_code !=
$conf->currency) {
2991 $resteapayer =
price2num((
float) $multicurrency_resteapayer /
$object->multicurrency_tx,
'MT');
2998 $resteapayeraffiche = $resteapayer;
3001 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
3002 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
3004 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
3005 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
3008 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
3009 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
3010 $absolute_discount =
price2num($absolute_discount,
'MT');
3011 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
3015 $objectidnext =
$object->getIdReplacingInvoice();
3018 $titre = $langs->trans(
'SupplierInvoice');
3020 print
dol_get_fiche_head($head,
'card', $titre, -1,
'supplier_invoice', 0,
'',
'', 0,
'', 1);
3025 if ($action ==
'converttoreduc') {
3028 $type_fac =
'ExcessPaid';
3030 $type_fac =
'CreditNote';
3032 $type_fac =
'Deposit';
3034 $text = $langs->trans(
'ConfirmConvertToReducSupplier', strtolower($langs->transnoentities($type_fac)));
3035 $text .=
'<br>'.$langs->trans(
'ConfirmConvertToReducSupplier2');
3036 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id, $langs->trans(
'ConvertToReduc'), $text,
'confirm_converttoreduc',
'',
"yes", 2);
3040 if ($action ==
'clone') {
3042 $formquestion = array(
3043 array(
'type' =>
'text',
'name' =>
'newsupplierref',
'label' => $langs->trans(
"RefSupplierBill"),
'value' => $langs->trans(
"CopyOf").
' '.
$object->ref_supplier),
3044 array(
'type' =>
'date',
'name' =>
'newdate',
'label' => $langs->trans(
"Date"),
'value' =>
dol_now())
3047 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneInvoice',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1, 250);
3051 if ($action ==
'valid') {
3053 if (preg_match(
'/^[\(]?PROV/i',
$object->ref) || empty(
$object->ref)) {
3055 $numref =
$object->getNextNumRef($societe);
3064 $text = $langs->trans(
'ConfirmValidateBill', $numref);
3072 $formquestion = array();
3074 $qualified_for_stock_change = 0;
3076 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3078 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3081 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3082 $langs->load(
"stocks");
3083 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3086 $warehouse_array = $warehouse->list_array();
3087 if (count($warehouse_array) == 1) {
3089 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3092 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3094 $formquestion = array(
3095 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
3099 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateBill'), $text,
'confirm_valid', $formquestion, 1, 1);
3104 if ($action ==
'edit') {
3105 $formquestion = array();
3107 $qualified_for_stock_change = 0;
3109 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3111 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3113 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3114 $langs->load(
"stocks");
3115 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3118 $warehouse_array = $warehouse->list_array();
3119 if (count($warehouse_array) == 1) {
3121 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3124 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3126 $formquestion = array(
3127 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
3130 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnvalidateBill'), $langs->trans(
'ConfirmUnvalidateBill',
$object->ref),
'confirm_edit', $formquestion, 1, 1);
3134 if ($action ==
'paid' && ($resteapayer <= 0 || (
getDolGlobalString(
'SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID') && $resteapayer ==
$object->total_ttc))) {
3135 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidBill',
$object->ref),
'confirm_paid',
'', 0, 1);
3138 if ($action ==
'paid' && $resteapayer > 0 && (!
getDolGlobalString(
'SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID') || $resteapayer !=
$object->total_ttc)) {
3142 $close[$i][
'code'] =
'discount_vat';
3144 $close[$i][
'code'] =
'badsupplier';
3146 $close[$i][
'code'] =
'other';
3150 $close[$i][
'label'] = $langs->trans(
"HelpEscompte").
'<br><br>'.$langs->trans(
"ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");
3152 $close[$i][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
3154 $close[$i][
'label'] = $langs->trans(
"Other");
3158 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonDiscount", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
3160 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadCustomer", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
3162 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"Other"), $close[$i][
'label'], 1);
3165 $arrayreasons = array();
3166 foreach ($close as $key => $val) {
3167 $arrayreasons[$close[$key][
'code']] = $close[$key][
'reason'];
3171 $formquestion = array(
'text' => $langs->trans(
"ConfirmClassifyPaidPartiallyQuestion"), 0 => array(
'type' =>
'radio',
'name' =>
'close_code',
'label' => $langs->trans(
"Reason"),
'values' => $arrayreasons), 1 => array(
'type' =>
'text',
'name' =>
'close_note',
'label' => $langs->trans(
"Comment"),
'value' =>
'',
'morecss' =>
'minwidth300'));
3173 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?facid='.
$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidPartially',
$object->ref),
'confirm_paid_partially', $formquestion,
"yes", 1, 310);
3177 if ($action ==
'canceled') {
3179 $close[1][
'code'] =
'badsupplier';
3180 $close[2][
'code'] =
'abandon';
3182 $close[1][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
3183 $close[2][
'label'] = $langs->trans(
"ConfirmClassifyAbandonReasonOtherDesc");
3185 $close[1][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadSupplier",
$object->ref), $close[1][
'label'], 1);
3186 $close[2][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyAbandonReasonOther"), $close[2][
'label'], 1);
3188 $arrayreasons[$close[1][
'code']] = $close[1][
'reason'];
3189 $arrayreasons[$close[2][
'code']] = $close[2][
'reason'];
3192 $formquestion = array(
'text' => $langs->trans(
"ConfirmCancelBillQuestion"), 0 => array(
'type' =>
'radio',
'name' =>
'close_code',
'label' => $langs->trans(
"Reason"),
'values' => $arrayreasons), 1 => array(
'type' =>
'text',
'name' =>
'close_note',
'label' => $langs->trans(
"Comment"),
'value' =>
'',
'morecss' =>
'minwidth300'));
3194 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'CancelBill'), $langs->trans(
'ConfirmCancelBill',
$object->ref),
'confirm_canceled', $formquestion,
"yes", 1, 280);
3198 if ($action ==
'delete') {
3199 $formquestion = array();
3201 $qualified_for_stock_change = 0;
3203 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3205 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3208 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3209 $langs->load(
"stocks");
3210 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3213 $warehouse_array = $warehouse->list_array();
3215 $selectwarehouse =
'<span class="questionrevertstock hidden">';
3216 if (count($warehouse_array) == 1) {
3218 $selectwarehouse .=
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3221 $selectwarehouse .= $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3223 $selectwarehouse .=
'</span>';
3225 $selectyesno = array(0 => $langs->trans(
'No'), 1 => $langs->trans(
'Yes'));
3227 print
'<script type="text/javascript">
3228 $(document).ready(function() {
3229 $("#revertstock").change(function() {
3230 if(this.value > 0) {
3231 $(".questionrevertstock").removeClass("hidden");
3233 $(".questionrevertstock").addClass("hidden");
3239 $formquestion = array(
3240 array(
'type' =>
'select',
'name' =>
'revertstock',
'label' => $langs->trans(
"RevertProductsToStock"),
'select_show_empty' => 0,
'values' => $selectyesno),
3241 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $selectwarehouse,
'tdclass' =>
'questionrevertstock hidden')
3245 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteBill'), $langs->trans(
'ConfirmDeleteBill'),
'confirm_delete', $formquestion, 1, 1);
3247 if ($action ==
'deletepayment') {
3248 $payment_id =
GETPOST(
'paiement_id');
3249 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&paiement_id='.$payment_id, $langs->trans(
'DeletePayment'), $langs->trans(
'ConfirmDeletePayment'),
'confirm_delete_paiement',
'', 0, 1);
3253 if ($action ==
'ask_deleteline') {
3254 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
3257 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
3258 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
3259 if (empty($reshook)) {
3260 $formconfirm .= $hookmanager->resPrint;
3261 } elseif ($reshook > 0) {
3262 $formconfirm = $hookmanager->resPrint;
3270 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
3272 $morehtmlref =
'<div class="refidno">';
3274 $morehtmlref .= $form->editfieldkey(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'', 0, 1);
3275 $morehtmlref .= $form->editfieldval(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'',
null,
null,
'', 1);
3277 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1,
'supplier');
3279 $morehtmlref .=
' <div class="inline-block valignmiddle">(<a class="valignmiddle" href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?socid='.((int)
$object->thirdparty->id).
'&search_company='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherBills").
'</a>)</div>';
3282 if (isModEnabled(
'project')) {
3283 $langs->load(
"projects");
3284 $morehtmlref .=
'<br>';
3285 if ($permissiontoadd) {
3286 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
3287 if ($action !=
'classify') {
3288 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.((int)
$object->id).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
3290 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ?
$object->socid : -1),
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
3292 if (!empty(
$object->fk_project)) {
3294 $proj->fetch(
$object->fk_project);
3295 $morehtmlref .= $proj->getNomUrl(1);
3297 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
3302 $morehtmlref .=
'</div>';
3304 $object->totalpaid = $totalpaid;
3306 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
3309 $parameters = array();
3311 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierInvoice', $parameters,
$object, $action);
3312 if (empty($reshook)) {
3313 print
'<div class="fichecenter">';
3314 print
'<div class="fichehalfleft">';
3315 print
'<div class="underbanner clearboth"></div>';
3317 print
'<table class="border tableforfield centpercent">';
3320 print
'<tr><td class="titlefield">'.$langs->trans(
'Type').
'</td><td>';
3321 print
'<span class="badgeneutral">';
3325 print
' '.$object->getSubtypeLabel(
'facture_fourn');
3329 $facreplaced->fetch(
$object->fk_facture_source);
3330 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"ReplaceInvoice", $facreplaced->getNomUrl(1)).
'</span>';
3333 if (
$object->fk_facture_source > 0) {
3335 $facusing->fetch(
$object->fk_facture_source);
3336 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"CorrectInvoice", $facusing->getNomUrl(1)).
'</span>';
3338 $langs->load(
"errors");
3339 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"WarningCorrectedInvoiceNotFound").
'</span>';
3343 $facidavoir =
$object->getListIdAvoirFromInvoice();
3344 if (count($facidavoir) > 0) {
3345 $invoicecredits = array();
3346 foreach ($facidavoir as $id) {
3348 $facavoir->fetch($id);
3349 $invoicecredits[] = $facavoir->getNomUrl(1);
3351 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"InvoiceHasAvoir") . (count($invoicecredits) ?
' ' :
'') . implode(
',', $invoicecredits);
3354 if (isset($objectidnext) && $objectidnext > 0) {
3357 $facthatreplace->fetch($objectidnext);
3358 print
' <span class="opacitymediumbycolor paddingleft">'.str_replace(
'{s1}', $facthatreplace->getNomUrl(1), $langs->transnoentities(
"ReplacedByInvoice",
'{s1}')).
'</span>';
3362 $result = $discount->fetch(0, 0,
$object->id);
3364 print
' <span class="opacitymediumbycolor paddingleft">';
3365 $s = $langs->trans(
"CreditNoteConvertedIntoDiscount",
'{s1}',
'{s2}');
3366 $s = str_replace(
'{s1}',
$object->getLibType(1), $s);
3367 $s = str_replace(
'{s2}', $discount->getNomUrl(1,
'discount'), $s);
3369 print
'</span><br>';
3373 if (
$object->fk_fac_rec_source > 0) {
3375 $result = $tmptemplate->fetch(
$object->fk_fac_rec_source);
3377 print
' <span class="opacitymediumbycolor paddingleft">';
3378 $link =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$tmptemplate->id.
'">'.
dol_escape_htmltag($tmptemplate->title).
'</a>';
3379 $s = $langs->transnoentities(
"GeneratedFromSupplierTemplate", $link);
3389 print
'<!-- Discounts -->'.
"\n";
3390 print
'<tr><td>'.$langs->trans(
'DiscountStillRemaining');
3393 $thirdparty = $societe;
3395 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
3401 print
'<td>'.$form->editfieldkey(
"Label",
'label',
$object->label,
$object, $usercancreate).
'</td>';
3402 print
'<td>'.$form->editfieldval(
"Label",
'label',
$object->label,
$object, $usercancreate).
'</td>';
3410 print $form->editfieldkey(
"DateInvoice",
'datef',
$object->date,
$object, $form_permission,
'datepicker');
3411 print
'</td><td colspan="3">';
3412 print $form->editfieldval(
"Date",
'datef',
$object->date,
$object, $form_permission,
'datepicker');
3416 $langs->load(
'bills');
3417 print
'<tr><td class="nowrap">';
3418 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3419 print $langs->trans(
'PaymentConditions');
3421 if ($action !=
'editconditions' && $form_permission) {
3422 print
'<td class="right"><a class="editfielda reposition" href="'.$_SERVER[
"PHP_SELF"].
'?action=editconditions&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetConditions'), 1).
'</a></td>';
3424 print
'</tr></table>';
3426 if ($action ==
'editconditions') {
3427 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
3429 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none');
3436 print $form->editfieldkey(
"DateMaxPayment",
'date_lim_reglement',
$object->date_echeance,
$object, $form_permission,
'datepicker');
3438 print $form->editfieldval(
"DateMaxPayment",
'date_lim_reglement',
$object->date_echeance,
$object, $form_permission,
'datepicker');
3439 if ($action !=
'editdate_lim_reglement' &&
$object->hasDelay()) {
3445 $langs->load(
'bills');
3446 print
'<tr><td class="nowrap">';
3447 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3448 print $langs->trans(
'PaymentMode');
3450 if ($action !=
'editmode' && $form_permission) {
3451 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmode&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetMode'), 1).
'</a></td>';
3453 print
'</tr></table>';
3455 if ($action ==
'editmode') {
3456 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
3458 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
3463 if (isModEnabled(
"bank")) {
3464 print
'<tr><td class="nowrap">';
3465 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3466 print $langs->trans(
'BankAccount');
3468 if ($action !=
'editbankaccount' && $usercancreate) {
3469 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>';
3471 print
'</tr></table>';
3473 if ($action ==
'editbankaccount') {
3474 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
3476 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
3484 print
'<tr><td class="nowrap">';
3485 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3486 print $langs->trans(
'VATReverseCharge');
3488 if ($action !=
'editvatreversecharge' && $usercancreate) {
3489 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editvatreversecharge&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetVATReverseCharge'), 1).
'</a></td>';
3491 print
'</tr></table>';
3493 if ($action ==
'editvatreversecharge') {
3494 print
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
3495 print
'<input type="hidden" name="action" value="setvatreversecharge">';
3496 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3498 print
'<input type="checkbox" name="vat_reverse_charge"' . (
$object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
'>';
3500 print
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
3503 print
'<input type="checkbox" name="vat_reverse_charge"'. (
$object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
' disabled>';
3509 if (isModEnabled(
'incoterm')) {
3511 print
'<table width="100%" class="nobordernopadding"><tr><td>';
3512 print $langs->trans(
'IncotermLabel');
3513 print
'<td><td class="right">';
3514 if ($usercancreate) {
3515 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?facid='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
3519 print
'</td></tr></table>';
3522 if ($action !=
'editincoterm') {
3523 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
3525 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
3531 if (isModEnabled(
'intracommreport')) {
3532 $langs->loadLangs(array(
"intracommreport"));
3533 print
'<!-- If module intracomm on -->'.
"\n";
3535 print
'<table class="nobordernopadding centpercent"><tr><td>';
3536 print $langs->trans(
'IntracommReportTransportMode');
3538 if ($action !=
'edittransportmode' && ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"))) {
3539 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edittransportmode&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit().
'</a></td>';
3541 print
'</tr></table>';
3544 if ($action ==
'edittransportmode') {
3545 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->transport_mode_id,
'transport_mode_id', 1, 1);
3547 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->transport_mode_id,
'none');
3554 if (
$object->status != $object::STATUS_DRAFT) {
3558 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
3563 print
'<div class="fichehalfright">';
3564 print
'<div class="underbanner clearboth"></div>';
3566 print
'<table class="border tableforfield centpercent">';
3568 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
3571 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
3572 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3573 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
3574 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3579 print
'<td>' . $langs->trans(
'AmountVAT') .
'</td>';
3580 print
'<td class="nowrap amountcard right">';
3581 if (
GETPOST(
'calculationrule')) {
3582 $calculationrule =
GETPOST(
'calculationrule',
'alpha');
3584 $calculationrule = (!
getDolGlobalString(
'MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND') ?
'totalofround' :
'roundoftotal');
3586 if ($calculationrule ==
'totalofround') {
3587 $calculationrulenum = 1;
3589 $calculationrulenum = 2;
3592 if (
$object->getVentilExportCompta() == 0) {
3593 $s =
'<span class="hideonsmartphone opacitymedium">' . $langs->trans(
"ReCalculate") .
' </span>';
3594 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=calculate&token='.newToken().
'&calculationrule=totalofround">' . $langs->trans(
"Mode1") .
'</a>';
3596 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=calculate&token='.newToken().
'&calculationrule=roundoftotal">' . $langs->trans(
"Mode2") .
'</a>';
3597 print
'<div class="inline-block">';
3598 print $form->textwithtooltip($s, $langs->trans(
"CalculationRuleDesc", $calculationrulenum) .
'<br>' . $langs->trans(
"CalculationRuleDescSupplier"), 2, 1,
img_picto(
'',
'help'),
'', 3,
'', 0,
'recalculate');
3599 print
' ';
3602 print
'<span class="nowraponall">'.price(
$object->total_tva, 1, $langs, 0, -1, -1,
$conf->currency).
'</span>';
3604 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
3605 print
'<td class="nowraponall amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3609 if ($societe->localtax1_assuj ==
"1") {
3611 print
'<td>' . $langs->transcountry(
"AmountLT1", $societe->country_code) .
'</td>';
3612 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 1, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3615 if ($societe->localtax2_assuj ==
"1") {
3617 print
'<td>' . $langs->transcountry(
"AmountLT2", $societe->country_code) .
'</td>';
3618 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 1, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3623 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
3624 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3625 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
3626 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3644 if (isModEnabled(
'project')) {
3647 if (isModEnabled(
"bank")) {
3651 if (isModEnabled(
'incoterm')) {
3654 if (isModEnabled(
"multicurrency")) {
3659 if ($societe->localtax1_assuj ==
"1") {
3662 if ($societe->localtax2_assuj ==
"1") {
3666 $sql =
'SELECT p.datep as dp, p.ref, p.num_paiement as num_payment, p.rowid, p.fk_bank,';
3667 $sql .=
' c.id as payment_type, c.code as payment_code,';
3668 $sql .=
' pf.amount,';
3669 $sql .=
' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.fk_accountancy_journal';
3670 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn as p';
3671 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank as b ON p.fk_bank = b.rowid';
3672 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank_account as ba ON b.fk_account = ba.rowid';
3673 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id';
3674 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf ON pf.fk_paiementfourn = p.rowid';
3675 $sql .=
' WHERE pf.fk_facturefourn = '.((int)
$object->id);
3676 $sql .=
' ORDER BY p.datep, p.tms';
3678 $result = $db->query($sql);
3680 $num = $db->num_rows($result);
3683 print
'<div class="div-table-responsive-no-min">';
3684 print
'<table class="noborder paymenttable centpercent">';
3685 print
'<tr class="liste_titre">';
3687 print
'<td><span class="hideonsmartphone">'.$langs->trans(
'Date').
'</span></td>';
3688 print
'<td><span class="hideonsmartphone">'.$langs->trans(
'Type').
'</span></td>';
3689 if (isModEnabled(
"bank")) {
3690 print
'<td class="right">'.$langs->trans(
'BankAccount').
'</td>';
3692 print
'<td class="right">'.$langs->trans(
'Amount').
'</td>';
3693 print
'<td width="18"> </td>';
3698 $objp = $db->fetch_object($result);
3700 $paymentstatic->id = $objp->rowid;
3701 $paymentstatic->datepaye = $db->jdate($objp->dp);
3702 $paymentstatic->ref = ($objp->ref ? $objp->ref : $objp->rowid);
3703 $paymentstatic->num_payment = $objp->num_payment;
3705 $paymentstatic->paiementcode = $objp->payment_code;
3706 $paymentstatic->type_code = $objp->payment_code;
3707 $paymentstatic->type_label = $objp->payment_type;
3709 print
'<tr class="oddeven">';
3710 print
'<td class="nowraponall">';
3711 print $paymentstatic->getNomUrl(1);
3713 print
'<td>'.dol_print_date($db->jdate($objp->dp),
'day').
'</td>';
3714 $s = $form->form_modes_reglement(
'', $objp->payment_type,
'none',
'', 1, 0,
'', 1).
' '.$objp->num_payment;
3715 print
'<td class="tdoverflowmax125" title="'.dol_escape_htmltag($s).
'">';
3718 if (isModEnabled(
"bank")) {
3719 $bankaccountstatic->id = $objp->baid;
3720 $bankaccountstatic->ref = $objp->baref;
3721 $bankaccountstatic->label = $objp->baref;
3722 $bankaccountstatic->number = $objp->banumber;
3724 if (isModEnabled(
'accounting')) {
3725 $bankaccountstatic->account_number = $objp->account_number;
3728 $accountingjournal->fetch($objp->fk_accountancy_journal);
3729 $bankaccountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1,
'', 1);
3732 print
'<td class="right">';
3733 if ($objp->baid > 0) {
3734 print $bankaccountstatic->getNomUrl(1,
'transactions');
3738 print
'<td class="right">'.price($sign * $objp->amount).
'</td>';
3739 print
'<td class="center">';
3741 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deletepayment&token='.
newToken().
'&paiement_id='.$objp->rowid.
'">';
3747 $totalpaid += $objp->amount;
3751 print
'<tr class="oddeven"><td colspan="'.$nbcols.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td><td></td><td></td></tr>';
3774 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3775 print
'<span class="opacitymedium">';
3777 print $langs->trans(
'AlreadyPaidNoCreditNotesNoDeposits');
3779 print $langs->trans(
'AlreadyPaid');
3782 print
'</td><td class="right"'.(($totalpaid > 0) ?
' class="amountalreadypaid"' :
'').
'>'.
price($totalpaid).
'</td><td> </td></tr>';
3785 $resteapayeraffiche = $resteapayer;
3787 $cssforamountpaymentcomplete =
'amountpaymentcomplete';
3790 $creditnoteamount = 0;
3793 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
3794 $sql .=
" re.description, re.fk_invoice_supplier_source";
3795 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
3796 $sql .=
" WHERE fk_invoice_supplier = ".((int)
$object->id);
3797 $resql = $db->query($sql);
3799 $num = $db->num_rows($resql);
3803 $obj = $db->fetch_object($resql);
3804 $invoice->fetch($obj->fk_invoice_supplier_source);
3805 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3807 print $langs->trans(
"CreditNote").
' ';
3810 print $langs->trans(
"Deposit").
' ';
3812 print $invoice->getNomUrl(0);
3814 print
'<td class="right">'.price($obj->amount_ttc).
'</td>';
3815 print
'<td class="right">';
3816 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=unlinkdiscount&discountid='.$obj->rowid.
'">';
3817 print
img_picto($langs->transnoentitiesnoconv(
"RemoveDiscount"),
'unlink');
3822 $creditnoteamount += $obj->amount_ttc;
3825 $depositamount += $obj->amount_ttc;
3834 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3835 print
'<span class="opacitymedium">';
3836 print $form->textwithpicto($langs->trans(
"Discount"), $langs->trans(
"HelpEscompte"), - 1);
3838 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3839 $resteapayeraffiche = 0;
3840 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3844 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3845 print
'<span class="opacitymedium">';
3846 print $form->textwithpicto($langs->trans(
"Abandoned"), $langs->trans(
"HelpAbandonBadCustomer"), - 1);
3848 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3850 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3854 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3855 print
'<span class="opacitymedium">';
3856 print $form->textwithpicto($langs->trans(
"ProductReturned"), $langs->trans(
"HelpAbandonProductReturned"), - 1);
3858 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3859 $resteapayeraffiche = 0;
3860 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3864 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3865 $text = $langs->trans(
"HelpAbandonOther");
3867 $text .=
'<br><br><b>'.$langs->trans(
"Reason").
'</b>:'.
$object->close_note;
3869 print
'<span class="opacitymedium">';
3871 print $form->textwithpicto($langs->trans(
"Abandoned"), $text, - 1);
3873 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3874 $resteapayeraffiche = 0;
3875 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3879 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3880 print
'<span class="opacitymedium">';
3881 print $langs->trans(
"Billed");
3883 print
'</td><td class="right">'.price(
$object->total_ttc).
'</td><td> </td></tr>';
3886 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3887 print
'<span class="opacitymedium">';
3888 print $langs->trans(
'RemainderToPay');
3889 if ($resteapayeraffiche < 0) {
3890 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3894 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($resteapayeraffiche).
'</td><td> </td></tr>';
3897 if (isModEnabled(
'multicurrency') &&
$object->multicurrency_code !=
$conf->currency ||
$object->multicurrency_tx != 1) {
3898 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3899 print
'<span class="opacitymedium">';
3900 print $langs->trans(
'RemainderToPayMulticurrency');
3901 if ($resteapayeraffiche < 0) {
3902 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3906 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price(
price2num($multicurrency_resteapayer,
'MT'), 0, $langs, 1, -1, -1,
$object->multicurrency_code).
'</td><td> </td></tr>';
3909 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3912 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3913 print $langs->trans(
'AlreadyPaidBack');
3914 print
' :</td><td class="right">'.price($sign * $totalpaid).
'</td><td> </td></tr>';
3917 print
'<tr><td colspan="'.$nbcols.
'" class="right">'.$langs->trans(
"Billed").
' :</td><td class="right">'.
price($sign *
$object->total_ttc).
'</td><td> </td></tr>';
3920 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3921 print
'<span class="opacitymedium">';
3922 print $langs->trans(
'RemainderToPayBack');
3923 if ($resteapayeraffiche > 0) {
3924 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3928 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($sign * $resteapayeraffiche).
'</td><td> </td></tr>';
3931 if (isModEnabled(
'multicurrency') &&
$object->multicurrency_code !=
$conf->currency ||
$object->multicurrency_tx != 1) {
3932 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3933 print
'<span class="opacitymedium">';
3934 print $langs->trans(
'RemainderToPayBackMulticurrency');
3935 if ($resteapayeraffiche > 0) {
3936 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3940 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.(!empty(
$object->multicurrency_code) ?
$object->multicurrency_code :
$conf->currency).
' '.
price(
price2num($sign *
$object->multicurrency_tx * $resteapayeraffiche,
'MT')).
'</td><td> </td></tr>';
3955 print
'<div class="clearboth"></div><br>';
3958 $blocname =
'contacts';
3959 $title = $langs->trans(
'ContactsAddresses');
3960 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3965 $blocname =
'notes';
3966 $title = $langs->trans(
'Notes');
3967 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3974 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="POST">';
3975 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3976 print
'<input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">';
3977 print
'<input type="hidden" name="mode" value="">';
3978 print
'<input type="hidden" name="page_y" value="">';
3979 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
3980 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
3981 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
3984 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
3987 print
'<div class="div-table-responsive-no-min">';
3988 print
'<table id="tablelines" class="noborder noshadow centpercent">';
3990 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
3993 $inputalsopricewithtax = 1;
3994 $senderissupplier = 2;
3995 if (
getDolGlobalInt(
'SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY')) {
3996 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY');
4001 $object->printObjectLines($action, $societe, $mysoc, $lineid, 1);
4008 if ($action !=
'editline') {
4011 $parameters = array();
4012 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters,
$object, $action);
4016 if (empty($reshook)) {
4017 $object->formAddObjectLine(1, $societe, $mysoc);
4030 if ($action !=
'presend') {
4033 print
'<div class="tabsAction">';
4035 $parameters = array();
4036 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
4038 if (empty($reshook)) {
4042 $ventilExportCompta =
$object->getVentilExportCompta();
4044 if ($ventilExportCompta == 0) {
4045 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=edit&token='.
newToken().
'">'.$langs->trans(
'Modify').
'</a>';
4047 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseDispatchedInBookkeeping").
'">'.$langs->trans(
'Modify').
'</span>';
4052 $result = $discount->fetch(0, 0,
$object->id);
4059 if (!$objectidnext &&
$object->close_code !=
'replaced' && $usercancreate) {
4060 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
'ReOpen').
'</a>';
4062 if ($usercancreate) {
4063 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseReplacedInvoice").
'">'.$langs->trans(
'ReOpen').
'</span>';
4065 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'ReOpen').
'</span>';
4075 if ($usercanvalidate) {
4076 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'"';
4077 print
'>'.$langs->trans(
'Validate').
'</a>';
4079 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'"';
4080 print
'>'.$langs->trans(
'Validate').
'</a>';
4086 if (empty($user->socid)) {
4089 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
4091 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'SendMail').
'</span>';
4098 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.DOL_URL_ROOT.
'/fourn/facture/paiement.php?facid='.
$object->id.
'&action=create'.(
$object->fk_account > 0 ?
'&accountid='.$object->fk_account :
'').
'">'.$langs->trans(
'DoPayment').
'</a>';
4105 if ($resteapayer == 0) {
4106 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseRemainderToPayIsZero").
'">'.$langs->trans(
'DoPaymentBack').
'</span>';
4108 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/paiement.php?facid='.
$object->id.
'&action=create&accountid='.
$object->fk_account.
'">'.$langs->trans(
'DoPaymentBack').
'</a>';
4114 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=converttoreduc&token='.
newToken().
'">'.$langs->trans(
'ConvertExcessPaidToReduc').
'</a>';
4118 && (
getDolGlobalString(
'SUPPLIER_INVOICE_ALLOW_REUSE_OF_CREDIT_WHEN_PARTIALLY_REFUNDED') ||
$object->getSommePaiement() == 0)
4120 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=converttoreduc&token='.
newToken().
'" title="'.
dol_escape_htmltag($langs->trans(
"ConfirmConvertToReducSupplier2")).
'">'.$langs->trans(
'ConvertToReduc').
'</a>';
4124 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=converttoreduc&token='.
newToken().
'">'.$langs->trans(
'ConvertToReduc').
'</a>';
4135 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=paid&token='.
newToken().
'">'.$langs->trans(
'ClassifyPaid').
'</a>';
4140 if ($totalpaid > 0 || $totalcreditnotes > 0) {
4142 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=paid&token='.
newToken().
'">'.$langs->trans(
'ClassifyPaidPartially').
'</a>';
4145 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=canceled">'.$langs->trans(
'ClassifyCanceled').
'</a>';
4157 if (!$objectidnext) {
4158 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?socid='.
$object->socid.
'&fac_avoir='.
$object->id.
'&action=create&type=2'.(
$object->fk_project > 0 ?
'&projectid='.$object->fk_project :
'').
'">'.$langs->trans(
"CreateCreditNote").
'</a>';
4163 if ($action !=
'edit' && $usercancreate) {
4164 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=clone&socid='.
$object->socid.
'&token='.
newToken().
'">'.$langs->trans(
'ToClone').
'</a>';
4169 if (!$objectidnext && count(
$object->lines) > 0) {
4170 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.
$object->id.
'&action=create">'.$langs->trans(
"ChangeIntoRepeatableInvoice").
'</a>';
4175 if ($action !=
'confirm_edit' && $usercandelete) {
4176 $isErasable =
$object->is_erasable();
4178 $enableDelete =
false;
4180 $params = (empty(
$conf->use_javascript_ajax) ? array() : array(
'attr' => array(
'class' =>
'reposition')));
4182 if ($isErasable == -4) {
4183 $htmltooltip = $langs->trans(
"DisabledBecausePayments");
4184 } elseif ($isErasable == -3) {
4185 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastSituationInvoice");
4186 } elseif ($isErasable == -2) {
4187 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastInvoice");
4188 } elseif ($isErasable == -1) {
4189 $htmltooltip = $langs->trans(
"DisabledBecauseDispatchedInBookkeeping");
4190 } elseif ($isErasable <= 0) {
4191 $htmltooltip = $langs->trans(
"DisabledBecauseNotErasable");
4193 $enableDelete =
true;
4200 if ($action !=
'confirm_edit') {
4201 print
'<div class="fichecenter"><div class="fichehalfleft">';
4208 $filedir =
$conf->fournisseur->facture->dir_output.
'/'.$subdir;
4209 $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.
$object->id;
4210 $genallowed = $usercanread;
4211 $delallowed = $usercancreate;
4215 print $formfile->showdocuments(
'facture_fournisseur', $subdir, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, $genifempty, 0, 0, 40, 0,
'',
'',
'', $societe->default_lang);
4216 $somethingshown = $formfile->numoffiles;
4219 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'invoice_supplier'), 1);
4220 $linktoelem = $tmparray[
'linktoelem'];
4221 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
4222 print $htmltoenteralink;
4224 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
4226 print
'</div><div class="fichehalfright">';
4229 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
4231 $somethingshown = $formactions->showactions(
$object,
'invoice_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
4233 print
'</div></div>';
4239 if (
GETPOST(
'modelselected')) {
4240 $action =
'presend';
4244 $modelmail =
'invoice_supplier_send';
4245 $defaulttopic =
'SendBillRef';
4246 $diroutput =
$conf->fournisseur->facture->dir_output;
4247 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
4248 $trackid =
'sinv'.$object->id;
4250 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
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.
Class to manage bank accounts.
Class to manage accounting journals.
const TYPE_PROFORMA
Proforma invoice.
const TYPE_SITUATION
Situation invoice.
Class to manage absolute discounts.
Class to manage a WYSIWYG editor.
Class to manage warehouses.
Class to manage suppliers invoices.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
const TYPE_REPLACEMENT
Replacement invoice.
const STATUS_VALIDATED
Validated (need to be paid)
const TYPE_STANDARD
Standard invoice.
const STATUS_ABANDONED
Classified abandoned and no payment done.
const STATUS_CLOSED
Classified paid.
Class to manage invoice templates.
Class to manage payments for supplier invoices.
Class ProductCombination Used to represent the relation between a product and one of its variants.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
isInEEC($object)
Return if a country of an object is inside the EEC (European Economic Community)
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.
facturefourn_prepare_head(FactureFournisseur $object)
Prepare array with list of tabs.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
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).
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
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.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.: VAT NPR in France)
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
dol_htmloutput_events($disabledoutputofmessages=0)
Print formatted messages to output (Used to show messages on html output).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
GETPOSTFLOAT($paramname, $rounding='')
Return the value of a $_GET or $_POST supervariable, converted into float.
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...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1, $includequotes=0)
Clean a string to use it as a file name.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
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...
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.