From c2959e55270aaba52b560ec00d2be0a61d72597a Mon Sep 17 00:00:00 2001
From: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Date: Thu, 9 Jan 2020 13:53:09 +0000
Subject: [PATCH] Bug 24492: Add branch details page
This patch adds a new 'branch details' page to the POS system which
displays a summary of the cash register transactions for a branch
since each register was last cashed up. It also allows for cashing
up individual registers or cashing up all registers at a given branch
in one transaction.
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: David Nind <david@davidnind.com>
---
.../intranet-tmpl/prog/en/includes/pos-menu.inc | 1 +
.../intranet-tmpl/prog/en/modules/pos/registers.tt | 151 +++++++++++++++++++++
.../prog/en/modules/tools/tools-home.tt | 8 ++
pos/registers.pl | 69 ++++++++++
4 files changed, 229 insertions(+)
create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt
create mode 100755 pos/registers.pl
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/pos-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/pos-menu.inc
index c9579b5492..514528e25a 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/pos-menu.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/pos-menu.inc
@@ -4,6 +4,7 @@
<h5>Point of sale</h5>
<ul>
<li><a href="/cgi-bin/koha/pos/register.pl">Register details</a></li>
+ <li><a href="/cgi-bin/koha/pos/registers.pl">Branch details</a></li>
</ul>
[% END %]
[% IF ( CAN_user_parameters_manage_cash_registers || CAN_user_parameters_manage_accounts) %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt
new file mode 100644
index 0000000000..076d0664d9
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt
@@ -0,0 +1,151 @@
+[% USE raw %]
+[% USE Asset %]
+[% USE Koha %]
+[% USE KohaDates %]
+[% USE Price %]
+[% SET footerjs = 1 %]
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Koha › Cashup</title>
+[% INCLUDE 'doc-head-close.inc' %]
+</head>
+
+<body id="cashup" class="pos">
+[% INCLUDE 'header.inc' %]
+[% INCLUDE 'circ-search.inc' %]
+
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › Point of sale</div>
+
+<div class="main container-fluid">
+ <div class="row">
+ <div class="col-sm-10 col-sm-push-2">
+ <main>
+ [% IF ( error_registers ) %]
+ <div id="error_message" class="dialog alert">
+ You must have at least one cash register associated with this branch before you can record payments.
+ </div>
+ [% ELSE %]
+ <div id="toolbar" class="btn-toolbar">
+ <a class="cashup_all btn btn-default" href="/cgi-bin/koha/pos/registers.pl?op=cashup"><i class="fa fa-money"></i> Cashup all</a>
+ </div>
+
+ <h1>Branch transaction details for [% library.branchname | html %]</h1>
+
+ <h2>Summary</h2>
+ <ul>
+ <li>Total income (cash): ()</li>
+ <li>Total outgoing (cash): ()</li>
+ <li>Total bankable: </li>
+ </ul>
+
+ <table id="registers" class="table_registers">
+ <thead>
+ <th>
+ ID
+ </th>
+ <th>
+ Name
+ </th>
+ <th>
+ Description
+ </th>
+ <th>
+ Last cashup
+ </th>
+ <th>
+ Float
+ </th>
+ <th>
+ Bankable
+ </th>
+ <th>
+ Actions
+ </th>
+ </thead>
+ <tbody>
+ [% FOREACH register IN registers %]
+ <tr>
+ <td>
+ [% register.id | html %]
+ </td>
+ <td>
+ <a href="/cgi-bin/koha/pos/register.pl?registerid=[% register.id | uri %]">[% register.name | html %]</a>
+ </td>
+ <td>
+ [% register.description | html %]
+ </td>
+ <td>
+ [%- IF register.last_cashup -%]
+ [% register.last_cashup.timestamp | $KohaDates with_hours => 1 %] ([% register.last_cashup.amount | $Price %])
+ [%- ELSE -%]
+ No last cashup
+ [%- END -%]
+ </td>
+ <td>
+ [% register.starting_float | $Price %]
+ </td>
+ <td>
+ [% register.outstanding_accountlines.total * -1 | $Price %]
+ </td>
+ <td>
+ <a class="cashup_individual btn btn-default" href="/cgi-bin/koha/pos/register.pl?registerid=[% register.id | uri %]&op=cashup"><i class="fa fa-money"></i> Record cashup</a>
+ </td>
+ </tr>
+ [% END %]
+ </tbody>
+ <tfoot>
+ <tr>
+ <td colspan="5">Total bankable:</td>
+ <td></td>
+ <td></td>
+ </tr>
+ </tfoot>
+ </table>
+ [% END %]
+ </main>
+ </div>
+
+ <div class="col-sm-2 col-sm-pull-10">
+ <aside>
+ [% INCLUDE 'pos-menu.inc' %]
+ </aside>
+ </div>
+
+ </div> <!-- /.row -->
+
+[% MACRO jsinclude BLOCK %]
+ [% INCLUDE 'datatables.inc' %]
+ <script>
+ $(document).ready(function() {
+ var registers_table = $("#registers").dataTable($.extend(true, {}, dataTablesDefaults, {
+ "bFilter": false,
+ "paginationType": "full",
+ "footerCallback": function ( row, data, start, end, display ) {
+ var api = this.api(), data;
+
+ // Remove the formatting to get integer data for summation
+ var intVal = function ( i ) {
+ return typeof i === 'string' ?
+ i.replace(/[\$,]/g, '')*1 :
+ typeof i === 'number' ?
+ i : 0;
+ };
+
+ // Total over all pages
+ total = api
+ .column( 5 )
+ .data()
+ .reduce( function (a, b) {
+ return intVal(a) + intVal(b);
+ }, 0 );
+
+ // Update footer
+ $( api.column( 5 ).footer() ).html(
+ total
+ );
+ }
+ }));
+ });
+ </script>
+[% END %]
+
+[% INCLUDE 'intranet-bottom.inc' %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt
index 732563ce0a..9b2e257326 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt
@@ -129,6 +129,14 @@
<dd>Access files stored on the server, like log files or reports</dd>
[% END %]
+ [% IF ( Koha.Preference('UseCashRegisters') && CAN_user_cash_management_manage_cash_registers ) %]
+ [% IF ( CAN_user_cash_management_manage_cash_registers ) %]
+ <dt><a href="/cgi-bin/koha/pos/registers.pl">Cashup registers</a></dt>
+ <dd>Perfrom cashup actions on cash registers</dd>
+ [% END %]
+ [% END %]
+
+
</dl>
</div>
diff --git a/pos/registers.pl b/pos/registers.pl
new file mode 100755
index 0000000000..a6b9dc2ccb
--- /dev/null
+++ b/pos/registers.pl
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+#
+# c 2020 PTFS-Europe Ltd
+#
+# This file is part of Koha.
+#
+# Koha 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 2 of the License, or (at your option) any later
+# version.
+#
+# Koha 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
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA 02111-1307 USA
+#
+
+use Modern::Perl;
+use CGI;
+use C4::Auth;
+use C4::Output;
+use C4::Context;
+
+use Koha::Cash::Registers;
+use Koha::Database;
+
+my $input = CGI->new();
+
+my ( $template, $loggedinuser, $cookie, $user_flags ) = get_template_and_user(
+ {
+ template_name => 'pos/registers.tt',
+ query => $input,
+ type => 'intranet',
+ authnotrequired => 0,
+ }
+);
+my $logged_in_user = Koha::Patrons->find($loggedinuser) or die "Not logged in";
+
+my $library = Koha::Libraries->find( C4::Context->userenv->{'branch'} );
+$template->param( library => $library );
+
+my $registers = Koha::Cash::Registers->search(
+ { branch => $library->id, archived => 0 },
+ { order_by => { '-asc' => 'name' } }
+);
+
+if ( !$registers->count ) {
+ $template->param( error_registers => 1 );
+}
+else {
+ $template->param( registers => $registers );
+}
+
+my $op = $input->param('op') // '';
+if ( $op eq 'cashup' ) {
+ for my $register ( $registers->as_list ) {
+ $register->add_cashup(
+ {
+ user_id => $logged_in_user->id,
+ amount => $register->outstanding_accountlines->total
+ }
+ );
+ }
+}
+
+output_html_with_http_headers( $input, $cookie, $template->output );
--
2.11.0