From 56ea6818ae221c8aa8aed0743deca3f621ac1657 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 23355: 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> --- .../prog/en/includes/pos-menu.inc | 1 + .../prog/en/modules/pos/registers.tt | 149 ++++++++++++++++++ .../prog/en/modules/tools/tools-home.tt | 8 + pos/registers.pl | 69 ++++++++ 4 files changed, 227 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 b30beb3422..d8cb71cfd5 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_cash_management_manage_cash_registers || CAN_user_parameters_manage_auth_values) %] 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..b06a4f5b0f --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/registers.tt @@ -0,0 +1,149 @@ +[% USE raw %] +[% USE Asset %] +[% USE Koha %] +[% USE KohaDates %] +[% USE AuthorisedValues %] +[% 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> + + + + <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..bf74f9f7af --- /dev/null +++ b/pos/registers.pl @@ -0,0 +1,69 @@ +#!/usr/bin/perl +# +# c 2015 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 $q = CGI->new(); + +my ( $template, $loggedinuser, $cookie, $user_flags ) = get_template_and_user( + { + template_name => 'pos/registers.tt', + query => $q, + 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 = $q->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( $q, $cookie, $template->output ); -- 2.20.1