+ if ($previous_dunning_id != $ref->{dunning_id}) {
+ $report->add_data($current_dunning_rows) if (scalar @{ $current_dunning_rows });
+ $current_dunning_rows = [];
+ $first_row_for_dunning = 1;
+ }
+
+ if ($ref->{'language_id'}) {
+ $ref->{language} = SL::DB::Manager::Language->find_by('id' => $ref->{'language_id'})->{'description'};
+ }
+
+ my $row = { };
+ foreach my $column (keys %{ $ref }) {
+ $row->{$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->{checkbox} = !$first_row_for_dunning ? { } : {
+ 'raw_data' => $cgi->hidden('-name' => "dunning_id_$i", '-value' => $ref->{dunning_id})
+ . $cgi->checkbox('-name' => "selected_$i", '-value' => 1, '-label' => ''),
+ 'valign' => 'center',
+ 'align' => 'center',
+ };
+
+ if ($first_row_for_dunning) {
+ $row->{language} = {'raw_data' => $cgi->hidden('-name' => "language_id_$i", '-value' => $ref->{language_id})
+ . " $ref->{language}" };
+ } else {
+ $row->{language} = { };
+ }
+
+ if ($form->{l_documents} && $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 ($form->{l_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} = { };
+ }
+ }
+
+ if ($form->{l_mails}) {
+ my @mail_links = RecordLinks->get_links(from_table => 'dunning', to_table => 'email_journal', from_id => $ref->{dunning_table_id});
+ if (scalar @mail_links) {
+ my $email_journals = SL::DB::Manager::EmailJournal->get_all(where => [id => [ map { $_->{to_id} } @mail_links ]]);
+ my $html = join '<br>', map { SL::Presenter::EmailJournal::email_journal($_) } @$email_journals;
+ my $text = join "\n", map { $_->subject } @$email_journals;
+ $row->{mails} = { 'raw_data' => $html, data => $text };
+ } else {
+ $row->{mails} = { };
+ }
+ }
+
+ push @{ $current_dunning_rows }, $row;
+
+ $previous_dunning_id = $ref->{dunning_id};
+ $first_row_for_dunning = 0;
+ }
+
+ $report->add_data($current_dunning_rows) if (scalar @{ $current_dunning_rows });
+
+ $report->set_options('raw_top_info_text' => $form->parse_html_template('dunning/show_dunning_top'),
+ 'raw_bottom_info_text' => $form->parse_html_template('dunning/show_dunning_bottom'),
+ 'output_format' => 'HTML',
+ 'attachment_basename' => $locale->text('dunning_list') . strftime('_%Y%m%d', localtime time),
+ );
+
+ $report->set_options_from_form();
+
+ setup_dn_show_dunning_action_bar();
+ $report->generate_with_headers();
+
+ $main::lxdebug->leave_sub();
+
+}
+
+sub print_dunning {
+ $main::lxdebug->enter_sub();
+
+ my $form = $main::form;