+ $self->save_history('MAILED');
+
+ flash_later('info', t8('The email has been sent.'));
+
+ my @redirect_params = (
+ action => 'edit',
+ type => $self->type,
+ id => $self->order->id,
+ );
+
+ $self->redirect_to(@redirect_params);
+}
+
+# open the periodic invoices config dialog
+#
+# If there are values in the form (i.e. dialog was opened before),
+# then use this values. Create new ones, else.
+sub action_show_periodic_invoices_config_dialog {
+ my ($self) = @_;
+
+ my $config = make_periodic_invoices_config_from_yaml(delete $::form->{config});
+ $config ||= SL::DB::Manager::PeriodicInvoicesConfig->find_by(oe_id => $::form->{id}) if $::form->{id};
+ $config ||= SL::DB::PeriodicInvoicesConfig->new(periodicity => 'm',
+ order_value_periodicity => 'p', # = same as periodicity
+ start_date_as_date => $::form->{transdate_as_date} || $::form->current_date,
+ extend_automatically_by => 12,
+ active => 1,
+ email_subject => GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type =>"preset_text_periodic_invoices_email_subject"),
+ email_body => GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type => "salutation_general")
+ . GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type => "salutation_punctuation_mark") . "\n\n"
+ . GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type =>"preset_text_periodic_invoices_email_body"),
+ );
+ # for older configs, replace email preset text if not yet set.
+ $config->email_subject(GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type =>"preset_text_periodic_invoices_email_subject")
+ ) unless $config->email_subject;
+
+ $config->email_body(GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type => "salutation_general")
+ . GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type => "salutation_punctuation_mark") . "\n\n"
+ . GenericTranslations->get(
+ language_id => $::form->{language_id},
+ translation_type =>"preset_text_periodic_invoices_email_body")
+ ) unless $config->email_body;
+
+ $config->periodicity('m') if none { $_ eq $config->periodicity } @SL::DB::PeriodicInvoicesConfig::PERIODICITIES;
+ $config->order_value_periodicity('p') if none { $_ eq $config->order_value_periodicity } ('p', @SL::DB::PeriodicInvoicesConfig::ORDER_VALUE_PERIODICITIES);
+
+ $::form->get_lists(printers => "ALL_PRINTERS",
+ charts => { key => 'ALL_CHARTS',
+ transdate => 'current_date' });
+
+ $::form->{AR} = [ grep { $_->{link} =~ m/(?:^|:)AR(?::|$)/ } @{ $::form->{ALL_CHARTS} } ];
+
+ if ($::form->{customer_id}) {
+ $::form->{ALL_CONTACTS} = SL::DB::Manager::Contact->get_all_sorted(where => [ cp_cv_id => $::form->{customer_id} ]);
+ my $customer_object = SL::DB::Manager::Customer->find_by(id => $::form->{customer_id});
+ $::form->{postal_invoice} = $customer_object->postal_invoice;
+ $::form->{email_recipient_invoice_address} = $::form->{postal_invoice} ? '' : $customer_object->invoice_mail;
+ $config->send_email(0) if $::form->{postal_invoice};
+ }
+
+ $self->render('oe/edit_periodic_invoices_config', { layout => 0 },
+ popup_dialog => 1,
+ popup_js_close_function => 'kivi.Order.close_periodic_invoices_config_dialog()',
+ popup_js_assign_function => 'kivi.Order.assign_periodic_invoices_config()',
+ config => $config,
+ %$::form);
+}
+
+# assign the values of the periodic invoices config dialog
+# as yaml in the hidden tag and set the status.
+sub action_assign_periodic_invoices_config {
+ my ($self) = @_;
+
+ $::form->isblank('start_date_as_date', $::locale->text('The start date is missing.'));
+
+ my $config = { active => $::form->{active} ? 1 : 0,
+ terminated => $::form->{terminated} ? 1 : 0,
+ direct_debit => $::form->{direct_debit} ? 1 : 0,
+ periodicity => (any { $_ eq $::form->{periodicity} } @SL::DB::PeriodicInvoicesConfig::PERIODICITIES) ? $::form->{periodicity} : 'm',
+ order_value_periodicity => (any { $_ eq $::form->{order_value_periodicity} } ('p', @SL::DB::PeriodicInvoicesConfig::ORDER_VALUE_PERIODICITIES)) ? $::form->{order_value_periodicity} : 'p',
+ start_date_as_date => $::form->{start_date_as_date},
+ end_date_as_date => $::form->{end_date_as_date},
+ first_billing_date_as_date => $::form->{first_billing_date_as_date},
+ print => $::form->{print} ? 1 : 0,
+ printer_id => $::form->{print} ? $::form->{printer_id} * 1 : undef,
+ copies => $::form->{copies} * 1 ? $::form->{copies} : 1,
+ extend_automatically_by => $::form->{extend_automatically_by} * 1 || undef,
+ ar_chart_id => $::form->{ar_chart_id} * 1,
+ send_email => $::form->{send_email} ? 1 : 0,
+ email_recipient_contact_id => $::form->{email_recipient_contact_id} * 1 || undef,
+ email_recipient_address => $::form->{email_recipient_address},
+ email_sender => $::form->{email_sender},
+ email_subject => $::form->{email_subject},
+ email_body => $::form->{email_body},
+ };
+
+ my $periodic_invoices_config = SL::YAML::Dump($config);
+
+ my $status = $self->get_periodic_invoices_status($config);