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 centpercent">';
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);
120 dol_print_error(
null,
'Year not defined');
122$datefilter =
'p.datep';
123$modulesourcefilter =
'f.module_source';
124$amountfield =
'pf.amount';
125$possource =
'f.pos_source';
126$fieldentity =
'p.entity';
129 $datefilter =
'bl.date_creation';
130 $modulesourcefilter =
'bl.module_source';
131 $amountfield =
'bl.amounts';
132 $possource =
'bl.pos_source';
133 $fieldentity =
'bl.entity';
138$sql =
"SELECT p.rowid, p.ref as pref, p.datep as datep, cp.code,";
139$sql .=
" f.rowid as facid, f.ref, f.datef as datef, ".$db->sanitize($amountfield).
" as amount,";
140$sql .=
" b.fk_account as bankid,";
141$sql .=
" bl.signature";
142$sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement_facture as pf, ".MAIN_DB_PREFIX.
"facture as f,";
143$sql .=
" ".MAIN_DB_PREFIX.
"paiement as p";
144$sql .=
" ".$db->sanitize($joinleft).
" JOIN ".MAIN_DB_PREFIX.
"blockedlog as bl ON bl.action = 'PAYMENT_CUSTOMER_CREATE'";
145$sql .=
" AND bl.element = 'payment' AND bl.fk_object = p.rowid AND bl.entity = ".((int)
$conf->entity);
146$sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank as b ON p.fk_bank = b.rowid,";
147$sql .=
" ".MAIN_DB_PREFIX.
"c_paiement as cp";
148$sql .=
" WHERE pf.fk_facture = f.rowid AND p.rowid = pf.fk_paiement AND cp.id = p.fk_paiement";
149$sql .=
" AND ".$db->sanitize($modulesourcefilter).
" = '".$db->escape($posmodule).
"'";
150$sql .=
" AND ".$db->sanitize($possource).
" = '".$db->escape($terminalid).
"'";
151$sql .=
" AND ".$db->sanitize($datefilter).
" BETWEEN '".$db->idate($dates).
"' AND '".$db->idate($datee).
"'";
152$sql .=
" AND ".$db->sanitize($fieldentity).
" = ".((int)
$conf->entity);
153$sql .=
" ORDER BY ".$db->sanitize($datefilter).
" ASC, rowid ASC";
155$resql = $db->query($sql);
157 $num = $db->num_rows($resql);
160 print
"<!-- title of cash control -->\n";
161 print
'<!-- We will use this request to find payments: '.dolPrintHTML($sql).
' -->';
166 print $langs->trans(
"CashControl").
" #".
$object->id.(($nameterminal !=
"TAKEPOS_TERMINAL_NAME_".$object->posnumber) ?
'<br>'.$nameterminal :
'');
167 if (
$object->status == $object::STATUS_DRAFT) {
168 print
'<br><span class="opacitymedium small">('.$langs->trans(
"Draft").
" - ".$langs->trans(
"TheoricalView").
")</span>";
172 print
'<br>'.$langs->trans(
"DateCreationShort").
": ".
dol_print_date(
$object->date_creation,
'dayhour');
173 $userauthor =
$object->fk_user_valid;
174 if (empty($userauthor)) {
175 $userauthor =
$object->fk_user_creat;
178 $uservalid =
new User($db);
179 if ($userauthor > 0) {
180 $uservalid->fetch($userauthor);
181 print
' - '.$langs->trans(
"Author").
': '.$uservalid->getFullName($langs);
183 print
'<br>'.$langs->trans(
"Period").
': '.
$object->year_close.($object->month_close ?
'-'.sprintf(
"%02d",
$object->month_close) :
'').(
$object->day_close ?
'-'.sprintf(
"%02d",
$object->day_close) :
'');
186 $invoicetmp =
new Facture($db);
189 print
"<div style='text-align: right'><h2>";
190 print $langs->trans(
"InitialBankBalance").
' - '.$langs->trans(
"Cash").
' : <div class="inline-block amount width100">'.
price(
$object->opening).
'</div>';
199 print
'<div class="div-table-responsive">';
200 print
'<table class="tagtable liste">'.
"\n";
203 print
'<tr class="liste_titre">';
204 print_liste_field_titre($arrayfields[
'b.rowid'][
'label'], $_SERVER[
'PHP_SELF'],
'b.rowid',
'', $param,
'', $sortfield, $sortorder);
205 print_liste_field_titre($arrayfields[
'b.dateo'][
'label'], $_SERVER[
'PHP_SELF'],
'b.dateo',
'', $param,
'"', $sortfield, $sortorder,
'center ');
206 print_liste_field_titre($arrayfields[
'ba.ref'][
'label'], $_SERVER[
'PHP_SELF'],
'ba.ref',
'', $param,
'', $sortfield, $sortorder,
'');
207 print_liste_field_titre($arrayfields[
'cp.code'][
'label'], $_SERVER[
'PHP_SELF'],
'cp.code',
'', $param,
'', $sortfield, $sortorder,
'right ');
208 print_liste_field_titre($arrayfields[
'b.debit'][
'label'], $_SERVER[
'PHP_SELF'],
'b.amount',
'', $param,
'', $sortfield, $sortorder,
'right ');
209 print_liste_field_titre($arrayfields[
'b.credit'][
'label'], $_SERVER[
'PHP_SELF'],
'b.amount',
'', $param,
'', $sortfield, $sortorder,
'right ');
214 $cash = $bank = $cheque = $other = 0;
218 $totalvatperrate = array();
219 $totalhtperrate = array();
222 $cachebankaccount = array();
223 $cacheinvoiceid = array();
224 $transactionspertype = array();
225 $amountpertype = array();
227 $totalarray = array(
'nbfield' => 0,
'pos' => array(),
'val' => array(
'totaldebfield' => 0,
'totalcredfield' => 0));
229 $objp = $db->fetch_object($resql);
232 if (empty($cachebankaccount[$objp->bankid])) {
233 $bankaccounttmp =
new Account($db);
234 $bankaccounttmp->fetch($objp->bankid);
235 $cachebankaccount[$objp->bankid] = $bankaccounttmp;
236 $bankaccount = $bankaccounttmp;
238 $bankaccount = $cachebankaccount[$objp->bankid];
241 $invoicetmp->fetch($objp->facid);
243 if (empty($cacheinvoiceid[$objp->facid])) {
244 $cacheinvoiceid[$objp->facid] = $objp->facid;
245 foreach ($invoicetmp->lines as $line) {
246 $totalqty += $line->qty;
247 $totalvat += $line->total_tva;
249 if (empty($totalvatperrate[$line->tva_tx])) {
250 $totalvatperrate[$line->tva_tx] = 0;
251 $totalhtperrate[$line->tva_tx] = 0;
253 $totalvatperrate[$line->tva_tx] += $line->total_tva;
254 $totalhtperrate[$line->tva_tx] += $line->total_ht;
256 $totallocaltax1 += $line->total_localtax1;
257 $totallocaltax2 += $line->total_localtax2;
261 if (
$object->posmodule ==
"takepos") {
262 $var1 =
'CASHDESK_ID_BANKACCOUNT_CASH'.$object->posnumber;
264 $var1 =
'CASHDESK_ID_BANKACCOUNT_CASH';
267 if ($objp->code ==
'CHQ') {
268 $cheque += $objp->amount;
269 if (empty($transactionspertype[$objp->code])) {
270 $transactionspertype[$objp->code] = 0;
272 $transactionspertype[$objp->code] += 1;
273 } elseif ($objp->code ==
'CB') {
274 $bank += $objp->amount;
275 if (empty($transactionspertype[$objp->code])) {
276 $transactionspertype[$objp->code] = 0;
278 $transactionspertype[$objp->code] += 1;
279 } elseif ($objp->code ==
'LIQ') {
280 $cash += $objp->amount;
283 if (empty($transactionspertype[
'CASH'])) {
284 $transactionspertype[
'CASH'] = 0;
286 $transactionspertype[
'CASH'] += 1;
289 $cash += $objp->amount;
292 if (empty($transactionspertype[
'CASH'])) {
293 $transactionspertype[
'CASH'] = 0;
295 $transactionspertype[
'CASH'] += 1;
297 $other += $objp->amount;
298 if (empty($transactionspertype[
'OTHER'])) {
299 $transactionspertype[
'OTHER'] = 0;
301 $transactionspertype[
'OTHER'] += 1;
305 if (empty($amountpertype[$objp->code])) {
306 $amountpertype[$objp->code] = 0;
309 if ($objp->amount < 0) {
310 $amountpertype[$objp->code] += $objp->amount;
312 if ($objp->amount > 0) {
313 $amountpertype[$objp->code] -= $objp->amount;
318 print
'<tr class="oddeven">';
321 print
'<td class="nowrap left smallheight">';
322 print $invoicetmp->getNomUrl(1);
323 print
'<br><span class="small opacitymedium" title="'.$langs->trans(
"FingerprintInBlockedLog").
': '.$objp->signature.
'">'.
dol_trunc($objp->signature, 16).
'</span>';
326 $totalarray[
'nbfield']++;
330 print
'<td class="nowrap center">';
331 print
'<span id="dateoperation_'.$objp->facid.
'">'.
dol_print_date($db->jdate($objp->datep),
"day").
"</span>";
334 $totalarray[
'nbfield']++;
338 print
'<td class="nowrap left">';
339 print $bankaccount->getNomUrl(1);
342 $totalarray[
'nbfield']++;
346 print
'<td class="right">';
350 $totalarray[
'nbfield']++;
354 print
'<td class="right">';
355 if ($objp->amount < 0) {
356 print
'<span class="amount">'.price($objp->amount * -1).
'</span>';
357 $totalarray[
'val'][
'totaldebfield'] += $objp->amount;
361 $totalarray[
'nbfield']++;
364 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'totaldebfield';
368 print
'<td class="right">';
369 if ($objp->amount > 0) {
370 print
'<span class="amount">'.price($objp->amount).
'</span>';
371 $totalarray[
'val'][
'totalcredfield'] += $objp->amount;
375 $totalarray[
'nbfield']++;
378 $totalarray[
'pos'][$totalarray[
'nbfield']] =
'totalcredfield';
389 $moreinfoontotal =
' ('.$num.
' '.$langs->trans($num > 1 ?
"Invoices" :
"Invoice").
')';
390 include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
399 print
'<div style="text-align: right">';
402 print $langs->trans(
"Cash").(!empty($transactionspertype[
'CASH']) ?
' ('.$transactionspertype[
'CASH'].
' '.$langs->trans(
"Payments").
')' :
'').
' : ';
406 print
'<div class="inline-block amount width100 marginrightonly">'.($cash >= 0 ?
'+' :
'').
price($cash).
'</div>';
407 print
'<div class="inline-block amount width100">'.price($newcash).
'</div>';
409 print
'<div class="inline-block amount width100"></div>';
410 print
'<div class="inline-block amount width100">'.price($cash).
'</div>';
414 $s = $langs->trans(
"Declared").
': '.
price(
$object->cash_declared);
415 print img_picto($s,
'warning');
420 print $langs->trans(
"PaymentTypeCHQ").(!empty($transactionspertype[
'CHQ']) ?
' ('.$transactionspertype[
'CHQ'].
' '.$langs->trans(
"Payments").
')' :
'').
' : ';
421 print
'<div class="inline-block amount width100"></div>';
422 print
'<div class="inline-block amount width100">'.price($cheque).
'</div>';
425 $s = $langs->trans(
"Declared").
': '.
price(
$object->cheque_declared);
430 print $langs->trans(
"PaymentTypeCB").(!empty($transactionspertype[
'CB']) ?
' ('.$transactionspertype[
'CB'].
' '.$langs->trans(
"Payments").
')' :
'').
' : ';
431 print
'<div class="inline-block amount width100"></div>';
432 print
'<div class="inline-block amount width100">'.price($bank).
'</div>';
435 $s = $langs->trans(
"Declared").
': '.
price(
$object->card_declared);
441 print
''.$langs->trans(
"Other").(!empty($transactionspertype[
'OTHER']) ?
' ('.$transactionspertype[
'OTHER'].
' '.$langs->trans(
"Payments").
')' :
'').
' : ';
442 print
'<div class="inline-block amount width100"></div>';
443 print
'<div class="inline-block amount width100">'.price($other).
"</div>";
450 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>';
452 print
'<br>'.$langs->trans(
"TotalVAT").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totalvat).
'</div>';
454 if (
$mysoc->useLocalTax(1)) {
455 print
'<br>'.$langs->trans(
"TotalLT1").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax1).
'</div>';
457 if (
$mysoc->useLocalTax(1)) {
458 print
'<br>'.$langs->trans(
"TotalLT2").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax2).
'</div>';
461 if (!empty($totalvatperrate) && is_array($totalvatperrate)) {
462 print
'<br><br><div class="small inline-block width100">'.$langs->trans(
"TotalHT").
'</div><div class="small inline-block width100">'.$langs->trans(
"TotalVAT").
'</div>';
463 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
464 print
'<div class="small inline-block width100">'.$langs->trans(
"TotalTTC").
'</div>';
466 foreach ($totalvatperrate as $keyrate => $valuerate) {
467 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>';
468 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
469 print
'<div class="inline-block amount width100">'.price(($totalhtperrate[$keyrate] ?? 0) + $valuerate).
'</div>';
482 dol_print_error($db);
$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($blockedlogusagealreadychecked=0, $blockedlogmoduleonalreadychecked=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.
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.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
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_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.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.