X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/ff159a4d47b9a2d10744dcfc23da2c63605c8a32..eeb5375ee7727c956cc357cc8f90b19d1bfe80b9:/SL/DN.pm diff --git a/SL/DN.pm b/SL/DN.pm index 76ee1b834..054370d92 100644 --- a/SL/DN.pm +++ b/SL/DN.pm @@ -78,9 +78,11 @@ sub get_config { } $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(); @@ -147,9 +149,9 @@ sub _save_config { } $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; @@ -333,14 +335,14 @@ sub save_dunning { # 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; @@ -431,7 +433,7 @@ sub _save_dunning { $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); @@ -456,12 +458,15 @@ sub send_email { 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); @@ -514,7 +519,8 @@ sub send_email { $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(); } @@ -617,6 +623,16 @@ sub get_invoices { 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", @@ -659,7 +675,9 @@ sub get_invoices { 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, @@ -676,6 +694,7 @@ sub get_invoices { 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) @@ -702,10 +721,11 @@ sub get_invoices { )) $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} = []; @@ -1204,6 +1224,59 @@ sub print_original_invoice { 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',