Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision fcc8a4a3

Von Tamino Steinert vor 7 Monaten hinzugefügt

  • ID fcc8a4a3970128533b9612b2b4dfc0568d6182a0
  • Vorgänger fa589161
  • Nachfolger 7d0049f9

S:B:CreatePeriodicInvoices: Notizen von Pos. mit richtigen Datum parsen

Unterschiede anzeigen:

SL/BackgroundJob/CreatePeriodicInvoices.pm
use SL::Util qw(trim);
use SL::System::Process;
use SL::Locale::String qw(t8);
use SL::DB::Helper::RecordLink qw(RECORD_ITEM_ID RECORD_ITEM_TYPE_REF);
sub create_job {
$_[0]->create_standard_job('0 3 1 * *'); # first day of month at 3:00 am
......
}
sub _generate_time_period_variables {
my $config = shift;
my $period_start_date = shift;
my %params = validate(@_, {
period_start_date => { isa => 'DateTime' },
period_end_date => { type => HASHREF|UNDEF }, # 'DateTime or UNDEF
});
my $period_length = $config->get_order_value_period_length || $config->get_billing_period_length || 1;
my $period_end_date = $period_start_date->clone->add(months => $period_length)->subtract(days => 1);
my $period_start_date = $params{period_start_date};
my $period_end_date = $params{period_end_date};
my @month_names = ('',
$::locale->text('January'), $::locale->text('February'), $::locale->text('March'), $::locale->text('April'), $::locale->text('May'), $::locale->text('June'),
......
my $period_start_date = $order->reqdate;
my $config = $order->periodic_invoices_config;
my $time_period_vars = _generate_time_period_variables($config, $period_start_date);
my $time_period_vars = _generate_time_period_variables(
period_start_date => $order->reqdate,
period_end_date => $config->add_months(
$order->reqdate, $config->get_billing_period_length || 1
)->subtract(days => 1),
);
my $invoice;
if (!$self->{db_obj}->db->with_transaction(sub {
1; # make Emacs happy
......
direct_debit => $config->direct_debit,
);
_replace_vars(object => $invoice, vars => $time_period_vars, attribute => $_, attribute_format => ($_ eq 'notes' ? 'html' : 'text')) for qw(notes intnotes transaction_description);
_replace_vars(
object => $invoice,
vars => $time_period_vars,
attribute => $_,
attribute_format => ($_ eq 'notes' ? 'html' : 'text')
) for qw(notes intnotes transaction_description);
foreach my $item (@{ $invoice->items }) {
_replace_vars(object => $item, vars => $time_period_vars, attribute => $_, attribute_format => ($_ eq 'longdescription' ? 'html' : 'text')) for qw(description longdescription);
die "Not created of an order item" if $item->{RECORD_ITEM_TYPE_REF()} ne 'SL::DB::OrderItem';
my $order_item_id = $item->{RECORD_ITEM_ID()};
my $order_item = SL::DB::Manager::OrderItem->find_by(
id => $order_item_id,
) or die "order item not found with id: $order_item_id";
my $item_count_and_dates = $config->item_count_and_dates_in_period(
invoice_date => $invoice->deliverydate,
item => $order_item,
);
_replace_vars(
object => $item,
vars => _generate_time_period_variables(
period_start_date => $item_count_and_dates->{start_date},
period_end_date => $item_count_and_dates->{end_date},
),
attribute => $_,
attribute_format => ($_ eq 'longdescription' ? 'html' : 'text')
) for qw(description longdescription);
}
$invoice->post(ar_id => $config->ar_chart_id) || die;

Auch abrufbar als: Unified diff