Merge pull request #10206 from andreubisquerra/master
First CashControl version
This commit is contained in:
commit
1167d9aecb
204
htdocs/compta/cashcontrol/cashcontrol.php
Normal file
204
htdocs/compta/cashcontrol/cashcontrol.php
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2013 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2009 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
|
* Copyright (C) 2013 Charles-Fr BENKE <charles.fr@benke.fr>
|
||||||
|
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||||
|
* Copyright (C) 2016 Marcos García <marcosgdf@gmail.com>
|
||||||
|
* Copyright (C) 2018 Andreu Bisquerra <jove@bisquerra.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/compta/bank/categ.php
|
||||||
|
* \ingroup compta
|
||||||
|
* \brief Page ajout de categories bancaires
|
||||||
|
*/
|
||||||
|
|
||||||
|
$res=@include("../main.inc.php");
|
||||||
|
if (! $res) $res=@include("../../main.inc.php");
|
||||||
|
include_once 'class/cashcontrol.class.php';
|
||||||
|
|
||||||
|
$langs->loadLangs(array("cashcontrol","install","cashdesk","admin"));
|
||||||
|
|
||||||
|
$action=GETPOST('action','aZ09');
|
||||||
|
$id=GETPOST('id');
|
||||||
|
|
||||||
|
if (!$user->rights->banque->configurer)
|
||||||
|
accessforbidden();
|
||||||
|
|
||||||
|
$categid = GETPOST('categid');
|
||||||
|
$label = GETPOST("label");
|
||||||
|
|
||||||
|
if (empty($conf->global->CASHDESK_ID_BANKACCOUNT_CASH) or empty($conf->global->CASHDESK_ID_BANKACCOUNT_CB)) setEventMessages($langs->trans("CashDesk")." - ".$langs->trans("NotConfigured"), null, 'errors');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Add category
|
||||||
|
*/
|
||||||
|
if ($action=="start")
|
||||||
|
{
|
||||||
|
$cashcontrol= new CashControl($db);
|
||||||
|
$cashcontrol->opening=GETPOST('opening');
|
||||||
|
if (GETPOST('posmodule')==0) $cashcontrol->posmodule="cashdesk";
|
||||||
|
else if (GETPOST('posmodule')==1) $cashcontrol->posmodule="takepos";
|
||||||
|
$cashcontrol->posnumber=GETPOST('posnumber');
|
||||||
|
$id=$cashcontrol->create($user);
|
||||||
|
$action="view";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($action=="close")
|
||||||
|
{
|
||||||
|
$cashcontrol= new CashControl($db);
|
||||||
|
$cashcontrol->id=$id;
|
||||||
|
$cashcontrol->close($user);
|
||||||
|
$action="view";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($action=="create")
|
||||||
|
{
|
||||||
|
llxHeader();
|
||||||
|
print load_fiche_titre("Cashcontrol - ".$langs->trans("New"), '', 'title_bank.png');
|
||||||
|
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
|
print '<input type="hidden" name="action" value="start">';
|
||||||
|
print '<table class="noborder" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Ref").'</td><td>'.$langs->trans("InitialBankBalance").'</td><td>'.$langs->trans("Module").'</td><td>'.$langs->trans("CashDesk").' ID</td><td>,</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
print '<td> </td><td><input name="opening" type="text" size="10" value="0"></td>';
|
||||||
|
print '<td>'.$form->selectarray('posmodule', array('0'=>$langs->trans('CashDesk'),'1'=>$langs->trans('TakePOS')),1).'</td>';
|
||||||
|
print '<td><input name="posnumber" type="text" size="10" value="0"></td>';
|
||||||
|
print '<td align="center"><input type="submit" name="add" class="button" value="'.$langs->trans("Start").'"></td>';
|
||||||
|
print '</tr>';
|
||||||
|
print '</table></form>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($action=="list")
|
||||||
|
{
|
||||||
|
llxHeader();
|
||||||
|
print load_fiche_titre("Cashcontrol - ".$langs->trans("List"), '', 'title_bank.png');
|
||||||
|
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
|
print '<input type="hidden" name="action" value="start">';
|
||||||
|
print '<table class="noborder" width="100%">';
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print '<td>'.$langs->trans("Ref").'</td><td>'.$langs->trans("DateCreationShort").'</td><td colspan="2">'.$langs->trans("DateEnd").'</td><td align=right>'.$langs->trans("Cash").'</td><td align=right>'.$langs->trans("PaymentTypeCB").'</td><td>'.$langs->trans("Status").'</td>';
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
$sql = "SELECT *";
|
||||||
|
$sql.= " FROM ";
|
||||||
|
$sql.= MAIN_DB_PREFIX."pos_cash_fence order by rowid DESC";
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if ($result) {
|
||||||
|
$i = 0;
|
||||||
|
$num = $db->num_rows($result);
|
||||||
|
|
||||||
|
while ($i < $num) {
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
$objp = $db->fetch_object($result);
|
||||||
|
$totalpaye += $objp->amount;
|
||||||
|
print '<td>';
|
||||||
|
print '<a href="cashcontrol.php?action=view&id='.$objp->rowid.'">'.$objp->rowid.'</a>';
|
||||||
|
print '</td><td>'.dol_print_date($objp->date_creation, 'dayhour').'<td><td>'.dol_print_date(strtotime($objp->year_close."-".$objp->month_close."-".$objp->day_close), 'day').'</td>';
|
||||||
|
print '<td align=right>';
|
||||||
|
if ($objp->status==2) print price($objp->cash);
|
||||||
|
print '</td><td align=right>';
|
||||||
|
if ($objp->status==2) price($objp->card);
|
||||||
|
print '</td><td>';
|
||||||
|
if ($objp->status==1) print $langs->trans("Opened");
|
||||||
|
if ($objp->status==2) print $langs->trans("Closed");
|
||||||
|
print '</td></tr>';
|
||||||
|
$i ++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//no hay
|
||||||
|
}
|
||||||
|
|
||||||
|
print '</table></form>';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ($action=="view")
|
||||||
|
{
|
||||||
|
$cashcontrol= new CashControl($db);
|
||||||
|
$cashcontrol->fetch($id);
|
||||||
|
llxHeader();
|
||||||
|
print load_fiche_titre($langs->trans("CashControl"), '', 'title_bank.png');
|
||||||
|
print '<div class="fichecenter">';
|
||||||
|
print '<div class="fichehalfleft">';
|
||||||
|
print '<div class="underbanner clearboth"></div>';
|
||||||
|
print '<table class="border tableforfield" width="100%">';
|
||||||
|
|
||||||
|
print '<tr><td class="nowrap">';
|
||||||
|
print $langs->trans("Code");
|
||||||
|
print '</td><td colspan="2">';
|
||||||
|
print $id;
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '<tr><td class="nowrap">';
|
||||||
|
print $langs->trans("DateCreationShort");
|
||||||
|
print '</td><td colspan="2">';
|
||||||
|
print dol_print_date($cashcontrol->date_creation, 'dayhour');
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '<tr><td class="nowrap">';
|
||||||
|
print $langs->trans("DateEnd");
|
||||||
|
print '</td><td colspan="2">';
|
||||||
|
print dol_print_date(strtotime($cashcontrol->year_close."-".$cashcontrol->month_close."-".$cashcontrol->day_close), 'day');
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '<tr><td class="nowrap">';
|
||||||
|
print $langs->trans("Status");
|
||||||
|
print '</td><td colspan="2">';
|
||||||
|
if ($cashcontrol->status==1) print $langs->trans("Opened");
|
||||||
|
if ($cashcontrol->status==2) print $langs->trans("Closed");
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
|
print '<div class="fichehalfright"><div class="ficheaddleft">';
|
||||||
|
print '<div class="underbanner clearboth"></div>';
|
||||||
|
print '<table class="border tableforfield" width="100%">';
|
||||||
|
|
||||||
|
print '<tr><td valign="middle">'.$langs->trans("InitialBankBalance").'</td><td colspan="3">';
|
||||||
|
print price($cashcontrol->opening);
|
||||||
|
print "</td></tr>";
|
||||||
|
|
||||||
|
print '<tr><td valign="middle">'.$langs->trans("CashDesk").' ID</td><td colspan="3">';
|
||||||
|
print $cashcontrol->posnumber;
|
||||||
|
print "</td></tr>";
|
||||||
|
|
||||||
|
print '<tr><td valign="middle">'.$langs->trans("Module").'</td><td colspan="3">';
|
||||||
|
print $cashcontrol->posmodule;
|
||||||
|
print "</td></tr>";
|
||||||
|
|
||||||
|
print "</table>\n";
|
||||||
|
print '</div>';
|
||||||
|
print '</div></div>';
|
||||||
|
print '<div style="clear:both"></div>';
|
||||||
|
|
||||||
|
dol_fiche_end();
|
||||||
|
|
||||||
|
print '<div class="tabsAction">';
|
||||||
|
print '<div class="inline-block divButAction"><a target="_blank" class="butAction" href="report.php?id='.$id.'">' . $langs->trans('PrintTicket') . '</a></div>';
|
||||||
|
if ($cashcontrol->status==1) print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $id . '&action=close">' . $langs->trans('Close') . '</a></div>';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
|
print '<center><iframe src="report.php?id='.$id.'" width="60%" height="800"></iframe></center>';
|
||||||
|
}
|
||||||
|
|
||||||
|
llxFooter();
|
||||||
199
htdocs/compta/cashcontrol/class/cashcontrol.class.php
Normal file
199
htdocs/compta/cashcontrol/class/cashcontrol.class.php
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2009 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
|
* Copyright (C) 2016 Marcos García <marcosgdf@gmail.com>
|
||||||
|
* Copyright (C) 2018 Andreu Bisquerra <jove@bisquerra.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file cashcontrol/class/cashcontrol.class.php
|
||||||
|
* \ingroup bank
|
||||||
|
* \brief This file is CRUD class file (Create/Read/Update/Delete) for bank categories
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to manage bank categories
|
||||||
|
*/
|
||||||
|
class CashControl // extends CommonObject
|
||||||
|
{
|
||||||
|
public $id;
|
||||||
|
public $opening;
|
||||||
|
public $status;
|
||||||
|
public $date_creation;
|
||||||
|
public $year_close;
|
||||||
|
public $month_close;
|
||||||
|
public $day_close;
|
||||||
|
public $posmodule;
|
||||||
|
public $posnumber;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param DoliDB $db Database handler
|
||||||
|
*/
|
||||||
|
public function __construct(DoliDB $db)
|
||||||
|
{
|
||||||
|
$this->db = $db;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create in database
|
||||||
|
*
|
||||||
|
* @param User $user User that create
|
||||||
|
* @param int $notrigger 0=launch triggers after, 1=disable triggers
|
||||||
|
* @return int <0 if KO, Id of created object if OK
|
||||||
|
*/
|
||||||
|
public function create(User $user, $notrigger = 0)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$error = 0;
|
||||||
|
|
||||||
|
// Insert request
|
||||||
|
$sql = "INSERT INTO ".MAIN_DB_PREFIX."pos_cash_fence (";
|
||||||
|
$sql .= "entity";
|
||||||
|
$sql .= ", opening";
|
||||||
|
$sql .= ", status";
|
||||||
|
$sql .= ", date_creation";
|
||||||
|
$sql .= ", posmodule";
|
||||||
|
$sql .= ", posnumber";
|
||||||
|
$sql .= ") VALUES (";
|
||||||
|
$sql .= $conf->entity;
|
||||||
|
$sql .= ", ".$this->opening;
|
||||||
|
$sql .= ",1";
|
||||||
|
$sql .= ", now()";
|
||||||
|
$sql .= ", '".$this->posmodule."'";
|
||||||
|
$sql .= ", '".$this->posnumber."'";
|
||||||
|
$sql .= ")";
|
||||||
|
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$error++;
|
||||||
|
$this->errors[] = "Error ".$this->db->lasterror();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."pos_cash_fence");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Commit or rollback
|
||||||
|
if ($error) {
|
||||||
|
foreach ($this->errors as $errmsg) {
|
||||||
|
dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR);
|
||||||
|
$this->error .= ($this->error ? ', '.$errmsg : $errmsg);
|
||||||
|
}
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1 * $error;
|
||||||
|
} else {
|
||||||
|
$this->db->commit();
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function close(User $user, $notrigger = 0)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$error = 0;
|
||||||
|
|
||||||
|
// Update request
|
||||||
|
$sql = "UPDATE ".MAIN_DB_PREFIX."pos_cash_fence ";
|
||||||
|
$sql .= "SET";
|
||||||
|
$sql .= " day_close=DAYOFMONTH(NOW())";
|
||||||
|
$sql .= ", month_close=MONTH(NOW())";
|
||||||
|
$sql .= ", year_close=YEAR(NOW())";
|
||||||
|
$sql .= ", status=2";
|
||||||
|
$sql .= " where rowid=".$this->id;
|
||||||
|
$this->db->begin();
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::create", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if (!$resql) {
|
||||||
|
$error++;
|
||||||
|
$this->errors[] = "Error ".$this->db->lasterror();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$error) {
|
||||||
|
$this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."pos_cash_fence");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Commit or rollback
|
||||||
|
if ($error) {
|
||||||
|
foreach ($this->errors as $errmsg) {
|
||||||
|
dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR);
|
||||||
|
$this->error .= ($this->error ? ', '.$errmsg : $errmsg);
|
||||||
|
}
|
||||||
|
$this->db->rollback();
|
||||||
|
return -1 * $error;
|
||||||
|
} else {
|
||||||
|
$this->db->commit();
|
||||||
|
return $this->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load object in memory from database
|
||||||
|
*
|
||||||
|
* @param int $id Id object
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*/
|
||||||
|
public function fetch($id)
|
||||||
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
$sql = "SELECT";
|
||||||
|
$sql .= " *";
|
||||||
|
$sql .= " FROM ".MAIN_DB_PREFIX."pos_cash_fence";
|
||||||
|
$sql .= " WHERE rowid = ".$id;
|
||||||
|
$sql .= " AND entity = ".$conf->entity;
|
||||||
|
|
||||||
|
dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
if ($this->db->num_rows($resql)) {
|
||||||
|
$obj = $this->db->fetch_object($resql);
|
||||||
|
$this->opening = $obj->opening;
|
||||||
|
$this->status = $obj->status;
|
||||||
|
$this->date_creation = $obj->date_creation;
|
||||||
|
$this->year_close = $obj->year_close;
|
||||||
|
$this->month_close = $obj->month_close;
|
||||||
|
$this->day_close = $obj->day_close;
|
||||||
|
$this->posmodule = $obj->posmodule;
|
||||||
|
$this->posnumber = $obj->posnumber;
|
||||||
|
$this->id=$id;
|
||||||
|
}
|
||||||
|
$this->db->free($resql);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
$this->error = "Error ".$this->db->lasterror();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
303
htdocs/compta/cashcontrol/report.php
Normal file
303
htdocs/compta/cashcontrol/report.php
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
<?php
|
||||||
|
/* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||||
|
* Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
|
* Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
|
* Copyright (C) 2012 Vinícius Nogueira <viniciusvgn@gmail.com>
|
||||||
|
* Copyright (C) 2014 Florian Henry <florian.henry@open-cooncept.pro>
|
||||||
|
* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||||
|
* Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
|
||||||
|
* Copyright (C) 2017 Alexandre Spangaro <aspangaro@zendsi.com>
|
||||||
|
* Copyright (C) 2018 Andreu Bisquerra <jove@bisquerra.com>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file htdocs/compta/bank/bankentries_list.php
|
||||||
|
* \ingroup banque
|
||||||
|
* \brief List of bank transactions
|
||||||
|
*/
|
||||||
|
|
||||||
|
$res=@include("../main.inc.php");
|
||||||
|
if (! $res) $res=@include("../../main.inc.php");
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
||||||
|
|
||||||
|
$id = GETPOST('id','int');
|
||||||
|
|
||||||
|
$_GET['optioncss']="print";
|
||||||
|
include_once 'class/cashcontrol.class.php';
|
||||||
|
$cashcontrol= new CashControl($db);
|
||||||
|
$cashcontrol->fetch($id);
|
||||||
|
|
||||||
|
$limit = GETPOST('limit')?GETPOST('limit','int'):$conf->liste_limit;
|
||||||
|
$sortorder='ASC';
|
||||||
|
$sortfield='b.datev,b.dateo,b.rowid';
|
||||||
|
|
||||||
|
$arrayfields=array(
|
||||||
|
'b.rowid'=>array('label'=>$langs->trans("Ref"), 'checked'=>1),
|
||||||
|
'b.dateo'=>array('label'=>$langs->trans("DateOperationShort"), 'checked'=>1),
|
||||||
|
'b.num_chq'=>array('label'=>$langs->trans("Number"), 'checked'=>1),
|
||||||
|
'ba.ref'=>array('label'=>$langs->trans("BankAccount"), 'checked'=>1),
|
||||||
|
'b.debit'=>array('label'=>$langs->trans("Debit"), 'checked'=>1, 'position'=>600),
|
||||||
|
'b.credit'=>array('label'=>$langs->trans("Credit"), 'checked'=>1, 'position'=>605),
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* View
|
||||||
|
*/
|
||||||
|
|
||||||
|
llxHeader('', $langs->trans("CashControl"), '', '', 0, 0, array(), array(), $param);
|
||||||
|
|
||||||
|
$sql = "SELECT b.rowid, b.dateo as do, b.datev as dv, b.amount, b.label, b.rappro as conciliated, b.num_releve, b.num_chq,";
|
||||||
|
$sql.= " b.fk_account, b.fk_type,";
|
||||||
|
$sql.= " ba.rowid as bankid, ba.ref as bankref,";
|
||||||
|
$sql.= " bu.url_id,";
|
||||||
|
$sql.= " f.module_source, f.facnumber as facnumber";
|
||||||
|
$sql.= " FROM ";
|
||||||
|
if ($bid) $sql.= MAIN_DB_PREFIX."bank_class as l,";
|
||||||
|
$sql.= " ".MAIN_DB_PREFIX."bank_account as ba,";
|
||||||
|
$sql.= " ".MAIN_DB_PREFIX."bank as b";
|
||||||
|
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."bank_url as bu ON bu.fk_bank = b.rowid AND type = 'payment'";
|
||||||
|
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."facture as f ON bu.url_id = f.rowid";
|
||||||
|
$sql.= " WHERE b.fk_account = ba.rowid";
|
||||||
|
$sql.= " AND f.module_source='$cashcontrol->posmodule'";
|
||||||
|
$sql.= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||||
|
|
||||||
|
$sql.=" AND b.datec>'".$cashcontrol->date_creation."'";
|
||||||
|
if ($cashcontrol->date_close>0) $sql.=" AND b.datec<'".$cashcontrol->date_close."'";
|
||||||
|
$sql.=" AND (b.fk_account=";
|
||||||
|
$sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CASH;
|
||||||
|
$sql.=" or b.fk_account=";
|
||||||
|
$sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CB;
|
||||||
|
$sql.=")";
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$num = $db->num_rows($resql);
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
|
print "<center><h2>";
|
||||||
|
if ($cashcontrol->status==2) print "Cashcontrol ".$cashcontrol->id;
|
||||||
|
else print $langs->trans("Cashcontrol")." - ".$langs->trans("Draft");
|
||||||
|
print "<br>".$langs->trans("DateCreationShort").": ".dol_print_date($cashcontrol->date_creation, 'day')."</h2></center>";
|
||||||
|
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive">';
|
||||||
|
print '<table class="tagtable liste">'."\n";
|
||||||
|
|
||||||
|
// Fields title
|
||||||
|
print '<tr class="liste_titre">';
|
||||||
|
print_liste_field_titre($arrayfields['b.rowid']['label'],$_SERVER['PHP_SELF'],'b.rowid','',$param,'',$sortfield,$sortorder);
|
||||||
|
print_liste_field_titre($arrayfields['b.dateo']['label'],$_SERVER['PHP_SELF'],'b.dateo','',$param,'align="left"',$sortfield,$sortorder);
|
||||||
|
print_liste_field_titre($arrayfields['ba.ref']['label'],$_SERVER['PHP_SELF'],'ba.ref','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
|
print_liste_field_titre($arrayfields['b.debit']['label'],$_SERVER['PHP_SELF'],'b.amount','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
|
print_liste_field_titre($arrayfields['b.credit']['label'],$_SERVER['PHP_SELF'],'b.amount','',$param,'align="right"',$sortfield,$sortorder);
|
||||||
|
print "</tr>\n";
|
||||||
|
|
||||||
|
$balance = 0; // For balance
|
||||||
|
$balancecalculated = false;
|
||||||
|
$posconciliatecol = 0;
|
||||||
|
|
||||||
|
// Loop on each record
|
||||||
|
$sign = 1;
|
||||||
|
|
||||||
|
$totalarray=array();
|
||||||
|
while ($i < min($num,$limit))
|
||||||
|
{
|
||||||
|
$objp = $db->fetch_object($resql);
|
||||||
|
|
||||||
|
// If we are in a situation where we need/can show balance, we calculate the start of balance
|
||||||
|
if (! $balancecalculated && (! empty($arrayfields['balancebefore']['checked']) || ! empty($arrayfields['balance']['checked'])) && $mode_balance_ok)
|
||||||
|
{
|
||||||
|
if (! $account)
|
||||||
|
{
|
||||||
|
dol_print_error('', 'account is not defined but $mode_balance_ok is true');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop on each record before
|
||||||
|
$sign = 1;
|
||||||
|
$i = 0;
|
||||||
|
$sqlforbalance='SELECT SUM(b.amount) as balance';
|
||||||
|
$sqlforbalance.= " FROM ";
|
||||||
|
$sqlforbalance.= " ".MAIN_DB_PREFIX."bank_account as ba,";
|
||||||
|
$sqlforbalance.= " ".MAIN_DB_PREFIX."bank as b";
|
||||||
|
$sqlforbalance.= " WHERE b.fk_account = ba.rowid";
|
||||||
|
$sqlforbalance.= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||||
|
$sqlforbalance.= " AND b.fk_account = ".$account;
|
||||||
|
$sqlforbalance.= " AND (b.datev < '" . $db->idate($db->jdate($objp->dv)) . "' OR (b.datev = '" . $db->idate($db->jdate($objp->dv)) . "' AND (b.dateo < '".$db->idate($db->jdate($objp->do))."' OR (b.dateo = '".$db->idate($db->jdate($objp->do))."' AND b.rowid < ".$objp->rowid."))))";
|
||||||
|
$resqlforbalance = $db->query($sqlforbalance);
|
||||||
|
if ($resqlforbalance)
|
||||||
|
{
|
||||||
|
$objforbalance = $db->fetch_object($resqlforbalance);
|
||||||
|
if ($objforbalance)
|
||||||
|
{
|
||||||
|
$balance = $objforbalance->balance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else dol_print_error($db);
|
||||||
|
|
||||||
|
$balancecalculated=true;
|
||||||
|
|
||||||
|
// Output a line with start balance
|
||||||
|
if ($user->rights->banque->consolidate && $action == 'reconcile')
|
||||||
|
{
|
||||||
|
$tmpnbfieldbeforebalance=0;
|
||||||
|
$tmpnbfieldafterbalance=0;
|
||||||
|
$balancefieldfound=false;
|
||||||
|
foreach($arrayfields as $key => $val)
|
||||||
|
{
|
||||||
|
if ($key == 'balancebefore' || $key == 'balance')
|
||||||
|
{
|
||||||
|
$balancefieldfound=true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (! empty($arrayfields[$key]['checked']))
|
||||||
|
{
|
||||||
|
if (! $balancefieldfound) $tmpnbfieldbeforebalance++;
|
||||||
|
else $tmpnbfieldafterbalance++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print '<tr class="oddeven trforbreak">';
|
||||||
|
if ($tmpnbfieldbeforebalance)
|
||||||
|
{
|
||||||
|
print '<td colspan="'.$tmpnbfieldbeforebalance.'">';
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
print '<td align="right">';
|
||||||
|
print price(price2num($balance, 'MT'), 1, $langs);
|
||||||
|
print '</td>';
|
||||||
|
print '<td colspan="'.($tmpnbfieldafterbalance+3).'">';
|
||||||
|
print '</td>';
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$balance = price2num($balance + ($sign * $objp->amount),'MT');
|
||||||
|
|
||||||
|
if (empty($cachebankaccount[$objp->bankid]))
|
||||||
|
{
|
||||||
|
$bankaccounttmp = new Account($db);
|
||||||
|
$bankaccounttmp->fetch($objp->bankid);
|
||||||
|
$cachebankaccount[$objp->bankid]=$bankaccounttmp;
|
||||||
|
$bankaccount = $bankaccounttmp;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$bankaccount = $cachebankaccount[$objp->bankid];
|
||||||
|
}
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
|
||||||
|
if ($first==""){
|
||||||
|
print '<td>'.$langs->trans("InitialBankBalance").'</td><td></td><td></td><td></td><td align="right">'.price($cashcontrol->opening).'</td></tr>';
|
||||||
|
print '<tr class="oddeven">';
|
||||||
|
$first="no";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ref
|
||||||
|
print '<td align="left" class="nowrap">';
|
||||||
|
print $objp->facnumber;
|
||||||
|
print '</td>';
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
|
||||||
|
|
||||||
|
// Date ope
|
||||||
|
print '<td align="left" class="nowrap">';
|
||||||
|
print '<span id="dateoperation_'.$objp->rowid.'">'.dol_print_date($db->jdate($objp->do),"day")."</span>";
|
||||||
|
print "</td>\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
|
||||||
|
// Bank account
|
||||||
|
print '<td align="right" class="nowrap">';
|
||||||
|
print $bankaccount->getNomUrl(1);
|
||||||
|
if ($sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CASH==$bankaccount->rowid) $cash+=$objp->amount;
|
||||||
|
if ($sql.=$conf->global->CASHDESK_ID_BANKACCOUNT_CB==$bankaccount->rowid) $bank+=$objp->amount;
|
||||||
|
print "</td>\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
|
||||||
|
// Debit
|
||||||
|
print '<td align="right">';
|
||||||
|
if ($objp->amount < 0)
|
||||||
|
{
|
||||||
|
print price($objp->amount * -1);
|
||||||
|
$totalarray['totaldeb'] += $objp->amount;
|
||||||
|
}
|
||||||
|
print "</td>\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
if (! $i) $totalarray['totaldebfield']=$totalarray['nbfield'];
|
||||||
|
|
||||||
|
// Credit
|
||||||
|
print '<td align="right">';
|
||||||
|
if ($objp->amount > 0)
|
||||||
|
{
|
||||||
|
print price($objp->amount);
|
||||||
|
$totalarray['totalcred'] += $objp->amount;
|
||||||
|
}
|
||||||
|
print "</td>\n";
|
||||||
|
if (! $i) $totalarray['nbfield']++;
|
||||||
|
if (! $i) $totalarray['totalcredfield']=$totalarray['nbfield'];
|
||||||
|
|
||||||
|
print "</tr>";
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show total line
|
||||||
|
if (isset($totalarray['totaldebfield']) || isset($totalarray['totalcredfield']))
|
||||||
|
{
|
||||||
|
print '<tr class="liste_total">';
|
||||||
|
$i=0;
|
||||||
|
while ($i < $totalarray['nbfield'])
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
if ($i == 1)
|
||||||
|
{
|
||||||
|
if ($num < $limit && empty($offset)) print '<td align="left">'.$langs->trans("Total").'</td>';
|
||||||
|
else print '<td align="left">'.$langs->trans("Totalforthispage").'</td>';
|
||||||
|
}
|
||||||
|
elseif ($totalarray['totaldebfield'] == $i) print '<td align="right">'.price(-1 * $totalarray['totaldeb']).'</td>';
|
||||||
|
elseif ($totalarray['totalcredfield'] == $i) print '<td align="right">'.price($totalarray['totalcred']).'</td>';
|
||||||
|
else print '<td></td>';
|
||||||
|
}
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
|
|
||||||
|
print "</table>";
|
||||||
|
|
||||||
|
$cash=$cash+$cashcontrol->opening;
|
||||||
|
print "<div style='text-align: right'><h2>".$langs->trans("Cash").": ".price($cash)."<br><br>".$langs->trans("PaymentTypeCB").": ".price($bank)."</h2></div>";
|
||||||
|
|
||||||
|
|
||||||
|
//save totals to DB
|
||||||
|
$sql = "UPDATE ".MAIN_DB_PREFIX."pos_cash_fence ";
|
||||||
|
$sql .= "SET";
|
||||||
|
$sql .= " cash='".$cash."'";
|
||||||
|
$sql .= ", card='".$bank."'";
|
||||||
|
$sql .= " where rowid=".$id;
|
||||||
|
$db->query($sql);
|
||||||
|
|
||||||
|
print "</div>";
|
||||||
|
|
||||||
|
print '</form>';
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
llxFooter();
|
||||||
|
|
||||||
|
$db->close();
|
||||||
@ -1312,6 +1312,13 @@ function print_left_eldy_menu($db,$menu_array_before,$menu_array_after,&$tabMenu
|
|||||||
$newmenu->add("/compta/paiement/cheque/list.php?leftmenu=checks_bis&mainmenu=bank",$langs->trans("List"),1,$user->rights->banque->cheque);
|
$newmenu->add("/compta/paiement/cheque/list.php?leftmenu=checks_bis&mainmenu=bank",$langs->trans("List"),1,$user->rights->banque->cheque);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Cash Control
|
||||||
|
if ($conf->takepos->enabled or $conf->cashdesk->enabled){
|
||||||
|
$newmenu->add("/compta/cashcontrol/cashcontrol.php?action=list",$langs->trans("CashControl"),0,1, '', $mainmenu, 'cashcontrol');
|
||||||
|
$newmenu->add("/compta/cashcontrol/cashcontrol.php?action=list",$langs->trans("List"),1,1);
|
||||||
|
$newmenu->add("/compta/cashcontrol/cashcontrol.php?action=create",$langs->trans("New"),1,1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
34
htdocs/install/mysql/tables/llx_pos_cash_fence.sql
Normal file
34
htdocs/install/mysql/tables/llx_pos_cash_fence.sql
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
-- Copyright (C) 2018 Andreu Bisquerra <jove@bisquerra.com>
|
||||||
|
--
|
||||||
|
-- This program is free software: you can redistribute it and/or modify
|
||||||
|
-- it under the terms of the GNU General Public License as published by
|
||||||
|
-- the Free Software Foundation, either version 3 of the License, or
|
||||||
|
-- (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This program is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
-- GNU General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU General Public License
|
||||||
|
-- along with this program. If not, see http://www.gnu.org/licenses/.
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE llx_pos_cash_fence(
|
||||||
|
rowid INTEGER AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
entity INTEGER DEFAULT 1 NOT NULL,
|
||||||
|
label VARCHAR(255),
|
||||||
|
opening double(24,8) default 0,
|
||||||
|
cash double(24,8) default 0,
|
||||||
|
card double(24,8) default 0,
|
||||||
|
status INTEGER,
|
||||||
|
date_creation DATETIME NOT NULL,
|
||||||
|
day_close INTEGER,
|
||||||
|
month_close INTEGER,
|
||||||
|
year_close INTEGER,
|
||||||
|
posmodule VARCHAR(30),
|
||||||
|
posnumber VARCHAR(30),
|
||||||
|
fk_user_valid integer,
|
||||||
|
tms TIMESTAMP NOT NULL,
|
||||||
|
import_key VARCHAR(14)
|
||||||
|
) ENGINE=innodb;
|
||||||
Loading…
Reference in New Issue
Block a user