30 require
'../../main.inc.php';
31 require_once DOL_DOCUMENT_ROOT.
'/compta/prelevement/class/bonprelevement.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/core/lib/bank.lib.php';
35 require_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
36 require_once DOL_DOCUMENT_ROOT.
'/core/lib/prelevement.lib.php';
37 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
40 $langs->loadLangs(array(
'banks',
'categories',
'withdrawals',
'companies',
'bills'));
42 $type =
GETPOST(
'type',
'aZ09');
45 $action =
GETPOST(
'action',
'aZ09');
46 $massaction =
GETPOST(
'massaction',
'alpha');
47 $toselect =
GETPOST(
'toselect',
'array');
49 $mode =
GETPOST(
'mode',
'alpha') ?
GETPOST(
'mode',
'alpha') :
'real';
50 $format =
GETPOST(
'format',
'aZ09');
51 $id_bankaccount =
GETPOST(
'id_bankaccount',
'int');
54 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
56 if (empty($page) || $page == -1) {
59 $offset = $limit * $page;
61 $hookmanager->initHooks(array(
'directdebitcreatecard',
'globalcard'));
65 $socid = $user->socid;
67 if ($type ==
'bank-transfer') {
68 $result =
restrictedArea($user,
'paymentbybanktransfer',
'',
'',
'');
80 if (
GETPOST(
'cancel',
'alpha')) {
84 $parameters = array(
'mode' => $mode,
'format' => $format,
'limit' => $limit,
'page' => $page,
'offset' => $offset);
85 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
90 if (empty($reshook)) {
92 if ($action ==
'modify') {
93 for ($i = 1; $i < 9; $i++) {
97 if ($action ==
'create') {
98 $default_account = ($type ==
'bank-transfer' ?
'PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT' :
'PRELEVEMENT_ID_BANKACCOUNT');
102 if ($id_bankaccount != $conf->global->$default_account) {
103 $res =
dolibarr_set_const($db, $default_account, $id_bankaccount,
'chaine', 0,
'', $conf->entity);
106 require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
108 $bank->fetch($conf->global->{$default_account});
113 if (empty($bank->ics) && $type !==
'bank-transfer') {
114 $errormessage = str_replace(
'{url}', $bank->getNomUrl(1,
'',
'', -1, 1), $langs->trans(
"ErrorICSmissing",
'{url}'));
125 $result = $bprev->create($conf->global->PRELEVEMENT_CODE_BANQUE, $conf->global->PRELEVEMENT_CODE_GUICHET, $mode, $format, $executiondate, 0, $type);
128 } elseif ($result == 0) {
129 $mesg = $langs->trans(
"NoInvoiceCouldBeWithdrawed", $format);
131 $mesg .=
'<br>'.
"\n";
132 foreach ($bprev->invoice_in_error as $key => $val) {
133 $mesg .=
'<span class="warning">'.$val.
"</span><br>\n";
136 if ($type !=
'bank-transfer') {
137 $texttoshow = $langs->trans(
"DirectDebitOrderCreated",
'{s}');
138 $texttoshow = str_replace(
'{s}', $bprev->getNomUrl(1), $texttoshow);
141 $texttoshow = $langs->trans(
"CreditTransferOrderCreated",
'{s}');
142 $texttoshow = str_replace(
'{s}', $bprev->getNomUrl(1), $texttoshow);
146 header(
"Location: ".DOL_URL_ROOT.
'/compta/prelevement/card.php?id='.urlencode($bprev->id).
'&type='.urlencode($type));
151 $objectclass =
"BonPrelevement";
152 if ($type ==
'bank-transfer') {
153 $uploaddir = $conf->paymentbybanktransfer->dir_output;
155 $uploaddir = $conf->prelevement->dir_output;
157 include DOL_DOCUMENT_ROOT.
'/core/actions_massactions.inc.php';
167 $thirdpartystatic =
new Societe($db);
168 if ($type !=
'bank-transfer') {
169 $invoicestatic =
new Facture($db);
174 $arrayofselected = is_array($toselect) ? $toselect : array();
176 $arrayofmassactions = array(
178 if (
GETPOST(
'nomassaction',
'int') || in_array($massaction, array(
'presend',
'predelete'))) {
179 $arrayofmassactions = array();
181 $massactionbutton =
$form->selectMassAction(
'', $arrayofmassactions);
183 llxHeader(
'', $langs->trans(
"NewStandingOrder"));
186 $langs->load(
"errors");
187 $modulenametoshow =
"Withdraw";
188 if ($type ==
'bank-transfer') {
189 $modulenametoshow =
"PaymentByBankTransfer";
191 setEventMessages($langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv($modulenametoshow)),
null,
'errors');
205 $title = $langs->trans(
"NewStandingOrder");
206 if ($type ==
'bank-transfer') {
207 $title = $langs->trans(
"NewPaymentByBankTransfer");
214 $nb = $bprev->nbOfInvoiceToPay($type);
215 $pricetowithdraw = $bprev->SommeAPrelever($type);
219 print
'<table class="border centpercent tableforfield">';
221 $title = $langs->trans(
"NbOfInvoiceToWithdraw");
222 if ($type ==
'bank-transfer') {
223 $title = $langs->trans(
"NbOfInvoiceToPayByBankTransfer");
226 print
'<tr><td class="titlefieldcreate">'.$title.
'</td>';
231 print
'<tr><td>'.$langs->trans(
"AmountTotal").
'</td>';
232 print
'<td class="amount">';
233 print
price($pricetowithdraw);
244 print
'<div class="tabsAction">'.
"\n";
246 print
'<form action="'.$_SERVER[
'PHP_SELF'].
'?action=create" method="POST">';
247 print
'<input type="hidden" name="token" value="'.newToken().
'">';
248 print
'<input type="hidden" name="type" value="'.$type.
'">';
250 if ($pricetowithdraw) {
251 $title = $langs->trans(
'BankToReceiveWithdraw').
': ';
252 if ($type ==
'bank-transfer') {
253 $title = $langs->trans(
'BankToPayCreditTransfer').
': ';
258 $default_account = ($type ==
'bank-transfer' ?
'PAYMENTBYBANKTRANSFER_ID_BANKACCOUNT' :
'PRELEVEMENT_ID_BANKACCOUNT');
260 print
$form->select_comptes($conf->global->$default_account,
'id_bankaccount', 0,
"courant=1", 0,
'', 0,
'', 1);
263 if (empty($executiondate)) {
265 if ($type !=
'bank-transfer') {
266 $delayindays = $conf->global->PRELEVEMENT_ADDDAYS;
268 $delayindays = $conf->global->PAYMENTBYBANKTRANSFER_ADDDAYS;
274 print $langs->trans(
'ExecutionDate').
' ';
275 $datere = $executiondate;
276 print
$form->selectDate($datere,
're');
279 if ($mysoc->isInEEC()) {
280 $title = $langs->trans(
"CreateForSepa");
281 if ($type ==
'bank-transfer') {
282 $title = $langs->trans(
"CreateSepaFileForPaymentByBankTransfer");
285 if ($type !=
'bank-transfer') {
286 print
'<select name="format">';
287 print
'<option value="FRST"'.(GETPOST(
'format',
'aZ09') ==
'FRST' ?
' selected="selected"' :
'').
'>'.$langs->trans(
'SEPAFRST').
'</option>';
288 print
'<option value="RCUR"'.(GETPOST(
'format',
'aZ09') ==
'RCUR' ?
' selected="selected"' :
'').
'>'.$langs->trans(
'SEPARCUR').
'</option>';
291 print
'<input type="submit" class="butAction" value="'.$title.
'"/>';
293 $title = $langs->trans(
"CreateAll");
294 if ($type ==
'bank-transfer') {
295 $title = $langs->trans(
"CreateFileForPaymentByBankTransfer");
297 print
'<input type="hidden" name="format" value="ALL">'.
"\n";
298 print
'<input type="submit" class="butAction" value="'.$title.
'">'.
"\n";
301 if ($mysoc->isInEEC()) {
302 $title = $langs->trans(
"CreateForSepaFRST");
303 if ($type ==
'bank-transfer') {
304 $title = $langs->trans(
"CreateSepaFileForPaymentByBankTransfer");
306 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"AmountMustBePositive").
'">'.$title.
"</a>\n";
308 if ($type !=
'bank-transfer') {
309 $title = $langs->trans(
"CreateForSepaRCUR");
310 print
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"AmountMustBePositive").
'">'.$title.
"</a>\n";
313 $title = $langs->trans(
"CreateAll");
314 if ($type ==
'bank-transfer') {
315 $title = $langs->trans(
"CreateFileForPaymentByBankTransfer");
317 print
'<a class="butActionRefused classfortooltip" href="#">'.$title.
"</a>\n";
321 $titlefortab = $langs->transnoentitiesnoconv(
"StandingOrders");
322 $title = $langs->trans(
"CreateAll");
323 if ($type ==
'bank-transfer') {
324 $titlefortab = $langs->transnoentitiesnoconv(
"PaymentByBankTransfers");
325 $title = $langs->trans(
"CreateFileForPaymentByBankTransfer");
327 print
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->transnoentitiesnoconv(
"NoInvoiceToWithdraw", $titlefortab, $titlefortab)).
'">'.$title.
"</a>\n";
341 $sql =
"SELECT f.ref, f.rowid, f.total_ttc, s.nom as name, s.rowid as socid,";
342 $sql .=
" pfd.rowid as request_row_id, pfd.date_demande, pfd.amount";
343 if ($type ==
'bank-transfer') {
344 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facture_fourn as f,";
346 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facture as f,";
348 $sql .=
" ".MAIN_DB_PREFIX.
"societe as s,";
349 $sql .=
" ".MAIN_DB_PREFIX.
"prelevement_facture_demande as pfd";
350 $sql .=
" WHERE s.rowid = f.fk_soc";
351 $sql .=
" AND f.entity IN (".getEntity(
'invoice').
")";
352 if (empty($conf->global->WITHDRAWAL_ALLOW_ANY_INVOICE_STATUS)) {
353 $sql .=
" AND f.fk_statut = ".Facture::STATUS_VALIDATED;
356 $sql .=
" AND f.total_ttc > 0";
357 $sql .=
" AND pfd.traite = 0";
358 $sql .=
" AND pfd.ext_payment_id IS NULL";
359 if ($type ==
'bank-transfer') {
360 $sql .=
" AND pfd.fk_facture_fourn = f.rowid";
362 $sql .=
" AND pfd.fk_facture = f.rowid";
365 $sql .=
" AND f.fk_soc = ".((int) $socid);
368 $nbtotalofrecords =
'';
369 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
370 $result = $db->query($sql);
371 $nbtotalofrecords = $db->num_rows($result);
372 if (($page * $limit) > $nbtotalofrecords) {
379 $sql .= $db->plimit($limit + 1, $offset);
381 $resql = $db->query($sql);
383 $num = $db->num_rows(
$resql);
387 if ($limit > 0 && $limit != $conf->liste_limit) {
388 $param .=
'&limit='.urlencode($limit);
391 $param .=
'&socid='.urlencode($socid);
394 $param .=
"&option=".urlencode($option);
397 print
'<form method="POST" id="searchFormList" action="'.$_SERVER[
"PHP_SELF"].
'">';
398 print
'<input type="hidden" name="token" value="'.newToken().
'">';
399 print
'<input type="hidden" name="page" value="'.$page.
'">';
400 if (!empty($limit)) {
401 print
'<input type="hidden" name="limit" value="'.$limit.
'"/>';
404 print
'<input type="hidden" name="type" value="'.$type.
'">';
407 $title = $langs->trans(
"InvoiceWaitingWithdraw");
408 if ($type ==
'bank-transfer') {
409 $title = $langs->trans(
"InvoiceWaitingPaymentByBankTransfer");
411 print_barre_liste($title, $page, $_SERVER[
'PHP_SELF'], $param,
'',
'', $massactionbutton, $num, $nbtotalofrecords,
'bill', 0,
'',
'', $limit);
413 $tradinvoice =
"Invoice";
414 if ($type ==
'bank-transfer') {
415 $tradinvoice =
"SupplierInvoice";
418 print
'<table class="noborder centpercent">';
419 print
'<tr class="liste_titre">';
420 print
'<td>'.$langs->trans($tradinvoice).
'</td>';
421 print
'<td>'.$langs->trans(
"ThirdParty").
'</td>';
422 print
'<td>'.$langs->trans(
"RIB").
'</td>';
423 print
'<td>'.$langs->trans(
"RUM").
'</td>';
424 print
'<td class="right">'.$langs->trans(
"AmountTTC").
'</td>';
425 print
'<td class="right">'.$langs->trans(
"DateRequest").
'</td>';
426 if ($massactionbutton || $massaction) {
427 print
'<td align="center">'.$form->showCheckAddButtons(
'checkforselect', 1).
'</td>';
432 require_once DOL_DOCUMENT_ROOT.
'/societe/class/companybankaccount.class.php';
435 while ($i < $num && $i < $limit) {
436 $obj = $db->fetch_object(
$resql);
438 $bac->fetch(0, $obj->socid);
440 print
'<tr class="oddeven">';
444 $invoicestatic->id = $obj->rowid;
445 $invoicestatic->ref = $obj->ref;
446 print $invoicestatic->getNomUrl(1,
'withdraw');
451 $thirdpartystatic->fetch($obj->socid);
452 print $thirdpartystatic->getNomUrl(1,
'ban');
458 if (!empty($bac->iban) || !empty($bac->bic)) {
459 print $bac->iban.(($bac->iban && $bac->bic) ?
' / ' :
'').$bac->bic;
460 if ($bac->verif() <= 0) {
461 print
img_warning(
'Error on default bank number for IBAN : '.$langs->trans($bac->error_message));
464 print
img_warning($langs->trans(
"IBANNotDefined"));
467 print
img_warning($langs->trans(
"NoBankAccountDefined"));
473 $rumtoshow = $thirdpartystatic->display_rib(
'rum');
476 $format = $thirdpartystatic->display_rib(
'format');
477 if ($type !=
'bank-transfer') {
479 print
' ('.$format.
')';
483 print
img_warning($langs->trans(
"NoBankAccountDefined"));
487 print
'<td class="right amount">';
488 print
price($obj->amount, 0, $langs, 0, 0, -1, $conf->currency);
491 print
'<td class="right">';
495 if ($massactionbutton || $massaction) {
496 print
'<td class="nowrap center">';
498 if (in_array($obj->request_row_id, $arrayofselected)) {
501 print
'<input id="cb'.$obj->request_row_id.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->request_row_id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
508 print
'<tr class="oddeven"><td colspan="6"><span class="opacitymedium">'.$langs->trans(
"None").
'</span></td></tr>';