@ -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