28if (!defined(
'NOSESSION')) {
29 define(
'NOSESSION',
'1');
32$sapi_type = php_sapi_name();
33$script_file = basename(__FILE__);
37if (substr($sapi_type, 0, 3) ==
'cgi') {
38 echo
"Error: You are using PHP for CGI. To execute ".$script_file.
" from command line, you must use PHP for CLI mode.\n";
42require_once $path.
"../../htdocs/master.inc.php";
49require_once DOL_DOCUMENT_ROOT.
'/core/lib/functionscli.lib.php';
50require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
51require_once DOL_DOCUMENT_ROOT.
'/core/lib/bank.lib.php';
52require_once DOL_DOCUMENT_ROOT.
'/societe/class/societe.class.php';
53require_once DOL_DOCUMENT_ROOT.
'/adherents/class/adherent.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/chargesociales.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/compta/paiement/class/paiement.class.php';
56require_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/fourn/class/paiementfourn.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
60require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.facture.class.php';
61require_once DOL_DOCUMENT_ROOT.
'/compta/tva/class/tva.class.php';
62require_once DOL_DOCUMENT_ROOT.
'/compta/sociales/class/paymentsocialcontribution.class.php';
64$version = DOL_VERSION;
67$hookmanager->initHooks(array(
'cli'));
75print
"***** ".$script_file.
" (".$version.
") pid=".dol_getmypid().
" *****\n";
76dol_syslog($script_file.
" launched with arg ".implode(
',', $argv));
78if (!isset($argv[3]) || !$argv[3]) {
79 print
"Usage: ".$script_file.
" bank_ref [bank_receipt_number|all|empty] (csv|tsv|excel|excel2007) [lang=xx_XX]\n";
83$bankreceiptnum = $argv[2] ?:
'all';
95$paymentvatstatic =
new Tva(
$db);
100foreach ($argv as $key => $value) {
104 if (preg_match(
'/^lang=/i', $value)) {
106 $valarray = explode(
'=', $value);
107 $newlangid = $valarray[1];
108 print
'Use language '.$newlangid.
".\n";
111$outputlangs = $langs;
112if (!empty($newlangid)) {
113 if ($outputlangs->defaultlang != $newlangid) {
115 $outputlangs->setDefaultLang($newlangid);
120$outputlangs->loadLangs(array(
"main",
"companies",
"bills",
"banks",
"members",
"compta"));
123$result = $acct->fetch(0, $bankref);
125 print
"Failed to find bank account with ref ".$bankref.
".\n";
128 print
"Export for bank account ".$acct->ref.
" (".$acct->label.
").\n";
132$dir = DOL_DOCUMENT_ROOT.
"/core/modules/export/";
133$file =
"export_".$model.
".modules.php";
134$classname =
"Export".$model;
136 print
"No driver to export with format ".$model.
"\n";
139require_once $dir.$file;
140$objmodel =
new $classname(
$db);
141'@phan-var-force ModeleExports|ExportCsv $objmodel';
144$dirname =
$conf->bank->dir_temp;
145$filename =
'export-bank-receipts-'.$bankref.
'-'.$bankreceiptnum.
'.'.$objmodel->extension;
147$array_fields = array(
148 'bankreceipt' => $outputlangs->transnoentitiesnoconv(
"AccountStatementShort"),
149 'bankaccount' => $outputlangs->transnoentitiesnoconv(
"BankAccount"),
150 'dateop' => $outputlangs->transnoentitiesnoconv(
"DateOperationShort"),
151 'dateval' => $outputlangs->transnoentitiesnoconv(
"DateValueShort"),
152 'type' => $outputlangs->transnoentitiesnoconv(
"Type"),
153 'description' => $outputlangs->transnoentitiesnoconv(
"Description"),
154 'thirdparty' => $outputlangs->transnoentitiesnoconv(
"ThirdParty"),
155 'accountelem' => $outputlangs->transnoentitiesnoconv(
"Piece"),
156 'debit' => $outputlangs->transnoentitiesnoconv(
"Debit"),
157 'credit' => $outputlangs->transnoentitiesnoconv(
"Credit"),
158 'soldbefore' => $outputlangs->transnoentitiesnoconv(
"BankBalanceBefore"),
159 'soldafter' => $outputlangs->transnoentitiesnoconv(
"BankBalanceAfter"),
160 'comment' => $outputlangs->transnoentitiesnoconv(
"Comment")
162$array_selected = array(
163 'bankreceipt' =>
'bankreceipt',
164 'bankaccount' =>
'bankaccount',
165 'dateop' =>
'dateop',
166 'dateval' =>
'dateval',
168 'description' =>
'description',
169 'thirdparty' =>
'thirdparty',
170 'accountelem' =>
'accountelem',
172 'credit' =>
'credit',
173 'soldbefore' =>
'soldbefore',
174 'soldafter' =>
'soldafter',
175 'comment' =>
'comment'
177$array_export_TypeFields = array(
178 'bankreceipt' =>
'Text',
179 'bankaccount' =>
'Text',
183 'description' =>
'Text',
184 'thirdparty' =>
'Text',
185 'accountelem' =>
'Text',
187 'credit' =>
'Number',
188 'soldbefore' =>
'Number',
189 'soldafter' =>
'Number',
195if (!empty($bankreceiptnum) && $bankreceiptnum !=
"all") {
197 $arraynum = explode(
',', $bankreceiptnum);
198 foreach ($arraynum as $val) {
199 if ($listofnum !=
"'") {
206$sql =
"SELECT b.rowid, b.dateo as do, b.datev as dv,";
207$sql .=
" b.amount, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type,";
208$sql .=
" ba.rowid as bankid, ba.ref as bankref, ba.label as banklabel";
209$sql .=
" FROM ".MAIN_DB_PREFIX.
"bank_account as ba";
210$sql .=
", ".MAIN_DB_PREFIX.
"bank as b";
211$sql .=
" WHERE b.fk_account = ".((int) $acct->id);
213 $sql .=
" AND b.num_releve IN (".$db->sanitize($listofnum, 1).
")";
215if ($bankreceiptnum ==
'empty') {
216 $sql .=
" OR b.num_releve is null";
218$sql .=
" AND b.fk_account = ba.rowid";
219$sql .=
$db->order(
"b.num_releve, b.datev, b.datec",
"ASC");
222$resql =
$db->query($sql);
224 $balancebefore = array();
226 $numrows =
$db->num_rows($resql);
230 print
'Open file '.$filename.
' into directory '.$dirname.
"\n";
232 $result = $objmodel->open_file($dirname.
"/".$filename, $outputlangs);
235 print
'Failed to create file '.$filename.
' into dir '.$dirname.
'.'.
"\n";
240 $objmodel->write_header($outputlangs);
243 $objmodel->write_title($array_fields, $array_selected, $outputlangs, $array_export_TypeFields);
250 while ($i < $numrows) {
255 $objp =
$db->fetch_object($resql);
258 if (!isset($balancebefore[$objp->num_releve])) {
259 print
'Calculate start balance for receipt '.$objp->num_releve.
"\n";
261 $sql2 =
"SELECT sum(b.amount) as amount";
262 $sql2 .=
" FROM ".MAIN_DB_PREFIX.
"bank as b";
263 $sql2 .=
" WHERE b.num_releve < '".$db->escape($objp->num_releve).
"'";
264 $sql2 .=
" AND b.fk_account = ".$objp->bankid;
265 $resql2 =
$db->query($sql2);
267 $obj2 =
$db->fetch_object($resql2);
268 $balancebefore[$objp->num_releve] = ($obj2->amount ? $obj2->amount : 0);
275 $total = $balancebefore[$objp->num_releve];
278 $totalbefore = $total;
279 $total += $objp->amount;
282 $dateop =
$db->jdate($objp->do);
285 $datevalue =
$db->jdate($objp->dv);
288 $numchq = ($objp->num_chq ? $objp->num_chq :
'');
292 preg_match(
'/\((.+)\)/i', $objp->label, $reg);
293 if ($reg[1] && $langs->transnoentitiesnoconv($reg[1]) != $reg[1]) {
294 $description = $langs->transnoentitiesnoconv($reg[1]);
296 $description = $objp->label;
302 $links = $acct->get_url($objp->rowid);
303 foreach ($links as $key => $val) {
304 if ($links[$key][
'type'] ==
'payment') {
305 $paymentstatic->fetch($links[$key][
'url_id']);
306 $tmparray = $paymentstatic->getBillsArray(
'');
307 if (is_array($tmparray)) {
308 foreach ($tmparray as $tmpkey => $tmpval) {
309 $invoicestatic->fetch($tmpval);
311 $accountelem .=
', ';
313 $accountelem .= $invoicestatic->ref;
316 } elseif ($links[$key][
'type'] ==
'payment_supplier') {
317 $paymentsupplierstatic->fetch($links[$key][
'url_id']);
318 $tmparray = $paymentsupplierstatic->getBillsArray(
'');
319 if (is_array($tmparray)) {
320 foreach ($tmparray as $tmpkey => $tmpval) {
321 $invoicesupplierstatic->fetch($tmpval);
323 $accountelem .=
', ';
325 $accountelem .= $invoicesupplierstatic->ref;
328 } elseif ($links[$key][
'type'] ==
'payment_sc') {
329 $paymentsocialcontributionstatic->fetch($links[$key][
'url_id']);
331 $accountelem .=
', ';
333 $accountelem .= $langs->transnoentitiesnoconv(
"SocialContribution").
' '.$paymentsocialcontributionstatic->ref;
334 } elseif ($links[$key][
'type'] ==
'payment_vat') {
335 $paymentvatstatic->fetch($links[$key][
'url_id']);
337 $accountelem .=
', ';
339 $accountelem .= $langs->transnoentitiesnoconv(
"VATPayments").
' '.$paymentvatstatic->ref;
340 } elseif ($links[$key][
'type'] ==
'banktransfert') {
341 $comment = $outputlangs->transnoentitiesnoconv(
"Transfer");
342 if ($objp->amount > 0) {
346 $banklinestatic->fetch($links[$key][
'url_id']);
347 $bankstatic->id = $banklinestatic->fk_account;
348 $bankstatic->label = $banklinestatic->bank_account_label;
349 $comment .=
' ('.$langs->transnoentitiesnoconv(
"from").
' ';
350 $comment .= $bankstatic->getNomUrl(1,
'transactions');
351 $comment .=
' '.$langs->transnoentitiesnoconv(
"toward").
' ';
352 $bankstatic->id = $objp->bankid;
353 $bankstatic->label = $objp->bankref;
354 $comment .= $bankstatic->getNomUrl(1,
'');
360 $bankstatic->id = $objp->bankid;
361 $bankstatic->label = $objp->bankref;
362 $comment .=
' ('.$langs->transnoentitiesnoconv(
"from").
' ';
363 $comment .= $bankstatic->getNomUrl(1,
'');
364 $comment .=
' '.$langs->transnoentitiesnoconv(
"toward").
' ';
365 $banklinestatic->fetch($links[$key][
'url_id']);
366 $bankstatic->id = $banklinestatic->fk_account;
367 $bankstatic->label = $banklinestatic->bank_account_label;
368 $comment .= $bankstatic->getNomUrl(1,
'transactions');
371 } elseif ($links[$key][
'type'] ==
'company') {
375 $thirdparty .=
dol_trunc($links[$key][
'label'], 24);
377 } elseif ($links[$key][
'type'] ==
'member') {
379 $accountelem .=
', ';
381 $thirdparty .= $links[$key][
'label'];
405 $debit = $credit =
'';
406 if ($objp->amount < 0) {
407 $totald += abs($objp->amount);
410 $totalc += abs($objp->amount);
417 $rec->bankreceipt = $objp->num_releve;
418 $rec->bankaccount = $objp->banklabel;
421 $rec->type = $objp->fk_type.
' '.($objp->num_chq ? $objp->num_chq :
'');
422 $rec->description = $description;
423 $rec->thirdparty = $thirdparty;
424 $rec->accountelem = $accountelem;
425 $rec->debit = $debit;
426 $rec->credit = $credit;
427 $rec->comment = $comment;
428 $rec->soldbefore =
price2num($totalbefore);
432 $objmodel->write_record($array_selected, $rec, $outputlangs, $array_export_TypeFields);
436 print
"Found ".$numrows.
" records for receipt ".$bankreceiptnum.
"\n";
439 $objmodel->write_footer($outputlangs);
442 $objmodel->close_file();
444 print
'File '.$filename.
' was generated into dir '.$dirname.
'.'.
"\n";
448 print
"No records found for receipt ".$bankreceiptnum.
"\n";
Class to manage bank accounts.
Class to manage bank transaction lines.
Class to manage members of a foundation.
Class for managing the social charges.
Class to manage suppliers invoices.
Class to manage invoices.
Class to manage payments for supplier invoices.
Class to manage payments of customer invoices.
Class to manage payments of social contributions.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
Class to manage VAT - Value-added tax (also known in French as TVA)
dol_is_file($pathoffile)
Return if path is a file.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)