39require
'../../main.inc.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
43require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture-rec.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/fourn/class/paiementfourn.class.php';
46require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
48require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
49require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
50require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
51if (isModEnabled(
"product")) {
52 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
53 require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
55if (isModEnabled(
'project')) {
56 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
57 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
60if (isModEnabled(
'variants')) {
61 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
63if (isModEnabled(
'accounting')) {
64 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
76$langs->loadLangs(array(
'bills',
'compta',
'suppliers',
'companies',
'products',
'banks',
'admin'));
77if (isModEnabled(
'incoterm')) {
78 $langs->load(
'incoterm');
83$action =
GETPOST(
'action',
'aZ09');
86$cancel =
GETPOST(
'cancel',
'alpha');
87$backtopage =
GETPOST(
'backtopage',
'alpha');
88$backtopageforcancel =
'';
92$origin =
GETPOST(
'origin',
'alpha');
103$hookmanager->initHooks(array(
'invoicesuppliercard',
'globalcard'));
109$extrafields->fetch_name_optionals_label(
$object->table_element);
112if ($id > 0 || !empty($ref)) {
113 $ret =
$object->fetch($id, $ref);
117 $ret =
$object->fetch_thirdparty();
125if (!empty($user->socid)) {
126 $socid = $user->socid;
130$result =
restrictedArea($user,
'fournisseur', $id,
'facture_fourn',
'facture',
'fk_soc',
'rowid', $isdraft);
133$usercanread = ($user->hasRight(
"fournisseur",
"facture",
"lire") || $user->hasRight(
"supplier_invoice",
"lire"));
134$usercancreate = ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"));
135$usercandelete = ($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer"));
136$usercancreatecontract = $user->hasRight(
"contrat",
"creer");
139$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"validate")));
140$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"send"));
143$permissionnote = $usercancreate;
144$permissiondellink = $usercancreate;
145$permissiontoedit = $usercancreate;
146$permissiontoadd = $usercancreate;
147$permissiontodelete = $usercandelete;
156$parameters = array(
'socid' => $socid);
157$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
162if (empty($reshook)) {
163 $backurlforlist = DOL_URL_ROOT.
'/fourn/facture/list.php';
165 if (empty($backtopage) || ($cancel && empty($id))) {
166 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
167 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
168 $backtopage = $backurlforlist;
170 $backtopage = DOL_URL_ROOT.
'/fourn/facture/card.php?id='.((!empty($id) &&
$id > 0) ? $id :
'__ID__');
176 if (!empty($backtopageforcancel)) {
177 header(
"Location: ".$backtopageforcancel);
179 } elseif (!empty($backtopage)) {
180 header(
"Location: ".$backtopage);
186 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
188 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
190 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
193 if (
GETPOST(
'linkedOrder') && empty($cancel) && $id > 0 && $permissiontoadd) {
196 $result =
$object->add_object_linked(
'order_supplier',
GETPOST(
'linkedOrder'));
200 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontoadd) {
202 '@phan-var-force FactureFournisseur $objectutil';
204 if (
GETPOST(
'newsupplierref',
'alphanohtml')) {
205 $objectutil->ref_supplier =
GETPOST(
'newsupplierref',
'alphanohtml');
209 $result = $objectutil->createFromClone($user, $id);
211 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
214 $langs->load(
"errors");
218 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
219 $idwarehouse =
GETPOST(
'idwarehouse');
224 $qualified_for_stock_change = 0;
226 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
228 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
232 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
233 $langs->load(
"stocks");
234 if (!$idwarehouse || $idwarehouse == -1) {
236 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
244 $result =
$object->validate($user,
'', $idwarehouse);
254 $outputlangs = $langs;
257 $newlang =
GETPOST(
'lang_id',
'aZ09');
260 $newlang =
$object->thirdparty->default_lang;
262 if (!empty($newlang)) {
264 $outputlangs->setDefaultLang($newlang);
269 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
276 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes' && $permissiontodelete) {
280 $isErasable =
$object->is_erasable();
282 if (($usercandelete && $isErasable > 0) || ($usercancreate && $isErasable == 1)) {
283 $revertstock =
GETPOST(
'revertstock');
286 $idwarehouse =
GETPOST(
'idwarehouse');
288 $qualified_for_stock_change = 0;
290 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
292 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
296 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
297 $langs->load(
"stocks");
298 if (!$idwarehouse || $idwarehouse == -1) {
300 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
303 $result =
$object->setDraft($user, $idwarehouse);
312 $result =
$object->delete($user);
314 header(
'Location: list.php?restore_lastsearch_values=1');
321 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
323 $result =
$object->deleteLine($lineid);
343 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id);
350 } elseif ($action ==
'unlinkdiscount' && $usercancreate) {
353 $result = $discount->fetch(
GETPOSTINT(
"discountid"));
354 $discount->unlink_invoice();
355 } elseif ($action ==
'confirm_paid' && $confirm ==
'yes' && $usercancreate) {
357 $result =
$object->setPaid($user);
361 } elseif ($action ==
'confirm_paid_partially' && $confirm ==
'yes' && $usercancreate) {
364 $close_code =
GETPOST(
"close_code",
'restricthtml');
365 $close_note =
GETPOST(
"close_note",
'restricthtml');
367 $result =
$object->setPaid($user, $close_code, $close_note);
372 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
374 } elseif ($action ==
'confirm_canceled' && $confirm ==
'yes' && $usercancreate) {
377 $close_code =
GETPOST(
"close_code",
'restricthtml');
378 $close_note =
GETPOST(
"close_note",
'restricthtml');
380 $result =
$object->setCanceled($user, $close_code, $close_note);
385 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
390 if ($action ==
'setref_supplier' && $usercancreate) {
393 if (
$object->update($user) < 0) {
397 $outputlangs = $langs;
400 $newlang =
GETPOST(
'lang_id',
'aZ09');
403 $newlang =
$object->thirdparty->default_lang;
405 if (!empty($newlang)) {
407 $outputlangs->setDefaultLang($newlang);
411 $object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
417 if ($action ==
'setconditions' && $usercancreate) {
419 $object->cond_reglement_code = 0;
420 $object->cond_reglement_id = 0;
435 $new_date_echeance =
$object->calculate_date_lim_reglement();
436 if ($new_date_echeance) {
437 $object->date_echeance = $new_date_echeance;
442 $result =
$object->update($user);
454 } elseif ($action ==
'set_incoterms' && isModEnabled(
'incoterm') && $usercancreate) {
457 } elseif ($action ==
'setmode' && $usercancreate) {
460 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
462 $result =
$object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
463 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
466 } elseif ($action ==
'setbankaccount' && $usercancreate) {
469 } elseif ($action ==
'setvatreversecharge' && $usercancreate) {
471 $vatreversecharge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
472 $result =
$object->setVATReverseCharge($vatreversecharge);
475 if ($action ==
'settransportmode' && $usercancreate) {
478 } elseif ($action ==
'setlabel' && $usercancreate) {
482 $result =
$object->update($user);
486 } elseif ($action ==
'setdatef' && $usercancreate) {
490 setEventMessages($langs->trans(
"WarningInvoiceDateInFuture"),
null,
'warnings');
492 setEventMessages($langs->trans(
"WarningInvoiceDateTooFarInFuture"),
null,
'warnings');
499 $date_echence_calc =
$object->calculate_date_lim_reglement();
500 if (!empty(
$object->date_echeance)) {
501 $object->date_echeance = $date_echence_calc;
507 $result =
$object->update($user);
511 } elseif ($action ==
'setdate_lim_reglement' && $usercancreate) {
516 setEventMessages($langs->trans(
"DatePaymentTermCantBeLowerThanObjectDate"),
null,
'warnings');
518 $result =
$object->update($user);
522 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
538 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
540 $discount->fetch(
GETPOSTINT(
"remise_id_for_payment"));
544 $remaintopay =
$object->getRemainToPay(0);
548 setEventMessages($langs->trans(
"ErrorDiscountLargerThanRemainToPaySplitItBefore"),
null,
'errors');
552 $result = $discount->link_to_invoice(0, $id);
559 $newremaintopay =
$object->getRemainToPay(0);
560 if ($newremaintopay == 0) {
571 $outputlangs = $langs;
574 $newlang =
GETPOST(
'lang_id',
'aZ09');
577 $newlang =
$object->thirdparty->default_lang;
579 if (!empty($newlang)) {
581 $outputlangs->setDefaultLang($newlang);
585 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
590 } elseif ($action ==
'confirm_converttoreduc' && $confirm ==
'yes' && $usercancreate) {
598 $result = $discountcheck->fetch(0, 0,
$object->id);
610 $amount_ht = $amount_tva = $amount_ttc = array();
611 $multicurrency_amount_ht = $multicurrency_amount_tva = $multicurrency_amount_ttc = array();
615 foreach (
$object->lines as $line) {
616 if ($line->product_type < 9 && $line->total_ht != 0) {
617 $keyforvatrate = $line->tva_tx.($line->vat_src_code ?
' ('.$line->vat_src_code.
')' :
'');
619 $amount_ht[$keyforvatrate] += $line->total_ht;
620 $amount_tva[$keyforvatrate] += $line->total_tva;
621 $amount_ttc[$keyforvatrate] += $line->total_ttc;
622 $multicurrency_amount_ht[$keyforvatrate] += $line->multicurrency_total_ht;
623 $multicurrency_amount_tva[$keyforvatrate] += $line->multicurrency_total_tva;
624 $multicurrency_amount_ttc[$keyforvatrate] += $line->multicurrency_total_ttc;
628 '@phan-var-force array<string,float> $amount_ht
629 @phan-var-force array<string,float> $amount_tva
630 @phan-var-force array<string,float> $amount_ttc
631 @phan-var-force array<string,float> $multicurrency_amount_ht
632 @phan-var-force array<string,float> $multicurrency_amount_tva
633 @phan-var-force array<string,float> $multicurrency_amount_ttc';
637 $alreadypaid =
$object->getSommePaiement();
638 if ($alreadypaid && abs($alreadypaid) < abs(
$object->total_ttc)) {
639 $ratio = abs((
$object->total_ttc - $alreadypaid) /
$object->total_ttc);
640 foreach ($amount_ht as $vatrate => $val) {
641 $amount_ht[$vatrate] =
price2num($amount_ht[$vatrate] * $ratio,
'MU');
642 $amount_tva[$vatrate] =
price2num($amount_tva[$vatrate] * $ratio,
'MU');
643 $amount_ttc[$vatrate] =
price2num($amount_ttc[$vatrate] * $ratio,
'MU');
644 $multicurrency_amount_ht[$vatrate] =
price2num($multicurrency_amount_ht[$vatrate] * $ratio,
'MU');
645 $multicurrency_amount_tva[$vatrate] =
price2num($multicurrency_amount_tva[$vatrate] * $ratio,
'MU');
646 $multicurrency_amount_ttc[$vatrate] =
price2num($multicurrency_amount_ttc[$vatrate] * $ratio,
'MU');
655 $discount->description =
'(CREDIT_NOTE)';
657 $discount->description =
'(DEPOSIT)';
659 $discount->description =
'(EXCESS PAID)';
661 setEventMessages($langs->trans(
'CantConvertToReducAnInvoiceOfThisType'),
null,
'errors');
663 $discount->discount_type = 1;
664 $discount->fk_soc =
$object->socid;
665 $discount->socid =
$object->socid;
666 $discount->fk_invoice_supplier_source =
$object->id;
674 $sql =
'SELECT SUM(pf.amount) as total_paiements';
675 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf, '.MAIN_DB_PREFIX.
'paiementfourn as p';
676 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id AND c.entity IN ('.
getEntity(
'c_paiement').
')';
677 $sql .=
' WHERE pf.fk_facturefourn = '.((int)
$object->id);
678 $sql .=
' AND pf.fk_paiementfourn = p.rowid';
679 $sql .=
' AND p.entity IN ('.getEntity(
'invoice').
')';
681 $resql = $db->query($sql);
686 $res = $db->fetch_object($resql);
687 $total_paiements = $res->total_paiements;
690 $total_creditnote_and_deposit = 0;
691 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
692 $sql .=
" re.description, re.fk_invoice_supplier_source";
693 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
694 $sql .=
" WHERE fk_invoice_supplier = ".((int)
$object->id);
695 $resql = $db->query($sql);
696 if (!empty($resql)) {
697 while ($obj = $db->fetch_object($resql)) {
698 $total_creditnote_and_deposit += $obj->amount_ttc;
704 $discount->amount_ht = $discount->amount_ttc = $total_paiements + $total_creditnote_and_deposit -
$object->total_ttc;
705 $discount->amount_tva = 0;
706 $discount->tva_tx = 0;
707 $discount->vat_src_code =
'';
709 $result = $discount->create($user);
715 foreach ($amount_ht as $tva_tx => $xxx) {
716 $discount->amount_ht = abs((
float) $amount_ht[$tva_tx]);
717 $discount->amount_tva = abs((
float) $amount_tva[$tva_tx]);
718 $discount->amount_ttc = abs((
float) $amount_ttc[$tva_tx]);
719 $discount->multicurrency_amount_ht = abs((
float) $multicurrency_amount_ht[$tva_tx]);
720 $discount->multicurrency_amount_tva = abs((
float) $multicurrency_amount_tva[$tva_tx]);
721 $discount->multicurrency_amount_ttc = abs((
float) $multicurrency_amount_ttc[$tva_tx]);
726 if (preg_match(
'/\((.*)\)/', $tva_tx, $reg)) {
727 $vat_src_code = $reg[1];
728 $tva_tx = preg_replace(
'/\s*\(.*\)/',
'', $tva_tx);
731 $discount->tva_tx = abs((
float) $tva_tx);
732 $discount->vat_src_code = $vat_src_code;
734 $result = $discount->create($user);
745 $result =
$object->setPaid($user);
760 } elseif ($action ==
'confirm_delete_paiement' && $confirm ==
'yes' && $usercancreate) {
765 $result = $paiementfourn->fetch(
GETPOST(
'paiement_id'));
767 $result = $paiementfourn->delete($user);
769 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
777 } elseif ($action ==
'add' && $usercancreate) {
782 $selectedLines =
GETPOST(
'toselect',
'array');
790 $ret = $extrafields->setOptionalsFromPost(
null,
$object);
804 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
809 if (empty($dateinvoice)) {
810 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
822 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ReplaceInvoice")),
null,
'errors');
836 $object->date_echeance = $datedue;
842 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
843 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
845 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
846 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
867 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"CorrectInvoice")),
null,
'errors');
870 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
875 if (empty($dateinvoice)) {
876 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
886 if (!
GETPOST(
'ref_supplier')) {
887 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplierBill')),
null,
'errors');
895 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
910 $object->date_echeance = $datedue;
916 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
917 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
919 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
920 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
925 $object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice :
'';
934 if (
GETPOSTINT(
'invoiceAvoirWithLines') == 1 && $id > 0) {
936 if ($facture_source->fetch(
$object->fk_facture_source) > 0) {
939 foreach ($facture_source->lines as $line) {
941 if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
945 $line->fk_facture_fourn =
$object->id;
946 $line->fk_parent_line = $fk_parent_line;
948 $line->subprice = -$line->subprice;
949 $line->pa_ht = -((float) $line->pa_ht);
950 $line->total_ht = -$line->total_ht;
951 $line->total_tva = -$line->total_tva;
952 $line->total_ttc = -$line->total_ttc;
953 $line->total_localtax1 = -$line->total_localtax1;
954 $line->total_localtax2 = -$line->total_localtax2;
956 $result = $line->insert();
961 if ($result > 0 && $line->product_type == 9) {
962 $fk_parent_line = $result;
970 if (
GETPOSTINT(
'invoiceAvoirWithPaymentRestAmount') == 1 &&
$id > 0) {
972 if ($facture_source->fetch(
$object->fk_facture_source) > 0) {
973 $totalpaid = $facture_source->getSommePaiement();
974 $totalcreditnotes = $facture_source->getSumCreditNotesUsed();
975 $totaldeposits = $facture_source->getSumDepositsUsed();
976 $remain_to_pay = abs($facture_source->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits);
977 $desc = $langs->trans(
'invoiceAvoirLineWithPaymentRestAmount');
978 $retAddLine =
$object->addline($desc, $remain_to_pay, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
'TTC');
980 if ($retAddLine < 0) {
988 if (empty($dateinvoice)) {
990 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
1000 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
1010 $object->note_public = trim(
GETPOST(
'note_public',
'restricthtml'));
1011 $object->note_private = trim(
GETPOST(
'note_private',
'restricthtml'));
1022 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1023 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1027 $object->fac_rec = $fac_recid;
1029 $fac_rec->fetch(
$object->fac_rec);
1030 $fac_rec->fetch_lines();
1031 $object->lines = $fac_rec->lines;
1038 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
1043 if (empty($dateinvoice)) {
1044 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
1054 if (!
GETPOST(
'ref_supplier')) {
1055 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplierBill')),
null,
'errors');
1063 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"InvoiceSubtype")),
null,
'errors');
1080 $object->date_echeance = $datedue;
1086 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
1087 $object->fk_project = ($tmpproject > 0) ? $tmpproject : null;
1089 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1090 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1095 if (empty(
$object->date_echeance)) {
1096 $object->date_echeance =
$object->calculate_date_lim_reglement();
1102 if (!$error &&
GETPOST(
'origin',
'alpha') &&
GETPOST(
'originid')) {
1104 $element = $subelement =
GETPOST(
'origin',
'alpha');
1112 if ($element ==
'order') {
1113 $element = $subelement =
'commande';
1115 if ($element ==
'propal') {
1116 $element =
'comm/propal';
1117 $subelement =
'propal';
1119 if ($element ==
'contract') {
1120 $element = $subelement =
'contrat';
1122 if ($element ==
'order_supplier') {
1124 $subelement =
'fournisseur.commande';
1126 if ($element ==
'project') {
1127 $element =
'projet';
1133 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
1134 $classname = ucfirst($subelement);
1135 if ($classname ==
'Fournisseur.commande') {
1136 $classname =
'CommandeFournisseur';
1138 $objectsrc =
new $classname($db);
1139 $objectsrc->fetch($originid);
1140 $objectsrc->fetch_thirdparty();
1147 if (
$object->origin ==
'reception') {
1148 $objectsrc->fetchObjectLinked();
1150 if (count($objectsrc->linkedObjectsIds[
'order_supplier']) > 0) {
1151 foreach ($objectsrc->linkedObjectsIds[
'order_supplier'] as $key => $value) {
1152 $object->linkedObjectsIds[
'order_supplier'] = $value;
1161 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
1162 $classname = ucfirst($subelement);
1163 if ($classname ==
'Fournisseur.commande') {
1164 $classname =
'CommandeFournisseur';
1166 $srcobject =
new $classname($db);
1168 $result = $srcobject->fetch(
GETPOSTINT(
'originid'));
1171 $typeamount =
GETPOST(
'typedeposit',
'alpha');
1176 $amountdeposit = array();
1178 if ($typeamount ==
'amount') {
1179 $amount = $valuedeposit;
1181 $amount = $srcobject->total_ttc * ((float) $valuedeposit / 100);
1184 $TTotalByTva = array();
1185 foreach ($srcobject->lines as &$line) {
1186 if (!empty($line->special_code)) {
1189 $TTotalByTva[$line->tva_tx] += $line->total_ttc;
1191 '@phan-var-force array<string,float> $TTotalByTva';
1193 $amount_ttc_diff = 0.;
1194 foreach ($TTotalByTva as $tva => &$total) {
1195 $coef = $total / $srcobject->total_ttc;
1196 $am = $amount * $coef;
1197 $amount_ttc_diff += $am;
1198 $amountdeposit[$tva] += $am / (1 + (float) $tva / 100);
1201 if ($typeamount ==
'amount') {
1202 $amountdeposit[0] = $valuedeposit;
1203 } elseif ($typeamount ==
'variable') {
1206 $lines = $srcobject->lines;
1207 $numlines = count($lines);
1208 for ($i = 0; $i < $numlines; $i++) {
1210 if (empty($lines[$i]->qty)) {
1213 if (!empty($lines[$i]->special_code)) {
1217 $totalamount += $lines[$i]->total_ht;
1218 $tva_tx = $lines[$i]->tva_tx;
1219 $amountdeposit[$tva_tx] += ($lines[$i]->total_ht * (float) $valuedeposit) / 100;
1223 if ($totalamount == 0) {
1224 $amountdeposit[0] = 0;
1229 $amountdeposit[0] = 0;
1233 $amount_ttc_diff = $amountdeposit[0];
1236 foreach ($amountdeposit as $tva => $amount) {
1237 if (empty($amount)) {
1242 'amount' =>
'FixAmount',
1243 'variable' =>
'VarAmount'
1245 $descline =
'(DEPOSIT)';
1247 if ($typeamount ==
'amount') {
1248 $descline .=
' ('.price($valuedeposit, 0, $langs, 0, - 1, - 1, (!empty(
$object->multicurrency_code) ?
$object->multicurrency_code :
$conf->currency)).
')';
1249 } elseif ($typeamount ==
'variable') {
1250 $descline .=
' ('.$valuedeposit.
'%)';
1253 $descline .=
' - '.$srcobject->ref;
1283 $diff =
$object->total_ttc - $amount_ttc_diff;
1287 $subprice_diff =
$object->lines[0]->subprice - $diff / (1 +
$object->lines[0]->tva_tx / 100);
1293 $object->lines[0]->localtax1_tx,
1294 $object->lines[0]->localtax2_tx,
1296 $object->lines[0]->fk_product,
1299 $object->lines[0]->product_type,
1300 $object->lines[0]->remise_percent,
1302 $object->lines[0]->date_start,
1311 } elseif ($result > 0) {
1312 $lines = $srcobject->lines;
1313 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1314 $srcobject->fetch_lines();
1315 $lines = $srcobject->lines;
1318 $num = count($lines);
1319 for ($i = 0; $i < $num; $i++) {
1320 if (!in_array($lines[$i]->
id, $selectedLines)) {
1324 $desc = ($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->product_label);
1325 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
1328 if (method_exists($lines[$i],
'fetch_optionals')) {
1329 $lines[$i]->fetch_optionals();
1334 $date_start = $lines[$i]->date_debut_prevue;
1335 if ($lines[$i]->date_debut_reel) {
1336 $date_start = $lines[$i]->date_debut_reel;
1338 if ($lines[$i]->date_start) {
1339 $date_start = $lines[$i]->date_start;
1341 $date_end = $lines[$i]->date_fin_prevue;
1342 if ($lines[$i]->date_fin_reel) {
1343 $date_end = $lines[$i]->date_fin_reel;
1345 if ($lines[$i]->date_end) {
1346 $date_end = $lines[$i]->date_end;
1350 $object->special_code = $lines[$i]->special_code;
1355 $pu_currency = $lines[$i]->multicurrency_subprice;
1357 $pu = $lines[$i]->subprice;
1366 $lines[$i]->localtax1_tx,
1367 $lines[$i]->localtax2_tx,
1369 $lines[$i]->fk_product,
1370 $lines[$i]->remise_percent,
1374 $lines[$i]->info_bits,
1379 $lines[$i]->array_options,
1380 $lines[$i]->fk_unit,
1383 $lines[$i]->ref_supplier,
1384 $lines[$i]->special_code
1401 } elseif (!$error) {
1411 $langs->load(
"errors");
1421 $outputlangs = $langs;
1422 $result =
$object->generateDocument(
$object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1429 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1432 } elseif ($action ==
'updateline' && $usercancreate) {
1436 if (!
$object->fetch($id) > 0) {
1442 $tva_tx = str_replace(
'*',
'', $tva_tx);
1444 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_subprice') !=
'') {
1446 $price_base_type =
'HT';
1449 $price_base_type =
'TTC';
1452 if (
GETPOST(
'productid') > 0) {
1454 if (
getDolGlobalInt(
'SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY') == 1) {
1456 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1461 $prod->fetch(
GETPOST(
'productid'));
1462 $label = $prod->description;
1463 if (trim(
GETPOST(
'product_desc',
'restricthtml')) != trim($label)) {
1464 $label =
GETPOST(
'product_desc',
'restricthtml');
1467 $type = $prod->type;
1469 $label =
GETPOST(
'product_desc',
'restricthtml');
1478 if (preg_match(
'/\*/', $tva_tx)) {
1483 $tva_tx = str_replace(
'*',
'', $tva_tx);
1491 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1492 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line);
1494 if (is_array($extralabelsline)) {
1495 foreach ($extralabelsline as $key => $value) {
1496 unset($_POST[
"options_".$key]);
1500 $result =
$object->updateline(
1522 unset($_POST[
'label']);
1523 unset($_POST[
'fourn_ref']);
1524 unset($_POST[
'date_starthour']);
1525 unset($_POST[
'date_startmin']);
1526 unset($_POST[
'date_startsec']);
1527 unset($_POST[
'date_startday']);
1528 unset($_POST[
'date_startmonth']);
1529 unset($_POST[
'date_startyear']);
1530 unset($_POST[
'date_endhour']);
1531 unset($_POST[
'date_endmin']);
1532 unset($_POST[
'date_endsec']);
1533 unset($_POST[
'date_endday']);
1534 unset($_POST[
'date_endmonth']);
1535 unset($_POST[
'date_endyear']);
1536 unset($_POST[
'price_ttc']);
1537 unset($_POST[
'price_ht']);
1544 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') && (
GETPOST(
'alldate_start',
'alpha') ||
GETPOST(
'alldate_end',
'alpha')) && $usercancreate) {
1548 foreach (
$object->lines as $line) {
1549 if ($line->product_type == 1) {
1550 $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);
1553 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') !=
'' && $usercancreate) {
1555 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
1556 $vat_rate = str_replace(
'*',
'', $vat_rate);
1559 foreach (
$object->lines as $line) {
1560 $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);
1562 } elseif ($action ==
'addline' && $usercancreate) {
1571 $ret =
$object->fetch_thirdparty();
1573 $langs->load(
'errors');
1578 $product_desc = (GETPOSTISSET(
'dp_desc') ?
GETPOST(
'dp_desc',
'restricthtml') :
'');
1582 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
1583 if ($prod_entry_mode ==
'free') {
1594 $price_ttc_devise =
price2num(
GETPOST(
'multicurrency_price_ttc'),
'CU', 2);
1597 $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ?
price2num(
GETPOST(
'remise_percent'.$predef,
'alpha'),
'', 2) : 0);
1598 if (empty($remise_percent)) {
1599 $remise_percent = 0;
1603 $extralabelsline = $extrafields->fetch_name_optionals_label(
$object->table_element_line);
1604 $array_options = $extrafields->getOptionalsFromPost(
$object->table_element_line, $predef);
1606 if (is_array($extralabelsline)) {
1608 foreach ($extralabelsline as $key => $value) {
1609 unset($_POST[
"options_".$key]);
1613 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
1614 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1617 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
1618 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
1621 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
1622 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
1625 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
1626 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
1629 if (!
GETPOST(
'qty',
'alpha')) {
1630 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1634 if (!$error && isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
1635 if ($combinations =
GETPOST(
'combinations',
'array')) {
1639 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1640 $idprod = $res->fk_product_child;
1642 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1648 if ($prod_entry_mode !=
'free' && empty($error)) {
1652 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
1657 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
1659 $res = $productsupplier->fetch($idprod);
1662 if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
1664 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1665 if ($productsupplier->fourn_socid != $socid) {
1666 $productsupplier->ref_supplier =
'';
1669 $fksoctosearch =
$object->thirdparty->id;
1670 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1672 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
1673 $qtytosearch = $qty;
1675 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
1676 $res = $productsupplier->fetch($idprod);
1680 $label = $productsupplier->label;
1683 $outputlangs = $langs;
1685 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1686 $newlang =
GETPOST(
'lang_id',
'aZ09');
1688 if (empty($newlang)) {
1689 $newlang =
$object->thirdparty->default_lang;
1691 if (!empty($newlang)) {
1693 $outputlangs->setDefaultLang($newlang);
1695 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
1697 $desc = $productsupplier->description;
1700 if (!empty($productsupplier->desc_supplier) &&
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
1701 $desc = $productsupplier->desc_supplier;
1705 if (trim($product_desc) == trim($desc) &&
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
1709 $desc = $product_desc;
1711 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
1715 $ref_supplier = $productsupplier->ref_supplier;
1718 if (!GETPOSTISSET(
'tva_tx')) {
1719 $tmpidprodfournprice =
GETPOST(
'idprodfournprice',
'alpha');
1720 if (is_numeric($tmpidprodfournprice) && (
int) $tmpidprodfournprice > 0) {
1721 $tmpidprodfournprice = (int) $tmpidprodfournprice;
1723 $tmpidprodfournprice = 0;
1729 if (empty($tva_tx) || empty($tva_npr)) {
1735 $type = $productsupplier->type;
1736 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1737 $price_base_type =
'HT';
1739 $pu_devise =
price2num($price_ht_devise,
'CU');
1740 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
1741 $price_base_type =
'TTC';
1743 $pu_devise =
price2num($price_ttc_devise,
'CU');
1745 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
1746 if (empty(
$object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code !=
$object->multicurrency_code)) {
1747 $pu = $productsupplier->fourn_pu;
1750 $pu = $productsupplier->fourn_pu;
1751 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
1755 $ref_supplier = $productsupplier->ref_supplier;
1776 min($rank, count(
$object->lines) + 1),
1779 $productsupplier->fk_unit,
1782 GETPOST(
'fourn_ref',
'alpha'),
1786 if ($idprod == -99 || $idprod == 0) {
1789 $langs->load(
"errors");
1790 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
1792 if ($idprod == -1) {
1795 $langs->load(
"errors");
1796 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
1798 } elseif (empty($error)) {
1799 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
1800 $tva_tx = str_replace(
'*',
'', $tva_tx);
1801 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1802 $desc = $product_desc;
1804 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1806 $fk_unit =
GETPOST(
'units',
'alpha');
1808 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
1816 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1820 $pu_ht =
price2num((
float) $pu_ttc / (1 + ((
float) $tva_tx / 100)),
'MU');
1822 $price_base_type =
'HT';
1823 $pu_devise =
price2num($price_ht_devise,
'CU');
1825 $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);
1829 if (!$error && $result > 0) {
1834 $outputlangs = $langs;
1837 $newlang =
GETPOST(
'lang_id',
'aZ09');
1840 $newlang =
$object->thirdparty->default_lang;
1842 if (!empty($newlang)) {
1844 $outputlangs->setDefaultLang($newlang);
1849 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1855 unset($_POST [
'prod_entry_mode']);
1857 unset($_POST[
'qty']);
1858 unset($_POST[
'type']);
1859 unset($_POST[
'remise_percent']);
1860 unset($_POST[
'pu']);
1861 unset($_POST[
'price_ht']);
1862 unset($_POST[
'multicurrency_price_ht']);
1863 unset($_POST[
'price_ttc']);
1864 unset($_POST[
'fourn_ref']);
1865 unset($_POST[
'tva_tx']);
1866 unset($_POST[
'label']);
1867 unset($localtax1_tx);
1868 unset($localtax2_tx);
1869 unset($_POST[
'np_marginRate']);
1870 unset($_POST[
'np_markRate']);
1871 unset($_POST[
'dp_desc']);
1872 unset($_POST[
'idprodfournprice']);
1873 unset($_POST[
'units']);
1875 unset($_POST[
'date_starthour']);
1876 unset($_POST[
'date_startmin']);
1877 unset($_POST[
'date_startsec']);
1878 unset($_POST[
'date_startday']);
1879 unset($_POST[
'date_startmonth']);
1880 unset($_POST[
'date_startyear']);
1881 unset($_POST[
'date_endhour']);
1882 unset($_POST[
'date_endmin']);
1883 unset($_POST[
'date_endsec']);
1884 unset($_POST[
'date_endday']);
1885 unset($_POST[
'date_endmonth']);
1886 unset($_POST[
'date_endyear']);
1893 } elseif ($action ==
'classin' && $usercancreate) {
1895 $result =
$object->setProject($projectid);
1896 } elseif ($action ==
'confirm_edit' && $confirm ==
'yes' && $usercancreate) {
1900 $totalpaid =
$object->getSommePaiement();
1901 $resteapayer =
$object->total_ttc - $totalpaid;
1904 $ventilExportCompta =
$object->getVentilExportCompta();
1906 if (!$ventilExportCompta) {
1909 $idwarehouse =
GETPOST(
'idwarehouse');
1913 $qualified_for_stock_change = 0;
1915 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
1917 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
1921 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
1922 $langs->load(
"stocks");
1923 if (!$idwarehouse || $idwarehouse == -1) {
1925 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1930 $object->setDraft($user, $idwarehouse);
1934 $outputlangs = $langs;
1937 $newlang =
GETPOST(
'lang_id',
'aZ09');
1940 $newlang =
$object->thirdparty->default_lang;
1942 if (!empty($newlang)) {
1944 $outputlangs->setDefaultLang($newlang);
1949 $result =
$object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1958 } elseif ($action ==
'reopen' && $usercancreate) {
1960 $result =
$object->fetch($id);
1963 $result =
$object->setUnpaid($user);
1965 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
1974 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1977 $triggersendname =
'BILL_SUPPLIER_SENTBYMAIL';
1979 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
1980 $trackid =
'sinv'.$object->id;
1981 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1984 $upload_dir =
$conf->fournisseur->facture->dir_output;
1985 $permissiontoadd = $usercancreate;
1986 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1989 if ($action ==
'calculate' && $usercancreate) {
1990 $calculationrule =
GETPOST(
'calculationrule');
1994 $result =
$object->update_price(0, (($calculationrule ==
'totalofround') ?
'0' :
'1'), 0,
$object->thirdparty);
2000 if ($action ==
'update_extras' && $usercancreate) {
2004 $ret = $extrafields->setOptionalsFromPost(
null,
$object,
GETPOST(
'attribute',
'restricthtml'));
2011 $result =
$object->insertExtraFields(
'BILL_SUPPLIER_MODIFY');
2019 $action =
'edit_extras';
2024 if ($action ==
'addcontact' && $usercancreate) {
2025 $result =
$object->fetch($id);
2027 if ($result > 0 && $id > 0) {
2030 $result =
$object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
2034 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
2037 if (
$object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
2038 $langs->load(
"errors");
2039 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
2044 } elseif ($action ==
'swapstatut' && $usercancreate) {
2051 } elseif ($action ==
'deletecontact' && $usercancreate) {
2057 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id);
2071$form =
new Form($db);
2073$bankaccountstatic =
new Account($db);
2075if (isModEnabled(
'project')) {
2081$title =
$object->ref.
" - ".$langs->trans(
'Card');
2082if ($action ==
'create') {
2083 $title = $langs->trans(
"NewSupplierInvoice");
2085$help_url =
'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
2086llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-fourn-facture page-card');
2089if ($action ==
'create') {
2091 $selectedLines = array();
2093 print
load_fiche_titre($langs->trans(
'NewSupplierInvoice'),
'',
'supplier_invoice');
2097 $currency_code =
$conf->currency;
2103 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
2104 $currency_code = $societe->multicurrency_code;
2108 if (!empty($origin) && !empty($originid)) {
2110 $element = $subelement = $origin;
2112 if ($element ==
'project') {
2113 $projectid = $originid;
2114 $element =
'projet';
2118 if ($element ==
'order') {
2119 $element = $subelement =
'commande';
2121 if ($element ==
'propal') {
2122 $element =
'comm/propal';
2123 $subelement =
'propal';
2125 if ($element ==
'contract') {
2126 $element = $subelement =
'contrat';
2128 if ($element ==
'order_supplier') {
2130 $subelement =
'fournisseur.commande';
2133 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
2134 $classname = ucfirst($subelement);
2135 if ($classname ==
'Fournisseur.commande') {
2136 $classname =
'CommandeFournisseur';
2138 $objectsrc =
new $classname($db);
2139 '@phan-var-force Project|Commande|Propal|Facture|Contrat|CommandeFournisseur|CommonObject $objectsrc';
2140 $objectsrc->fetch($originid);
2141 $objectsrc->fetch_thirdparty();
2143 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
2145 $soc = $objectsrc->thirdparty;
2147 $cond_reglement_id = 0;
2148 $mode_reglement_id = 0;
2152 $transport_mode_id = 0;
2155 if (!empty($objectsrc->cond_reglement_id)) {
2156 $cond_reglement_id = $objectsrc->cond_reglement_id;
2158 if (!empty($objectsrc->mode_reglement_id)) {
2159 $mode_reglement_id = $objectsrc->mode_reglement_id;
2161 if (!empty($objectsrc->fk_account)) {
2162 $fk_account = $objectsrc->fk_account;
2164 if (!empty($objectsrc->transport_mode_id)) {
2165 $transport_mode_id = $objectsrc->transport_mode_id;
2168 if (empty($cond_reglement_id)
2169 || empty($mode_reglement_id)
2170 || empty($fk_account)
2171 || empty($transport_mode_id)
2173 if ($origin ==
'reception') {
2175 if (!isset($objectsrc->supplier_order)) {
2176 $objectsrc->fetch_origin();
2179 if (!empty($objectsrc->origin_object)) {
2180 $originObject = $objectsrc->origin_object;
2181 if (empty($cond_reglement_id) && !empty($originObject->cond_reglement_id)) {
2182 $cond_reglement_id = $originObject->cond_reglement_id;
2184 if (empty($mode_reglement_id) && !empty($originObject->mode_reglement_id)) {
2185 $mode_reglement_id = $originObject->mode_reglement_id;
2187 if (empty($fk_account) && !empty($originObject->fk_account)) {
2188 $fk_account = $originObject->fk_account;
2190 if (empty($transport_mode_id) && !empty($originObject->transport_mode_id)) {
2191 $transport_mode_id = $originObject->transport_mode_id;
2198 if (empty($cond_reglement_id) && !empty($soc->cond_reglement_supplier_id)) {
2199 $cond_reglement_id = $soc->cond_reglement_supplier_id;
2201 if (empty($mode_reglement_id) && !empty($soc->mode_reglement_supplier_id)) {
2202 $mode_reglement_id = $soc->mode_reglement_supplier_id;
2204 if (empty($fk_account) && !empty($soc->fk_account)) {
2205 $fk_account = $soc->fk_account;
2207 if (empty($transport_mode_id) && !empty($soc->transport_mode_id)) {
2208 $transport_mode_id = $soc->transport_mode_id;
2213 if (isModEnabled(
"multicurrency")) {
2214 if (!empty($objectsrc->multicurrency_code)) {
2215 $currency_code = $objectsrc->multicurrency_code;
2217 if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
2218 $currency_tx = $objectsrc->multicurrency_tx;
2223 $dateinvoice = ($datetmp ==
'' ? (!
getDolGlobalString(
'MAIN_AUTOFILL_DATE') ? -1 :
'') : $datetmp);
2225 $datedue = ($datetmp ==
'' ? -1 : $datetmp);
2228 $objectsrc->fetch_optionals();
2229 $object->array_options = $objectsrc->array_options;
2231 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
2232 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
2233 $vat_reverse_charge = (empty($societe) ?
'' : $societe->vat_reverse_charge);
2234 $transport_mode_id = !empty($societe->transport_mode_supplier_id) ? $societe->transport_mode_supplier_id : 0;
2235 $fk_account = !empty($societe->fk_account) ? $societe->fk_account : 0;
2237 $dateinvoice = ($datetmp ==
'' ? (
getDolGlobalInt(
'MAIN_AUTOFILL_DATE') ?
'' : -1) : $datetmp);
2239 $datedue = ($datetmp ==
'' ? -1 : $datetmp);
2241 if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
2242 $currency_code = $societe->multicurrency_code;
2247 if (empty($cond_reglement_id)) {
2248 $cond_reglement_id =
GETPOST(
"cond_reglement_id");
2252 if (empty($mode_reglement_id)) {
2253 $mode_reglement_id =
GETPOST(
"mode_reglement_id");
2257 if (!
GETPOST(
'changecompany')) {
2258 if (GETPOSTISSET(
'cond_reglement_id')) {
2259 $cond_reglement_id =
GETPOSTINT(
'cond_reglement_id');
2261 if (GETPOSTISSET(
'mode_reglement_id')) {
2262 $mode_reglement_id =
GETPOSTINT(
'mode_reglement_id');
2264 if (GETPOSTISSET(
'cond_reglement_id')) {
2269 $note_public =
$object->getDefaultCreateValueFor(
'note_public', ((!empty($origin) && !empty($originid) && is_object($objectsrc) &&
getDolGlobalString(
'FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM')) ? $objectsrc->note_public : null));
2270 $note_private =
$object->getDefaultCreateValueFor(
'note_private', ((!empty($origin) && !empty($originid) && is_object($objectsrc) &&
getDolGlobalString(
'FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM')) ? $objectsrc->note_private : null));
2272 if ($origin ==
'contrat') {
2273 $langs->load(
"admin");
2274 $text = $langs->trans(
"ToCreateARecurringInvoice");
2275 $text .=
' '.$langs->trans(
"ToCreateARecurringInvoiceGene", $langs->transnoentitiesnoconv(
"MenuFinancial"), $langs->transnoentitiesnoconv(
"SupplierBills"), $langs->transnoentitiesnoconv(
"ListOfTemplates"));
2277 $text .=
' '.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name'));
2279 print
info_admin($text, 0, 0,
'0',
'opacitymedium').
'<br>';
2282 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2283 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2284 print
'<input type="hidden" name="action" value="add">';
2285 print
'<input type="hidden" name="changecompany" value="0">';
2287 if (!empty($societe->id) && $societe->id > 0) {
2288 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">'.
"\n";
2290 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
2291 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
2292 if (!empty($currency_tx)) {
2293 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
2295 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2300 $parameters = array();
2302 $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierInvoice', $parameters,
$object, $action);
2303 if (empty($reshook)) {
2304 print
'<table class="border centpercent">';
2307 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
2311 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2312 $invoice_predefined->fetch($fac_recid);
2316 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
2319 if (!empty($societe->id) && $societe->id > 0 && ($fac_recid <= 0 || !empty($invoice_predefined->frequency))) {
2320 $absolute_discount = $societe->getAvailableDiscounts(
null,
'', 0, 1);
2321 print $societe->getNomUrl(1,
'supplier');
2322 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
2324 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
2325 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');
2328 print
'<script type="text/javascript">
2329 $(document).ready(function() {
2330 $("#socid").change(function() {
2331 console.log("We have changed the company - Reload page");
2333 $("input[name=action]").val("create");
2334 $("input[name=changecompany]").val("1");
2335 $("form[name=add]").submit();
2340 if ($fac_recid <= 0) {
2341 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>';
2347 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2348 $invoice_predefined->fetch($fac_recid);
2350 $dateinvoice = $invoice_predefined->date_when;
2351 if (empty($projectid)) {
2352 $projectid = $invoice_predefined->fk_project;
2354 $cond_reglement_id = $invoice_predefined->cond_reglement_id;
2355 $mode_reglement_id = $invoice_predefined->mode_reglement_id;
2356 $fk_account = $invoice_predefined->fk_account;
2357 $note_public = $invoice_predefined->note_public;
2358 $note_private = $invoice_predefined->note_private;
2360 if (!empty($invoice_predefined->multicurrency_code)) {
2361 $currency_code = $invoice_predefined->multicurrency_code;
2363 if (!empty($invoice_predefined->multicurrency_tx)) {
2364 $currency_tx = $invoice_predefined->multicurrency_tx;
2367 $sql =
'SELECT r.rowid, r.titre as title, r.total_ttc';
2368 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as r';
2369 $sql .=
' WHERE r.fk_soc = '. (int) $invoice_predefined->socid;
2371 $resql = $db->query($sql);
2373 $num = $db->num_rows($resql);
2377 print
'<tr><td>'.$langs->trans(
'CreateFromRepeatableInvoice').
'</td><td>';
2379 print
'<select class="flat" id="fac_rec" name="fac_rec">';
2380 print
'<option value="0" selected></option>';
2382 $objp = $db->fetch_object($resql);
2383 print
'<option value="'.$objp->rowid.
'"';
2384 if ($fac_recid == $objp->rowid) {
2386 $exampletemplateinvoice->fetch($fac_recid);
2388 print
'>'.$objp->title.
' ('.
price($objp->total_ttc).
' '.$langs->trans(
"TTC").
')</option>';
2394 print
'<script type="text/javascript">
2395 $(document).ready(function() {
2396 $("#fac_rec").change(function() {
2397 console.log("We have changed the template invoice - Reload page");
2399 $("input[name=action]").val("create");
2400 $("form[name=add]").submit();
2414 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"';
2415 if (!empty($societe->id) && $societe->id > 0) {
2421 print
'<tr><td class="tdtop fieldrequired">'.$langs->trans(
'Type').
'</td><td>';
2423 print
'<div class="tagtable">'.
"\n";
2426 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2427 $tmp =
'<input type="radio" id="radio_standard" name="type" value="0"'.(GETPOSTINT(
'type') ?
'' :
'checked').
'> ';
2428 $desc = $form->textwithpicto($tmp.
'<label for="radio_standard">'.$langs->trans(
"InvoiceStandardAsk").
'</label>', $langs->transnoentities(
"InvoiceStandardDesc"), 1,
'help',
'', 0, 3);
2430 print
'</div></div>';
2432 if (empty($origin) || ($origin ==
'order_supplier' && !empty($originid))) {
2435 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2436 $tmp =
'<input type="radio" id="radio_deposit" name="type" value="3"' . (
GETPOSTINT(
'type') == 3 ?
' checked' :
'') .
'> ';
2437 print
'<script type="text/javascript">
2438 jQuery(document).ready(function() {
2439 jQuery("#typestandardinvoice, #valuestandardinvoice").click(function() {
2440 jQuery("#radio_standard").prop("checked", true);
2442 jQuery("#typedeposit, #valuedeposit").click(function() {
2443 jQuery("#radio_deposit").prop("checked", true);
2445 jQuery("#typedeposit").change(function() {
2446 console.log("We change type of down payment");
2447 jQuery("#radio_deposit").prop("checked", true);
2448 setRadioForTypeOfInvoice();
2450 jQuery("#radio_standard, #radio_deposit, #radio_replacement, #radio_template").change(function() {
2451 setRadioForTypeOfInvoice();
2453 function setRadioForTypeOfInvoice() {
2454 console.log("Change radio");
2455 if (jQuery("#radio_deposit").prop("checked") && (jQuery("#typedeposit").val() == \'amount\' || jQuery("#typedeposit").val() == \'variable\')) {
2456 jQuery(".checkforselect").prop("disabled", true);
2457 jQuery(".checkforselect").prop("checked", false);
2459 jQuery(".checkforselect").prop("disabled", false);
2460 jQuery(".checkforselect").prop("checked", true);
2466 $tmp = $tmp.
'<label for="radio_deposit" >'.$langs->trans(
"InvoiceDeposit").
'</label>';
2468 $desc = $form->textwithpicto($tmp, $langs->transnoentities(
"InvoiceDepositDesc"), 1,
'help',
'', 0, 3);
2469 print
'<table class="nobordernopadding"><tr>';
2473 if ($origin ==
'order_supplier') {
2474 print
'<td class="nowrap" style="padding-left: 15px">';
2476 'amount' => $langs->transnoentitiesnoconv(
'FixAmount', $langs->transnoentitiesnoconv(
'Deposit')),
2477 'variable' => $langs->transnoentitiesnoconv(
'VarAmountOneLine', $langs->transnoentitiesnoconv(
'Deposit')),
2478 'variablealllines' => $langs->transnoentitiesnoconv(
'VarAmountAllLines')
2480 print $form->selectarray(
'typedeposit', $arraylist,
GETPOST(
'typedeposit',
'aZ09'), 0, 0, 0,
'', 1);
2482 print
'<td class="nowrap" style="padding-left: 5px">';
2483 print
'<span class="opacitymedium paddingleft">'.$langs->trans(
"AmountOrPercent").
'</span><input type="text" id="valuedeposit" name="valuedeposit" class="width75 right" value="' .
GETPOSTINT(
'valuedeposit') .
'"/>';
2486 print
'</tr></table>';
2488 print
'</div></div>';
2557 if (empty($origin)) {
2558 if (!empty($societe->id) && $societe->id > 0) {
2562 $facids = $facturestatic->list_qualified_avoir_supplier_invoices($societe->id);
2569 foreach ($facids as $key => $valarray) {
2570 $newinvoice_static->id = $key;
2571 $newinvoice_static->ref = $valarray [
'ref'];
2572 $newinvoice_static->status = $valarray [
'status'];
2573 $newinvoice_static->statut = $valarray [
'status'];
2574 $newinvoice_static->type = $valarray [
'type'];
2575 $newinvoice_static->paid = $valarray [
'paye'];
2576 $newinvoice_static->paye = $valarray [
'paye'];
2578 $optionsav .=
'<option value="'.$key.
'"';
2580 $optionsav .=
' selected';
2583 $optionsav .= $newinvoice_static->ref;
2584 $optionsav .=
' ('.$newinvoice_static->getLibStatut(1, $valarray [
'paymentornot']).
')';
2585 $optionsav .=
'</option>';
2588 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2589 $tmp =
'<input type="radio" id="radio_creditnote" name="type" value="2"'.(GETPOST(
'type') == 2 ?
' checked' :
'');
2591 $tmp .=
' disabled';
2595 print
'<script type="text/javascript">
2596 jQuery(document).ready(function() {
2597 if (! jQuery("#radio_creditnote").is(":checked"))
2599 jQuery("#credit_note_options").hide();
2601 jQuery("#radio_creditnote").click(function() {
2602 jQuery("#credit_note_options").show();
2604 jQuery("#radio_standard, #radio_replacement, #radio_deposit").click(function() {
2605 jQuery("#credit_note_options").hide();
2609 $text = $tmp.
'<label for="radio_creditnote">'.$langs->transnoentities(
"InvoiceAvoirAsk").
'</label> ';
2611 $text .=
'<select class="flat valignmiddle" name="fac_avoir" id="fac_avoir"';
2613 $text .=
' disabled';
2617 $text .=
'<option value="-1"></option>';
2618 $text .= $optionsav;
2620 $text .=
'<option value="-1">'.$langs->trans(
"NoInvoiceToCorrect").
'</option>';
2622 $text .=
'</select>';
2623 $desc = $form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2626 print
'<div id="credit_note_options" class="clearboth">';
2627 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' :
'').
' /> ';
2628 print
'<label for="invoiceAvoirWithLines">'.$langs->trans(
'invoiceAvoirWithLines').
"</label>";
2629 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' :
'').
' /> ';
2630 print
'<label for="invoiceAvoirWithPaymentRestAmount">'.$langs->trans(
'invoiceAvoirWithPaymentRestAmount').
"</label>";
2633 print
'</div></div>';
2636 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2638 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="0" disabled> ';
2640 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="2"> ';
2642 $text = $tmp.$langs->trans(
"InvoiceAvoir").
' ';
2643 $text .=
'<span class="opacitymedium">('.$langs->trans(
"YouMustCreateInvoiceFromSupplierThird").
')</span> ';
2644 $desc = $form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2646 print
'</div></div>'.
"\n";
2657 print
'<tr><td class="fieldrequired">'.$langs->trans(
'InvoiceSubtype').
'</td><td colspan="2">';
2658 print $form->getSelectInvoiceSubtype(
GETPOST(
'subtype'),
'subtype', 1, 0,
'');
2662 if (!empty($societe->id) && $societe->id > 0) {
2664 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2666 $thirdparty = $societe;
2668 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$societe->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
2669 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2675 print
'<tr><td>'.$langs->trans(
'Label').
'</td><td><input class="minwidth200" name="label" value="'.
dol_escape_htmltag(
GETPOST(
'label')).
'" type="text"></td></tr>';
2678 print
'<tr><td class="fieldrequired">'.$langs->trans(
'DateInvoice').
'</td><td>';
2679 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2680 print $form->selectDate($dateinvoice,
'', 0, 0, 0,
"add", 1, 1);
2684 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2685 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2686 print $form->getSelectConditionsPaiements($cond_reglement_id,
'cond_reglement_id', -1, 1);
2691 print
'<tr><td>'.$langs->trans(
'DateMaxPayment').
'</td><td>';
2692 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2693 print $form->selectDate($datedue,
'ech', 0, 0, 0,
"add", 1, 1);
2697 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2698 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2699 $form->select_types_paiements($mode_reglement_id,
'mode_reglement_id',
'DBIT', 0, 1, 0, 0, 1,
'maxwidth200 widthcentpercentminusx');
2703 if (isModEnabled(
"bank")) {
2704 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2706 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"').$form->select_comptes($fk_account,
'fk_account', 0,
'', 1,
'', 0,
'maxwidth200 widthcentpercentminusx', 1);
2711 if (isModEnabled(
'project')) {
2714 $langs->load(
'projects');
2715 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
2716 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');
2717 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>';
2722 if (isModEnabled(
'incoterm')) {
2724 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), !empty($objectsrc->label_incoterms) ? $objectsrc->label_incoterms :
'', 1).
'</label></td>';
2725 print
'<td colspan="3" class="maxwidthonsmartphone">';
2726 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2727 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 :
''));
2733 require_once DOL_DOCUMENT_ROOT .
'/core/lib/company.lib.php';
2734 print
'<tr><td>' . $langs->trans(
'VATReverseCharge') .
'</td><td>';
2736 if ($vat_reverse_charge == 1 || $societe->vat_reverse_charge == 1 || ($societe->country_code !=
'FR' &&
isInEEC($societe) && !empty($societe->tva_intra))) {
2737 $vat_reverse_charge = 1;
2739 $vat_reverse_charge = 0;
2742 print
'<input type="checkbox" name="vat_reverse_charge"'. (!empty($vat_reverse_charge) ?
' checked ' :
'') .
'>';
2747 if (isModEnabled(
"multicurrency")) {
2749 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'',
$object, 0).
'</td>';
2750 print
'<td class="maxwidthonsmartphone">';
2751 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
2752 $used_currency_code = $currency_code;
2753 if (!
GETPOST(
'changecompany')) {
2754 $used_currency_code = GETPOSTISSET(
'multicurrency_code') ?
GETPOST(
'multicurrency_code',
'alpha') : $currency_code;
2756 print $form->selectMultiCurrency($used_currency_code,
'multicurrency_code');
2762 if ($fac_recid > 0) {
2763 $dateexample = $dateinvoice;
2764 if (empty($dateexample)) {
2767 $substitutionarray = array(
2768 '__TOTAL_HT__' => $langs->trans(
"AmountHT").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ht).
')',
2769 '__TOTAL_TTC__' => $langs->trans(
"AmountTTC").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ttc).
')',
2770 '__INVOICE_PREVIOUS_MONTH__' => $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m').
')',
2771 '__INVOICE_MONTH__' => $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%m').
')',
2772 '__INVOICE_NEXT_MONTH__' => $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m').
')',
2773 '__INVOICE_PREVIOUS_MONTH_TEXT__' => $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B').
')',
2774 '__INVOICE_MONTH_TEXT__' => $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%B').
')',
2775 '__INVOICE_NEXT_MONTH_TEXT__' => $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B').
')',
2776 '__INVOICE_PREVIOUS_YEAR__' => $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y').
')',
2777 '__INVOICE_YEAR__' => $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%Y').
')',
2778 '__INVOICE_NEXT_YEAR__' => $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y').
')'
2781 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
2782 foreach ($substitutionarray as $key => $val) {
2783 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
2785 $htmltext .=
'</i>';
2789 if (isModEnabled(
'intracommreport')) {
2790 $langs->loadLangs(array(
"intracommreport"));
2791 print
'<!-- If module intracomm on -->'.
"\n";
2792 print
'<tr><td>'.$langs->trans(
'IntracommReportTransportMode').
'</td><td>';
2793 $form->selectTransportMode(GETPOSTISSET(
'transport_mode_id') ?
GETPOST(
'transport_mode_id') : $transport_mode_id,
'transport_mode_id');
2797 if (empty($reshook)) {
2798 print
$object->showOptionals($extrafields,
'create');
2802 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
2804 $doleditor =
new DolEditor(
'note_public', (GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') : $note_public),
'', 80,
'dolibarr_notes',
'In', false, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3,
'90%');
2805 print $doleditor->Create(1);
2811 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
2813 $doleditor =
new DolEditor(
'note_private', (GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') : $note_private),
'', 80,
'dolibarr_notes',
'In', false, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3,
'90%');
2814 print $doleditor->Create(1);
2820 if (!empty($objectsrc) && is_object($objectsrc)) {
2821 print
"\n<!-- ".$classname.
" info -->";
2823 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2824 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2825 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2826 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2827 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2829 $txt = $langs->trans($classname);
2830 if ($classname ==
'CommandeFournisseur') {
2831 $langs->load(
'orders');
2832 $txt = $langs->trans(
"SupplierOrder");
2834 print
'<tr><td>'.$txt.
'</td><td>'.$objectsrc->getNomUrl(1);
2836 $objectsrc->fetchObjectLinked($originid, $origin,
null,
'invoice_supplier');
2838 $invoice_supplier = $objectsrc->linkedObjects[
'invoice_supplier'];
2839 '@phan-var-force null|FactureFournisseur[] $invoice_supplier';
2842 if (is_array($invoice_supplier)) {
2843 $cntinvoice = count($invoice_supplier);
2845 if ($cntinvoice >= 1) {
2847 echo
' ('.$langs->trans(
'LatestRelatedBill').end($invoice_supplier)->getNomUrl(1).
')';
2852 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2853 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2854 if ($mysoc->localtax1_assuj ==
"1" ||
$object->total_localtax1 != 0) {
2855 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2858 if ($mysoc->localtax2_assuj ==
"1" ||
$object->total_localtax2 != 0) {
2859 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2861 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2863 if (isModEnabled(
"multicurrency")) {
2864 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
2865 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
2866 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
2871 $parameters = array();
2872 $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters,
$object, $action);
2873 print $hookmanager->resPrint;
2881 print $form->buttonsSaveCancel(
"CreateDraft");
2884 if (!empty($objectsrc) && is_object($objectsrc)) {
2887 $title = $langs->trans(
'ProductsAndServices');
2890 print
'<div class="div-table-responsive-no-min">';
2891 print
'<table class="noborder centpercent">';
2893 $objectsrc->printOriginLinesList(
'', $selectedLines);
2901 if ($id > 0 || !empty($ref)) {
2907 $productstatic =
new Product($db);
2909 $result =
$object->fetch($id, $ref);
2911 $langs->load(
"errors");
2912 print $langs->trans(
"ErrorRecordNotFound");
2918 $result =
$object->fetch_thirdparty();
2924 $societe =
$object->thirdparty;
2926 $totalpaid =
$object->getSommePaiement();
2927 $totalcreditnotes =
$object->getSumCreditNotesUsed();
2928 $totaldeposits =
$object->getSumDepositsUsed();
2936 $resteapayer =
price2num(
$object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
2939 $multicurrency_resteapayer = 0;
2940 if (isModEnabled(
"multicurrency")) {
2941 $multicurrency_totalpaid =
$object->getSommePaiement(1);
2942 $multicurrency_totalcreditnotes =
$object->getSumCreditNotesUsed(1);
2943 $multicurrency_totaldeposits =
$object->getSumDepositsUsed(1);
2944 $multicurrency_resteapayer =
price2num(
$object->multicurrency_total_ttc - $multicurrency_totalpaid - $multicurrency_totalcreditnotes - $multicurrency_totaldeposits,
'MT');
2948 if ($resteapayer == 0 && $multicurrency_resteapayer != 0 &&
$object->multicurrency_code !=
$conf->currency) {
2949 $resteapayer =
price2num((
float) $multicurrency_resteapayer /
$object->multicurrency_tx,
'MT');
2956 $resteapayeraffiche = $resteapayer;
2959 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2960 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2962 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2963 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2966 $absolute_discount = $societe->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
2967 $absolute_creditnote = $societe->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
2968 $absolute_discount =
price2num($absolute_discount,
'MT');
2969 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2973 $objectidnext =
$object->getIdReplacingInvoice();
2976 $titre = $langs->trans(
'SupplierInvoice');
2978 print
dol_get_fiche_head($head,
'card', $titre, -1,
'supplier_invoice', 0,
'',
'', 0,
'', 1);
2983 if ($action ==
'converttoreduc') {
2986 $type_fac =
'ExcessPaid';
2988 $type_fac =
'CreditNote';
2990 $type_fac =
'Deposit';
2992 $text = $langs->trans(
'ConfirmConvertToReducSupplier', strtolower($langs->transnoentities($type_fac)));
2993 $text .=
'<br>'.$langs->trans(
'ConfirmConvertToReducSupplier2');
2994 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?facid='.
$object->id, $langs->trans(
'ConvertToReduc'), $text,
'confirm_converttoreduc',
'',
"yes", 2);
2998 if ($action ==
'clone') {
3000 $formquestion = array(
3001 array(
'type' =>
'text',
'name' =>
'newsupplierref',
'label' => $langs->trans(
"RefSupplierBill"),
'value' => $langs->trans(
"CopyOf").
' '.
$object->ref_supplier),
3002 array(
'type' =>
'date',
'name' =>
'newdate',
'label' => $langs->trans(
"Date"),
'value' =>
dol_now())
3005 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneInvoice',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1, 250);
3009 if ($action ==
'valid') {
3011 if (preg_match(
'/^[\(]?PROV/i',
$object->ref) || empty(
$object->ref)) {
3013 $numref =
$object->getNextNumRef($societe);
3022 $text = $langs->trans(
'ConfirmValidateBill', $numref);
3030 $formquestion = array();
3032 $qualified_for_stock_change = 0;
3034 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3036 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3039 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3040 $langs->load(
"stocks");
3041 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3044 $warehouse_array = $warehouse->list_array();
3045 if (count($warehouse_array) == 1) {
3047 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3050 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3052 $formquestion = array(
3053 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
3057 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ValidateBill'), $text,
'confirm_valid', $formquestion, 1, 1);
3062 if ($action ==
'edit') {
3063 $formquestion = array();
3065 $qualified_for_stock_change = 0;
3067 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3069 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3071 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3072 $langs->load(
"stocks");
3073 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3076 $warehouse_array = $warehouse->list_array();
3077 if (count($warehouse_array) == 1) {
3079 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3082 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3084 $formquestion = array(
3085 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
3088 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'UnvalidateBill'), $langs->trans(
'ConfirmUnvalidateBill',
$object->ref),
'confirm_edit', $formquestion, 1, 1);
3092 if ($action ==
'paid' && ($resteapayer <= 0 || (
getDolGlobalString(
'SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID') && $resteapayer ==
$object->total_ttc))) {
3093 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidBill',
$object->ref),
'confirm_paid',
'', 0, 1);
3096 if ($action ==
'paid' && $resteapayer > 0 && (!
getDolGlobalString(
'SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID') || $resteapayer !=
$object->total_ttc)) {
3100 $close[$i][
'code'] =
'discount_vat';
3102 $close[$i][
'code'] =
'badsupplier';
3104 $close[$i][
'code'] =
'other';
3108 $close[$i][
'label'] = $langs->trans(
"HelpEscompte").
'<br><br>'.$langs->trans(
"ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");
3110 $close[$i][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
3112 $close[$i][
'label'] = $langs->trans(
"Other");
3116 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonDiscount", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
3118 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadCustomer", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
3120 $close[$i][
'reason'] = $form->textwithpicto($langs->transnoentities(
"Other"), $close[$i][
'label'], 1);
3123 $arrayreasons = array();
3124 foreach ($close as $key => $val) {
3125 $arrayreasons[$close[$key][
'code']] = $close[$key][
'reason'];
3129 $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'));
3131 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?facid='.
$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidPartially',
$object->ref),
'confirm_paid_partially', $formquestion,
"yes", 1, 310);
3135 if ($action ==
'canceled') {
3137 $close[1][
'code'] =
'badsupplier';
3138 $close[2][
'code'] =
'abandon';
3140 $close[1][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
3141 $close[2][
'label'] = $langs->trans(
"ConfirmClassifyAbandonReasonOtherDesc");
3143 $close[1][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadSupplier",
$object->ref), $close[1][
'label'], 1);
3144 $close[2][
'reason'] = $form->textwithpicto($langs->transnoentities(
"ConfirmClassifyAbandonReasonOther"), $close[2][
'label'], 1);
3146 $arrayreasons[$close[1][
'code']] = $close[1][
'reason'];
3147 $arrayreasons[$close[2][
'code']] = $close[2][
'reason'];
3150 $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'));
3152 $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $langs->trans(
'CancelBill'), $langs->trans(
'ConfirmCancelBill',
$object->ref),
'confirm_canceled', $formquestion,
"yes", 1, 280);
3156 if ($action ==
'delete') {
3157 $formquestion = array();
3159 $qualified_for_stock_change = 0;
3161 $qualified_for_stock_change =
$object->hasProductsOrServices(2);
3163 $qualified_for_stock_change =
$object->hasProductsOrServices(1);
3166 if (isModEnabled(
'stock') &&
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_BILL') && $qualified_for_stock_change) {
3167 $langs->load(
"stocks");
3168 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
3171 $warehouse_array = $warehouse->list_array();
3173 $selectwarehouse =
'<span class="questionrevertstock hidden">';
3174 if (count($warehouse_array) == 1) {
3176 $selectwarehouse .=
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
3179 $selectwarehouse .= $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
3181 $selectwarehouse .=
'</span>';
3183 $selectyesno = array(0 => $langs->trans(
'No'), 1 => $langs->trans(
'Yes'));
3185 print
'<script type="text/javascript">
3186 $(document).ready(function() {
3187 $("#revertstock").change(function() {
3188 if(this.value > 0) {
3189 $(".questionrevertstock").removeClass("hidden");
3191 $(".questionrevertstock").addClass("hidden");
3197 $formquestion = array(
3198 array(
'type' =>
'select',
'name' =>
'revertstock',
'label' => $langs->trans(
"RevertProductsToStock"),
'select_show_empty' => 0,
'values' => $selectyesno),
3199 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $selectwarehouse,
'tdclass' =>
'questionrevertstock hidden')
3203 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteBill'), $langs->trans(
'ConfirmDeleteBill'),
'confirm_delete', $formquestion, 1, 1);
3205 if ($action ==
'deletepayment') {
3206 $payment_id =
GETPOST(
'paiement_id');
3207 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&paiement_id='.$payment_id, $langs->trans(
'DeletePayment'), $langs->trans(
'ConfirmDeletePayment'),
'confirm_delete_paiement',
'', 0, 1);
3211 if ($action ==
'ask_deleteline') {
3212 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
3215 if (!$formconfirm) {
3216 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
3217 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters,
$object, $action);
3218 if (empty($reshook)) {
3219 $formconfirm .= $hookmanager->resPrint;
3220 } elseif ($reshook > 0) {
3221 $formconfirm = $hookmanager->resPrint;
3230 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
3232 $morehtmlref =
'<div class="refidno">';
3234 $morehtmlref .= $form->editfieldkey(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'', 0, 1);
3235 $morehtmlref .= $form->editfieldval(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, $usercancreate,
'string',
'',
null,
null,
'', 1);
3237 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1,
'supplier');
3239 $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>';
3242 if (isModEnabled(
'project')) {
3243 $langs->load(
"projects");
3244 $morehtmlref .=
'<br>';
3245 if ($permissiontoadd) {
3246 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
3247 if ($action !=
'classify') {
3248 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.((int)
$object->id).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
3250 $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');
3252 if (!empty(
$object->fk_project)) {
3254 $proj->fetch(
$object->fk_project);
3255 $morehtmlref .= $proj->getNomUrl(1);
3257 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
3262 $morehtmlref .=
'</div>';
3264 $object->totalpaid = $totalpaid;
3266 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
3269 $parameters = array();
3271 $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierInvoice', $parameters,
$object, $action);
3272 if (empty($reshook)) {
3273 print
'<div class="fichecenter">';
3274 print
'<div class="fichehalfleft">';
3275 print
'<div class="underbanner clearboth"></div>';
3277 print
'<table class="border tableforfield centpercent">';
3280 print
'<tr><td class="titlefield">'.$langs->trans(
'Type').
'</td><td>';
3281 print
'<span class="badgeneutral">';
3285 print
' '.$object->getSubtypeLabel(
'facture_fourn');
3289 $facreplaced->fetch(
$object->fk_facture_source);
3290 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"ReplaceInvoice", $facreplaced->getNomUrl(1)).
'</span>';
3293 if (
$object->fk_facture_source > 0) {
3295 $facusing->fetch(
$object->fk_facture_source);
3296 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"CorrectInvoice", $facusing->getNomUrl(1)).
'</span>';
3298 $langs->load(
"errors");
3299 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"WarningCorrectedInvoiceNotFound").
'</span>';
3303 $facidavoir =
$object->getListIdAvoirFromInvoice();
3304 if (count($facidavoir) > 0) {
3305 $invoicecredits = array();
3306 foreach ($facidavoir as $id) {
3308 $facavoir->fetch($id);
3309 $invoicecredits[] = $facavoir->getNomUrl(1);
3311 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"InvoiceHasAvoir") . (count($invoicecredits) ?
' ' :
'') . implode(
',', $invoicecredits);
3314 if (isset($objectidnext) && $objectidnext > 0) {
3317 $facthatreplace->fetch($objectidnext);
3318 print
' <span class="opacitymediumbycolor paddingleft">'.str_replace(
'{s1}', $facthatreplace->getNomUrl(1), $langs->transnoentities(
"ReplacedByInvoice",
'{s1}')).
'</span>';
3322 $result = $discount->fetch(0, 0,
$object->id);
3324 print
' <span class="opacitymediumbycolor paddingleft">';
3325 $s = $langs->trans(
"CreditNoteConvertedIntoDiscount",
'{s1}',
'{s2}');
3326 $s = str_replace(
'{s1}',
$object->getLibType(1), $s);
3327 $s = str_replace(
'{s2}', $discount->getNomUrl(1,
'discount'), $s);
3329 print
'</span><br>';
3333 if (
$object->fk_fac_rec_source > 0) {
3335 $result = $tmptemplate->fetch(
$object->fk_fac_rec_source);
3337 print
' <span class="opacitymediumbycolor paddingleft">';
3338 $link =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$tmptemplate->id.
'">'.
dol_escape_htmltag($tmptemplate->title).
'</a>';
3339 $s = $langs->transnoentities(
"GeneratedFromSupplierTemplate", $link);
3349 print
'<!-- Discounts -->'.
"\n";
3350 print
'<tr><td>'.$langs->trans(
'DiscountStillRemaining');
3353 $thirdparty = $societe;
3355 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
3361 print
'<td>'.$form->editfieldkey(
"Label",
'label',
$object->label,
$object, $usercancreate).
'</td>';
3362 print
'<td>'.$form->editfieldval(
"Label",
'label',
$object->label,
$object, $usercancreate).
'</td>';
3370 print $form->editfieldkey(
"DateInvoice",
'datef',
$object->date,
$object, $form_permission,
'datepicker');
3371 print
'</td><td colspan="3">';
3372 print $form->editfieldval(
"Date",
'datef',
$object->date,
$object, $form_permission,
'datepicker');
3376 $langs->load(
'bills');
3377 print
'<tr><td class="nowrap">';
3378 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3379 print $langs->trans(
'PaymentConditions');
3381 if ($action !=
'editconditions' && $form_permission) {
3382 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>';
3384 print
'</tr></table>';
3386 if ($action ==
'editconditions') {
3387 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id');
3389 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none');
3396 print $form->editfieldkey(
"DateMaxPayment",
'date_lim_reglement',
$object->date_echeance,
$object, $form_permission,
'datepicker');
3398 print $form->editfieldval(
"DateMaxPayment",
'date_lim_reglement',
$object->date_echeance,
$object, $form_permission,
'datepicker');
3399 if ($action !=
'editdate_lim_reglement' &&
$object->hasDelay()) {
3405 $langs->load(
'bills');
3406 print
'<tr><td class="nowrap">';
3407 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3408 print $langs->trans(
'PaymentMode');
3410 if ($action !=
'editmode' && $form_permission) {
3411 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>';
3413 print
'</tr></table>';
3415 if ($action ==
'editmode') {
3416 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
3418 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
3423 if (isModEnabled(
"bank")) {
3424 print
'<tr><td class="nowrap">';
3425 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3426 print $langs->trans(
'BankAccount');
3428 if ($action !=
'editbankaccount' && $usercancreate) {
3429 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>';
3431 print
'</tr></table>';
3433 if ($action ==
'editbankaccount') {
3434 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
3436 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
3444 print
'<tr><td class="nowrap">';
3445 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3446 print $langs->trans(
'VATReverseCharge');
3448 if ($action !=
'editvatreversecharge' && $usercancreate) {
3449 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editvatreversecharge&id='.
$object->id.
'">'.
img_edit($langs->trans(
'SetVATReverseCharge'), 1).
'</a></td>';
3451 print
'</tr></table>';
3453 if ($action ==
'editvatreversecharge') {
3454 print
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
3455 print
'<input type="hidden" name="action" value="setvatreversecharge">';
3456 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3458 print
'<input type="checkbox" name="vat_reverse_charge"' . (
$object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
'>';
3460 print
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
3463 print
'<input type="checkbox" name="vat_reverse_charge"'. (
$object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
' disabled>';
3469 if (isModEnabled(
'incoterm')) {
3471 print
'<table width="100%" class="nobordernopadding"><tr><td>';
3472 print $langs->trans(
'IncotermLabel');
3473 print
'<td><td class="right">';
3474 if ($usercancreate) {
3475 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?facid='.
$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
3479 print
'</td></tr></table>';
3482 if ($action !=
'editincoterm') {
3483 print $form->textwithpicto(
$object->display_incoterms(),
$object->label_incoterms, 1);
3485 print $form->select_incoterms((!empty(
$object->fk_incoterms) ?
$object->fk_incoterms :
''), (!empty(
$object->location_incoterms) ?
$object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.
$object->id);
3491 if (isModEnabled(
'intracommreport')) {
3492 $langs->loadLangs(array(
"intracommreport"));
3493 print
'<!-- If module intracomm on -->'.
"\n";
3495 print
'<table class="nobordernopadding centpercent"><tr><td>';
3496 print $langs->trans(
'IntracommReportTransportMode');
3498 if ($action !=
'edittransportmode' && ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"))) {
3499 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edittransportmode&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit().
'</a></td>';
3501 print
'</tr></table>';
3504 if ($action ==
'edittransportmode') {
3505 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->transport_mode_id,
'transport_mode_id', 1, 1);
3507 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->transport_mode_id,
'none');
3514 if (
$object->status != $object::STATUS_DRAFT) {
3518 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
3523 print
'<div class="fichehalfright">';
3524 print
'<div class="underbanner clearboth"></div>';
3526 print
'<table class="border tableforfield centpercent">';
3528 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
3531 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
3532 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3533 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
3534 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3539 print
'<td>' . $langs->trans(
'AmountVAT') .
'</td>';
3540 print
'<td class="nowrap amountcard right">';
3541 if (
GETPOST(
'calculationrule')) {
3542 $calculationrule =
GETPOST(
'calculationrule',
'alpha');
3544 $calculationrule = (!
getDolGlobalString(
'MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND') ?
'totalofround' :
'roundoftotal');
3546 if ($calculationrule ==
'totalofround') {
3547 $calculationrulenum = 1;
3549 $calculationrulenum = 2;
3552 if (
$object->getVentilExportCompta() == 0) {
3553 $s =
'<span class="hideonsmartphone opacitymedium">' . $langs->trans(
"ReCalculate") .
' </span>';
3554 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=calculate&token='.newToken().
'&calculationrule=totalofround">' . $langs->trans(
"Mode1") .
'</a>';
3556 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' .
$object->id .
'&action=calculate&token='.newToken().
'&calculationrule=roundoftotal">' . $langs->trans(
"Mode2") .
'</a>';
3557 print
'<div class="inline-block">';
3558 print $form->textwithtooltip($s, $langs->trans(
"CalculationRuleDesc", $calculationrulenum) .
'<br>' . $langs->trans(
"CalculationRuleDescSupplier"), 2, 1,
img_picto(
'',
'help'),
'', 3,
'', 0,
'recalculate');
3559 print
' ';
3564 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
3565 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3569 if ($societe->localtax1_assuj ==
"1") {
3571 print
'<td>' . $langs->transcountry(
"AmountLT1", $societe->country_code) .
'</td>';
3572 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax1, 1, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3575 if ($societe->localtax2_assuj ==
"1") {
3577 print
'<td>' . $langs->transcountry(
"AmountLT2", $societe->country_code) .
'</td>';
3578 print
'<td class="nowrap amountcard right">' .
price(
$object->total_localtax2, 1, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3583 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
3584 print
'<td class="nowrap amountcard right">' .
price(
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
3585 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
3586 print
'<td class="nowrap amountcard right">' .
price(
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
3604 if (isModEnabled(
'project')) {
3607 if (isModEnabled(
"bank")) {
3611 if (isModEnabled(
'incoterm')) {
3614 if (isModEnabled(
"multicurrency")) {
3619 if ($societe->localtax1_assuj ==
"1") {
3622 if ($societe->localtax2_assuj ==
"1") {
3626 $sql =
'SELECT p.datep as dp, p.ref, p.num_paiement as num_payment, p.rowid, p.fk_bank,';
3627 $sql .=
' c.id as payment_type, c.code as payment_code,';
3628 $sql .=
' pf.amount,';
3629 $sql .=
' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.fk_accountancy_journal';
3630 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn as p';
3631 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank as b ON p.fk_bank = b.rowid';
3632 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank_account as ba ON b.fk_account = ba.rowid';
3633 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id';
3634 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf ON pf.fk_paiementfourn = p.rowid';
3635 $sql .=
' WHERE pf.fk_facturefourn = '.((int)
$object->id);
3636 $sql .=
' ORDER BY p.datep, p.tms';
3638 $result = $db->query($sql);
3640 $num = $db->num_rows($result);
3643 print
'<div class="div-table-responsive-no-min">';
3644 print
'<table class="noborder paymenttable centpercent">';
3645 print
'<tr class="liste_titre">';
3647 print
'<td>'.$langs->trans(
'Date').
'</td>';
3648 print
'<td>'.$langs->trans(
'Type').
'</td>';
3649 if (isModEnabled(
"bank")) {
3650 print
'<td class="right">'.$langs->trans(
'BankAccount').
'</td>';
3652 print
'<td class="right">'.$langs->trans(
'Amount').
'</td>';
3653 print
'<td width="18"> </td>';
3658 $objp = $db->fetch_object($result);
3660 $paymentstatic->id = $objp->rowid;
3661 $paymentstatic->datepaye = $db->jdate($objp->dp);
3662 $paymentstatic->ref = ($objp->ref ? $objp->ref : $objp->rowid);
3663 $paymentstatic->num_payment = $objp->num_payment;
3665 $paymentstatic->paiementcode = $objp->payment_code;
3666 $paymentstatic->type_code = $objp->payment_code;
3667 $paymentstatic->type_label = $objp->payment_type;
3669 print
'<tr class="oddeven">';
3670 print
'<td class="nowraponall">';
3671 print $paymentstatic->getNomUrl(1);
3673 print
'<td>'.dol_print_date($db->jdate($objp->dp),
'day').
'</td>';
3674 $s = $form->form_modes_reglement(
'', $objp->payment_type,
'none',
'', 1, 0,
'', 1).
' '.$objp->num_payment;
3675 print
'<td class="tdoverflowmax125" title="'.dol_escape_htmltag($s).
'">';
3678 if (isModEnabled(
"bank")) {
3679 $bankaccountstatic->id = $objp->baid;
3680 $bankaccountstatic->ref = $objp->baref;
3681 $bankaccountstatic->label = $objp->baref;
3682 $bankaccountstatic->number = $objp->banumber;
3684 if (isModEnabled(
'accounting')) {
3685 $bankaccountstatic->account_number = $objp->account_number;
3688 $accountingjournal->fetch($objp->fk_accountancy_journal);
3689 $bankaccountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1,
'', 1);
3692 print
'<td class="right">';
3693 if ($objp->baid > 0) {
3694 print $bankaccountstatic->getNomUrl(1,
'transactions');
3698 print
'<td class="right">'.price($sign * $objp->amount).
'</td>';
3699 print
'<td class="center">';
3701 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=deletepayment&token='.
newToken().
'&paiement_id='.$objp->rowid.
'">';
3707 $totalpaid += $objp->amount;
3711 print
'<tr class="oddeven"><td colspan="'.$nbcols.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td><td></td><td></td></tr>';
3734 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3735 print
'<span class="opacitymedium">';
3737 print $langs->trans(
'AlreadyPaidNoCreditNotesNoDeposits');
3739 print $langs->trans(
'AlreadyPaid');
3742 print
'</td><td class="right"'.(($totalpaid > 0) ?
' class="amountalreadypaid"' :
'').
'>'.
price($totalpaid).
'</td><td> </td></tr>';
3745 $resteapayeraffiche = $resteapayer;
3747 $cssforamountpaymentcomplete =
'amountpaymentcomplete';
3750 $creditnoteamount = 0;
3753 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
3754 $sql .=
" re.description, re.fk_invoice_supplier_source";
3755 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
3756 $sql .=
" WHERE fk_invoice_supplier = ".((int)
$object->id);
3757 $resql = $db->query($sql);
3759 $num = $db->num_rows($resql);
3763 $obj = $db->fetch_object($resql);
3764 $invoice->fetch($obj->fk_invoice_supplier_source);
3765 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3767 print $langs->trans(
"CreditNote").
' ';
3770 print $langs->trans(
"Deposit").
' ';
3772 print $invoice->getNomUrl(0);
3774 print
'<td class="right">'.price($obj->amount_ttc).
'</td>';
3775 print
'<td class="right">';
3776 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=unlinkdiscount&discountid='.$obj->rowid.
'">';
3777 print
img_picto($langs->transnoentitiesnoconv(
"RemoveDiscount"),
'unlink');
3782 $creditnoteamount += $obj->amount_ttc;
3785 $depositamount += $obj->amount_ttc;
3794 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3795 print
'<span class="opacitymedium">';
3796 print $form->textwithpicto($langs->trans(
"Discount"), $langs->trans(
"HelpEscompte"), - 1);
3798 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3799 $resteapayeraffiche = 0;
3800 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3804 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3805 print
'<span class="opacitymedium">';
3806 print $form->textwithpicto($langs->trans(
"Abandoned"), $langs->trans(
"HelpAbandonBadCustomer"), - 1);
3808 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3810 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3814 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3815 print
'<span class="opacitymedium">';
3816 print $form->textwithpicto($langs->trans(
"ProductReturned"), $langs->trans(
"HelpAbandonProductReturned"), - 1);
3818 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3819 $resteapayeraffiche = 0;
3820 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3824 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3825 $text = $langs->trans(
"HelpAbandonOther");
3827 $text .=
'<br><br><b>'.$langs->trans(
"Reason").
'</b>:'.
$object->close_note;
3829 print
'<span class="opacitymedium">';
3831 print $form->textwithpicto($langs->trans(
"Abandoned"), $text, - 1);
3833 print
'</td><td class="right">'.price(
$object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3834 $resteapayeraffiche = 0;
3835 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3839 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3840 print
'<span class="opacitymedium">';
3841 print $langs->trans(
"Billed");
3843 print
'</td><td class="right">'.price(
$object->total_ttc).
'</td><td> </td></tr>';
3846 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3847 print
'<span class="opacitymedium">';
3848 print $langs->trans(
'RemainderToPay');
3849 if ($resteapayeraffiche < 0) {
3850 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3854 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($resteapayeraffiche).
'</td><td> </td></tr>';
3857 if (isModEnabled(
'multicurrency') &&
$object->multicurrency_code !=
$conf->currency ||
$object->multicurrency_tx != 1) {
3858 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3859 print
'<span class="opacitymedium">';
3860 print $langs->trans(
'RemainderToPayMulticurrency');
3861 if ($resteapayeraffiche < 0) {
3862 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3866 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price(
price2num($multicurrency_resteapayer,
'MT'), 0, $langs, 1, -1, -1,
$object->multicurrency_code).
'</td><td> </td></tr>';
3869 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3872 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3873 print $langs->trans(
'AlreadyPaidBack');
3874 print
' :</td><td class="right">'.price($sign * $totalpaid).
'</td><td> </td></tr>';
3877 print
'<tr><td colspan="'.$nbcols.
'" class="right">'.$langs->trans(
"Billed").
' :</td><td class="right">'.
price($sign *
$object->total_ttc).
'</td><td> </td></tr>';
3880 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3881 print
'<span class="opacitymedium">';
3882 print $langs->trans(
'RemainderToPayBack');
3883 if ($resteapayeraffiche > 0) {
3884 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3888 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($sign * $resteapayeraffiche).
'</td><td> </td></tr>';
3891 if (isModEnabled(
'multicurrency') &&
$object->multicurrency_code !=
$conf->currency ||
$object->multicurrency_tx != 1) {
3892 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3893 print
'<span class="opacitymedium">';
3894 print $langs->trans(
'RemainderToPayBackMulticurrency');
3895 if ($resteapayeraffiche > 0) {
3896 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3900 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>';
3915 print
'<div class="clearboth"></div><br>';
3918 $blocname =
'contacts';
3919 $title = $langs->trans(
'ContactsAddresses');
3920 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3925 $blocname =
'notes';
3926 $title = $langs->trans(
'Notes');
3927 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3934 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'" method="POST">';
3935 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3936 print
'<input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">';
3937 print
'<input type="hidden" name="mode" value="">';
3938 print
'<input type="hidden" name="page_y" value="">';
3939 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
3940 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
3941 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
3944 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
3947 print
'<div class="div-table-responsive-no-min">';
3948 print
'<table id="tablelines" class="noborder noshadow centpercent">';
3950 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
3953 $inputalsopricewithtax = 1;
3954 $senderissupplier = 2;
3956 if (
getDolGlobalInt(
'SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY')) {
3957 $senderissupplier =
getDolGlobalInt(
'SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY');
3962 $object->printObjectLines($action, $societe, $mysoc, $lineid, 1);
3969 if ($action !=
'editline') {
3972 $parameters = array();
3973 $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters,
$object, $action);
3977 if (empty($reshook)) {
3978 $object->formAddObjectLine(1, $societe, $mysoc);
3991 if ($action !=
'presend') {
3994 print
'<div class="tabsAction">';
3996 $parameters = array();
3997 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters,
$object, $action);
3999 if (empty($reshook)) {
4003 $ventilExportCompta =
$object->getVentilExportCompta();
4005 if ($ventilExportCompta == 0) {
4006 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=edit&token='.
newToken().
'">'.$langs->trans(
'Modify').
'</a>';
4008 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseDispatchedInBookkeeping").
'">'.$langs->trans(
'Modify').
'</span>';
4013 $result = $discount->fetch(0, 0,
$object->id);
4020 if (!$objectidnext &&
$object->close_code !=
'replaced' && $usercancreate) {
4021 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
'ReOpen').
'</a>';
4023 if ($usercancreate) {
4024 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseReplacedInvoice").
'">'.$langs->trans(
'ReOpen').
'</span>';
4026 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'ReOpen').
'</span>';
4034 if ($usercanvalidate) {
4035 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=valid&token='.
newToken().
'"';
4036 print
'>'.$langs->trans(
'Validate').
'</a>';
4038 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'"';
4039 print
'>'.$langs->trans(
'Validate').
'</a>';
4045 if (empty($user->socid)) {
4048 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
4050 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'SendMail').
'</span>';
4057 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>';
4064 if ($resteapayer == 0) {
4065 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseRemainderToPayIsZero").
'">'.$langs->trans(
'DoPaymentBack').
'</span>';
4067 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>';
4073 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=converttoreduc&token='.
newToken().
'">'.$langs->trans(
'ConvertExcessPaidToReduc').
'</a>';
4077 && (
getDolGlobalString(
'SUPPLIER_INVOICE_ALLOW_REUSE_OF_CREDIT_WHEN_PARTIALLY_REFUNDED') ||
$object->getSommePaiement() == 0)
4079 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>';
4083 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.
$object->id.
'&action=converttoreduc&token='.
newToken().
'">'.$langs->trans(
'ConvertToReduc').
'</a>';
4094 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=paid&token='.
newToken().
'">'.$langs->trans(
'ClassifyPaid').
'</a>';
4099 if ($totalpaid > 0 || $totalcreditnotes > 0) {
4101 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=paid&token='.
newToken().
'">'.$langs->trans(
'ClassifyPaidPartially').
'</a>';
4104 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=canceled">'.$langs->trans(
'ClassifyCanceled').
'</a>';
4116 if (!$objectidnext) {
4117 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>';
4122 if ($action !=
'edit' && $usercancreate) {
4123 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&action=clone&socid='.
$object->socid.
'&token='.
newToken().
'">'.$langs->trans(
'ToClone').
'</a>';
4128 if (!$objectidnext && count(
$object->lines) > 0) {
4129 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.
$object->id.
'&action=create">'.$langs->trans(
"ChangeIntoRepeatableInvoice").
'</a>';
4134 $isErasable =
$object->is_erasable();
4135 if ($action !=
'confirm_edit' && ($usercandelete || ($usercancreate && $isErasable == 1))) {
4136 $enableDelete =
false;
4138 $params = (empty(
$conf->use_javascript_ajax) ? array() : array(
'attr' => array(
'class' =>
'reposition')));
4140 if ($isErasable == -4) {
4141 $htmltooltip = $langs->trans(
"DisabledBecausePayments");
4142 } elseif ($isErasable == -3) {
4143 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastSituationInvoice");
4144 } elseif ($isErasable == -2) {
4145 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastInvoice");
4146 } elseif ($isErasable == -1) {
4147 $htmltooltip = $langs->trans(
"DisabledBecauseDispatchedInBookkeeping");
4148 } elseif ($isErasable <= 0) {
4149 $htmltooltip = $langs->trans(
"DisabledBecauseNotErasable");
4151 $enableDelete =
true;
4158 if ($action !=
'confirm_edit') {
4159 print
'<div class="fichecenter"><div class="fichehalfleft">';
4166 $filedir =
$conf->fournisseur->facture->dir_output.
'/'.$subdir;
4167 $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.
$object->id;
4168 $genallowed = $usercanread;
4169 $delallowed = $usercancreate;
4172 print $formfile->showdocuments(
'facture_fournisseur', $subdir, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 40, 0,
'',
'',
'', $societe->default_lang);
4173 $somethingshown = $formfile->numoffiles;
4176 $tmparray = $form->showLinkToObjectBlock(
$object, array(), array(
'invoice_supplier'), 1);
4177 $linktoelem = $tmparray[
'linktoelem'];
4178 $htmltoenteralink = $tmparray[
'htmltoenteralink'];
4179 print $htmltoenteralink;
4181 $somethingshown = $form->showLinkedObjectBlock(
$object, $linktoelem);
4183 print
'</div><div class="fichehalfright">';
4186 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
4188 $somethingshown = $formactions->showactions(
$object,
'invoice_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
4190 print
'</div></div>';
4196 if (
GETPOST(
'modelselected')) {
4197 $action =
'presend';
4201 $modelmail =
'invoice_supplier_send';
4202 $defaulttopic =
'SendBillRef';
4203 $diroutput =
$conf->fournisseur->facture->dir_output;
4204 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
4205 $trackid =
'sinv'.$object->id;
4207 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($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage bank accounts.
Class to manage accounting journals.
const TYPE_SITUATION
Situation invoice.
Class to manage absolute discounts.
Class to manage a WYSIWYG editor.
Class to manage warehouses.
Class to manage suppliers invoices.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
const TYPE_REPLACEMENT
Replacement invoice.
const STATUS_VALIDATED
Validated (need to be paid)
const TYPE_STANDARD
Standard invoice.
const STATUS_ABANDONED
Classified abandoned and no payment done.
const STATUS_CLOSED
Classified paid.
Class to manage invoice templates.
Class to manage payments for supplier invoices.
Class ProductCombination Used to represent the relation between a product and one of its variants.
Class to manage predefined suppliers products.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
isInEEC($object)
Return if a country of an object is inside the EEC (European Economic Community)
dol_get_last_hour($date, $gm='tzserver')
Return GMT time for last hour of a given GMT date (it replaces hours, min and second part to 23:59:59...
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
facturefourn_prepare_head(FactureFournisseur $object)
Prepare array with list of tabs.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_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).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.: VAT NPR in France)
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
dol_htmloutput_events($disabledoutputofmessages=0)
Print formatted messages to output (Used to show messages on html output).
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_clone($object, $native=2)
Create a clone of instance of object (new instance with same value for each properties) With native =...
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 a Dolibarr global constant string value.
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
get_localtax($vatrate, $local, $thirdparty_buyer=null, $thirdparty_seller=null, $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.