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").
')' :
'').
' : ';
391 print
'<div class="inline-block amount width100">'.($cash >= 0 ?
'+' :
'').
price($cash).
'</div>';
392 print
'<div class="inline-block amount width100">'.price($newcash).
'</div>';
394 print
'<div class="inline-block amount width100"></div>';
395 print
'<div class="inline-block amount width100">'.price($cash).
'</div>';
398 print
' <div class="inline-block amountremaintopay fontsizeunset small"><> '.$langs->trans(
"Declared").
': '.
price(
$object->cash_declared).
'</div>';
403 print $langs->trans(
"PaymentTypeCHQ").(!empty($transactionspertype[
'CHQ']) ?
' ('.$transactionspertype[
'CHQ'].
' '.$langs->trans(
"Articles").
')' :
'').
' : ';
404 print
'<div class="inline-block amount width100"></div>';
405 print
'<div class="inline-block amount width100">'.price($cheque).
'</div>';
407 print
' <div class="inline-block amountremaintopay fontsizeunset small"><> '.$langs->trans(
"Declared").
' : '.
price(
$object->cheque_declared).
'</div>';
412 print $langs->trans(
"PaymentTypeCB").(!empty($transactionspertype[
'CB']) ?
' ('.$transactionspertype[
'CB'].
' '.$langs->trans(
"Articles").
')' :
'').
' : ';
413 print
'<div class="inline-block amount width100"></div>';
414 print
'<div class="inline-block amount width100">'.price($bank).
'</div>';
416 print
' <div class="inline-block amountremaintopay fontsizeunset small"><> '.$langs->trans(
"Declared").
': '.
price(
$object->card_declared).
'</div>';
422 print
''.$langs->trans(
"Other").(!empty($transactionspertype[
'OTHER']) ?
' ('.$transactionspertype[
'OTHER'].
' '.$langs->trans(
"Articles").
')' :
'').
' : ';
423 print
'<div class="inline-block amount width100"></div>';
424 print
'<div class="inline-block amount width100">'.price($other).
"</div>";
430 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>';
432 print
'<br>'.$langs->trans(
"TotalVAT").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totalvat).
'</div>';
434 if (
$mysoc->useLocalTax(1)) {
435 print
'<br>'.$langs->trans(
"TotalLT1").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax1).
'</div>';
437 if (
$mysoc->useLocalTax(1)) {
438 print
'<br>'.$langs->trans(
"TotalLT2").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax2).
'</div>';
441 if (!empty($totalvatperrate) && is_array($totalvatperrate)) {
442 print
'<br><br><div class="small inline-block width100">'.$langs->trans(
"TotalHT").
'</div><div class="small inline-block width100">'.$langs->trans(
"TotalVAT").
'</div>';
443 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
444 print
'<div class="small inline-block width100">'.$langs->trans(
"TotalTTC").
'</div>';
446 foreach ($totalvatperrate as $keyrate => $valuerate) {
447 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>';
448 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
449 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.