use SL::DB::AuthUser;
use SL::DB::Default;
use SL::DB::Employee;
+use SL::File;
use SL::GenericTranslations;
use SL::IS;
use SL::Mailer;
use SL::TransNumber;
use SL::Util qw(trim);
use SL::DB;
+use SL::Webdav;
use File::Copy;
my ($self, $myconfig, $form, $rows) = @_;
$main::lxdebug->enter_sub();
+ $form->{DUNNING_PDFS_STORAGE} = [];
+
my $rc = SL::DB->client->with_transaction(\&_save_dunning, $self, $myconfig, $form, $rows);
+ # 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.
+ 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} };
+ }
+
if (!$rc) {
die SL::DB->client->error
}
my $q_insert_dunning =
qq|INSERT INTO dunning (id, dunning_id, dunning_config_id, dunning_level, trans_id,
- fee, interest, transdate, duedate)
+ fee, interest, transdate, duedate, original_invoice_printed)
VALUES (?, ?, ?,
(SELECT dunning_level FROM dunning_config WHERE id = ?),
?,
* (SELECT interest_rate FROM dunning_config WHERE id = ?)
/ 360,
current_date,
- current_date + (SELECT payment_terms FROM dunning_config WHERE id = ?))|;
+ current_date + (SELECT payment_terms FROM dunning_config WHERE id = ?),
+ ?)|;
my $h_insert_dunning = prepare_query($form, $dbh, $q_insert_dunning);
my @invoice_ids;
@values = ($row_id, $dunning_id, $next_config_id,
$next_config_id, $invoice_id, $next_config_id,
- $invoice_id, $next_config_id, $next_config_id);
+ $invoice_id, $next_config_id, $next_config_id,
+ $print_invoice);
do_statement($form, $h_insert_dunning, $q_insert_dunning, @values);
RecordLinks->create_links(
$self->print_dunning($myconfig, $form, $dunning_id, $dbh);
if ($print_invoice) {
- $self->print_original_invoices($myconfig, $form, $_, $dbh) for @invoice_ids;
+ $self->print_original_invoice($myconfig, $form, $dunning_id, $_) for @invoice_ids;
}
if ($send_email) {
}
my %sort_columns = (
- 'dunning_description' => [ qw(dn.dunning_description customername invnumber) ],
- 'customername' => [ qw(customername invnumber) ],
+ 'dunning_description' => [ qw(dn.dunning_description da.dunning_id customername invnumber) ],
+ 'customername' => [ qw(customername da.dunning_id invnumber) ],
'invnumber' => [ qw(a.invnumber) ],
'transdate' => [ qw(a.transdate a.invnumber) ],
'duedate' => [ qw(a.duedate a.invnumber) ],
- 'dunning_date' => [ qw(dunning_date a.invnumber) ],
- 'dunning_duedate' => [ qw(dunning_duedate a.invnumber) ],
+ 'dunning_date' => [ qw(dunning_date da.dunning_id a.invnumber) ],
+ 'dunning_duedate' => [ qw(dunning_duedate da.dunning_id a.invnumber) ],
'salesman' => [ qw(salesman) ],
);
my $sortdir = !defined $form->{sortdir} ? 'ASC' : $form->{sortdir} ? 'ASC' : 'DESC';
my $sortkey = $sort_columns{$form->{sort}} ? $form->{sort} : 'customername';
- my $sortorder = join ', ', map { "$_ $sortdir" } (@{ $sort_columns{$sortkey} }, 'da.dunning_id');
+ my $sortorder = join ', ', map { "$_ $sortdir" } @{ $sort_columns{$sortkey} };
my $query =
qq|SELECT a.id, a.ordnumber, a.invoice, a.transdate, a.invnumber, a.amount, a.language_id,
delete $form->{tmpfile};
- push @{ $form->{DUNNING_PDFS} }, $filename;
- push @{ $form->{DUNNING_PDFS_EMAIL} }, { 'path' => "${spool}/$filename",
- 'name' => $form->get_formname_translation('dunning') . "_${dunning_id}.pdf" };
+ push @{ $form->{DUNNING_PDFS} } , $filename;
+ push @{ $form->{DUNNING_PDFS_EMAIL} } , { 'path' => "${spool}/$filename",
+ 'name' => $form->get_formname_translation('dunning') . "_${dunning_id}.pdf" };
+ push @{ $form->{DUNNING_PDFS_STORAGE} }, { 'dunning_id' => $dunning_id,
+ 'path' => "${spool}/$filename",
+ 'name' => $form->get_formname_translation('dunning') . "_${dunning_id}.pdf" };
my $employee_id = ($::instance_conf->get_dunning_creator eq 'invoice_employee') ?
$form->{employee_id} :
}
$form->{attachment_filename} = $form->get_formname_translation($form->{attachment_type}) . "_${dunning_id}.pdf";
$form->{attachment_id} = $form->{invoice_id};
+
+ # this generates the file in the spool directory
$form->parse_template($myconfig);
$main::lxdebug->leave_sub();
my $attachment_filename = $form->get_formname_translation('dunning_invoice') . "_${dunning_id}.pdf";
$form->{attachment_filename} = $attachment_filename;
$form->{attachment_type} = "dunning";
- $form->{attachment_id} = $form->{invoice_id};
+ $form->{attachment_id} = $invoice_id;
$form->parse_template($myconfig);
restore_form($saved_form);
- push @{ $form->{DUNNING_PDFS} }, $filename;
- push @{ $form->{DUNNING_PDFS_EMAIL} }, { 'path' => "${spool}/$filename",
- 'name' => $attachment_filename };
+ push @{ $form->{DUNNING_PDFS} }, $filename;
+ push @{ $form->{DUNNING_PDFS_EMAIL} }, { 'path' => "${spool}/$filename",
+ 'name' => $attachment_filename };
+ push @{ $form->{DUNNING_PDFS_STORAGE} }, { 'dunning_id' => $dunning_id,
+ 'path' => "${spool}/$filename",
+ 'name' => $attachment_filename };
$main::lxdebug->leave_sub();
}
}
-sub print_original_invoices {
- my ($self, $myconfig, $form, $invoice_id) = @_;
+sub print_original_invoice {
+ my ($self, $myconfig, $form, $dunning_id, $invoice_id) = @_;
# get one invoice as object and print to pdf
my $invoice = SL::DB::Invoice->new(id => $invoice_id)->load;
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" };
+ my $attachment_filename = $form->get_formname_translation('invoice') . "_" . $invoice->invnumber . ".pdf";
+
+ push @{ $form->{DUNNING_PDFS} }, $file_name;
+ push @{ $form->{DUNNING_PDFS_EMAIL} }, { 'path' => "${spool}/$file_name",
+ 'name' => $attachment_filename };
+ push @{ $form->{DUNNING_PDFS_STORAGE} }, { 'dunning_id' => $dunning_id,
+ 'path' => "${spool}/$file_name",
+ 'name' => $attachment_filename };
$form->{recipient_locale} = $saved_reicpient_locale;
}
+sub _store_pdf_to_webdav_and_filemanagement {
+ my ($dunning_id, $path, $name) =@_;
+
+ my @errors;
+
+ if ($::instance_conf->get_doc_storage) {
+ eval {
+ SL::File->save(
+ object_id => $dunning_id,
+ object_type => 'dunning',
+ mime_type => 'application/pdf',
+ source => 'created',
+ file_type => 'document',
+ file_name => $name,
+ file_path => $path,
+ );
+ 1;
+ } or do {
+ push @errors, $::locale->text('Storing PDF in storage backend failed: #1', $@);
+ };
+ }
+
+ if ($::instance_conf->get_webdav_documents) {
+ eval {
+ my $webdav = SL::Webdav->new(
+ type => 'dunning',
+ number => $dunning_id,
+ );
+ my $webdav_file = SL::Webdav::File->new(
+ webdav => $webdav,
+ filename => $name,
+ );
+ $webdav_file->store(file => $path);
+ } or do {
+ push @errors, $::locale->text('Storing PDF to webdav folder failed: #1', $@);
+ };
+ }
+
+ return @errors;
+}
+
+
1;