32require
'../../main.inc.php';
33require_once DOL_DOCUMENT_ROOT.
'/core/lib/invoice.lib.php';
34require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
35require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/core/class/discount.class.php';
38require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture-rec.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
56$langs->loadLangs(array(
'bills',
'banks',
'withdrawals',
'companies'));
61$action =
GETPOST(
'action',
'aZ09');
64$fieldid = (!empty($ref) ?
'ref' :
'rowid');
66 $socid = $user->socid;
70if ($type ==
'bank-transfer') {
72 $moreparam =
'&type='.$type;
79if (
$id > 0 || !empty($ref)) {
87$hookmanager->initHooks(array(
'directdebitcard',
'globalcard'));
89if ($type ==
'bank-transfer') {
90 $result =
restrictedArea($user,
'fournisseur',
$id,
'facture_fourn',
'facture',
'fk_soc', $fieldid, $isdraft);
91 if (!$user->hasRight(
'fournisseur',
'facture',
'lire')) {
95 $result =
restrictedArea($user,
'facture',
$id,
'',
'',
'fk_soc', $fieldid, $isdraft);
96 if (!$user->hasRight(
'facture',
'lire')) {
101if ($type ==
'bank-transfer') {
102 $usercancreate = ($user->rights->fournisseur->facture->creer || $user->rights->supplier_invoice->creer);
104 $usercancreate = $user->hasRight(
'facture',
'creer');
112$parameters = array(
'socid' => $socid);
113$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
118if (empty($reshook)) {
119 if ($action ==
"new" && $usercancreate) {
124 $sourcetype =
'facture';
125 if ($type ==
'bank-transfer') {
126 $sourcetype =
'supplier_invoice';
127 $newtype =
'bank-transfer';
129 $paymentservice =
GETPOST(
'paymentservice');
133 $amount =
GETPOST(
'withdraw_request_amount',
'alpha');
134 $result =
$object->demande_prelevement($user,
price2num($amount), $newtype, $sourcetype, 0, $iban ?? 0);
148 if ($action ==
"delete" && $usercancreate) {
152 header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".
$object->id.
'&type='.$type);
159 if ($action ==
'sepastripedirectdebit' && $usercancreate) {
160 $result =
$object->makeStripeSepaRequest($user,
GETPOSTINT(
'did'),
'direct-debit',
'facture');
174 if ($action ==
'sepastripecredittransfer' && $usercancreate) {
175 $result =
$object->makeStripeSepaRequest($user,
GETPOSTINT(
'did'),
'bank-transfer',
'supplier_invoice');
189 if ($action ==
'setconditions' && $usercancreate) {
191 $object->cond_reglement_code = 0;
192 $object->cond_reglement_id = 0;
207 $old_date_echeance =
$object->date_echeance;
208 $new_date_echeance =
$object->calculate_date_lim_reglement();
209 if ($new_date_echeance > $old_date_echeance) {
210 $object->date_echeance = $new_date_echeance;
215 $result =
$object->update($user);
227 } elseif ($action ==
'setmode' && $usercancreate) {
230 } elseif ($action ==
'setdatef' && $usercancreate) {
234 setEventMessages($langs->trans(
"WarningInvoiceDateInFuture"),
null,
'warnings');
236 setEventMessages($langs->trans(
"WarningInvoiceDateTooFarInFuture"),
null,
'warnings');
241 $date_echence_calc =
$object->calculate_date_lim_reglement();
242 if (!empty(
$object->date_echeance) &&
$object->date_echeance < $date_echence_calc) {
243 $object->date_echeance = $date_echence_calc;
249 $result =
$object->update($user);
253 } elseif ($action ==
'setdate_lim_reglement' && $usercancreate) {
257 setEventMessages($langs->trans(
"DatePaymentTermCantBeLowerThanObjectDate"),
null,
'warnings');
259 $result =
$object->update($user);
271$form =
new Form($db);
275if ($type ==
'bank-transfer') {
276 $title = $langs->trans(
'SupplierInvoice').
" - ".$langs->trans(
'CreditTransfer');
279 $title = $langs->trans(
'InvoiceCustomer').
" - ".$langs->trans(
'StandingOrders');
280 $helpurl =
"EN:Customers_Invoices|FR:Factures_Clients|ES:Facturas_a_clientes";
287 $selleruserevenustamp = $mysoc->useRevenueStamp();
289 $totalpaid =
$object->getSommePaiement();
290 $totalcreditnotes =
$object->getSumCreditNotesUsed();
291 $totaldeposits =
$object->getSumDepositsUsed();
298 $resteapayer =
price2num(
$object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
304 if ($type ==
'bank-transfer') {
306 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL";
307 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL";
309 $filterabsolutediscount =
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
310 $filtercreditnote =
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
313 $absolute_discount =
$object->thirdparty->getAvailableDiscounts(
null, $filterabsolutediscount, 0, 1);
314 $absolute_creditnote =
$object->thirdparty->getAvailableDiscounts(
null, $filtercreditnote, 0, 1);
315 $absolute_discount =
price2num($absolute_discount,
'MT');
316 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
319 $filterabsolutediscount =
"fk_facture_source IS NULL";
320 $filtercreditnote =
"fk_facture_source IS NOT NULL";
322 $filterabsolutediscount =
"fk_facture_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS RECEIVED)%')";
323 $filtercreditnote =
"fk_facture_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS RECEIVED)%')";
326 $absolute_discount =
$object->thirdparty->getAvailableDiscounts(
null, $filterabsolutediscount);
327 $absolute_creditnote =
$object->thirdparty->getAvailableDiscounts(
null, $filtercreditnote);
328 $absolute_discount =
price2num($absolute_discount,
'MT');
329 $absolute_creditnote =
price2num($absolute_creditnote,
'MT');
332 $author =
new User($db);
333 if (!empty(
$object->user_creation_id)) {
334 $author->fetch(
$object->user_creation_id);
335 } elseif (!empty(
$object->fk_user_author)) {
336 $author->fetch(
$object->fk_user_author);
339 if ($type ==
'bank-transfer') {
350 $listofopendirectdebitorcredittransfer =
$object->getListOfOpenDirectDebitOrCreditTransfer($type);
351 $numopen = count($listofopendirectdebitorcredittransfer);
353 print
dol_get_fiche_head($head,
'standingorders', $title, -1, ($type ==
'bank-transfer' ?
'supplier_invoice' :
'bill'));
356 if ($type ==
'bank-transfer') {
357 $linkback =
'<a href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
359 $linkback =
'<a href="'.DOL_URL_ROOT.
'/compta/facture/list.php?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
362 $morehtmlref =
'<div class="refidno">';
364 if ($type ==
'bank-transfer') {
365 $morehtmlref .= $form->editfieldkey(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, 0,
'string',
'', 0, 1);
366 $morehtmlref .= $form->editfieldval(
"RefSupplierBill",
'ref_supplier',
$object->ref_supplier,
$object, 0,
'string',
'',
null,
null,
'', 1);
368 $morehtmlref .= $form->editfieldkey(
"RefCustomer",
'ref_client',
$object->ref_customer,
$object, 0,
'string',
'', 0, 1);
369 $morehtmlref .= $form->editfieldval(
"RefCustomer",
'ref_client',
$object->ref_customer,
$object, 0,
'string',
'',
null,
null,
'', 1);
372 $morehtmlref .=
'<br>'.$object->thirdparty->getNomUrl(1);
373 if ($type ==
'bank-transfer') {
375 $morehtmlref .=
' <div class="inline-block valignmiddle">(<a class="valignmiddle" href="'.DOL_URL_ROOT.
'/fourn/facture/list.php?socid='.
$object->thirdparty->id.
'&search_company='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherBills").
'</a>)</div>';
379 $morehtmlref .=
' <div class="inline-block valignmiddle">(<a class="valignmiddle" href="'.DOL_URL_ROOT.
'/compta/facture/list.php?socid='.
$object->thirdparty->id.
'&search_company='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherBills").
'</a>)</div>';
383 if (isModEnabled(
'project')) {
384 $langs->load(
"projects");
385 $morehtmlref .=
'<br>';
387 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
388 if ($action !=
'classify') {
389 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
391 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
393 if (!empty(
$object->fk_project)) {
395 $proj->fetch(
$object->fk_project);
396 $morehtmlref .= $proj->getNomUrl(1);
398 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
403 $morehtmlref .=
'</div>';
405 $object->totalpaid = $totalpaid;
407 dol_banner_tab(
$object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref, $moreparam, 0,
'',
'');
409 print
'<div class="fichecenter">';
410 print
'<div class="fichehalfleft">';
411 print
'<div class="underbanner clearboth"></div>';
413 print
'<table class="border centpercent tableforfield">';
416 print
'<tr><td class="titlefield fieldname_type">'.$langs->trans(
'Type').
'</td><td colspan="3">';
417 print
'<span class="badgeneutral">';
420 if (!empty(
$object->module_source)) {
421 print
' <span class="opacitymediumbycolor paddingleft">('.$langs->trans(
"POS").
' '.
$object->module_source.
' - '.$langs->trans(
"Terminal").
' '.
$object->pos_source.
')</span>';
423 if (
$object->type == $object::TYPE_REPLACEMENT) {
424 if ($type ==
'bank-transfer') {
427 $facreplaced =
new Facture($db);
429 $facreplaced->fetch(
$object->fk_facture_source);
430 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"ReplaceInvoice", $facreplaced->getNomUrl(1)).
'</span>';
432 if (
$object->type == $object::TYPE_CREDIT_NOTE && !empty(
$object->fk_facture_source)) {
433 if ($type ==
'bank-transfer') {
438 $facusing->fetch(
$object->fk_facture_source);
439 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"CorrectInvoice", $facusing->getNomUrl(1)).
'</span>';
442 $facidavoir =
$object->getListIdAvoirFromInvoice();
443 if (count($facidavoir) > 0) {
444 $invoicecredits = array();
445 foreach ($facidavoir as $facid) {
446 if ($type ==
'bank-transfer') {
451 $facavoir->fetch($facid);
452 $invoicecredits[] = $facavoir->getNomUrl(1);
454 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"InvoiceHasAvoir");
455 print
' '. (count($invoicecredits) ?
' ' :
'') . implode(
',', $invoicecredits);
468 print
'<!-- Discounts -->'.
"\n";
469 print
'<tr><td>'.$langs->trans(
'DiscountStillRemaining').
'</td><td colspan="3">';
471 if ($type ==
'bank-transfer') {
474 $thirdparty =
$object->thirdparty;
477 $thirdparty =
$object->thirdparty;
480 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?facid='.
$object->id);
481 $cannotApplyDiscount = 1;
482 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
487 if ($type ==
'bank-transfer') {
489 print
'<td>'.$form->editfieldkey(
"Label",
'label',
$object->label,
$object, 0).
'</td>';
490 print
'<td>'.$form->editfieldval(
"Label",
'label',
$object->label,
$object, 0).
'</td>';
496 print
'<table class="nobordernopadding centpercent"><tr><td>';
497 print $langs->trans(
'DateInvoice');
499 if (
$object->type != $object::TYPE_CREDIT_NOTE && $action !=
'editinvoicedate' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
500 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editinvoicedate&token='.
newToken().
'&id='.
$object->id.
'&type='.urlencode($type).
'">'.
img_edit($langs->trans(
'SetDate'), 1).
'</a></td>';
502 print
'</tr></table>';
503 print
'</td><td colspan="3">';
505 if (
$object->type != $object::TYPE_CREDIT_NOTE) {
506 if ($action ==
'editinvoicedate') {
507 print $form->form_date($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->date,
'invoicedate', 0, 0, 1, $type);
519 print
'<table class="nobordernopadding centpercent"><tr><td>';
520 print $langs->trans(
'PaymentConditionsShort');
522 if (
$object->type != $object::TYPE_CREDIT_NOTE && $action !=
'editconditions' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
523 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editconditions&token='.
newToken().
'&id='.
$object->id.
'&type='.urlencode($type).
'">'.
img_edit($langs->trans(
'SetConditions'), 1).
'</a></td>';
525 print
'</tr></table>';
526 print
'</td><td colspan="3">';
527 if (
$object->type != $object::TYPE_CREDIT_NOTE) {
528 if ($action ==
'editconditions') {
529 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'cond_reglement_id', 0, $type);
531 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->cond_reglement_id,
'none');
540 print
'<table class="nobordernopadding centpercent"><tr><td>';
541 print $langs->trans(
'DateMaxPayment');
543 if (
$object->type != $object::TYPE_CREDIT_NOTE && $action !=
'editpaymentterm' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
544 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editpaymentterm&token='.
newToken().
'&id='.
$object->id.
'&type='.urlencode($type).
'">'.
img_edit($langs->trans(
'SetDate'), 1).
'</a></td>';
546 print
'</tr></table>';
547 print
'</td><td colspan="3">';
548 if (
$object->type != $object::TYPE_CREDIT_NOTE) {
549 $duedate =
$object->date_lim_reglement;
550 if ($type ==
'bank-transfer') {
551 $duedate =
$object->date_echeance;
554 if ($action ==
'editpaymentterm') {
555 print $form->form_date($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $duedate,
'paymentterm', 0, 0, 1, $type);
569 print
'<table class="nobordernopadding centpercent"><tr><td>';
570 print $langs->trans(
'PaymentMode');
572 if ($action !=
'editmode' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
573 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmode&token='.
newToken().
'&id='.
$object->id.
'&type='.urlencode($type).
'">'.
img_edit($langs->trans(
'SetMode'), 1).
'</a></td>';
575 print
'</tr></table>';
576 print
'</td><td colspan="3">';
577 $filtertype =
'CRDT';
578 if ($type ==
'bank-transfer') {
579 $filtertype =
'DBIT';
581 if ($action ==
'editmode') {
582 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'mode_reglement_id', $filtertype, 1, 0, $type);
584 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->mode_reglement_id,
'none');
589 print
'<tr><td class="nowrap">';
590 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
591 print $langs->trans(
'BankAccount');
593 if (($action !=
'editbankaccount') && $user->hasRight(
'commande',
'creer') &&
$object->status == $object::STATUS_DRAFT) {
594 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editbankaccount&token='.
newToken().
'&id='.
$object->id.
'&type='.urlencode($type).
'">'.
img_edit($langs->trans(
'SetBankAccount'), 1).
'</a></td>';
596 print
'</tr></table>';
597 print
'</td><td colspan="3">';
598 if ($action ==
'editbankaccount') {
599 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'fk_account', 1);
601 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->fk_account,
'none');
608 print
'<div class="fichehalfright">';
609 print
'<!-- amounts -->'.
"\n";
610 print
'<div class="underbanner clearboth"></div>'.
"\n";
612 print
'<table class="border tableforfield centpercent">';
614 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
622 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
623 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
624 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
626 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
632 print
'<td>' . $langs->trans(
'AmountVAT') .
'</td>';
633 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_tva, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
634 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
636 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
641 if (($mysoc->localtax1_assuj ==
"1" && $mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
643 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) .
'</td>';
644 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_localtax1, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
645 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
648 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
653 if (($mysoc->localtax2_assuj ==
"1" && $mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
655 print
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) .
'</td>';
656 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_localtax2, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
657 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
660 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
666 if ($selleruserevenustamp) {
668 print
'<table class="nobordernopadding centpercent"><tr><td>';
669 print $langs->trans(
'RevenueStamp');
671 if ($action !=
'editrevenuestamp' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
672 print
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editrevenuestamp&token='.
newToken().
'&facid='.
$object->id.
'">'.
img_edit($langs->trans(
'SetRevenuStamp'), 1).
'</a></td>';
674 print
'</tr></table>';
675 print
'</td><td class="nowrap right">';
682 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
683 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
684 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
686 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
691 $resteapayer =
price2num(
$object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
694 $parameters = array(
'remaintopay' => $resteapayer);
695 $reshook = $hookmanager->executeHooks(
'finalizeAmountOfInvoice', $parameters,
$object, $action);
697 print $hookmanager->resPrint;
698 if (!empty($remaintopay = $hookmanager->resArray[
'remaintopay'])) {
699 $resteapayer = $remaintopay;
704 print
'<tr><td>'.$langs->trans(
'RemainderToPay').
'</td><td class="nowrap right">'.
price($resteapayer, 1,
'', 1, - 1, - 1,
$conf->currency).
'</td>';
705 if (isModEnabled(
"multicurrency") && (
$object->multicurrency_code &&
$object->multicurrency_code !=
$conf->currency)) {
715 print
'<div class="clearboth"></div>';
723 $sql =
"SELECT SUM(pfd.amount) as amount";
724 $sql .=
" FROM ".MAIN_DB_PREFIX.
"prelevement_demande as pfd";
725 if ($type ==
'bank-transfer') {
726 $sql .=
" WHERE fk_facture_fourn = ".((int)
$object->id);
728 $sql .=
" WHERE fk_facture = ".((int)
$object->id);
730 $sql .=
" AND pfd.traite = 0";
731 $sql .=
" AND pfd.type = 'ban'";
733 $resql = $db->query($sql);
735 $obj = $db->fetch_object($resql);
737 $pending = $obj->amount;
748 print
"\n".
'<div class="tabsAction">'.
"\n";
750 $buttonlabel = $langs->trans(
"MakeWithdrawRequest");
751 $user_perms = $user->hasRight(
'prelevement',
'bons',
'creer');
752 if ($type ==
'bank-transfer') {
753 $buttonlabel = $langs->trans(
"MakeBankTransferOrder");
754 $user_perms = $user->hasRight(
'paymentbybanktransfer',
'create');
758 if (
$object->status > $object::STATUS_DRAFT &&
$object->paid == 0 && $num == 0) {
759 if ($resteapayer > 0) {
761 $remaintopaylesspendingdebit = $resteapayer - $pending;
763 $title = $langs->trans(
"NewStandingOrder");
764 if ($type ==
'bank-transfer') {
765 $title = $langs->trans(
"NewPaymentByBankTransfer");
768 print
'<!-- form to select BAN -->';
769 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
770 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
771 print
'<input type="hidden" name="id" value="'.$object->id.
'" />';
772 print
'<input type="hidden" name="type" value="'.$type.
'" />';
773 print
'<input type="hidden" name="action" value="new" />';
775 print
'<div class="center formconsumeproduce">';
777 print $langs->trans(
'CustomerIBAN').
' ';
781 if (
$object->element ==
'invoice' &&
$object->fk_fac_rec_source) {
783 $facturerec->fetch(
$object->fk_fac_rec_source);
784 if ($facturerec->fk_societe_rib) {
786 $res = $companyBankAccount->fetch($facturerec->fk_societe_rib);
787 $selectedRib = $companyBankAccount->id;
791 $selectedRib = $form->selectRib($selectedRib,
'accountcustomerid',
'fk_soc='.
$object->socid, 1,
'', 1);
793 $defaultRibId =
$object->thirdparty->getDefaultRib();
796 $res = $companyBankAccount->fetch($defaultRibId);
797 if ($res > 0 && !$companyBankAccount->verif()) {
798 print
img_warning(
'Error on default bank number for IBAN : '.$langs->trans($companyBankAccount->error));
800 } elseif ($numopen || ($type !=
'bank-transfer' &&
$object->mode_reglement_code ==
'PRE') || ($type ==
'bank-transfer' &&
$object->mode_reglement_code ==
'VIR')) {
801 print
img_warning($langs->trans(
"NoDefaultIBANFound"));
806 print
' <label for="withdraw_request_amount">';
807 if ($type ==
'bank-transfer') {
808 print $langs->trans(
'BankTransferAmount');
810 print $langs->trans(
"WithdrawRequestAmount");
813 print
'<input type="text" class="right width75" id="withdraw_request_amount" name="withdraw_request_amount" value="'.$remaintopaylesspendingdebit.
'">';
817 print
'<input type="submit" class="butAction small" value="'.$buttonlabel.
'" />';
828 $buttonlabel = $langs->trans(
"MakeWithdrawRequestStripe");
829 print
'<form method="POST" action="">';
830 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
831 print
'<input type="hidden" name="id" value="'.$object->id.
'" />';
832 print
'<input type="hidden" name="type" value="'.$type.
'" />';
833 print
'<input type="hidden" name="action" value="new" />';
834 print
'<input type="hidden" name="paymenservice" value="stripesepa" />';
835 print
'<label for="withdraw_request_amount">'.$langs->trans(
'BankTransferAmount').
' </label>';
836 print
'<input type="text" id="withdraw_request_amount" name="withdraw_request_amount" value="'.$remaintopaylesspendingdebit.
'" size="9" />';
837 print
'<input type="submit" class="butAction small" value="'.$buttonlabel.
'" />';
841 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotEnoughPermissions")).
'">'.$buttonlabel.
'</a>';
844 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"AmountMustBePositive")).
'">'.$buttonlabel.
'</a>';
848 if (
$object->status > $object::STATUS_DRAFT) {
849 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"AlreadyPaid")).
'">'.$buttonlabel.
'</a>';
851 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"Draft")).
'">'.$buttonlabel.
'</a>';
854 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"RequestAlreadyDone")).
'">'.$buttonlabel.
'</a>';
861 if ($type ==
'bank-transfer') {
862 print
'<div class="opacitymedium justify">'.$langs->trans(
"DoCreditTransferBeforePayments");
864 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments2");
866 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments3");
867 print
'</div><br><br>';
869 print
'<div class="opacitymedium justify">'.$langs->trans(
"DoStandingOrdersBeforePayments");
871 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments2");
873 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments3");
874 print
'</div><br><br>';
881 print
'<div class="div-table-responsive-no-min">';
882 print
'<table class="noborder centpercent">';
884 print
'<tr class="liste_titre">';
887 print
'<td> </td>';
889 print
'<td class="left">'.$langs->trans(
"DateRequest").
'</td>';
890 print
'<td>'.$langs->trans(
"User").
'</td>';
891 print
'<td class="center">'.$langs->trans(
"Amount").
'</td>';
892 print
'<td class="center">'.$langs->trans(
"IBAN").
'</td>';
893 print
'<td class="center">'.$langs->trans(
"DateProcess").
'</td>';
894 if ($type ==
'bank-transfer') {
895 print
'<td class="">'.$langs->trans(
"BankTransferReceipt").
'</td>';
897 print
'<td class="">'.$langs->trans(
"WithdrawalReceipt").
'</td>';
899 print
'<td> </td>';
902 print
'<td> </td>';
906 $sql =
"SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande,";
907 $sql .=
" pfd.date_traite as date_traite, pfd.amount, pfd.fk_prelevement_bons,";
908 $sql .=
" pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.amount as pb_amount,";
909 $sql .=
" u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status,";
910 $sql .=
" sr.iban_prefix as iban, sr.bic as bic";
911 $sql .=
" FROM ".$db->prefix().
"prelevement_demande as pfd";
912 $sql .=
" LEFT JOIN ".$db->prefix().
"user as u on pfd.fk_user_demande = u.rowid";
913 $sql .=
" LEFT JOIN ".$db->prefix().
"prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons";
914 $sql .=
" LEFT JOIN ".$db->prefix().
"societe_rib as sr ON sr.rowid = pfd.fk_societe_rib";
915 if ($type ==
'bank-transfer') {
916 $sql .=
" WHERE fk_facture_fourn = ".((int)
$object->id);
918 $sql .=
" WHERE fk_facture = ".((int)
$object->id);
920 $sql .=
" AND pfd.traite = 0";
921 $sql .=
" AND pfd.type = 'ban'";
922 $sql .=
" ORDER BY pfd.date_demande DESC";
924 $resql = $db->query($sql);
930 $tmpuser =
new User($db);
932 $num = $db->num_rows($result);
934 $obj = $db->fetch_object($resql);
936 $tmpuser->id = $obj->user_id;
937 $tmpuser->login = $obj->login;
938 $tmpuser->ref = $obj->login;
939 $tmpuser->email = $obj->email;
940 $tmpuser->lastname = $obj->lastname;
941 $tmpuser->firstname = $obj->firstname;
942 $tmpuser->statut = $obj->user_status;
943 $tmpuser->status = $obj->user_status;
945 print
'<tr class="oddeven">';
949 print
'<td class="center">';
950 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'&did='.$obj->rowid.
'&type='.urlencode($type).
'">';
957 print
'<td class="nowraponall">'.dol_print_date($db->jdate($obj->date_demande),
'dayhour').
"</td>\n";
960 print
'<td class="tdoverflowmax125">';
961 print $tmpuser->getNomUrl(-1,
'', 0, 0, 0, 0,
'login');
965 print
'<td class="center"><span class="amount">'.price($obj->amount).
'</span></td>';
968 print
'<td class="center"><span class="iban">';
970 if ($obj->iban && $obj->bic) {
974 print
'</span></td>';
977 print
'<td class="center"><span class="opacitymedium">'.$langs->trans(
"OrderWaiting").
'</span></td>';
980 print
'<td class="minwidth75">';
981 if ($obj->fk_prelevement_bons > 0) {
983 $withdrawreceipt->id = $obj->fk_prelevement_bons;
984 $withdrawreceipt->ref = $obj->ref;
985 $withdrawreceipt->date_trans = $db->jdate($obj->date_trans);
986 $withdrawreceipt->date_credit = $db->jdate($obj->date_credit);
987 $withdrawreceipt->date_creation = $db->jdate($obj->datec);
988 $withdrawreceipt->statut = $obj->status;
989 $withdrawreceipt->status = $obj->status;
990 $withdrawreceipt->amount = $obj->pb_amount;
993 print $withdrawreceipt->getNomUrl(1);
996 if ($type !=
'bank-transfer') {
998 $langs->load(
"stripe");
999 if ($obj->fk_prelevement_bons > 0) {
1002 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?action=sepastripedirectdebit&paymentservice=stripesepa&token='.
newToken().
'&did='.$obj->rowid.
'&id='.
$object->id.
'&type='.urlencode($type).
'">'.
img_picto(
'',
'stripe',
'class="pictofixedwidth"').$langs->trans(
"RequestDirectDebitWithStripe").
'</a>';
1006 $langs->load(
"stripe");
1007 if ($obj->fk_prelevement_bons > 0) {
1010 print
'<a href="'.$_SERVER[
"PHP_SELF"].
'?action=sepastripecredittransfer&paymentservice=stripesepa&token='.
newToken().
'&did='.$obj->rowid.
'&id='.
$object->id.
'&type='.urlencode($type).
'">'.
img_picto(
'',
'stripe',
'class="pictofixedwidth"').$langs->trans(
"RequestDirectDebitWithStripe").
'</a>';
1016 print
'<td class="">';
1022 print
'<td class="center">';
1023 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'&did='.$obj->rowid.
'&type='.urlencode($type).
'">';
1040 $sql =
"SELECT pfd.rowid, pfd.traite, pfd.date_demande, pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount,";
1041 $sql .=
" pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.fk_bank_account, pb.amount as pb_amount,";
1042 $sql .=
" u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status, u.photo as user_photo,";
1043 $sql .=
" sr.iban_prefix as iban, sr.bic as bic";
1044 $sql .=
" FROM ".$db->prefix().
"prelevement_demande as pfd";
1045 $sql .=
" LEFT JOIN ".$db->prefix().
"user as u on pfd.fk_user_demande = u.rowid";
1046 $sql .=
" LEFT JOIN ".$db->prefix().
"prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons";
1047 $sql .=
" LEFT JOIN ".$db->prefix().
"societe_rib as sr ON sr.rowid = pfd.fk_societe_rib";
1048 if ($type ==
'bank-transfer') {
1049 $sql .=
" WHERE fk_facture_fourn = ".((int)
$object->id);
1051 $sql .=
" WHERE fk_facture = ".((int)
$object->id);
1053 $sql .=
" AND pfd.traite = 1";
1054 $sql .=
" AND pfd.type = 'ban'";
1055 $sql .=
" ORDER BY pfd.date_demande DESC";
1057 $resql = $db->query($sql);
1059 $num = $db->num_rows($resql);
1063 $tmpuser =
new User($db);
1066 $obj = $db->fetch_object($resql);
1068 $tmpuser->id = $obj->user_id;
1069 $tmpuser->login = $obj->login;
1070 $tmpuser->ref = $obj->login;
1071 $tmpuser->email = $obj->email;
1072 $tmpuser->lastname = $obj->lastname;
1073 $tmpuser->firstname = $obj->firstname;
1074 $tmpuser->statut = $obj->user_status;
1075 $tmpuser->status = $obj->user_status;
1076 $tmpuser->photo = $obj->user_photo;
1078 print
'<tr class="oddeven">';
1082 print
'<td> </td>';
1086 print
'<td class="nowraponall">'.dol_print_date($db->jdate($obj->date_demande),
'day',
'tzuserrel').
"</td>\n";
1089 print
'<td class="tdoverflowmax125">';
1090 print $tmpuser->getNomUrl(-1,
'', 0, 0, 0, 0,
'login');
1094 print
'<td class="center"><span class="amount">'.price($obj->amount).
'</span></td>';
1097 print
'<td class="center"><span class="iban">';
1099 if ($obj->iban && $obj->bic) {
1103 print
'</span></td>';
1106 print
'<td class="center nowraponall">'.dol_print_date($db->jdate($obj->date_traite),
'dayhour',
'tzuserrel').
"</td>\n";
1109 print
'<td class="minwidth75">';
1110 if ($obj->fk_prelevement_bons > 0) {
1112 $withdrawreceipt->id = $obj->fk_prelevement_bons;
1113 $withdrawreceipt->ref = $obj->ref;
1114 $withdrawreceipt->date_trans = $db->jdate($obj->date_trans);
1115 $withdrawreceipt->date_credit = $db->jdate($obj->date_credit);
1116 $withdrawreceipt->date_creation = $db->jdate($obj->datec);
1117 $withdrawreceipt->statut = $obj->status;
1118 $withdrawreceipt->status = $obj->status;
1119 $withdrawreceipt->fk_bank_account = $obj->fk_bank_account;
1120 $withdrawreceipt->amount = $obj->pb_amount;
1123 print $withdrawreceipt->getNomUrl(1);
1125 print $withdrawreceipt->getLibStatut(2);
1128 $fk_bank_account = $withdrawreceipt->fk_bank_account;
1129 if (empty($fk_bank_account)) {
1130 $fk_bank_account = (
$object->type ==
'bank-transfer' ?
$conf->global->PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT :
$conf->global->PRELEVEMENT_ID_BANKACCOUNT);
1132 if ($fk_bank_account > 0) {
1133 $bankaccount =
new Account($db);
1134 $result = $bankaccount->fetch($fk_bank_account);
1137 print $bankaccount->getNomUrl(1);
1144 print
'<td> </td>';
1148 print
'<td> </td>';
1155 if (!$numopen && !$numclosed) {
1156 print
'<tr class="oddeven"><td colspan="8"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage bank accounts.
Class to manage withdrawal receipts.
Class to manage bank accounts description of third parties.
Class to manage suppliers invoices.
Class to manage invoices.
const STATUS_DRAFT
Draft status.
Class to manage invoice templates.
Class to manage projects.
Class to manage Dolibarr users.
facturefourn_prepare_head(FactureFournisseur $object)
Prepare array with list of tabs.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_delete($titlealt='default', $other='class="pictodelete"', $morecss='')
Show delete logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
newToken()
Return the value of token currently saved into session with name 'newtoken'.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
facture_prepare_head($object)
Initialize the array of tabs for customer invoice.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
dolDecrypt($chain, $key='')
Decode a string with a symmetric encryption.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.