* * 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 '
'; print ''.$langs->trans("PDFStatementsInfo").'
'; print $langs->trans("PDFStatementsInfoDesc"); print '
'; // Delete confirmation dialog if ($action == 'delete') { $id = GETPOSTINT('id'); $stmt = new BankImportStatement($db); $stmt->fetch($id); $formconfirm = $form->formconfirm( $_SERVER["PHP_SELF"].'?id='.$id.'&year='.$year, $langs->trans('DeleteStatement'), $langs->trans('ConfirmDeleteStatement', $stmt->statement_number.'/'.$stmt->statement_year), 'delete', '', 0, 1 ); print $formconfirm; } // Upload form print '
'; print '
'; print '
'; print ''; print ''; print ''; print ''; print ''; print ''; // PDF file print ''; print ''; print ''; print ''; // IBAN (optional) print ''; print ''; print ''; print ''; // Year print ''; print ''; print ''; print ''; // Statement number print ''; print ''; print ''; print ''; // Statement date print ''; print ''; print ''; print ''; // Period from print ''; print ''; print ''; print ''; // Period to print ''; print ''; print ''; print ''; // Opening balance print ''; print ''; print ''; print ''; // Closing balance print ''; print ''; print ''; print ''; print '
'.$langs->trans("UploadPDFStatement").'
'.$langs->trans("File").''; print ''; print '
'.$langs->trans("IBAN").''; print ''; print '
'.$langs->trans("Year").''; $years = array(); for ($y = (int) date('Y'); $y >= ((int) date('Y') - 10); $y--) { $years[$y] = $y; } print $form->selectarray('statement_year', $years, GETPOSTISSET('statement_year') ? GETPOSTINT('statement_year') : $year, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100'); print '
'.$langs->trans("StatementNumber").''; $nextNum = $statement->getNextStatementNumber($year); print ''; print '
'.$langs->trans("StatementDate").''; print $form->selectDate(GETPOSTISSET('statement_dateday') ? dol_mktime(0, 0, 0, GETPOSTINT('statement_datemonth'), GETPOSTINT('statement_dateday'), GETPOSTINT('statement_dateyear')) : -1, 'statement_date', 0, 0, 1, '', 1, 0); print '
'.$langs->trans("DateFrom").''; print $form->selectDate(GETPOSTISSET('date_fromday') ? dol_mktime(0, 0, 0, GETPOSTINT('date_frommonth'), GETPOSTINT('date_fromday'), GETPOSTINT('date_fromyear')) : -1, 'date_from', 0, 0, 1, '', 1, 0); print '
'.$langs->trans("DateTo").''; print $form->selectDate(GETPOSTISSET('date_today') ? dol_mktime(0, 0, 0, GETPOSTINT('date_tomonth'), GETPOSTINT('date_today'), GETPOSTINT('date_toyear')) : -1, 'date_to', 0, 0, 1, '', 1, 0); print '
'.$langs->trans("OpeningBalance").''; print ''; print ' EUR'; print '
'.$langs->trans("ClosingBalance").''; print ''; print ' EUR'; print '
'; print '
'; print ''; print '
'; print '
'; print '
'; // fichehalfleft print '
'; // fichecenter print '

'; // Year filter for list print '
'; print '
'; print ''.$langs->trans("Year").': '; print $form->selectarray('year', $years, $year, 0, 0, 0, '', 0, 0, 0, '', 'minwidth100'); print ' '; print '
'; print '
'; // List of existing PDF statements print '
'; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; $filter = array('year' => $year); $records = $statement->fetchAll('statement_number', 'ASC', 100, 0, $filter); if (is_array($records) && count($records) > 0) { foreach ($records as $obj) { print ''; // Statement number print ''; // IBAN print ''; // Statement date print ''; // Period print ''; // Opening balance print ''; // Closing balance print ''; // Size print ''; // Creation date print ''; // Actions print ''; print ''; } } else { print ''; } print '
'.$langs->trans("StatementNumber").''.$langs->trans("IBAN").''.$langs->trans("StatementDate").''.$langs->trans("Period").''.$langs->trans("OpeningBalance").''.$langs->trans("ClosingBalance").''.$langs->trans("Size").''.$langs->trans("DateCreation").''.$langs->trans("Actions").'
'; print ''.dol_escape_htmltag($obj->statement_number).'/'.$obj->statement_year; print ''; if ($obj->iban) { print dol_escape_htmltag($obj->iban); } else { print '-'; } print ''; if ($obj->statement_date) { print dol_print_date($obj->statement_date, 'day'); } else { print '-'; } 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 ''; 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 ''; 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 ''; if ($obj->filesize) { print dol_print_size($obj->filesize, 1); } else { print '-'; } print ''; print dol_print_date($obj->datec, 'day'); 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 $langs->trans("NoPDFStatementsFound"); print '
'; print '
'; // Statistics $totalCount = $statement->fetchAll('', '', 0, 0, array(), 'count'); $yearCount = is_array($records) ? count($records) : 0; print '
'; print $langs->trans("Total").': '.$yearCount.' '.$langs->trans("StatementsInYear", $year); print ' | '.$langs->trans("AllStatements").': '.$totalCount.''; print '
'; llxFooter(); $db->close();