* Copyright (C) 2004-2015 Laurent Destailleur * Copyright (C) 2005-2013 Regis Houssin * Copyright (C) 2015 Jean-François Ferry * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/compta/bank/releve.php * \ingroup banque * \brief Page to show a bank receipt report */ require('../../main.inc.php'); require_once DOL_DOCUMENT_ROOT.'/core/lib/bank.lib.php'; require_once DOL_DOCUMENT_ROOT.'/societe/class/societe.class.php'; require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/sociales/class/chargesociales.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/paiement/class/paiement.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/tva/class/tva.class.php'; require_once DOL_DOCUMENT_ROOT.'/fourn/class/paiementfourn.class.php'; require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php'; $langs->load("banks"); $langs->load("categories"); $langs->load("companies"); $langs->load("bills"); $action=GETPOST('action', 'alpha'); $id=GETPOST('account'); $ref=GETPOST('ref'); $dvid=GETPOST('dvid'); $num=GETPOST('num'); // Security check $fieldid = (! empty($ref)?$ref:$id); $fieldname = isset($ref)?'ref':'rowid'; if ($user->societe_id) $socid=$user->societe_id; $result=restrictedArea($user,'banque',$fieldid,'bank_account','','',$fieldname); if ($user->rights->banque->consolidate && $action == 'dvnext' && ! empty($dvid)) { $al = new AccountLine($db); $al->datev_next($dvid); } if ($user->rights->banque->consolidate && $action == 'dvprev' && ! empty($dvid)) { $al = new AccountLine($db); $al->datev_previous($dvid); } $sortfield = GETPOST('sortfield', 'alpha'); $sortorder = GETPOST('sortorder', 'alpha'); $page = GETPOST('page', 'int'); if ($page == -1) { $page = 0; } if (! $sortorder) $sortorder="ASC"; if (! $sortfield) $sortfield="s.nom"; $offset = $conf->liste_limit * $page; $pageprev = $page - 1; $pagenext = $page + 1; /* * View */ llxHeader(); $form = new Form($db); $societestatic=new Societe($db); $chargestatic=new ChargeSociales($db); $memberstatic=new Adherent($db); $paymentstatic=new Paiement($db); $paymentsupplierstatic=new PaiementFourn($db); $paymentvatstatic=new TVA($db); $bankstatic=new Account($db); $banklinestatic=new AccountLine($db); // Load account $object = new Account($db); if ($id > 0 || ! empty($ref)) { $object->fetch($id, $ref); } if (empty($num)) { /* * Vue liste tous releves confondus */ $sql = "SELECT DISTINCT(b.num_releve) as numr"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql.= " WHERE b.fk_account = ".$object->id; $sql.= " ORDER BY numr DESC"; $sql.= $db->plimit($conf->liste_limit+1,$offset); $result = $db->query($sql); if ($result) { $var=True; $numrows = $db->num_rows($result); $i = 0; // Onglets $head=bank_prepare_head($object); dol_fiche_head($head,'statement',$langs->trans("FinancialAccount"),0,'account'); print ''; $linkback = ''.$langs->trans("BackToList").''; // Ref print ''; print ''; // Label print ''; print ''; print '
'.$langs->trans("Ref").''; print $form->showrefnav($object, 'ref', $linkback, 1, 'ref'); print '
'.$langs->trans("Label").''.$object->label.'
'; dol_fiche_end(); print '
'; if ($object->type != 2 && $object->rappro) { // If not cash account and can be reconciliate if ($user->rights->banque->consolidate) { print ''.$langs->trans("Conciliate").''; } else { print ''.$langs->trans("Conciliate").''; } } print '
'; print_barre_liste('', $page, $_SERVER["PHP_SELF"], "&account=".$object->id, $sortfield, $sortorder,'',$numrows); print ''; print ''; print ''; print ''; print ''; print ''; $balancestart=array(); $content=array(); while ($i < min($numrows,$conf->liste_limit)) { $objp = $db->fetch_object($result); $var=!$var; if (! isset($objp->numr)) { // } else { print ''; // Calculate start amount $sql = "SELECT sum(b.amount) as amount"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql.= " WHERE b.num_releve < '".$db->escape($objp->numr)."'"; $sql.= " AND b.fk_account = ".$object->id; $resql=$db->query($sql); if ($resql) { $obj=$db->fetch_object($resql); $balancestart[$objp->numr] = $obj->amount; $db->free($resql); } print ''; // Calculate end amount $sql = "SELECT sum(b.amount) as amount"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql.= " WHERE b.num_releve = '".$db->escape($objp->numr)."'"; $sql.= " AND b.fk_account = ".$object->id; $resql=$db->query($sql); if ($resql) { $obj=$db->fetch_object($resql); $content[$objp->numr] = $obj->amount; $db->free($resql); } print ''; print ''."\n"; } $i++; } print "
'.$langs->trans("AccountStatement").''.$langs->trans("InitialBankBalance").''.$langs->trans("EndBankBalance").'
'.$objp->numr.''.price($balancestart[$objp->numr],'',$langs,1,-1,-1,$conf->currency).''.price(($balancestart[$objp->numr]+$content[$objp->numr]),'',$langs,1,-1,-1,$conf->currency).'
\n"; print "\n\n"; } else { dol_print_error($db); } } else { /** * Affiche liste ecritures d'un releve */ $ve=$_GET["ve"]; // Define number of receipt to show (current, previous or next one ?) $found=false; if ($_GET["rel"] == 'prev') { // Recherche valeur pour num = numero releve precedent $sql = "SELECT DISTINCT(b.num_releve) as num"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql.= " WHERE b.num_releve < '".$db->escape($num)."'"; $sql.= " AND b.fk_account = ".$object->id; $sql.= " ORDER BY b.num_releve DESC"; dol_syslog("htdocs/compta/bank/releve.php", LOG_DEBUG); $resql = $db->query($sql); if ($resql) { $numrows = $db->num_rows($resql); if ($numrows > 0) { $obj = $db->fetch_object($resql); $num = $obj->num; $found=true; } } } elseif ($_GET["rel"] == 'next') { // Recherche valeur pour num = numero releve precedent $sql = "SELECT DISTINCT(b.num_releve) as num"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql.= " WHERE b.num_releve > '".$db->escape($num)."'"; $sql.= " AND b.fk_account = ".$object->id; $sql.= " ORDER BY b.num_releve ASC"; dol_syslog("htdocs/compta/bank/releve.php", LOG_DEBUG); $resql = $db->query($sql); if ($resql) { $numrows = $db->num_rows($resql); if ($numrows > 0) { $obj = $db->fetch_object($resql); $num = $obj->num; $found=true; } } } else { // On veut le releve num $found=true; } $mesprevnext ="id\">".img_previous()."  "; $mesprevnext.= $langs->trans("AccountStatement")." $num"; $mesprevnext.="   id\">".img_next().""; print_fiche_titre($langs->trans("AccountStatement").' '.$num.', '.$langs->trans("BankAccount").' : '.$object->getNomUrl(0),$mesprevnext, 'title_bank.png'); print '
'; print "
"; print ''; print ""; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; // Calcul du solde de depart du releve $sql = "SELECT sum(b.amount) as amount"; $sql.= " FROM ".MAIN_DB_PREFIX."bank as b"; $sql.= " WHERE b.num_releve < '".$db->escape($num)."'"; $sql.= " AND b.fk_account = ".$object->id; $resql=$db->query($sql); if ($resql) { $obj=$db->fetch_object($resql); $total = $obj->amount; $db->free($resql); } // Recherche les ecritures pour le releve $sql = "SELECT b.rowid, b.dateo as do, b.datev as dv,"; $sql.= " b.amount, b.label, b.rappro, b.num_releve, b.num_chq, b.fk_type,"; $sql.= " b.fk_bordereau,"; $sql.= " ba.rowid as bankid, ba.ref as bankref, ba.label as banklabel"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_account as ba"; $sql.= ", ".MAIN_DB_PREFIX."bank as b"; $sql.= " WHERE b.num_releve='".$db->escape($num)."'"; if (!isset($num)) $sql.= " OR b.num_releve is null"; $sql.= " AND b.fk_account = ".$object->id; $sql.= " AND b.fk_account = ba.rowid"; $sql.= $db->order("b.datev, b.datec", "ASC"); // We add date of creation to have correct order when everything is done the same day $result = $db->query($sql); if ($result) { $var=True; $numrows = $db->num_rows($result); $i = 0; // Ligne Solde debut releve print ""; print "\n"; while ($i < $numrows) { $objp = $db->fetch_object($result); $total = $total + $objp->amount; $var=!$var; print ""; // Date operation print ''; // Date de valeur print '\n"; // Type and num if ($objp->fk_type == 'SOLD') { $type_label=' '; } else { $type_label=($langs->trans("PaymentTypeShort".$objp->fk_type)!="PaymentTypeShort".$objp->fk_type)?$langs->trans("PaymentTypeShort".$objp->fk_type):$objp->fk_type; } print ''; // Description print '"; if ($objp->amount < 0) { $totald = $totald + abs($objp->amount); print '\n"; } else { $totalc = $totalc + abs($objp->amount); print '\n"; } print '\n"; if ($user->rights->banque->modifier || $user->rights->banque->consolidate) { print ""; } else { print ""; } print ""; $i++; } $db->free($result); } // Line Total print "\n".'"; // Line Balance print "\n\n"; print "
'.$langs->trans("DateOperationShort").''.$langs->trans("DateValueShort").''.$langs->trans("Type").''.$langs->trans("Description").''.$langs->trans("Debit").''.$langs->trans("Credit").''.$langs->trans("Balance").' 
id."\"> ".$langs->trans("InitialBankBalance")." :".price($total)." 
'.dol_print_date($db->jdate($objp->do),"day").''; print ''; print img_previous().' '; print dol_print_date($db->jdate($objp->dv),"day") .' '; print ''; print img_next().''; print "'.$type_label.' '.($objp->num_chq?$objp->num_chq:'').($objp->fk_bordereau>0?' ('.$objp->fk_bordereau.')':'').''; $reg=array(); preg_match('/\((.+)\)/i',$objp->label,$reg); // Si texte entoure de parenthese on tente recherche de traduction if ($reg[1] && $langs->trans($reg[1])!=$reg[1]) print $langs->trans($reg[1]); else print $objp->label; print ''; /* * Ajout les liens (societe, company...) */ $newline=1; $links = $object->get_url($objp->rowid); foreach($links as $key=>$val) { if (! $newline) print ' - '; else print '
'; if ($links[$key]['type']=='payment') { $paymentstatic->id=$links[$key]['url_id']; $paymentstatic->ref=$langs->trans("Payment"); print ' '.$paymentstatic->getNomUrl(1); $newline=0; } elseif ($links[$key]['type']=='payment_supplier') { $paymentsupplierstatic->id=$links[$key]['url_id']; $paymentsupplierstatic->ref=$langs->trans("Payment"); print ' '.$paymentsupplierstatic->getNomUrl(1); $newline=0; } elseif ($links[$key]['type']=='payment_sc') { print ''; print ' '.img_object($langs->trans('ShowPayment'),'payment').' '; print $langs->trans("SocialContributionPayment"); print ''; $newline=0; } elseif ($links[$key]['type']=='payment_vat') { $paymentvatstatic->id=$links[$key]['url_id']; $paymentvatstatic->ref=$langs->trans("Payment"); print ' '.$paymentvatstatic->getNomUrl(1); } elseif ($links[$key]['type']=='banktransfert') { // Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail. if ($objp->amount > 0) { $banklinestatic->fetch($links[$key]['url_id']); $bankstatic->id=$banklinestatic->fk_account; $bankstatic->label=$banklinestatic->bank_account_label; print ' ('.$langs->trans("from").' '; print $bankstatic->getNomUrl(1,'transactions'); print ' '.$langs->trans("toward").' '; $bankstatic->id=$objp->bankid; $bankstatic->label=$objp->bankref; print $bankstatic->getNomUrl(1,''); print ')'; } else { $bankstatic->id=$objp->bankid; $bankstatic->label=$objp->bankref; print ' ('.$langs->trans("from").' '; print $bankstatic->getNomUrl(1,''); print ' '.$langs->trans("toward").' '; $banklinestatic->fetch($links[$key]['url_id']); $bankstatic->id=$banklinestatic->fk_account; $bankstatic->label=$banklinestatic->bank_account_label; print $bankstatic->getNomUrl(1,'transactions'); print ')'; } } elseif ($links[$key]['type']=='company') { $societestatic->id = $links[$key]['url_id']; $societestatic->name = $links[$key]['label']; print $societestatic->getNomUrl(1, 'company', 24); $newline=0; } elseif ($links[$key]['type']=='member') { print ''; print img_object($langs->trans('ShowMember'),'user').' '; print $links[$key]['label']; print ''; $newline=0; } elseif ($links[$key]['type']=='sc') { print ''; print img_object($langs->trans('ShowBill'),'bill').' '; print $langs->trans("SocialContribution"); print ''; $newline=0; } else { print ''; print $links[$key]['label']; print ''; $newline=0; } } // Categories if ($ve) { $sql = "SELECT label"; $sql.= " FROM ".MAIN_DB_PREFIX."bank_categ as ct"; $sql.= ", ".MAIN_DB_PREFIX."bank_class as cl"; $sql.= " WHERE ct.rowid = cl.fk_categ"; $sql.= " AND ct.entity = ".$conf->entity; $sql.= " AND cl.lineid = ".$objp->rowid; $resc = $db->query($sql); if ($resc) { $numc = $db->num_rows($resc); $ii = 0; if ($numc && ! $newline) print '
'; while ($ii < $numc) { $objc = $db->fetch_object($resc); print "
$objc->label"; $ii++; } } else { dol_print_error($db); } } print "
'.price($objp->amount * -1)."  '.price($objp->amount)."'.price($total)."rowid&account=".$object->id."\">"; print img_edit(); print " 
'.$langs->trans("Total")." :".price($totald)."".price($totalc)."  
 ".$langs->trans("EndBankBalance")." :".price($total)." 
\n"; } llxFooter(); $db->close();