From 10769b984c5201c393ae803b9b7f3e692b9c3f0f Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 20 May 2021 08:38:11 +0100 Subject: [PATCH] Bug 27779: Group payouts by type of debit they're applied against This patch adds additional grouping to the cashup summary output such that payouts are additionally grouped by the types of debit they're applied against. The cashup sumary modal is adapted to expose the descriptions at the grouping level too. Test plan 1/ Add a various transactions using a cash register (Using Point of Sale, Patron Accounts with payments etc). 2/ Refund some of the debts and pick the 'cash' option for payout. (ensure you pick a variety of debit types) 3/ Add some credit to a patron account, (either refund a debt as 'credit' or add a 'manual credit') 4/ Payout the credit as 'cash' on the patron account 5/ Cashup the register 6/ Inspect the cashup summary for your cashup. --- Koha/Cash/Register/Cashup.pm | 45 +++++++++++++++---- .../intranet-tmpl/prog/js/cashup_modal.js | 6 ++- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/Koha/Cash/Register/Cashup.pm b/Koha/Cash/Register/Cashup.pm index d3047036a4..4a8b0356d4 100644 --- a/Koha/Cash/Register/Cashup.pm +++ b/Koha/Cash/Register/Cashup.pm @@ -109,7 +109,7 @@ sub summary { { sum => 'me.amount' }, 'debit.debit_type_code', 'debit_type_code.description' ], - 'as' => [ 'total', 'debit_type_code', 'debit_description' ], + 'as' => [ 'total', 'debit_type_code', 'debit_description' ], order_by => { '-asc' => 'debit_type_code.description' }, } ); @@ -120,18 +120,40 @@ sub summary { '-in' => $payout_transactions->_resultset->get_column( 'accountlines_id')->as_query }, - 'me.credit_id' => { '!=' => undef } + 'me.credit_id' => { '!=' => undef }, + 'account_offsets_credits.debit_id' => { + '-not_in' => $payout_transactions->_resultset->get_column( + 'accountlines_id')->as_query + } }, { - join => { 'credit' => 'credit_type_code' }, - group_by => - [ 'credit.credit_type_code', 'credit_type_code.description' ], + join => { + 'credit' => [ + 'credit_type_code', + { + 'account_offsets_credits' => + { 'debit' => 'debit_type_code' } + } + ] + }, + group_by => [ + 'credit.credit_type_code', 'credit_type_code.description', + 'debit.debit_type_code', 'debit_type_code.description' + ], 'select' => [ { sum => 'me.amount' }, 'credit.credit_type_code', - 'credit_type_code.description' + 'credit_type_code.description', 'debit.debit_type_code', + 'debit_type_code.description' + ], + 'as' => [ + 'total', 'credit_type_code', + 'credit_description', 'debit_type_code', + 'debit_description' ], - 'as' => [ 'total', 'credit_type_code', 'credit_description' ], - order_by => { '-asc' => 'credit_type_code.description' }, + order_by => { + '-asc' => + [ 'credit_type_code.description', 'debit_type_code.description' ] + }, } ); @@ -147,7 +169,12 @@ sub summary { total => $_->get_column('total') * -1, credit_type_code => $_->get_column('credit_type_code'), credit_type => - { description => $_->get_column('credit_description') } + { description => $_->get_column('credit_description') }, + related_debit => { + debit_type_code => $_->get_column('debit_type_code'), + debit_type => + { description => $_->get_column('debit_description') } + } } } $payout_summary->as_list; diff --git a/koha-tmpl/intranet-tmpl/prog/js/cashup_modal.js b/koha-tmpl/intranet-tmpl/prog/js/cashup_modal.js index 01e8849e23..5e1aed3706 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/cashup_modal.js +++ b/koha-tmpl/intranet-tmpl/prog/js/cashup_modal.js @@ -16,7 +16,11 @@ $('#cashupSummaryModal').on('show.bs.modal', function(e) { var tbody = summary_modal.find('tbody') tbody.empty(); for (out of data.summary.payout_grouped) { - tbody.append('' + out.credit_type.description + '- ' + out.total + ''); + if ( out.credit_type_code == 'REFUND' ) { + tbody.append('' + out.credit_type.description + ' against ' + out.related_debit.debit_type.description + '- ' + out.total + ''); + } else { + tbody.append('' + out.credit_type.description + '- ' + out.total + ''); + } } for (income of data.summary.income_grouped) { -- 2.20.1