Bugzilla – Attachment 108825 Details for
Bug 26172
Add a cashup summary view (with option to print)
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 26172: Add cashup summary view modal
Bug-26172-Add-cashup-summary-view-modal.patch (text/plain), 8.93 KB, created by
Martin Renvoize (ashimema)
on 2020-08-21 14:23:26 UTC
(
hide
)
Description:
Bug 26172: Add cashup summary view modal
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2020-08-21 14:23:26 UTC
Size:
8.93 KB
patch
obsolete
>From 7adab3918eafd59b0f578449439ddb12d9ac7f84 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Fri, 7 Aug 2020 10:15:20 +0100 >Subject: [PATCH] Bug 26172: Add cashup summary view modal > >This patch adds a cashup summary modal to the register details page. > >Test plan >1/ Enable Cash Registers and Point of Sale >2/ Enable some debit_types as 'Sale items' >3/ Perform a series of transactions >4/ Perform a 'Cashup' on the register >5/ Note the new '(Summary)' link next to the last cashup on the register >page. >6/ Click the link and confirm the modal contains the pertinent >information >--- > Koha/Cash/Register/Action.pm | 116 ++++++++++++++++++ > .../prog/en/modules/pos/register.tt | 59 ++++++++- > 2 files changed, 174 insertions(+), 1 deletion(-) > >diff --git a/Koha/Cash/Register/Action.pm b/Koha/Cash/Register/Action.pm >index f9e0aae77d..23b9f6ffb3 100644 >--- a/Koha/Cash/Register/Action.pm >+++ b/Koha/Cash/Register/Action.pm >@@ -48,6 +48,122 @@ sub manager { > return Koha::Patron->_new_from_dbic($rs); > } > >+=head3 register >+ >+Return the register linked to this cash register::action >+ >+=cut >+ >+sub register { >+ my ($self) = @_; >+ my $rs = $self->_result->register; >+ return unless $rs; >+ return Koha::Cash::Register->_new_from_dbic($rs); >+} >+ >+=head3 cashup_summary >+ >+ my $cashup_summary = $action->cashup_summary; >+ >+Return a hashref containing a summary of transactions that make up this cashup action. >+ >+=cut >+ >+sub cashup_summary { >+ my ($self) = @_; >+ my $summary; >+ my $prior_cashup = Koha::Cash::Register::Actions->search( >+ { >+ 'code' => 'CASHUP', >+ 'timestamp' => { '<' => $self->timestamp }, >+ register_id => $self->register_id >+ }, >+ { >+ order_by => { '-desc' => [ 'timestamp', 'id' ] }, >+ rows => 1 >+ } >+ ); >+ >+ my $previous = $prior_cashup->single; >+ >+ my $conditions = >+ $previous >+ ? { >+ 'date' => { >+ '-between' => >+ [ $previous->_result->get_column('timestamp'), $self->timestamp ] >+ } >+ } >+ : { 'date' => { '<' => $self->timestamp } }; >+ >+ my $outgoing_transactions = $self->register->accountlines->search( >+ { %{$conditions}, credit_type_code => undef }, >+ { select => 'accountlines_id' } ); >+ my $income_transactions = $self->register->accountlines->search( >+ { %{$conditions}, debit_type_code => undef }, >+ { select => 'accountlines_id' } ); >+ >+ my $income_summary = Koha::Account::Offsets->search( >+ { >+ 'me.credit_id' => >+ { '-in' => $income_transactions->_resultset->as_query }, >+ 'me.debit_id' => { '!=' => undef } >+ }, >+ { >+ join => { 'debit' => 'debit_type_code' }, >+ group_by => [ 'debit.debit_type_code', 'debit_type_code.description' ], >+ 'select' => [ { sum => 'me.amount' }, 'debit.debit_type_code', 'debit_type_code.description' ], >+ 'as' => [ 'total', 'debit_type_code', 'debit_description' ], >+ } >+ ); >+ >+ my $outgoing_summary = Koha::Account::Offsets->search( >+ { >+ 'me.debit_id' => >+ { '-in' => $outgoing_transactions->_resultset->as_query }, >+ 'me.credit_id' => { '!=' => undef } >+ }, >+ { >+ join => { 'credit' => 'credit_type_code' }, >+ group_by => [ 'credit.credit_type_code', 'credit_type_code.description' ], >+ 'select' => [ { sum => 'me.amount' }, 'credit.credit_type_code', 'credit_type_code.description' ], >+ 'as' => [ 'total', 'credit_type_code', 'credit_description' ], >+ } >+ ); >+ >+ my @income = map { >+ { >+ total => $_->get_column('total'), >+ debit_type_code => $_->get_column('debit_type_code'), >+ debit_type => { description => $_->get_column('debit_description') } >+ } >+ } $income_summary->as_list; >+ my @outgoing = map { >+ { >+ total => $_->get_column('total'), >+ credit_type_code => $_->get_column('credit_type_code'), >+ credit_type => { description => $_->get_column('credit_description') } >+ } >+ } $outgoing_summary->as_list; >+ $summary = { >+ from_date => $previous ? $previous->timestamp : undef, >+ to_date => $self->timestamp, >+ income => \@income, >+ outgoing => \@outgoing, >+ total => ( $outgoing_transactions->total * -1 ) + >+ ( $income_transactions->total * -1 ), >+ bankable => ( >+ $outgoing_transactions->search( { payment_type => 'CASH' } ) >+ ->total * -1 >+ ) + ( >+ $income_transactions->search( { payment_type => 'CASH' } )->total * >+ -1 >+ ) >+ }; >+ >+ return $summary; >+} >+ > =head2 Internal methods > > =cut >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt >index f995580f33..1a8371c851 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt >@@ -47,7 +47,8 @@ > <h2>Summary</h2> > <ul> > [% IF register.last_cashup %] >- <li>Last cashup: [% register.last_cashup.timestamp | $KohaDates with_hours => 1 %]</li> >+ <li>Last cashup: [% register.last_cashup.timestamp | $KohaDates with_hours => 1 %] (<a data-toggle="modal" href="#cashupSummaryModal" class="button">Summary</a>)</li> >+ > [% END %] > <li>Float: [% register.starting_float | $Price %]</li> > <li>Total income (cash): [% accountlines.credits_total * -1 | $Price %] ([% accountlines.credits_total(payment_type => 'CASH') * -1 | $Price %])</li> >@@ -291,6 +292,62 @@ > </form> <!-- /#refund_form --> > </div> <!-- /#issueRefundModal --> > >+ <!-- Cashup summary modal --> >+ [% IF register.last_cashup %] >+ <div class="modal" id="cashupSummaryModal" tabindex="-1" role="dialog" aria-labelledby="cashupSummaryLabel"> >+ <div class="modal-dialog" role="document"> >+ <div class="modal-content"> >+ <div class="modal-header"> >+ <button type="button" class="closebtn" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> >+ <h4 class="modal-title" id="cashupSummaryLabel">Cashup summary</h4> >+ </div> >+ <div class="modal-body"> >+ <ul> >+ <li>Cash register: [% register.description | html %]</li> >+ <li>Period: [% register.last_cashup.cashup_summary.from_date | $KohaDates with_hours => 1 %] to [% register.last_cashup.cashup_summary.to_date | $KohaDates with_hours => 1 %]</li> >+ </ul> >+ <table> >+ <thead> >+ <tr> >+ <th>Type</th> >+ <th>Total</th> >+ </tr> >+ </thead> >+ <tbody> >+ [%- FOREACH out IN register.last_cashup.cashup_summary.outgoing -%] >+ <tr> >+ <td>[%- PROCESS account_type_description account=out -%]</td> >+ <td>[% out.total * -1 | $Price %]</td> >+ </tr> >+ [%- END -%] >+ [%- FOREACH in IN register.last_cashup.cashup_summary.income -%] >+ <tr> >+ <td>[%- PROCESS account_type_description account=in -%]</td> >+ <td>[% in.total * -1 | $Price %]</td> >+ </tr> >+ [%- END -%] >+ </tbody> >+ <tfoot> >+ <tr> >+ <td>Total</td> >+ <td>[% register.last_cashup.cashup_summary.total | $Price %]</td> >+ </tr> >+ <tr> >+ <td>Bankable</td> >+ <td>[% register.last_cashup.cashup_summary.bankable | $Price %]</td> >+ </tr> >+ >+ </tfoot> >+ </table> >+ </div> <!-- /.modal-body --> >+ <div class="modal-footer"> >+ <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> >+ </div> <!-- /.modal-footer --> >+ </div> <!-- /.modal-content --> >+ </div> <!-- /.modal-dialog --> >+ </div> <!-- /#cashupSummaryModal --> >+ [% END %] >+ > [% MACRO jsinclude BLOCK %] > [% INCLUDE 'datatables.inc' %] > [% Asset.js("lib/jquery/plugins/rowGroup/dataTables.rowGroup.min.js") | $raw %] >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 26172
:
108093
|
108095
|
108523
|
108817
|
108818
|
108822
|
108825
|
108826
|
108827
|
111162
|
111163
|
111164
|
111598
|
111599
|
111600
|
111601
|
111629
|
111630
|
111631
|
111632
|
111633
|
111634
|
111668
|
111683
|
111691
|
111692
|
111731
|
111732
|
112907
|
112908
|
112909