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);
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;
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) :
'');
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])) {
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>';
330 print
'<td class="nowrap center">';
331 print
'<span id="dateoperation_'.$objp->facid.
'">'.
dol_print_date(
$db->jdate($objp->datep),
"day").
"</span>";
338 print
'<td class="nowrap left">';
339 print $bankaccount->getNomUrl(1);
346 print
'<td class="right">';
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;
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;
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").
')' :
'').
' : ';
404 print
'<div class="inline-block amount width100">'.($cash >= 0 ?
'+' :
'').
price($cash).
'</div>';
405 print
'<div class="inline-block amount width100">'.price($newcash).
'</div>';
407 print
'<div class="inline-block amount width100"></div>';
408 print
'<div class="inline-block amount width100">'.price($cash).
'</div>';
412 $s = $langs->trans(
"Declared").
': '.
price(
$object->cash_declared);
418 print $langs->trans(
"PaymentTypeCHQ").(!empty($transactionspertype[
'CHQ']) ?
' ('.$transactionspertype[
'CHQ'].
' '.$langs->trans(
"Payments").
')' :
'').
' : ';
419 print
'<div class="inline-block amount width100"></div>';
420 print
'<div class="inline-block amount width100">'.price($cheque).
'</div>';
423 $s = $langs->trans(
"Declared").
': '.
price(
$object->cheque_declared);
428 print $langs->trans(
"PaymentTypeCB").(!empty($transactionspertype[
'CB']) ?
' ('.$transactionspertype[
'CB'].
' '.$langs->trans(
"Payments").
')' :
'').
' : ';
429 print
'<div class="inline-block amount width100"></div>';
430 print
'<div class="inline-block amount width100">'.price($bank).
'</div>';
433 $s = $langs->trans(
"Declared").
': '.
price(
$object->card_declared);
439 print
''.$langs->trans(
"Other").(!empty($transactionspertype[
'OTHER']) ?
' ('.$transactionspertype[
'OTHER'].
' '.$langs->trans(
"Payments").
')' :
'').
' : ';
440 print
'<div class="inline-block amount width100"></div>';
441 print
'<div class="inline-block amount width100">'.price($other).
"</div>";
448 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>';
450 print
'<br>'.$langs->trans(
"TotalVAT").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totalvat).
'</div>';
452 if (
$mysoc->useLocalTax(1)) {
453 print
'<br>'.$langs->trans(
"TotalLT1").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax1).
'</div>';
455 if (
$mysoc->useLocalTax(1)) {
456 print
'<br>'.$langs->trans(
"TotalLT2").
' : <div class="inline-block amount width100"></div><div class="inline-block amount width100">'.
price($totallocaltax2).
'</div>';
459 if (!empty($totalvatperrate) && is_array($totalvatperrate)) {
460 print
'<br><br><div class="small inline-block width100">'.$langs->trans(
"TotalHT").
'</div><div class="small inline-block width100">'.$langs->trans(
"TotalVAT").
'</div>';
461 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
462 print
'<div class="small inline-block width100">'.$langs->trans(
"TotalTTC").
'</div>';
464 foreach ($totalvatperrate as $keyrate => $valuerate) {
465 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>';
466 if (
getDolGlobalInt(
'TAKEPOS_CASHCONTROL_REPORT_SHOW_TOTAL_INCLUDING_TAXES_COLUMN', 0) != 0) {
467 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, $blockedlogmodulealreadydone=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.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
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.