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->hasRight(
'fournisseur',
'facture',
'creer') || $user->hasRight(
'supplier_invoice',
'creer'));
104 $usercancreate = $user->hasRight(
'facture',
'creer');
112$parameters = array(
'socid' => $socid);
113$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
115 setEventMessages($hookmanager->error, $hookmanager->errors,
'errors');
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, (
float)
price2num($amount), $newtype, $sourcetype, 0, $iban ?? 0);
139 setEventMessages($langs->trans(
"RecordSaved"),
null,
'mesgs');
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);
251 dol_print_error($db,
$object->error);
253 } elseif ($action ==
'setdate_lim_reglement' && $usercancreate) {
257 setEventMessages($langs->trans(
"DatePaymentTermCantBeLowerThanObjectDate"),
null,
'warnings');
259 $result =
$object->update($user);
261 dol_print_error($db,
$object->error);
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' :
$object->picto));
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='.((int)
$object->thirdparty->id).
'">'.$langs->trans(
"OtherBills").
'</a>)</div>';
379 $morehtmlref .=
' <div class="inline-block valignmiddle">(<a class="valignmiddle" href="'.DOL_URL_ROOT.
'/compta/facture/list.php?socid='.((int)
$object->thirdparty->id).
'">'.$langs->trans(
"OtherBills").
'</a>)</div>';
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="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' => ((
int)
$object->id)],
true).
'">'.img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
391 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid, (
string)
$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>';
443 $object->getListIdAvoirFromInvoice();
445 if (!empty(
$object->creditnote_ids)) {
446 $invoicecredits = array();
447 foreach (
$object->creditnote_ids as $invoiceid) {
448 if ($type ==
'bank-transfer') {
451 $creditnote =
new Facture($db);
453 $creditnote->fetch($invoiceid);
454 $invoicecredits[] = $creditnote->getNomUrl(1);
456 print
' <span class="opacitymediumbycolor paddingleft">'.$langs->transnoentities(
"InvoiceHasAvoir");
457 print
' '. (count($invoicecredits) ?
' ' :
'') . implode(
',', $invoicecredits);
470 print
'<!-- Discounts -->'.
"\n";
471 print
'<tr><td>'.$langs->trans(
'DiscountStillRemaining').
'</td><td colspan="3">';
473 if ($type ==
'bank-transfer') {
476 $thirdparty =
$object->thirdparty;
479 $thirdparty =
$object->thirdparty;
482 $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?facid='.
$object->id);
483 $cannotApplyDiscount = 1;
484 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
489 if ($type ==
'bank-transfer') {
491 print
'<td>'.$form->editfieldkey(
"Label",
'label',
$object->label,
$object, 0).
'</td>';
492 print
'<td>'.$form->editfieldval(
"Label",
'label',
$object->label,
$object, 0).
'</td>';
498 print
'<table class="nobordernopadding centpercent"><tr><td>';
499 print $langs->trans(
'DateInvoice');
501 if (
$object->type != $object::TYPE_CREDIT_NOTE && $action !=
'editinvoicedate' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
502 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>';
504 print
'</tr></table>';
505 print
'</td><td colspan="3">';
507 if (
$object->type != $object::TYPE_CREDIT_NOTE) {
508 if ($action ==
'editinvoicedate') {
509 print $form->form_date($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->date,
'invoicedate', 0, 0, 1, $type);
521 print
'<table class="nobordernopadding centpercent"><tr><td>';
522 print $langs->trans(
'PaymentConditionsShort');
524 if (
$object->type != $object::TYPE_CREDIT_NOTE && $action !=
'editconditions' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
525 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>';
527 print
'</tr></table>';
528 print
'</td><td colspan="3">';
529 if (
$object->type != $object::TYPE_CREDIT_NOTE) {
530 if ($action ==
'editconditions') {
531 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->cond_reglement_id,
'cond_reglement_id', 0, $type);
533 $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->cond_reglement_id,
'none');
542 print
'<table class="nobordernopadding centpercent"><tr><td>';
543 print $langs->trans(
'DateMaxPayment');
545 if (
$object->type != $object::TYPE_CREDIT_NOTE && $action !=
'editpaymentterm' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
546 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>';
548 print
'</tr></table>';
549 print
'</td><td colspan="3">';
550 if (
$object->type != $object::TYPE_CREDIT_NOTE) {
551 $duedate =
$object->date_lim_reglement;
552 if ($type ==
'bank-transfer') {
553 $duedate =
$object->date_echeance;
556 if ($action ==
'editpaymentterm') {
557 print $form->form_date($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, $duedate,
'paymentterm', 0, 0, 1, $type);
561 print img_warning($langs->trans(
'Late'));
571 print
'<table class="nobordernopadding centpercent"><tr><td>';
572 print $langs->trans(
'PaymentMode');
574 if ($action !=
'editmode' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
575 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>';
577 print
'</tr></table>';
578 print
'</td><td colspan="3">';
579 $filtertype =
'CRDT';
580 if ($type ==
'bank-transfer') {
581 $filtertype =
'DBIT';
583 if ($action ==
'editmode') {
584 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'mode_reglement_id', $filtertype, 1, 0, $type);
586 $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->mode_reglement_id,
'none');
591 print
'<tr><td class="nowrap">';
592 print
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
593 print $langs->trans(
'BankAccount');
595 if (($action !=
'editbankaccount') && $user->hasRight(
'commande',
'creer') &&
$object->status == $object::STATUS_DRAFT) {
596 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>';
598 print
'</tr></table>';
599 print
'</td><td colspan="3">';
600 if ($action ==
'editbankaccount') {
601 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'fk_account', 1);
603 $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, (
string)
$object->fk_account,
'none');
610 print
'<div class="fichehalfright">';
611 print
'<!-- amounts -->'.
"\n";
612 print
'<div class="underbanner clearboth"></div>'.
"\n";
614 print
'<table class="border tableforfield centpercent">';
616 include DOL_DOCUMENT_ROOT.
'/core/tpl/object_currency_amount.tpl.php';
624 print
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') .
'</td>';
625 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_ht, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
628 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_ht, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
634 print
'<td>' . $langs->trans(
'AmountVAT') .
'</td>';
635 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_tva, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
638 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_tva, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
643 if ((
$mysoc->localtax1_assuj ==
"1" &&
$mysoc->useLocalTax(1)) ||
$object->total_localtax1 != 0) {
645 print
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1",
$mysoc->country_code) .
'</td>';
646 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_localtax1, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
650 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_localtax1, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
655 if ((
$mysoc->localtax2_assuj ==
"1" &&
$mysoc->useLocalTax(2)) ||
$object->total_localtax2 != 0) {
657 print
'<td>' . $langs->transcountry(
"AmountLT2",
$mysoc->country_code) .
'</td>';
658 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_localtax2, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
662 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_localtax2, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
668 if ($selleruserevenustamp) {
670 print
'<table class="nobordernopadding centpercent"><tr><td>';
671 print $langs->trans(
'RevenueStamp');
673 if ($action !=
'editrevenuestamp' &&
$object->status == $object::STATUS_DRAFT && $user->hasRight(
'facture',
'creer')) {
674 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>';
676 print
'</tr></table>';
677 print
'</td><td class="nowrap right">';
684 print
'<td>' . $langs->trans(
'AmountTTC') .
'</td>';
685 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->total_ttc, 0, $langs, 0, -1, -1,
$conf->currency) .
'</td>';
688 print
'<td class="nowrap amountcard right">' .
price($sign *
$object->multicurrency_total_ttc, 0, $langs, 0, -1, -1,
$object->multicurrency_code) .
'</td>';
693 $resteapayer =
price2num(
$object->total_ttc - $totalpaid - $totalcreditnotes - $totaldeposits,
'MT');
696 $parameters = array(
'remaintopay' => $resteapayer);
697 $reshook = $hookmanager->executeHooks(
'finalizeAmountOfInvoice', $parameters,
$object, $action);
699 print $hookmanager->resPrint;
700 if (!empty($remaintopay = $hookmanager->resArray[
'remaintopay'])) {
701 $resteapayer = $remaintopay;
706 print
'<tr><td>'.$langs->trans(
'RemainderToPay').
'</td><td class="nowrap right">'.
price($resteapayer, 1,
'', 1, - 1, - 1,
$conf->currency).
'</td>';
717 print
'<div class="clearboth"></div>';
730 $sql =
"SELECT SUM(pfd.amount) as amount";
731 $sql .=
" FROM ".MAIN_DB_PREFIX.
"prelevement_demande as pfd";
732 if ($type ==
'bank-transfer') {
733 $sql .=
" WHERE pfd.fk_facture_fourn = ".((int)
$object->id);
735 $sql .=
" WHERE pfd.fk_facture = ".((int)
$object->id);
737 $sql .=
" AND pfd.traite = 0";
739 $resql = $db->query($sql);
741 $obj = $db->fetch_object($resql);
743 $pending += (float) $obj->amount;
746 dol_print_error($db);
749 $sqlPending =
"SELECT SUM(pl.amount) as amount";
750 $sqlPending .=
" FROM ".$db->prefix().
"prelevement_lignes as pl";
751 $sqlPending .=
" INNER JOIN ".$db->prefix().
"prelevement as p ON p.fk_prelevement_lignes = pl.rowid";
752 if ($type ==
'bank-transfer') {
753 $sqlPending .=
" WHERE p.fk_facture_fourn = ".((int)
$object->id);
755 $sqlPending .=
" WHERE p.fk_facture = ".((int)
$object->id);
757 $sqlPending .=
" AND (pl.statut IS NULL OR pl.statut = 0)";
758 $resPending = $db->query($sqlPending);
760 if ($objPending = $db->fetch_object($resPending)) {
761 $pending += (float) $objPending->amount;
764 $db->free($resPending);
792 print
"\n".
'<div class="tabsAction">'.
"\n";
794 $buttonlabel = $langs->trans(
"MakeWithdrawRequest");
795 $user_perms = $user->hasRight(
'prelevement',
'bons',
'creer');
796 if ($type ==
'bank-transfer') {
797 $buttonlabel = $langs->trans(
"MakeBankTransferOrder");
798 $user_perms = $user->hasRight(
'paymentbybanktransfer',
'create');
802 $remaintopaylesspendingdebit = $resteapayer - $pending;
808 $canCreateRequest = (
$object->status > $object::STATUS_DRAFT &&
$object->paid == 0 && $remaintopaylesspendingdebit > 0);
811 $canCreateRequest = (
$object->status > $object::STATUS_DRAFT &&
$object->paid == 0 && $numopen == 0 && $resteapayer > 0);
813 if ($canCreateRequest) {
815 $title = $langs->trans(
"NewStandingOrder");
816 if ($type ==
'bank-transfer') {
817 $title = $langs->trans(
"NewPaymentByBankTransfer");
819 print
'<!-- form to select BAN -->';
820 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
821 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
822 print
'<input type="hidden" name="id" value="'.$object->id.
'" />';
823 print
'<input type="hidden" name="type" value="'.$type.
'" />';
824 print
'<input type="hidden" name="action" value="new" />';
825 print
'<div class="center formconsumeproduce">';
829 if (
$object->element ==
'invoice' &&
$object->fk_fac_rec_source) {
831 $facturerec->fetch(
$object->fk_fac_rec_source);
832 if ($facturerec->fk_societe_rib) {
834 $res = $companyBankAccount->fetch($facturerec->fk_societe_rib);
835 $selectedRib = $companyBankAccount->id;
838 $selectedRib = $form->selectRib($selectedRib,
'accountcustomerid',
'(fk_soc:=:'.
$object->socid.
")", $langs->trans(
"CustomerIBAN"),
'', 1,
'maxwidth500 maxwidth250onsmartphone');
839 $defaultRibId =
$object->thirdparty->getDefaultRib();
842 $res = $companyBankAccount->fetch($defaultRibId);
843 if ($res > 0 && !$companyBankAccount->verif()) {
844 print img_warning(
'Error on default bank number for IBAN : '.$langs->trans($companyBankAccount->error));
846 } elseif (($type !=
'bank-transfer' &&
$object->mode_reglement_code ==
'PRE') || ($type ==
'bank-transfer' &&
$object->mode_reglement_code ==
'VIR')) {
847 print img_warning($langs->trans(
"NoDefaultIBANFound"));
853 print
' ';
855 print
'<label for="withdraw_request_amount">';
856 if ($type ==
'bank-transfer') {
857 print $langs->trans(
'BankTransferAmount');
859 print $langs->trans(
"WithdrawRequestAmount");
862 print
'<input type="text" class="right width75" id="withdraw_request_amount" name="withdraw_request_amount" value="'.$remaintopaylesspendingdebit.
'">';
865 print
'<input type="submit" class="butAction small" value="'.$buttonlabel.
'" />';
873 $buttonlabel = $langs->trans(
"MakeWithdrawRequestStripe");
874 print
'<form method="POST" action="">';
875 print
'<input type="hidden" name="token" value="'.newToken().
'" />';
876 print
'<input type="hidden" name="id" value="'.$object->id.
'" />';
877 print
'<input type="hidden" name="type" value="'.$type.
'" />';
878 print
'<input type="hidden" name="action" value="new" />';
879 print
'<input type="hidden" name="paymenservice" value="stripesepa" />';
880 print
'<label for="withdraw_request_amount">'.$langs->trans(
'BankTransferAmount').
' </label>';
881 print
'<input type="text" id="withdraw_request_amount" name="withdraw_request_amount" value="'.$remaintopaylesspendingdebit.
'" size="9" />';
882 print
'<input type="submit" class="butAction small" value="'.$buttonlabel.
'" />';
886 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotEnoughPermissions")).
'">'.$buttonlabel.
'</a>';
890 if (
$object->status > $object::STATUS_DRAFT) {
894 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"AmountRequestedAlreadyReachesTotal")).
'">'.$buttonlabel.
'</a>';
898 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"RequestAlreadyDone")).
'">'.$buttonlabel.
'</a>';
900 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"AmountMustBePositive")).
'">'.$buttonlabel.
'</a>';
904 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"AlreadyPaid")).
'">'.$buttonlabel.
'</a>';
907 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"Draft")).
'">'.$buttonlabel.
'</a>';
913 if ($type ==
'bank-transfer') {
914 print
'<div class="opacitymedium justify">'.$langs->trans(
"DoCreditTransferBeforePayments");
916 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments2");
918 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments3");
919 print
'</div><br><br>';
921 print
'<div class="opacitymedium justify">'.$langs->trans(
"DoStandingOrdersBeforePayments");
923 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments2");
925 print
' '.$langs->trans(
"DoStandingOrdersBeforePayments3");
926 print
'</div><br><br>';
933 print
'<div class="div-table-responsive-no-min">';
934 print
'<table class="noborder centpercent">';
936 print
'<tr class="liste_titre">';
938 if (
$conf->main_checkbox_left_column) {
939 print
'<td> </td>';
941 print
'<td class="left">'.$langs->trans(
"ID").
'</td>';
942 print
'<td class="left">'.$langs->trans(
"DateRequest").
'</td>';
943 print
'<td>'.$langs->trans(
"User").
'</td>';
944 print
'<td class="center">'.$langs->trans(
"Amount").
'</td>';
945 print
'<td class="center">'.$langs->trans(
"IBAN").
'</td>';
946 print
'<td class="center">'.$langs->trans(
"DateProcess").
'</td>';
947 if ($type ==
'bank-transfer') {
948 print
'<td class="">'.$langs->trans(
"BankTransferReceipt").
'</td>';
950 print
'<td class="">'.$langs->trans(
"WithdrawalReceipt").
'</td>';
952 print
'<td> </td>';
954 if (!
$conf->main_checkbox_left_column) {
955 print
'<td> </td>';
959 $sql =
"SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande,";
960 $sql .=
" pfd.date_traite as date_traite, pfd.amount, pfd.fk_prelevement_bons,";
961 $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,";
962 $sql .=
" u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status,";
963 $sql .=
" sr.iban_prefix as iban, sr.bic as bic";
964 $sql .=
" FROM ".$db->prefix().
"prelevement_demande as pfd";
965 $sql .=
" LEFT JOIN ".$db->prefix().
"user as u on pfd.fk_user_demande = u.rowid";
966 $sql .=
" LEFT JOIN ".$db->prefix().
"prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons";
967 $sql .=
" LEFT JOIN ".$db->prefix().
"societe_rib as sr ON sr.rowid = pfd.fk_societe_rib";
968 if ($type ==
'bank-transfer') {
969 $sql .=
" WHERE fk_facture_fourn = ".((int)
$object->id);
971 $sql .=
" WHERE fk_facture = ".((int)
$object->id);
973 $sql .=
" AND pfd.traite = 0";
974 $sql .=
" AND pfd.type = 'ban'";
975 $sql .=
" ORDER BY pfd.date_demande DESC";
977 $resql = $db->query($sql);
983 $tmpuser =
new User($db);
985 $num = $db->num_rows($resql);
987 $obj = $db->fetch_object($resql);
989 $tmpuser->id = $obj->user_id;
990 $tmpuser->login = $obj->login;
991 $tmpuser->ref = $obj->login;
992 $tmpuser->email = $obj->email;
993 $tmpuser->lastname = $obj->lastname;
994 $tmpuser->firstname = $obj->firstname;
995 $tmpuser->status = $obj->user_status;
997 print
'<tr class="oddeven">';
1000 if (
$conf->main_checkbox_left_column) {
1001 print
'<td class="center">';
1002 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'&did='.$obj->rowid.
'&type='.urlencode($type).
'">';
1009 print
'<td class="nowraponall">'.$obj->rowid.
"</td>\n";
1012 print
'<td class="nowraponall">'.dol_print_date($db->jdate($obj->date_demande),
'dayhour').
"</td>\n";
1015 print
'<td class="tdoverflowmax125">';
1016 print $tmpuser->getNomUrl(-1,
'', 0, 0, 0, 0,
'login');
1020 print
'<td class="center"><span class="amount">'.price($obj->amount).
'</span></td>';
1023 print
'<td class="center"><span class="iban">';
1025 if ($obj->iban && $obj->bic) {
1029 print
'</span></td>';
1032 print
'<td class="center"><span class="opacitymedium">'.$langs->trans(
"OrderWaiting").
'</span></td>';
1035 print
'<td class="minwidth75">';
1036 if ($obj->fk_prelevement_bons > 0) {
1038 $withdrawreceipt->id = $obj->fk_prelevement_bons;
1039 $withdrawreceipt->ref = $obj->ref;
1040 $withdrawreceipt->date_trans = $db->jdate($obj->date_trans);
1041 $withdrawreceipt->date_credit = $db->jdate($obj->date_credit);
1042 $withdrawreceipt->date_creation = $db->jdate($obj->datec);
1043 $withdrawreceipt->statut = $obj->status;
1044 $withdrawreceipt->status = $obj->status;
1045 $withdrawreceipt->amount = $obj->pb_amount;
1048 print $withdrawreceipt->getNomUrl(1);
1051 if ($type !=
'bank-transfer') {
1053 $langs->load(
"stripe");
1054 if ($obj->fk_prelevement_bons > 0) {
1057 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>';
1061 $langs->load(
"stripe");
1062 if ($obj->fk_prelevement_bons > 0) {
1065 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(
"RequesCreditTransferWithStripe").
'</a>';
1071 print
'<td class="">';
1076 if (!
$conf->main_checkbox_left_column) {
1077 print
'<td class="center">';
1078 print
'<a href="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'&action=delete&token='.
newToken().
'&did='.$obj->rowid.
'&type='.urlencode($type).
'">';
1089 dol_print_error($db);
1095 $sql =
"SELECT pfd.rowid, pfd.traite, pfd.date_demande, pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount, pfd.fk_societe_rib, pfd.ext_payment_id, pfd.ext_payment_site,";
1096 $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,";
1097 $sql .=
" u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status, u.photo as user_photo,";
1098 $sql .=
" sr.iban_prefix as iban, sr.bic as bic";
1099 $sql .=
" FROM ".$db->prefix().
"prelevement_demande as pfd";
1100 $sql .=
" LEFT JOIN ".$db->prefix().
"user as u on pfd.fk_user_demande = u.rowid";
1101 $sql .=
" LEFT JOIN ".$db->prefix().
"prelevement_bons as pb ON pb.rowid = pfd.fk_prelevement_bons";
1102 $sql .=
" LEFT JOIN ".$db->prefix().
"societe_rib as sr ON sr.rowid = pfd.fk_societe_rib";
1103 if ($type ==
'bank-transfer') {
1104 $sql .=
" WHERE fk_facture_fourn = ".((int)
$object->id);
1106 $sql .=
" WHERE fk_facture = ".((int)
$object->id);
1108 $sql .=
" AND pfd.traite = 1";
1109 $sql .=
" AND pfd.type = 'ban'";
1111 $sql .=
" ORDER BY pfd.date_demande DESC";
1113 $resql = $db->query($sql);
1115 $num = $db->num_rows($resql);
1119 $tmpuser =
new User($db);
1122 $obj = $db->fetch_object($resql);
1124 $tmpuser->id = $obj->user_id;
1125 $tmpuser->login = $obj->login;
1126 $tmpuser->ref = $obj->login;
1127 $tmpuser->email = $obj->email;
1128 $tmpuser->lastname = $obj->lastname;
1129 $tmpuser->firstname = $obj->firstname;
1130 $tmpuser->status = $obj->user_status;
1131 $tmpuser->photo = $obj->user_photo;
1133 print
'<tr class="oddeven">';
1136 if (
$conf->main_checkbox_left_column) {
1137 print
'<td> </td>';
1141 print
'<td class="nowraponall">'.$obj->rowid.
"</td>\n";
1144 print
'<td class="nowraponall">'.dol_print_date($db->jdate($obj->date_demande),
'day',
'tzuserrel').
"</td>\n";
1147 print
'<td class="tdoverflowmax125">';
1148 print $tmpuser->getNomUrl(-1,
'', 0, 0, 0, 0,
'login');
1152 print
'<td class="center"><span class="amount">'.price($obj->amount).
'</span></td>';
1155 print
'<td class="center"><span class="iban">';
1157 if ($obj->iban && $obj->bic) {
1161 print
'</span></td>';
1164 print
'<td class="center nowraponall">'.dol_print_date($db->jdate($obj->date_traite),
'dayhour',
'tzuserrel').
"</td>\n";
1167 print
'<td class="minwidth75">';
1168 if ($obj->fk_prelevement_bons > 0) {
1170 $withdrawreceipt->id = $obj->fk_prelevement_bons;
1171 $withdrawreceipt->ref = $obj->ref;
1172 $withdrawreceipt->date_trans = $db->jdate($obj->date_trans);
1173 $withdrawreceipt->date_credit = $db->jdate($obj->date_credit);
1174 $withdrawreceipt->date_creation = $db->jdate($obj->datec);
1175 $withdrawreceipt->statut = $obj->status;
1176 $withdrawreceipt->status = $obj->status;
1177 $withdrawreceipt->fk_bank_account = $obj->fk_bank_account;
1178 $withdrawreceipt->amount = $obj->pb_amount;
1181 print $withdrawreceipt->getNomUrl(1);
1183 print $withdrawreceipt->getLibStatut(2);
1186 $fk_bank_account = $withdrawreceipt->fk_bank_account;
1187 if (empty($fk_bank_account)) {
1190 if ($fk_bank_account > 0) {
1191 $bankaccount =
new Account($db);
1192 $result = $bankaccount->fetch($fk_bank_account);
1195 print $bankaccount->getNomUrl(1);
1198 if (!empty($obj->ext_payment_id) || !empty($obj->ext_payment_site)) {
1199 print
' - <span class="small opacitymedium">';
1200 print $obj->ext_payment_id.
'/'.$obj->ext_payment_site;
1207 print
'<td> </td>';
1210 if (!
$conf->main_checkbox_left_column) {
1211 print
'<td> </td>';
1218 if (!$numopen && !$numclosed) {
1219 print
'<tr class="oddeven"><td colspan="9"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';
1224 dol_print_error($db);
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $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_now($mode='gmt')
Return date for now.
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...
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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.
getDolOptimizeSmallScreen()
Return if render must be optimized for small screen.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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, $nodefault=0)
Return value of a param into GET or POST supervariable.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false, $decorate=0)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
facture_prepare_head($object)
Initialize the array of tabs for customer invoice.
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $nodie=0, $mode='')
Check permissions of a user to show a page and an object.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.
dolDecrypt($chain, $key='', $patterntotest='')
Decode a string with a symmetric encryption.