}
$query =
- qq|SELECT dunning_ar_amount_fee, dunning_ar_amount_interest, dunning_ar, dunning_creator
+ qq|SELECT dunning_ar_amount_fee, dunning_ar_amount_interest, dunning_ar, dunning_creator,
+ dunning_original_invoice_creation_mode
FROM defaults|;
- ($form->{AR_amount_fee}, $form->{AR_amount_interest}, $form->{AR}, $form->{dunning_creator})
+ ($form->{AR_amount_fee}, $form->{AR_amount_interest}, $form->{AR}, $form->{dunning_creator},
+ $form->{dunning_original_invoice_creation_mode})
= selectrow_query($form, $dbh, $query);
$main::lxdebug->leave_sub();
}
$query = qq|UPDATE defaults SET dunning_ar_amount_fee = ?, dunning_ar_amount_interest = ?, dunning_ar = ?,
- dunning_creator = ?|;
+ dunning_creator = ?, dunning_original_invoice_creation_mode = ?|;
@values = (conv_i($form->{AR_amount_fee}), conv_i($form->{AR_amount_interest}), conv_i($form->{AR}),
- $form->{dunning_creator});
+ $form->{dunning_creator}, $form->{dunning_original_invoice_creation_mode});
do_query($form, $dbh, $query, @values);
return 1;
# Save PDFs in filemanagement and webdav after transation succeeded,
# because otherwise files in the storage may exists if the transaction
- # failed. Ignore all errros.
- # Todo: Maybe catch errros and display them as warnings or non fatal errors in the status.
+ # failed. Ignore all errors.
+ # Todo: Maybe catch errors and display them as warnings or non fatal errors in the status.
if (!$error && $form->{DUNNING_PDFS_STORAGE} && scalar @{ $form->{DUNNING_PDFS_STORAGE} }) {
_store_pdf_to_webdav_and_filemanagement($_->{dunning_id}, $_->{path}, $_->{name}) for @{ $form->{DUNNING_PDFS_STORAGE} };
}
- $error = 'unknown errror' if !$error && !$rc;
- $rc->{error} = $error if $error;
+ $error = 'unknown error' if !$error && !$rc;
+ $rc->{error} = $error if $error;
$::lxdebug->leave_sub;
$form->{DUNNING_PDFS_EMAIL} = [];
$form->{dunning_id} = $dunning_id;
-
+ $form->{media} = 'email' if $send_email;
$self->create_invoice_for_fees($myconfig, $form, $dbh, $dunning_id);
$self->print_invoice_for_fees($myconfig, $form, $dunning_id, $dbh);
my $query =
qq|SELECT
dcfg.email_body, dcfg.email_subject, dcfg.email_attachment,
- COALESCE (NULLIF(c.invoice_mail, ''), c.email) AS recipient, c.name,
+ COALESCE (NULLIF(aba.dunning_mail, ''), NULLIF(aba.email,''),
+ NULLIF(c.dunning_mail, ''),
+ 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)
LEFT JOIN customer c ON (ar.customer_id = c.id)
+ LEFT JOIN additional_billing_addresses aba ON (aba.id = ar.billing_address_id)
WHERE (d.dunning_id = ?)
LIMIT 1|;
my $ref = selectfirst_hashref_query($form, $dbh, $query, $dunning_id);
$mail->{record_id} = \@ids;
$mail->{record_type} = 'dunning';
- $mail->send();
+ my $error = $mail->send();
+ die "Mailer error during 'send': $error\n" if $error;
$main::lxdebug->leave_sub();
}
push(@values, $form->{department_id});
}
+ if ($form->{payment_id}) {
+ $where .= " AND a.payment_id = ?";
+ push(@values, $form->{payment_id});
+ }
+
+ if ($form->{invoice}) {
+ $where .= " AND a.invoice = ?";
+ push(@values, $form->{invoice});
+ }
+
my %columns = (
"ordnumber" => "a.ordnumber",
"invnumber" => "a.invnumber",
a.direct_debit,
pt.description as payment_term,
dep.description as departmentname,
- ct.invoice_mail AS cv_email,
+ COALESCE (NULLIF(aba.dunning_mail, ''), NULLIF(aba.email,''),
+ NULLIF(ct.dunning_mail, ''),
+ NULLIF(ct.invoice_mail, ''), ct.email) AS recipient,
cfg.dunning_description, cfg.dunning_level,
d.transdate AS dunning_date, d.duedate AS dunning_duedate,
FROM ar a
LEFT JOIN customer ct ON (a.customer_id = ct.id)
+ LEFT JOIN additional_billing_addresses aba ON (aba.id = a.billing_address_id)
LEFT JOIN department dep ON (a.department_id = dep.id)
LEFT JOIN payment_terms pt ON (a.payment_id = pt.id)
LEFT JOIN dunning_config cfg ON (a.dunning_config_id = cfg.id)
))
$paid
AND (a.duedate < current_date)
+ AND ct.dunning_lock = false
$where
- ORDER BY a.id, transdate, duedate, name|;
+ ORDER BY ct.name, a.id, transdate, duedate |;
my $sth = prepare_execute_query($form, $dbh, $query, $id_for_max_dunning_level, @values);
$form->{DUNNINGS} = [];
die "Invalid invoice object" unless ref($invoice) eq 'SL::DB::Invoice';
+ my $filestore_enabled = SL::DB::Default->get->webdav
+ || SL::DB::Default->get->doc_storage;
+ if ($::instance_conf->get_dunning_original_invoice_creation_mode eq 'use_last_created_or_create_new'
+ && $filestore_enabled) {
+ my ($file_name, $file_path);
+ # search file in files and webdav
+ if (SL::DB::Default->get->doc_storage) {
+ my $file_entry = SL::DB::Manager::File->get_first(
+ query => [
+ object_type => $invoice->type,
+ object_id => $invoice->id,
+ ],
+ );
+ if ($file_entry) {
+ my $file = SL::File::Object->new(
+ db_file => $file_entry,
+ id => $file_entry->id,
+ loaded => 1,
+ );
+ $file_name = $file->file_name();
+ $file_path = $file->get_file();
+ }
+ } elsif (SL::DB::Default->get->webdav) {
+ my $webdav = SL::Webdav->new(
+ type => $invoice->type,
+ number => $invoice->record_number,
+ );
+ my @latest_object = $webdav->get_all_latest();
+ if (scalar @latest_object) {
+ $file_name = $latest_object[0]->basename . "." . $latest_object[0]->extension;
+ $file_path = $latest_object[0]->full_filedescriptor();
+ }
+ } # end file search
+
+ my $attachment_filename = $form->get_formname_translation('invoice') . "_" . $invoice->invnumber . ".pdf";
+ if ($file_name ne '' and $file_path ne '') {
+ my $spool = $::lx_office_conf{paths}->{spool};
+ my $spool_path = File::Spec->catfile($spool, $file_name);
+
+ copy($file_path, $spool_path) or die "The copy operation failed: $!";
+
+ push @{ $form->{DUNNING_PDFS} } , $file_name;
+ push @{ $form->{DUNNING_PDFS_EMAIL} } , {
+ 'path' => $file_path,
+ 'name' => $file_name, };
+ push @{ $form->{DUNNING_PDFS_STORAGE} }, {
+ 'dunning_id' => $dunning_id,
+ 'path' => $file_path,
+ 'name' => $file_name };
+ return;
+ }
+ }
+
my $print_form = Form->new('');
$print_form->{type} = 'invoice';
$print_form->{formname} = 'invoice',