+sub _email_invoice {
+ my ($self, $data) = @_;
+
+ $data->{config}->load;
+
+ return unless $data->{config}->send_email;
+
+ my @recipients =
+ uniq
+ map { lc }
+ grep { $_ }
+ map { trim($_) }
+ (split(m{,}, $data->{config}->email_recipient_address),
+ $data->{config}->email_recipient_contact ? ($data->{config}->email_recipient_contact->cp_email) : ());
+
+ return unless @recipients;
+
+ my %create_params = (
+ template => $self->find_template(name => 'invoice'),
+ variables => Form->new(''),
+ return => 'file_name',
+ variable_content_types => {
+ longdescription => 'html',
+ partnotes => 'html',
+ notes => 'html',
+ },
+ );
+
+ $data->{invoice}->flatten_to_form($create_params{variables}, format_amounts => 1);
+ $create_params{variables}->prepare_for_printing;
+
+ my $pdf_file_name;
+
+ eval {
+ $pdf_file_name = $self->create_pdf(%create_params);
+
+ for (qw(email_subject email_body)) {
+ _replace_vars(
+ object => $data->{config},
+ vars => $data->{time_period_vars},
+ attribute => $_,
+ attribute_format => 'text'
+ );
+ }
+
+ for my $recipient (@recipients) {
+ my $mail = Mailer->new;
+ $mail->{from} = $data->{config}->email_sender || $::lx_office_conf{periodic_invoices}->{email_from};
+ $mail->{to} = $recipient;
+ $mail->{subject} = $data->{config}->email_subject;
+ $mail->{message} = $data->{config}->email_body;
+ $mail->{attachments} = [{
+ filename => $pdf_file_name,
+ name => sprintf('%s %s.pdf', $::locale->text('Invoice'), $data->{invoice}->invnumber),
+ }];
+
+ my $error = $mail->send;
+
+ push @{ $self->{job_errors} }, $error if $error;
+ }
+
+ 1;
+
+ } or do {
+ push @{ $self->{job_errors} }, $EVAL_ERROR;
+ };
+
+ unlink $pdf_file_name if $pdf_file_name;
+}
+