|
package SL::Controller::ChartOfAccounts;
|
|
|
|
use strict;
|
|
use parent qw(SL::Controller::Base);
|
|
|
|
use POSIX qw(strftime);
|
|
|
|
use SL::CA;
|
|
|
|
use SL::ReportGenerator;
|
|
use SL::Controller::Helper::ReportGenerator;
|
|
use SL::Locale::String;
|
|
|
|
use Rose::Object::MakeMethods::Generic (
|
|
scalar => [ qw(report) ],
|
|
);
|
|
|
|
__PACKAGE__->run_before(sub { $::auth->assert('report'); });
|
|
|
|
sub action_list {
|
|
my ($self) = @_;
|
|
|
|
if ( $::instance_conf->get_accounting_method eq 'cash' ) {
|
|
$::form->{method} = "cash";
|
|
}
|
|
|
|
$self->prepare_report;
|
|
$self->set_report_data;
|
|
$self->report->generate_with_headers;
|
|
}
|
|
|
|
# private functions
|
|
|
|
sub prepare_report {
|
|
my ($self) = @_;
|
|
|
|
$self->report(SL::ReportGenerator->new(\%::myconfig, $::form));
|
|
|
|
$self->report->{title} = t8 ('Chart of Accounts');
|
|
my @columns = qw(accno description debit credit);
|
|
my %column_defs = (
|
|
accno => { text => t8('Account') },
|
|
description => { text => t8('Description') },
|
|
debit => { text => t8('Debit') },
|
|
credit => { text => t8('Credit') },
|
|
);
|
|
|
|
$self->report->set_options(
|
|
std_column_visibility => 1,
|
|
controller_class => 'ChartOfAccounts',
|
|
output_format => 'HTML',
|
|
title => t8('Chart of Accounts'),
|
|
allow_pdf_export => 1,
|
|
allow_csv_export => 1,
|
|
attachment_basename => t8('chart_of_accounts') . strftime('_%Y%m%d', localtime time),
|
|
);
|
|
$self->report->set_columns(%column_defs);
|
|
$self->report->set_column_order(@columns);
|
|
|
|
$self->report->set_export_options(qw(list));
|
|
$self->report->set_options_from_form;
|
|
$self->report->set_sort_indicator($::form->{sort}, 1);
|
|
}
|
|
|
|
sub set_report_data {
|
|
my ($self) = @_;
|
|
|
|
my $debit_sum = 0.;
|
|
my $credit_sum = 0.;
|
|
|
|
# i tried to use the get_balance function from SL::DB::Manager::Chart here,
|
|
# but the results i got were different (numbers and defined balance/amount),
|
|
# the database queries in CA are more sophisticated, therefore i'm still using these for now,
|
|
# also performance wise they seem faster
|
|
CA->all_accounts(\%::myconfig, \%$::form);
|
|
|
|
my $formatted_zero = $::form->format_amount(\%::myconfig, 0., 2);
|
|
|
|
for my $chart (@{ $::form->{CA} }) {
|
|
my $balance = $chart->{amount};
|
|
|
|
my $link = "controller.pl?action=ListTransactions%2freport_settings&accno=$chart->{accno}&link=1";
|
|
if (defined($balance)) {
|
|
my %data = (
|
|
accno => { data => $chart->{accno}, link => $link },
|
|
description => { data => $chart->{description} },
|
|
debit => { data => $balance < 0 ? $::form->format_amount(\%::myconfig, $balance * -1., 2) : ''},
|
|
credit => { data => $balance >= 0 ? $::form->format_amount(\%::myconfig, $balance, 2) : ''},
|
|
);
|
|
$data{$_}->{align} = 'right' for qw(debit credit);
|
|
map { $data{$_}->{class} = 'listheading' } keys %data if ($chart->{charttype} eq "H") ;
|
|
$self->report->add_data(\%data);
|
|
|
|
if ($balance < 0) {
|
|
$debit_sum += $balance;
|
|
} else {
|
|
$credit_sum += $balance;
|
|
}
|
|
}
|
|
}
|
|
my %data_total = (
|
|
accno => { data => t8('Total') },
|
|
description => { data => '' },
|
|
debit => { data => $::form->format_amount(\%::myconfig, $debit_sum * -1., 2)},
|
|
credit => { data => $::form->format_amount(\%::myconfig, $credit_sum, 2)},
|
|
);
|
|
$data_total{$_}->{align} = 'right' for qw(debit credit);
|
|
$data_total{$_}->{class} = 'listtotal' for keys %data_total;
|
|
|
|
$self->report->add_data(\%data_total);
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=encoding utf-8
|
|
|
|
=head1 NAME
|
|
|
|
SL::Controller::ChartOfAccounts - Controller for the chart of accounts report
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
New controller for Reports -> Chart of Accounts.
|
|
|
|
This replaces the old bin/mozilla/ca.pl chart_of_accounts sub.
|
|
|
|
The rest of the functions from ca.pl are separated into the new ListTransactions.pm
|
|
controller.
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Displays a list of all accounts with their balance.
|
|
|
|
Clicking on an account number will open the form for Reports -> List Transactions, with
|
|
the account number preselected.
|
|
|
|
Export to PDF, CSV and Chart is possible.
|
|
|
|
=head1 CAVEATS / TODO
|
|
|
|
Database queries are still from SL::CA.
|
|
|
|
I tried to use the get_balance function from SL::DB::Manager::Chart here,
|
|
but the results i got were different (numbers and defined balance/amount).
|
|
The database queries in CA are more sophisticated, therefore i'm still using these for now.
|
|
Also performance wise they seem faster.
|
|
|
|
=head1 BUGS
|
|
|
|
None yet.
|
|
|
|
=head1 AUTHOR
|
|
|
|
Cem Aydin E<lt>cem.aydin@revamp-it.chE<gt>
|
|
|
|
=cut
|