use POSIX qw(strftime);
+use List::MoreUtils qw(none);
+
use SL::IS;
use SL::DN;
use SL::DB::Department;
use SL::DB::Dunning;
+use SL::File;
use SL::Helper::Flash qw(flash);
use SL::Locale::String qw(t8);
+use SL::Presenter::FileObject;
+use SL::Presenter::WebdavObject;
use SL::ReportGenerator;
require "bin/mozilla/common.pl";
DN->get_config(\%myconfig, \%$form);
+ $form->get_lists("departments" => "ALL_DEPARTMENTS");
+
$form->{SHOW_DUNNING_LEVEL_SELECTION} = $form->{DUNNING} && scalar @{ $form->{DUNNING} };
- $form->{SHOW_DEPARTMENT_SELECTION} = $form->{all_departments} && scalar @{ $form->{all_departments} || [] };
+ $form->{SHOW_DEPARTMENT_SELECTION} = $form->{ALL_DEPARTMENTS} && scalar @{ $form->{ALL_DEPARTMENTS} || [] };
$form->{title} = $locale->text('Start Dunning Process');
my $saved_language_id = $form->{language_id};
- if ($form->{groupinvoices}) {
+ if ($form->{groupinvoices} || $form->{l_include_credit_notes}) {
my %dunnings_for;
for my $i (1 .. $form->{rowcount}) {
push @{ $level }, { "row" => $i,
"invoice_id" => $form->{"inv_id_$i"},
+ "credit_note" => $form->{"credit_note_$i"},
"customer_id" => $form->{"customer_id_$i"},
"language_id" => $form->{"language_id_$i"},
"next_dunning_config_id" => $form->{"next_dunning_config_id_$i"},
+ "print_invoice" => $form->{"include_invoice_$i"},
"email" => $form->{"email_$i"}, };
}
"customer_id" => $form->{"customer_id_$i"},
"language_id" => $form->{"language_id_$i"},
"next_dunning_config_id" => $form->{"next_dunning_config_id_$i"},
+ "print_invoice" => $form->{"include_invoice_$i"},
"email" => $form->{"email_$i"}, } ];
if (!$form->{force_lang}) {
$form->{language_id} = @{$level}[0]->{language_id};
$main::auth->assert('dunning_edit');
- my @filter_field_list = qw(customer_id customer dunning_level department_id invnumber ordnumber
+ my @filter_field_list = qw(customer_id customer dunning_id dunning_level department_id invnumber ordnumber
transdatefrom transdateto dunningfrom dunningto notes showold l_salesman salesman_id);
report_generator_set_default_sort('customername', 1);
'checkbox' => { 'text' => '', 'visible' => 'HTML' },
'dunning_description' => { 'text' => $locale->text('Dunning Level') },
'customername' => { 'text' => $locale->text('Customername') },
+ 'departmentname' => { 'text' => $locale->text('Department') },
'language' => { 'text' => $locale->text('Language') },
'invnumber' => { 'text' => $locale->text('Invnumber') },
'transdate' => { 'text' => $locale->text('Invdate') },
'duedate' => { 'text' => $locale->text('Invoice Duedate') },
'amount' => { 'text' => $locale->text('Amount') },
+ 'dunning_id' => { 'text' => $locale->text('Dunning number') },
'dunning_date' => { 'text' => $locale->text('Dunning Date') },
'dunning_duedate' => { 'text' => $locale->text('Dunning Duedate') },
'fee' => { 'text' => $locale->text('Total Fees') },
'interest' => { 'text' => $locale->text('Interest') },
'salesman' => { 'text' => $locale->text('Salesperson'), 'visible' => $form->{l_salesman} ? 1 : 0 },
+ 'documents' => { 'text' => $locale->text('Documents'), 'visible' => $::instance_conf->get_doc_storage ? 1 : 0 },
+ 'webdav' => { 'text' => $locale->text('WebDAV'), 'visible' => $::instance_conf->get_webdav ? 1 : 0 },
);
$report->set_columns(%column_defs);
- $report->set_column_order(qw(checkbox dunning_description customername language invnumber transdate
+ $report->set_column_order(qw(checkbox dunning_description dunning_id customername language invnumber transdate
duedate amount dunning_date dunning_duedate fee interest salesman));
$report->set_sort_indicator($form->{sort}, $form->{sortdir});
my $print_url = sub { build_std_url('action=print_dunning', 'format=pdf', 'media=screen', 'dunning_id='.$_[0]->{dunning_id}, 'language_id=' . $_[0]->{language_id}) };
my $sort_url = build_std_url('action=show_dunning', grep { $form->{$_} } @filter_field_list);
- foreach my $name (qw(dunning_description customername invnumber transdate duedate dunning_date dunning_duedate salesman)) {
+ foreach my $name (qw(dunning_description customername invnumber transdate duedate dunning_date dunning_duedate salesman dunning_id)) {
my $sortdir = $form->{sort} eq $name ? 1 - $form->{sortdir} : $form->{sortdir};
$column_defs{$name}->{link} = $sort_url . "&sort=$name&sortdir=$sortdir";
}
- my %alignment = map { $_ => 'right' } qw(transdate duedate amount dunning_date dunning_duedate fee interest salesman);
+ my %alignment = map { $_ => 'right' } qw(transdate duedate amount dunning_date dunning_duedate fee interest salesman dunning_id);
my ($current_dunning_rows, $previous_dunning_id, $first_row_for_dunning);
my $row = { };
foreach my $column (keys %{ $ref }) {
$row->{$column} = {
- 'data' => $first_row_for_dunning || (($column ne 'dunning_description') && ($column ne 'customername')) ? $ref->{$column} : '',
+ 'data' => $first_row_for_dunning || (none { $_ eq $column } qw(dunning_description customername dunning_id)) ? $ref->{$column} : '',
'align' => $alignment{$column},
'link' => ( $column eq 'invnumber' ? $edit_url->($ref)
: $column eq 'dunning_description' ? $print_url->($ref)
+ : $column eq 'dunning_id' ? $print_url->($ref)
: ''),
};
}
$row->{language} = { };
}
+ if ($::instance_conf->get_doc_storage && $first_row_for_dunning) {
+ my @files = SL::File->get_all_versions(object_id => $ref->{dunning_id},
+ object_type => 'dunning',
+ file_type => 'document',);
+ if (scalar @files) {
+ my $html = join '<br>', map { SL::Presenter::FileObject::file_object($_) } @files;
+ my $text = join "\n", map { $_->file_name } @files;
+ $row->{documents} = { 'raw_data' => $html, data => $text };
+ } else {
+ $row->{documents} = { };
+ }
+ }
+ if ($::instance_conf->get_webdav && $first_row_for_dunning) {
+ my $webdav = SL::Webdav->new(
+ type => 'dunning',
+ number => $ref->{dunning_id},
+ );
+ my @all_objects = $webdav->get_all_objects;
+ if (scalar @all_objects) {
+ my $html = join '<br>', map { SL::Presenter::WebdavObject::webdav_object($_) } @all_objects;
+ my $text = join "\n", map { $_->filename } @all_objects;
+ $row->{webdav} = { 'raw_data' => $html, data => $text };
+ } else {
+ $row->{webdav} = { };
+ }
+ }
+
push @{ $current_dunning_rows }, $row;
$previous_dunning_id = $ref->{dunning_id};
$form->{dunning_id} = $dunning_id;
DN->print_invoice_for_fees(\%myconfig, $form, $dunning_id);
DN->print_dunning(\%myconfig, $form, $dunning_id);
+
+ # print original dunned invoices, if they where printed on dunning run
+ my $dunnings = SL::DB::Manager::Dunning->get_all(where => [dunning_id => $dunning_id, original_invoice_printed => 1]);
+ DN->print_original_invoice(\%myconfig, $form, $dunning_id, $_->trans_id) for @$dunnings;
+
$i++;
}
$form->{language_id} = $saved_language_id;