dolibarr 18.0.6
payments.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3 * Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
4 * Copyright (C) 2005-2010 Regis Houssin <regis.houssin@inodbox.com>
5 * Copyright (C) 2011-2016 Alexandre Spangaro <aspangaro@open-dsi.fr>
6 * Copyright (C) 2011-2014 Juanjo Menent <jmenent@2byte.es>
7 * Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
8 * Copyright (C) 2021 Gauthier VERDOL <gauthier.verdol@atm-consulting.fr>
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22 */
23
30// Load Dolibarr environment
31require '../../main.inc.php';
32require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php';
33require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/tva.class.php';
34require_once DOL_DOCUMENT_ROOT . '/compta/tva/class/paymentvat.class.php';
35require_once DOL_DOCUMENT_ROOT . '/compta/bank/class/account.class.php';
36require_once DOL_DOCUMENT_ROOT . '/salaries/class/paymentsalary.class.php';
37require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php';
38
39// Load translation files required by the page
40$langs->loadLangs(array('compta', 'bills'));
41
42$mode = GETPOST("mode", 'alpha');
43$year = GETPOST("year", 'int');
44$filtre = GETPOST("filtre", 'alpha');
45$optioncss = GETPOST('optioncss', 'alpha');
46if (!$year && $mode != 'tvaonly') {
47 $year = date("Y", time());
48}
49
50$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
51$sortfield = GETPOST('sortfield', 'aZ09comma');
52$sortorder = GETPOST('sortorder', 'aZ09comma');
53$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
54if (empty($page) || $page == -1) {
55 $page = 0;
56} // If $page is not defined, or '' or -1
57$offset = $limit * $page;
58$pageprev = $page - 1;
59$pagenext = $page + 1;
60if (!$sortfield) {
61 $sortfield = "ptva.datep";
62}
63if (!$sortorder) {
64 $sortorder = "DESC";
65}
66
67$object = new Tva($db);
68
69// Security check
70if ($user->socid) {
71 $socid = $user->socid;
72}
73//$result = restrictedArea($user, 'tax|salaries', '', '', 'charges|');
74$result = restrictedArea($user, 'tax', '', 'tva', 'charges');
75
76
77/*
78 * View
79 */
80
81$tva_static = new Tva($db);
82$tva = new Tva($db);
83$accountlinestatic = new AccountLine($db);
84$payment_vat_static = new PaymentVAT($db);
85$sal_static = new PaymentSalary($db);
86
87llxHeader('', $langs->trans("VATExpensesArea"));
88
89$title = $langs->trans("VATPayments");
90
91$param = '';
92if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
93 $param .= '&contextpage=' . $contextpage;
94}
95if ($limit > 0 && $limit != $conf->liste_limit) {
96 $param .= '&limit=' . $limit;
97}
98if ($sortfield) {
99 $param .= '&sortfield=' . $sortfield;
100}
101if ($sortorder) {
102 $param .= '&sortorder=' . $sortorder;
103}
104
105$center = '';
106
107if ($year) {
108 $param .= '&year=' . $year;
109}
110
111$sql = "SELECT tva.rowid, tva.label as label, b.fk_account, ptva.fk_bank";
112$sql .= ", tva.datev";
113$sql .= ", tva.amount as total,";
114$sql .= " ptva.rowid as pid, ptva.datep, ptva.amount as totalpaid, ptva.num_paiement as num_payment,";
115$sql .= " pct.code as payment_code";
116$sql .= " FROM " . MAIN_DB_PREFIX . "tva as tva,";
117$sql .= " " . MAIN_DB_PREFIX . "payment_vat as ptva";
118$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "bank as b ON (b.rowid = ptva.fk_bank)";
119$sql .= " INNER JOIN " . MAIN_DB_PREFIX . "bank_account as bank ON (bank.rowid = b.fk_account)";
120$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_paiement as pct ON ptva.fk_typepaiement = pct.id";
121$sql .= " WHERE ptva.fk_tva = tva.rowid";
122$sql .= " AND tva.entity = " . $conf->entity;
123if ($year > 0) {
124 $sql .= " AND (";
125 // Si period renseignee on l'utilise comme critere de date, sinon on prend date echeance,
126 // ceci afin d'etre compatible avec les cas ou la periode n'etait pas obligatoire
127 $sql .= " (tva.datev IS NOT NULL AND tva.datev between '" . $db->idate(dol_get_first_day($year)) . "' AND '" . $db->idate(dol_get_last_day($year)) . "')";
128 $sql .= " OR (tva.datev IS NULL AND tva.datev between '" . $db->idate(dol_get_first_day($year)) . "' AND '" . $db->idate(dol_get_last_day($year)) . "')";
129 $sql .= ")";
130}
131if (preg_match('/^cs\./', $sortfield)
132 || preg_match('/^tva\./', $sortfield)
133 || preg_match('/^ptva\./', $sortfield)
134 || preg_match('/^pct\./', $sortfield)
135 || preg_match('/^bank\./', $sortfield)) {
136 $sql .= $db->order($sortfield, $sortorder);
137}
138//$sql.= $db->plimit($limit+1,$offset);
139//print $sql;
140
141dol_syslog("compta/tva/payments.php: select payment", LOG_DEBUG);
142$resql = $db->query($sql);
143if ($resql) {
144 $num = $db->num_rows($resql);
145} else {
146 setEventMessages($db->lasterror, null, 'errors');
147}
148
149print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $center, $num, $num, 'title_accountancy', 0, '', '', $limit);
150
151if (isModEnabled('tax') && $user->hasRight('tax', 'charges', 'lire')) {
152 print '<form method="POST" action="' . $_SERVER["PHP_SELF"] . '">';
153 if ($optioncss != '') {
154 print '<input type="hidden" name="optioncss" value="' . $optioncss . '">';
155 }
156 print '<input type="hidden" name="token" value="' . newToken() . '">';
157 print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
158 print '<input type="hidden" name="sortfield" value="' . $sortfield . '">';
159 print '<input type="hidden" name="sortorder" value="' . $sortorder . '">';
160 print '<input type="hidden" name="page" value="' . $page . '">';
161 print '<input type="hidden" name="mode" value="' . $mode . '">';
162
163 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
164 print '<table class="noborder centpercent">';
165 print '<tr class="liste_titre">';
166 print_liste_field_titre("RefPayment", $_SERVER["PHP_SELF"], "ptva.rowid", "", $param, '', $sortfield, $sortorder);
167 print_liste_field_titre("VATDeclaration", $_SERVER["PHP_SELF"], "tva.rowid", "", $param, '', $sortfield, $sortorder);
168 print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "tva.label", "", $param, '', $sortfield, $sortorder);
169 print_liste_field_titre("PeriodEndDate", $_SERVER["PHP_SELF"], "tva.datev", "", $param, '', $sortfield, $sortorder, 'nowraponall');
170 print_liste_field_titre("DatePayment", $_SERVER["PHP_SELF"], "ptva.datep", "", $param, 'align="center"', $sortfield, $sortorder);
171 print_liste_field_titre("PaymentMode", $_SERVER["PHP_SELF"], "pct.code", "", $param, '', $sortfield, $sortorder);
172 print_liste_field_titre("Numero", $_SERVER["PHP_SELF"], "ptva.num_paiement", "", $param, '', $sortfield, $sortorder, '', 'ChequeOrTransferNumber');
173 if (isModEnabled("banque")) {
174 print_liste_field_titre("BankTransactionLine", $_SERVER["PHP_SELF"], "ptva.fk_bank", "", $param, '', $sortfield, $sortorder);
175 print_liste_field_titre("BankAccount", $_SERVER["PHP_SELF"], "bank.ref", "", $param, '', $sortfield, $sortorder);
176 }
177 //print_liste_field_titre("TypeContrib", $_SERVER["PHP_SELF"], "tva.fk_type", "", $param, '', $sortfield, $sortorder);
178 print_liste_field_titre("ExpectedToPay", $_SERVER["PHP_SELF"], "tva.amount", "", $param, 'class="right"', $sortfield, $sortorder);
179 print_liste_field_titre("PayedByThisPayment", $_SERVER["PHP_SELF"], "ptva.amount", "", $param, 'class="right"', $sortfield, $sortorder);
180 print "</tr>\n";
181
182 $sql = "SELECT tva.rowid, tva.label as label, b.fk_account, ptva.fk_bank";
183 $sql .= ", tva.datev";
184 $sql .= ", tva.amount as total,";
185 $sql .= " ptva.rowid as pid, ptva.datep, ptva.amount as totalpaid, ptva.num_paiement as num_payment,";
186 $sql .= " pct.code as payment_code";
187 $sql .= " FROM " . MAIN_DB_PREFIX . "tva as tva,";
188 $sql .= " " . MAIN_DB_PREFIX . "payment_vat as ptva";
189 $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "bank as b ON (b.rowid = ptva.fk_bank)";
190 $sql .= " INNER JOIN " . MAIN_DB_PREFIX . "bank_account as bank ON (bank.rowid = b.fk_account)";
191 $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . "c_paiement as pct ON ptva.fk_typepaiement = pct.id";
192 $sql .= " WHERE ptva.fk_tva = tva.rowid";
193 $sql .= " AND tva.entity = " . $conf->entity;
194 if ($year > 0) {
195 $sql .= " AND (";
196 // Si period renseignee on l'utilise comme critere de date, sinon on prend date echeance,
197 // ceci afin d'etre compatible avec les cas ou la periode n'etait pas obligatoire
198 $sql .= " (tva.datev IS NOT NULL AND tva.datev between '" . $db->idate(dol_get_first_day($year)) . "' AND '" . $db->idate(dol_get_last_day($year)) . "')";
199 $sql .= " OR (tva.datev IS NULL AND tva.datev between '" . $db->idate(dol_get_first_day($year)) . "' AND '" . $db->idate(dol_get_last_day($year)) . "')";
200 $sql .= ")";
201 }
202 if (preg_match('/^cs\./', $sortfield)
203 || preg_match('/^tva\./', $sortfield)
204 || preg_match('/^ptva\./', $sortfield)
205 || preg_match('/^pct\./', $sortfield)
206 || preg_match('/^bank\./', $sortfield)) {
207 $sql .= $db->order($sortfield, $sortorder);
208 }
209
210 if ($num) {
211 $num = $db->num_rows($resql);
212 $i = 0;
213 $total = 0;
214 $totalnb = 0;
215 $totalpaid = 0;
216
217 while ($i < min($num, $limit)) {
218 $obj = $db->fetch_object($resql);
219
220 $tva->id = $obj->rowid;
221 $tva->ref = $obj->rowid;
222 $tva->label = $obj->label;
223
224 $payment_vat_static->id = $obj->pid;
225 $payment_vat_static->ref = $obj->pid;
226
227 print '<tr class="oddeven">';
228
229 // Ref payment
230 print '<td>' . $payment_vat_static->getNomUrl(1) . "</td>\n";
231
232 // VAT
233 print '<td>';
234 print $tva->getNomUrl(1, '20');
235 print '</td>';
236
237 // Label
238 print '<td class="tdoverflowmax150" title="' . dol_escape_htmltag($obj->label) . '">' . dol_escape_htmltag($obj->label) . '</td>';
239
240 // Date
241 $date = $db->jdate($obj->datev);
242 print '<td class="center nowraponall">' . dol_print_date($date, 'day') . '</td>';
243
244 // Date payment
245 $datep = $db->jdate($obj->datep);
246 print '<td class="center nowraponalls">' . dol_print_date($datep, 'day') . '</td>';
247
248 // Type payment
249 $labelpaymenttype = '';
250 if ($obj->payment_code) {
251 $labelpaymenttype = $langs->trans("PaymentTypeShort" . $obj->payment_code) . ' ';
252 }
253
254 print '<td class="tdoverflowmax100" title="' . dol_escape_htmltag($labelpaymenttype) . '">';
255 print dol_escape_htmltag($labelpaymenttype);
256 print '</td>';
257
258 // Chq number
259 print '<td>' . dol_escape_htmltag($obj->num_payment) . '</td>';
260
261 if (isModEnabled("banque")) {
262 // Bank transaction
263 print '<td>';
264 $accountlinestatic->id = $obj->fk_bank;
265 print $accountlinestatic->getNomUrl(1);
266 print '</td>';
267
268 // Account
269 print '<td>';
270 $account = new Account($db);
271 $account->fetch($obj->fk_account);
272 print $account->getNomUrl(1);
273 print '</td>';
274 }
275
276 // Expected to pay
277 print '<td class="right"><span class="amount">' . price($obj->total) . '</span></td>';
278
279 // Paid
280 print '<td class="right"><span class="amount">';
281 if ($obj->totalpaid) {
282 print price($obj->totalpaid);
283 }
284 print '</span></td>';
285 print '</tr>';
286
287 $total = $total + $obj->total;
288 $totalnb = $totalnb + $obj->nb;
289 $totalpaid = $totalpaid + $obj->totalpaid;
290 $i++;
291 }
292
293 // Total
294 print '<tr class="liste_total"><td colspan="3" class="liste_total">' . $langs->trans("Total") . '</td>';
295 print '<td class="liste_total right"></td>'; // A total here has no sense
296 print '<td align="center" class="liste_total">&nbsp;</td>';
297 print '<td align="center" class="liste_total">&nbsp;</td>';
298 if (isModEnabled("banque")) {
299 print '<td align="center" class="liste_total">&nbsp;</td>';
300 print '<td align="center" class="liste_total">&nbsp;</td>';
301 }
302 print '<td align="center" class="liste_total">&nbsp;</td>';
303 print '<td align="center" class="liste_total">&nbsp;</td>';
304 print '<td class="liste_total right">' . price($totalpaid) . "</td>";
305 print "</tr>";
306 }
307 print '</table>';
308 print '</div>';
309
310 print '</form>';
311}
312
313// End of page
314llxFooter();
315$db->close();
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
Definition wrapper.php:56
llxFooter()
Empty footer.
Definition wrapper.php:70
Class to manage bank accounts.
Class to manage bank transaction lines.
Class to manage payments of salaries.
Class to manage payments of social contributions.
Put here description of your class.
Definition tva.class.php:36
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
Definition date.lib.php:578
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition date.lib.php:597
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.