use parent qw(Exporter);
use Exporter qw(import);
-our @EXPORT = qw(grouped_record_list empty_record_list record_list);
+our @EXPORT = qw(grouped_record_list empty_record_list record_list record);
use SL::Util;
return [ $array ];
}
+sub record {
+ my ($self, $record, %params) = @_;
+
+ my %grouped = _group_records( [ $record ] ); # pass $record as arrayref
+ my $type = (keys %grouped)[0];
+
+ return $self->sales_invoice( $record, %params) if $type eq 'sales_invoices';
+ return $self->purchase_invoice($record, %params) if $type eq 'purchase_invoices';
+ return $self->ar_transaction( $record, %params) if $type eq 'ar_transactions';
+ return $self->ap_transaction( $record, %params) if $type eq 'ap_transactions';
+ return $self->gl_transaction( $record, %params) if $type eq 'gl_transactions';
+
+ return '';
+}
+
sub grouped_record_list {
my ($self, $list, %params) = @_;
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};
$output .= _purchase_invoice_list( $self, $groups{purchase_invoices}, %params) if $groups{purchase_invoices};
$output .= _ap_transaction_list( $self, $groups{ap_transactions}, %params) if $groups{ap_transactions};
+ $output .= _gl_transaction_list( $self, $groups{gl_transactions}, %params) if $groups{gl_transactions};
+
+ $output .= _bank_transactions( $self, $groups{bank_transactions}, %params) if $groups{bank_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 .= _letter_list( $self, $groups{letters}, %params) if $groups{letters};
+
$output = $self->render('presenter/record/grouped_record_list', %params, output => $output);
return $output;
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') },
};
}
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 },
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 },
+ gl_transactions => sub { (ref($_[0]) eq 'SL::DB::GLTransaction') },
+ bank_transactions => sub { (ref($_[0]) eq 'SL::DB::BankTransaction') && $_[0]->id },
+ letters => sub { (ref($_[0]) eq 'SL::DB::Letter') && $_[0]->id },
);
my %groups;
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) = @_;
type => 'sales_invoice',
columns => [
[ $::locale->text('Invoice Date'), 'transdate' ],
+ [ $::locale->text('Type'), sub { $_[0]->displayable_type } ],
[ $::locale->text('Invoice Number'), sub { $self->sales_invoice($_[0], display => 'table-cell') } ],
[ $::locale->text('Quotation Number'), 'quonumber' ],
[ $::locale->text('Order Number'), 'ordnumber' ],
type => 'ar_transaction',
columns => [
[ $::locale->text('Invoice Date'), 'transdate' ],
+ [ $::locale->text('Type'), sub { $_[0]->displayable_type } ],
[ $::locale->text('Invoice Number'), sub { $self->ar_transaction($_[0], display => 'table-cell') } ],
[ $::locale->text('Customer'), 'customer' ],
[ $::locale->text('Net amount'), 'netamount' ],
);
}
+sub _gl_transaction_list {
+ my ($self, $list, %params) = @_;
+
+ return $self->record_list(
+ $list,
+ title => $::locale->text('GL Transactions'),
+ type => 'gl_transaction',
+ columns => [
+ [ $::locale->text('Date'), 'transdate' ],
+ [ $::locale->text('Reference'), 'reference' ],
+ [ $::locale->text('Description'), sub { $self->gl_transaction($_[0 ], display => 'table-cell') } ],
+ ],
+ %params,
+ );
+}
+
+sub _bank_transactions {
+ my ($self, $list, %params) = @_;
+
+ return $self->record_list(
+ $list,
+ title => $::locale->text('Bank transactions'),
+ type => 'bank_transactions',
+ columns => [
+ [ $::locale->text('Transdate'), 'transdate' ],
+ [ $::locale->text('Local Bank Code'), sub { $self->bank_code($_[0]->local_bank_account) } ],
+ [ $::locale->text('Local account number'), sub { $self->account_number($_[0]->local_bank_account) } ],
+ [ $::locale->text('Remote Bank Code'), 'remote_bank_code' ],
+ [ $::locale->text('Remote account number'),'remote_account_number' ],
+ [ $::locale->text('Valutadate'), 'valutadate' ],
+ [ $::locale->text('Amount'), 'amount' ],
+ [ $::locale->text('Currency'), sub { $_[0]->currency->name } ],
+ [ $::locale->text('Remote name'), 'remote_name' ],
+ [ $::locale->text('Purpose'), 'purpose' ],
+ ],
+ %params,
+ );
+}
+
sub _sepa_export_list {
my ($self, $list, %params) = @_;
_sepa_export_list($self, $list, %params, type => 'sepa_collection');
}
+sub _letter_list {
+ my ($self, $list, %params) = @_;
+
+ return $self->record_list(
+ $list,
+ title => $::locale->text('Letters'),
+ type => 'letter',
+ columns => [
+ [ $::locale->text('Date'), 'date' ],
+ [ $::locale->text('Letternumber'), sub { $self->letter($_[0], display => 'table-cell') } ],
+ [ $::locale->text('Customer'), 'customer' ],
+ [ $::locale->text('Reference'), 'reference' ],
+ [ $::locale->text('Subject'), 'subject' ],
+ ],
+ %params,
+ );
+}
+
1;
__END__
=over 4
+=item C<record>
+
+Returns a rendered version (actually an instance of
+L<SL::Presenter::EscapedText>) of a single ar, ap or gl object.
+
+Example:
+ # fetch the record from a random acc_trans object and print its link (could be ar, ap or gl)
+ my $record = SL::DB::Manager::AccTransaction->get_first()->record;
+ my $html = SL::Presenter->get->record($record, display => 'inline');
+
+=item C<grouped_record_list $list, %params>
+
=item C<empty_record_list>
Returns a rendered version (actually an instance of
=item * AP transactions
+=item * GL transactions
+
=item * SEPA collections
=item * SEPA transfers
=item C<with_columns>
Can be set by the caller to indicate additional columns to
-list. Currently supported:
+be listed. Currently supported:
=over 2
=item C<record_link_destination>
-The record link destination. Requires that the records to list have
+The record link destination. Requires that the records to be listed have
been retrieved via the L<SL::DB::Helper::LinkedRecords> helper.
=back
=item C<edit_record_links>
If trueish additional controls will be rendered that allow the user to
-remove and add record links. Requires that the records to list have
+remove and add record links. Requires that the records to be listed have
been retrieved via the L<SL::DB::Helper::LinkedRecords> helper.
=back