X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FPresenter%2FRecord.pm;h=368a05d7caed4bcc832c91fb638ee211e5cb345d;hb=833f083eae2a4547c49f8f92a2fdca6ba4dfe5f4;hp=082fbd019d1ddb3b94f8fb7ac1fa54e5dddf5a2d;hpb=16c6be411e2eddf778e665b0da6c452c42b676af;p=kivitendo-erp.git diff --git a/SL/Presenter/Record.pm b/SL/Presenter/Record.pm index 082fbd019..368a05d7c 100644 --- a/SL/Presenter/Record.pm +++ b/SL/Presenter/Record.pm @@ -7,6 +7,8 @@ use parent qw(Exporter); use Exporter qw(import); our @EXPORT = qw(grouped_record_list empty_record_list record_list); +use SL::Util; + use Carp; use List::Util qw(first); @@ -25,6 +27,7 @@ sub grouped_record_list { my %groups = _sort_grouped_lists(_group_records($list)); my $output = ''; + $output .= _requirement_spec_list( $self, $groups{requirement_specs}, %params) if $groups{requirement_specs}; $output .= _sales_quotation_list( $self, $groups{sales_quotations}, %params) if $groups{sales_quotations}; $output .= _sales_order_list( $self, $groups{sales_orders}, %params) if $groups{sales_orders}; $output .= _sales_delivery_order_list( $self, $groups{sales_delivery_orders}, %params) if $groups{sales_delivery_orders}; @@ -35,7 +38,10 @@ sub grouped_record_list { $output .= _purchase_order_list( $self, $groups{purchase_orders}, %params) if $groups{purchase_orders}; $output .= _purchase_delivery_order_list($self, $groups{purchase_delivery_orders}, %params) if $groups{purchase_delivery_orders}; $output .= _purchase_invoice_list( $self, $groups{purchase_invoices}, %params) if $groups{purchase_invoices}; - $output .= _ar_transaction_list( $self, $groups{ar_transactions}, %params) if $groups{ar_transactions}; + $output .= _ap_transaction_list( $self, $groups{ap_transactions}, %params) if $groups{ap_transactions}; + + $output .= _sepa_collection_list( $self, $groups{sepa_collections}, %params) if $groups{sepa_collections}; + $output .= _sepa_transfer_list( $self, $groups{sepa_transfers}, %params) if $groups{sepa_transfers}; $output = $self->render('presenter/record/grouped_record_list', %params, output => $output); @@ -69,7 +75,12 @@ sub record_list { if ($with_columns{record_link_direction}) { push @columns, { title => $::locale->text('Link direction'), - data => sub { $_[0]->{_record_link_direction} eq 'from' ? $::locale->text('Row was source for current record') : $::locale->text('Row was created from current record') }, + data => sub { + $_[0]->{_record_link_depth} > 1 + ? $::locale->text('Row was linked to another record') + : $_[0]->{_record_link_direction} eq 'from' + ? $::locale->text('Row was source for current record') + : $::locale->text('Row was created from current record') }, }; } @@ -92,8 +103,9 @@ sub record_list { my $meta = $column_meta{ $spec->{data} }; my $type = ref $meta; my $relationship = $relationships{ $spec->{data} }; - my $rel_type = !$relationship ? '' : lc $relationship->class; - $rel_type =~ s/^sl::db:://; + my $rel_type = !$relationship ? '' : $relationship->class; + $rel_type =~ s/^SL::DB:://; + $rel_type = SL::Util::snakify($rel_type); if (ref($spec->{data}) eq 'CODE') { $cell{value} = $spec->{data}->($obj); @@ -136,6 +148,7 @@ sub _group_records { my ($list) = @_; my %matchers = ( + requirement_specs => sub { (ref($_[0]) eq 'SL::DB::RequirementSpec') }, sales_quotations => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_quotation') }, sales_orders => sub { (ref($_[0]) eq 'SL::DB::Order') && $_[0]->is_type('sales_order') }, sales_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && $_[0]->is_sales }, @@ -146,6 +159,8 @@ sub _group_records { purchase_delivery_orders => sub { (ref($_[0]) eq 'SL::DB::DeliveryOrder') && !$_[0]->is_sales }, purchase_invoices => sub { (ref($_[0]) eq 'SL::DB::PurchaseInvoice') && $_[0]->invoice }, ap_transactions => sub { (ref($_[0]) eq 'SL::DB::PurchaseInvoice') && !$_[0]->invoice }, + sepa_collections => sub { (ref($_[0]) eq 'SL::DB::SepaExportItem') && $_[0]->ar_id }, + sepa_transfers => sub { (ref($_[0]) eq 'SL::DB::SepaExportItem') && $_[0]->ap_id }, ); my %groups; @@ -162,11 +177,36 @@ sub _group_records { sub _sort_grouped_lists { my (%groups) = @_; - $groups{$_} = [ sort { $a->date <=> $b->date } @{ $groups{$_} } ] for keys %groups; + foreach my $group (keys %groups) { + next unless @{ $groups{$group} }; + if ($groups{$group}->[0]->can('compare_to')) { + $groups{$group} = [ sort { $a->compare_to($b) } @{ $groups{$group} } ]; + } else { + $groups{$group} = [ sort { $a->date <=> $b->date } @{ $groups{$group} } ]; + } + } return %groups; } +sub _requirement_spec_list { + my ($self, $list, %params) = @_; + + return $self->record_list( + $list, + title => $::locale->text('Requirement specs'), + type => 'requirement_spec', + columns => [ + [ $::locale->text('Requirement spec number'), sub { $self->requirement_spec($_[0], display => 'table-cell') } ], + [ $::locale->text('Customer'), 'customer' ], + [ $::locale->text('Title'), 'title' ], + [ $::locale->text('Project'), 'project', ], + [ $::locale->text('Status'), sub { $_[0]->status->description } ], + ], + %params, + ); +} + sub _sales_quotation_list { my ($self, $list, %params) = @_; @@ -371,6 +411,41 @@ sub _ap_transaction_list { ); } +sub _sepa_export_list { + my ($self, $list, %params) = @_; + + my ($source, $destination) = $params{type} eq 'sepa_transfer' ? qw(our vc) : qw(vc our); + $params{title} = $params{type} eq 'sepa_transfer' ? $::locale->text('Bank transfers via SEPA') : $::locale->text('Bank collections via SEPA'); + $params{with_columns} = [ grep { $_ ne 'record_link_direction' } @{ $params{with_columns} || [] } ]; + + delete $params{edit_record_links}; + + return $self->record_list( + $list, + columns => [ + [ $::locale->text('Export Number'), 'sepa_export', ], + [ $::locale->text('Execution date'), 'execution_date' ], + [ $::locale->text('Export date'), sub { $_[0]->sepa_export->itime->to_kivitendo } ], + [ $::locale->text('Source BIC'), "${source}_bic" ], + [ $::locale->text('Source IBAN'), "${source}_iban" ], + [ $::locale->text('Destination BIC'), "${destination}_bic" ], + [ $::locale->text('Destination IBAN'), "${destination}_iban" ], + [ $::locale->text('Amount'), 'amount' ], + ], + %params, + ); +} + +sub _sepa_transfer_list { + my ($self, $list, %params) = @_; + _sepa_export_list($self, $list, %params, type => 'sepa_transfer'); +} + +sub _sepa_collection_list { + my ($self, $list, %params) = @_; + _sepa_export_list($self, $list, %params, type => 'sepa_collection'); +} + 1; __END__ @@ -441,6 +516,10 @@ The order in which the records are grouped is: =item * AP transactions +=item * SEPA collections + +=item * SEPA transfers + =back Objects of unknown types are skipped.