use SL::Common;
use SL::DBUtils;
+use SL::DB::AuthUser;
use SL::DB::Default;
use SL::DB::Employee;
use SL::GenericTranslations;
use SL::Util qw(trim);
use SL::DB;
+use File::Copy;
+
use strict;
sub get_config {
my @invoice_ids;
my ($next_dunning_config_id, $customer_id);
- my $send_email = 0;
+ my ($send_email, $print_invoice) = (0, 0);
foreach my $row (@{ $rows }) {
push @invoice_ids, $row->{invoice_id};
@values = ($row->{next_dunning_config_id}, $row->{invoice_id});
do_statement($form, $h_update_ar, $q_update_ar, @values);
- $send_email |= $row->{email};
+ $send_email |= $row->{email};
+ $print_invoice |= $row->{print_invoice};
my $next_config_id = conv_i($row->{next_dunning_config_id});
my $invoice_id = conv_i($row->{invoice_id});
$self->print_invoice_for_fees($myconfig, $form, $dunning_id, $dbh);
$self->print_dunning($myconfig, $form, $dunning_id, $dbh);
+ if ($print_invoice) {
+ $self->print_original_invoices($myconfig, $form, $_, $dbh) for @invoice_ids;
+ }
if ($send_email) {
$self->send_email($myconfig, $form, $dunning_id, $dbh);
my $query =
qq|SELECT
dcfg.email_body, dcfg.email_subject, dcfg.email_attachment,
- c.email AS recipient
-
+ COALESCE (NULLIF(c.invoice_mail, ''), c.email) AS recipient, c.name,
+ (SELECT login from employee where id = ar.employee_id) as invoice_employee_login
FROM dunning d
LEFT JOIN dunning_config dcfg ON (d.dunning_config_id = dcfg.id)
LEFT JOIN ar ON (d.trans_id = ar.id)
LIMIT 1|;
my $ref = selectfirst_hashref_query($form, $dbh, $query, $dunning_id);
- if (!$ref || !$ref->{recipient} || !$myconfig->{email}) {
+ # without a recipient, we cannot send a mail
+ if (!$ref || !$ref->{recipient}) {
$main::lxdebug->leave_sub();
- return;
+ die $main::locale->text("No email recipient for customer #1 defined.", $ref->{name});
+ }
+
+ # without a sender we cannot send a mail
+ # two cases: check mail from 1. current user OR 2. employee who created the invoice
+ my ($from, $sign);
+ if ($::instance_conf->get_dunning_creator eq 'current_employee') {
+ $from = $myconfig->{email};
+ die $main::locale->text('No email for current user #1 defined.', $myconfig->{name}) unless $from;
+ } else {
+ eval {
+ $from = SL::DB::Manager::AuthUser->find_by(login => $ref->{invoice_employee_login})->get_config_value("email");
+ $sign = SL::DB::Manager::AuthUser->find_by(login => $ref->{invoice_employee_login})->get_config_value("signature");
+ die unless ($from);
+ 1;
+ } or die $main::locale->text('No email for user with login #1 defined.', $ref->{invoice_employee_login});
}
my $template = SL::Template::create(type => 'PlainText', form => $form, myconfig => $myconfig);
my $mail = Mailer->new();
$mail->{bcc} = $form->get_bcc_defaults($myconfig, $form->{bcc});
- $mail->{from} = $myconfig->{email};
+ $mail->{from} = $from;
$mail->{to} = $ref->{recipient};
$mail->{subject} = $template->parse_block($ref->{email_subject});
$mail->{message} = $template->parse_block($ref->{email_body});
-
+ my $sign_backup = $::myconfig{signature};
+ $::myconfig{signature} = $sign if $sign;
$mail->{message} .= $form->create_email_signature();
+ $::myconfig{signature} = $sign_backup if $sign;
$mail->{message} =~ s/\r\n/\n/g;
push(@values, like($form->{customer}));
}
+ if ($form->{department_id}) {
+ $where .= qq| AND (a.department_id = ?)|;
+ push(@values, $form->{department_id});
+ }
+
my %columns = (
"ordnumber" => "a.ordnumber",
"invnumber" => "a.invnumber",
ct.name AS customername, a.customer_id, a.duedate,
a.amount - a.paid AS open_amount,
a.direct_debit,
+ dep.description as departmentname,
cfg.dunning_description, cfg.dunning_level,
FROM ar a
LEFT JOIN customer ct ON (a.customer_id = ct.id)
+ LEFT JOIN department dep ON (a.department_id = dep.id)
LEFT JOIN dunning_config cfg ON (a.dunning_config_id = cfg.id)
LEFT JOIN dunning_config nextcfg ON
(nextcfg.id =
}
+sub print_original_invoices {
+ my ($self, $myconfig, $form, $invoice_id) = @_;
+ # get one invoice as object and print to pdf
+ my $invoice = SL::DB::Invoice->new(id => $invoice_id)->load;
+
+ die "Invalid invoice object" unless ref($invoice) eq 'SL::DB::Invoice';
+
+ my $print_form = Form->new('');
+ $print_form->{type} = 'invoice';
+ $print_form->{formname} = 'invoice',
+ $print_form->{format} = 'pdf',
+ $print_form->{media} = 'file';
+ # no language override, should always be the object's language
+ $invoice->flatten_to_form($print_form, format_amounts => 1);
+ $print_form->prepare_for_printing;
+
+ my $filename = SL::Helper::CreatePDF->create_pdf(
+ template => 'invoice.tex',
+ variables => $print_form,
+ return => 'file_name',
+ );
+
+ my $spool = $::lx_office_conf{paths}->{spool};
+ my ($volume, $directory, $file_name) = File::Spec->splitpath($filename);
+ my $full_file_name = File::Spec->catfile($spool, $file_name);
+
+ move($filename, $full_file_name) or die "The move operation failed: $!";
+
+ # form get_formname_translation should use language_id_$i
+ my $saved_reicpient_locale = $form->{recipient_locale};
+ $form->{recipient_locale} = $invoice->language;
+
+ push @{ $form->{DUNNING_PDFS} }, $file_name;
+ push @{ $form->{DUNNING_PDFS_EMAIL} }, { 'path' => "${spool}/$file_name",
+ 'name' => $form->get_formname_translation('invoice') . "_" . $invoice->invnumber . ".pdf" };
+
+ $form->{recipient_locale} = $saved_reicpient_locale;
+}
+
1;