Projekt

Allgemein

Profil

Herunterladen (16,9 KB) Statistiken
| Zweig: | Markierung: | Revision:
package SL::Controller::DeliveryValueReport;

use strict;
use parent qw(SL::Controller::Base);

use Clone qw(clone);
use SL::DB::OrderItem;
use SL::DB::Order::TypeData qw(:types);
use SL::DB::Business;
use SL::Controller::Helper::GetModels;
use SL::Controller::Helper::ReportGenerator;
use SL::Locale::String;
use SL::Helper::ShippedQty;
use SL::AM;
use SL::DBUtils qw(selectall_as_map);
use List::MoreUtils qw(uniq);
use Carp;
use Data::Dumper;

use Rose::Object::MakeMethods::Generic (
'scalar --get_set_init' => [ qw(models vc all_employees all_businesses all_partsgroups) ],
);

__PACKAGE__->run_before(sub { $::auth->assert('delivery_value_report'); });

my %sort_columns = (
reqdate => t8('Reqdate'),
customer => t8('Customer'),
vendor => t8('Vendor'),
ordnumber => t8('Order'),
partnumber => t8('Part Number'),
description => t8('Description'),
qty => t8('Qty in Order'),
unit => t8('Unit'),
netto_qty => t8('Net value in Order'),
not_shipped_qty => t8('not shipped'),
netto_not_shipped_qty => t8('Net value without delivery orders'),
shipped_qty => t8('Qty in delivery orders'),
netto_shipped_qty => t8('Net Value in delivery orders'),
delivered_qty => t8('transferred in / out'),
netto_delivered_qty => t8('Net value transferred in / out'),
do_closed_qty => t8('Qty in closed delivery orders'),
netto_do_closed_qty => t8('Net value in closed delivery orders'),
);




#
# action
#

sub action_list {
my ($self) = @_;
$self->make_filter_summary;
$self->prepare_report;

my $orderitems = $self->models->get;
$self->calc_qtys_price($orderitems);
$self->setup_list_action_bar;
$self->report_generator_list_objects(report => $self->{report}, objects => $orderitems);
}

sub prepare_report {
my ($self) = @_;

my $vc = $self->vc;
my $report = SL::ReportGenerator->new(\%::myconfig, $::form);
my $csv_option = $::form->{report_generator_output_format};
$self->{report} = $report;

my @columns = qw(reqdate customer vendor ordnumber partnumber description unit qty netto_qty
not_shipped_qty netto_not_shipped_qty shipped_qty netto_shipped_qty delivered_qty
netto_delivered_qty do_closed_qty netto_do_closed_qty);


my @sortable = qw(reqdate customer vendor ordnumber partnumber description);

# if csv report export no units
my $rp_csv_mod = ($csv_option eq 'CSV') ? 1 : '';

my %column_defs = (
reqdate => { sub => sub { $_[0]->reqdate_as_date || $_[0]->order->reqdate_as_date } },
description => { sub => sub { $_[0]->description },
obj_link => sub { $self->link_to($_[0]->part) } },
partnumber => { sub => sub { $_[0]->part->partnumber },
obj_link => sub { $self->link_to($_[0]->part) } },
qty => { sub => sub { _format_qty($_[0], 'qty', $rp_csv_mod) } },
netto_qty => { sub => sub { _format_val($_[0], 'qty') },},
unit => { sub => sub { $_[0]->unit },
visible => $rp_csv_mod },
shipped_qty => { sub => sub { _format_qty($_[0], 'shipped_qty', $rp_csv_mod) } },
netto_shipped_qty => { sub => sub { _format_val($_[0], 'shipped_qty') },},
not_shipped_qty => { sub => sub { _format_qty($_[0], 'not_shipped_qty', $rp_csv_mod) } },
netto_not_shipped_qty => { sub => sub { _format_val($_[0], 'not_shipped_qty') },},
delivered_qty => { sub => sub { _format_qty($_[0], 'delivered_qty', $rp_csv_mod) } },
netto_delivered_qty => { sub => sub { _format_val($_[0], 'delivered_qty') },},
do_closed_qty => { sub => sub { _format_qty($_[0], 'do_closed_qty', $rp_csv_mod) },},
netto_do_closed_qty => { sub => sub { _format_val($_[0], 'do_closed_qty') },},
ordnumber => { sub => sub { $_[0]->order->ordnumber },
obj_link => sub { $self->link_to($_[0]->order) } },
vendor => { sub => sub { $_[0]->order->vendor->name },
visible => $vc eq 'vendor',
obj_link => sub { $self->link_to($_[0]->order->vendor) } },
customer => { sub => sub { $_[0]->order->customer->name },
visible => $vc eq 'customer',
obj_link => sub { $self->link_to($_[0]->order->customer) } },
);

$column_defs{$_}->{text} = $sort_columns{$_} for keys %column_defs;

$report->set_options(
std_column_visibility => 1,
controller_class => 'DeliveryValueReport',
output_format => 'HTML',
top_info_text => ($vc eq 'customer') ? t8('Delivery Value Report for currently open sales orders') :
t8('Delivery Value Report for currently outstanding purchase orders'),
title => $::locale->text('Delivery Value Report'),
allow_pdf_export => 1,
allow_csv_export => 1,
);
$report->set_columns(%column_defs);
$report->set_column_order(@columns);
$report->set_export_options(qw(list filter vc));
$report->set_options_from_form;
$self->models->disable_plugin('paginated') if $report->{options}{output_format} =~ /^(pdf|csv)$/i;
$self->models->finalize; # for filter laundering
$self->models->set_report_generator_sort_options(report => $report, sortable_columns => \@sortable);
$report->set_options(
raw_top_info_text => $self->render('delivery_value_report/report_top', { output => 0 }),
raw_bottom_info_text => $self->render('delivery_value_report/report_bottom', { output => 0 }, models => $self->models),
);
}




#
# filter
#

sub make_filter_summary {
my ($self) = @_;
my $vc = $self->vc;
my ($business, $employee, $partsgroup);

my $filter = $::form->{filter} || {};
my @filter_strings;

$business = SL::DB::Business->new(id => $filter->{order}{customer}{"business_id"})->load->description if $filter->{order}{customer}{"business_id"};
$employee = SL::DB::Employee->new(id => $filter->{order}{employee_id})->load->name if $filter->{order}{employee_id};
$partsgroup = SL::DB::PartsGroup->new(id => $filter->{part}{partsgroup_id})->load->partsgroup if $filter->{part}{partsgroup_id};

my @filters = (
[ $filter->{order}{"ordnumber:substr::ilike"}, $::locale->text('Number') ],
[ $filter->{order}{globalproject}{"projectnumber:substr::ilike"}, $::locale->text('Document Project Number') ],
[ $filter->{part}{"partnumber:substr::ilike"}, $::locale->text('Part Number') ],
[ $filter->{"description:substr::ilike"}, $::locale->text('Part Description') ],
[ $filter->{"reqdate:date::ge"}, $::locale->text('Delivery Date') . " " . $::locale->text('From Date') ],
[ $filter->{"reqdate:date::le"}, $::locale->text('Delivery Date') . " " . $::locale->text('To Date') ],
[ $filter->{"qty:number"}, $::locale->text('Quantity') ],
[ $filter->{order}{vendor}{"name:substr::ilike"}, $::locale->text('Vendor') ],
[ $filter->{order}{vendor}{"vendornumber:substr::ilike"}, $::locale->text('Vendor Number') ],
[ $filter->{order}{customer}{"name:substr::ilike"}, $::locale->text('Customer') ],
[ $filter->{order}{customer}{"customernumber:substr::ilike"}, $::locale->text('Customer Number') ],
[ $business, $::locale->text('Customer type') ],
[ $employee, $::locale->text('Employee') ],
[ <