34if (!defined(
'NOREQUIREMENU')) {
35 define(
'NOREQUIREMENU',
'1');
37if (!defined(
'NOBROWSERNOTIF')) {
38 define(
'NOBROWSERNOTIF',
'1');
42require
'../../main.inc.php';
51require_once DOL_DOCUMENT_ROOT.
'/compta/cashcontrol/class/cashcontrol.class.php';
52require_once DOL_DOCUMENT_ROOT.
'/compta/bank/class/account.class.php';
53require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture.class.php';
54require_once DOL_DOCUMENT_ROOT.
'/compta/cashcontrol/class/cashcontrol.class.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
56require_once DOL_DOCUMENT_ROOT.
'/blockedlog/lib/blockedlog.lib.php';
58$langs->loadLangs(array(
"bills",
"banks",
"cashdesk",
"blockedlog"));
68$sortfield =
'b.datev,b.dateo,b.rowid';
71 'b.rowid' => array(
'label' => $langs->trans(
"Ref"),
'checked' => 1),
72 'b.dateo' => array(
'label' => $langs->trans(
"DateOperationShort"),
'checked' => 1),
73 'b.num_chq' => array(
'label' => $langs->trans(
"Number"),
'checked' => 1),
74 'ba.ref' => array(
'label' => $langs->trans(
"BankAccount"),
'checked' => 1),
75 'cp.code' => array(
'label' => $langs->trans(
"PaymentMode"),
'checked' => 1),
76 'b.debit' => array(
'label' => $langs->trans(
"Debit"),
'checked' => 1,
'position' => 600),
77 'b.credit' => array(
'label' => $langs->trans(
"Credit"),
'checked' => 1,
'position' => 605),
85$terminalid =
$object->posnumber;
88if ($user->socid > 0) {
92if (!$user->hasRight(
'cashdesk',
'run') && !$user->hasRight(
'takepos',
'run')) {
101$title = $langs->trans(
"CashControl");
104$conf->dol_hide_topmenu = 1;
105$conf->dol_hide_leftmenu = 1;
107llxHeader(
'', $title,
'',
'', 0, 0, array(), array(), $param);
109print
'<!-- Begin div id-container --><div id="id-container" class="id-container center">';
113if ($syear && !$smonth) {
115} elseif ($syear && $smonth && !$sday) {
117} elseif ($syear && $smonth && $sday) {
118 $dates =
dol_mktime(0, 0, 0, $smonth, $sday, $syear); $datee =
dol_mktime(23, 59, 59, $smonth, $sday, $syear);
122$datefilter =
'p.datep';
123$modulesourcefilter =
'f.module_source';
124$amountfield =
'pf.amount';
127 $datefilter =
'bl.date_creation';
128 $modulesourcefilter =
'bl.module_source';
129 $amountfield =
'bl.amounts';
134$sql =
"SELECT p.rowid, p.datep as datep, cp.code,";
135$sql .=
" f.rowid as facid, f.ref, f.datef as datef, ".$db->sanitize($amountfield).
" as amount,";
136$sql .=
" b.fk_account as bankid,";
137$sql .=
" bl.signature";
138$sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement_facture as pf, ".MAIN_DB_PREFIX.
"facture as f,";
139$sql .=
" ".MAIN_DB_PREFIX.
"paiement as p";
141$sql .=
" ".$db->sanitize($joinleft).
" JOIN ".MAIN_DB_PREFIX.
"blockedlog as bl ON bl.action = 'PAYMENT_CUSTOMER_CREATE'";
142$sql .=
" AND bl.element = 'payment' AND bl.fk_object = p.rowid AND bl.entity = ".((int) $conf->entity);
143$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank as b ON p.fk_bank = b.rowid,";
144$sql .=
" ".MAIN_DB_PREFIX.
"c_paiement as cp";
145$sql .=
" WHERE pf.fk_facture = f.rowid AND p.rowid = pf.fk_paiement AND cp.id = p.fk_paiement";
146$sql .=
" AND ".$db->sanitize($modulesourcefilter).
" = '".$db->escape($posmodule).
"'";
147$sql .=
" AND f.pos_source = '".$db->escape($terminalid).
"'";
148$sql .=
" AND p.entity = ".((int) $conf->entity);
149$sql .=
" AND ".$db->sanitize($datefilter).
" BETWEEN '".$db->idate($dates).
"' AND '".$db->idate($datee).
"'";
150$sql .=
" ORDER BY ".$db->sanitize($datefilter).
" ASC, rowid ASC";
152$resql = $db->query($sql);
154 $num = $db->num_rows($resql);
157 print
"<!-- title of cash control -->\n";
158 print
'<!-- We will use this request to find payments: '.dolPrintHTML($sql).
' -->';
163 print $langs->trans(
"CashControl").
" #".
$object->id.(($nameterminal !=
"TAKEPOS_TERMINAL_NAME_".$object->posnumber) ?
'<br>'.$nameterminal :
'');
164 if (
$object->status == $object::STATUS_DRAFT) {
165 print
'<br><span class="opacitymedium small">('.$langs->trans(
"Draft").
" - ".$langs->trans(
"TheoricalView").
")</span>";
169 print
'<br>'.$langs->trans(
"DateCreationShort").
": ".
dol_print_date(
$object->date_creation,
'dayhour');
170 $userauthor =
$object->fk_user_valid;
171 if (empty($userauthor)) {
172 $userauthor =
$object->fk_user_creat;
175 $uservalid =
new User($db);
176 if ($userauthor > 0) {
177 $uservalid->fetch($userauthor);
178 print
'<br>'.$langs->trans(
"Author").
': '.$uservalid->getFullName($langs);
180 print
'<br>'.$langs->trans(
"Period").
': '.
$object->year_close.($object->month_close ?
'-'.sprintf(
"%02d",
$object->month_close) :
'').(
$object->day_close ?
'-'.sprintf(
"%02d",
$object->day_close) :
'');
183 $invoicetmp =
new Facture($db);
186 print
"<div style='text-align: right'><h2>";
187 print $langs->trans(
"InitialBankBalance").
' - '.$langs->trans(
"Cash").
' : <div class="inline-block amount width100">'.
price(
$object->opening).
'</div>';
196 print
'<div class="div-table-responsive">';
197 print
'<table class="tagtable liste">'.
"\n";
200 print
'<tr class="liste_titre">';
201 print_liste_field_titre($arrayfields[
'b.rowid'][
'label'], $_SERVER[
'PHP_SELF'],
'b.rowid',
'', $param,
'', $sortfield, $sortorder);
202 print_liste_field_titre($arrayfields[
'b.dateo'][
'label'], $_SERVER[
'PHP_SELF'],
'b.dateo',
'', $param,
'"', $sortfield, $sortorder,
'center ');
203 print_liste_field_titre($arrayfields[
'ba.ref'][
'label'], $_SERVER[
'PHP_SELF'],
'ba.ref',
'', $param,
'', $sortfield, $sortorder,
'');
204 print_liste_field_titre($arrayfields[
'cp.code'][
'label'], $_SERVER[
'PHP_SELF'],
'cp.code',
'', $param,
'', $sortfield, $sortorder,
'right ');
205 print_liste_field_titre($arrayfields[
'b.debit'][
'label'], $_SERVER[
'PHP_SELF'],
'b.amount',
'', $param,
'', $sortfield, $sortorder,
'right ');
206 print_liste_field_titre($arrayfields[
'b.credit'][
'label'], $_SERVER[
'PHP_SELF'],
'b.amount',
'', $param,
'', $sortfield, $sortorder,
'right ');
211 $cash = $bank = $cheque = $other = 0;
215 $totalvatperrate = array();
216 $totalhtperrate = array();
219 $cachebankaccount = array();
220 $cacheinvoiceid = array();
221 $transactionspertype = array();
222 $amountpertype = array();
224 $totalarray = array(
'nbfield' => 0,
'pos' => array(),
'val' => array(
'totaldebfield' => 0,
'totalcredfield' => 0));
226 $objp = $db->fetch_object($resql);
229 if (empty($cachebankaccount[$objp->bankid])) {
230 $bankaccounttmp =
new Account($db);
231 $bankaccounttmp->fetch($objp->bankid);
232 $cachebankaccount[$objp->bankid] = $bankaccounttmp;
233 $bankaccount = $bankaccounttmp;
235 $bankaccount = $cachebankaccount[$objp->bankid];
238 $invoicetmp->fetch($objp->facid);
240 if (empty($cacheinvoiceid[$objp->facid])) {
241 $cacheinvoiceid[$objp->facid] = $objp->facid;
242 foreach ($invoicetmp->lines as $line) {
243 $totalqty += $line->qty;
244 $totalvat += $line->total_tva;
246 if (empty($totalvatperrate[$line->tva_tx])) {
247 $totalvatperrate[$line->tva_tx] = 0;
248 $totalhtperrate[$line->tva_tx] = 0;
250 $totalvatperrate[$line->tva_tx] += $line->total_tva;
251 $totalhtperrate[$line->tva_tx] += $line->total_ht;
253 $totallocaltax1 += $line->total_localtax1;
254 $totallocaltax2 += $line->total_localtax2;
258 if (
$object->posmodule ==
"takepos") {
259 $var1 =
'CASHDESK_ID_BANKACCOUNT_CASH'.$object->posnumber;
261 $var1 =
'CASHDESK_ID_BANKACCOUNT_CASH';
264 if ($objp->code ==
'CHQ') {
265 $cheque += $objp->amount;
266 if (empty($transactionspertype[$objp->code])) {
267 $transactionspertype[$objp->code] = 0;
269 $transactionspertype[$objp->code] += 1;
270 } elseif ($objp->code ==
'CB') {
271 $bank += $objp->amount;
272 if (empty($transactionspertype[$objp->code])) {
273 $transactionspertype[$objp->code] = 0;
275 $transactionspertype[$objp->code] += 1;
278 $cash += $objp->amount;
281 if (empty($transactionspertype[
'CASH'])) {
282 $transactionspertype[
'CASH'] = 0;
284 $transactionspertype[
'CASH'] += 1;
286 $other += $objp->amount;
287 if (empty($transactionspertype[
'OTHER'])) {
288 $transactionspertype[
'OTHER'] = 0;
290 $transactionspertype[
'OTHER'] += 1;
294 if (empty($amountpertype[$objp->code])) {
295 $amountpertype[$objp->code] = 0;
298 if ($objp->amount < 0) {
299 $amountpertype[$objp->code] += $objp->amount;
301 if ($objp->amount > 0) {
302 $amountpertype[$objp->code] -= $objp->amount;
306 print
'<tr class="oddeven">';
309 print
'<td class="nowrap left smallheight">';
310 print $invoicetmp->getNomUrl(1);
311 print
'<br><span class="small opacitymedium" title="'.$langs->trans(
"FingerprintInBlockedLog").
': '.$objp->signature.
'">'.
dol_trunc($objp->signature, 16).
'</span>';
318 print
'<td class="nowrap center">';
319 print
'<span id="dateoperation_'.$objp->facid.
'">'.
dol_print_date($db->jdate($objp->datep),
"day").
"</span>";
326 print
'<td class="nowrap left">';
327 print $bankaccount->getNomUrl(1);
334 print
'<td class="right">';
342 print
'<td class="right">';
343 if ($objp->amount < 0) {
344 print
'<span class="amount">'.price($objp->amount * -1).
'</span>';
345 $totalarray[
'val'][
'totaldebfield'] += $objp->amount;
356 print
'<td class="right">';
357 if ($objp->amount > 0) {
358 print
'<span class="amount">'.price($objp->amount).
'</span>';
359 $totalarray[
'val'][
'totalcredfield'] += $objp->amount;
377 include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
386 print
'<div style="text-align: right">';
389 print $langs->trans(
"Cash").(!empty($transactionspertype[
'CASH']) ?
' ('.$transactionspertype[
'CASH'].
' '.$langs->trans(
"Articles").
')' :
'').
' : ';
393 print
'<div class="inline-block amount width100 marginrightonly">'.($cash >= 0 ?
'+' :
'').
price($cash).
'</div>';
394 print
'<div class="inline-block amount width100">'.price($newcash).
'</div>';
396 print
'<div class="inline-block amount width100"></div>';
397 print
'<div class="inline-block amount width100">'.price($cash).
'</div>';
400 print
' <div class="inline-block amountremaintopay fontsizeunset small"><> '.$langs->trans(
"Declared").
': '.
price(
$object->cash_declared).
'</div>';
405 print $langs->trans(
"PaymentTypeCHQ").(!empty($transactionspertype[
'CHQ']) ?
' ('.$transactionspertype[
'CHQ'].
' '.$langs->trans(
"Articles").
')' :
'').
' : ';
406 print
'<div class="inline-block amount width100"></div>';
407 print
'<div class="inline-block amount width100">'.price($cheque).
'</div>';
409 print
' <div class="inline-block amountremaintopay fontsizeunset small"><> '.$langs->trans(
"Declared").
' : '.
price(
$object->cheque_declared).
'</div>';
414 print $langs->trans(
"PaymentTypeCB").(!empty($transactionspertype[
'CB']) ?
' ('.$transactionspertype[
'CB'].
' '.$langs->trans(
"Articles").
')' :
'').
' : ';
415 print
'<div class="inline-block amount width100"></div>';
416 print
'<div class="inline-block amount width100">'.price($bank).
'</div>';
418 print
' <div class="inline-block amountremaintopay fontsizeunset small"><> '.$langs->trans(
"Declared").
': '.
price(
$object->card_declared).
'</div>';
424 print
''.$langs->trans(
"Other").(!empty($transactionspertype[
'OTHER']) ?
' ('.$transactionspertype[
'OTHER'].
' '.$langs->trans(
"Articles").
')' :
'').
' : ';
425 print
'<div class="inline-block amount width100"></div>';
426 print
'<div class="inline-block amount width100">'.price($other).
"</div>";
432 print $langs->trans(
"Total").
' ('.$totalqty.
' '.$langs->trans(
"Articles").
') : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price((
float) $cash + (
float) $cheque + (
float) $bank + (
float) $other).
'</div>';
434 print
'<br>'.$langs->trans(
"TotalVAT").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totalvat).
'</div>';
436 if (
$mysoc->useLocalTax(1)) {
437 print
'<br>'.$langs->trans(
"TotalLT1").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax1).
'</div>';
439 if (
$mysoc->useLocalTax(1)) {
440 print
'<br>'.$langs->trans(
"TotalLT2").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax2).
'</div>';
443 if (!empty($totalvatperrate) && is_array($totalvatperrate)) {
444 print
'<br><br><div class="small inline-block width100">'.$langs->trans(
"TotalHT").
'</div><div class="small inline-block width100">'.$langs->trans(
"TotalVAT").
'</div>';
445 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
446 print
'<div class="small inline-block width100">'.$langs->trans(
"TotalTTC").
'</div>';
448 foreach ($totalvatperrate as $keyrate => $valuerate) {
449 print
'<br><div class="small">'.$langs->trans(
"VATRate").
' '.
vatrate($keyrate,
true).
' : <div class="inline-block amount width100">'.
price($totalhtperrate[$keyrate] ?? 0).
'</div><div class="inline-block amount width100">'.
price($valuerate).
'</div>';
450 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
451 print
'<div class="inline-block amount width100">'.price(($totalhtperrate[$keyrate] ?? 0) + $valuerate).
'</div>';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
isALNERunningVersion($blockedlogtestalreadydone=0)
Return if the application is executed with the LNE requirements on.
Class to manage bank accounts.
Class to manage cash fence.
Class to manage invoices.
Class to manage Dolibarr users.
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
vatrate($rate, $addpercent=false, $info_bits=0, $usestarfornpr=0, $html=0)
Return a string with VAT rate label formatted for view output Used into pdf and HTML pages.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
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.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
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.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.