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');
229 $result = $object->validate($user,
'', $idwarehouse);
234 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
235 $outputlangs = $langs;
238 $newlang =
GETPOST(
'lang_id',
'aZ09');
241 $newlang = $object->thirdparty->default_lang;
243 if (!empty($newlang)) {
245 $outputlangs->setDefaultLang($newlang);
247 $model = $object->model_pdf;
248 $ret = $object->fetch($id);
250 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
257 } elseif ($action ==
'confirm_delete' && $confirm ==
'yes') {
259 $object->fetch_thirdparty();
261 $isErasable = $object->is_erasable();
263 if (($usercandelete && $isErasable > 0) || ($usercancreate && $isErasable == 1)) {
264 $result = $object->delete($user);
266 header(
'Location: list.php?restore_lastsearch_values=1');
272 } elseif ($action ==
'confirm_deleteline' && $confirm ==
'yes' && $usercancreate) {
274 $result = $object->deleteline($lineid);
277 $object->line_order(
true);
294 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
301 } elseif ($action ==
'unlinkdiscount' && $usercancreate) {
304 $result = $discount->fetch(
GETPOSTINT(
"discountid"));
305 $discount->unlink_invoice();
306 } elseif ($action ==
'confirm_paid' && $confirm ==
'yes' && $usercancreate) {
308 $result = $object->setPaid($user);
312 } elseif ($action ==
'confirm_paid_partially' && $confirm ==
'yes') {
315 $close_code =
GETPOST(
"close_code",
'restricthtml');
316 $close_note =
GETPOST(
"close_note",
'restricthtml');
318 $result = $object->setPaid($user, $close_code, $close_note);
323 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
325 } elseif ($action ==
'confirm_canceled' && $confirm ==
'yes') {
328 $close_code =
GETPOST(
"close_code",
'restricthtml');
329 $close_note =
GETPOST(
"close_note",
'restricthtml');
331 $result = $object->setCanceled($user, $close_code, $close_note);
336 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Reason")),
null,
'errors');
341 if ($action ==
'setref_supplier' && $usercancreate) {
342 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alpha');
344 if ($object->update($user) < 0) {
348 $outputlangs = $langs;
351 $newlang =
GETPOST(
'lang_id',
'aZ09');
354 $newlang = $object->thirdparty->default_lang;
356 if (!empty($newlang)) {
358 $outputlangs->setDefaultLang($newlang);
360 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
361 $ret = $object->fetch($object->id);
362 $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
368 if ($action ==
'setconditions' && $usercancreate) {
370 $object->cond_reglement_code = 0;
371 $object->cond_reglement_id = 0;
378 $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id',
'int'));
386 $old_date_echeance = $object->date_echeance;
387 $new_date_echeance = $object->calculate_date_lim_reglement();
388 if ($new_date_echeance > $old_date_echeance) {
389 $object->date_echeance = $new_date_echeance;
391 if ($object->date_echeance < $object->date) {
392 $object->date_echeance = $object->date;
394 $result = $object->update($user);
406 } elseif ($action ==
'set_incoterms' &&
isModEnabled(
'incoterm')) {
408 $result = $object->setIncoterms(
GETPOST(
'incoterm_id',
'int'),
GETPOST(
'location_incoterms',
'alpha'));
409 } elseif ($action ==
'setmode' && $usercancreate) {
411 $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id',
'int'));
412 } elseif ($action ==
'setmulticurrencycode' && $usercancreate) {
414 $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code',
'alpha'));
415 } elseif ($action ==
'setmulticurrencyrate' && $usercancreate) {
417 $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx',
'alpha')),
GETPOST(
'calculation_mode',
'int'));
418 } elseif ($action ==
'setbankaccount' && $usercancreate) {
420 $result = $object->setBankAccount(
GETPOST(
'fk_account',
'int'));
421 } elseif ($action ==
'setvatreversecharge' && $usercancreate) {
423 $vatreversecharge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
424 $result = $object->setVATReverseCharge($vatreversecharge);
427 if ($action ==
'settransportmode' && ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"))) {
429 $result = $object->setTransportMode(
GETPOST(
'transport_mode_id',
'int'));
430 } elseif ($action ==
'setlabel' && $usercancreate) {
433 $object->label =
GETPOST(
'label');
434 $result = $object->update($user);
438 } elseif ($action ==
'setdatef' && $usercancreate) {
440 if ($newdate > (
dol_now(
'tzuserrel') + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
441 if (empty($conf->global->INVOICE_MAX_FUTURE_DELAY)) {
442 setEventMessages($langs->trans(
"WarningInvoiceDateInFuture"),
null,
'warnings');
444 setEventMessages($langs->trans(
"WarningInvoiceDateTooFarInFuture"),
null,
'warnings');
450 $object->date = $newdate;
451 $date_echence_calc = $object->calculate_date_lim_reglement();
452 if (!empty($object->date_echeance) && $object->date_echeance < $date_echence_calc) {
453 $object->date_echeance = $date_echence_calc;
455 if ($object->date_echeance && $object->date_echeance < $object->date) {
456 $object->date_echeance = $object->date;
459 $result = $object->update($user);
463 } elseif ($action ==
'setdate_lim_reglement' && $usercancreate) {
465 $object->date_echeance =
dol_mktime(12, 0, 0,
GETPOST(
'date_lim_reglementmonth',
'int'),
GETPOST(
'date_lim_reglementday',
'int'),
GETPOST(
'date_lim_reglementyear',
'int'));
466 if (!empty($object->date_echeance) && $object->date_echeance < $object->date) {
467 $object->date_echeance = $object->date;
468 setEventMessages($langs->trans(
"DatePaymentTermCantBeLowerThanObjectDate"),
null,
'warnings');
470 $result = $object->update($user);
474 } elseif ($action ==
"setabsolutediscount" && $usercancreate) {
476 if (
GETPOST(
"remise_id",
"int")) {
477 $ret = $object->fetch($id);
479 $result = $object->insert_discount(
GETPOST(
"remise_id",
"int"));
488 if (
GETPOST(
"remise_id_for_payment",
"int")) {
489 require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
491 $discount->fetch(
GETPOST(
"remise_id_for_payment",
"int"));
498 setEventMessages($langs->trans(
"ErrorDiscountLargerThanRemainToPaySplitItBefore"),
null,
'errors');
502 $result = $discount->link_to_invoice(0, $id);
509 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
510 $outputlangs = $langs;
513 $newlang =
GETPOST(
'lang_id',
'aZ09');
516 $newlang = $object->thirdparty->default_lang;
518 if (!empty($newlang)) {
520 $outputlangs->setDefaultLang($newlang);
522 $ret = $object->fetch($id);
524 $result = $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
529 } elseif ($action ==
'confirm_converttoreduc' && $confirm ==
'yes' && $usercancreate) {
532 $object->fetch_thirdparty();
537 $result = $discountcheck->fetch(0, 0, $object->id);
549 $amount_ht = $amount_tva = $amount_ttc = array();
550 $multicurrency_amount_ht = $multicurrency_amount_tva = $multicurrency_amount_ttc = array();
554 foreach ($object->lines as $line) {
555 if ($line->product_type < 9 && $line->total_ht != 0) {
556 $keyforvatrate = $line->tva_tx.($line->vat_src_code ?
' ('.$line->vat_src_code.
')' :
'');
558 $amount_ht[$keyforvatrate] += $line->total_ht;
559 $amount_tva[$keyforvatrate] += $line->total_tva;
560 $amount_ttc[$keyforvatrate] += $line->total_ttc;
561 $multicurrency_amount_ht[$keyforvatrate] += $line->multicurrency_total_ht;
562 $multicurrency_amount_tva[$keyforvatrate] += $line->multicurrency_total_tva;
563 $multicurrency_amount_ttc[$keyforvatrate] += $line->multicurrency_total_ttc;
570 $alreadypaid = $object->getSommePaiement();
571 if ($alreadypaid && abs($alreadypaid) < abs($object->total_ttc)) {
572 $ratio = abs(($object->total_ttc - $alreadypaid) / $object->total_ttc);
573 foreach ($amount_ht as $vatrate => $val) {
574 $amount_ht[$vatrate] =
price2num($amount_ht[$vatrate] * $ratio,
'MU');
575 $amount_tva[$vatrate] =
price2num($amount_tva[$vatrate] * $ratio,
'MU');
576 $amount_ttc[$vatrate] =
price2num($amount_ttc[$vatrate] * $ratio,
'MU');
577 $multicurrency_amount_ht[$vatrate] =
price2num($multicurrency_amount_ht[$vatrate] * $ratio,
'MU');
578 $multicurrency_amount_tva[$vatrate] =
price2num($multicurrency_amount_tva[$vatrate] * $ratio,
'MU');
579 $multicurrency_amount_ttc[$vatrate] =
price2num($multicurrency_amount_ttc[$vatrate] * $ratio,
'MU');
588 $discount->description =
'(CREDIT_NOTE)';
590 $discount->description =
'(DEPOSIT)';
592 $discount->description =
'(EXCESS PAID)';
594 setEventMessages($langs->trans(
'CantConvertToReducAnInvoiceOfThisType'),
null,
'errors');
596 $discount->discount_type = 1;
597 $discount->fk_soc = $object->socid;
598 $discount->fk_invoice_supplier_source = $object->id;
606 $sql =
'SELECT SUM(pf.amount) as total_paiements';
607 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf, '.MAIN_DB_PREFIX.
'paiementfourn as p';
608 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id AND c.entity IN ('.
getEntity(
'c_paiement').
')';
609 $sql .=
' WHERE pf.fk_facturefourn = '.((int) $object->id);
610 $sql .=
' AND pf.fk_paiementfourn = p.rowid';
611 $sql .=
' AND p.entity IN ('.getEntity(
'invoice').
')';
613 $resql = $db->query(
$sql);
618 $res = $db->fetch_object($resql);
619 $total_paiements = $res->total_paiements;
622 $total_creditnote_and_deposit = 0;
623 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
624 $sql .=
" re.description, re.fk_invoice_supplier_source";
625 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
626 $sql .=
" WHERE fk_invoice_supplier = ".((int) $object->id);
627 $resql = $db->query(
$sql);
628 if (!empty($resql)) {
629 while ($obj = $db->fetch_object($resql)) {
630 $total_creditnote_and_deposit += $obj->amount_ttc;
636 $discount->amount_ht = $discount->amount_ttc = $total_paiements + $total_creditnote_and_deposit - $object->total_ttc;
637 $discount->amount_tva = 0;
638 $discount->tva_tx = 0;
639 $discount->vat_src_code =
'';
641 $result = $discount->create($user);
647 foreach ($amount_ht as $tva_tx => $xxx) {
648 $discount->amount_ht = abs($amount_ht[$tva_tx]);
649 $discount->amount_tva = abs($amount_tva[$tva_tx]);
650 $discount->amount_ttc = abs($amount_ttc[$tva_tx]);
651 $discount->multicurrency_amount_ht = abs($multicurrency_amount_ht[$tva_tx]);
652 $discount->multicurrency_amount_tva = abs($multicurrency_amount_tva[$tva_tx]);
653 $discount->multicurrency_amount_ttc = abs($multicurrency_amount_ttc[$tva_tx]);
658 if (preg_match(
'/\((.*)\)/', $tva_tx, $reg)) {
659 $vat_src_code = $reg[1];
660 $tva_tx = preg_replace(
'/\s*\(.*\)/',
'', $tva_tx);
663 $discount->tva_tx = abs($tva_tx);
664 $discount->vat_src_code = $vat_src_code;
666 $result = $discount->create($user);
677 $result = $object->setPaid($user);
692 } elseif ($action ==
'confirm_delete_paiement' && $confirm ==
'yes' && $usercancreate) {
697 $result = $paiementfourn->fetch(
GETPOST(
'paiement_id'));
699 $result = $paiementfourn->delete();
700 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
706 } elseif ($action ==
'add' && $usercancreate) {
709 $object->socid =
GETPOST(
'socid',
'int');
711 $selectedLines =
GETPOST(
'toselect',
'array');
718 $ret = $extrafields->setOptionalsFromPost(
null, $object);
731 if (
GETPOST(
'type',
'int') ===
'') {
732 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")),
null,
'errors');
737 if (empty($dateinvoice)) {
738 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
740 $_GET[
'socid'] = $_POST[
'socid'];
742 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
748 if (!(
GETPOST(
'fac_replacement',
'int') > 0)) {
750 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ReplaceInvoice")),
null,
'errors');
755 $result = $object->fetch(
GETPOST(
'fac_replacement',
'int'));
756 $object->fetch_thirdparty();
758 $object->ref =
GETPOST(
'ref',
'alphanohtml');
759 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alpha');
760 $object->socid =
GETPOST(
'socid',
'int');
761 $object->libelle =
GETPOST(
'label',
'alphanohtml');
762 $object->date = $dateinvoice;
763 $object->date_echeance = $datedue;
764 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
765 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
766 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id',
'int');
767 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id',
'int');
768 $object->fk_account =
GETPOST(
'fk_account',
'int');
769 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
770 $object->fk_project = ($tmpproject > 0) ? $tmpproject :
null;
771 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
772 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
773 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
774 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
775 $object->transport_mode_id =
GETPOST(
'transport_mode_id',
'int');
778 $object->fk_facture_source =
GETPOST(
'fac_replacement',
'int');
781 $id = $object->createFromCurrent($user);
791 $sourceinvoice =
GETPOST(
'fac_avoir',
'int');
792 if (!($sourceinvoice > 0) && empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) {
794 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"CorrectInvoice")),
null,
'errors');
796 if (
GETPOST(
'socid',
'int') < 1) {
797 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
802 if (empty($dateinvoice)) {
803 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
805 $_GET[
'socid'] = $_POST[
'socid'];
807 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
813 if (!
GETPOST(
'ref_supplier')) {
814 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplier')),
null,
'errors');
816 $_GET[
'socid'] = $_POST[
'socid'];
821 $tmpproject =
GETPOST(
'projectid',
'int');
824 $object->ref =
GETPOST(
'ref',
'alphanohtml');
825 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alphanohtml');
826 $object->socid =
GETPOST(
'socid',
'int');
827 $object->libelle =
GETPOST(
'label',
'alphanohtml');
828 $object->label =
GETPOST(
'label',
'alphanohtml');
829 $object->date = $dateinvoice;
830 $object->date_echeance = $datedue;
831 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
832 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
833 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
834 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
835 $object->fk_account =
GETPOST(
'fk_account',
'int');
836 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
837 $object->fk_project = ($tmpproject > 0) ? $tmpproject :
null;
838 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
839 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
840 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
841 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
842 $object->transport_mode_id =
GETPOST(
'transport_mode_id',
'int');
845 $object->fk_facture_source = $sourceinvoice > 0 ? $sourceinvoice :
'';
848 $id = $object->create($user);
854 if (
GETPOST(
'invoiceAvoirWithLines',
'int') == 1 && $id > 0) {
856 if ($facture_source->fetch($object->fk_facture_source) > 0) {
859 foreach ($facture_source->lines as $line) {
861 if (($line->product_type != 9 && empty($line->fk_parent_line)) || $line->product_type == 9) {
865 $line->fk_facture_fourn = $object->id;
866 $line->fk_parent_line = $fk_parent_line;
868 $line->subprice = -$line->subprice;
869 $line->pa_ht = -$line->pa_ht;
870 $line->total_ht = -$line->total_ht;
871 $line->total_tva = -$line->total_tva;
872 $line->total_ttc = -$line->total_ttc;
873 $line->total_localtax1 = -$line->total_localtax1;
874 $line->total_localtax2 = -$line->total_localtax2;
876 $result = $line->insert();
878 $object->lines[] = $line;
881 if ($result > 0 && $line->product_type == 9) {
882 $fk_parent_line = $result;
886 $object->update_price(1);
890 if (
GETPOST(
'invoiceAvoirWithPaymentRestAmount',
'int') == 1 && $id > 0) {
892 if ($facture_source->fetch($object->fk_facture_source) > 0) {
893 $totalpaid = $facture_source->getSommePaiement();
894 $totalcreditnotes = $facture_source->getSumCreditNotesUsed();
895 $totaldeposits = $facture_source->getSumDepositsUsed();
896 $remain_to_pay = abs($facture_source->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits);
897 $desc = $langs->trans(
'invoiceAvoirLineWithPaymentRestAmount');
898 $retAddLine = $object->addline($desc, $remain_to_pay, 0, 0, 0, 1, 0, 0,
'',
'', 0,
'',
'TTC');
900 if ($retAddLine < 0) {
908 if (empty($dateinvoice)) {
910 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Date")),
null,
'errors');
912 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
919 $object->socid =
GETPOST(
'socid',
'int');
920 $object->type =
GETPOST(
'type',
'alphanohtml');
921 $object->ref =
GETPOST(
'ref',
'alphanohtml');
922 $object->date = $dateinvoice;
923 $object->note_public = trim(
GETPOST(
'note_public',
'restricthtml'));
924 $object->note_private = trim(
GETPOST(
'note_private',
'restricthtml'));
925 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alphanohtml');
926 $object->model_pdf =
GETPOST(
'model',
'alphanohtml');
927 $object->fk_project =
GETPOST(
'projectid',
'int');
928 $object->cond_reglement_id = (
GETPOST(
'type') == 3 ? 1 :
GETPOST(
'cond_reglement_id'));
929 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id',
'int');
930 $object->fk_account =
GETPOST(
'fk_account',
'int');
934 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
935 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
936 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
937 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
940 $object->fac_rec = $fac_recid;
942 $fac_rec->fetch($object->fac_rec);
943 $fac_rec->fetch_lines();
944 $object->lines = $fac_rec->lines;
946 $id = $object->create($user);
950 if (
GETPOST(
'socid',
'int') < 1) {
951 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')),
null,
'errors');
956 if (empty($dateinvoice)) {
957 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'DateInvoice')),
null,
'errors');
959 $_GET[
'socid'] = $_POST[
'socid'];
961 } elseif ($dateinvoice > (
dol_get_last_hour(
dol_now(
'tzuserrel')) + (empty($conf->global->INVOICE_MAX_FUTURE_DELAY) ? 0 : $conf->global->INVOICE_MAX_FUTURE_DELAY))) {
967 if (!
GETPOST(
'ref_supplier')) {
968 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'RefSupplier')),
null,
'errors');
970 $_GET[
'socid'] = $_POST[
'socid'];
975 $tmpproject =
GETPOST(
'projectid',
'int');
978 $object->socid =
GETPOST(
'socid',
'int');
979 $object->type =
GETPOST(
'type',
'alphanohtml');
980 $object->ref =
GETPOST(
'ref',
'alphanohtml');
981 $object->ref_supplier =
GETPOST(
'ref_supplier',
'alphanohtml');
982 $object->socid =
GETPOST(
'socid',
'int');
983 $object->libelle =
GETPOST(
'label',
'alphanohtml');
984 $object->label =
GETPOST(
'label',
'alphanohtml');
985 $object->date = $dateinvoice;
986 $object->date_echeance = $datedue;
987 $object->note_public =
GETPOST(
'note_public',
'restricthtml');
988 $object->note_private =
GETPOST(
'note_private',
'restricthtml');
989 $object->cond_reglement_id =
GETPOST(
'cond_reglement_id');
990 $object->mode_reglement_id =
GETPOST(
'mode_reglement_id');
991 $object->fk_account =
GETPOST(
'fk_account',
'int');
992 $object->vat_reverse_charge =
GETPOST(
'vat_reverse_charge') ==
'on' ? 1 : 0;
993 $object->fk_project = ($tmpproject > 0) ? $tmpproject :
null;
994 $object->fk_incoterms =
GETPOST(
'incoterm_id',
'int');
995 $object->location_incoterms =
GETPOST(
'location_incoterms',
'alpha');
996 $object->multicurrency_code =
GETPOST(
'multicurrency_code',
'alpha');
997 $object->multicurrency_tx =
GETPOST(
'originmulticurrency_tx',
'int');
998 $object->transport_mode_id =
GETPOST(
'transport_mode_id');
1001 if (empty($object->date_echeance)) {
1002 $object->date_echeance = $object->calculate_date_lim_reglement();
1005 $object->fetch_thirdparty();
1008 if (!$error &&
GETPOST(
'origin',
'alpha') &&
GETPOST(
'originid')) {
1010 $element = $subelement =
GETPOST(
'origin',
'alpha');
1018 if ($element ==
'order') {
1019 $element = $subelement =
'commande';
1021 if ($element ==
'propal') {
1022 $element =
'comm/propal'; $subelement =
'propal';
1024 if ($element ==
'contract') {
1025 $element = $subelement =
'contrat';
1027 if ($element ==
'order_supplier') {
1028 $element =
'fourn'; $subelement =
'fournisseur.commande';
1030 if ($element ==
'project') {
1031 $element =
'projet';
1033 $object->origin =
GETPOST(
'origin',
'alpha');
1034 $object->origin_id =
GETPOST(
'originid',
'int');
1037 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
1038 $classname = ucfirst($subelement);
1039 if ($classname ==
'Fournisseur.commande') {
1040 $classname =
'CommandeFournisseur';
1042 $objectsrc =
new $classname($db);
1043 $objectsrc->fetch($originid);
1044 $objectsrc->fetch_thirdparty();
1046 if (!empty($object->origin) && !empty($object->origin_id)) {
1047 $object->linkedObjectsIds[$object->origin] = $object->origin_id;
1051 if ($object->origin ==
'reception') {
1052 $objectsrc->fetchObjectLinked();
1054 if (count($objectsrc->linkedObjectsIds[
'order_supplier']) > 0) {
1055 foreach ($objectsrc->linkedObjectsIds[
'order_supplier'] as $key => $value) {
1056 $object->linkedObjectsIds[
'order_supplier'] = $value;
1061 $id = $object->create($user);
1065 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
1066 $classname = ucfirst($subelement);
1067 if ($classname ==
'Fournisseur.commande') {
1068 $classname =
'CommandeFournisseur';
1070 $srcobject =
new $classname($db);
1072 $result = $srcobject->fetch(
GETPOST(
'originid',
'int'));
1075 $typeamount =
GETPOST(
'typedeposit',
'alpha');
1080 $amountdeposit = array();
1081 if (!empty($conf->global->MAIN_DEPOSIT_MULTI_TVA)) {
1082 if ($typeamount ==
'amount') {
1083 $amount = $valuedeposit;
1085 $amount = $srcobject->total_ttc * ($valuedeposit / 100);
1088 $TTotalByTva = array();
1089 foreach ($srcobject->lines as &$line) {
1090 if (!empty($line->special_code)) {
1093 $TTotalByTva[$line->tva_tx] += $line->total_ttc;
1096 foreach ($TTotalByTva as $tva => &$total) {
1097 $coef = $total / $srcobject->total_ttc;
1098 $am = $amount * $coef;
1099 $amount_ttc_diff += $am;
1100 $amountdeposit[$tva] += $am / (1 + $tva / 100);
1103 if ($typeamount ==
'amount') {
1104 $amountdeposit[0] = $valuedeposit;
1105 } elseif ($typeamount ==
'variable') {
1108 $lines = $srcobject->lines;
1109 $numlines = count($lines);
1110 for ($i = 0; $i < $numlines; $i++) {
1112 if (empty($lines[$i]->qty)) {
1115 if (!empty($lines[$i]->special_code)) {
1119 $totalamount += $lines[$i]->total_ht;
1120 $tva_tx = $lines[$i]->tva_tx;
1121 $amountdeposit[$tva_tx] += ($lines[$i]->total_ht * $valuedeposit) / 100;
1125 if ($totalamount == 0) {
1126 $amountdeposit[0] = 0;
1134 $amount_ttc_diff = $amountdeposit[0];
1137 foreach ($amountdeposit as $tva => $amount) {
1138 if (empty($amount)) {
1143 'amount' =>
'FixAmount',
1144 'variable' =>
'VarAmount'
1146 $descline =
'(DEPOSIT)';
1148 if ($typeamount ==
'amount') {
1149 $descline .=
' ('.price($valuedeposit,
'', $langs, 0, - 1, - 1, (!empty($object->multicurrency_code) ? $object->multicurrency_code : $conf->currency)).
')';
1150 } elseif ($typeamount ==
'variable') {
1151 $descline .=
' ('.$valuedeposit.
'%)';
1154 $descline .=
' - '.$srcobject->ref;
1155 $result = $object->addline(
1162 (empty($conf->global->INVOICE_PRODUCTID_DEPOSIT) ? 0 : $conf->global->INVOICE_PRODUCTID_DEPOSIT),
1167 $lines[$i]->info_bits,
1177 $lines[$i]->special_code,
1184 $diff = $object->total_ttc - $amount_ttc_diff;
1186 if (!empty($conf->global->MAIN_DEPOSIT_MULTI_TVA) && $diff != 0) {
1187 $object->fetch_lines();
1188 $subprice_diff = $object->lines[0]->subprice - $diff / (1 + $object->lines[0]->tva_tx / 100);
1189 $object->updateline(
1190 $object->lines[0]->id,
1191 $object->lines[0]->desc,
1193 $object->lines[0]->tva_tx,
1194 $object->lines[0]->localtax1_tx,
1195 $object->lines[0]->localtax2_tx,
1196 $object->lines[0]->qty,
1197 $object->lines[0]->fk_product,
1199 $object->lines[0]->info_bits,
1200 $object->lines[0]->product_type,
1201 $object->lines[0]->remise_percent,
1203 $object->lines[0]->date_start,
1204 $object->lines[0]->date_end,
1212 } elseif ($result > 0) {
1213 $lines = $srcobject->lines;
1214 if (empty($lines) && method_exists($srcobject,
'fetch_lines')) {
1215 $srcobject->fetch_lines();
1216 $lines = $srcobject->lines;
1219 $num = count($lines);
1220 for ($i = 0; $i < $num; $i++) {
1221 if (!in_array($lines[$i]->
id, $selectedLines)) {
1225 $desc = ($lines[$i]->desc ? $lines[$i]->desc : $lines[$i]->libelle);
1226 $product_type = ($lines[$i]->product_type ? $lines[$i]->product_type : 0);
1229 if (method_exists($lines[$i],
'fetch_optionals')) {
1230 $lines[$i]->fetch_optionals();
1235 $date_start = $lines[$i]->date_debut_prevue;
1236 if ($lines[$i]->date_debut_reel) {
1237 $date_start = $lines[$i]->date_debut_reel;
1239 if ($lines[$i]->date_start) {
1240 $date_start = $lines[$i]->date_start;
1242 $date_end = $lines[$i]->date_fin_prevue;
1243 if ($lines[$i]->date_fin_reel) {
1244 $date_end = $lines[$i]->date_fin_reel;
1246 if ($lines[$i]->date_end) {
1247 $date_end = $lines[$i]->date_end;
1251 $object->special_code = $lines[$i]->special_code;
1254 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
1256 $pu_currency = $lines[$i]->multicurrency_subprice;
1258 $pu = $lines[$i]->subprice;
1263 $result = $object->addline(
1267 $lines[$i]->localtax1_tx,
1268 $lines[$i]->localtax2_tx,
1270 $lines[$i]->fk_product,
1271 $lines[$i]->remise_percent,
1275 $lines[$i]->info_bits,
1280 $lines[$i]->array_options,
1281 $lines[$i]->fk_unit,
1284 $lines[$i]->ref_supplier,
1285 $lines[$i]->special_code
1295 $object->fetch_lines();
1302 } elseif (!$error) {
1303 $id = $object->create($user);
1312 $langs->load(
"errors");
1317 $_GET[
'socid'] = $_POST[
'socid'];
1321 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1322 $outputlangs = $langs;
1323 $result = $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
1330 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$id);
1333 } elseif ($action ==
'updateline' && $usercancreate) {
1337 if (! $object->fetch($id) > 0) {
1340 $object->fetch_thirdparty();
1343 $tva_tx = str_replace(
'*',
'', $tva_tx);
1345 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_subprice') !=
'') {
1347 $price_base_type =
'HT';
1350 $price_base_type =
'TTC';
1353 if (
GETPOST(
'productid') > 0) {
1355 if (!empty($conf->global->SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY)) {
1357 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'warnings');
1362 $prod->fetch(
GETPOST(
'productid'));
1363 $label = $prod->description;
1364 if (trim(
GETPOST(
'product_desc',
'restricthtml')) != trim($label)) {
1365 $label =
GETPOST(
'product_desc',
'restricthtml');
1368 $type = $prod->type;
1370 $label =
GETPOST(
'product_desc',
'restricthtml');
1379 if (preg_match(
'/\*/', $tva_tx)) {
1384 $tva_tx = str_replace(
'*',
'', $tva_tx);
1385 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
1386 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
1392 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
1393 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
1395 if (is_array($extralabelsline)) {
1396 foreach ($extralabelsline as $key => $value) {
1397 unset($_POST[
"options_".$key]);
1401 $result = $object->updateline(
1423 unset($_POST[
'label']);
1424 unset($_POST[
'fourn_ref']);
1425 unset($_POST[
'date_starthour']);
1426 unset($_POST[
'date_startmin']);
1427 unset($_POST[
'date_startsec']);
1428 unset($_POST[
'date_startday']);
1429 unset($_POST[
'date_startmonth']);
1430 unset($_POST[
'date_startyear']);
1431 unset($_POST[
'date_endhour']);
1432 unset($_POST[
'date_endmin']);
1433 unset($_POST[
'date_endsec']);
1434 unset($_POST[
'date_endday']);
1435 unset($_POST[
'date_endmonth']);
1436 unset($_POST[
'date_endyear']);
1437 unset($_POST[
'price_ttc']);
1438 unset($_POST[
'price_ht']);
1445 } elseif ($action ==
'addline' &&
GETPOST(
'submitforalllines',
'aZ09') &&
GETPOST(
'vatforalllines',
'alpha') && $usercancreate) {
1447 $vat_rate = (
GETPOST(
'vatforalllines') ?
GETPOST(
'vatforalllines') : 0);
1448 $vat_rate = str_replace(
'*',
'', $vat_rate);
1449 $localtax1_rate =
get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
1450 $localtax2_rate =
get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
1451 foreach ($object->lines as $line) {
1452 $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);
1454 } elseif ($action ==
'addline' && $usercancreate) {
1458 $ret = $object->fetch($id);
1463 $ret = $object->fetch_thirdparty();
1465 $langs->load(
'errors');
1474 $prod_entry_mode =
GETPOST(
'prod_entry_mode');
1475 if ($prod_entry_mode ==
'free') {
1478 $idprod =
GETPOST(
'idprod',
'int');
1486 $price_ttc_devise =
price2num(
GETPOST(
'multicurrency_price_ttc'),
'CU', 2);
1490 if (empty($remise_percent)) {
1491 $remise_percent = 0;
1495 $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
1496 $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
1498 if (is_array($extralabelsline)) {
1500 foreach ($extralabelsline as $key => $value) {
1501 unset($_POST[
"options_".$key]);
1505 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') < 0 && $qty < 0) {
1506 setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1509 if ($prod_entry_mode ==
'free' && !
GETPOST(
'idprodfournprice') &&
GETPOST(
'type') < 0) {
1510 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')),
null,
'errors');
1513 if ($prod_entry_mode ==
'free' &&
GETPOST(
'price_ht') ===
'' &&
GETPOST(
'price_ttc') ===
'' && $price_ht_devise ===
'') {
1514 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')),
null,
'errors');
1517 if ($prod_entry_mode ==
'free' && !
GETPOST(
'dp_desc')) {
1518 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')),
null,
'errors');
1521 if (!
GETPOST(
'qty',
'alpha')) {
1522 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')),
null,
'errors');
1526 if (!$error &&
isModEnabled(
'variants') && $prod_entry_mode !=
'free') {
1527 if ($combinations =
GETPOST(
'combinations',
'array')) {
1531 if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
1532 $idprod = $res->fk_product_child;
1534 setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'),
null,
'errors');
1540 if ($prod_entry_mode !=
'free' && empty($error)) {
1544 if (
GETPOST(
'idprodfournprice',
'alpha') == -1 ||
GETPOST(
'idprodfournprice',
'alpha') ==
'') {
1549 if (preg_match(
'/^idprod_([0-9]+)$/',
GETPOST(
'idprodfournprice',
'alpha'), $reg)) {
1551 $res = $productsupplier->fetch($idprod);
1554 if (!empty($conf->global->SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER)) {
1556 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1557 if ($productsupplier->fourn_socid != $socid) {
1558 $productsupplier->ref_supplier =
'';
1561 $fksoctosearch = $object->thirdparty->id;
1562 $productsupplier->get_buyprice(0, -1, $idprod,
'none', $fksoctosearch);
1564 } elseif (
GETPOST(
'idprodfournprice',
'alpha') > 0) {
1565 $qtytosearch = $qty;
1567 $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice',
'alpha'), $qtytosearch);
1568 $res = $productsupplier->fetch($idprod);
1572 $label = $productsupplier->label;
1574 if (
getDolGlobalInt(
'MAIN_MULTILANGS') && !empty($conf->global->PRODUIT_TEXTS_IN_THIRDPARTY_LANGUAGE)) {
1575 $outputlangs = $langs;
1577 if (empty($newlang) &&
GETPOST(
'lang_id',
'aZ09')) {
1578 $newlang =
GETPOST(
'lang_id',
'aZ09');
1580 if (empty($newlang)) {
1581 $newlang = $object->thirdparty->default_lang;
1583 if (!empty($newlang)) {
1584 $outputlangs =
new Translate(
"", $conf);
1585 $outputlangs->setDefaultLang($newlang);
1587 $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->description;
1589 $desc = $productsupplier->description;
1592 if (!empty($productsupplier->desc_supplier) && !empty($conf->global->PRODUIT_FOURN_TEXTS)) {
1593 $desc = $productsupplier->desc_supplier;
1597 if (trim($product_desc) == trim($desc) && !empty($conf->global->PRODUIT_AUTOFILL_DESC)) {
1600 if (!empty($product_desc) && !empty($conf->global->MAIN_NO_CONCAT_DESCRIPTION)) {
1601 $desc = $product_desc;
1603 if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
1604 $desc =
dol_concatdesc($desc, $product_desc,
'', !empty($conf->global->MAIN_CHANGE_ORDER_CONCAT_DESCRIPTION));
1607 $ref_supplier = $productsupplier->ref_supplier;
1611 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1612 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1614 if (empty($tva_tx)) {
1617 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
1618 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
1620 $type = $productsupplier->type;
1621 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1622 $price_base_type =
'HT';
1624 $pu_devise =
price2num($price_ht_devise,
'CU');
1625 } elseif (
GETPOST(
'price_ttc') !=
'' ||
GETPOST(
'multicurrency_price_ttc') !=
'') {
1626 $price_base_type =
'TTC';
1628 $pu_devise =
price2num($price_ttc_devise,
'CU');
1630 $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type :
'HT');
1631 if (empty($object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code != $object->multicurrency_code)) {
1632 $pu = $productsupplier->fourn_pu;
1635 $pu = $productsupplier->fourn_pu;
1636 $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
1640 $ref_supplier = $productsupplier->ref_supplier;
1642 $tva_tx =
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1643 $tva_npr =
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id,
GETPOST(
'idprodfournprice',
'alpha'));
1644 if (empty($tva_tx)) {
1647 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
1648 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
1654 $result = $object->addline(
1669 min($rank, count($object->lines) + 1),
1672 $productsupplier->fk_unit,
1675 GETPOST(
'fourn_ref',
'alpha'),
1679 if ($idprod == -99 || $idprod == 0) {
1682 $langs->load(
"errors");
1683 setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")),
null,
'errors');
1685 if ($idprod == -1) {
1688 $langs->load(
"errors");
1689 setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"),
null,
'errors');
1691 } elseif (empty($error)) {
1692 $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
1693 $tva_tx = str_replace(
'*',
'', $tva_tx);
1694 $label = (
GETPOST(
'product_label') ?
GETPOST(
'product_label') :
'');
1695 $desc = $product_desc;
1697 $ref_supplier =
GETPOST(
'fourn_ref',
'alpha');
1699 $fk_unit =
GETPOST(
'units',
'alpha');
1701 if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
1706 $localtax1_tx =
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
1707 $localtax2_tx =
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
1709 if (
GETPOST(
'price_ht') !=
'' ||
GETPOST(
'multicurrency_price_ht') !=
'') {
1713 $pu_ht =
price2num($pu_ttc / (1 + ($tva_tx / 100)),
'MU');
1715 $price_base_type =
'HT';
1716 $pu_devise =
price2num($price_devise,
'CU');
1718 $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);
1722 if (!$error && $result > 0) {
1726 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1727 $outputlangs = $langs;
1730 $newlang =
GETPOST(
'lang_id',
'aZ09');
1733 $newlang = $object->thirdparty->default_lang;
1735 if (!empty($newlang)) {
1736 $outputlangs =
new Translate(
"", $conf);
1737 $outputlangs->setDefaultLang($newlang);
1739 $model = $object->model_pdf;
1740 $ret = $object->fetch($id);
1742 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1748 unset($_POST [
'prod_entry_mode']);
1750 unset($_POST[
'qty']);
1751 unset($_POST[
'type']);
1752 unset($_POST[
'remise_percent']);
1753 unset($_POST[
'pu']);
1754 unset($_POST[
'price_ht']);
1755 unset($_POST[
'multicurrency_price_ht']);
1756 unset($_POST[
'price_ttc']);
1757 unset($_POST[
'fourn_ref']);
1758 unset($_POST[
'tva_tx']);
1759 unset($_POST[
'label']);
1760 unset($localtax1_tx);
1761 unset($localtax2_tx);
1762 unset($_POST[
'np_marginRate']);
1763 unset($_POST[
'np_markRate']);
1764 unset($_POST[
'dp_desc']);
1765 unset($_POST[
'idprodfournprice']);
1766 unset($_POST[
'units']);
1768 unset($_POST[
'date_starthour']);
1769 unset($_POST[
'date_startmin']);
1770 unset($_POST[
'date_startsec']);
1771 unset($_POST[
'date_startday']);
1772 unset($_POST[
'date_startmonth']);
1773 unset($_POST[
'date_startyear']);
1774 unset($_POST[
'date_endhour']);
1775 unset($_POST[
'date_endmin']);
1776 unset($_POST[
'date_endsec']);
1777 unset($_POST[
'date_endday']);
1778 unset($_POST[
'date_endmonth']);
1779 unset($_POST[
'date_endyear']);
1786 } elseif ($action ==
'classin' && $usercancreate) {
1787 $object->fetch($id);
1788 $result = $object->setProject($projectid);
1789 } elseif ($action ==
'confirm_edit' && $confirm ==
'yes' && $usercancreate) {
1791 $object->fetch($id);
1793 $totalpaid = $object->getSommePaiement();
1794 $resteapayer = $object->total_ttc - $totalpaid;
1797 $ventilExportCompta = $object->getVentilExportCompta();
1799 if (!$ventilExportCompta) {
1802 $idwarehouse =
GETPOST(
'idwarehouse');
1804 $object->fetch_thirdparty();
1806 $qualified_for_stock_change = 0;
1807 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
1808 $qualified_for_stock_change = $object->hasProductsOrServices(2);
1810 $qualified_for_stock_change = $object->hasProductsOrServices(1);
1814 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
1815 $langs->load(
"stocks");
1816 if (!$idwarehouse || $idwarehouse == -1) {
1818 setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")),
null,
'errors');
1823 $object->setDraft($user, $idwarehouse);
1826 if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1827 $outputlangs = $langs;
1830 $newlang =
GETPOST(
'lang_id',
'aZ09');
1833 $newlang = $object->thirdparty->default_lang;
1835 if (!empty($newlang)) {
1836 $outputlangs =
new Translate(
"", $conf);
1837 $outputlangs->setDefaultLang($newlang);
1839 $model = $object->model_pdf;
1840 $ret = $object->fetch($id);
1842 $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1851 } elseif ($action ==
'reopen' && $usercancreate) {
1853 $result = $object->fetch($id);
1856 $result = $object->setUnpaid($user);
1858 header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$id);
1867 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
1870 $triggersendname =
'BILL_SUPPLIER_SENTBYMAIL';
1872 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
1873 $trackid =
'sinv'.$object->id;
1874 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
1877 $upload_dir = $conf->fournisseur->facture->dir_output;
1878 $permissiontoadd = $usercancreate;
1879 include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
1882 if ($action ==
'calculate') {
1883 $calculationrule =
GETPOST(
'calculationrule');
1885 $object->fetch($id);
1886 $object->fetch_thirdparty();
1887 $result = $object->update_price(0, (($calculationrule ==
'totalofround') ?
'0' :
'1'), 0, $object->thirdparty);
1893 if ($action ==
'update_extras') {
1897 $ret = $extrafields->setOptionalsFromPost(
null, $object,
GETPOST(
'attribute',
'restricthtml'));
1905 $result = $object->insertExtraFields(
'BILL_SUPPLIER_MODIFY');
1913 $action =
'edit_extras';
1917 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB) && $usercancreate) {
1918 if ($action ==
'addcontact') {
1919 $result = $object->fetch($id);
1921 if ($result > 0 && $id > 0) {
1924 $result = $object->add_contact($contactid, $typeid,
GETPOST(
"source",
'aZ09'));
1928 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1931 if ($object->error ==
'DB_ERROR_RECORD_ALREADY_EXISTS') {
1932 $langs->load(
"errors");
1933 setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"),
null,
'errors');
1938 } elseif ($action ==
'swapstatut') {
1940 if ($object->fetch($id)) {
1941 $result = $object->swapContactStatus(
GETPOST(
'ligne',
'int'));
1945 } elseif ($action ==
'deletecontact') {
1947 $object->fetch($id);
1948 $result = $object->delete_contact(
GETPOST(
"lineid",
'int'));
1951 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
1967 $bankaccountstatic =
new Account($db);
1975 $title = $object->ref.
" - ".$langs->trans(
'Card');
1976 if ($action ==
'create') {
1977 $title = $langs->trans(
"NewSupplierInvoice");
1979 $help_url =
'EN:Module_Suppliers_Invoices|FR:Module_Fournisseurs_Factures|ES:Módulo_Facturas_de_proveedores|DE:Modul_Lieferantenrechnungen';
1983 if ($action ==
'create') {
1986 print
load_fiche_titre($langs->trans(
'NewSupplierInvoice'),
'',
'supplier_invoice');
1990 $currency_code = $conf->currency;
1993 if (
GETPOST(
'socid',
'int') > 0) {
1995 $societe->fetch(
GETPOST(
'socid',
'int'));
1996 if (
isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
1997 $currency_code = $societe->multicurrency_code;
2001 if (!empty($origin) && !empty($originid)) {
2003 $element = $subelement = $origin;
2005 if ($element ==
'project') {
2006 $projectid = $originid;
2007 $element =
'projet';
2011 if ($element ==
'order') {
2012 $element = $subelement =
'commande';
2014 if ($element ==
'propal') {
2015 $element =
'comm/propal'; $subelement =
'propal';
2017 if ($element ==
'contract') {
2018 $element = $subelement =
'contrat';
2020 if ($element ==
'order_supplier') {
2021 $element =
'fourn'; $subelement =
'fournisseur.commande';
2024 require_once DOL_DOCUMENT_ROOT.
'/'.$element.
'/class/'.$subelement.
'.class.php';
2025 $classname = ucfirst($subelement);
2026 if ($classname ==
'Fournisseur.commande') {
2027 $classname =
'CommandeFournisseur';
2029 $objectsrc =
new $classname($db);
2030 $objectsrc->fetch($originid);
2031 $objectsrc->fetch_thirdparty();
2033 $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project :
'');
2035 $soc = $objectsrc->thirdparty;
2037 $cond_reglement_id = 0;
2038 $mode_reglement_id = 0;
2040 $remise_percent = 0;
2041 $remise_absolue = 0;
2042 $transport_mode_id = 0;
2045 if (!empty($objectsrc->cond_reglement_id)) {
2046 $cond_reglement_id = $objectsrc->cond_reglement_id;
2048 if (!empty($objectsrc->mode_reglement_id)) {
2049 $mode_reglement_id = $objectsrc->mode_reglement_id;
2051 if (!empty($objectsrc->fk_account)) {
2052 $fk_account = $objectsrc->fk_account;
2054 if (!empty($objectsrc->remise_percent)) {
2055 $remise_percent = $objectsrc->remise_percent;
2057 if (!empty($objectsrc->remise_absolue)) {
2058 $remise_absolue = $objectsrc->remise_absolue;
2060 if (!empty($objectsrc->transport_mode_id)) {
2061 $transport_mode_id = $objectsrc->transport_mode_id;
2064 if (empty($cond_reglement_id)
2065 || empty($mode_reglement_id)
2066 || empty($fk_account)
2067 || empty($remise_percent)
2068 || empty($remise_absolue)
2069 || empty($transport_mode_id)
2071 if ($origin ==
'reception') {
2073 if (!isset($objectsrc->supplier_order)) {
2074 $objectsrc->fetch_origin();
2077 if (!empty($objectsrc->commandeFournisseur)) {
2078 $supplierOrder = $objectsrc->commandeFournisseur;
2079 if (empty($cond_reglement_id) && !empty($supplierOrder->cond_reglement_id)) {
2080 $cond_reglement_id = $supplierOrder->cond_reglement_id;
2082 if (empty($mode_reglement_id) && !empty($supplierOrder->mode_reglement_id)) {
2083 $mode_reglement_id = $supplierOrder->mode_reglement_id;
2085 if (empty($fk_account) && !empty($supplierOrder->fk_account)) {
2086 $fk_account = $supplierOrder->fk_account;
2088 if (empty($remise_percent) && !empty($supplierOrder->remise_percent)) {
2089 $remise_percent = $supplierOrder->remise_percent;
2091 if (empty($remise_absolue) && !empty($supplierOrder->remise_absolue)) {
2092 $remise_absolue = $supplierOrder->remise_absolue;
2094 if (empty($transport_mode_id) && !empty($supplierOrder->transport_mode_id)) {
2095 $transport_mode_id = $supplierOrder->transport_mode_id;
2102 if (empty($cond_reglement_id) && !empty($soc->cond_reglement_supplier_id)) {
2103 $cond_reglement_id = $soc->cond_reglement_supplier_id;
2105 if (empty($mode_reglement_id) && !empty($soc->mode_reglement_supplier_id)) {
2106 $mode_reglement_id = $soc->mode_reglement_supplier_id;
2108 if (empty($fk_account) && !empty($soc->fk_account)) {
2109 $fk_account = $soc->fk_account;
2111 if (empty($remise_percent) && !empty($soc->remise_supplier_percent)) {
2112 $remise_percent = $soc->remise_supplier_percent;
2114 if (empty($remise_absolue) && !empty($soc->remise_absolue)) {
2115 $remise_absolue = $soc->remise_absolue;
2117 if (empty($transport_mode_id) && !empty($soc->transport_mode_id)) {
2118 $transport_mode_id = $soc->transport_mode_id;
2124 if (!empty($objectsrc->multicurrency_code)) {
2125 $currency_code = $objectsrc->multicurrency_code;
2127 if (!empty($conf->global->MULTICURRENCY_USE_ORIGIN_TX) && !empty($objectsrc->multicurrency_tx)) {
2128 $currency_tx = $objectsrc->multicurrency_tx;
2133 $dateinvoice = ($datetmp ==
'' ? (empty($conf->global->MAIN_AUTOFILL_DATE) ? -1 :
'') : $datetmp);
2135 $datedue = ($datetmp ==
'' ?-1 : $datetmp);
2138 $objectsrc->fetch_optionals();
2139 $object->array_options = $objectsrc->array_options;
2141 $cond_reglement_id = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
2142 $mode_reglement_id = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
2143 $vat_reverse_charge = $societe->vat_reverse_charge;
2144 $transport_mode_id = !empty($societe->transport_mode_supplier_id) ? $societe->transport_mode_supplier_id : 0;
2145 $fk_account = !empty($societe->fk_account) ? $societe->fk_account : 0;
2147 $dateinvoice = ($datetmp ==
'' ? (empty($conf->global->MAIN_AUTOFILL_DATE) ?-1 :
'') : $datetmp);
2149 $datedue = ($datetmp ==
'' ?-1 : $datetmp);
2151 if (
isModEnabled(
"multicurrency") && !empty($soc->multicurrency_code)) {
2152 $currency_code = $soc->multicurrency_code;
2157 if (empty($cond_reglement_id)) {
2158 $cond_reglement_id =
GETPOST(
"cond_reglement_id");
2162 if (empty($mode_reglement_id)) {
2163 $mode_reglement_id =
GETPOST(
"mode_reglement_id");
2166 $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));
2167 $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));
2169 print
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
2170 print
'<input type="hidden" name="token" value="'.newToken().
'">';
2171 print
'<input type="hidden" name="action" value="add">';
2172 if (!empty($societe->id) && $societe->id > 0) {
2173 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">'.
"\n";
2175 print
'<input type="hidden" name="origin" value="'.$origin.
'">';
2176 print
'<input type="hidden" name="originid" value="'.$originid.
'">';
2177 if (!empty($currency_tx)) {
2178 print
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
2180 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
2184 print
'<table class="border centpercent">';
2187 print
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
2191 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2192 $invoice_predefined->fetch($fac_recid);
2196 print
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
2199 if (!empty($societe->id) && $societe->id > 0 && ($fac_recid <= 0 || !empty($invoice_predefined->frequency))) {
2200 $absolute_discount = $societe->getAvailableDiscounts(
'',
'', 0, 1);
2201 print $societe->getNomUrl(1,
'supplier');
2202 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
2204 $filter =
'((s.fournisseur:=:1) AND (s.status:=:1))';
2205 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');
2207 if (empty($conf->global->RELOAD_PAGE_ON_SUPPLIER_CHANGE_DISABLED)) {
2208 print
'<script type="text/javascript">
2209 $(document).ready(function() {
2210 $("#socid").change(function() {
2211 console.log("We have changed the company - Reload page");
2213 $("input[name=action]").val("create");
2214 $("form[name=add]").submit();
2219 if ($fac_recid <= 0) {
2220 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>';
2226 if (empty($origin) && empty($originid) && $fac_recid > 0) {
2227 $invoice_predefined->fetch($fac_recid);
2229 $dateinvoice = $invoice_predefined->date_when;
2230 if (empty($projectid)) {
2231 $projectid = $invoice_predefined->fk_project;
2233 $cond_reglement_id = $invoice_predefined->cond_reglement_id;
2234 $mode_reglement_id = $invoice_predefined->mode_reglement_id;
2235 $fk_account = $invoice_predefined->fk_account;
2236 $note_public = $invoice_predefined->note_public;
2237 $note_private = $invoice_predefined->note_private;
2239 if (!empty($invoice_predefined->multicurrency_code)) {
2240 $currency_code = $invoice_predefined->multicurrency_code;
2242 if (!empty($invoice_predefined->multicurrency_tx)) {
2243 $currency_tx = $invoice_predefined->multicurrency_tx;
2246 $sql =
'SELECT r.rowid, r.titre as title, r.total_ttc';
2247 $sql .=
' FROM '.MAIN_DB_PREFIX.
'facture_fourn_rec as r';
2248 $sql .=
' WHERE r.fk_soc = '. (int) $invoice_predefined->socid;
2250 $resql = $db->query(
$sql);
2252 $num = $db->num_rows($resql);
2256 print
'<tr><td>'.$langs->trans(
'CreateFromRepeatableInvoice').
'</td><td>';
2258 print
'<select class="flat" id="fac_rec" name="fac_rec">';
2259 print
'<option value="0" selected></option>';
2261 $objp = $db->fetch_object($resql);
2262 print
'<option value="'.$objp->rowid.
'"';
2263 if ($fac_recid == $objp->rowid) {
2265 $exampletemplateinvoice->fetch($fac_recid);
2267 print
'>'.$objp->title.
' ('.
price($objp->total_ttc).
' '.$langs->trans(
"TTC").
')</option>';
2272 if (empty($conf->global->RELOAD_PAGE_ON_TEMPLATE_CHANGE_DISABLED)) {
2273 print
'<script type="text/javascript">
2274 $(document).ready(function() {
2275 $("#fac_rec").change(function() {
2276 console.log("We have changed the template invoice - Reload page");
2278 $("input[name=action]").val("create");
2279 $("form[name=add]").submit();
2293 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"';
2294 if (!empty($societe->id) && $societe->id > 0) {
2300 print
'<tr><td class="tdtop fieldrequired">'.$langs->trans(
'Type').
'</td><td>';
2302 print
'<div class="tagtable">'.
"\n";
2305 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2306 $tmp =
'<input type="radio" id="radio_standard" name="type" value="0"'.(GETPOST(
'type',
'int')?
'' :
'checked').
'> ';
2307 $desc =
$form->textwithpicto($tmp.
'<label for="radio_standard">'.$langs->trans(
"InvoiceStandardAsk").
'</label>', $langs->transnoentities(
"InvoiceStandardDesc"), 1,
'help',
'', 0, 3);
2309 print
'</div></div>';
2311 if (empty($origin) || ($origin ==
'order_supplier' && !empty($originid))) {
2313 if (empty($conf->global->INVOICE_DISABLE_DEPOSIT)) {
2314 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2315 $tmp=
'<input type="radio" id="radio_deposit" name="type" value="3"' . (
GETPOST(
'type') == 3 ?
' checked' :
'') .
'> ';
2316 print
'<script type="text/javascript">
2317 jQuery(document).ready(function() {
2318 jQuery("#typestandardinvoice, #valuestandardinvoice").click(function() {
2319 jQuery("#radio_standard").prop("checked", true);
2321 jQuery("#typedeposit, #valuedeposit").click(function() {
2322 jQuery("#radio_deposit").prop("checked", true);
2324 jQuery("#typedeposit").change(function() {
2325 console.log("We change type of down payment");
2326 jQuery("#radio_deposit").prop("checked", true);
2327 setRadioForTypeOfInvoice();
2329 jQuery("#radio_standard, #radio_deposit, #radio_replacement, #radio_template").change(function() {
2330 setRadioForTypeOfInvoice();
2332 function setRadioForTypeOfInvoice() {
2333 console.log("Change radio");
2334 if (jQuery("#radio_deposit").prop("checked") && (jQuery("#typedeposit").val() == \'amount\' || jQuery("#typedeposit").val() == \'variable\')) {
2335 jQuery(".checkforselect").prop("disabled", true);
2336 jQuery(".checkforselect").prop("checked", false);
2338 jQuery(".checkforselect").prop("disabled", false);
2339 jQuery(".checkforselect").prop("checked", true);
2345 $tmp = $tmp.
'<label for="radio_deposit" >'.$langs->trans(
"InvoiceDeposit").
'</label>';
2346 $desc =
$form->textwithpicto($tmp, $langs->transnoentities(
"InvoiceDepositDesc"), 1,
'help',
'', 0, 3);
2347 print
'<table class="nobordernopadding"><tr>';
2351 if ($origin ==
'order_supplier') {
2352 print
'<td class="nowrap" style="padding-left: 15px">';
2354 'amount' => $langs->transnoentitiesnoconv(
'FixAmount', $langs->transnoentitiesnoconv(
'Deposit')),
2355 'variable' => $langs->transnoentitiesnoconv(
'VarAmountOneLine', $langs->transnoentitiesnoconv(
'Deposit')),
2356 'variablealllines' => $langs->transnoentitiesnoconv(
'VarAmountAllLines')
2358 print
$form->selectarray(
'typedeposit', $arraylist,
GETPOST(
'typedeposit',
'aZ09'), 0, 0, 0,
'', 1);
2360 print
'<td class="nowrap" style="padding-left: 5px">';
2361 print
'<span class="opacitymedium paddingleft">'.$langs->trans(
"AmountOrPercent").
'</span><input type="text" id="valuedeposit" name="valuedeposit" class="width75 right" value="' .
GETPOST(
'valuedeposit',
'int') .
'"/>';
2364 print
'</tr></table>';
2366 print
'</div></div>';
2435 if (empty($origin)) {
2436 if (!empty($societe->id) && $societe->id > 0) {
2438 if (empty($conf->global->INVOICE_DISABLE_CREDIT_NOTE)) {
2440 $facids = $facturestatic->list_qualified_avoir_supplier_invoices($societe->id);
2447 foreach ($facids as $key => $valarray) {
2448 $newinvoice_static->id = $key;
2449 $newinvoice_static->ref = $valarray [
'ref'];
2450 $newinvoice_static->statut = $valarray [
'status'];
2451 $newinvoice_static->type = $valarray [
'type'];
2452 $newinvoice_static->paye = $valarray [
'paye'];
2454 $optionsav .=
'<option value="'.$key.
'"';
2455 if ($key ==
GETPOST(
'fac_avoir',
'int')) {
2456 $optionsav .=
' selected';
2459 $optionsav .= $newinvoice_static->ref;
2460 $optionsav .=
' ('.$newinvoice_static->getLibStatut(1, $valarray [
'paymentornot']).
')';
2461 $optionsav .=
'</option>';
2464 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2465 $tmp =
'<input type="radio" id="radio_creditnote" name="type" value="2"'.(GETPOST(
'type') == 2 ?
' checked' :
'');
2466 if (!$optionsav && empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) {
2467 $tmp .=
' disabled';
2471 print
'<script type="text/javascript">
2472 jQuery(document).ready(function() {
2473 if (! jQuery("#radio_creditnote").is(":checked"))
2475 jQuery("#credit_note_options").hide();
2477 jQuery("#radio_creditnote").click(function() {
2478 jQuery("#credit_note_options").show();
2480 jQuery("#radio_standard, #radio_replacement, #radio_deposit").click(function() {
2481 jQuery("#credit_note_options").hide();
2485 $text = $tmp.
'<label for="radio_creditnote">'.$langs->transnoentities(
"InvoiceAvoirAsk").
'</label> ';
2487 $text .=
'<select class="flat valignmiddle" name="fac_avoir" id="fac_avoir"';
2489 $text .=
' disabled';
2493 $text .=
'<option value="-1"></option>';
2494 $text .= $optionsav;
2496 $text .=
'<option value="-1">'.$langs->trans(
"NoInvoiceToCorrect").
'</option>';
2498 $text .=
'</select>';
2499 $desc =
$form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2502 print
'<div id="credit_note_options" class="clearboth">';
2503 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' :
'').
' /> ';
2504 print
'<label for="invoiceAvoirWithLines">'.$langs->trans(
'invoiceAvoirWithLines').
"</label>";
2505 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' :
'').
' /> ';
2506 print
'<label for="invoiceAvoirWithPaymentRestAmount">'.$langs->trans(
'invoiceAvoirWithPaymentRestAmount').
"</label>";
2509 print
'</div></div>';
2512 print
'<div class="tagtr listofinvoicetype"><div class="tagtd listofinvoicetype">';
2513 if (empty($conf->global->INVOICE_CREDIT_NOTE_STANDALONE)) {
2514 $tmp =
'<input type="radio" name="type" id="radio_creditnote" value="0" disabled> ';
2516 $tmp=
'<input type="radio" name="type" id="radio_creditnote" value="2"> ';
2518 $text = $tmp.$langs->trans(
"InvoiceAvoir").
' ';
2519 $text .=
'<span class="opacitymedium">('.$langs->trans(
"YouMustCreateInvoiceFromSupplierThird").
')</span> ';
2520 $desc =
$form->textwithpicto($text, $langs->transnoentities(
"InvoiceAvoirDesc"), 1,
'help',
'', 0, 3);
2522 print
'</div></div>'.
"\n";
2530 if (!empty($societe->id) && $societe->id > 0) {
2532 print
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
2534 $thirdparty = $societe;
2536 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$societe->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
2537 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
2543 print
'<tr><td>'.$langs->trans(
'Label').
'</td><td><input class="minwidth200" name="label" value="'.
dol_escape_htmltag(
GETPOST(
'label')).
'" type="text"></td></tr>';
2546 print
'<tr><td class="fieldrequired">'.$langs->trans(
'DateInvoice').
'</td><td>';
2547 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2548 print
$form->selectDate($dateinvoice,
'',
'',
'',
'',
"add", 1, 1);
2552 print
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
2553 print
img_picto(
'',
'payment',
'class="pictofixedwidth"');
2554 print
$form->getSelectConditionsPaiements(
GETPOSTISSET(
'cond_reglement_id') ?
GETPOST(
'cond_reglement_id',
'int') : $cond_reglement_id,
'cond_reglement_id');
2558 print
'<tr><td>'.$langs->trans(
'DateMaxPayment').
'</td><td>';
2559 print
img_picto(
'',
'action',
'class="pictofixedwidth"');
2560 print
$form->selectDate($datedue,
'ech',
'',
'',
'',
"add", 1, 1);
2564 print
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
2565 print
img_picto(
'',
'bank',
'class="pictofixedwidth"');
2566 $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');
2571 print
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
2572 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);
2580 $langs->load(
'projects');
2581 print
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
2582 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');
2583 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>';
2590 print
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), !empty($objectsrc->label_incoterms) ? $objectsrc->label_incoterms :
'', 1).
'</label></td>';
2591 print
'<td colspan="3" class="maxwidthonsmartphone">';
2592 print
img_picto(
'',
'incoterm',
'class="pictofixedwidth"');
2593 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 :
''));
2598 if (!empty($conf->global->ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE)) {
2599 print
'<tr><td>' . $langs->trans(
'VATReverseCharge') .
'</td><td>';
2601 if ($vat_reverse_charge == 1 || $societe->vat_reverse_charge == 1 || ($societe->country_code !=
'FR' &&
isInEEC($societe) && !empty($societe->tva_intra))) {
2602 $vat_reverse_charge = 1;
2604 $vat_reverse_charge = 0;
2607 print
'<input type="checkbox" name="vat_reverse_charge"'. (!empty($vat_reverse_charge) ?
' checked ' :
'') .
'>';
2614 print
'<td>'.$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0).
'</td>';
2615 print
'<td class="maxwidthonsmartphone">';
2616 print
img_picto(
'',
'currency',
'class="pictofixedwidth"');
2617 print
$form->selectMultiCurrency((
GETPOSTISSET(
'multicurrency_code') ?
GETPOST(
'multicurrency_code',
'alpha') : $currency_code),
'multicurrency_code');
2623 if ($fac_recid > 0) {
2624 $dateexample = $newdateinvoice ? $newdateinvoice : $dateinvoice;
2625 if (empty($dateexample)) {
2628 $substitutionarray = array(
2629 '__TOTAL_HT__' => $langs->trans(
"AmountHT").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ht).
')',
2630 '__TOTAL_TTC__' => $langs->trans(
"AmountTTC").
' ('.$langs->trans(
"Example").
': '.
price($exampletemplateinvoice->total_ttc).
')',
2631 '__INVOICE_PREVIOUS_MONTH__' => $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%m').
')',
2632 '__INVOICE_MONTH__' => $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%m').
')',
2633 '__INVOICE_NEXT_MONTH__' => $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%m').
')',
2634 '__INVOICE_PREVIOUS_MONTH_TEXT__' => $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'm'),
'%B').
')',
2635 '__INVOICE_MONTH_TEXT__' => $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%B').
')',
2636 '__INVOICE_NEXT_MONTH_TEXT__' => $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'm'),
'%B').
')',
2637 '__INVOICE_PREVIOUS_YEAR__' => $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1,
'y'),
'%Y').
')',
2638 '__INVOICE_YEAR__' => $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample,
'%Y').
')',
2639 '__INVOICE_NEXT_YEAR__' => $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1,
'y'),
'%Y').
')'
2642 $htmltext =
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
2643 foreach ($substitutionarray as $key => $val) {
2644 $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
2646 $htmltext .=
'</i>';
2651 $langs->loadLangs(array(
"intracommreport"));
2652 print
'<tr><td>'.$langs->trans(
'IntracommReportTransportMode').
'</td><td>';
2653 $form->selectTransportMode(
GETPOSTISSET(
'transport_mode_id') ?
GETPOST(
'transport_mode_id') : $transport_mode_id,
'transport_mode_id');
2657 if (empty($reshook)) {
2658 print $object->showOptionals($extrafields,
'create');
2662 print
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
2664 $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%');
2665 print $doleditor->Create(1);
2671 print
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
2673 $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%');
2674 print $doleditor->Create(1);
2680 if (!empty($objectsrc) && is_object($objectsrc)) {
2681 print
"\n<!-- ".$classname.
" info -->";
2683 print
'<input type="hidden" name="amount" value="'.$objectsrc->total_ht.
'">'.
"\n";
2684 print
'<input type="hidden" name="total" value="'.$objectsrc->total_ttc.
'">'.
"\n";
2685 print
'<input type="hidden" name="tva" value="'.$objectsrc->total_tva.
'">'.
"\n";
2686 print
'<input type="hidden" name="origin" value="'.$objectsrc->element.
'">';
2687 print
'<input type="hidden" name="originid" value="'.$objectsrc->id.
'">';
2689 $txt = $langs->trans($classname);
2690 if ($classname ==
'CommandeFournisseur') {
2691 $langs->load(
'orders');
2692 $txt = $langs->trans(
"SupplierOrder");
2694 print
'<tr><td>'.$txt.
'</td><td>'.$objectsrc->getNomUrl(1);
2696 $objectsrc->fetchObjectLinked($originid, $origin,
'',
'invoice_supplier');
2698 $invoice_supplier = $objectsrc->linkedObjects[
'invoice_supplier'];
2701 if (is_array($invoice_supplier)) {
2702 $cntinvoice = count($invoice_supplier);
2704 if ($cntinvoice >= 1) {
2706 echo
' ('.$langs->trans(
'LatestRelatedBill').end($invoice_supplier)->getNomUrl(1).
')';
2711 print
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
2712 print
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
2713 if ($mysoc->localtax1_assuj ==
"1" || $object->total_localtax1 != 0) {
2714 print
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
2717 if ($mysoc->localtax2_assuj ==
"1" || $object->total_localtax2 != 0) {
2718 print
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
2720 print
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
2723 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
2724 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
"</td></tr>";
2725 print
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
"</td></tr>";
2731 $reshook = $hookmanager->executeHooks(
'formObjectOptions',
$parameters, $object, $action);
2732 print $hookmanager->resPrint;
2739 print
$form->buttonsSaveCancel(
"CreateDraft");
2742 if (!empty($objectsrc) && is_object($objectsrc)) {
2745 $title = $langs->trans(
'ProductsAndServices');
2748 print
'<div class="div-table-responsive-no-min">';
2749 print
'<table class="noborder centpercent">';
2751 $objectsrc->printOriginLinesList(
'', $selectedLines);
2759 if ($id > 0 || !empty($ref)) {
2765 $productstatic =
new Product($db);
2767 $result = $object->fetch($id, $ref);
2769 $langs->load(
"errors");
2770 print $langs->trans(
"ErrorRecordNotFound");
2776 $result = $object->fetch_thirdparty();
2782 $societe = $object->thirdparty;
2784 $totalpaid = $object->getSommePaiement();
2785 $totalcreditnotes = $object->getSumCreditNotesUsed();
2786 $totaldeposits = $object->getSumDepositsUsed();
2794 $resteapayer =
price2num($object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
2797 $multicurrency_resteapayer = 0;
2799 $multicurrency_totalpaid = $object->getSommePaiement(1);
2800 $multicurrency_totalcreditnotes = $object->getSumCreditNotesUsed(1);
2801 $multicurrency_totaldeposits = $object->getSumDepositsUsed(1);
2802 $multicurrency_resteapayer =
price2num($object->multicurrency_total_ttc - $multicurrency_totalpaid - $multicurrency_totalcreditnotes - $multicurrency_totaldeposits,
'MT');
2806 if ($resteapayer == 0 && $multicurrency_resteapayer != 0 && $object->multicurrency_code != $conf->currency) {
2807 $resteapayer =
price2num($multicurrency_resteapayer / $object->multicurrency_tx,
'MT');
2811 if ($object->paye) {
2814 $resteapayeraffiche = $resteapayer;
2816 if (!empty($conf->global->FACTURE_SUPPLIER_DEPOSITS_ARE_JUST_PAYMENTS)) {
2817 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
2818 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
2820 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
2821 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
2824 $absolute_discount = $societe->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
2825 $absolute_creditnote = $societe->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
2826 $absolute_discount =
price2num($absolute_discount,
'MT');
2827 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
2832 $objectidnext = $object->getIdReplacingInvoice();
2835 $titre = $langs->trans(
'SupplierInvoice');
2837 print
dol_get_fiche_head($head,
'card', $titre, -1,
'supplier_invoice', 0,
'',
'', 0,
'', 1);
2842 if ($action ==
'converttoreduc') {
2845 $type_fac =
'ExcessPaid';
2847 $type_fac =
'CreditNote';
2849 $type_fac =
'Deposit';
2851 $text = $langs->trans(
'ConfirmConvertToReducSupplier', strtolower($langs->transnoentities($type_fac)));
2852 $text .=
'<br>'.$langs->trans(
'ConfirmConvertToReducSupplier2');
2853 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?facid='.$object->id, $langs->trans(
'ConvertToReduc'), $text,
'confirm_converttoreduc',
'',
"yes", 2);
2857 if ($action ==
'clone') {
2859 $formquestion = array(
2860 array(
'type' =>
'text',
'name' =>
'newsupplierref',
'label' => $langs->trans(
"RefSupplier"),
'value' => $langs->trans(
"CopyOf").
' '.$object->ref_supplier),
2861 array(
'type' =>
'date',
'name' =>
'newdate',
'label' => $langs->trans(
"Date"),
'value' =>
dol_now())
2864 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneInvoice', $object->ref),
'confirm_clone', $formquestion,
'yes', 1, 250);
2868 if ($action ==
'valid') {
2870 if (preg_match(
'/^[\(]?PROV/i', $object->ref) || empty($object->ref)) {
2872 $numref = $object->getNextNumRef($societe);
2874 $numref = $object->ref;
2881 $text = $langs->trans(
'ConfirmValidateBill', $numref);
2889 $formquestion = array();
2891 $qualified_for_stock_change = 0;
2892 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
2893 $qualified_for_stock_change = $object->hasProductsOrServices(2);
2895 $qualified_for_stock_change = $object->hasProductsOrServices(1);
2898 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
2899 $langs->load(
"stocks");
2900 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2903 $warehouse_array = $warehouse->list_array();
2904 if (count($warehouse_array) == 1) {
2905 $label = $object->type ==
FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans(
"WarehouseForStockDecrease", current($warehouse_array)) : $langs->trans(
"WarehouseForStockIncrease", current($warehouse_array));
2906 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
2909 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
2911 $formquestion = array(
2912 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
2916 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ValidateBill'), $text,
'confirm_valid', $formquestion, 1, 1);
2921 if ($action ==
'edit') {
2922 $formquestion = array();
2924 $qualified_for_stock_change = 0;
2925 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
2926 $qualified_for_stock_change = $object->hasProductsOrServices(2);
2928 $qualified_for_stock_change = $object->hasProductsOrServices(1);
2930 if (
isModEnabled(
'stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
2931 $langs->load(
"stocks");
2932 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
2935 $warehouse_array = $warehouse->list_array();
2936 if (count($warehouse_array) == 1) {
2937 $label = $object->type ==
FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans(
"WarehouseForStockIncrease", current($warehouse_array)) : $langs->trans(
"WarehouseForStockDecrease", current($warehouse_array));
2938 $value =
'<input type="hidden" id="idwarehouse" name="idwarehouse" value="'.key($warehouse_array).
'">';
2941 $value = $formproduct->selectWarehouses(
GETPOST(
'idwarehouse') ?
GETPOST(
'idwarehouse') :
'ifone',
'idwarehouse',
'', 1);
2943 $formquestion = array(
2944 array(
'type' =>
'other',
'name' =>
'idwarehouse',
'label' => $label,
'value' => $value)
2947 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'UnvalidateBill'), $langs->trans(
'ConfirmUnvalidateBill', $object->ref),
'confirm_edit', $formquestion, 1, 1);
2951 if ($action ==
'paid' && ($resteapayer <= 0 || (!empty($conf->global->SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID) && $resteapayer == $object->total_ttc))) {
2952 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidBill', $object->ref),
'confirm_paid',
'', 0, 1);
2955 if ($action ==
'paid' && $resteapayer > 0 && (empty($conf->global->SUPPLIER_INVOICE_CAN_SET_PAID_EVEN_IF_PARTIALLY_PAID) || $resteapayer != $object->total_ttc)) {
2959 $close[$i][
'code'] =
'discount_vat';
2961 $close[$i][
'code'] =
'badsupplier';
2963 $close[$i][
'code'] =
'other';
2967 $close[$i][
'label'] = $langs->trans(
"HelpEscompte").
'<br><br>'.$langs->trans(
"ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");
2969 $close[$i][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
2971 $close[$i][
'label'] = $langs->trans(
"Other");
2975 $close[$i][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonDiscount", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
2977 $close[$i][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadCustomer", $resteapayer, $langs->trans(
"Currency".$conf->currency)), $close[$i][
'label'], 1);
2979 $close[$i][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"Other"), $close[$i][
'label'], 1);
2982 foreach ($close as $key => $val) {
2983 $arrayreasons[$close[$key][
'code']] = $close[$key][
'reason'];
2987 $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'));
2989 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?facid='.$object->id, $langs->trans(
'ClassifyPaid'), $langs->trans(
'ConfirmClassifyPaidPartially', $object->ref),
'confirm_paid_partially', $formquestion,
"yes", 1, 310);
2993 if ($action ==
'canceled') {
2995 $close[1][
'code'] =
'badsupplier';
2996 $close[2][
'code'] =
'abandon';
2998 $close[1][
'label'] = $langs->trans(
"ConfirmClassifyPaidPartiallyReasonBadSupplierDesc");
2999 $close[2][
'label'] = $langs->trans(
"ConfirmClassifyAbandonReasonOtherDesc");
3001 $close[1][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyPaidPartiallyReasonBadSupplier", $object->ref), $close[1][
'label'], 1);
3002 $close[2][
'reason'] =
$form->textwithpicto($langs->transnoentities(
"ConfirmClassifyAbandonReasonOther"), $close[2][
'label'], 1);
3004 $arrayreasons[$close[1][
'code']] = $close[1][
'reason'];
3005 $arrayreasons[$close[2][
'code']] = $close[2][
'reason'];
3008 $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'));
3010 $formconfirm =
$form->formconfirm($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $langs->trans(
'CancelBill'), $langs->trans(
'ConfirmCancelBill', $object->ref),
'confirm_canceled', $formquestion,
"yes", 1, 250);
3014 if ($action ==
'delete') {
3015 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteBill'), $langs->trans(
'ConfirmDeleteBill'),
'confirm_delete',
'', 0, 1);
3017 if ($action ==
'deletepayment') {
3018 $payment_id =
GETPOST(
'paiement_id');
3019 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&paiement_id='.$payment_id, $langs->trans(
'DeletePayment'), $langs->trans(
'ConfirmDeletePayment'),
'confirm_delete_paiement',
'', 0, 1);
3023 if ($action ==
'ask_deleteline') {
3024 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'),
'confirm_deleteline',
'', 0, 1);
3029 $reshook = $hookmanager->executeHooks(
'formConfirm',
$parameters, $object, $action);
3030 if (empty($reshook)) {
3032 } elseif ($reshook > 0) {
3042 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
3044 $morehtmlref =
'<div class="refidno">';
3046 $morehtmlref .=
$form->editfieldkey(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $usercancreate,
'string',
'', 0, 1);
3047 $morehtmlref .=
$form->editfieldval(
"RefSupplier",
'ref_supplier', $object->ref_supplier, $object, $usercancreate,
'string',
'',
null,
null,
'', 1);
3049 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1,
'supplier');
3050 if (empty($conf->global->MAIN_DISABLE_OTHER_LINK) && $object->thirdparty->id > 0) {
3051 $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>';
3055 $langs->load(
"projects");
3056 $morehtmlref .=
'<br>';
3057 if ($permissiontoadd) {
3058 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
3059 if ($action !=
'classify') {
3060 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.((int) $object->id).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
3062 $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');
3064 if (!empty($object->fk_project)) {
3066 $proj->fetch($object->fk_project);
3067 $morehtmlref .= $proj->getNomUrl(1);
3069 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
3074 $morehtmlref .=
'</div>';
3076 $object->totalpaid = $totalpaid;
3078 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
3080 print
'<div class="fichecenter">';
3081 print
'<div class="fichehalfleft">';
3082 print
'<div class="underbanner clearboth"></div>';
3084 print
'<table class="border tableforfield centpercent">';
3087 print
'<tr><td class="titlefield">'.$langs->trans(
'Type').
'</td><td>';
3088 print
'<span class="badgeneutral">';
3089 print $object->getLibType();
3093 $facreplaced->fetch($object->fk_facture_source);
3094 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"ReplaceInvoice", $facreplaced->getNomUrl(1)).
'</span>';
3098 if ($object->fk_facture_source > 0) {
3099 $facusing->fetch($object->fk_facture_source);
3100 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"CorrectInvoice", $facusing->getNomUrl(1)).
'</span>';
3102 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"CorrectedInvoiceNotFound").
'</span>';
3106 $facidavoir = $object->getListIdAvoirFromInvoice();
3107 if (count($facidavoir) > 0) {
3108 $invoicecredits = array();
3109 foreach ($facidavoir as $id) {
3111 $facavoir->fetch($id);
3112 $invoicecredits[] = $facavoir->getNomUrl(1);
3114 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"InvoiceHasAvoir") . (count($invoicecredits) ?
' ' :
'') . implode(
',', $invoicecredits);
3117 if (isset($objectidnext) && $objectidnext > 0) {
3120 $facthatreplace->fetch($objectidnext);
3121 print
' <span class="opacitymediumbycolor paddingleft">'.str_replace(
'{s1}', $facthatreplace->getNomUrl(1), $langs->transnoentities(
"ReplacedByInvoice",
'{s1}')).
'</span>';
3125 $result = $discount->fetch(0, 0, $object->id);
3127 print
' <span class="opacitymediumbycolor paddingleft">';
3128 $s = $langs->trans(
"CreditNoteConvertedIntoDiscount",
'{s1}',
'{s2}');
3129 $s = str_replace(
'{s1}', $object->getLibType(1), $s);
3130 $s = str_replace(
'{s2}', $discount->getNomUrl(1,
'discount'), $s);
3132 print
'</span><br>';
3136 if ($object->fk_fac_rec_source > 0) {
3138 $result = $tmptemplate->fetch($object->fk_fac_rec_source);
3140 print
' <span class="opacitymediumbycolor paddingleft">';
3141 $link =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$tmptemplate->id.
'">'.
dol_escape_htmltag($tmptemplate->titre).
'</a>';
3142 $s = $langs->transnoentities(
"GeneratedFromSupplierTemplate", $link);
3152 print
'<!-- Discounts -->'.
"\n";
3153 print
'<tr><td>'.$langs->trans(
'DiscountStillRemaining');
3156 $thirdparty = $societe;
3158 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
3164 print
'<td>'.$form->editfieldkey(
"Label",
'label', $object->label, $object, $usercancreate).
'</td>';
3165 print
'<td>'.$form->editfieldval(
"Label",
'label', $object->label, $object, $usercancreate).
'</td>';
3173 print
$form->editfieldkey(
"DateInvoice",
'datef', $object->datep, $object, $form_permission,
'datepicker');
3174 print
'</td><td colspan="3">';
3175 print
$form->editfieldval(
"Date",
'datef', $object->datep, $object, $form_permission,
'datepicker');
3179 $langs->load(
'bills');
3180 print
'<tr><td class="nowrap">';
3181 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3182 print $langs->trans(
'PaymentConditions');
3184 if ($action !=
'editconditions' && $form_permission) {
3185 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>';
3187 print
'</tr></table>';
3189 if ($action ==
'editconditions') {
3190 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'cond_reglement_id');
3192 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id,
'none');
3199 print
$form->editfieldkey(
"DateMaxPayment",
'date_lim_reglement', $object->date_echeance, $object, $form_permission,
'datepicker');
3201 print
$form->editfieldval(
"DateMaxPayment",
'date_lim_reglement', $object->date_echeance, $object, $form_permission,
'datepicker');
3202 if ($action !=
'editdate_lim_reglement' && $object->hasDelay()) {
3208 $langs->load(
'bills');
3209 print
'<tr><td class="nowrap">';
3210 print
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
3211 print $langs->trans(
'PaymentMode');
3213 if ($action !=
'editmode' && $form_permission) {
3214 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>';
3216 print
'</tr></table>';
3218 if ($action ==
'editmode') {
3219 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'mode_reglement_id',
'DBIT', 1, 1);
3221 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id,
'none');
3230 print
'<table class="nobordernopadding" width="100%"><tr><td>';
3231 print
$form->editfieldkey(
'Currency',
'multicurrency_code',
'', $object, 0);
3233 if ($action !=
'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT) {
3234 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>';
3236 print
'</tr></table>';
3238 if ($action ==
'editmulticurrencycode') {
3239 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'multicurrency_code');
3241 $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code,
'none');
3246 if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
3249 print
'<table class="nobordernopadding centpercent"><tr><td>';
3250 print
$form->editfieldkey(
'CurrencyRate',
'multicurrency_tx',
'', $object, 0);
3252 if ($action !=
'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
3253 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>';
3255 print
'</tr></table>';
3257 if ($action ==
'editmulticurrencyrate' || $action ==
'actualizemulticurrencyrate') {
3258 if ($action ==
'actualizemulticurrencyrate') {
3261 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'multicurrency_tx', $object->multicurrency_code);
3263 $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx,
'none', $object->multicurrency_code);
3264 if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
3265 print
'<div class="inline-block"> ';
3266 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
3276 print
'<tr><td class="nowrap">';
3277 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3278 print $langs->trans(
'BankAccount');
3280 if ($action !=
'editbankaccount' && $usercancreate) {
3281 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>';
3283 print
'</tr></table>';
3285 if ($action ==
'editbankaccount') {
3286 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'fk_account', 1);
3288 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account,
'none');
3295 if (!empty($conf->global->ACCOUNTING_FORCE_ENABLE_VAT_REVERSE_CHARGE)) {
3296 print
'<tr><td class="nowrap">';
3297 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
3298 print $langs->trans(
'VATReverseCharge');
3300 if ($action !=
'editvatreversecharge' && $usercancreate) {
3301 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editvatreversecharge&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetVATReverseCharge'), 1).
'</a></td>';
3303 print
'</tr></table>';
3305 if ($action ==
'editvatreversecharge') {
3306 print
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
3307 print
'<input type="hidden" name="action" value="setvatreversecharge">';
3308 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3310 print
'<input type="checkbox" name="vat_reverse_charge"' . ($object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
'>';
3312 print
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
3315 print
'<input type="checkbox" name="vat_reverse_charge"'. ($object->vat_reverse_charge ==
'1' ?
' checked ' :
'') .
' disabled>';
3323 print
'<table width="100%" class="nobordernopadding"><tr><td>';
3324 print $langs->trans(
'IncotermLabel');
3325 print
'<td><td class="right">';
3326 if ($usercancreate) {
3327 print
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?facid='.$object->id.
'&action=editincoterm&token='.
newToken().
'">'.
img_edit().
'</a>';
3331 print
'</td></tr></table>';
3334 if ($action !=
'editincoterm') {
3335 print
$form->textwithpicto($object->display_incoterms(), $object->label_incoterms, 1);
3337 print
$form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms :
''), (!empty($object->location_incoterms) ? $object->location_incoterms :
''), $_SERVER[
'PHP_SELF'].
'?id='.$object->id);
3344 $langs->loadLangs(array(
"intracommreport"));
3346 print
'<table class="nobordernopadding centpercent"><tr><td>';
3347 print $langs->trans(
'IntracommReportTransportMode');
3349 if ($action !=
'edittransportmode' && ($user->hasRight(
"fournisseur",
"facture",
"creer") || $user->hasRight(
"supplier_invoice",
"creer"))) {
3350 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=edittransportmode&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit().
'</a></td>';
3352 print
'</tr></table>';
3355 if ($action ==
'edittransportmode') {
3356 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->transport_mode_id,
'transport_mode_id', 1, 1);
3358 $form->formSelectTransportMode($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->transport_mode_id,
'none');
3365 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
3370 print
'<div class="fichehalfright">';
3371 print
'<div class="underbanner clearboth"></div>';
3373 print
'<table class="border tableforfield centpercent">';
3376 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
3377 print
'<td class="nowrap amountcard right">' .
price($object->total_ht,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
3378 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
3379 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_ht,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
3384 print
'<td>' . $langs->trans(
'AmountVAT') .
'</td>';
3385 print
'<td class="nowrap amountcard right">';
3386 if (
GETPOST(
'calculationrule')) {
3387 $calculationrule =
GETPOST(
'calculationrule',
'alpha');
3389 $calculationrule = (empty($conf->global->MAIN_ROUNDOFTOTAL_NOT_TOTALOFROUND) ?
'totalofround' :
'roundoftotal');
3391 if ($calculationrule ==
'totalofround') {
3392 $calculationrulenum = 1;
3394 $calculationrulenum = 2;
3397 if ($object->getVentilExportCompta() == 0) {
3398 $s =
'<span class="hideonsmartphone opacitymedium">' . $langs->trans(
"ReCalculate") .
' </span>';
3399 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' . $object->id .
'&action=calculate&calculationrule=totalofround">' . $langs->trans(
"Mode1") .
'</a>';
3401 $s .=
'<a href="' . $_SERVER[
"PHP_SELF"] .
'?id=' . $object->id .
'&action=calculate&calculationrule=roundoftotal">' . $langs->trans(
"Mode2") .
'</a>';
3402 print
'<div class="inline-block">';
3403 print
$form->textwithtooltip($s, $langs->trans(
"CalculationRuleDesc", $calculationrulenum) .
'<br>' . $langs->trans(
"CalculationRuleDescSupplier"), 2, 1,
img_picto(
'',
'help'),
'', 3,
'', 0,
'recalculate');
3404 print
' ';
3407 print
price($object->total_tva, 1, $langs, 0, -1, -1, $conf->currency);
3409 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
3410 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_tva,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
3414 if ($societe->localtax1_assuj ==
"1") {
3416 print
'<td>' . $langs->transcountry(
"AmountLT1", $societe->country_code) .
'</td>';
3417 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax1, 1, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3420 if ($societe->localtax2_assuj ==
"1") {
3422 print
'<td>' . $langs->transcountry(
"AmountLT2", $societe->country_code) .
'</td>';
3423 print
'<td class="nowrap amountcard right">' .
price($object->total_localtax2, 1, $langs, 0, -1, -1, $conf->currency) .
'</td>';
3428 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
3429 print
'<td class="nowrap amountcard right">' .
price($object->total_ttc,
'', $langs, 0, -1, -1, $conf->currency) .
'</td>';
3430 if (
isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
3431 print
'<td class="nowrap amountcard right">' .
price($object->multicurrency_total_ttc,
'', $langs, 0, -1, -1, $object->multicurrency_code) .
'</td>';
3447 $nbrows = 9; $nbcols = 3;
3452 $nbrows++; $nbcols++;
3462 if ($societe->localtax1_assuj ==
"1") {
3465 if ($societe->localtax2_assuj ==
"1") {
3469 $sql =
'SELECT p.datep as dp, p.ref, p.num_paiement as num_payment, p.rowid, p.fk_bank,';
3470 $sql .=
' c.id as paiement_type, c.code as payment_code,';
3471 $sql .=
' pf.amount,';
3472 $sql .=
' ba.rowid as baid, ba.ref as baref, ba.label, ba.number as banumber, ba.account_number, ba.fk_accountancy_journal';
3473 $sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn as p';
3474 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank as b ON p.fk_bank = b.rowid';
3475 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'bank_account as ba ON b.fk_account = ba.rowid';
3476 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_paiement as c ON p.fk_paiement = c.id';
3477 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn as pf ON pf.fk_paiementfourn = p.rowid';
3478 $sql .=
' WHERE pf.fk_facturefourn = '.((int) $object->id);
3479 $sql .=
' ORDER BY p.datep, p.tms';
3481 $result = $db->query(
$sql);
3483 $num = $db->num_rows($result);
3486 print
'<div class="div-table-responsive-no-min">';
3487 print
'<table class="noborder paymenttable centpercent">';
3488 print
'<tr class="liste_titre">';
3490 print
'<td>'.$langs->trans(
'Date').
'</td>';
3491 print
'<td>'.$langs->trans(
'Type').
'</td>';
3493 print
'<td class="right">'.$langs->trans(
'BankAccount').
'</td>';
3495 print
'<td class="right">'.$langs->trans(
'Amount').
'</td>';
3496 print
'<td width="18"> </td>';
3501 $objp = $db->fetch_object($result);
3503 $paymentstatic->id = $objp->rowid;
3504 $paymentstatic->datepaye = $db->jdate($objp->dp);
3505 $paymentstatic->ref = ($objp->ref ? $objp->ref : $objp->rowid);
3506 $paymentstatic->num_payment = $objp->num_payment;
3508 $paymentstatic->paiementcode = $objp->payment_code;
3509 $paymentstatic->type_code = $objp->payment_code;
3510 $paymentstatic->type_label = $objp->payment_type;
3512 print
'<tr class="oddeven">';
3513 print
'<td class="nowraponall">';
3514 print $paymentstatic->getNomUrl(1);
3516 print
'<td>'.dol_print_date($db->jdate($objp->dp),
'day').
'</td>';
3517 $s =
$form->form_modes_reglement(
null, $objp->paiement_type,
'none',
'', 1, 0,
'', 1).
' '.$objp->num_payment;
3518 print
'<td class="tdoverflowmax125" title="'.dol_escape_htmltag($s).
'">';
3522 $bankaccountstatic->id = $objp->baid;
3523 $bankaccountstatic->ref = $objp->baref;
3524 $bankaccountstatic->label = $objp->baref;
3525 $bankaccountstatic->number = $objp->banumber;
3528 $bankaccountstatic->account_number = $objp->account_number;
3531 $accountingjournal->fetch($objp->fk_accountancy_journal);
3532 $bankaccountstatic->accountancy_journal = $accountingjournal->getNomUrl(0, 1, 1,
'', 1);
3535 print
'<td class="right">';
3536 if ($objp->baid > 0) {
3537 print $bankaccountstatic->getNomUrl(1,
'transactions');
3541 print
'<td class="right">'.price($sign * $objp->amount).
'</td>';
3542 print
'<td class="center">';
3544 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=deletepayment&token='.
newToken().
'&paiement_id='.$objp->rowid.
'">';
3550 $totalpaid += $objp->amount;
3554 print
'<tr class="oddeven"><td colspan="'.$nbcols.
'"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td><td></td><td></td></tr>';
3577 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3578 print
'<span class="opacitymedium">';
3580 print $langs->trans(
'AlreadyPaidNoCreditNotesNoDeposits');
3582 print $langs->trans(
'AlreadyPaid');
3585 print
'</td><td class="right"'.(($totalpaid > 0) ?
' class="amountalreadypaid"' :
'').
'>'.
price($totalpaid).
'</td><td> </td></tr>';
3588 $resteapayeraffiche = $resteapayer;
3590 $cssforamountpaymentcomplete =
'amountpaymentcomplete';
3593 $creditnoteamount = 0;
3596 $sql =
"SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,";
3597 $sql .=
" re.description, re.fk_invoice_supplier_source";
3598 $sql .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as re";
3599 $sql .=
" WHERE fk_invoice_supplier = ".((int) $object->id);
3600 $resql = $db->query(
$sql);
3602 $num = $db->num_rows($resql);
3606 $obj = $db->fetch_object($resql);
3607 $invoice->fetch($obj->fk_invoice_supplier_source);
3608 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3610 print $langs->trans(
"CreditNote").
' ';
3613 print $langs->trans(
"Deposit").
' ';
3615 print $invoice->getNomUrl(0);
3617 print
'<td class="right">'.price($obj->amount_ttc).
'</td>';
3618 print
'<td class="right">';
3619 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'&action=unlinkdiscount&discountid='.$obj->rowid.
'">';
3620 print
img_picto($langs->transnoentitiesnoconv(
"RemoveDiscount"),
'unlink');
3625 $creditnoteamount += $obj->amount_ttc;
3628 $depositamount += $obj->amount_ttc;
3637 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3638 print
'<span class="opacitymedium">';
3639 print
$form->textwithpicto($langs->trans(
"Discount"), $langs->trans(
"HelpEscompte"), - 1);
3641 print
'</td><td class="right">'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3642 $resteapayeraffiche = 0;
3643 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3647 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3648 print
'<span class="opacitymedium">';
3649 print
$form->textwithpicto($langs->trans(
"Abandoned"), $langs->trans(
"HelpAbandonBadCustomer"), - 1);
3651 print
'</td><td class="right">'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3653 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3657 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3658 print
'<span class="opacitymedium">';
3659 print
$form->textwithpicto($langs->trans(
"ProductReturned"), $langs->trans(
"HelpAbandonProductReturned"), - 1);
3661 print
'</td><td class="right">'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaid).
'</td><td> </td></tr>';
3662 $resteapayeraffiche = 0;
3663 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3667 print
'<tr><td colspan="'.$nbcols.
'" class="right nowrap">';
3668 $text = $langs->trans(
"HelpAbandonOther");
3669 if ($object->close_note) {
3670 $text .=
'<br><br><b>'.$langs->trans(
"Reason").
'</b>:'.$object->close_note;
3672 print
'<span class="opacitymedium">';
3673 print
$form->textwithpicto($langs->trans(
"Abandoned"), $text, - 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">';
3682 print
'<span class="opacitymedium">';
3683 print $langs->trans(
"Billed");
3685 print
'</td><td class="right">'.price($object->total_ttc).
'</td><td> </td></tr>';
3688 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3689 print
'<span class="opacitymedium">';
3690 print $langs->trans(
'RemainderToPay');
3691 if ($resteapayeraffiche < 0) {
3692 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3696 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($resteapayeraffiche).
'</td><td> </td></tr>';
3699 if (
isModEnabled(
'multicurreny') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
3700 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3701 print
'<span class="opacitymedium">';
3702 print $langs->trans(
'RemainderToPayMulticurrency');
3703 if ($resteapayeraffiche < 0) {
3704 print
' ('.$langs->trans(
'NegativeIfExcessPaid').
')';
3708 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>';
3711 $cssforamountpaymentcomplete =
'amountpaymentneutral';
3714 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3715 print $langs->trans(
'AlreadyPaidBack');
3716 print
' :</td><td class="right">'.price($sign * $totalpaid).
'</td><td> </td></tr>';
3719 print
'<tr><td colspan="'.$nbcols.
'" class="right">'.$langs->trans(
"Billed").
' :</td><td class="right">'.
price($sign * $object->total_ttc).
'</td><td> </td></tr>';
3722 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3723 print
'<span class="opacitymedium">';
3724 print $langs->trans(
'RemainderToPayBack');
3725 if ($resteapayeraffiche > 0) {
3726 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3730 print
'<td class="right'.($resteapayeraffiche ?
' amountremaintopay' : (
' '.$cssforamountpaymentcomplete)).
'">'.
price($sign * $resteapayeraffiche).
'</td><td> </td></tr>';
3733 if (
isModEnabled(
'multicurreny') && $object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
3734 print
'<tr><td colspan="'.$nbcols.
'" class="right">';
3735 print
'<span class="opacitymedium">';
3736 print $langs->trans(
'RemainderToPayBackMulticurrency');
3737 if ($resteapayeraffiche> 0) {
3738 print
' ('.$langs->trans(
'NegativeIfExcessRefunded').
')';
3742 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>';
3757 print
'<div class="clearboth"></div><br>';
3759 if (!empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) {
3760 $blocname =
'contacts';
3761 $title = $langs->trans(
'ContactsAddresses');
3762 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3765 if (!empty($conf->global->MAIN_DISABLE_NOTES_TAB)) {
3767 $blocname =
'notes';
3768 $title = $langs->trans(
'Notes');
3769 include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
3776 print
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="POST">';
3777 print
'<input type="hidden" name="token" value="'.newToken().
'">';
3778 print
'<input type="hidden" name="action" value="'.(($action !=
'editline') ?
'addline' :
'updateline').
'">';
3779 print
'<input type="hidden" name="mode" value="">';
3780 print
'<input type="hidden" name="page_y" value="">';
3781 print
'<input type="hidden" name="id" value="'.$object->id.
'">';
3782 print
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
3783 print
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
3786 include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
3789 print
'<div class="div-table-responsive-no-min">';
3790 print
'<table id="tablelines" class="noborder noshadow centpercent">';
3792 global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
3793 $forceall = 1; $dateSelector = 0; $inputalsopricewithtax = 1;
3794 $senderissupplier = 2;
3796 if (!empty($conf->global->SUPPLIER_INVOICE_WITH_PREDEFINED_PRICES_ONLY)) {
3797 $senderissupplier = 1;
3801 if (!empty($object->lines)) {
3802 $object->printObjectLines($action, $societe, $mysoc, $lineid, 1);
3805 $num = count($object->lines);
3809 if ($action !=
'editline') {
3813 $reshook = $hookmanager->executeHooks(
'formAddObjectLine',
$parameters, $object, $action);
3814 if ($reshook < 0)
setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
3815 if (empty($reshook))
3816 $object->formAddObjectLine(1, $societe, $mysoc);
3827 if ($action !=
'presend') {
3832 print
'<div class="tabsAction">';
3835 $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons',
$parameters, $object, $action);
3837 if (empty($reshook)) {
3841 $ventilExportCompta = $object->getVentilExportCompta();
3843 if ($ventilExportCompta == 0) {
3844 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=edit&token='.
newToken().
'">'.$langs->trans(
'Modify').
'</a>';
3846 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseDispatchedInBookkeeping").
'">'.$langs->trans(
'Modify').
'</span>';
3851 $result = $discount->fetch(0, 0, $object->id);
3858 if (!$objectidnext && $object->close_code !=
'replaced' && $usercancreate) {
3859 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=reopen&token='.
newToken().
'">'.$langs->trans(
'ReOpen').
'</a>';
3861 if ($usercancreate) {
3862 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseReplacedInvoice").
'">'.$langs->trans(
'ReOpen').
'</span>';
3863 } elseif (empty($conf->global->MAIN_BUTTON_HIDE_UNAUTHORIZED)) {
3864 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'ReOpen').
'</span>';
3871 if (count($object->lines)) {
3872 if ($usercanvalidate) {
3873 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=valid"';
3874 print
'>'.$langs->trans(
'Validate').
'</a>';
3876 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'"';
3877 print
'>'.$langs->trans(
'Validate').
'</a>';
3883 if (empty($user->socid)) {
3886 print
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
3888 print
'<span class="butActionRefused classfortooltip">'.$langs->trans(
'SendMail').
'</span>';
3895 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>';
3902 if ($resteapayer == 0) {
3903 print
'<span class="butActionRefused classfortooltip" title="'.$langs->trans(
"DisabledBecauseRemainderToPayIsZero").
'">'.$langs->trans(
'DoPaymentBack').
'</span>';
3905 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>';
3910 if ($object->type ==
FactureFournisseur::TYPE_STANDARD && empty($object->paye) && ($object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits) < 0 && $usercancreate && empty($discount->id)) {
3911 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'&action=converttoreduc">'.$langs->trans(
'ConvertExcessPaidToReduc').
'</a>';
3915 && (!empty($conf->global->SUPPLIER_INVOICE_ALLOW_REUSE_OF_CREDIT_WHEN_PARTIALLY_REFUNDED) || $object->getSommePaiement() == 0)
3917 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>';
3921 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'&action=converttoreduc">'.$langs->trans(
'ConvertToReduc').
'</a>';
3929 ($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)))
3932 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=paid">'.$langs->trans(
'ClassifyPaid').
'</a>';
3936 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)) {
3937 if ($totalpaid > 0 || $totalcreditnotes > 0) {
3939 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=paid">'.$langs->trans(
'ClassifyPaidPartially').
'</a>';
3941 if (empty($conf->global->INVOICE_CAN_NEVER_BE_CANCELED)) {
3942 print
'<a class="butAction'.($conf->use_javascript_ajax ?
' reposition' :
'').
'" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&action=canceled">'.$langs->trans(
'ClassifyCanceled').
'</a>';
3955 if (!$objectidnext) {
3956 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>';
3961 if ($action !=
'edit' && $usercancreate) {
3962 print
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=clone&socid='.$object->socid.
'">'.$langs->trans(
'ToClone').
'</a>';
3967 if (!$objectidnext && count($object->lines) > 0) {
3968 print
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card-rec.php?facid='.$object->id.
'&action=create">'.$langs->trans(
"ChangeIntoRepeatableInvoice").
'</a>';
3973 $isErasable = $object->is_erasable();
3974 if ($action !=
'confirm_edit' && ($usercandelete || ($usercancreate && $isErasable == 1))) {
3975 $enableDelete =
false;
3977 $params = (empty($conf->use_javascript_ajax) ? array() : array(
'attr' => array(
'class' =>
'reposition')));
3979 if ($isErasable == -4) {
3980 $htmltooltip = $langs->trans(
"DisabledBecausePayments");
3981 } elseif ($isErasable == -3) {
3982 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastSituationInvoice");
3983 } elseif ($isErasable == -2) {
3984 $htmltooltip = $langs->trans(
"DisabledBecauseNotLastInvoice");
3985 } elseif ($isErasable == -1) {
3986 $htmltooltip = $langs->trans(
"DisabledBecauseDispatchedInBookkeeping");
3987 } elseif ($isErasable <= 0) {
3988 $htmltooltip = $langs->trans(
"DisabledBecauseNotErasable");
3990 $enableDelete =
true;
3993 print
dolGetButtonAction($htmltooltip, $langs->trans(
"Delete"),
'delete', $_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.
newToken(), $object->id, $enableDelete, $params);
3997 if ($action !=
'confirm_edit') {
3998 print
'<div class="fichecenter"><div class="fichehalfleft">';
4004 $subdir =
get_exdir($object->id, 2, 0, 0, $object,
'invoice_supplier').$ref;
4005 $filedir = $conf->fournisseur->facture->dir_output.
'/'.$subdir;
4006 $urlsource = $_SERVER[
'PHP_SELF'].
'?id='.$object->id;
4007 $genallowed = $usercanread;
4008 $delallowed = $usercancreate;
4009 $modelpdf = (!empty($object->model_pdf) ? $object->model_pdf : (empty($conf->global->INVOICE_SUPPLIER_ADDON_PDF) ?
'' : $conf->global->INVOICE_SUPPLIER_ADDON_PDF));
4011 print $formfile->showdocuments(
'facture_fournisseur', $subdir, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 40, 0,
'',
'',
'', $societe->default_lang);
4012 $somethingshown = $formfile->numoffiles;
4015 $linktoelem =
$form->showLinkToObjectBlock($object,
null, array(
'invoice_supplier'));
4016 $somethingshown =
$form->showLinkedObjectBlock($object, $linktoelem);
4018 print
'</div><div class="fichehalfright">';
4021 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
4023 $somethingshown =
$formactions->showactions($object,
'invoice_supplier', $socid, 1,
'listaction'.($genallowed ?
'largetitle' :
''));
4025 print
'</div></div>';
4031 if (
GETPOST(
'modelselected')) {
4032 $action =
'presend';
4036 $modelmail =
'invoice_supplier_send';
4037 $defaulttopic =
'SendBillRef';
4038 $diroutput = $conf->fournisseur->facture->dir_output;
4039 $autocopy =
'MAIN_MAIL_AUTOCOPY_SUPPLIER_INVOICE_TO';
4040 $trackid =
'sinv'.$object->id;
4042 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 journals.
const TYPE_SITUATION
Situation invoice.
Class to manage absolute discounts.
Class to manage a WYSIWYG editor.
Class to manage warehouses.
Class to manage suppliers invoices.
const TYPE_DEPOSIT
Deposit invoice.
const TYPE_CREDIT_NOTE
Credit note invoice.
const TYPE_REPLACEMENT
Replacement invoice.
const STATUS_VALIDATED
Validated (need to be paid)
const TYPE_STANDARD
Standard invoice.
const STATUS_ABANDONED
Classified abandoned and no payment done.
const STATUS_CLOSED
Classified paid.
Class to manage invoice templates.
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
Class to manage payments for supplier invoices.
Class ProductCombination Used to represent 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.