* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. */ /** * \file bankimport/pdfstatements.php * \ingroup bankimport * \brief Page to upload and manage PDF bank statements */ // Load Dolibarr environment $res = 0; if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"]."/main.inc.php"; } $tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; $tmp2 = realpath(__FILE__); $i = strlen($tmp) - 1; $j = strlen($tmp2) - 1; while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { $i--; $j--; } if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1))."/main.inc.php")) { $res = @include substr($tmp, 0, ($i + 1))."/main.inc.php"; } if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php")) { $res = @include dirname(substr($tmp, 0, ($i + 1)))."/main.inc.php"; } if (!$res && file_exists("../main.inc.php")) { $res = @include "../main.inc.php"; } if (!$res && file_exists("../../main.inc.php")) { $res = @include "../../main.inc.php"; } if (!$res) { die("Include of main fails"); } require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/html.formother.class.php'; dol_include_once('/bankimport/class/bankstatement.class.php'); dol_include_once('/bankimport/lib/bankimport.lib.php'); /** * @var Conf $conf * @var DoliDB $db * @var Translate $langs * @var User $user */ $langs->loadLangs(array("bankimport@bankimport", "banks", "other")); $action = GETPOST('action', 'aZ09'); $confirm = GETPOST('confirm', 'alpha'); $year = GETPOSTINT('year') ?: (int) date('Y'); // Security check if (empty($user->rights->bankimport->statement->read)) { accessforbidden(); } /* * Actions */ $statement = new BankImportStatement($db); // Upload PDF if ($action == 'upload' && !empty($_FILES['pdffile']['name'])) { $error = 0; // Validate required fields $statementNumber = GETPOST('statement_number', 'alpha'); $statementYear = GETPOSTINT('statement_year'); $statementDate = dol_mktime(0, 0, 0, GETPOSTINT('statement_datemonth'), GETPOSTINT('statement_dateday'), GETPOSTINT('statement_dateyear')); $dateFrom = dol_mktime(0, 0, 0, GETPOSTINT('date_frommonth'), GETPOSTINT('date_fromday'), GETPOSTINT('date_fromyear')); $dateTo = dol_mktime(0, 0, 0, GETPOSTINT('date_tomonth'), GETPOSTINT('date_today'), GETPOSTINT('date_toyear')); if (empty($statementNumber)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesaliases("StatementNumber")), null, 'errors'); $error++; } if (empty($statementYear)) { setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesaliases("Year")), null, 'errors'); $error++; } if (!$error) { $statement->iban = GETPOST('iban', 'alpha'); $statement->statement_number = $statementNumber; $statement->statement_year = $statementYear; $statement->statement_date = $statementDate ?: null; $statement->date_from = $dateFrom ?: null; $statement->date_to = $dateTo ?: null; $statement->opening_balance = GETPOST('opening_balance', 'alpha') !== '' ? (float) price2num(GETPOST('opening_balance', 'alpha')) : null; $statement->closing_balance = GETPOST('closing_balance', 'alpha') !== '' ? (float) price2num(GETPOST('closing_balance', 'alpha')) : null; $statement->import_key = date('YmdHis').'_'.$user->id; // Check duplicate if ($statement->exists()) { setEventMessages($langs->trans("StatementAlreadyExists"), null, 'errors'); $error++; } } if (!$error) { // Save uploaded file $uploadResult = $statement->saveUploadedPDF($_FILES['pdffile']); if ($uploadResult < 0) { setEventMessages($statement->error, null, 'errors'); $error++; } } if (!$error) { // Save to database $result = $statement->create($user); if ($result > 0) { setEventMessages($langs->trans("StatementUploaded"), null, 'mesgs'); header("Location: ".$_SERVER['PHP_SELF']."?year=".$statementYear); exit; } else { setEventMessages($statement->error, null, 'errors'); } } } // Download PDF if ($action == 'download') { $id = GETPOSTINT('id'); if ($statement->fetch($id) > 0) { $filepath = $statement->getFilePath(); if ($filepath && file_exists($filepath)) { header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="'.basename($statement->filename).'"'); header('Content-Length: '.filesize($filepath)); header('Cache-Control: private'); readfile($filepath); exit; } else { setEventMessages($langs->trans("FileNotFound"), null, 'errors'); } } else { setEventMessages($langs->trans("RecordNotFound"), null, 'errors'); } } // View PDF (inline) if ($action == 'view') { $id = GETPOSTINT('id'); if ($statement->fetch($id) > 0) { $filepath = $statement->getFilePath(); if ($filepath && file_exists($filepath)) { header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="'.basename($statement->filename).'"'); header('Content-Length: '.filesize($filepath)); header('Cache-Control: private'); readfile($filepath); exit; } else { setEventMessages($langs->trans("FileNotFound"), null, 'errors'); } } else { setEventMessages($langs->trans("RecordNotFound"), null, 'errors'); } } // Delete confirmation if ($action == 'delete' && $confirm == 'yes') { $id = GETPOSTINT('id'); if ($statement->fetch($id) > 0) { $result = $statement->delete($user); if ($result > 0) { setEventMessages($langs->trans("RecordDeleted"), null, 'mesgs'); } else { setEventMessages($statement->error, null, 'errors'); } } $action = ''; } /* * View */ $form = new Form($db); $title = $langs->trans("PDFStatements"); llxHeader('', $title, '', '', 0, 0, '', '', '', 'mod-bankimport page-pdfstatements'); print load_fiche_titre($title, '', 'bank'); // Info box print '
| '.$langs->trans("StatementNumber").' | '; print ''.$langs->trans("IBAN").' | '; print ''.$langs->trans("StatementDate").' | '; print ''.$langs->trans("Period").' | '; print ''.$langs->trans("OpeningBalance").' | '; print ''.$langs->trans("ClosingBalance").' | '; print ''.$langs->trans("Size").' | '; print ''.$langs->trans("DateCreation").' | '; print ''.$langs->trans("Actions").' | '; print '
|---|---|---|---|---|---|---|---|---|
| '; print ''.dol_escape_htmltag($obj->statement_number).'/'.$obj->statement_year; print ' | '; // IBAN print ''; if ($obj->iban) { print dol_escape_htmltag($obj->iban); } else { print '-'; } print ' | '; // Statement date print ''; if ($obj->statement_date) { print dol_print_date($obj->statement_date, 'day'); } else { print '-'; } print ' | '; // Period print ''; if ($obj->date_from && $obj->date_to) { print dol_print_date($obj->date_from, 'day').' - '.dol_print_date($obj->date_to, 'day'); } elseif ($obj->date_from) { print $langs->trans("From").' '.dol_print_date($obj->date_from, 'day'); } elseif ($obj->date_to) { print $langs->trans("To").' '.dol_print_date($obj->date_to, 'day'); } else { print '-'; } print ' | '; // Opening balance print ''; if ($obj->opening_balance !== null) { $color = $obj->opening_balance >= 0 ? '' : 'color: red;'; print ''.price($obj->opening_balance, 0, $langs, 1, -1, 2, 'EUR').''; } else { print '-'; } print ' | '; // Closing balance print ''; if ($obj->closing_balance !== null) { $color = $obj->closing_balance >= 0 ? '' : 'color: red;'; print ''.price($obj->closing_balance, 0, $langs, 1, -1, 2, 'EUR').''; } else { print '-'; } print ' | '; // Size print ''; if ($obj->filesize) { print dol_print_size($obj->filesize, 1); } else { print '-'; } print ' | '; // Creation date print ''; print dol_print_date($obj->datec, 'day'); print ' | '; // Actions print ''; if ($obj->filepath && file_exists($obj->filepath)) { // View (inline) print 'id.'&token='.newToken().'" target="_blank" title="'.$langs->trans("View").'">'; print img_picto($langs->trans("View"), 'eye'); print ''; // Download print 'id.'&token='.newToken().'" title="'.$langs->trans("Download").'">'; print img_picto($langs->trans("Download"), 'download'); print ''; } // Delete print 'id.'&year='.$year.'&token='.newToken().'" title="'.$langs->trans("Delete").'">'; print img_picto($langs->trans("Delete"), 'delete'); print ''; print ' | '; print '
| '; print $langs->trans("NoPDFStatementsFound"); print ' | ||||||||