]> wagnertech.de Git - mfinanz.git/blobdiff - SL/DN.pm
Mahnungen: beim erneuten Drucken ggf. auch originale Rechnung mit drucken, …
[mfinanz.git] / SL / DN.pm
index 3ae10a428b35bb9cbcd9d7703e60b50559f877c3..9016aaad470740af1360c645eb3c01324357e7d7 100644 (file)
--- a/SL/DN.pm
+++ b/SL/DN.pm
@@ -40,6 +40,7 @@ use SL::DBUtils;
 use SL::DB::AuthUser;
 use SL::DB::Default;
 use SL::DB::Employee;
+use SL::File;
 use SL::GenericTranslations;
 use SL::IS;
 use SL::Mailer;
@@ -50,6 +51,7 @@ use SL::DB::Language;
 use SL::TransNumber;
 use SL::Util qw(trim);
 use SL::DB;
+use SL::Webdav;
 
 use File::Copy;
 
@@ -340,7 +342,7 @@ sub _save_dunning {
 
   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 = ?),
                ?,
@@ -351,7 +353,8 @@ sub _save_dunning {
                  * (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;
@@ -385,7 +388,8 @@ sub _save_dunning {
 
     @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(
@@ -414,7 +418,7 @@ sub _save_dunning {
   $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, $_) for @invoice_ids;
   }
 
   if ($send_email) {
@@ -858,7 +862,7 @@ sub print_dunning {
 
   $dunning_id =~ s|[^\d]||g;
 
-  my ($language_tc, $output_numberformat, $output_dateformat, $output_longdates);
+  my ($language_tc, $output_numberformat, $output_dateformat, $output_longdates, @dunned_invoices);
   if ($form->{"language_id"}) {
     ($language_tc, $output_numberformat, $output_dateformat, $output_longdates) =
       AM->get_language_details($myconfig, $form, $form->{language_id});
@@ -880,7 +884,7 @@ sub print_dunning {
          ar.transdate,       ar.duedate,      ar.customer_id,
          ar.invnumber,       ar.ordnumber,    ar.cp_id,
          ar.amount,          ar.netamount,    ar.paid,
-         ar.employee_id,     ar.salesman_id,
+         ar.employee_id,     ar.salesman_id,  ar.id AS dunned_invoice_id,
          (SELECT cu.name FROM currencies cu WHERE cu.id = ar.currency_id) AS curr,
          (SELECT description from department WHERE id = ar.department_id) AS department,
          ar.amount - ar.paid AS open_amount,
@@ -902,6 +906,7 @@ sub print_dunning {
     map { $ref->{$_} = $form->format_amount($myconfig, $ref->{$_}, 2) } qw(amount netamount paid open_amount fee interest linetotal);
     map { $form->{$_} = $ref->{$_} } keys %$ref;
     map { push @{ $form->{TEMPLATE_ARRAYS}->{"dn_$_"} }, $ref->{$_} } keys %$ref;
+    push @dunned_invoices, {id => $ref->{dunned_invoice_id}, invnumber => $ref->{invnumber}};
   }
   $sth->finish();
 
@@ -1011,8 +1016,37 @@ sub print_dunning {
   }
   $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);
 
+  # save dunning pdf in filemanagement/webdav for each invoice
+  foreach my $dunned_invoice (@dunned_invoices) {
+    if ($::instance_conf->get_doc_storage) {
+      SL::File->save(
+        object_id   => $dunned_invoice->{id},
+        object_type => $form->{attachment_type},
+        mime_type   => 'application/pdf',
+        source      => 'created',
+        file_type   => 'document',
+        file_name   => $form->{attachment_filename},
+        file_path   => "${spool}/$filename",
+      );
+    }
+
+    if ($::instance_conf->get_webdav_documents) {
+      my $webdav = SL::Webdav->new(
+        type     => 'invoice',
+        number   => $dunned_invoice->{invnumber},
+      );
+      my $webdav_file = SL::Webdav::File->new(
+        webdav   => $webdav,
+        filename => $form->{attachment_filename},
+      );
+      $webdav_file->store(file => "${spool}/$filename");
+    }
+  }
+
   $main::lxdebug->leave_sub();
 }
 
@@ -1114,6 +1148,38 @@ sub print_invoice_for_fees {
   push @{ $form->{DUNNING_PDFS_EMAIL} }, { 'path' => "${spool}/$filename",
                                            'name' => $attachment_filename };
 
+  # save dunning fee pdf in filemanagement/webdav for each dunned invoice
+  if ($::instance_conf->get_doc_storage || $::instance_conf->get_webdav_documents) {
+    $query              = qq|SELECT trans_id, invnumber FROM dunning LEFT JOIN ar ON (ar.id = trans_id) WHERE dunning_id = ?|;
+    my $dunned_invoices = selectall_hashref_query($form, $dbh, $query, $dunning_id);
+
+    foreach my $dunned_invoice (@$dunned_invoices) {
+      if ($::instance_conf->get_doc_storage) {
+        SL::File->save(
+          object_id   => $dunned_invoice->{trans_id},
+          object_type => 'dunning',
+          mime_type   => 'application/pdf',
+          source      => 'created',
+          file_type   => 'document',
+          file_name   => $attachment_filename,
+          file_path   => "${spool}/$filename",
+        );
+      }
+
+      if ($::instance_conf->get_webdav_documents) {
+        my $webdav = SL::Webdav->new(
+          type     => 'invoice',
+          number   => $dunned_invoice->{invnumber},
+        );
+        my $webdav_file = SL::Webdav::File->new(
+          webdav   => $webdav,
+          filename => $attachment_filename,
+        );
+        $webdav_file->store(file => "${spool}/$filename");
+      }
+    }
+  }
+
   $main::lxdebug->leave_sub();
 }
 
@@ -1138,7 +1204,7 @@ sub set_customer_cvars {
 
 }
 
-sub print_original_invoices {
+sub print_original_invoice {
   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;
@@ -1178,11 +1244,38 @@ sub print_original_invoices {
   my $saved_reicpient_locale = $form->{recipient_locale};
   $form->{recipient_locale}  = $invoice->language;
 
+  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' => $form->get_formname_translation('invoice') . "_" . $invoice->invnumber . ".pdf" };
+                                           'name' => $attachment_filename };
 
   $form->{recipient_locale}  = $saved_reicpient_locale;
+
+  # save original invoice pdf in filemanagement/webdav for dunned invoice
+  if ($::instance_conf->get_doc_storage) {
+    SL::File->save(
+      object_id   => $invoice_id,
+      object_type => 'dunning_orig_invoice',
+      mime_type   => 'application/pdf',
+      source      => 'created',
+      file_type   => 'document',
+      file_name   => $attachment_filename,
+      file_path   => "${spool}/$file_name",
+    );
+  }
+  if ($::instance_conf->get_webdav_documents) {
+    my $webdav = SL::Webdav->new(
+      type     => 'invoice',
+      number   => $invoice->invnumber,
+    );
+    my $webdav_file = SL::Webdav::File->new(
+      webdav   => $webdav,
+      filename => $attachment_filename,
+    );
+    $webdav_file->store(file => "${spool}/$file_name");
+  }
+
 }
 
 1;