use strict;
use parent qw(SL::Controller::Base);
-use List::Util qw(sum);
+use List::Util qw(min sum);
use SL::DB::Order;
use SL::DB::ProjectType;
sub => sub { $_[0]->globalproject_id ? $_[0]->globalproject->project_type->description : '' } },
);
- map { $column_defs{$_}->{text} ||= $::locale->text( $self->models->get_sort_spec->{$_}->{title} ) } keys %column_defs;
- map { $column_defs{$_}->{align} = 'right' } @{ $self->{number_columns} };
+ $column_defs{$_}->{text} ||= $::locale->text( $self->models->get_sort_spec->{$_}->{title} ) for keys %column_defs;
+ $column_defs{$_}->{align} = 'right' for @{ $self->{number_columns} };
$report->set_options(
std_column_visibility => 1,
$order->{billable_amount} = $order->{delivered_amount} - $order->{billed_amount};
if ($order->periodic_invoices_config) {
- my @dates = $order->periodic_invoices_config->calculate_invoice_dates(past_dates => 1, end_date => DateTime->today_local);
- $order->{net_amount} = $order->netamount * scalar(@dates);
+ $order->{net_amount} = $self->calculate_periodic_invoices_order_netamount($order);
} else {
$order->{net_amount} = $order->netamount;
}
}
+sub calculate_periodic_invoices_order_netamount {
+ my ($self, $order) = @_;
+
+ my $cfg = $order->periodic_invoices_config;
+ my $num_years = 0;
+ my $cur_date = $cfg->start_date->clone;
+ my $end_date = $cfg->terminated ? $self->end_date : undef;
+ $end_date //= DateTime->today_local;
+ $end_date = min($end_date, DateTime->today_local);
+
+ while ($cur_date <= $end_date) {
+ $num_years++;
+ $cur_date->add(years => 1);
+ }
+
+ return $num_years * $order->netamount * (12 / $order->periodic_invoices_config->get_period_length);
+}
+
sub sum_items {
my ($self, %params) = @_;
my ($self) = @_;
my $modify_data = sub {
my ($data) = @_;
- map { $data->{$_}->{data} = defined $data->{$_}->{data} ? int($data->{$_}->{data}) : '' } grep { m/_p$/ } @{ $self->{number_columns} };
- map { $data->{$_}->{data} = $::form->format_amount(\%::myconfig, $data->{$_}->{data}, 2) } grep { !m/_p$/ } @{ $self->{number_columns} };
+ $data->{$_}->{data} = defined $data->{$_}->{data} ? int($data->{$_}->{data}) : '' for grep { m/_p$/ } @{ $self->{number_columns} };
+ $data->{$_}->{data} = $::form->format_amount(\%::myconfig, $data->{$_}->{data}, 2) for grep { !m/_p$/ } @{ $self->{number_columns} };
};
return $self->report_generator_list_objects(report => $self->{report}, objects => $self->{orders}, data_callback => $modify_data);