@@ -, +, @@ --- Koha/Cash/Register/Action.pm | 99 +++++++++++++++++++ .../prog/en/modules/pos/register.tt | 55 ++++++++++- 2 files changed, 153 insertions(+), 1 deletion(-) --- a/Koha/Cash/Register/Action.pm +++ a/Koha/Cash/Register/Action.pm @@ -48,6 +48,105 @@ 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', + group_by => 'debit.debit_type_code', + 'select' => [ { sum => 'me.amount' }, 'debit.debit_type_code' ], + 'as' => [ 'total', 'debit_code' ], + } + ); + + my $outgoing_summary = Koha::Account::Offsets->search( + { + 'me.debit_id' => + { '-in' => $outgoing_transactions->_resultset->as_query }, + 'me.credit_id' => { '!=' => undef } + }, + { + join => 'credit', + group_by => 'credit.credit_type_code', + 'select' => [ { sum => 'me.amount' }, 'credit.credit_type_code' ], + 'as' => [ 'total', 'credit_code' ], + } + ); + + my @income = map { $_->unblessed } $income_summary->as_list; + my @outgoing = map { $_->unblessed } $outgoing_summary->as_list; + $summary = { + from_date => $previous ? $previous->timestamp : undef, + to_date => $self->timestamp, + income => \@income, + outgoing => \@outgoing, + total => $outgoing_transactions->total + $income_transactions->total, + bankable => + $outgoing_transactions->search( { payment_type => 'CASH' } )->total + + $income_transactions->search( { payment_type => 'CASH' } )->total + }; + + return $summary; +} + =head2 Internal methods =cut --- a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/pos/register.tt @@ -39,7 +39,8 @@

Summary