37 require
'../../main.inc.php';
38 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
39 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.class.php';
40 require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_invoice/modules_facturefournisseur.php';
41 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
42 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture-rec.class.php';
43 require_once DOL_DOCUMENT_ROOT.
'/fourn/class/paiementfourn.class.php';
44 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
45 require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
46 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
47 require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
48 require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
50 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
51 require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
54 require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
55 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
59 require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
62 require_once DOL_DOCUMENT_ROOT.
'/accountancy/class/accountingjournal.class.php';
66 $langs->loadLangs(array(
'bills',
'compta',
'suppliers',
'companies',
'products',
'banks',
'admin'));
68 $langs->load(
'incoterm');
73 $action =
GETPOST(
'action',
'aZ09');
76 $cancel =
GETPOST(
'cancel',
'alpha');
77 $backtopage =
GETPOST(
'backtopage',
'alpha');
78 $backtopageforcancel =
'';
80 $lineid =
GETPOST(
'lineid',
'int');
81 $projectid =
GETPOST(
'projectid',
'int');
82 $origin =
GETPOST(
'origin',
'alpha');
83 $originid =
GETPOST(
'originid',
'int');
84 $fac_recid =
GETPOST(
'fac_rec',
'int');
85 $rank = (
GETPOST(
'rank',
'int') > 0) ?
GETPOST(
'rank',
'int') : -1;
88 $hidedetails = (
GETPOST(
'hidedetails',
'int') ?
GETPOST(
'hidedetails',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DETAILS) ? 1 : 0));
89 $hidedesc = (
GETPOST(
'hidedesc',
'int') ?
GETPOST(
'hidedesc',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_DESC) ? 1 : 0));
90 $hideref = (
GETPOST(
'hideref',
'int') ?
GETPOST(
'hideref',
'int') : (!empty($conf->global->MAIN_GENERATE_DOCUMENTS_HIDE_REF) ? 1 : 0));
93 $hookmanager->initHooks(array(
'invoicesuppliercard',
'globalcard'));
99 $extrafields->fetch_name_optionals_label($object->table_element);
102 if ($id > 0 || !empty($ref)) {
103 $ret = $object->fetch($id, $ref);
107 $ret = $object->fetch_thirdparty();
114 $socid =
GETPOST(
'socid',
'int');
115 if (!empty($user->socid)) {
116 $socid = $user->socid;
120 $result =
restrictedArea($user,
'fournisseur', $id,
'facture_fourn',
'facture',
'fk_soc',
'rowid', $isdraft);
123 $usercanread = ($user->hasRight(
"fournisseur",
"facture",
"lire") || $user->hasRight(
"supplier_invoice",
"lire"));
124 $usercancreate = ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"));
125 $usercandelete = ($user->hasRight(
"fournisseur",
"facture",
"supprimer") || $user->hasRight(
"supplier_invoice",
"supprimer"));
128 $usercanvalidate = ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) && !empty($usercancreate)) || (!empty($conf->global->MAIN_USE_ADVANCED_PERMS) && $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"validate")));
129 $usercansend = (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->hasRight(
"fournisseur",
"supplier_invoice_advance",
"send"));
132 $permissionnote = $usercancreate;
133 $permissiondellink = $usercancreate;
134 $permissiontoedit = $usercancreate;
135 $permissiontoadd = $usercancreate;
145 $reshook = $hookmanager->executeHooks(
'doActions',
$parameters, $object, $action);
150 if (empty($reshook)) {
151 $backurlforlist = DOL_URL_ROOT.
'/fourn/facture/list.php';
153 if (empty($backtopage) || ($cancel && empty($id))) {
154 if (empty($backtopage) || ($cancel && strpos($backtopage,
'__ID__'))) {
155 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
156 $backtopage = $backurlforlist;
158 $backtopage = DOL_URL_ROOT.
'/fourn/facture/card.php?id='.((!empty($id) && $id > 0) ? $id :
'__ID__');
164 if (!empty($backtopageforcancel)) {
165 header(
"Location: ".$backtopageforcancel);
167 } elseif (!empty($backtopage)) {
168 header(
"Location: ".$backtopage);
174 include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php';
176 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
178 include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php';
181 if (
GETPOST(
'linkedOrder') && empty($cancel) && $id > 0) {
183 $object->fetch_thirdparty();
184 $result = $object->add_object_linked(
'order_supplier',
GETPOST(
'linkedOrder'));
188 if ($action ==
'confirm_clone' && $confirm ==
'yes' && $permissiontoadd) {
191 if (
GETPOST(
'newsupplierref',
'alphanohtml')) {
192 $objectutil->ref_supplier =
GETPOST(
'newsupplierref',
'alphanohtml');
196 $result = $objectutil->createFromClone($user, $id);
198 header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
201 $langs->load(
"errors");
205 } elseif ($action ==
'confirm_valid' && $confirm ==
'yes' && $usercanvalidate) {
206 $idwarehouse =
GETPOST(
'idwarehouse');
209 $object->fetch_thirdparty();
211 $qualified_for_stock_change = 0;
212 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
213 $qualified_for_stock_change = $object->hasProductsOrServices(2);
215 $qualified_for_stock_change = $object->hasProductsOrServices(1);
219 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
220 $langs->load(
"stocks");
221 if (!$idwarehouse || $idwarehouse == -1) {
223 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
231 $result = $object->validate($user,
'', $idwarehouse);
240 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
241 $outputlangs = $langs;
244 $newlang =
GETPOST(
'lang_id',
'aZ09');
247 $newlang = $object->thirdparty->default_lang;
249 if (!empty($newlang)) {
251 $outputlangs->setDefaultLang($newlang);
253 $model = $object->model_pdf;
254 $ret = $object->fetch($id);
256 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
263 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes') {
265 $object->fetch_thirdparty();
267 $isErasable = $object->is_erasable();
269 if (($usercandelete && $isErasable > 0) || ($usercancreate && $isErasable == 1)) {
270 $result = $object->delete($user);
272 header(
'Location: list.php?restore_lastsearch_values=1');
278 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
280 $result = $object->deleteline($lineid);
283 $object->line_order(
true);
300 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
307 } elseif ($action ==
'unlinkdiscount' && $usercancreate) {
310 $result = $discount->fetch(
GETPOSTINT(
"discountid"));
311 $discount->unlink_invoice();
312 } elseif ($action ==
'confirm_paid' && $confirm ==
'yes' && $usercancreate) {
314 $result = $object->setPaid($user);
318 } elseif ($action ==
'confirm_paid_partially' && $confirm ==
'yes') {
321 $close_code =
GETPOST(
"close_code",
'restricthtml');
322 $close_note =
GETPOST(
"close_note",
'restricthtml');
324 $result = $object->setPaid($user, $close_code, $close_note);
329 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
331 } elseif ($action ==
'confirm_canceled' && $confirm ==
'yes') {
334 $close_code =
GETPOST(
"close_code",
'restricthtml');
335 $close_note =
GETPOST(
"close_note",
'restricthtml');
337 $result = $object->setCanceled($user, $close_code, $close_note);
342 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
347 if ($action ==
'setref_supplier' && $usercancreate) {
348 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alpha');
350 if ($object->update($user) < 0) {
354 $outputlangs = $langs;
357 $newlang =
GETPOST(
'lang_id',
'aZ09');
360 $newlang = $object->thirdparty->default_lang;
362 if (!empty($newlang)) {
364 $outputlangs->setDefaultLang($newlang);
366 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
367 $ret = $object->fetch($object->id);
368 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
374 if ($action ==
'setconditions' && $usercancreate) {
376 $object->cond_reglement_code = 0;
377 $object->cond_reglement_id = 0;
384 $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id',
'int'));
392 $old_date_echeance = $object->date_echeance;
393 $new_date_echeance = $object->calculate_date_lim_reglement();
394 if ($new_date_echeance > $old_date_echeance) {
395 $object->date_echeance = $new_date_echeance;
397 if ($object->date_echeance < $object->date) {
398 $object->date_echeance = $object->date;
400 $result = $object->update($user);
412 } elseif ($action ==
'set_incoterms' &&
isModEnabled(
'incoterm')) {
414 $result = $object->setIncoterms(
GETPOST(
'incoterm_id',
'int'),
GETPOST(
'location_incoterms',
'alpha'));
415 } elseif ($action ==
'setmode' && $usercancreate) {
417 $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id',
'int'));
418 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
420 $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
421 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
423 $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx',
'alpha')),
GETPOST(
'calculation_mode',
'int'));
424 } elseif ($action ==
'setbankaccount' && $usercancreate) {
426 $result = $object->setBankAccount(
GETPOST(
'fk_account',
'int'));
427 } elseif ($action ==
'setvatreversecharge' && $usercancreate) {
429 $vatreversecharge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
430 $result = $object->setVATReverseCharge($vatreversecharge);
433 if ($action ==
'settransportmode' && ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"))) {
435 $result = $object->setTransportMode(
GETPOST(
'transport_mode_id',
'int'));
436 } elseif ($action ==
'setlabel' && $usercancreate) {
439 $object->label =
GETPOST(
'label');
440 $result = $object->update($user);
444 } elseif ($action ==
'setdatef' && $usercancreate) {
446 if ($newdate > (
dol_now(
'tzuserrel') + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
447 if (empty($conf->global->INVOICE_MAX_FUTURE_DELAY)) {
448 setEventMessages($langs->trans(
"WarningInvoiceDateInFuture"),
null,
'warnings');
450 setEventMessages($langs->trans(
"WarningInvoiceDateTooFarInFuture"),
null,
'warnings');
456 $object->date = $newdate;
457 $date_echence_calc = $object->calculate_date_lim_reglement();
458 if (!empty($object->date_echeance) && $object->date_echeance < $date_echence_calc) {
459 $object->date_echeance = $date_echence_calc;
461 if ($object->date_echeance && $object->date_echeance < $object->date) {
462 $object->date_echeance = $object->date;
465 $result = $object->update($user);
469 } elseif ($action ==
'setdate_lim_reglement' && $usercancreate) {
471 $object->date_echeance =
dol_mktime(12, 0, 0,
GETPOST(
'date_lim_reglementmonth',
'int'),
GETPOST(
'date_lim_reglementday',
'int'),
GETPOST(
'date_lim_reglementyear',
'int'));
472 if (!empty($object->date_echeance) && $object->date_echeance < $object->date) {
473 $object->date_echeance = $object->date;
474 setEventMessages($langs->trans(
"DatePaymentTermCantBeLowerThanObjectDate"),
null,
'warnings');
476 $result = $object->update($user);
480 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
482 if (
GETPOST(
"remise_id",
"int")) {
483 $ret = $object->fetch($id);
485 $result = $object->insert_discount(
GETPOST(
"remise_id",
"int"));
494 if (
GETPOST(
"remise_id_for_payment",
"int")) {
495 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
497 $discount->fetch(
GETPOST(
"remise_id_for_payment",
"int"));
504 setEventMessages($langs->trans(
"ErrorDiscountLargerThanRemainToPaySplitItBefore"),
null,
'errors');
508 $result = $discount->link_to_invoice(0, $id);
515 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
516 $outputlangs = $langs;
519 $newlang =
GETPOST(
'lang_id',
'aZ09');
522 $newlang = $object->thirdparty->default_lang;
524 if (!empty($newlang)) {
526 $outputlangs->setDefaultLang($newlang);
528 $ret = $object->fetch($id);
530 $result = $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
535 } elseif ($action ==
'confirm_converttoreduc' && $confirm ==
'yes' && $usercancreate) {
538 $object->fetch_thirdparty();
543 $result = $discountcheck->fetch(0, 0, $object->id);
555 $amount_ht = $amount_tva = $amount_ttc = array();
556 $multicurrency_amount_ht = $multicurrency_amount_tva = $multicurrency_amount_ttc = array();
560 foreach ($object->lines as $line) {
561 if ($line->product_type < 9 && $line->total_ht != 0) {
562 $keyforvatrate = $line->tva_tx.($line->vat_src_code ?
' ('.$line->vat_src_code.
')' :
'');
564 $amount_ht[$keyforvatrate] += $line->total_ht;
565 $amount_tva[$keyforvatrate] += $line->total_tva;
566 $amount_ttc[$keyforvatrate] += $line->total_ttc;
567 $multicurrency_amount_ht[$keyforvatrate] += $line->multicurrency_total_ht;
568 $multicurrency_amount_tva[$keyforvatrate] += $line->multicurrency_total_tva;
569 $multicurrency_amount_ttc[$keyforvatrate] += $line->multicurrency_total_ttc;
576 $alreadypaid = $object->getSommePaiement();
577 if ($alreadypaid && abs($alreadypaid) < abs($object->total_ttc)) {
578 $ratio = abs(($object->total_ttc - $alreadypaid) / $object->total_ttc);
579 foreach ($amount_ht as $vatrate => $val) {
580 $amount_ht[$vatrate] =
price2num($amount_ht[$vatrate] * $ratio,
'MU');
581 $amount_tva[$vatrate] =
price2num($amount_tva[$vatrate] * $ratio,
'MU');
582 $amount_ttc[$vatrate] =
price2num($amount_ttc[$vatrate] * $ratio,
'MU');
583 $multicurrency_amount_ht[$vatrate] =
price2num($multicurrency_amount_ht[$vatrate] * $ratio,
'MU');
584 $multicurrency_amount_tva[$vatrate] =
price2num($multicurrency_amount_tva[$vatrate] * $ratio,
'MU');
585 $multicurrency_amount_ttc[$vatrate] =
price2num($multicurrency_amount_ttc[$vatrate] * $ratio,
'MU');
594 $discount->description =
'(CREDIT_NOTE)';
596 $discount->description =
'(DEPOSIT)';
598 $discount->description =
'(EXCESS PAID)';
600 setEventMessages($langs->trans(
'CantConvertToReducAnInvoiceOfThisType'),
null,
'errors');
602 $discount->discount_type = 1;
603 $discount->fk_soc = $object->socid;
604 $discount->fk_invoice_supplier_source = $object->id;
612 $sql =
'SELECT SUM(pf.amount) as total_paiements';
613 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf, '.MAIN_DB_PREFIX.
'paiementfourn as p';
614 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id AND c.entity IN ('.
getEntity(
'c_paiement').
')';
615 $sql .=
' WHERE pf.fk_facturefourn = '.((int) $object->id);
616 $sql .=
' AND pf.fk_paiementfourn = p.rowid';
617 $sql .=
' AND p.entity IN ('.getEntity(
'invoice').
')';
619 $resql = $db->query(
$sql);
624 $res = $db->fetch_object($resql);
625 $total_paiements = $res->total_paiements;
628 $total_creditnote_and_deposit = 0;
629 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
630 $sql .=
" re.description, re.fk_invoice_supplier_source";
631 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
632 $sql .=
" WHERE fk_invoice_supplier = ".((int) $object->id);
633 $resql = $db->query(
$sql);
634 if (!empty($resql)) {
635 while ($obj = $db->fetch_object($resql)) {
636 $total_creditnote_and_deposit += $obj->amount_ttc;
642 $discount->amount_ht = $discount->amount_ttc = $total_paiements + $total_creditnote_and_deposit - $object->total_ttc;
643 $discount->amount_tva = 0;
644 $discount->tva_tx = 0;
645 $discount->vat_src_code =
'';
647 $result = $discount->create($user);
653 foreach ($amount_ht as $tva_tx => $xxx) {
654 $discount->amount_ht = abs($amount_ht[$tva_tx]);
655 $discount->amount_tva = abs($amount_tva[$tva_tx]);
656 $discount->amount_ttc = abs($amount_ttc[$tva_tx]);
657 $discount->multicurrency_amount_ht = abs($multicurrency_amount_ht[$tva_tx]);
658 $discount->multicurrency_amount_tva = abs($multicurrency_amount_tva[$tva_tx]);
659 $discount->multicurrency_amount_ttc = abs($multicurrency_amount_ttc[$tva_tx]);
664 if (preg_match(
'/\((.*)\)/', $tva_tx, $reg)) {
665 $vat_src_code = $reg[1];
666 $tva_tx = preg_replace(
'/\s*\(.*\)/',
'', $tva_tx);
669 $discount->tva_tx = abs($tva_tx);
670 $discount->vat_src_code = $vat_src_code;
672 $result = $discount->create($user);
683 $result = $object->setPaid($user);
698 } elseif ($action ==
'confirm_delete_paiement' && $confirm ==
'yes' && $usercancreate) {
703 $result = $paiementfourn->fetch(
GETPOST(
'paiement_id'));
705 $result = $paiementfourn->delete();
707 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
715 } elseif ($action ==
'add' && $usercancreate) {
718 $object->socid =
GETPOST(
'socid',
'int');
720 $selectedLines =
GETPOST(
'toselect',
'array');
727 $ret = $extrafields->setOptionalsFromPost(
null, $object);
740 if (
GETPOST(
'type',
'int') ===
'') {
741 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
746 if (empty($dateinvoice)) {
747 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
749 $_GET[
'socid'] = $_POST[
'socid'];
751 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
757 if (!(
GETPOST(
'fac_replacement',
'int') > 0)) {
759 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ReplaceInvoice")),
null,
'errors');
764 $result = $object->fetch(
GETPOST(
'fac_replacement',
'int'));
765 $object->fetch_thirdparty();
767 $object->ref =
GETPOST(
'ref',
'alphanohtml');
768 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alpha');
769 $object->socid =
GETPOST(
'socid',
'int');
770 $object->libelle =
GETPOST(
'label',
'alphanohtml');
771 $object->date = $dateinvoice;
772 $object->date_echeance = $datedue;
773 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
774 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
775 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id',
'int');
776 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id',
'int');
777 $object->fk_account =
GETPOST(
'fk_account',
'int');
778 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
779 $object->fk_project = ($tmpproject > 0) ? $tmpproject :
null;
780 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
781 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
782 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
783 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
784 $object->transport_mode_id =
GETPOST(
'transport_mode_id',
'int');
787 $object->fk_facture_source =
GETPOST(
'fac_replacement',
'int');
790 $id = $object->createFromCurrent($user);
800 $sourceinvoice =
GETPOST(
'fac_avoir',
'int');
801 if (!($sourceinvoice > 0) && empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) {
803 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"CorrectInvoice")),
null,
'errors');
805 if (
GETPOST(
'socid',
'int') < 1) {
806 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
811 if (empty($dateinvoice)) {
812 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
814 $_GET[
'socid'] = $_POST[
'socid'];
816 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
822 if (!
GETPOST(
'ref_supplier')) {
823 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplier')),
null,
'errors');
825 $_GET[
'socid'] = $_POST[
'socid'];
830 $tmpproject =
GETPOST(
'projectid',
'int');
833 $object->ref =
GETPOST(
'ref',
'alphanohtml');
834 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alphanohtml');
835 $object->socid =
GETPOST(
'socid',
'int');
836 $object->libelle =
GETPOST(
'label',
'alphanohtml');
837 $object->label =
GETPOST(
'label',
'alphanohtml');
838 $object->date = $dateinvoice;
839 $object->date_echeance = $datedue;
840 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
841 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
842 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
843 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
844 $object->fk_account =
GETPOST(
'fk_account',
'int');
845 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
846 $object->fk_project = ($tmpproject > 0) ? $tmpproject :
null;
847 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
848 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
849 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
850 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
851 $object->transport_mode_id =
GETPOST(
'transport_mode_id',
'int');
854 $object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice :
'';
857 $id = $object->create($user);
863 if (
GETPOST(
'invoiceAvoirWithLines',
'int') == 1 && $id > 0) {
865 if ($facture_source->fetch($object->fk_facture_source) > 0) {
868 foreach ($facture_source->lines as $line) {
870 if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
874 $line->fk_facture_fourn = $object->id;
875 $line->fk_parent_line = $fk_parent_line;
877 $line->subprice = -$line->subprice;
878 $line->pa_ht = -$line->pa_ht;
879 $line->total_ht = -$line->total_ht;
880 $line->total_tva = -$line->total_tva;
881 $line->total_ttc = -$line->total_ttc;
882 $line->total_localtax1 = -$line->total_localtax1;
883 $line->total_localtax2 = -$line->total_localtax2;
885 $result = $line->insert();
887 $object->lines[] = $line;
890 if ($result > 0 && $line->product_type == 9) {
891 $fk_parent_line = $result;
895 $object->update_price(1);
899 if (
GETPOST(
'invoiceAvoirWithPaymentRestAmount',
'int') == 1 && $id > 0) {
901 if ($facture_source->fetch($object->fk_facture_source) > 0) {
902 $totalpaid = $facture_source->getSommePaiement();
903 $totalcreditnotes = $facture_source->getSumCreditNotesUsed();
904 $totaldeposits = $facture_source->getSumDepositsUsed();
905 $remain_to_pay = abs($facture_source->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits);
906 $desc = $langs->trans(
'invoiceAvoirLineWithPaymentRestAmount');
907 $retAddLine = $object->addline($desc, $remain_to_pay, 0, 0, 0, 1, 0, 0,
'',
'', 0,
'',
'TTC');
909 if ($retAddLine < 0) {
917 if (empty($dateinvoice)) {
919 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
921 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
928 $object->socid =
GETPOST(
'socid',
'int');
929 $object->type =
GETPOST(
'type',
'alphanohtml');
930 $object->ref =
GETPOST(
'ref',
'alphanohtml');
931 $object->date = $dateinvoice;
932 $object->note_public = trim(
GETPOST(
'note_public',
'restricthtml'));
933 $object->note_private = trim(
GETPOST(
'note_private',
'restricthtml'));
934 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alphanohtml');
935 $object->model_pdf =
GETPOST(
'model',
'alphanohtml');
936 $object->fk_project =
GETPOST(
'projectid',
'int');
937 $object->cond_reglement_id = (
GETPOST(
'type') == 3 ? 1 :
GETPOST(
'cond_reglement_id'));
938 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id',
'int');
939 $object->fk_account =
GETPOST(
'fk_account',
'int');
943 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
944 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
945 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
946 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
949 $object->fac_rec = $fac_recid;
951 $fac_rec->fetch($object->fac_rec);
952 $fac_rec->fetch_lines();
953 $object->lines = $fac_rec->lines;
955 $id = $object->create($user);
959 if (
GETPOST(
'socid',
'int') < 1) {
960 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
965 if (empty($dateinvoice)) {
966 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
968 $_GET[
'socid'] = $_POST[
'socid'];
970 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
976 if (!
GETPOST(
'ref_supplier')) {
977 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplier')),
null,
'errors');
979 $_GET[
'socid'] = $_POST[
'socid'];
984 $tmpproject =
GETPOST(
'projectid',
'int');
987 $object->socid =
GETPOST(
'socid',
'int');
988 $object->type =
GETPOST(
'type',
'alphanohtml');
989 $object->ref =
GETPOST(
'ref',
'alphanohtml');
990 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alphanohtml');
991 $object->socid =
GETPOST(
'socid',
'int');
992 $object->libelle =
GETPOST(
'label',
'alphanohtml');
993 $object->label =
GETPOST(
'label',
'alphanohtml');
994 $object->date = $dateinvoice;
995 $object->date_echeance = $datedue;
996 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
997 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
998 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
999 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
1000 $object->fk_account =
GETPOST(
'fk_account',
'int');
1001 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
1002 $object->fk_project = ($tmpproject > 0) ? $tmpproject :
null;
1003 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
1004 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
1005 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
1006 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
1007 $object->transport_mode_id =
GETPOST(
'transport_mode_id');
1010 if (empty($object->date_echeance)) {
1011 $object->date_echeance = $object->calculate_date_lim_reglement();
1014 $object->fetch_thirdparty();
1017 if (!$error &&
GETPOST(
'origin',
'alpha') &&
GETPOST(
'originid')) {
1019 $element = $subelement =
GETPOST(
'origin',
'alpha');
1027 if ($element ==
'order') {
1028 $element = $subelement =
'commande';
1030 if ($element ==
'propal') {
1031 $element =
'comm/propal'; $subelement =
'propal';
1033 if ($element ==
'contract') {
1034 $element = $subelement =
'contrat';
1036 if ($element ==
'order_supplier') {
1037 $element =
'fourn'; $subelement =
'fournisseur.commande';
1039 if ($element ==
'project') {
1040 $element =
'projet';
1042 $object->origin =
GETPOST(
'origin',
'alpha');
1043 $object->origin_id =
GETPOST(
'originid',
'int');
1046 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
1047 $classname = ucfirst($subelement);
1048 if ($classname ==
'Fournisseur.commande') {
1049 $classname =
'CommandeFournisseur';
1051 $objectsrc =
new $classname($db);
1052 $objectsrc->fetch($originid);
1053 $objectsrc->fetch_thirdparty();
1055 if (!empty($object->origin) && !empty($object->origin_id)) {
1056 $object->linkedObjectsIds[$object->origin] = $object->origin_id;
1060 if ($object->origin ==
'reception') {
1061 $objectsrc->fetchObjectLinked();
1063 if (count($objectsrc->linkedObjectsIds[
'order_supplier']) > 0) {
1064 foreach ($objectsrc->linkedObjectsIds[
'order_supplier'] as $key => $value) {
1065 $object->linkedObjectsIds[
'order_supplier'] = $value;
1070 $id = $object->create($user);
1074 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
1075 $classname = ucfirst($subelement);
1076 if ($classname ==
'Fournisseur.commande') {
1077 $classname =
'CommandeFournisseur';
1079 $srcobject =
new $classname($db);
1081 $result = $srcobject->fetch(
GETPOST(
'originid',
'int'));
1084 $typeamount =
GETPOST(
'typedeposit',
'alpha');
1089 $amountdeposit = array();
1090 if (!empty($conf->global->MAIN_DEPOSIT_MULTI_TVA)) {
1091 if ($typeamount ==
'amount') {
1092 $amount = $valuedeposit;
1094 $amount = $srcobject->total_ttc * ($valuedeposit / 100);
1097 $TTotalByTva = array();
1098 foreach ($srcobject->lines as &$line) {
1099 if (!empty($line->special_code)) {
1102 $TTotalByTva[$line->tva_tx] += $line->total_ttc;
1105 foreach ($TTotalByTva as $tva => &$total) {
1106 $coef = $total / $srcobject->total_ttc;
1107 $am = $amount * $coef;
1108 $amount_ttc_diff += $am;
1109 $amountdeposit[$tva] += $am / (1 + $tva / 100);
1112 if ($typeamount ==
'amount') {
1113 $amountdeposit[0] = $valuedeposit;
1114 } elseif ($typeamount ==
'variable') {
1117 $lines = $srcobject->lines;
1118 $numlines = count($lines);
1119 for ($i = 0; $i < $numlines; $i++) {
1121 if (empty($lines[$i]->qty)) {
1124 if (!empty($lines[$i]->special_code)) {
1128 $totalamount += $lines[$i]->total_ht;
1129 $tva_tx = $lines[$i]->tva_tx;
1130 $amountdeposit[$tva_tx] += ($lines[$i]->total_ht * $valuedeposit) / 100;
1134 if ($totalamount == 0) {
1135 $amountdeposit[0] = 0;
1143 $amount_ttc_diff = $amountdeposit[0];
1146 foreach ($amountdeposit as $tva => $amount) {
1147 if (empty($amount)) {
1152 'amount' =>
'FixAmount',
1153 'variable' =>
'VarAmount'
1155 $descline =
'(DEPOSIT)';
1157 if ($typeamount ==
'amount') {
1158 $descline .=
' ('.price($valuedeposit,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
')';
1159 } elseif ($typeamount ==
'variable') {
1160 $descline .=
' ('.$valuedeposit.
'%)';
1163 $descline .=
' - '.$srcobject->ref;
1164 $result = $object->addline(
1171 (empty($conf->global->INVOICE_PRODUCTID_DEPOSIT) ? 0 : $conf->global->INVOICE_PRODUCTID_DEPOSIT),
1176 $lines[$i]->info_bits,
1186 $lines[$i]->special_code,
1193 $diff = $object->total_ttc - $amount_ttc_diff;
1195 if (!empty($conf->global->MAIN_DEPOSIT_MULTI_TVA) && $diff != 0) {
1196 $object->fetch_lines();
1197 $subprice_diff = $object->lines[0]->subprice - $diff / (1 + $object->lines[0]->tva_tx / 100);
1198 $object->updateline(
1199 $object->lines[0]->id,
1200 $object->lines[0]->desc,
1202 $object->lines[0]->tva_tx,
1203 $object->lines[0]->localtax1_tx,
1204 $object->lines[0]->localtax2_tx,
1205 $object->lines[0]->qty,
1206 $object->lines[0]->fk_product,
1208 $object->lines[0]->info_bits,
1209 $object->lines[0]->product_type,
1210 $object->lines[0]->remise_percent,
1212 $object->lines[0]->date_start,
1213 $object->lines[0]->date_end,
1221 } elseif ($result > 0) {
1222 $lines = $srcobject->lines;
1223 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1224 $srcobject->fetch_lines();
1225 $lines = $srcobject->lines;
1228 $num = count($lines);
1229 for ($i = 0; $i < $num; $i++) {
1230 if (!in_array($lines[$i]->
id, $selectedLines)) {
1234 $desc = ($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->libelle);
1235 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
1238 if (method_exists($lines[$i],
'fetch_optionals')) {
1239 $lines[$i]->fetch_optionals();
1244 $date_start = $lines[$i]->date_debut_prevue;
1245 if ($lines[$i]->date_debut_reel) {
1246 $date_start = $lines[$i]->date_debut_reel;
1248 if ($lines[$i]->date_start) {
1249 $date_start = $lines[$i]->date_start;
1251 $date_end = $lines[$i]->date_fin_prevue;
1252 if ($lines[$i]->date_fin_reel) {
1253 $date_end = $lines[$i]->date_fin_reel;
1255 if ($lines[$i]->date_end) {
1256 $date_end = $lines[$i]->date_end;
1260 $object->special_code = $lines[$i]->special_code;
1263 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
1265 $pu_currency = $lines[$i]->multicurrency_subprice;
1267 $pu = $lines[$i]->subprice;
1272 $result = $object->addline(
1276 $lines[$i]->localtax1_tx,
1277 $lines[$i]->localtax2_tx,
1279 $lines[$i]->fk_product,
1280 $lines[$i]->remise_percent,
1284 $lines[$i]->info_bits,
1289 $lines[$i]->array_options,
1290 $lines[$i]->fk_unit,
1293 $lines[$i]->ref_supplier,
1294 $lines[$i]->special_code
1304 $object->fetch_lines();
1311 } elseif (!$error) {
1312 $id = $object->create($user);
1321 $langs->load(
"errors");
1326 $_GET[
'socid'] = $_POST[
'socid'];
1330 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1331 $outputlangs = $langs;
1332 $result = $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1339 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1342 } elseif ($action ==
'updateline' && $usercancreate) {
1346 if (! $object->fetch($id) > 0) {
1349 $object->fetch_thirdparty();
1352 $tva_tx = str_replace(
'*',
'', $tva_tx);
1354 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_subprice') !=
'') {
1356 $price_base_type =
'HT';
1359 $price_base_type =
'TTC';
1362 if (
GETPOST(
'productid') > 0) {
1364 if (!empty($conf->global->SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY)) {
1366 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1371 $prod->fetch(
GETPOST(
'productid'));
1372 $label = $prod->description;
1373 if (trim(
GETPOST(
'product_desc',
'restricthtml')) != trim($label)) {
1374 $label =
GETPOST(
'product_desc',
'restricthtml');
1377 $type = $prod->type;
1379 $label =
GETPOST(
'product_desc',
'restricthtml');
1388 if (preg_match(
'/\*/', $tva_tx)) {
1393 $tva_tx = str_replace(
'*',
'', $tva_tx);
1394 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
1395 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
1401 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
1402 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
1404 if (is_array($extralabelsline)) {
1405 foreach ($extralabelsline as $key => $value) {
1406 unset($_POST[
"options_".$key]);
1410 $result = $object->updateline(
1432 unset($_POST[
'label']);
1433 unset($_POST[
'fourn_ref']);
1434 unset($_POST[
'date_starthour']);
1435 unset($_POST[
'date_startmin']);
1436 unset($_POST[
'date_startsec']);
1437 unset($_POST[
'date_startday']);
1438 unset($_POST[
'date_startmonth']);
1439 unset($_POST[
'date_startyear']);
1440 unset($_POST[
'date_endhour']);
1441 unset($_POST[
'date_endmin']);
1442 unset($_POST[
'date_endsec']);
1443 unset($_POST[
'date_endday']);
1444 unset($_POST[
'date_endmonth']);
1445 unset($_POST[
'date_endyear']);
1446 unset($_POST[
'price_ttc']);
1447 unset($_POST[
'price_ht']);
1454 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') && $usercancreate) {
1456 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
1457 $vat_rate = str_replace(
'*',
'', $vat_rate);
1458 $localtax1_rate =
get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
1459 $localtax2_rate =
get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
1460 foreach ($object->lines as $line) {
1461 $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);
1463 } elseif ($action ==
'addline' && $usercancreate) {
1467 $ret = $object->fetch($id);
1472 $ret = $object->fetch_thirdparty();
1474 $langs->load(
'errors');
1483 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
1484 if ($prod_entry_mode ==
'free') {
1487 $idprod =
GETPOST(
'idprod',
'int');
1495 $price_ttc_devise =
price2num(
GETPOST(
'multicurrency_price_ttc'),
'CU', 2);
1499 if (empty($remise_percent)) {
1500 $remise_percent = 0;
1504 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
1505 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
1507 if (is_array($extralabelsline)) {
1509 foreach ($extralabelsline as $key => $value) {
1510 unset($_POST[
"options_".$key]);
1514 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
1515 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1518 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
1519 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
1522 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
1523 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
1526 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
1527 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
1530 if (!
GETPOST(
'qty',
'alpha')) {
1531 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1535 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
1536 if ($combinations =
GETPOST(
'combinations',
'array')) {
1540 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1541 $idprod = $res->fk_product_child;
1543 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1549 if ($prod_entry_mode !=
'free' && empty($error)) {
1553 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
1558 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
1560 $res = $productsupplier->fetch($idprod);
1563 if (!empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) {
1565 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1566 if ($productsupplier->fourn_socid != $socid) {
1567 $productsupplier->ref_supplier =
'';
1570 $fksoctosearch = $object->thirdparty->id;
1571 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1573 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
1574 $qtytosearch = $qty;
1576 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
1577 $res = $productsupplier->fetch($idprod);
1581 $label = $productsupplier->label;
1583 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
1584 $outputlangs = $langs;
1586 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1587 $newlang =
GETPOST(
'lang_id',
'aZ09');
1589 if (empty($newlang)) {
1590 $newlang = $object->thirdparty->default_lang;
1592 if (!empty($newlang)) {
1593 $outputlangs =
new Translate(
"", $conf);
1594 $outputlangs->setDefaultLang($newlang);
1596 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->description;
1598 $desc = $productsupplier->description;
1601 if (!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
1602 $desc = $productsupplier->desc_supplier;
1606 if (trim($product_desc) == trim($desc) && !empty($conf->global->PRODUIT_AUTOFILL_DESC)) {
1609 if (!empty($product_desc) && !empty($conf->global->MAIN_NO_CONCAT_DESCRIPTION)) {
1610 $desc = $product_desc;
1612 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
1613 $desc =
dol_concatdesc($desc, $product_desc,
'', !empty($conf->global->MAIN_CHANGE_ORDER_CONCAT_DESCRIPTION));
1616 $ref_supplier = $productsupplier->ref_supplier;
1620 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1621 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1623 if (empty($tva_tx)) {
1626 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
1627 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
1629 $type = $productsupplier->type;
1630 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1631 $price_base_type =
'HT';
1633 $pu_devise =
price2num($price_ht_devise,
'CU');
1634 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
1635 $price_base_type =
'TTC';
1637 $pu_devise =
price2num($price_ttc_devise,
'CU');
1639 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
1640 if (empty($object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code != $object->multicurrency_code)) {
1641 $pu = $productsupplier->fourn_pu;
1644 $pu = $productsupplier->fourn_pu;
1645 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
1649 $ref_supplier = $productsupplier->ref_supplier;
1651 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1652 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1653 if (empty($tva_tx)) {
1656 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
1657 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
1663 $result = $object->addline(
1678 min($rank, count($object->lines) + 1),
1681 $productsupplier->fk_unit,
1684 GETPOST(
'fourn_ref',
'alpha'),
1688 if ($idprod == -99 || $idprod == 0) {
1691 $langs->load(
"errors");
1692 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
1694 if ($idprod == -1) {
1697 $langs->load(
"errors");
1698 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
1700 } elseif (empty($error)) {
1701 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
1702 $tva_tx = str_replace(
'*',
'', $tva_tx);
1703 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1704 $desc = $product_desc;
1706 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1708 $fk_unit =
GETPOST(
'units',
'alpha');
1710 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
1715 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
1716 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
1718 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1722 $pu_ht =
price2num($pu_ttc / (1 + ($tva_tx / 100)),
'MU');
1724 $price_base_type =
'HT';
1725 $pu_devise =
price2num($price_ht_devise,
'CU');
1727 $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);
1731 if (!$error && $result > 0) {
1735 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1736 $outputlangs = $langs;
1739 $newlang =
GETPOST(
'lang_id',
'aZ09');
1742 $newlang = $object->thirdparty->default_lang;
1744 if (!empty($newlang)) {
1745 $outputlangs =
new Translate(
"", $conf);
1746 $outputlangs->setDefaultLang($newlang);
1748 $model = $object->model_pdf;
1749 $ret = $object->fetch($id);
1751 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1757 unset($_POST [
'prod_entry_mode']);
1759 unset($_POST[
'qty']);
1760 unset($_POST[
'type']);
1761 unset($_POST[
'remise_percent']);
1762 unset($_POST[
'pu']);
1763 unset($_POST[
'price_ht']);
1764 unset($_POST[
'multicurrency_price_ht']);
1765 unset($_POST[
'price_ttc']);
1766 unset($_POST[
'fourn_ref']);
1767 unset($_POST[
'tva_tx']);
1768 unset($_POST[
'label']);
1769 unset($localtax1_tx);
1770 unset($localtax2_tx);
1771 unset($_POST[
'np_marginRate']);
1772 unset($_POST[
'np_markRate']);
1773 unset($_POST[
'dp_desc']);
1774 unset($_POST[
'idprodfournprice']);
1775 unset($_POST[
'units']);
1777 unset($_POST[
'date_starthour']);
1778 unset($_POST[
'date_startmin']);
1779 unset($_POST[
'date_startsec']);
1780 unset($_POST[
'date_startday']);
1781 unset($_POST[
'date_startmonth']);
1782 unset($_POST[
'date_startyear']);
1783 unset($_POST[
'date_endhour']);
1784 unset($_POST[
'date_endmin']);
1785 unset($_POST[
'date_endsec']);
1786 unset($_POST[
'date_endday']);
1787 unset($_POST[
'date_endmonth']);
1788 unset($_POST[
'date_endyear']);
1795 } elseif ($action ==
'classin' && $usercancreate) {
1796 $object->fetch($id);
1797 $result = $object->setProject($projectid);
1798 } elseif ($action ==
'confirm_edit' && $confirm ==
'yes' && $usercancreate) {
1800 $object->fetch($id);
1802 $totalpaid = $object->getSommePaiement();
1803 $resteapayer = $object->total_ttc - $totalpaid;
1806 $ventilExportCompta = $object->getVentilExportCompta();
1808 if (!$ventilExportCompta) {
1811 $idwarehouse =
GETPOST(
'idwarehouse');
1813 $object->fetch_thirdparty();
1815 $qualified_for_stock_change = 0;
1816 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
1817 $qualified_for_stock_change = $object->hasProductsOrServices(2);
1819 $qualified_for_stock_change = $object->hasProductsOrServices(1);
1823 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
1824 $langs->load(
"stocks");
1825 if (!$idwarehouse || $idwarehouse == -1) {
1827 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1832 $object->setDraft($user, $idwarehouse);
1835 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1836 $outputlangs = $langs;
1839 $newlang =
GETPOST(
'lang_id',
'aZ09');
1842 $newlang = $object->thirdparty->default_lang;
1844 if (!empty($newlang)) {
1845 $outputlangs =
new Translate(
"", $conf);
1846 $outputlangs->setDefaultLang($newlang);
1848 $model = $object->model_pdf;
1849 $ret = $object->fetch($id);
1851 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1860 } elseif ($action ==
'reopen' && $usercancreate) {
1862 $result = $object->fetch($id);
1865 $result = $object->setUnpaid($user);
1867 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
1876 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1879 $triggersendname =
'BILL_SUPPLIER_SENTBYMAIL';
1881 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
1882 $trackid =
'sinv'.$object->id;
1883 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1886 $upload_dir = $conf->fournisseur->facture->dir_output;
1887 $permissiontoadd = $usercancreate;
1888 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1891 if ($action ==
'calculate') {
1892 $calculationrule =
GETPOST(
'calculationrule');
1894 $object->fetch($id);
1895 $object->fetch_thirdparty();
1896 $result = $object->update_price(0, (($calculationrule ==
'totalofround') ?
'0' :
'1'), 0, $object->thirdparty);
1902 if ($action ==
'update_extras') {
1906 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
1914 $result = $object->insertExtraFields(
'BILL_SUPPLIER_MODIFY');
1922 $action =
'edit_extras';
1926 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $usercancreate) {
1927 if ($action ==
'addcontact') {
1928 $result = $object->fetch($id);
1930 if ($result > 0 && $id > 0) {
1933 $result = $object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1937 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1940 if ($object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1941 $langs->load(
"errors");
1942 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1947 } elseif ($action ==
'swapstatut') {
1949 if ($object->fetch($id)) {
1950 $result = $object->swapContactStatus(
GETPOST(
'ligne',
'int'));
1954 } elseif ($action ==
'deletecontact') {
1956 $object->fetch($id);
1957 $result = $object->delete_contact(
GETPOST(
"lineid",
'int'));
1960 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1976 $bankaccountstatic =
new Account($db);
1984 $title = $object->ref.
" - ".$langs->trans(
'Card');
1985 if ($action ==
'create') {
1986 $title = $langs->trans(
"NewSupplierInvoice");
1988 $help_url =
'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
1992 if ($action ==
'create') {
1995 print
load_fiche_titre($langs->trans(
'NewSupplierInvoice'),
'',
'supplier_invoice');
1999 $currency_code = $conf->currency;
2002 if (
GETPOST(
'socid',
'int') > 0) {
2004 $societe->fetch(
GETPOST(
'socid',
'int'));
2005 if (
isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
2006 $currency_code = $societe->multicurrency_code;
2010 if (!empty($origin) && !empty($originid)) {
2012 $element = $subelement = $origin;
2014 if ($element ==
'project') {
2015 $projectid = $originid;
2016 $element =
'projet';
2020 if ($element ==
'order') {
2021 $element = $subelement =
'commande';
2023 if ($element ==
'propal') {
2024 $element =
'comm/propal'; $subelement =
'propal';
2026 if ($element ==
'contract') {
2027 $element = $subelement =
'contrat';
2029 if ($element ==
'order_supplier') {
2030 $element =
'fourn'; $subelement =
'fournisseur.commande';
2033 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
2034 $classname = ucfirst($subelement);
2035 if ($classname ==
'Fournisseur.commande') {
2036 $classname =
'CommandeFournisseur';
2038 $objectsrc =
new $classname($db);
2039 $objectsrc->fetch($originid);
2040 $objectsrc->fetch_thirdparty();
2042 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
2044 $soc = $objectsrc->thirdparty;
2046 $cond_reglement_id = 0;
2047 $mode_reglement_id = 0;
2049 $remise_percent = 0;
2050 $remise_absolue = 0;
2051 $transport_mode_id = 0;
2054 if (!empty($objectsrc->cond_reglement_id)) {
2055 $cond_reglement_id = $objectsrc->cond_reglement_id;
2057 if (!empty($objectsrc->mode_reglement_id)) {
2058 $mode_reglement_id = $objectsrc->mode_reglement_id;
2060 if (!empty($objectsrc->fk_account)) {
2061 $fk_account = $objectsrc->fk_account;
2063 if (!empty($objectsrc->remise_percent)) {
2064 $remise_percent = $objectsrc->remise_percent;
2066 if (!empty($objectsrc->remise_absolue)) {
2067 $remise_absolue = $objectsrc->remise_absolue;
2069 if (!empty($objectsrc->transport_mode_id)) {
2070 $transport_mode_id = $objectsrc->transport_mode_id;
2073 if (empty($cond_reglement_id)
2074 || empty($mode_reglement_id)
2075 || empty($fk_account)
2076 || empty($remise_percent)
2077 || empty($remise_absolue)
2078 || empty($transport_mode_id)
2080 if ($origin ==
'reception') {
2082 if (!isset($objectsrc->supplier_order)) {
2083 $objectsrc->fetch_origin();
2086 if (!empty($objectsrc->commandeFournisseur)) {
2087 $supplierOrder = $objectsrc->commandeFournisseur;
2088 if (empty($cond_reglement_id) && !empty($supplierOrder->cond_reglement_id)) {
2089 $cond_reglement_id = $supplierOrder->cond_reglement_id;
2091 if (empty($mode_reglement_id) && !empty($supplierOrder->mode_reglement_id)) {
2092 $mode_reglement_id = $supplierOrder->mode_reglement_id;
2094 if (empty($fk_account) && !empty($supplierOrder->fk_account)) {
2095 $fk_account = $supplierOrder->fk_account;
2097 if (empty($remise_percent) && !empty($supplierOrder->remise_percent)) {
2098 $remise_percent = $supplierOrder->remise_percent;
2100 if (empty($remise_absolue) && !empty($supplierOrder->remise_absolue)) {
2101 $remise_absolue = $supplierOrder->remise_absolue;
2103 if (empty($transport_mode_id) && !empty($supplierOrder->transport_mode_id)) {
2104 $transport_mode_id = $supplierOrder->transport_mode_id;
2111 if (empty($cond_reglement_id) && !empty($soc->cond_reglement_supplier_id)) {
2112 $cond_reglement_id = $soc->cond_reglement_supplier_id;
2114 if (empty($mode_reglement_id) && !empty($soc->mode_reglement_supplier_id)) {
2115 $mode_reglement_id = $soc->mode_reglement_supplier_id;
2117 if (empty($fk_account) && !empty($soc->fk_account)) {
2118 $fk_account = $soc->fk_account;
2120 if (empty($remise_percent) && !empty($soc->remise_supplier_percent)) {
2121 $remise_percent = $soc->remise_supplier_percent;
2123 if (empty($remise_absolue) && !empty($soc->remise_absolue)) {
2124 $remise_absolue = $soc->remise_absolue;
2126 if (empty($transport_mode_id) && !empty($soc->transport_mode_id)) {
2127 $transport_mode_id = $soc->transport_mode_id;
2133 if (!empty($objectsrc->multicurrency_code)) {
2134 $currency_code = $objectsrc->multicurrency_code;
2136 if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) {
2137 $currency_tx = $objectsrc->multicurrency_tx;
2142 $dateinvoice = ($datetmp ==
'' ? (empty($conf->global->MAIN_AUTOFILL_DATE) ? -1 :
'') : $datetmp);
2144 $datedue = ($datetmp ==
'' ?-1 : $datetmp);
2147 $objectsrc->fetch_optionals();
2148 $object->array_options = $objectsrc->array_options;
2150 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
2151 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
2152 $vat_reverse_charge = $societe->vat_reverse_charge;
2153 $transport_mode_id = !empty($societe->transport_mode_supplier_id) ? $societe->transport_mode_supplier_id : 0;
2154 $fk_account = !empty($societe->fk_account) ? $societe->fk_account : 0;
2156 $dateinvoice = ($datetmp ==
'' ? (empty($conf->global->MAIN_AUTOFILL_DATE) ?-1 :
'') : $datetmp);
2158 $datedue = ($datetmp ==
'' ?-1 : $datetmp);
2160 if (
isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
2161 $currency_code = $soc->multicurrency_code;
2166 if (empty($cond_reglement_id)) {
2167 $cond_reglement_id =
GETPOST(
"cond_reglement_id");
2171 if (empty($mode_reglement_id)) {
2172 $mode_reglement_id =
GETPOST(
"mode_reglement_id");
2175 $note_public = $object->getDefaultCreateValueFor(
'note_public', ((!empty($origin) && !empty($originid) && is_object($objectsrc) && !empty($conf->global->FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM)) ? $objectsrc->note_public :
null));
2176 $note_private = $object->getDefaultCreateValueFor(
'note_private', ((!empty($origin) && !empty($originid) && is_object($objectsrc) && !empty($conf->global->FACTUREFOURN_REUSE_NOTES_ON_CREATE_FROM)) ? $objectsrc->note_private :
null));
2178 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2179 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2180 print
'<input type="hidden" name="action" value="add">';
2181 if (!empty($societe->id) && $societe->id > 0) {
2182 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">'.
"\n";
2184 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
2185 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
2186 if (!empty($currency_tx)) {
2187 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
2189 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2193 print
'<table class="border centpercent">';
2196 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
2200 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2201 $invoice_predefined->fetch($fac_recid);
2205 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
2208 if (!empty($societe->id) && $societe->id > 0 && ($fac_recid <= 0 || !empty($invoice_predefined->frequency))) {
2209 $absolute_discount = $societe->getAvailableDiscounts(
'',
'', 0, 1);
2210 print $societe->getNomUrl(1,
'supplier');
2211 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
2213 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
2214 print
img_picto(
'',
'company',
'class="pictofixedwidth"').$form->select_company(empty($societe->id) ? 0 : $societe->id,
'socid', $filter,
'SelectThirdParty', 1, 0,
null, 0,
'minwidth175 widthcentpercentminusxx maxwidth500');
2216 if (empty($conf->global->RELOAD_PAGE_ON_SUPPLIER_CHANGE_DISABLED)) {
2217 print
'<script type="text/javascript">
2218 $(document).ready(function() {
2219 $("#socid").change(function() {
2220 console.log("We have changed the company - Reload page");
2222 $("input[name=action]").val("create");
2223 $("form[name=add]").submit();
2228 if ($fac_recid <= 0) {
2229 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>';
2235 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2236 $invoice_predefined->fetch($fac_recid);
2238 $dateinvoice = $invoice_predefined->date_when;
2239 if (empty($projectid)) {
2240 $projectid = $invoice_predefined->fk_project;
2242 $cond_reglement_id = $invoice_predefined->cond_reglement_id;
2243 $mode_reglement_id = $invoice_predefined->mode_reglement_id;
2244 $fk_account = $invoice_predefined->fk_account;
2245 $note_public = $invoice_predefined->note_public;
2246 $note_private = $invoice_predefined->note_private;
2248 if (!empty($invoice_predefined->multicurrency_code)) {
2249 $currency_code = $invoice_predefined->multicurrency_code;
2251 if (!empty($invoice_predefined->multicurrency_tx)) {
2252 $currency_tx = $invoice_predefined->multicurrency_tx;
2255 $sql =
'SELECT r.rowid, r.titre as title, r.total_ttc';
2256 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as r';
2257 $sql .=
' WHERE r.fk_soc = '. (int) $invoice_predefined->socid;
2259 $resql = $db->query(
$sql);
2261 $num = $db->num_rows($resql);
2265 print
'<tr><td>'.$langs->trans(
'CreateFromRepeatableInvoice').
'</td><td>';
2267 print
'<select class="flat" id="fac_rec" name="fac_rec">';
2268 print
'<option value="0" selected></option>';
2270 $objp = $db->fetch_object($resql);
2271 print
'<option value="'.$objp->rowid.
'"';
2272 if ($fac_recid == $objp->rowid) {
2274 $exampletemplateinvoice->fetch($fac_recid);
2276 print
'>'.$objp->title.
' ('.
price($objp->total_ttc).
' '.$langs->trans(
"TTC").
')</option>';
2281 if (empty($conf->global->RELOAD_PAGE_ON_TEMPLATE_CHANGE_DISABLED)) {
2282 print
'<script type="text/javascript">
2283 $(document).ready(function() {
2284 $("#fac_rec").change(function() {
2285 console.log("We have changed the template invoice - Reload page");
2287 $("input[name=action]").val("create");
2288 $("form[name=add]").submit();
2302 print
'<tr><td class="fieldrequired">'.$langs->trans(
'RefSupplier').
'</td><td><input name="ref_supplier" value="'.(
GETPOSTISSET(
'ref_supplier') ?
GETPOST(
'ref_supplier') : (!empty($objectsrc->ref_supplier) ? $objectsrc->ref_supplier :
'')).
'" type="text"';
2303 if (!empty($societe->id) && $societe->id > 0) {
2309 print
'<tr><td class="tdtop fieldrequired">'.$langs->trans(
'Type').
'</td><td>';
2311 print
'<div class="tagtable">'.
"\n";
2314 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2315 $tmp =
'<input type="radio" id="radio_standard" name="type" value="0"'.(GETPOST(
'type',
'int')?
'' :
'checked').
'> ';
2316 $desc =
$form->textwithpicto($tmp.
'<label for="radio_standard">'.$langs->trans(
"InvoiceStandardAsk").
'</label>', $langs->transnoentities(
"InvoiceStandardDesc"), 1,
'help',
'', 0, 3);
2318 print
'</div></div>';
2320 if (empty($origin) || ($origin ==
'order_supplier' && !empty($originid))) {
2322 if (empty($conf->global->INVOICE_DISABLE_DEPOSIT)) {
2323 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2324 $tmp=
'<input type="radio" id="radio_deposit" name="type" value="3"' . (
GETPOST(
'type') == 3 ?
' checked' :
'') .
'> ';
2325 print
'<script type="text/javascript">
2326 jQuery(document).ready(function() {
2327 jQuery("#typestandardinvoice, #valuestandardinvoice").click(function() {
2328 jQuery("#radio_standard").prop("checked", true);
2330 jQuery("#typedeposit, #valuedeposit").click(function() {
2331 jQuery("#radio_deposit").prop("checked", true);
2333 jQuery("#typedeposit").change(function() {
2334 console.log("We change type of down payment");
2335 jQuery("#radio_deposit").prop("checked", true);
2336 setRadioForTypeOfInvoice();
2338 jQuery("#radio_standard, #radio_deposit, #radio_replacement, #radio_template").change(function() {
2339 setRadioForTypeOfInvoice();
2341 function setRadioForTypeOfInvoice() {
2342 console.log("Change radio");
2343 if (jQuery("#radio_deposit").prop("checked") && (jQuery("#typedeposit").val() == \'amount\' || jQuery("#typedeposit").val() == \'variable\')) {
2344 jQuery(".checkforselect").prop("disabled", true);
2345 jQuery(".checkforselect").prop("checked", false);
2347 jQuery(".checkforselect").prop("disabled", false);
2348 jQuery(".checkforselect").prop("checked", true);
2354 $tmp = $tmp.
'<label for="radio_deposit" >'.$langs->trans(
"InvoiceDeposit").
'</label>';
2355 $desc =
$form->textwithpicto($tmp, $langs->transnoentities(
"InvoiceDepositDesc"), 1,
'help',
'', 0, 3);
2356 print
'<table class="nobordernopadding"><tr>';
2360 if ($origin ==
'order_supplier') {
2361 print
'<td class="nowrap" style="padding-left: 15px">';
2363 'amount' => $langs->transnoentitiesnoconv(
'FixAmount', $langs->transnoentitiesnoconv(
'Deposit')),
2364 'variable' => $langs->transnoentitiesnoconv(
'VarAmountOneLine', $langs->transnoentitiesnoconv(
'Deposit')),
2365 'variablealllines' => $langs->transnoentitiesnoconv(
'VarAmountAllLines')
2367 print
$form->selectarray(
'typedeposit', $arraylist,
GETPOST(
'typedeposit',
'aZ09'), 0, 0, 0,
'', 1);
2369 print
'<td class="nowrap" style="padding-left: 5px">';
2370 print
'<span class="opacitymedium paddingleft">'.$langs->trans(
"AmountOrPercent").
'</span><input type="text" id="valuedeposit" name="valuedeposit" class="width75 right" value="' .
GETPOST(
'valuedeposit',
'int') .
'"/>';
2373 print
'</tr></table>';
2375 print
'</div></div>';
2444 if (empty($origin)) {
2445 if (!empty($societe->id) && $societe->id > 0) {
2447 if (empty($conf->global->INVOICE_DISABLE_CREDIT_NOTE)) {
2449 $facids = $facturestatic->list_qualified_avoir_supplier_invoices($societe->id);
2456 foreach ($facids as $key => $valarray) {
2457 $newinvoice_static->id = $key;
2458 $newinvoice_static->ref = $valarray [
'ref'];
2459 $newinvoice_static->statut = $valarray [
'status'];
2460 $newinvoice_static->type = $valarray [
'type'];
2461 $newinvoice_static->paye = $valarray [
'paye'];
2463 $optionsav .=
'<option value="'.$key.
'"';
2464 if ($key ==
GETPOST(
'fac_avoir',
'int')) {
2465 $optionsav .=
' selected';
2468 $optionsav .= $newinvoice_static->ref;
2469 $optionsav .=
' ('.$newinvoice_static->getLibStatut(1, $valarray [
'paymentornot']).
')';
2470 $optionsav .=
'</option>';
2473 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2474 $tmp =
'<input type="radio" id="radio_creditnote" name="type" value="2"'.(GETPOST(
'type') == 2 ?
' checked' :
'');
2475 if (!$optionsav && empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) {
2476 $tmp .=
' disabled';
2480 print
'<script type="text/javascript">
2481 jQuery(document).ready(function() {
2482 if (! jQuery("#radio_creditnote").is(":checked"))
2484 jQuery("#credit_note_options").hide();
2486 jQuery("#radio_creditnote").click(function() {
2487 jQuery("#credit_note_options").show();
2489 jQuery("#radio_standard, #radio_replacement, #radio_deposit").click(function() {
2490 jQuery("#credit_note_options").hide();
2494 $text = $tmp.
'<label for="radio_creditnote">'.$langs->transnoentities(
"InvoiceAvoirAsk").
'</label> ';
2496 $text .=
'<select class="flat valignmiddle" name="fac_avoir" id="fac_avoir"';
2498 $text .=
' disabled';
2502 $text .=
'<option value="-1"></option>';
2503 $text .= $optionsav;
2505 $text .=
'<option value="-1">'.$langs->trans(
"NoInvoiceToCorrect").
'</option>';
2507 $text .=
'</select>';
2508 $desc =
$form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2511 print
'<div id="credit_note_options" class="clearboth">';
2512 print
' <input type="checkbox" name="invoiceAvoirWithLines" id="invoiceAvoirWithLines" value="1" onclick="if($(this).is(\':checked\') ) { $(\'#radio_creditnote\').prop(\'checked\', true); $(\'#invoiceAvoirWithPaymentRestAmount\').removeAttr(\'checked\'); }" '.(GETPOST(
'invoiceAvoirWithLines',
'int') > 0 ?
'checked' :
'').
' /> ';
2513 print
'<label for="invoiceAvoirWithLines">'.$langs->trans(
'invoiceAvoirWithLines').
"</label>";
2514 print
'<br> <input type="checkbox" name="invoiceAvoirWithPaymentRestAmount" id="invoiceAvoirWithPaymentRestAmount" value="1" onclick="if($(this).is(\':checked\') ) { $(\'#radio_creditnote\').prop(\'checked\', true); $(\'#invoiceAvoirWithLines\').removeAttr(\'checked\'); }" '.(GETPOST(
'invoiceAvoirWithPaymentRestAmount',
'int') > 0 ?
'checked' :
'').
' /> ';
2515 print
'<label for="invoiceAvoirWithPaymentRestAmount">'.$langs->trans(
'invoiceAvoirWithPaymentRestAmount').
"</label>";
2518 print
'</div></div>';
2521 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2522 if (empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) {
2523 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="0" disabled> ';
2525 $tmp=
'<input type="radio" name="type" id="radio_creditnote" value="2"> ';
2527 $text = $tmp.$langs->trans(
"InvoiceAvoir").
' ';
2528 $text .=
'<span class="opacitymedium">('.$langs->trans(
"YouMustCreateInvoiceFromSupplierThird").
')</span> ';
2529 $desc =
$form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2531 print
'</div></div>'.
"\n";
2539 if (!empty($societe->id) && $societe->id > 0) {
2541 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2543 $thirdparty = $societe;
2545 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$societe->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
2546 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2552 print
'<tr><td>'.$langs->trans(
'Label').
'</td><td><input class="minwidth200" name="label" value="'.
dol_escape_htmltag(
GETPOST(
'label')).
'" type="text"></td></tr>';
2555 print
'<tr><td class="fieldrequired">'.$langs->trans(
'DateInvoice').
'</td><td>';
2556 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2557 print
$form->selectDate($dateinvoice,
'',
'',
'',
'',
"add", 1, 1);
2561 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2562 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2563 print
$form->getSelectConditionsPaiements(
GETPOSTISSET(
'cond_reglement_id') ?
GETPOST(
'cond_reglement_id',
'int') : $cond_reglement_id,
'cond_reglement_id');
2567 print
'<tr><td>'.$langs->trans(
'DateMaxPayment').
'</td><td>';
2568 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2569 print
$form->selectDate($datedue,
'ech',
'',
'',
'',
"add", 1, 1);
2573 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2574 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2575 $form->select_types_paiements(
GETPOSTISSET(
'mode_reglement_id') ?
GETPOST(
'mode_reglement_id',
'int') : $mode_reglement_id,
'mode_reglement_id',
'DBIT', 0, 1, 0, 0, 1,
'maxwidth200 widthcentpercentminusx');
2580 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2581 print
img_picto(
'',
'bank_account',
'class="pictofixedwidth"').$form->select_comptes((
GETPOSTISSET(
'fk_account') ?
GETPOST(
'fk_account',
'alpha') : $fk_account),
'fk_account', 0,
'', 1,
'', 0,
'maxwidth200 widthcentpercentminusx', 1);
2589 $langs->load(
'projects');
2590 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
2591 print
img_picto(
'',
'project',
'class="pictofixedwidth"').$formproject->select_projects((empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $societe->id : -1), $projectid,
'projectid', 0, 0, 1, 1, 0, 0, 0,
'', 1, 0,
'maxwidth500 widthcentpercentminusxx');
2592 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>';
2599 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), !empty($objectsrc->label_incoterms) ? $objectsrc->label_incoterms :
'', 1).
'</label></td>';
2600 print
'<td colspan="3" class="maxwidthonsmartphone">';
2601 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2602 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 :
''));
2607 if (!empty($conf->global->ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE)) {
2608 require_once DOL_DOCUMENT_ROOT .
'/core/lib/company.lib.php';
2609 print
'<tr><td>' . $langs->trans(
'VATReverseCharge') .
'</td><td>';
2611 if ($vat_reverse_charge == 1 || $societe->vat_reverse_charge == 1 || ($societe->country_code !=
'FR' &&
isInEEC($societe) && !empty($societe->tva_intra))) {
2612 $vat_reverse_charge = 1;
2614 $vat_reverse_charge = 0;
2617 print
'<input type="checkbox" name="vat_reverse_charge"'. (!empty($vat_reverse_charge) ?
' checked ' :
'') .
'>';
2624 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
2625 print
'<td class="maxwidthonsmartphone">';
2626 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
2627 print
$form->selectMultiCurrency((
GETPOSTISSET(
'multicurrency_code') ?
GETPOST(
'multicurrency_code',
'alpha') : $currency_code),
'multicurrency_code');
2633 if ($fac_recid > 0) {
2634 $dateexample = $newdateinvoice ? $newdateinvoice : $dateinvoice;
2635 if (empty($dateexample)) {
2638 $substitutionarray = array(
2639 '__TOTAL_HT__' => $langs->trans(
"AmountHT").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ht).
')',
2640 '__TOTAL_TTC__' => $langs->trans(
"AmountTTC").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ttc).
')',
2641 '__INVOICE_PREVIOUS_MONTH__' => $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m').
')',
2642 '__INVOICE_MONTH__' => $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%m').
')',
2643 '__INVOICE_NEXT_MONTH__' => $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m').
')',
2644 '__INVOICE_PREVIOUS_MONTH_TEXT__' => $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B').
')',
2645 '__INVOICE_MONTH_TEXT__' => $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%B').
')',
2646 '__INVOICE_NEXT_MONTH_TEXT__' => $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B').
')',
2647 '__INVOICE_PREVIOUS_YEAR__' => $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y').
')',
2648 '__INVOICE_YEAR__' => $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%Y').
')',
2649 '__INVOICE_NEXT_YEAR__' => $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y').
')'
2652 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
2653 foreach ($substitutionarray as $key => $val) {
2654 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
2656 $htmltext .=
'</i>';
2661 $langs->loadLangs(array(
"intracommreport"));
2662 print
'<tr><td>'.$langs->trans(
'IntracommReportTransportMode').
'</td><td>';
2663 $form->selectTransportMode(
GETPOSTISSET(
'transport_mode_id') ?
GETPOST(
'transport_mode_id') : $transport_mode_id,
'transport_mode_id');
2667 if (empty($reshook)) {
2668 print $object->showOptionals($extrafields,
'create');
2672 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
2674 $doleditor =
new DolEditor(
'note_public', (
GETPOSTISSET(
'note_public') ?
GETPOST(
'note_public',
'restricthtml') : $note_public),
'', 80,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PUBLIC) ? 0 : 1, ROWS_3,
'90%');
2675 print $doleditor->Create(1);
2681 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
2683 $doleditor =
new DolEditor(
'note_private', (
GETPOSTISSET(
'note_private') ?
GETPOST(
'note_private',
'restricthtml') : $note_private),
'', 80,
'dolibarr_notes',
'In', 0,
false, empty($conf->global->FCKEDITOR_ENABLE_NOTE_PRIVATE) ? 0 : 1, ROWS_3,
'90%');
2684 print $doleditor->Create(1);
2690 if (!empty($objectsrc) && is_object($objectsrc)) {
2691 print
"\n<!-- ".$classname.
" info -->";
2693 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2694 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2695 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2696 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2697 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2699 $txt = $langs->trans($classname);
2700 if ($classname ==
'CommandeFournisseur') {
2701 $langs->load(
'orders');
2702 $txt = $langs->trans(
"SupplierOrder");
2704 print
'<tr><td>'.$txt.
'</td><td>'.$objectsrc->getNomUrl(1);
2706 $objectsrc->fetchObjectLinked($originid, $origin,
'',
'invoice_supplier');
2708 $invoice_supplier = $objectsrc->linkedObjects[
'invoice_supplier'];
2711 if (is_array($invoice_supplier)) {
2712 $cntinvoice = count($invoice_supplier);
2714 if ($cntinvoice >= 1) {
2716 echo
' ('.$langs->trans(
'LatestRelatedBill').end($invoice_supplier)->getNomUrl(1).
')';
2721 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2722 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2723 if ($mysoc->localtax1_assuj ==
"1" || $object->total_localtax1 != 0) {
2724 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2727 if ($mysoc->localtax2_assuj ==
"1" || $object->total_localtax2 != 0) {
2728 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2730 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2733 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
2734 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
2735 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
2741 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $object, $action);
2742 print $hookmanager->resPrint;
2749 print
$form->buttonsSaveCancel(
"CreateDraft");
2752 if (!empty($objectsrc) && is_object($objectsrc)) {
2755 $title = $langs->trans(
'ProductsAndServices');
2758 print
'<div class="div-table-responsive-no-min">';
2759 print
'<table class="noborder centpercent">';
2761 $objectsrc->printOriginLinesList(
'', $selectedLines);
2769 if ($id > 0 || !empty($ref)) {
2775 $productstatic =
new Product($db);
2777 $result = $object->fetch($id, $ref);
2779 $langs->load(
"errors");
2780 print $langs->trans(
"ErrorRecordNotFound");
2786 $result = $object->fetch_thirdparty();
2792 $societe = $object->thirdparty;
2794 $totalpaid = $object->getSommePaiement();
2795 $totalcreditnotes = $object->getSumCreditNotesUsed();
2796 $totaldeposits = $object->getSumDepositsUsed();
2804 $resteapayer =
price2num($object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
2807 $multicurrency_resteapayer = 0;
2809 $multicurrency_totalpaid = $object->getSommePaiement(1);
2810 $multicurrency_totalcreditnotes = $object->getSumCreditNotesUsed(1);
2811 $multicurrency_totaldeposits = $object->getSumDepositsUsed(1);
2812 $multicurrency_resteapayer =
price2num($object->multicurrency_total_ttc - $multicurrency_totalpaid - $multicurrency_totalcreditnotes - $multicurrency_totaldeposits,
'MT');
2816 if ($resteapayer == 0 && $multicurrency_resteapayer != 0 && $object->multicurrency_code != $conf->currency) {
2817 $resteapayer =
price2num($multicurrency_resteapayer / $object->multicurrency_tx,
'MT');
2821 if ($object->paye) {
2824 $resteapayeraffiche = $resteapayer;
2826 if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
2827 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2828 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2830 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2831 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2834 $absolute_discount = $societe->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
2835 $absolute_creditnote = $societe->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
2836 $absolute_discount =
price2num($absolute_discount,
'MT');
2837 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2842 $objectidnext = $object->getIdReplacingInvoice();
2845 $titre = $langs->trans(
'SupplierInvoice');
2847 print
dol_get_fiche_head($head,
'card', $titre, -1,
'supplier_invoice', 0,
'',
'', 0,
'', 1);
2852 if ($action ==
'converttoreduc') {
2855 $type_fac =
'ExcessPaid';
2857 $type_fac =
'CreditNote';
2859 $type_fac =
'Deposit';
2861 $text = $langs->trans(
'ConfirmConvertToReducSupplier', strtolower($langs->transnoentities($type_fac)));
2862 $text .=
'<br>'.$langs->trans(
'ConfirmConvertToReducSupplier2');
2863 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?facid='.$object->id, $langs->trans(
'ConvertToReduc'), $text,
'confirm_converttoreduc',
'',
"yes", 2);
2867 if ($action ==
'clone') {
2869 $formquestion = array(
2870 array(
'type' =>
'text',
'name' =>
'newsupplierref',
'label' => $langs->trans(
"RefSupplier"),
'value' => $langs->trans(
"CopyOf").
' '.$object->ref_supplier),
2871 array(
'type' =>
'date',
'name' =>
'newdate',
'label' => $langs->trans(
"Date"),
'value' =>
dol_now())
2874 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneInvoice', $object->ref),
'confirm_clone', $formquestion,
'yes', 1, 250);
2878 if ($action ==
'valid') {
2880 if (preg_match(
'/^[\(]?PROV/i', $object->ref) || empty($object->ref)) {
2882 $numref = $object->getNextNumRef($societe);
2884 $numref = $object->ref;
2891 $text = $langs->trans(
'ConfirmValidateBill', $numref);
2899 $formquestion = array();
2901 $qualified_for_stock_change = 0;
2902 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
2903 $qualified_for_stock_change = $object->hasProductsOrServices(2);
2905 $qualified_for_stock_change = $object->hasProductsOrServices(1);
2908 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
2909 $langs->load(
"stocks");
2910 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2913 $warehouse_array = $warehouse->list_array();
2914 if (count($warehouse_array) == 1) {
2915 $label = $object->type ==
FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans(
"WarehouseForStockDecrease", current($warehouse_array)) : $langs->trans(
"WarehouseForStockIncrease", current($warehouse_array));
2916 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
2919 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
2921 $formquestion = array(
2922 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
2926 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ValidateBill'), $text,
'confirm_valid', $formquestion, 1, 1);
2931 if ($action ==
'edit') {
2932 $formquestion = array();
2934 $qualified_for_stock_change = 0;
2935 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
2936 $qualified_for_stock_change = $object->hasProductsOrServices(2);
2938 $qualified_for_stock_change = $object->hasProductsOrServices(1);
2940 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
2941 $langs->load(
"stocks");
2942 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2945 $warehouse_array = $warehouse->list_array();
2946 if (count($warehouse_array) == 1) {
2947 $label = $object->type ==
FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans(
"WarehouseForStockIncrease", current($warehouse_array)) : $langs->trans(
"WarehouseForStockDecrease", current($warehouse_array));
2948 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
2951 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
2953 $formquestion = array(
2954 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
2957 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'UnvalidateBill'), $langs->trans(
'ConfirmUnvalidateBill', $object->ref),
'confirm_edit', $formquestion, 1, 1);
2961 if ($action ==
'paid' && ($resteapayer <= 0 || (!empty($conf->global->SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID) && $resteapayer == $object->total_ttc))) {
2962 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidBill', $object->ref),
'confirm_paid',
'', 0, 1);
2965 if ($action ==
'paid' && $resteapayer > 0 && (empty($conf->global->SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID) || $resteapayer != $object->total_ttc)) {
2969 $close[$i][
'code'] =
'discount_vat';
2971 $close[$i][
'code'] =
'badsupplier';
2973 $close[$i][
'code'] =
'other';
2977 $close[$i][
'label'] = $langs->trans(
"HelpEscompte").
'<br><br>'.$langs->trans(
"ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");
2979 $close[$i][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
2981 $close[$i][
'label'] = $langs->trans(
"Other");
2985 $close[$i][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonDiscount", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
2987 $close[$i][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadCustomer", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
2989 $close[$i][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"Other"), $close[$i][
'label'], 1);
2992 foreach ($close as $key => $val) {
2993 $arrayreasons[$close[$key][
'code']] = $close[$key][
'reason'];
2997 $formquestion = array(
'text' => $langs->trans(
"ConfirmClassifyPaidPartiallyQuestion"), array(
'type' =>
'radio',
'name' =>
'close_code',
'label' => $langs->trans(
"Reason"),
'values' => $arrayreasons), array(
'type' =>
'text',
'name' =>
'close_note',
'label' => $langs->trans(
"Comment"),
'value' =>
'',
'morecss' =>
'minwidth300'));
2999 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?facid='.$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidPartially', $object->ref),
'confirm_paid_partially', $formquestion,
"yes", 1, 310);
3003 if ($action ==
'canceled') {
3005 $close[1][
'code'] =
'badsupplier';
3006 $close[2][
'code'] =
'abandon';
3008 $close[1][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
3009 $close[2][
'label'] = $langs->trans(
"ConfirmClassifyAbandonReasonOtherDesc");
3011 $close[1][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadSupplier", $object->ref), $close[1][
'label'], 1);
3012 $close[2][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyAbandonReasonOther"), $close[2][
'label'], 1);
3014 $arrayreasons[$close[1][
'code']] = $close[1][
'reason'];
3015 $arrayreasons[$close[2][
'code']] = $close[2][
'reason'];
3018 $formquestion = array(
'text' => $langs->trans(
"ConfirmCancelBillQuestion"), array(
'type' =>
'radio',
'name' =>
'close_code',
'label' => $langs->trans(
"Reason"),
'values' => $arrayreasons), array(
'type' =>
'text',
'name' =>
'close_note',
'label' => $langs->trans(
"Comment"),
'value' =>
'',
'morecss' =>
'minwidth300'));
3020 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $langs->trans(
'CancelBill'), $langs->trans(
'ConfirmCancelBill', $object->ref),
'confirm_canceled', $formquestion,
"yes", 1, 250);
3024 if ($action ==
'delete') {
3025 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteBill'), $langs->trans(
'ConfirmDeleteBill'),
'confirm_delete',
'', 0, 1);
3027 if ($action ==
'deletepayment') {
3028 $payment_id =
GETPOST(
'paiement_id');
3029 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&paiement_id='.$payment_id, $langs->trans(
'DeletePayment'), $langs->trans(
'ConfirmDeletePayment'),
'confirm_delete_paiement',
'', 0, 1);
3033 if ($action ==
'ask_deleteline') {
3034 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
3039 $reshook = $hookmanager->executeHooks(
'formConfirm',
$parameters, $object, $action);
3040 if (empty($reshook)) {
3042 } elseif ($reshook > 0) {
3052 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
3054 $morehtmlref =
'<div class="refidno">';
3056 $morehtmlref .=
$form->editfieldkey(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $usercancreate,
'string',
'', 0, 1);
3057 $morehtmlref .=
$form->editfieldval(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $usercancreate,
'string',
'',
null,
null,
'', 1);
3059 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1,
'supplier');
3060 if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) {
3061 $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>';
3065 $langs->load(
"projects");
3066 $morehtmlref .=
'<br>';
3067 if ($permissiontoadd) {
3068 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
3069 if ($action !=
'classify') {
3070 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.((int) $object->id).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
3072 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, (empty($conf->global->PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS) ? $object->socid : -1), $object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
3074 if (!empty($object->fk_project)) {
3076 $proj->fetch($object->fk_project);
3077 $morehtmlref .= $proj->getNomUrl(1);
3079 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
3084 $morehtmlref .=
'</div>';
3086 $object->totalpaid = $totalpaid;
3088 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
3090 print
'<div class="fichecenter">';
3091 print
'<div class="fichehalfleft">';
3092 print
'<div class="underbanner clearboth"></div>';
3094 print
'<table class="border tableforfield centpercent">';
3097 print
'<tr><td class="titlefield">'.$langs->trans(
'Type').
'</td><td>';
3098 print
'<span class="badgeneutral">';
3099 print $object->getLibType();
3103 $facreplaced->fetch($object->fk_facture_source);
3104 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"ReplaceInvoice", $facreplaced->getNomUrl(1)).
'</span>';
3108 if ($object->fk_facture_source > 0) {
3109 $facusing->fetch($object->fk_facture_source);
3110 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"CorrectInvoice", $facusing->getNomUrl(1)).
'</span>';
3112 $langs->load(
"errors");
3113 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"WarningCorrectedInvoiceNotFound").
'</span>';
3117 $facidavoir = $object->getListIdAvoirFromInvoice();
3118 if (count($facidavoir) > 0) {
3119 $invoicecredits = array();
3120 foreach ($facidavoir as $id) {
3122 $facavoir->fetch($id);
3123 $invoicecredits[] = $facavoir->getNomUrl(1);
3125 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"InvoiceHasAvoir") . (count($invoicecredits) ?
' ' :
'') . implode(
',', $invoicecredits);
3128 if (isset($objectidnext) && $objectidnext > 0) {
3131 $facthatreplace->fetch($objectidnext);
3132 print
' <span class="opacitymediumbycolor paddingleft">'.str_replace(
'{s1}', $facthatreplace->getNomUrl(1), $langs->transnoentities(
"ReplacedByInvoice",
'{s1}')).
'</span>';
3136 $result = $discount->fetch(0, 0, $object->id);
3138 print
' <span class="opacitymediumbycolor paddingleft">';
3139 $s = $langs->trans(
"CreditNoteConvertedIntoDiscount",
'{s1}',
'{s2}');
3140 $s = str_replace(
'{s1}', $object->getLibType(1), $s);
3141 $s = str_replace(
'{s2}', $discount->getNomUrl(1,
'discount'), $s);
3143 print
'</span><br>';
3147 if ($object->fk_fac_rec_source > 0) {
3149 $result = $tmptemplate->fetch($object->fk_fac_rec_source);
3151 print
' <span class="opacitymediumbycolor paddingleft">';
3152 $link =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$tmptemplate->id.
'">'.
dol_escape_htmltag($tmptemplate->titre).
'</a>';
3153 $s = $langs->transnoentities(
"GeneratedFromSupplierTemplate", $link);
3163 print
'<!-- Discounts -->'.
"\n";
3164 print
'<tr><td>'.$langs->trans(
'DiscountStillRemaining');
3167 $thirdparty = $societe;
3169 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
3175 print
'<td>'.$form->editfieldkey(
"Label",
'label', $object->label, $object, $usercancreate).
'</td>';
3176 print
'<td>'.$form->editfieldval(
"Label",
'label', $object->label, $object, $usercancreate).
'</td>';
3184 print
$form->editfieldkey(
"DateInvoice",
'datef', $object->datep, $object, $form_permission,
'datepicker');
3185 print
'</td><td colspan="3">';
3186 print
$form->editfieldval(
"Date",
'datef', $object->datep, $object, $form_permission,
'datepicker');
3190 $langs->load(
'bills');
3191 print
'<tr><td class="nowrap">';
3192 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3193 print $langs->trans(
'PaymentConditions');
3195 if ($action !=
'editconditions' && $form_permission) {
3196 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>';
3198 print
'</tr></table>';
3200 if ($action ==
'editconditions') {
3201 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'cond_reglement_id');
3203 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'none');
3210 print
$form->editfieldkey(
"DateMaxPayment",
'date_lim_reglement', $object->date_echeance, $object, $form_permission,
'datepicker');
3212 print
$form->editfieldval(
"DateMaxPayment",
'date_lim_reglement', $object->date_echeance, $object, $form_permission,
'datepicker');
3213 if ($action !=
'editdate_lim_reglement' && $object->hasDelay()) {
3219 $langs->load(
'bills');
3220 print
'<tr><td class="nowrap">';
3221 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3222 print $langs->trans(
'PaymentMode');
3224 if ($action !=
'editmode' && $form_permission) {
3225 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>';
3227 print
'</tr></table>';
3229 if ($action ==
'editmode') {
3230 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
3232 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'none');
3241 print
'<table class="nobordernopadding" width="100%"><tr><td>';
3242 print
$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
3244 if ($action !=
'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT) {
3245 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencycode&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
3247 print
'</tr></table>';
3249 if ($action ==
'editmulticurrencycode') {
3250 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'multicurrency_code');
3252 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'none');
3257 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
3260 print
'<table class="nobordernopadding centpercent"><tr><td>';
3261 print
$form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
3263 if ($action !=
'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
3264 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencyrate&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
3266 print
'</tr></table>';
3268 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
3269 if ($action ==
'actualizemulticurrencyrate') {
3272 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'multicurrency_tx', $object->multicurrency_code);
3274 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'none', $object->multicurrency_code);
3275 if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
3276 print
'<div class="inline-block"> ';
3277 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
3287 print
'<tr><td class="nowrap">';
3288 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3289 print $langs->trans(
'BankAccount');
3291 if ($action !=
'editbankaccount' && $usercancreate) {
3292 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>';
3294 print
'</tr></table>';
3296 if ($action ==
'editbankaccount') {
3297 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'fk_account', 1);
3299 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'none');
3306 if (!empty($conf->global->ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE)) {
3307 print
'<tr><td class="nowrap">';
3308 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3309 print $langs->trans(
'VATReverseCharge');
3311 if ($action !=
'editvatreversecharge' && $usercancreate) {
3312 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editvatreversecharge&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetVATReverseCharge'), 1).
'</a></td>';
3314 print
'</tr></table>';
3316 if ($action ==
'editvatreversecharge') {
3317 print
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
3318 print
'<input type="hidden" name="action" value="setvatreversecharge">';
3319 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3321 print
'<input type="checkbox" name="vat_reverse_charge"' . ($object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
'>';
3323 print
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
3326 print
'<input type="checkbox" name="vat_reverse_charge"'. ($object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
' disabled>';
3334 print
'<table width="100%" class="nobordernopadding"><tr><td>';
3335 print $langs->trans(
'IncotermLabel');
3336 print
'<td><td class="right">';
3337 if ($usercancreate) {
3338 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?facid='.$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
3342 print
'</td></tr></table>';
3345 if ($action !=
'editincoterm') {
3346 print
$form->textwithpicto($object->display_incoterms(), $object->label_incoterms, 1);
3348 print
$form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms :
''), (!empty($object->location_incoterms) ? $object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.$object->id);
3355 $langs->loadLangs(array(
"intracommreport"));
3357 print
'<table class="nobordernopadding centpercent"><tr><td>';
3358 print $langs->trans(
'IntracommReportTransportMode');
3360 if ($action !=
'edittransportmode' && ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"))) {
3361 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edittransportmode&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit().
'</a></td>';
3363 print
'</tr></table>';
3366 if ($action ==
'edittransportmode') {
3367 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->transport_mode_id,
'transport_mode_id', 1, 1);
3369 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->transport_mode_id,
'none');
3376 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
3381 print
'<div class="fichehalfright">';
3382 print
'<div class="underbanner clearboth"></div>';
3384 print
'<table class="border tableforfield centpercent">';
3387 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
3388 print
'<td class="nowrap amountcard right">' .
price($object->total_ht,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
3389 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
3390 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_ht,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
3395 print
'<td>' . $langs->trans(
'AmountVAT') .
'</td>';
3396 print
'<td class="nowrap amountcard right">';
3397 if (
GETPOST(
'calculationrule')) {
3398 $calculationrule =
GETPOST(
'calculationrule',
'alpha');
3400 $calculationrule = (empty($conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND) ?
'totalofround' :
'roundoftotal');
3402 if ($calculationrule ==
'totalofround') {
3403 $calculationrulenum = 1;
3405 $calculationrulenum = 2;
3408 if ($object->getVentilExportCompta() == 0) {
3409 $s =
'<span class="hideonsmartphone opacitymedium">' . $langs->trans(
"ReCalculate") .
' </span>';
3410 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' . $object->id .
'&action=calculate&calculationrule=totalofround">' . $langs->trans(
"Mode1") .
'</a>';
3412 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' . $object->id .
'&action=calculate&calculationrule=roundoftotal">' . $langs->trans(
"Mode2") .
'</a>';
3413 print
'<div class="inline-block">';
3414 print
$form->textwithtooltip($s, $langs->trans(
"CalculationRuleDesc", $calculationrulenum) .
'<br>' . $langs->trans(
"CalculationRuleDescSupplier"), 2, 1,
img_picto(
'',
'help'),
'', 3,
'', 0,
'recalculate');
3415 print
' ';
3418 print
price($object->total_tva, 1, $langs, 0, -1, -1, $conf->currency);
3420 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
3421 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_tva,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
3425 if ($societe->localtax1_assuj ==
"1") {
3427 print
'<td>' . $langs->transcountry(
"AmountLT1", $societe->country_code) .
'</td>';
3428 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax1, 1, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3431 if ($societe->localtax2_assuj ==
"1") {
3433 print
'<td>' . $langs->transcountry(
"AmountLT2", $societe->country_code) .
'</td>';
3434 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax2, 1, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3439 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
3440 print
'<td class="nowrap amountcard right">' .
price($object->total_ttc,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
3441 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
3442 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_ttc,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
3458 $nbrows = 9; $nbcols = 3;
3463 $nbrows++; $nbcols++;
3473 if ($societe->localtax1_assuj ==
"1") {
3476 if ($societe->localtax2_assuj ==
"1") {
3480 $sql =
'SELECT p.datep as dp, p.ref, p.num_paiement as num_payment, p.rowid, p.fk_bank,';
3481 $sql .=
' c.id as paiement_type, c.code as payment_code,';
3482 $sql .=
' pf.amount,';
3483 $sql .=
' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.fk_accountancy_journal';
3484 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn as p';
3485 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank as b ON p.fk_bank = b.rowid';
3486 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank_account as ba ON b.fk_account = ba.rowid';
3487 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id';
3488 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf ON pf.fk_paiementfourn = p.rowid';
3489 $sql .=
' WHERE pf.fk_facturefourn = '.((int) $object->id);
3490 $sql .=
' ORDER BY p.datep, p.tms';
3492 $result = $db->query(
$sql);
3494 $num = $db->num_rows($result);
3497 print
'<div class="div-table-responsive-no-min">';
3498 print
'<table class="noborder paymenttable centpercent">';
3499 print
'<tr class="liste_titre">';
3501 print
'<td>'.$langs->trans(
'Date').
'</td>';
3502 print
'<td>'.$langs->trans(
'Type').
'</td>';
3504 print
'<td class="right">'.$langs->trans(
'BankAccount').
'</td>';
3506 print
'<td class="right">'.$langs->trans(
'Amount').
'</td>';
3507 print
'<td width="18"> </td>';
3512 $objp = $db->fetch_object($result);
3514 $paymentstatic->id = $objp->rowid;
3515 $paymentstatic->datepaye = $db->jdate($objp->dp);
3516 $paymentstatic->ref = ($objp->ref ? $objp->ref : $objp->rowid);
3517 $paymentstatic->num_payment = $objp->num_payment;
3519 $paymentstatic->paiementcode = $objp->payment_code;
3520 $paymentstatic->type_code = $objp->payment_code;
3521 $paymentstatic->type_label = $objp->payment_type;
3523 print
'<tr class="oddeven">';
3524 print
'<td class="nowraponall">';
3525 print $paymentstatic->getNomUrl(1);
3527 print
'<td>'.dol_print_date($db->jdate($objp->dp),
'day').
'</td>';
3528 $s =
$form->form_modes_reglement(
null, $objp->paiement_type,
'none',
'', 1, 0,
'', 1).
' '.$objp->num_payment;
3529 print
'<td class="tdoverflowmax125" title="'.dol_escape_htmltag($s).
'">';
3533 $bankaccountstatic->id = $objp->baid;
3534 $bankaccountstatic->ref = $objp->baref;
3535 $bankaccountstatic->label = $objp->baref;
3536 $bankaccountstatic->number = $objp->banumber;
3539 $bankaccountstatic->account_number = $objp->account_number;
3542 $accountingjournal->fetch($objp->fk_accountancy_journal);
3543 $bankaccountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1,
'', 1);
3546 print
'<td class="right">';
3547 if ($objp->baid > 0) {
3548 print $bankaccountstatic->getNomUrl(1,
'transactions');
3552 print
'<td class="right">'.price($sign * $objp->amount).
'</td>';
3553 print
'<td class="center">';
3556 $paiementfourn->fetch($objp->rowid);
3558 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=deletepayment&token='.
newToken().
'&paiement_id='.$objp->rowid.
'">';
3564 $totalpaid += $objp->amount;
3568 print
'<tr class="oddeven"><td colspan="'.$nbcols.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td><td></td><td></td></tr>';
3591 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3592 print
'<span class="opacitymedium">';
3594 print $langs->trans(
'AlreadyPaidNoCreditNotesNoDeposits');
3596 print $langs->trans(
'AlreadyPaid');
3599 print
'</td><td class="right"'.(($totalpaid > 0) ?
' class="amountalreadypaid"' :
'').
'>'.
price($totalpaid).
'</td><td> </td></tr>';
3602 $resteapayeraffiche = $resteapayer;
3604 $cssforamountpaymentcomplete =
'amountpaymentcomplete';
3607 $creditnoteamount = 0;
3610 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
3611 $sql .=
" re.description, re.fk_invoice_supplier_source";
3612 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
3613 $sql .=
" WHERE fk_invoice_supplier = ".((int) $object->id);
3614 $resql = $db->query(
$sql);
3616 $num = $db->num_rows($resql);
3620 $obj = $db->fetch_object($resql);
3621 $invoice->fetch($obj->fk_invoice_supplier_source);
3622 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3624 print $langs->trans(
"CreditNote").
' ';
3627 print $langs->trans(
"Deposit").
' ';
3629 print $invoice->getNomUrl(0);
3631 print
'<td class="right">'.price($obj->amount_ttc).
'</td>';
3632 print
'<td class="right">';
3633 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'&action=unlinkdiscount&discountid='.$obj->rowid.
'">';
3634 print
img_picto($langs->transnoentitiesnoconv(
"RemoveDiscount"),
'unlink');
3639 $creditnoteamount += $obj->amount_ttc;
3642 $depositamount += $obj->amount_ttc;
3651 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3652 print
'<span class="opacitymedium">';
3653 print
$form->textwithpicto($langs->trans(
"Discount"), $langs->trans(
"HelpEscompte"), - 1);
3655 print
'</td><td class="right">'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3656 $resteapayeraffiche = 0;
3657 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3661 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3662 print
'<span class="opacitymedium">';
3663 print
$form->textwithpicto($langs->trans(
"Abandoned"), $langs->trans(
"HelpAbandonBadCustomer"), - 1);
3665 print
'</td><td class="right">'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3667 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3671 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3672 print
'<span class="opacitymedium">';
3673 print
$form->textwithpicto($langs->trans(
"ProductReturned"), $langs->trans(
"HelpAbandonProductReturned"), - 1);
3675 print
'</td><td class="right">'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3676 $resteapayeraffiche = 0;
3677 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3681 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3682 $text = $langs->trans(
"HelpAbandonOther");
3683 if ($object->close_note) {
3684 $text .=
'<br><br><b>'.$langs->trans(
"Reason").
'</b>:'.$object->close_note;
3686 print
'<span class="opacitymedium">';
3687 print
$form->textwithpicto($langs->trans(
"Abandoned"), $text, - 1);
3689 print
'</td><td class="right">'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3690 $resteapayeraffiche = 0;
3691 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3695 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3696 print
'<span class="opacitymedium">';
3697 print $langs->trans(
"Billed");
3699 print
'</td><td class="right">'.price($object->total_ttc).
'</td><td> </td></tr>';
3702 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3703 print
'<span class="opacitymedium">';
3704 print $langs->trans(
'RemainderToPay');
3705 if ($resteapayeraffiche < 0) {
3706 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3710 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($resteapayeraffiche).
'</td><td> </td></tr>';
3713 if (
isModEnabled(
'multicurreny') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
3714 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3715 print
'<span class="opacitymedium">';
3716 print $langs->trans(
'RemainderToPayMulticurrency');
3717 if ($resteapayeraffiche < 0) {
3718 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3722 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.(!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency).
' '.
price(
price2num($multicurrency_resteapayer,
'MT')).
'</td><td> </td></tr>';
3725 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3728 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3729 print $langs->trans(
'AlreadyPaidBack');
3730 print
' :</td><td class="right">'.price($sign * $totalpaid).
'</td><td> </td></tr>';
3733 print
'<tr><td colspan="'.$nbcols.
'" class="right">'.$langs->trans(
"Billed").
' :</td><td class="right">'.
price($sign * $object->total_ttc).
'</td><td> </td></tr>';
3736 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3737 print
'<span class="opacitymedium">';
3738 print $langs->trans(
'RemainderToPayBack');
3739 if ($resteapayeraffiche > 0) {
3740 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3744 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($sign * $resteapayeraffiche).
'</td><td> </td></tr>';
3747 if (
isModEnabled(
'multicurreny') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
3748 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3749 print
'<span class="opacitymedium">';
3750 print $langs->trans(
'RemainderToPayBackMulticurrency');
3751 if ($resteapayeraffiche> 0) {
3752 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3756 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>';
3771 print
'<div class="clearboth"></div><br>';
3773 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
3774 $blocname =
'contacts';
3775 $title = $langs->trans(
'ContactsAddresses');
3776 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3779 if (!empty($conf->global->MAIN_DISABLE_NOTES_TAB)) {
3781 $blocname =
'notes';
3782 $title = $langs->trans(
'Notes');
3783 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3790 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="POST">';
3791 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3792 print
'<input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">';
3793 print
'<input type="hidden" name="mode" value="">';
3794 print
'<input type="hidden" name="page_y" value="">';
3795 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
3796 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
3797 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
3800 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
3803 print
'<div class="div-table-responsive-no-min">';
3804 print
'<table id="tablelines" class="noborder noshadow centpercent">';
3806 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
3807 $forceall = 1; $dateSelector = 0; $inputalsopricewithtax = 1;
3808 $senderissupplier = 2;
3810 if (!empty($conf->global->SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY)) {
3811 $senderissupplier = 1;
3815 if (!empty($object->lines)) {
3816 $object->printObjectLines($action, $societe, $mysoc, $lineid, 1);
3819 $num = count($object->lines);
3823 if ($action !=
'editline') {
3827 $reshook = $hookmanager->executeHooks(
'formAddObjectLine',
$parameters, $object, $action);
3828 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
3829 if (empty($reshook))
3830 $object->formAddObjectLine(1, $societe, $mysoc);
3841 if ($action !=
'presend') {
3846 print
'<div class="tabsAction">';
3849 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
3851 if (empty($reshook)) {
3855 $ventilExportCompta = $object->getVentilExportCompta();
3857 if ($ventilExportCompta == 0) {
3858 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=edit&token='.
newToken().
'">'.$langs->trans(
'Modify').
'</a>';
3860 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseDispatchedInBookkeeping").
'">'.$langs->trans(
'Modify').
'</span>';
3865 $result = $discount->fetch(0, 0, $object->id);
3872 if (!$objectidnext && $object->close_code !=
'replaced' && $usercancreate) {
3873 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
'ReOpen').
'</a>';
3875 if ($usercancreate) {
3876 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseReplacedInvoice").
'">'.$langs->trans(
'ReOpen').
'</span>';
3877 } elseif (empty($conf->global->MAIN_BUTTON_HIDE_UNAUTHORIZED)) {
3878 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'ReOpen').
'</span>';
3885 if (count($object->lines)) {
3886 if ($usercanvalidate) {
3887 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=valid"';
3888 print
'>'.$langs->trans(
'Validate').
'</a>';
3890 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'"';
3891 print
'>'.$langs->trans(
'Validate').
'</a>';
3897 if (empty($user->socid)) {
3900 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
3902 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'SendMail').
'</span>';
3909 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>';
3916 if ($resteapayer == 0) {
3917 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseRemainderToPayIsZero").
'">'.$langs->trans(
'DoPaymentBack').
'</span>';
3919 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>';
3924 if ($object->type ==
FactureFournisseur::TYPE_STANDARD && empty($object->paye) && ($object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits) < 0 && $usercancreate && empty($discount->id)) {
3925 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'&action=converttoreduc">'.$langs->trans(
'ConvertExcessPaidToReduc').
'</a>';
3929 && (!empty($conf->global->SUPPLIER_INVOICE_ALLOW_REUSE_OF_CREDIT_WHEN_PARTIALLY_REFUNDED) || $object->getSommePaiement() == 0)
3931 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'&action=converttoreduc" title="'.
dol_escape_htmltag($langs->trans(
"ConfirmConvertToReducSupplier2")).
'">'.$langs->trans(
'ConvertToReduc').
'</a>';
3935 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'&action=converttoreduc">'.$langs->trans(
'ConvertToReduc').
'</a>';
3943 ($object->type ==
FactureFournisseur::TYPE_DEPOSIT && $object->total_ttc > 0 && ($resteapayer == 0 || (!empty($conf->global->SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID) && $object->total_ttc == $resteapayer)))
3946 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=paid">'.$langs->trans(
'ClassifyPaid').
'</a>';
3950 if ($object->statut ==
FactureFournisseur::STATUS_VALIDATED && $object->paye == 0 && $resteapayer > 0 && (empty($conf->global->SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID) || $object->total_ttc != $resteapayer)) {
3951 if ($totalpaid > 0 || $totalcreditnotes > 0) {
3953 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=paid">'.$langs->trans(
'ClassifyPaidPartially').
'</a>';
3955 if (empty($conf->global->INVOICE_CAN_NEVER_BE_CANCELED)) {
3956 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=canceled">'.$langs->trans(
'ClassifyCanceled').
'</a>';
3969 if (!$objectidnext) {
3970 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>';
3975 if ($action !=
'edit' && $usercancreate) {
3976 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=clone&socid='.$object->socid.
'">'.$langs->trans(
'ToClone').
'</a>';
3981 if (!$objectidnext && count($object->lines) > 0) {
3982 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$object->id.
'&action=create">'.$langs->trans(
"ChangeIntoRepeatableInvoice").
'</a>';
3987 $isErasable = $object->is_erasable();
3988 if ($action !=
'confirm_edit' && ($usercandelete || ($usercancreate && $isErasable == 1))) {
3989 $enableDelete =
false;
3991 $params = (empty($conf->use_javascript_ajax) ? array() : array(
'attr' => array(
'class' =>
'reposition')));
3993 if ($isErasable == -4) {
3994 $htmltooltip = $langs->trans(
"DisabledBecausePayments");
3995 } elseif ($isErasable == -3) {
3996 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastSituationInvoice");
3997 } elseif ($isErasable == -2) {
3998 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastInvoice");
3999 } elseif ($isErasable == -1) {
4000 $htmltooltip = $langs->trans(
"DisabledBecauseDispatchedInBookkeeping");
4001 } elseif ($isErasable <= 0) {
4002 $htmltooltip = $langs->trans(
"DisabledBecauseNotErasable");
4004 $enableDelete =
true;
4007 print
dolGetButtonAction($htmltooltip, $langs->trans(
"Delete"),
'delete', $_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.
newToken(), $object->id, $enableDelete, $params);
4011 if ($action !=
'confirm_edit') {
4012 print
'<div class="fichecenter"><div class="fichehalfleft">';
4018 $subdir =
get_exdir($object->id, 2, 0, 0, $object,
'invoice_supplier').$ref;
4019 $filedir = $conf->fournisseur->facture->dir_output.
'/'.$subdir;
4020 $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.$object->id;
4021 $genallowed = $usercanread;
4022 $delallowed = $usercancreate;
4023 $modelpdf = (!empty($object->model_pdf) ? $object->model_pdf : (empty($conf->global->INVOICE_SUPPLIER_ADDON_PDF) ?
'' : $conf->global->INVOICE_SUPPLIER_ADDON_PDF));
4025 print $formfile->showdocuments(
'facture_fournisseur', $subdir, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 40, 0,
'',
'',
'', $societe->default_lang);
4026 $somethingshown = $formfile->numoffiles;
4029 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'invoice_supplier'));
4030 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
4032 print
'</div><div class="fichehalfright">';
4035 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
4037 $somethingshown =
$formactions->showactions($object,
'invoice_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
4039 print
'</div></div>';
4045 if (
GETPOST(
'modelselected')) {
4046 $action =
'presend';
4050 $modelmail =
'invoice_supplier_send';
4051 $defaulttopic =
'SendBillRef';
4052 $diroutput = $conf->fournisseur->facture->dir_output;
4053 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
4054 $trackid =
'sinv'.$object->id;
4056 include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif($action=='specimen') elseif($action=='setmodel') elseif($action=='del') elseif($action=='setdoc') $formactions
View.
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Class to manage bank accounts.
Class to manage accounting accounts.
const TYPE_SITUATION
Situation invoice.
Class to manage absolute discounts.
Class to manage a WYSIWYG editor.
Class to manage warehouses.
Class to manage suppliers invoices.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
const TYPE_REPLACEMENT
Replacement invoice.
const STATUS_VALIDATED
Validated (need to be paid)
const TYPE_STANDARD
Standard invoice.
const STATUS_ABANDONED
Classified abandoned and no payment done.
const STATUS_CLOSED
Classified paid.
Class to manage invoice templates.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
Class to manage payments for supplier invoices.
Class ProductCombination Used to represent a product combination.
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)
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
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.
facturefourn_prepare_head(FactureFournisseur $object)
Prepare array with list of tabs.
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
GETPOSTINT($paramname, $method=0)
Return value of a param into GET or POST supervariable.
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_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.
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 formated 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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="", $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier 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_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...
$formconfirm
if ($action == 'delbookkeepingyear') {
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.