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';
68$langs->loadLangs(array(
'bills',
'compta',
'suppliers',
'companies',
'products',
'banks',
'admin'));
69if (isModEnabled(
'incoterm')) {
70 $langs->load(
'incoterm');
75$action =
GETPOST(
'action',
'aZ09');
78$cancel =
GETPOST(
'cancel',
'alpha');
79$backtopage =
GETPOST(
'backtopage',
'alpha');
80$backtopageforcancel =
'';
84$origin =
GETPOST(
'origin',
'alpha');
95$hookmanager->initHooks(array(
'invoicesuppliercard',
'globalcard'));
101$extrafields->fetch_name_optionals_label(
$object->table_element);
104if ($id > 0 || !empty($ref)) {
105 $ret =
$object->fetch($id, $ref);
109 $ret =
$object->fetch_thirdparty();
117if (!empty($user->socid)) {
118 $socid = $user->socid;
122$result =
restrictedArea($user,
'fournisseur', $id,
'facture_fourn',
'facture',
'fk_soc',
'rowid', $isdraft);
125$usercanread = ($user->hasRight(
"fournisseur",
"facture",
"lire") || $user->hasRight(
"supplier_invoice",
"lire"));
126$usercancreate = ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"));
127$usercandelete = ($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer"));
128$usercancreatecontract = $user->hasRight(
"contrat",
"creer");
131$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"validate")));
132$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"send"));
135$permissionnote = $usercancreate;
136$permissiondellink = $usercancreate;
137$permissiontoedit = $usercancreate;
138$permissiontoadd = $usercancreate;
139$permissiontodelete = $usercandelete;
148$parameters = array(
'socid' => $socid);
149$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
154if (empty($reshook)) {
155 $backurlforlist = DOL_URL_ROOT.
'/fourn/facture/list.php';
157 if (empty($backtopage) || ($cancel && empty($id))) {
158 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
159 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
160 $backtopage = $backurlforlist;
162 $backtopage = DOL_URL_ROOT.
'/fourn/facture/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
168 if (!empty($backtopageforcancel)) {
169 header(
"Location: ".$backtopageforcancel);
171 } elseif (!empty($backtopage)) {
172 header(
"Location: ".$backtopage);
178 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
180 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
182 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
185 if (
GETPOST(
'linkedOrder') && empty($cancel) && $id > 0 && $permissiontoadd) {
188 $result =
$object->add_object_linked(
'order_supplier',
GETPOST(
'linkedOrder'));
192 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontoadd) {
194 '@phan-var-force FactureFournisseur $objectutil';
196 if (
GETPOST(
'newsupplierref',
'alphanohtml')) {
197 $objectutil->ref_supplier =
GETPOST(
'newsupplierref',
'alphanohtml');
201 $result = $objectutil->createFromClone($user, $id);
203 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
206 $langs->load(
"errors");
210 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
211 $idwarehouse =
GETPOST(
'idwarehouse');
216 $qualified_for_stock_change = 0;
218 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
220 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
224 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
225 $langs->load(
"stocks");
226 if (!$idwarehouse || $idwarehouse == -1) {
228 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
236 $result =
$object->validate($user,
'', $idwarehouse);
246 $outputlangs = $langs;
249 $newlang =
GETPOST(
'lang_id',
'aZ09');
252 $newlang =
$object->thirdparty->default_lang;
254 if (!empty($newlang)) {
256 $outputlangs->setDefaultLang($newlang);
261 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
268 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
272 $isErasable =
$object->is_erasable();
274 if (($usercandelete && $isErasable > 0) || ($usercancreate && $isErasable == 1)) {
275 $revertstock =
GETPOST(
'revertstock');
278 $idwarehouse =
GETPOST(
'idwarehouse');
280 $qualified_for_stock_change = 0;
282 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
284 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
288 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
289 $langs->load(
"stocks");
290 if (!$idwarehouse || $idwarehouse == -1) {
292 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
295 $result =
$object->setDraft($user, $idwarehouse);
304 $result =
$object->delete($user);
306 header(
'Location: list.php?restore_lastsearch_values=1');
313 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
315 $result =
$object->deleteLine($lineid);
335 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
342 } elseif ($action ==
'unlinkdiscount' && $usercancreate) {
345 $result = $discount->fetch(
GETPOSTINT(
"discountid"));
346 $discount->unlink_invoice();
347 } elseif ($action ==
'confirm_paid' && $confirm ==
'yes' && $usercancreate) {
349 $result =
$object->setPaid($user);
353 } elseif ($action ==
'confirm_paid_partially' && $confirm ==
'yes' && $usercancreate) {
356 $close_code =
GETPOST(
"close_code",
'restricthtml');
357 $close_note =
GETPOST(
"close_note",
'restricthtml');
359 $result =
$object->setPaid($user, $close_code, $close_note);
364 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
366 } elseif ($action ==
'confirm_canceled' && $confirm ==
'yes' && $usercancreate) {
369 $close_code =
GETPOST(
"close_code",
'restricthtml');
370 $close_note =
GETPOST(
"close_note",
'restricthtml');
372 $result =
$object->setCanceled($user, $close_code, $close_note);
377 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
382 if ($action ==
'setref_supplier' && $usercancreate) {
385 if (
$object->update($user) < 0) {
389 $outputlangs = $langs;
392 $newlang =
GETPOST(
'lang_id',
'aZ09');
395 $newlang =
$object->thirdparty->default_lang;
397 if (!empty($newlang)) {
399 $outputlangs->setDefaultLang($newlang);
403 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
409 if ($action ==
'setconditions' && $usercancreate) {
411 $object->cond_reglement_code = 0;
412 $object->cond_reglement_id = 0;
427 $new_date_echeance =
$object->calculate_date_lim_reglement();
428 if ($new_date_echeance) {
429 $object->date_echeance = $new_date_echeance;
434 $result =
$object->update($user);
446 } elseif ($action ==
'set_incoterms' && isModEnabled(
'incoterm') && $usercancreate) {
449 } elseif ($action ==
'setmode' && $usercancreate) {
452 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
454 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
455 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
458 } elseif ($action ==
'setbankaccount' && $usercancreate) {
461 } elseif ($action ==
'setvatreversecharge' && $usercancreate) {
463 $vatreversecharge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
464 $result =
$object->setVATReverseCharge($vatreversecharge);
467 if ($action ==
'settransportmode' && $usercancreate) {
470 } elseif ($action ==
'setlabel' && $usercancreate) {
474 $result =
$object->update($user);
478 } elseif ($action ==
'setdatef' && $usercancreate) {
482 setEventMessages($langs->trans(
"WarningInvoiceDateInFuture"),
null,
'warnings');
484 setEventMessages($langs->trans(
"WarningInvoiceDateTooFarInFuture"),
null,
'warnings');
491 $date_echence_calc =
$object->calculate_date_lim_reglement();
492 if (!empty(
$object->date_echeance)) {
493 $object->date_echeance = $date_echence_calc;
499 $result =
$object->update($user);
503 } elseif ($action ==
'setdate_lim_reglement' && $usercancreate) {
508 setEventMessages($langs->trans(
"DatePaymentTermCantBeLowerThanObjectDate"),
null,
'warnings');
510 $result =
$object->update($user);
514 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
530 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
532 $discount->fetch(
GETPOSTINT(
"remise_id_for_payment"));
536 $remaintopay =
$object->getRemainToPay(0);
540 setEventMessages($langs->trans(
"ErrorDiscountLargerThanRemainToPaySplitItBefore"),
null,
'errors');
544 $result = $discount->link_to_invoice(0, $id);
551 $newremaintopay =
$object->getRemainToPay(0);
552 if ($newremaintopay == 0) {
563 $outputlangs = $langs;
566 $newlang =
GETPOST(
'lang_id',
'aZ09');
569 $newlang =
$object->thirdparty->default_lang;
571 if (!empty($newlang)) {
573 $outputlangs->setDefaultLang($newlang);
577 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
582 } elseif ($action ==
'confirm_converttoreduc' && $confirm ==
'yes' && $usercancreate) {
590 $result = $discountcheck->fetch(0, 0,
$object->id);
602 $amount_ht = $amount_tva = $amount_ttc = array();
603 $multicurrency_amount_ht = $multicurrency_amount_tva = $multicurrency_amount_ttc = array();
607 foreach (
$object->lines as $line) {
608 if ($line->product_type < 9 && $line->total_ht != 0) {
609 $keyforvatrate = $line->tva_tx.($line->vat_src_code ?
' ('.$line->vat_src_code.
')' :
'');
611 $amount_ht[$keyforvatrate] += $line->total_ht;
612 $amount_tva[$keyforvatrate] += $line->total_tva;
613 $amount_ttc[$keyforvatrate] += $line->total_ttc;
614 $multicurrency_amount_ht[$keyforvatrate] += $line->multicurrency_total_ht;
615 $multicurrency_amount_tva[$keyforvatrate] += $line->multicurrency_total_tva;
616 $multicurrency_amount_ttc[$keyforvatrate] += $line->multicurrency_total_ttc;
620 '@phan-var-force array<string,float> $amount_ht
621 @phan-var-force array<string,float> $amount_tva
622 @phan-var-force array<string,float> $amount_ttc
623 @phan-var-force array<string,float> $multicurrency_amount_ht
624 @phan-var-force array<string,float> $multicurrency_amount_tva
625 @phan-var-force array<string,float> $multicurrency_amount_ttc';
629 $alreadypaid =
$object->getSommePaiement();
630 if ($alreadypaid && abs($alreadypaid) < abs(
$object->total_ttc)) {
631 $ratio = abs((
$object->total_ttc - $alreadypaid) /
$object->total_ttc);
632 foreach ($amount_ht as $vatrate => $val) {
633 $amount_ht[$vatrate] =
price2num($amount_ht[$vatrate] * $ratio,
'MU');
634 $amount_tva[$vatrate] =
price2num($amount_tva[$vatrate] * $ratio,
'MU');
635 $amount_ttc[$vatrate] =
price2num($amount_ttc[$vatrate] * $ratio,
'MU');
636 $multicurrency_amount_ht[$vatrate] =
price2num($multicurrency_amount_ht[$vatrate] * $ratio,
'MU');
637 $multicurrency_amount_tva[$vatrate] =
price2num($multicurrency_amount_tva[$vatrate] * $ratio,
'MU');
638 $multicurrency_amount_ttc[$vatrate] =
price2num($multicurrency_amount_ttc[$vatrate] * $ratio,
'MU');
647 $discount->description =
'(CREDIT_NOTE)';
649 $discount->description =
'(DEPOSIT)';
651 $discount->description =
'(EXCESS PAID)';
653 setEventMessages($langs->trans(
'CantConvertToReducAnInvoiceOfThisType'),
null,
'errors');
655 $discount->discount_type = 1;
656 $discount->fk_soc =
$object->socid;
657 $discount->socid =
$object->socid;
658 $discount->fk_invoice_supplier_source =
$object->id;
666 $sql =
'SELECT SUM(pf.amount) as total_paiements';
667 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf, '.MAIN_DB_PREFIX.
'paiementfourn as p';
668 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id AND c.entity IN ('.
getEntity(
'c_paiement').
')';
669 $sql .=
' WHERE pf.fk_facturefourn = '.((int)
$object->id);
670 $sql .=
' AND pf.fk_paiementfourn = p.rowid';
671 $sql .=
' AND p.entity IN ('.getEntity(
'invoice').
')';
673 $resql = $db->query($sql);
678 $res = $db->fetch_object($resql);
679 $total_paiements = $res->total_paiements;
682 $total_creditnote_and_deposit = 0;
683 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
684 $sql .=
" re.description, re.fk_invoice_supplier_source";
685 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
686 $sql .=
" WHERE fk_invoice_supplier = ".((int)
$object->id);
687 $resql = $db->query($sql);
688 if (!empty($resql)) {
689 while ($obj = $db->fetch_object($resql)) {
690 $total_creditnote_and_deposit += $obj->amount_ttc;
696 $discount->amount_ht = $discount->amount_ttc = $total_paiements + $total_creditnote_and_deposit -
$object->total_ttc;
697 $discount->amount_tva = 0;
698 $discount->tva_tx = 0;
699 $discount->vat_src_code =
'';
701 $result = $discount->create($user);
707 foreach ($amount_ht as $tva_tx => $xxx) {
708 $discount->amount_ht = abs((
float) $amount_ht[$tva_tx]);
709 $discount->amount_tva = abs((
float) $amount_tva[$tva_tx]);
710 $discount->amount_ttc = abs((
float) $amount_ttc[$tva_tx]);
711 $discount->multicurrency_amount_ht = abs((
float) $multicurrency_amount_ht[$tva_tx]);
712 $discount->multicurrency_amount_tva = abs((
float) $multicurrency_amount_tva[$tva_tx]);
713 $discount->multicurrency_amount_ttc = abs((
float) $multicurrency_amount_ttc[$tva_tx]);
718 if (preg_match(
'/\((.*)\)/', $tva_tx, $reg)) {
719 $vat_src_code = $reg[1];
720 $tva_tx = preg_replace(
'/\s*\(.*\)/',
'', $tva_tx);
723 $discount->tva_tx = abs((
float) $tva_tx);
724 $discount->vat_src_code = $vat_src_code;
726 $result = $discount->create($user);
737 $result =
$object->setPaid($user);
752 } elseif ($action ==
'confirm_delete_paiement' && $confirm ==
'yes' && $usercancreate) {
757 $result = $paiementfourn->fetch(
GETPOST(
'paiement_id'));
759 $result = $paiementfourn->delete($user);
761 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
769 } elseif ($action ==
'add' && $usercancreate) {
774 $selectedLines =
GETPOST(
'toselect',
'array');
782 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
796 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
801 if (empty($dateinvoice)) {
802 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
814 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ReplaceInvoice")),
null,
'errors');
828 $object->date_echeance = $datedue;
834 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
835 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
837 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
838 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
846 $id =
$object->createFromCurrent($user);
859 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"CorrectInvoice")),
null,
'errors');
862 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
867 if (empty($dateinvoice)) {
868 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
878 if (!
GETPOST(
'ref_supplier')) {
879 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplierBill')),
null,
'errors');
887 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
902 $object->date_echeance = $datedue;
908 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
909 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
911 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
912 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
917 $object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice :
'';
926 if (
GETPOSTINT(
'invoiceAvoirWithLines') == 1 && $id > 0) {
928 if ($facture_source->fetch(
$object->fk_facture_source) > 0) {
931 foreach ($facture_source->lines as $line) {
933 if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
937 $line->fk_facture_fourn =
$object->id;
938 $line->fk_parent_line = $fk_parent_line;
940 $line->subprice = -$line->subprice;
941 $line->pa_ht = -$line->pa_ht;
942 $line->total_ht = -$line->total_ht;
943 $line->total_tva = -$line->total_tva;
944 $line->total_ttc = -$line->total_ttc;
945 $line->total_localtax1 = -$line->total_localtax1;
946 $line->total_localtax2 = -$line->total_localtax2;
948 $result = $line->insert();
953 if ($result > 0 && $line->product_type == 9) {
954 $fk_parent_line = $result;
962 if (
GETPOSTINT(
'invoiceAvoirWithPaymentRestAmount') == 1 && $id > 0) {
964 if ($facture_source->fetch(
$object->fk_facture_source) > 0) {
965 $totalpaid = $facture_source->getSommePaiement();
966 $totalcreditnotes = $facture_source->getSumCreditNotesUsed();
967 $totaldeposits = $facture_source->getSumDepositsUsed();
968 $remain_to_pay = abs($facture_source->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits);
969 $desc = $langs->trans(
'invoiceAvoirLineWithPaymentRestAmount');
970 $retAddLine =
$object->addline($desc, $remain_to_pay, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
'TTC');
972 if ($retAddLine < 0) {
980 if (empty($dateinvoice)) {
982 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
992 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
1002 $object->note_public = trim(
GETPOST(
'note_public',
'restricthtml'));
1003 $object->note_private = trim(
GETPOST(
'note_private',
'restricthtml'));
1014 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1015 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1019 $object->fac_rec = $fac_recid;
1021 $fac_rec->fetch(
$object->fac_rec);
1022 $fac_rec->fetch_lines();
1023 $object->lines = $fac_rec->lines;
1030 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1035 if (empty($dateinvoice)) {
1036 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
1046 if (!
GETPOST(
'ref_supplier')) {
1047 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplierBill')),
null,
'errors');
1055 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
1072 $object->date_echeance = $datedue;
1078 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
1079 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
1081 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1082 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1087 if (empty(
$object->date_echeance)) {
1088 $object->date_echeance =
$object->calculate_date_lim_reglement();
1094 if (!$error &&
GETPOST(
'origin',
'alpha') &&
GETPOST(
'originid')) {
1096 $element = $subelement =
GETPOST(
'origin',
'alpha');
1104 if ($element ==
'order') {
1105 $element = $subelement =
'commande';
1107 if ($element ==
'propal') {
1108 $element =
'comm/propal';
1109 $subelement =
'propal';
1111 if ($element ==
'contract') {
1112 $element = $subelement =
'contrat';
1114 if ($element ==
'order_supplier') {
1116 $subelement =
'fournisseur.commande';
1118 if ($element ==
'project') {
1119 $element =
'projet';
1126 $classname = ucfirst($subelement);
1127 if ($classname ==
'Fournisseur.commande') {
1128 $classname =
'CommandeFournisseur';
1130 $objectsrc =
new $classname($db);
1131 $objectsrc->fetch($originid);
1132 $objectsrc->fetch_thirdparty();
1139 if (
$object->origin ==
'reception') {
1140 $objectsrc->fetchObjectLinked();
1142 if (count($objectsrc->linkedObjectsIds[
'order_supplier']) > 0) {
1143 foreach ($objectsrc->linkedObjectsIds[
'order_supplier'] as $key => $value) {
1144 $object->linkedObjectsIds[
'order_supplier'] = $value;
1154 $classname = ucfirst($subelement);
1155 if ($classname ==
'Fournisseur.commande') {
1156 $classname =
'CommandeFournisseur';
1158 $srcobject =
new $classname($db);
1160 $result = $srcobject->fetch(
GETPOSTINT(
'originid'));
1163 $typeamount =
GETPOST(
'typedeposit',
'alpha');
1168 $amountdeposit = array();
1170 if ($typeamount ==
'amount') {
1171 $amount = $valuedeposit;
1173 $amount = $srcobject->total_ttc * ((float) $valuedeposit / 100);
1176 $TTotalByTva = array();
1177 foreach ($srcobject->lines as &$line) {
1178 if (!empty($line->special_code)) {
1181 $TTotalByTva[$line->tva_tx] += $line->total_ttc;
1183 '@phan-var-force array<string,float> $TTotalByTva';
1185 $amount_ttc_diff = 0.;
1186 foreach ($TTotalByTva as $tva => &$total) {
1187 $coef = $total / $srcobject->total_ttc;
1188 $am = $amount * $coef;
1189 $amount_ttc_diff += $am;
1190 $amountdeposit[$tva] += $am / (1 + $tva / 100);
1193 if ($typeamount ==
'amount') {
1194 $amountdeposit[0] = $valuedeposit;
1195 } elseif ($typeamount ==
'variable') {
1198 $lines = $srcobject->lines;
1199 $numlines = count($lines);
1200 for ($i = 0; $i < $numlines; $i++) {
1202 if (empty($lines[$i]->qty)) {
1205 if (!empty($lines[$i]->special_code)) {
1209 $totalamount += $lines[$i]->total_ht;
1210 $tva_tx = $lines[$i]->tva_tx;
1211 $amountdeposit[$tva_tx] += ($lines[$i]->total_ht * (float) $valuedeposit) / 100;
1215 if ($totalamount == 0) {
1216 $amountdeposit[0] = 0;
1221 $amountdeposit[0] = 0;
1225 $amount_ttc_diff = $amountdeposit[0];
1228 foreach ($amountdeposit as $tva => $amount) {
1229 if (empty($amount)) {
1234 'amount' =>
'FixAmount',
1235 'variable' =>
'VarAmount'
1237 $descline =
'(DEPOSIT)';
1239 if ($typeamount ==
'amount') {
1240 $descline .=
' ('.price($valuedeposit, 0, $langs, 0, - 1, - 1, (!empty(
$object->multicurrency_code) ?
$object->multicurrency_code : $conf->currency)).
')';
1241 } elseif ($typeamount ==
'variable') {
1242 $descline .=
' ('.$valuedeposit.
'%)';
1245 $descline .=
' - '.$srcobject->ref;
1275 $diff =
$object->total_ttc - $amount_ttc_diff;
1279 $subprice_diff =
$object->lines[0]->subprice - $diff / (1 +
$object->lines[0]->tva_tx / 100);
1285 $object->lines[0]->localtax1_tx,
1286 $object->lines[0]->localtax2_tx,
1288 $object->lines[0]->fk_product,
1291 $object->lines[0]->product_type,
1292 $object->lines[0]->remise_percent,
1294 $object->lines[0]->date_start,
1303 } elseif ($result > 0) {
1304 $lines = $srcobject->lines;
1305 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1306 $srcobject->fetch_lines();
1307 $lines = $srcobject->lines;
1310 $num = count($lines);
1311 for ($i = 0; $i < $num; $i++) {
1312 if (!in_array($lines[$i]->
id, $selectedLines)) {
1316 $desc = ($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->product_label);
1317 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
1320 if (method_exists($lines[$i],
'fetch_optionals')) {
1321 $lines[$i]->fetch_optionals();
1326 $date_start = $lines[$i]->date_debut_prevue;
1327 if ($lines[$i]->date_debut_reel) {
1328 $date_start = $lines[$i]->date_debut_reel;
1330 if ($lines[$i]->date_start) {
1331 $date_start = $lines[$i]->date_start;
1333 $date_end = $lines[$i]->date_fin_prevue;
1334 if ($lines[$i]->date_fin_reel) {
1335 $date_end = $lines[$i]->date_fin_reel;
1337 if ($lines[$i]->date_end) {
1338 $date_end = $lines[$i]->date_end;
1341 $tva_tx = $lines[$i]->tva_tx;
1343 if (!empty($lines[$i]->vat_src_code) && !preg_match(
'/\(/', (
string) $tva_tx)) {
1344 $tva_tx .=
' ('.$lines[$i]->vat_src_code.
')';
1348 $object->special_code = $lines[$i]->special_code;
1351 if (
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
1353 $pu_currency = $lines[$i]->multicurrency_subprice;
1355 $pu = $lines[$i]->subprice;
1364 $lines[$i]->localtax1_tx,
1365 $lines[$i]->localtax2_tx,
1367 $lines[$i]->fk_product,
1368 $lines[$i]->remise_percent,
1372 $lines[$i]->info_bits,
1377 $lines[$i]->array_options,
1378 $lines[$i]->fk_unit,
1381 $lines[$i]->ref_supplier,
1382 $lines[$i]->special_code
1399 } elseif (!$error) {
1409 $langs->load(
"errors");
1419 $outputlangs = $langs;
1420 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1427 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1430 } elseif ($action ==
'updateline' && $usercancreate) {
1434 if (!
$object->fetch($id) > 0) {
1440 $tva_tx = str_replace(
'*',
'', $tva_tx);
1442 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_subprice') !=
'') {
1444 $price_base_type =
'HT';
1447 $price_base_type =
'TTC';
1450 if (
GETPOST(
'productid') > 0) {
1454 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1459 $prod->fetch(
GETPOST(
'productid'));
1460 $label = $prod->description;
1461 if (trim(
GETPOST(
'product_desc',
'restricthtml')) != trim($label)) {
1462 $label =
GETPOST(
'product_desc',
'restricthtml');
1465 $type = $prod->type;
1467 $label =
GETPOST(
'product_desc',
'restricthtml');
1476 if (preg_match(
'/\*/', $tva_tx)) {
1481 $tva_tx = str_replace(
'*',
'', $tva_tx);
1489 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1490 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1492 if (is_array($extralabelsline)) {
1493 foreach ($extralabelsline as $key => $value) {
1494 unset($_POST[
"options_".$key]);
1498 $result =
$object->updateline(
1520 unset($_POST[
'label']);
1521 unset($_POST[
'fourn_ref']);
1522 unset($_POST[
'date_starthour']);
1523 unset($_POST[
'date_startmin']);
1524 unset($_POST[
'date_startsec']);
1525 unset($_POST[
'date_startday']);
1526 unset($_POST[
'date_startmonth']);
1527 unset($_POST[
'date_startyear']);
1528 unset($_POST[
'date_endhour']);
1529 unset($_POST[
'date_endmin']);
1530 unset($_POST[
'date_endsec']);
1531 unset($_POST[
'date_endday']);
1532 unset($_POST[
'date_endmonth']);
1533 unset($_POST[
'date_endyear']);
1534 unset($_POST[
'price_ttc']);
1535 unset($_POST[
'price_ht']);
1542 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
1546 foreach (
$object->lines as $line) {
1547 if ($line->product_type == 1) {
1548 $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);
1551 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !=
'' && $usercancreate) {
1553 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
1554 $vat_rate = str_replace(
'*',
'', $vat_rate);
1557 foreach (
$object->lines as $line) {
1558 $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);
1560 } elseif ($action ==
'addline' && $usercancreate) {
1569 $ret =
$object->fetch_thirdparty();
1571 $langs->load(
'errors');
1576 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
1580 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
1581 if ($prod_entry_mode ==
'free') {
1592 $price_ttc_devise =
price2num(
GETPOST(
'multicurrency_price_ttc'),
'CU', 2);
1595 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
1596 if (empty($remise_percent)) {
1597 $remise_percent = 0;
1601 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1602 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
1604 if (is_array($extralabelsline)) {
1606 foreach ($extralabelsline as $key => $value) {
1607 unset($_POST[
"options_".$key]);
1611 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
1612 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1615 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
1616 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
1619 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
1620 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
1623 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
1624 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
1627 if (!
GETPOST(
'qty',
'alpha')) {
1628 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1632 if (!$error && isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
1633 if ($combinations =
GETPOST(
'combinations',
'array')) {
1637 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1638 $idprod = $res->fk_product_child;
1640 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1646 if ($prod_entry_mode !=
'free' && empty($error)) {
1650 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
1655 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
1657 $res = $productsupplier->fetch($idprod);
1660 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
1662 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1663 if ($productsupplier->fourn_socid != $socid) {
1664 $productsupplier->ref_supplier =
'';
1667 $fksoctosearch =
$object->thirdparty->id;
1668 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1670 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
1671 $qtytosearch = $qty;
1673 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
1674 $res = $productsupplier->fetch($idprod);
1678 $label = $productsupplier->label;
1681 $outputlangs = $langs;
1683 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1684 $newlang =
GETPOST(
'lang_id',
'aZ09');
1686 if (empty($newlang)) {
1687 $newlang =
$object->thirdparty->default_lang;
1689 if (!empty($newlang)) {
1690 $outputlangs =
new Translate(
"", $conf);
1691 $outputlangs->setDefaultLang($newlang);
1693 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
1695 $desc = $productsupplier->description;
1698 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
1699 $desc = $productsupplier->desc_supplier;
1703 if (trim($product_desc) == trim($desc) &&
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
1707 $desc = $product_desc;
1709 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
1713 $ref_supplier = $productsupplier->ref_supplier;
1716 if (!GETPOSTISSET(
'tva_tx')) {
1720 if (empty($tva_tx) || empty($tva_npr)) {
1726 $type = $productsupplier->type;
1727 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1728 $price_base_type =
'HT';
1730 $pu_devise =
price2num($price_ht_devise,
'CU');
1731 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
1732 $price_base_type =
'TTC';
1734 $pu_devise =
price2num($price_ttc_devise,
'CU');
1736 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
1737 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
1738 $pu = $productsupplier->fourn_pu;
1741 $pu = $productsupplier->fourn_pu;
1742 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
1746 $ref_supplier = $productsupplier->ref_supplier;
1767 min($rank, count(
$object->lines) + 1),
1770 $productsupplier->fk_unit,
1773 GETPOST(
'fourn_ref',
'alpha'),
1777 if ($idprod == -99 || $idprod == 0) {
1780 $langs->load(
"errors");
1781 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
1783 if ($idprod == -1) {
1786 $langs->load(
"errors");
1787 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
1789 } elseif (empty($error)) {
1790 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
1791 $tva_tx = str_replace(
'*',
'', $tva_tx);
1792 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1793 $desc = $product_desc;
1795 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1797 $fk_unit =
GETPOST(
'units',
'alpha');
1799 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
1807 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1811 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
1813 $price_base_type =
'HT';
1814 $pu_devise =
price2num($price_ht_devise,
'CU');
1816 $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);
1820 if (!$error && $result > 0) {
1825 $outputlangs = $langs;
1828 $newlang =
GETPOST(
'lang_id',
'aZ09');
1831 $newlang =
$object->thirdparty->default_lang;
1833 if (!empty($newlang)) {
1834 $outputlangs =
new Translate(
"", $conf);
1835 $outputlangs->setDefaultLang($newlang);
1840 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1846 unset($_POST [
'prod_entry_mode']);
1848 unset($_POST[
'qty']);
1849 unset($_POST[
'type']);
1850 unset($_POST[
'remise_percent']);
1851 unset($_POST[
'pu']);
1852 unset($_POST[
'price_ht']);
1853 unset($_POST[
'multicurrency_price_ht']);
1854 unset($_POST[
'price_ttc']);
1855 unset($_POST[
'fourn_ref']);
1856 unset($_POST[
'tva_tx']);
1857 unset($_POST[
'label']);
1858 unset($localtax1_tx);
1859 unset($localtax2_tx);
1860 unset($_POST[
'np_marginRate']);
1861 unset($_POST[
'np_markRate']);
1862 unset($_POST[
'dp_desc']);
1863 unset($_POST[
'idprodfournprice']);
1864 unset($_POST[
'units']);
1866 unset($_POST[
'date_starthour']);
1867 unset($_POST[
'date_startmin']);
1868 unset($_POST[
'date_startsec']);
1869 unset($_POST[
'date_startday']);
1870 unset($_POST[
'date_startmonth']);
1871 unset($_POST[
'date_startyear']);
1872 unset($_POST[
'date_endhour']);
1873 unset($_POST[
'date_endmin']);
1874 unset($_POST[
'date_endsec']);
1875 unset($_POST[
'date_endday']);
1876 unset($_POST[
'date_endmonth']);
1877 unset($_POST[
'date_endyear']);
1884 } elseif ($action ==
'classin' && $usercancreate) {
1886 $result =
$object->setProject($projectid);
1887 } elseif ($action ==
'confirm_edit' && $confirm ==
'yes' && $usercancreate) {
1891 $totalpaid =
$object->getSommePaiement();
1892 $resteapayer =
$object->total_ttc - $totalpaid;
1895 $ventilExportCompta =
$object->getVentilExportCompta();
1897 if (!$ventilExportCompta) {
1900 $idwarehouse =
GETPOST(
'idwarehouse');
1904 $qualified_for_stock_change = 0;
1906 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1908 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1912 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
1913 $langs->load(
"stocks");
1914 if (!$idwarehouse || $idwarehouse == -1) {
1916 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1921 $object->setDraft($user, $idwarehouse);
1925 $outputlangs = $langs;
1928 $newlang =
GETPOST(
'lang_id',
'aZ09');
1931 $newlang =
$object->thirdparty->default_lang;
1933 if (!empty($newlang)) {
1934 $outputlangs =
new Translate(
"", $conf);
1935 $outputlangs->setDefaultLang($newlang);
1940 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1949 } elseif ($action ==
'reopen' && $usercancreate) {
1951 $result =
$object->fetch($id);
1954 $result =
$object->setUnpaid($user);
1956 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
1965 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1968 $triggersendname =
'BILL_SUPPLIER_SENTBYMAIL';
1970 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
1971 $trackid =
'sinv'.$object->id;
1972 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1975 $upload_dir = $conf->fournisseur->facture->dir_output;
1976 $permissiontoadd = $usercancreate;
1977 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1980 if ($action ==
'calculate' && $usercancreate) {
1981 $calculationrule =
GETPOST(
'calculationrule');
1985 $result =
$object->update_price(0, (($calculationrule ==
'totalofround') ?
'0' :
'1'), 0,
$object->thirdparty);
1991 if ($action ==
'update_extras' && $usercancreate) {
1995 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
2002 $result =
$object->insertExtraFields(
'BILL_SUPPLIER_MODIFY');
2010 $action =
'edit_extras';
2015 if ($action ==
'addcontact') {
2016 $result =
$object->fetch($id);
2018 if ($result > 0 && $id > 0) {
2021 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
2025 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
2028 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
2029 $langs->load(
"errors");
2030 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
2035 } elseif ($action ==
'swapstatut') {
2042 } elseif ($action ==
'deletecontact') {
2048 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
2062$form =
new Form($db);
2064$bankaccountstatic =
new Account($db);
2066if (isModEnabled(
'project')) {
2072$title =
$object->ref.
" - ".$langs->trans(
'Card');
2073if ($action ==
'create') {
2074 $title = $langs->trans(
"NewSupplierInvoice");
2076$help_url =
'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
2080if ($action ==
'create') {
2082 $selectedLines = array();
2084 print
load_fiche_titre($langs->trans(
'NewSupplierInvoice'),
'',
'supplier_invoice');
2088 $currency_code = $conf->currency;
2094 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
2095 $currency_code = $societe->multicurrency_code;
2099 if (!empty($origin) && !empty($originid)) {
2101 $element = $subelement = $origin;
2103 if ($element ==
'project') {
2104 $projectid = $originid;
2105 $element =
'projet';
2109 if ($element ==
'order') {
2110 $element = $subelement =
'commande';
2112 if ($element ==
'propal') {
2113 $element =
'comm/propal';
2114 $subelement =
'propal';
2116 if ($element ==
'contract') {
2117 $element = $subelement =
'contrat';
2119 if ($element ==
'order_supplier') {
2121 $subelement =
'fournisseur.commande';
2125 $classname = ucfirst($subelement);
2126 if ($classname ==
'Fournisseur.commande') {
2127 $classname =
'CommandeFournisseur';
2129 $objectsrc =
new $classname($db);
2130 '@phan-var-force Project|Commande|Propal|Facture|Contrat|CommandeFournisseur|CommonObject $objectsrc';
2131 $objectsrc->fetch($originid);
2132 $objectsrc->fetch_thirdparty();
2134 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
2136 $soc = $objectsrc->thirdparty;
2138 $cond_reglement_id = 0;
2139 $mode_reglement_id = 0;
2143 $transport_mode_id = 0;
2146 if (!empty($objectsrc->cond_reglement_id)) {
2147 $cond_reglement_id = $objectsrc->cond_reglement_id;
2149 if (!empty($objectsrc->mode_reglement_id)) {
2150 $mode_reglement_id = $objectsrc->mode_reglement_id;
2152 if (!empty($objectsrc->fk_account)) {
2153 $fk_account = $objectsrc->fk_account;
2155 if (!empty($objectsrc->transport_mode_id)) {
2156 $transport_mode_id = $objectsrc->transport_mode_id;
2159 if (empty($cond_reglement_id)
2160 || empty($mode_reglement_id)
2161 || empty($fk_account)
2162 || empty($transport_mode_id)
2164 if ($origin ==
'reception') {
2166 if (!isset($objectsrc->supplier_order)) {
2167 $objectsrc->fetch_origin();
2170 if (!empty($objectsrc->origin_object)) {
2171 $originObject = $objectsrc->origin_object;
2172 if (empty($cond_reglement_id) && !empty($originObject->cond_reglement_id)) {
2173 $cond_reglement_id = $originObject->cond_reglement_id;
2175 if (empty($mode_reglement_id) && !empty($originObject->mode_reglement_id)) {
2176 $mode_reglement_id = $originObject->mode_reglement_id;
2178 if (empty($fk_account) && !empty($originObject->fk_account)) {
2179 $fk_account = $originObject->fk_account;
2181 if (empty($transport_mode_id) && !empty($originObject->transport_mode_id)) {
2182 $transport_mode_id = $originObject->transport_mode_id;
2189 if (empty($cond_reglement_id) && !empty($soc->cond_reglement_supplier_id)) {
2190 $cond_reglement_id = $soc->cond_reglement_supplier_id;
2192 if (empty($mode_reglement_id) && !empty($soc->mode_reglement_supplier_id)) {
2193 $mode_reglement_id = $soc->mode_reglement_supplier_id;
2195 if (empty($fk_account) && !empty($soc->fk_account)) {
2196 $fk_account = $soc->fk_account;
2198 if (empty($transport_mode_id) && !empty($soc->transport_mode_id)) {
2199 $transport_mode_id = $soc->transport_mode_id;
2204 if (isModEnabled(
"multicurrency")) {
2205 if (!empty($objectsrc->multicurrency_code)) {
2206 $currency_code = $objectsrc->multicurrency_code;
2208 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
2209 $currency_tx = $objectsrc->multicurrency_tx;
2214 $dateinvoice = ($datetmp ==
'' ? (!
getDolGlobalString(
'MAIN_AUTOFILL_DATE') ? -1 :
'') : $datetmp);
2216 $datedue = ($datetmp ==
'' ? -1 : $datetmp);
2219 $objectsrc->fetch_optionals();
2220 $object->array_options = $objectsrc->array_options;
2222 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
2223 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
2224 $vat_reverse_charge = (empty($societe) ?
'' : $societe->vat_reverse_charge);
2225 $transport_mode_id = !empty($societe->transport_mode_supplier_id) ? $societe->transport_mode_supplier_id : 0;
2226 $fk_account = !empty($societe->fk_account) ? $societe->fk_account : 0;
2228 $dateinvoice = ($datetmp ==
'' ? (
getDolGlobalInt(
'MAIN_AUTOFILL_DATE') ?
'' : -1) : $datetmp);
2230 $datedue = ($datetmp ==
'' ? -1 : $datetmp);
2232 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
2233 $currency_code = $societe->multicurrency_code;
2238 if (empty($cond_reglement_id)) {
2239 $cond_reglement_id =
GETPOST(
"cond_reglement_id");
2243 if (empty($mode_reglement_id)) {
2244 $mode_reglement_id =
GETPOST(
"mode_reglement_id");
2248 if (!
GETPOST(
'changecompany')) {
2249 if (GETPOSTISSET(
'cond_reglement_id')) {
2250 $cond_reglement_id =
GETPOSTINT(
'cond_reglement_id');
2252 if (GETPOSTISSET(
'mode_reglement_id')) {
2253 $mode_reglement_id =
GETPOSTINT(
'mode_reglement_id');
2255 if (GETPOSTISSET(
'cond_reglement_id')) {
2260 $note_public =
$object->getDefaultCreateValueFor(
'note_public', ((!empty($origin) && !empty($originid) && is_object($objectsrc) &&
getDolGlobalString(
'FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM')) ? $objectsrc->note_public : null));
2261 $note_private =
$object->getDefaultCreateValueFor(
'note_private', ((!empty($origin) && !empty($originid) && is_object($objectsrc) &&
getDolGlobalString(
'FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM')) ? $objectsrc->note_private : null));
2263 if ($origin ==
'contrat') {
2264 $langs->load(
"admin");
2265 $text = $langs->trans(
"ToCreateARecurringInvoice");
2266 $text .=
' '.$langs->trans(
"ToCreateARecurringInvoiceGene", $langs->transnoentitiesnoconv(
"MenuFinancial"), $langs->transnoentitiesnoconv(
"SupplierBills"), $langs->transnoentitiesnoconv(
"ListOfTemplates"));
2268 $text .=
' '.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name'));
2270 print
info_admin($text, 0, 0, 0,
'opacitymedium').
'<br>';
2273 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2274 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2275 print
'<input type="hidden" name="action" value="add">';
2276 print
'<input type="hidden" name="changecompany" value="0">';
2278 if (!empty($societe->id) && $societe->id > 0) {
2279 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">'.
"\n";
2281 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
2282 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
2283 if (!empty($currency_tx)) {
2284 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
2286 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2291 $parameters = array();
2293 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierInvoice', $parameters,
$object, $action);
2294 if (empty($reshook)) {
2295 print
'<table class="border centpercent">';
2298 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
2302 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2303 $invoice_predefined->fetch($fac_recid);
2307 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
2310 if (!empty($societe->id) && $societe->id > 0 && ($fac_recid <= 0 || !empty($invoice_predefined->frequency))) {
2311 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
2312 print $societe->getNomUrl(1,
'supplier');
2313 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
2315 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
2316 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');
2319 print
'<script type="text/javascript">
2320 $(document).ready(function() {
2321 $("#socid").change(function() {
2322 console.log("We have changed the company - Reload page");
2324 $("input[name=action]").val("create");
2325 $("input[name=changecompany]").val("1");
2326 $("form[name=add]").submit();
2331 if ($fac_recid <= 0) {
2332 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>';
2338 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2339 $invoice_predefined->fetch($fac_recid);
2341 $dateinvoice = $invoice_predefined->date_when;
2342 if (empty($projectid)) {
2343 $projectid = $invoice_predefined->fk_project;
2345 $cond_reglement_id = $invoice_predefined->cond_reglement_id;
2346 $mode_reglement_id = $invoice_predefined->mode_reglement_id;
2347 $fk_account = $invoice_predefined->fk_account;
2348 $note_public = $invoice_predefined->note_public;
2349 $note_private = $invoice_predefined->note_private;
2351 if (!empty($invoice_predefined->multicurrency_code)) {
2352 $currency_code = $invoice_predefined->multicurrency_code;
2354 if (!empty($invoice_predefined->multicurrency_tx)) {
2355 $currency_tx = $invoice_predefined->multicurrency_tx;
2358 $sql =
'SELECT r.rowid, r.titre as title, r.total_ttc';
2359 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as r';
2360 $sql .=
' WHERE r.fk_soc = '. (int) $invoice_predefined->socid;
2362 $resql = $db->query($sql);
2364 $num = $db->num_rows($resql);
2368 print
'<tr><td>'.$langs->trans(
'CreateFromRepeatableInvoice').
'</td><td>';
2370 print
'<select class="flat" id="fac_rec" name="fac_rec">';
2371 print
'<option value="0" selected></option>';
2373 $objp = $db->fetch_object($resql);
2374 print
'<option value="'.$objp->rowid.
'"';
2375 if ($fac_recid == $objp->rowid) {
2377 $exampletemplateinvoice->fetch($fac_recid);
2379 print
'>'.$objp->title.
' ('.
price($objp->total_ttc).
' '.$langs->trans(
"TTC").
')</option>';
2385 print
'<script type="text/javascript">
2386 $(document).ready(function() {
2387 $("#fac_rec").change(function() {
2388 console.log("We have changed the template invoice - Reload page");
2390 $("input[name=action]").val("create");
2391 $("form[name=add]").submit();
2405 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"';
2406 if (!empty($societe->id) && $societe->id > 0) {
2412 print
'<tr><td class="tdtop fieldrequired">'.$langs->trans(
'Type').
'</td><td>';
2414 print
'<div class="tagtable">'.
"\n";
2417 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2418 $tmp =
'<input type="radio" id="radio_standard" name="type" value="0"'.(GETPOSTINT(
'type') ?
'' :
'checked').
'> ';
2419 $desc = $form->textwithpicto($tmp.
'<label for="radio_standard">'.$langs->trans(
"InvoiceStandardAsk").
'</label>', $langs->transnoentities(
"InvoiceStandardDesc"), 1,
'help',
'', 0, 3);
2421 print
'</div></div>';
2423 if (empty($origin) || ($origin ==
'order_supplier' && !empty($originid))) {
2426 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2427 $tmp =
'<input type="radio" id="radio_deposit" name="type" value="3"' . (
GETPOSTINT(
'type') == 3 ?
' checked' :
'') .
'> ';
2428 print
'<script type="text/javascript">
2429 jQuery(document).ready(function() {
2430 jQuery("#typestandardinvoice, #valuestandardinvoice").click(function() {
2431 jQuery("#radio_standard").prop("checked", true);
2433 jQuery("#typedeposit, #valuedeposit").click(function() {
2434 jQuery("#radio_deposit").prop("checked", true);
2436 jQuery("#typedeposit").change(function() {
2437 console.log("We change type of down payment");
2438 jQuery("#radio_deposit").prop("checked", true);
2439 setRadioForTypeOfInvoice();
2441 jQuery("#radio_standard, #radio_deposit, #radio_replacement, #radio_template").change(function() {
2442 setRadioForTypeOfInvoice();
2444 function setRadioForTypeOfInvoice() {
2445 console.log("Change radio");
2446 if (jQuery("#radio_deposit").prop("checked") && (jQuery("#typedeposit").val() == \'amount\' || jQuery("#typedeposit").val() == \'variable\')) {
2447 jQuery(".checkforselect").prop("disabled", true);
2448 jQuery(".checkforselect").prop("checked", false);
2450 jQuery(".checkforselect").prop("disabled", false);
2451 jQuery(".checkforselect").prop("checked", true);
2457 $tmp = $tmp.
'<label for="radio_deposit" >'.$langs->trans(
"InvoiceDeposit").
'</label>';
2459 $desc = $form->textwithpicto($tmp, $langs->transnoentities(
"InvoiceDepositDesc"), 1,
'help',
'', 0, 3);
2460 print
'<table class="nobordernopadding"><tr>';
2464 if ($origin ==
'order_supplier') {
2465 print
'<td class="nowrap" style="padding-left: 15px">';
2467 'amount' => $langs->transnoentitiesnoconv(
'FixAmount', $langs->transnoentitiesnoconv(
'Deposit')),
2468 'variable' => $langs->transnoentitiesnoconv(
'VarAmountOneLine', $langs->transnoentitiesnoconv(
'Deposit')),
2469 'variablealllines' => $langs->transnoentitiesnoconv(
'VarAmountAllLines')
2471 print $form->selectarray(
'typedeposit', $arraylist,
GETPOST(
'typedeposit',
'aZ09'), 0, 0, 0,
'', 1);
2473 print
'<td class="nowrap" style="padding-left: 5px">';
2474 print
'<span class="opacitymedium paddingleft">'.$langs->trans(
"AmountOrPercent").
'</span><input type="text" id="valuedeposit" name="valuedeposit" class="width75 right" value="' .
GETPOSTINT(
'valuedeposit') .
'"/>';
2477 print
'</tr></table>';
2479 print
'</div></div>';
2548 if (empty($origin)) {
2549 if (!empty($societe->id) && $societe->id > 0) {
2553 $facids = $facturestatic->list_qualified_avoir_supplier_invoices($societe->id);
2560 foreach ($facids as $key => $valarray) {
2561 $newinvoice_static->id = $key;
2562 $newinvoice_static->ref = $valarray [
'ref'];
2563 $newinvoice_static->status = $valarray [
'status'];
2564 $newinvoice_static->statut = $valarray [
'status'];
2565 $newinvoice_static->type = $valarray [
'type'];
2566 $newinvoice_static->paid = $valarray [
'paye'];
2567 $newinvoice_static->paye = $valarray [
'paye'];
2569 $optionsav .=
'<option value="'.$key.
'"';
2571 $optionsav .=
' selected';
2574 $optionsav .= $newinvoice_static->ref;
2575 $optionsav .=
' ('.$newinvoice_static->getLibStatut(1, $valarray [
'paymentornot']).
')';
2576 $optionsav .=
'</option>';
2579 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2580 $tmp =
'<input type="radio" id="radio_creditnote" name="type" value="2"'.(GETPOST(
'type') == 2 ?
' checked' :
'');
2582 $tmp .=
' disabled';
2586 print
'<script type="text/javascript">
2587 jQuery(document).ready(function() {
2588 if (! jQuery("#radio_creditnote").is(":checked"))
2590 jQuery("#credit_note_options").hide();
2592 jQuery("#radio_creditnote").click(function() {
2593 jQuery("#credit_note_options").show();
2595 jQuery("#radio_standard, #radio_replacement, #radio_deposit").click(function() {
2596 jQuery("#credit_note_options").hide();
2600 $text = $tmp.
'<label for="radio_creditnote">'.$langs->transnoentities(
"InvoiceAvoirAsk").
'</label> ';
2602 $text .=
'<select class="flat valignmiddle" name="fac_avoir" id="fac_avoir"';
2604 $text .=
' disabled';
2608 $text .=
'<option value="-1"></option>';
2609 $text .= $optionsav;
2611 $text .=
'<option value="-1">'.$langs->trans(
"NoInvoiceToCorrect").
'</option>';
2613 $text .=
'</select>';
2614 $desc = $form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2617 print
'<div id="credit_note_options" class="clearboth">';
2618 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' :
'').
' /> ';
2619 print
'<label for="invoiceAvoirWithLines">'.$langs->trans(
'invoiceAvoirWithLines').
"</label>";
2620 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' :
'').
' /> ';
2621 print
'<label for="invoiceAvoirWithPaymentRestAmount">'.$langs->trans(
'invoiceAvoirWithPaymentRestAmount').
"</label>";
2624 print
'</div></div>';
2627 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2629 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="0" disabled> ';
2631 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="2"> ';
2633 $text = $tmp.$langs->trans(
"InvoiceAvoir").
' ';
2634 $text .=
'<span class="opacitymedium">('.$langs->trans(
"YouMustCreateInvoiceFromSupplierThird").
')</span> ';
2635 $desc = $form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2637 print
'</div></div>'.
"\n";
2648 print
'<tr><td class="fieldrequired">'.$langs->trans(
'InvoiceSubtype').
'</td><td colspan="2">';
2649 print $form->getSelectInvoiceSubtype(
GETPOST(
'subtype'),
'subtype', 1, 0,
'');
2653 if (!empty($societe->id) && $societe->id > 0) {
2655 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2657 $thirdparty = $societe;
2659 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$societe->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
2660 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2666 print
'<tr><td>'.$langs->trans(
'Label').
'</td><td><input class="minwidth200" name="label" value="'.
dol_escape_htmltag(
GETPOST(
'label')).
'" type="text"></td></tr>';
2669 print
'<tr><td class="fieldrequired">'.$langs->trans(
'DateInvoice').
'</td><td>';
2670 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2671 print $form->selectDate($dateinvoice,
'', 0, 0, 0,
"add", 1, 1);
2675 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2676 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2677 print $form->getSelectConditionsPaiements($cond_reglement_id,
'cond_reglement_id', -1, 1);
2682 print
'<tr><td>'.$langs->trans(
'DateMaxPayment').
'</td><td>';
2683 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2684 print $form->selectDate($datedue,
'ech', 0, 0, 0,
"add", 1, 1);
2688 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2689 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2690 $form->select_types_paiements($mode_reglement_id,
'mode_reglement_id',
'DBIT', 0, 1, 0, 0, 1,
'maxwidth200 widthcentpercentminusx');
2694 if (isModEnabled(
"bank")) {
2695 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2697 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"').$form->select_comptes($fk_account,
'fk_account', 0,
'', 1,
'', 0,
'maxwidth200 widthcentpercentminusx', 1);
2702 if (isModEnabled(
'project')) {
2705 $langs->load(
'projects');
2706 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
2707 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');
2708 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>';
2713 if (isModEnabled(
'incoterm')) {
2715 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), !empty($objectsrc->label_incoterms) ? $objectsrc->label_incoterms :
'', 1).
'</label></td>';
2716 print
'<td colspan="3" class="maxwidthonsmartphone">';
2717 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2718 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 :
''));
2724 require_once DOL_DOCUMENT_ROOT .
'/core/lib/company.lib.php';
2725 print
'<tr><td>' . $langs->trans(
'VATReverseCharge') .
'</td><td>';
2727 if (GETPOSTISSET(
'vat_reverse_charge')) {
2728 $vat_reverse_charge = (
GETPOST(
'vat_reverse_charge',
'alpha') ==
'on' ||
GETPOST(
'vat_reverse_charge',
'alpha') ==
'1') ? 1 : 0;
2729 } elseif ($vat_reverse_charge == 1 || $societe->vat_reverse_charge == 1 || ($societe->country_code !=
'FR' &&
isInEEC($societe) && !empty($societe->tva_intra))) {
2730 $vat_reverse_charge = 1;
2732 $vat_reverse_charge = 0;
2735 print
'<input type="checkbox" name="vat_reverse_charge"'. (!empty($vat_reverse_charge) ?
' checked ' :
'') .
'>';
2740 if (isModEnabled(
"multicurrency")) {
2742 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0).
'</td>';
2743 print
'<td class="maxwidthonsmartphone">';
2744 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
2745 $used_currency_code = $currency_code;
2746 if (!
GETPOST(
'changecompany')) {
2747 $used_currency_code = GETPOSTISSET(
'multicurrency_code') ?
GETPOST(
'multicurrency_code',
'alpha') : $currency_code;
2749 print $form->selectMultiCurrency($used_currency_code,
'multicurrency_code');
2755 if ($fac_recid > 0) {
2756 $dateexample = $dateinvoice;
2757 if (empty($dateexample)) {
2760 $substitutionarray = array(
2761 '__TOTAL_HT__' => $langs->trans(
"AmountHT").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ht).
')',
2762 '__TOTAL_TTC__' => $langs->trans(
"AmountTTC").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ttc).
')',
2763 '__INVOICE_PREVIOUS_MONTH__' => $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m').
')',
2764 '__INVOICE_MONTH__' => $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%m').
')',
2765 '__INVOICE_NEXT_MONTH__' => $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m').
')',
2766 '__INVOICE_PREVIOUS_MONTH_TEXT__' => $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B').
')',
2767 '__INVOICE_MONTH_TEXT__' => $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%B').
')',
2768 '__INVOICE_NEXT_MONTH_TEXT__' => $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B').
')',
2769 '__INVOICE_PREVIOUS_YEAR__' => $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y').
')',
2770 '__INVOICE_YEAR__' => $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%Y').
')',
2771 '__INVOICE_NEXT_YEAR__' => $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y').
')'
2774 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
2775 foreach ($substitutionarray as $key => $val) {
2776 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
2778 $htmltext .=
'</i>';
2782 if (isModEnabled(
'intracommreport')) {
2783 $langs->loadLangs(array(
"intracommreport"));
2784 print
'<!-- If module intracomm on -->'.
"\n";
2785 print
'<tr><td>'.$langs->trans(
'IntracommReportTransportMode').
'</td><td>';
2786 $form->selectTransportMode(GETPOSTISSET(
'transport_mode_id') ?
GETPOST(
'transport_mode_id') : $transport_mode_id,
'transport_mode_id');
2790 if (empty($reshook)) {
2791 print
$object->showOptionals($extrafields,
'create');
2795 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
2797 $doleditor =
new DolEditor(
'note_public', (GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') : $note_public),
'', 80,
'dolibarr_notes',
'In', 0, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
2798 print $doleditor->Create(1);
2804 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
2806 $doleditor =
new DolEditor(
'note_private', (GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') : $note_private),
'', 80,
'dolibarr_notes',
'In', 0, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
2807 print $doleditor->Create(1);
2813 if (!empty($objectsrc) && is_object($objectsrc)) {
2814 print
"\n<!-- ".$classname.
" info -->";
2816 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2817 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2818 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2819 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2820 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2822 $txt = $langs->trans($classname);
2823 if ($classname ==
'CommandeFournisseur') {
2824 $langs->load(
'orders');
2825 $txt = $langs->trans(
"SupplierOrder");
2827 print
'<tr><td>'.$txt.
'</td><td>'.$objectsrc->getNomUrl(1);
2829 $objectsrc->fetchObjectLinked($originid, $origin,
null,
'invoice_supplier');
2831 $invoice_supplier = $objectsrc->linkedObjects[
'invoice_supplier'];
2832 '@phan-var-force null|FactureFournisseur[] $invoice_supplier';
2835 if (is_array($invoice_supplier)) {
2836 $cntinvoice = count($invoice_supplier);
2838 if ($cntinvoice >= 1) {
2840 echo
' ('.$langs->trans(
'LatestRelatedBill').end($invoice_supplier)->getNomUrl(1).
')';
2845 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2846 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2847 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2848 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2851 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2852 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2854 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2856 if (isModEnabled(
"multicurrency")) {
2857 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
2858 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
2859 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
2864 $parameters = array();
2865 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
2866 print $hookmanager->resPrint;
2874 print $form->buttonsSaveCancel(
"CreateDraft");
2877 if (!empty($objectsrc) && is_object($objectsrc)) {
2880 $title = $langs->trans(
'ProductsAndServices');
2883 print
'<div class="div-table-responsive-no-min">';
2884 print
'<table class="noborder centpercent">';
2886 $objectsrc->printOriginLinesList(
'', $selectedLines);
2894 if ($id > 0 || !empty($ref)) {
2900 $productstatic =
new Product($db);
2902 $result =
$object->fetch($id, $ref);
2904 $langs->load(
"errors");
2905 print $langs->trans(
"ErrorRecordNotFound");
2911 $result =
$object->fetch_thirdparty();
2917 $societe =
$object->thirdparty;
2919 $totalpaid =
$object->getSommePaiement();
2920 $totalcreditnotes =
$object->getSumCreditNotesUsed();
2921 $totaldeposits =
$object->getSumDepositsUsed();
2929 $resteapayer =
price2num(
$object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
2932 $multicurrency_resteapayer = 0;
2933 if (isModEnabled(
"multicurrency")) {
2934 $multicurrency_totalpaid =
$object->getSommePaiement(1);
2935 $multicurrency_totalcreditnotes =
$object->getSumCreditNotesUsed(1);
2936 $multicurrency_totaldeposits =
$object->getSumDepositsUsed(1);
2937 $multicurrency_resteapayer =
price2num(
$object->multicurrency_total_ttc - $multicurrency_totalpaid - $multicurrency_totalcreditnotes - $multicurrency_totaldeposits,
'MT');
2941 if ($resteapayer == 0 && $multicurrency_resteapayer != 0 &&
$object->multicurrency_code != $conf->currency) {
2942 $resteapayer =
price2num((
float) $multicurrency_resteapayer /
$object->multicurrency_tx,
'MT');
2949 $resteapayeraffiche = $resteapayer;
2952 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2953 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2955 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2956 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2959 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2960 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2961 $absolute_discount =
price2num($absolute_discount,
'MT');
2962 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2967 $objectidnext =
$object->getIdReplacingInvoice();
2970 $titre = $langs->trans(
'SupplierInvoice');
2972 print
dol_get_fiche_head($head,
'card', $titre, -1,
'supplier_invoice', 0,
'',
'', 0,
'', 1);
2977 if ($action ==
'converttoreduc') {
2980 $type_fac =
'ExcessPaid';
2982 $type_fac =
'CreditNote';
2984 $type_fac =
'Deposit';
2986 $text = $langs->trans(
'ConfirmConvertToReducSupplier', strtolower($langs->transnoentities($type_fac)));
2987 $text .=
'<br>'.$langs->trans(
'ConfirmConvertToReducSupplier2');
2988 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id, $langs->trans(
'ConvertToReduc'), $text,
'confirm_converttoreduc',
'',
"yes", 2);
2992 if ($action ==
'clone') {
2994 $formquestion = array(
2995 array(
'type' =>
'text',
'name' =>
'newsupplierref',
'label' => $langs->trans(
"RefSupplierBill"),
'value' => $langs->trans(
"CopyOf").
' '.
$object->ref_supplier),
2996 array(
'type' =>
'date',
'name' =>
'newdate',
'label' => $langs->trans(
"Date"),
'value' =>
dol_now())
2999 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneInvoice',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1, 250);
3003 if ($action ==
'valid') {
3005 if (preg_match(
'/^[\(]?PROV/i',
$object->ref) || empty(
$object->ref)) {
3007 $numref =
$object->getNextNumRef($societe);
3016 $text = $langs->trans(
'ConfirmValidateBill', $numref);
3024 $formquestion = array();
3026 $qualified_for_stock_change = 0;
3028 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3030 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3033 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3034 $langs->load(
"stocks");
3035 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3038 $warehouse_array = $warehouse->list_array();
3039 if (count($warehouse_array) == 1) {
3041 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3044 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3046 $formquestion = array(
3047 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
3051 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateBill'), $text,
'confirm_valid', $formquestion, 1, 1);
3056 if ($action ==
'edit') {
3057 $formquestion = array();
3059 $qualified_for_stock_change = 0;
3061 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3063 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3065 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3066 $langs->load(
"stocks");
3067 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3070 $warehouse_array = $warehouse->list_array();
3071 if (count($warehouse_array) == 1) {
3073 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3076 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3078 $formquestion = array(
3079 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
3082 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnvalidateBill'), $langs->trans(
'ConfirmUnvalidateBill',
$object->ref),
'confirm_edit', $formquestion, 1, 1);
3086 if ($action ==
'paid' && ($resteapayer <= 0 || (
getDolGlobalString(
'SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID') && $resteapayer ==
$object->total_ttc))) {
3087 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidBill',
$object->ref),
'confirm_paid',
'', 0, 1);
3090 if ($action ==
'paid' && $resteapayer > 0 && (!
getDolGlobalString(
'SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID') || $resteapayer !=
$object->total_ttc)) {
3094 $close[$i][
'code'] =
'discount_vat';
3096 $close[$i][
'code'] =
'badsupplier';
3098 $close[$i][
'code'] =
'other';
3102 $close[$i][
'label'] = $langs->trans(
"HelpEscompte").
'<br><br>'.$langs->trans(
"ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");
3104 $close[$i][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
3106 $close[$i][
'label'] = $langs->trans(
"Other");
3110 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonDiscount", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
3112 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadCustomer", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
3114 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"Other"), $close[$i][
'label'], 1);
3117 $arrayreasons = array();
3118 foreach ($close as $key => $val) {
3119 $arrayreasons[$close[$key][
'code']] = $close[$key][
'reason'];
3123 $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'));
3125 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?facid='.
$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidPartially',
$object->ref),
'confirm_paid_partially', $formquestion,
"yes", 1, 310);
3129 if ($action ==
'canceled') {
3131 $close[1][
'code'] =
'badsupplier';
3132 $close[2][
'code'] =
'abandon';
3134 $close[1][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
3135 $close[2][
'label'] = $langs->trans(
"ConfirmClassifyAbandonReasonOtherDesc");
3137 $close[1][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadSupplier",
$object->ref), $close[1][
'label'], 1);
3138 $close[2][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyAbandonReasonOther"), $close[2][
'label'], 1);
3140 $arrayreasons[$close[1][
'code']] = $close[1][
'reason'];
3141 $arrayreasons[$close[2][
'code']] = $close[2][
'reason'];
3144 $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'));
3146 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'CancelBill'), $langs->trans(
'ConfirmCancelBill',
$object->ref),
'confirm_canceled', $formquestion,
"yes", 1, 280);
3150 if ($action ==
'delete') {
3151 $formquestion = array();
3153 $qualified_for_stock_change = 0;
3155 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3157 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3160 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3161 $langs->load(
"stocks");
3162 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3165 $warehouse_array = $warehouse->list_array();
3167 $selectwarehouse =
'<span class="questionrevertstock hidden">';
3168 if (count($warehouse_array) == 1) {
3170 $selectwarehouse .=
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3173 $selectwarehouse .= $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3175 $selectwarehouse .=
'</span>';
3177 $selectyesno = array(0 => $langs->trans(
'No'), 1 => $langs->trans(
'Yes'));
3179 print
'<script type="text/javascript">
3180 $(document).ready(function() {
3181 $("#revertstock").change(function() {
3182 if(this.value > 0) {
3183 $(".questionrevertstock").removeClass("hidden");
3185 $(".questionrevertstock").addClass("hidden");
3191 $formquestion = array(
3192 array(
'type' =>
'select',
'name' =>
'revertstock',
'label' => $langs->trans(
"RevertProductsToStock"),
'select_show_empty' => 0,
'values' => $selectyesno),
3193 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $selectwarehouse,
'tdclass' =>
'questionrevertstock hidden')
3197 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteBill'), $langs->trans(
'ConfirmDeleteBill'),
'confirm_delete', $formquestion, 1, 1);
3199 if ($action ==
'deletepayment') {
3200 $payment_id =
GETPOST(
'paiement_id');
3201 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&paiement_id='.$payment_id, $langs->trans(
'DeletePayment'), $langs->trans(
'ConfirmDeletePayment'),
'confirm_delete_paiement',
'', 0, 1);
3205 if ($action ==
'ask_deleteline') {
3206 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
3209 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
3210 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
3211 if (empty($reshook)) {
3212 $formconfirm .= $hookmanager->resPrint;
3213 } elseif ($reshook > 0) {
3214 $formconfirm = $hookmanager->resPrint;
3222 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
3224 $morehtmlref =
'<div class="refidno">';
3226 $morehtmlref .= $form->editfieldkey(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'', 0, 1);
3227 $morehtmlref .= $form->editfieldval(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'',
null,
null,
'', 1);
3229 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1,
'supplier');
3231 $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>';
3234 if (isModEnabled(
'project')) {
3235 $langs->load(
"projects");
3236 $morehtmlref .=
'<br>';
3237 if ($permissiontoadd) {
3238 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
3239 if ($action !=
'classify') {
3240 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.((int)
$object->id).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
3242 $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');
3244 if (!empty(
$object->fk_project)) {
3246 $proj->fetch(
$object->fk_project);
3247 $morehtmlref .= $proj->getNomUrl(1);
3249 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
3254 $morehtmlref .=
'</div>';
3256 $object->totalpaid = $totalpaid;
3258 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
3261 $parameters = array();
3263 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierInvoice', $parameters,
$object, $action);
3264 if (empty($reshook)) {
3265 print
'<div class="fichecenter">';
3266 print
'<div class="fichehalfleft">';
3267 print
'<div class="underbanner clearboth"></div>';
3269 print
'<table class="border tableforfield centpercent">';
3272 print
'<tr><td class="titlefield">'.$langs->trans(
'Type').
'</td><td>';
3273 print
'<span class="badgeneutral">';
3277 print
' '.$object->getSubtypeLabel(
'facture_fourn');
3281 $facreplaced->fetch(
$object->fk_facture_source);
3282 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"ReplaceInvoice", $facreplaced->getNomUrl(1)).
'</span>';
3285 if (
$object->fk_facture_source > 0) {
3287 $facusing->fetch(
$object->fk_facture_source);
3288 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"CorrectInvoice", $facusing->getNomUrl(1)).
'</span>';
3290 $langs->load(
"errors");
3291 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"WarningCorrectedInvoiceNotFound").
'</span>';
3295 $facidavoir =
$object->getListIdAvoirFromInvoice();
3296 if (count($facidavoir) > 0) {
3297 $invoicecredits = array();
3298 foreach ($facidavoir as $id) {
3300 $facavoir->fetch($id);
3301 $invoicecredits[] = $facavoir->getNomUrl(1);
3303 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"InvoiceHasAvoir") . (count($invoicecredits) ?
' ' :
'') . implode(
',', $invoicecredits);
3306 if (isset($objectidnext) && $objectidnext > 0) {
3309 $facthatreplace->fetch($objectidnext);
3310 print
' <span class="opacitymediumbycolor paddingleft">'.str_replace(
'{s1}', $facthatreplace->getNomUrl(1), $langs->transnoentities(
"ReplacedByInvoice",
'{s1}')).
'</span>';
3314 $result = $discount->fetch(0, 0,
$object->id);
3316 print
' <span class="opacitymediumbycolor paddingleft">';
3317 $s = $langs->trans(
"CreditNoteConvertedIntoDiscount",
'{s1}',
'{s2}');
3318 $s = str_replace(
'{s1}',
$object->getLibType(1), $s);
3319 $s = str_replace(
'{s2}', $discount->getNomUrl(1,
'discount'), $s);
3321 print
'</span><br>';
3325 if (
$object->fk_fac_rec_source > 0) {
3327 $result = $tmptemplate->fetch(
$object->fk_fac_rec_source);
3329 print
' <span class="opacitymediumbycolor paddingleft">';
3330 $link =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$tmptemplate->id.
'">'.
dol_escape_htmltag($tmptemplate->title).
'</a>';
3331 $s = $langs->transnoentities(
"GeneratedFromSupplierTemplate", $link);
3341 print
'<!-- Discounts -->'.
"\n";
3342 print
'<tr><td>'.$langs->trans(
'DiscountStillRemaining');
3345 $thirdparty = $societe;
3347 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
3353 print
'<td>'.$form->editfieldkey(
"Label",
'label',
$object->label,
$object, $usercancreate).
'</td>';
3354 print
'<td>'.$form->editfieldval(
"Label",
'label',
$object->label,
$object, $usercancreate).
'</td>';
3362 print $form->editfieldkey(
"DateInvoice",
'datef',
$object->date,
$object, $form_permission,
'datepicker');
3363 print
'</td><td colspan="3">';
3364 print $form->editfieldval(
"Date",
'datef',
$object->date,
$object, $form_permission,
'datepicker');
3368 $langs->load(
'bills');
3369 print
'<tr><td class="nowrap">';
3370 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3371 print $langs->trans(
'PaymentConditions');
3373 if ($action !=
'editconditions' && $form_permission) {
3374 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>';
3376 print
'</tr></table>';
3378 if ($action ==
'editconditions') {
3379 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
3381 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none');
3388 print $form->editfieldkey(
"DateMaxPayment",
'date_lim_reglement',
$object->date_echeance,
$object, $form_permission,
'datepicker');
3390 print $form->editfieldval(
"DateMaxPayment",
'date_lim_reglement',
$object->date_echeance,
$object, $form_permission,
'datepicker');
3391 if ($action !=
'editdate_lim_reglement' &&
$object->hasDelay()) {
3397 $langs->load(
'bills');
3398 print
'<tr><td class="nowrap">';
3399 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3400 print $langs->trans(
'PaymentMode');
3402 if ($action !=
'editmode' && $form_permission) {
3403 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>';
3405 print
'</tr></table>';
3407 if ($action ==
'editmode') {
3408 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
3410 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
3415 if (isModEnabled(
"multicurrency")) {
3419 print
'<table class="nobordernopadding" width="100%"><tr><td>';
3420 print $form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0);
3422 if ($action !=
'editmulticurrencycode' &&
$object->status == $object::STATUS_DRAFT) {
3423 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencycode&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
3425 print
'</tr></table>';
3427 if ($action ==
'editmulticurrencycode') {
3428 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_code,
'multicurrency_code');
3430 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_code,
'none');
3435 if (
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
3438 print
'<table class="nobordernopadding centpercent"><tr><td>';
3439 print $form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'',
$object, 0);
3441 if ($action !=
'editmulticurrencyrate' &&
$object->status == $object::STATUS_DRAFT &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
3442 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencyrate&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
3444 print
'</tr></table>';
3446 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
3447 if ($action ==
'actualizemulticurrencyrate') {
3450 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_tx,
'multicurrency_tx',
$object->multicurrency_code);
3452 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->multicurrency_tx,
'none',
$object->multicurrency_code);
3453 if (
$object->status == $object::STATUS_DRAFT &&
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency) {
3454 print
'<div class="inline-block"> ';
3455 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
3464 if (isModEnabled(
"bank")) {
3465 print
'<tr><td class="nowrap">';
3466 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3467 print $langs->trans(
'BankAccount');
3469 if ($action !=
'editbankaccount' && $usercancreate) {
3470 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>';
3472 print
'</tr></table>';
3474 if ($action ==
'editbankaccount') {
3475 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
3477 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
3485 print
'<tr><td class="nowrap">';
3486 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3487 print $langs->trans(
'VATReverseCharge');
3489 if ($action !=
'editvatreversecharge' && $usercancreate) {
3490 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editvatreversecharge&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetVATReverseCharge'), 1).
'</a></td>';
3492 print
'</tr></table>';
3494 if ($action ==
'editvatreversecharge') {
3495 print
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
3496 print
'<input type="hidden" name="action" value="setvatreversecharge">';
3497 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3499 print
'<input type="checkbox" name="vat_reverse_charge"' . (
$object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
'>';
3501 print
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
3504 print
'<input type="checkbox" name="vat_reverse_charge"'. (
$object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
' disabled>';
3510 if (isModEnabled(
'incoterm')) {
3512 print
'<table width="100%" class="nobordernopadding"><tr><td>';
3513 print $langs->trans(
'IncotermLabel');
3514 print
'<td><td class="right">';
3515 if ($usercancreate) {
3516 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?facid='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
3520 print
'</td></tr></table>';
3523 if ($action !=
'editincoterm') {
3524 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
3526 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
3532 if (isModEnabled(
'intracommreport')) {
3533 $langs->loadLangs(array(
"intracommreport"));
3534 print
'<!-- If module intracomm on -->'.
"\n";
3536 print
'<table class="nobordernopadding centpercent"><tr><td>';
3537 print $langs->trans(
'IntracommReportTransportMode');
3539 if ($action !=
'edittransportmode' && ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"))) {
3540 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edittransportmode&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit().
'</a></td>';
3542 print
'</tr></table>';
3545 if ($action ==
'edittransportmode') {
3546 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->transport_mode_id,
'transport_mode_id', 1, 1);
3548 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->transport_mode_id,
'none');
3555 if (
$object->status != $object::STATUS_DRAFT) {
3559 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
3564 print
'<div class="fichehalfright">';
3565 print
'<div class="underbanner clearboth"></div>';
3567 print
'<table class="border tableforfield centpercent">';
3570 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
3571 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3572 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
3573 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3578 print
'<td>' . $langs->trans(
'AmountVAT') .
'</td>';
3579 print
'<td class="nowrap amountcard right">';
3580 if (
GETPOST(
'calculationrule')) {
3581 $calculationrule =
GETPOST(
'calculationrule',
'alpha');
3583 $calculationrule = (!
getDolGlobalString(
'MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND') ?
'totalofround' :
'roundoftotal');
3585 if ($calculationrule ==
'totalofround') {
3586 $calculationrulenum = 1;
3588 $calculationrulenum = 2;
3591 if (
$object->getVentilExportCompta() == 0) {
3592 $s =
'<span class="hideonsmartphone opacitymedium">' . $langs->trans(
"ReCalculate") .
' </span>';
3593 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=calculate&token='.newToken().
'&calculationrule=totalofround">' . $langs->trans(
"Mode1") .
'</a>';
3595 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=calculate&token='.newToken().
'&calculationrule=roundoftotal">' . $langs->trans(
"Mode2") .
'</a>';
3596 print
'<div class="inline-block">';
3597 print $form->textwithtooltip($s, $langs->trans(
"CalculationRuleDesc", $calculationrulenum) .
'<br>' . $langs->trans(
"CalculationRuleDescSupplier"), 2, 1,
img_picto(
'',
'help'),
'', 3,
'', 0,
'recalculate');
3598 print
' ';
3601 print
price(
$object->total_tva, 1, $langs, 0, -1, -1, $conf->currency);
3603 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
3604 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3608 if ($societe->localtax1_assuj ==
"1") {
3610 print
'<td>' . $langs->transcountry(
"AmountLT1", $societe->country_code) .
'</td>';
3611 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 1, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3614 if ($societe->localtax2_assuj ==
"1") {
3616 print
'<td>' . $langs->transcountry(
"AmountLT2", $societe->country_code) .
'</td>';
3617 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 1, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3622 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
3623 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3624 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code != $conf->currency)) {
3625 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3643 if (isModEnabled(
'project')) {
3646 if (isModEnabled(
"bank")) {
3650 if (isModEnabled(
'incoterm')) {
3653 if (isModEnabled(
"multicurrency")) {
3658 if ($societe->localtax1_assuj ==
"1") {
3661 if ($societe->localtax2_assuj ==
"1") {
3665 $sql =
'SELECT p.datep as dp, p.ref, p.num_paiement as num_payment, p.rowid, p.fk_bank,';
3666 $sql .=
' c.id as payment_type, c.code as payment_code,';
3667 $sql .=
' pf.amount,';
3668 $sql .=
' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.fk_accountancy_journal';
3669 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn as p';
3670 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank as b ON p.fk_bank = b.rowid';
3671 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank_account as ba ON b.fk_account = ba.rowid';
3672 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id';
3673 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf ON pf.fk_paiementfourn = p.rowid';
3674 $sql .=
' WHERE pf.fk_facturefourn = '.((int)
$object->id);
3675 $sql .=
' ORDER BY p.datep, p.tms';
3677 $result = $db->query($sql);
3679 $num = $db->num_rows($result);
3682 print
'<div class="div-table-responsive-no-min">';
3683 print
'<table class="noborder paymenttable centpercent">';
3684 print
'<tr class="liste_titre">';
3686 print
'<td>'.$langs->trans(
'Date').
'</td>';
3687 print
'<td>'.$langs->trans(
'Type').
'</td>';
3688 if (isModEnabled(
"bank")) {
3689 print
'<td class="right">'.$langs->trans(
'BankAccount').
'</td>';
3691 print
'<td class="right">'.$langs->trans(
'Amount').
'</td>';
3692 print
'<td width="18"> </td>';
3697 $objp = $db->fetch_object($result);
3699 $paymentstatic->id = $objp->rowid;
3700 $paymentstatic->datepaye = $db->jdate($objp->dp);
3701 $paymentstatic->ref = ($objp->ref ? $objp->ref : $objp->rowid);
3702 $paymentstatic->num_payment = $objp->num_payment;
3704 $paymentstatic->paiementcode = $objp->payment_code;
3705 $paymentstatic->type_code = $objp->payment_code;
3706 $paymentstatic->type_label = $objp->payment_type;
3708 print
'<tr class="oddeven">';
3709 print
'<td class="nowraponall">';
3710 print $paymentstatic->getNomUrl(1);
3712 print
'<td>'.dol_print_date($db->jdate($objp->dp),
'day').
'</td>';
3713 $s = $form->form_modes_reglement(
'', $objp->payment_type,
'none',
'', 1, 0,
'', 1).
' '.$objp->num_payment;
3714 print
'<td class="tdoverflowmax125" title="'.dol_escape_htmltag($s).
'">';
3717 if (isModEnabled(
"bank")) {
3718 $bankaccountstatic->id = $objp->baid;
3719 $bankaccountstatic->ref = $objp->baref;
3720 $bankaccountstatic->label = $objp->baref;
3721 $bankaccountstatic->number = $objp->banumber;
3723 if (isModEnabled(
'accounting')) {
3724 $bankaccountstatic->account_number = $objp->account_number;
3727 $accountingjournal->fetch($objp->fk_accountancy_journal);
3728 $bankaccountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1,
'', 1);
3731 print
'<td class="right">';
3732 if ($objp->baid > 0) {
3733 print $bankaccountstatic->getNomUrl(1,
'transactions');
3737 print
'<td class="right">'.price($sign * $objp->amount).
'</td>';
3738 print
'<td class="center">';
3740 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deletepayment&token='.
newToken().
'&paiement_id='.$objp->rowid.
'">';
3746 $totalpaid += $objp->amount;
3750 print
'<tr class="oddeven"><td colspan="'.$nbcols.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td><td></td><td></td></tr>';
3773 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3774 print
'<span class="opacitymedium">';
3776 print $langs->trans(
'AlreadyPaidNoCreditNotesNoDeposits');
3778 print $langs->trans(
'AlreadyPaid');
3781 print
'</td><td class="right"'.(($totalpaid > 0) ?
' class="amountalreadypaid"' :
'').
'>'.
price($totalpaid).
'</td><td> </td></tr>';
3784 $resteapayeraffiche = $resteapayer;
3786 $cssforamountpaymentcomplete =
'amountpaymentcomplete';
3789 $creditnoteamount = 0;
3792 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
3793 $sql .=
" re.description, re.fk_invoice_supplier_source";
3794 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
3795 $sql .=
" WHERE fk_invoice_supplier = ".((int)
$object->id);
3796 $resql = $db->query($sql);
3798 $num = $db->num_rows($resql);
3802 $obj = $db->fetch_object($resql);
3803 $invoice->fetch($obj->fk_invoice_supplier_source);
3804 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3806 print $langs->trans(
"CreditNote").
' ';
3809 print $langs->trans(
"Deposit").
' ';
3811 print $invoice->getNomUrl(0);
3813 print
'<td class="right">'.price($obj->amount_ttc).
'</td>';
3814 print
'<td class="right">';
3815 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=unlinkdiscount&discountid='.$obj->rowid.
'">';
3816 print
img_picto($langs->transnoentitiesnoconv(
"RemoveDiscount"),
'unlink');
3821 $creditnoteamount += $obj->amount_ttc;
3824 $depositamount += $obj->amount_ttc;
3833 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3834 print
'<span class="opacitymedium">';
3835 print $form->textwithpicto($langs->trans(
"Discount"), $langs->trans(
"HelpEscompte"), - 1);
3837 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3838 $resteapayeraffiche = 0;
3839 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3843 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3844 print
'<span class="opacitymedium">';
3845 print $form->textwithpicto($langs->trans(
"Abandoned"), $langs->trans(
"HelpAbandonBadCustomer"), - 1);
3847 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3849 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3853 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3854 print
'<span class="opacitymedium">';
3855 print $form->textwithpicto($langs->trans(
"ProductReturned"), $langs->trans(
"HelpAbandonProductReturned"), - 1);
3857 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3858 $resteapayeraffiche = 0;
3859 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3863 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3864 $text = $langs->trans(
"HelpAbandonOther");
3866 $text .=
'<br><br><b>'.$langs->trans(
"Reason").
'</b>:'.
$object->close_note;
3868 print
'<span class="opacitymedium">';
3870 print $form->textwithpicto($langs->trans(
"Abandoned"), $text, - 1);
3872 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3873 $resteapayeraffiche = 0;
3874 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3878 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3879 print
'<span class="opacitymedium">';
3880 print $langs->trans(
"Billed");
3882 print
'</td><td class="right">'.price(
$object->total_ttc).
'</td><td> </td></tr>';
3885 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3886 print
'<span class="opacitymedium">';
3887 print $langs->trans(
'RemainderToPay');
3888 if ($resteapayeraffiche < 0) {
3889 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3893 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($resteapayeraffiche).
'</td><td> </td></tr>';
3896 if (isModEnabled(
'multicurrency') &&
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
3897 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3898 print
'<span class="opacitymedium">';
3899 print $langs->trans(
'RemainderToPayMulticurrency');
3900 if ($resteapayeraffiche < 0) {
3901 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3905 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.(!empty(
$object->multicurrency_code) ?
$object->multicurrency_code : $conf->currency).
' '.
price(
price2num($multicurrency_resteapayer,
'MT')).
'</td><td> </td></tr>';
3908 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3911 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3912 print $langs->trans(
'AlreadyPaidBack');
3913 print
' :</td><td class="right">'.price($sign * $totalpaid).
'</td><td> </td></tr>';
3916 print
'<tr><td colspan="'.$nbcols.
'" class="right">'.$langs->trans(
"Billed").
' :</td><td class="right">'.
price($sign *
$object->total_ttc).
'</td><td> </td></tr>';
3919 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3920 print
'<span class="opacitymedium">';
3921 print $langs->trans(
'RemainderToPayBack');
3922 if ($resteapayeraffiche > 0) {
3923 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3927 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($sign * $resteapayeraffiche).
'</td><td> </td></tr>';
3930 if (isModEnabled(
'multicurrency') &&
$object->multicurrency_code != $conf->currency ||
$object->multicurrency_tx != 1) {
3931 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3932 print
'<span class="opacitymedium">';
3933 print $langs->trans(
'RemainderToPayBackMulticurrency');
3934 if ($resteapayeraffiche > 0) {
3935 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3939 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>';
3954 print
'<div class="clearboth"></div><br>';
3957 $blocname =
'contacts';
3958 $title = $langs->trans(
'ContactsAddresses');
3959 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3964 $blocname =
'notes';
3965 $title = $langs->trans(
'Notes');
3966 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3973 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="POST">';
3974 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3975 print
'<input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">';
3976 print
'<input type="hidden" name="mode" value="">';
3977 print
'<input type="hidden" name="page_y" value="">';
3978 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
3979 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
3980 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
3983 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
3986 print
'<div class="div-table-responsive-no-min">';
3987 print
'<table id="tablelines" class="noborder noshadow centpercent">';
3989 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
3992 $inputalsopricewithtax = 1;
3993 $senderissupplier = 2;
3996 $senderissupplier = 1;
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') {
4035 print
'<div class="tabsAction">';
4037 $parameters = array();
4038 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
4040 if (empty($reshook)) {
4044 $ventilExportCompta =
$object->getVentilExportCompta();
4046 if ($ventilExportCompta == 0) {
4047 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=edit&token='.
newToken().
'">'.$langs->trans(
'Modify').
'</a>';
4049 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseDispatchedInBookkeeping").
'">'.$langs->trans(
'Modify').
'</span>';
4054 $result = $discount->fetch(0, 0,
$object->id);
4061 if (!$objectidnext &&
$object->close_code !=
'replaced' && $usercancreate) {
4062 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
'ReOpen').
'</a>';
4064 if ($usercancreate) {
4065 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseReplacedInvoice").
'">'.$langs->trans(
'ReOpen').
'</span>';
4067 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>';
4158 if (!$objectidnext) {
4159 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>';
4164 if ($action !=
'edit' && $usercancreate) {
4165 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=clone&socid='.
$object->socid.
'&token='.
newToken().
'">'.$langs->trans(
'ToClone').
'</a>';
4170 if (!$objectidnext && count(
$object->lines) > 0) {
4171 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.
$object->id.
'&action=create">'.$langs->trans(
"ChangeIntoRepeatableInvoice").
'</a>';
4176 $isErasable =
$object->is_erasable();
4177 if ($action !=
'confirm_edit' && ($usercandelete || ($usercancreate && $isErasable == 1))) {
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;
4212 $modelpdf = (!empty(
$object->model_pdf) ?
$object->model_pdf : (!
getDolGlobalString(
'INVOICE_SUPPLIER_ADDON_PDF') ?
'' : $conf->global->INVOICE_SUPPLIER_ADDON_PDF));
4214 print $formfile->showdocuments(
'facture_fournisseur', $subdir, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 40, 0,
'',
'',
'', $societe->default_lang);
4215 $somethingshown = $formfile->numoffiles;
4218 $linktoelem = $form->showLinkToObjectBlock(
$object, array(), array(
'invoice_supplier'));
4219 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
4221 print
'</div><div class="fichehalfright">';
4224 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
4226 $somethingshown = $formactions->showactions(
$object,
'invoice_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
4228 print
'</div></div>';
4234 if (
GETPOST(
'modelselected')) {
4235 $action =
'presend';
4239 $modelmail =
'invoice_supplier_send';
4240 $defaulttopic =
'SendBillRef';
4241 $diroutput = $conf->fournisseur->facture->dir_output;
4242 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
4243 $trackid =
'sinv'.$object->id;
4245 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage bank accounts.
Class to manage accounting journals.
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.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
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.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
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'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
get_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...
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.