Projekt

Allgemein

Profil

Herunterladen (3,06 KB) Statistiken
| Zweig: | Markierung: | Revision:
package SL::DB::Helper::LegacyPrinting;

use strict;

use parent qw(Exporter);
our @EXPORT = qw(map_keys_to_arrays format_as_number);

sub map_keys_to_arrays {
my ($items, $keys, $template_arrays) = @_;

for my $key (@$keys) {
# handle nested keys
if ($key =~ /\./) {
my ($k1, $k2) = split /\./, $key;
$template_arrays->{$k1} = [ map { { $k2 => $_->{$k1}->{$k2} } } @$items ];
} else {
$template_arrays->{$key} = [ map {
if (ref $_ eq 'HASH') {
$_->{$key}
} else {
$_->can($key) ? $_->$key
: $_->{$key}
}
} @$items ];
}
}
}

sub format_as_number {
my ($keys, $template_arrays) = @_;

for my $key (@$keys) {
$template_arrays->{$key} = [ map {
$::form->format_amount(\%::myconfig, $_, 2, 0),
} @{ $template_arrays->{$key} } ];
}
}

1;

__END__

=pod

=encoding utf8

=head1 NAME

SL::DB::Helper::LegacyPrinting - Helper functions to support printing using the built-it template parser

=head1 DESCRIPTION

The new Reclamation controller, and possibly other future controllers, only support printing using Template Toolkit (TT)
for parsing the templates. For OpenDocument templates however, template toolkit cannot be used.

Template Toolkit (TT) can access Rose DB objects directly, which is a feature not available in the built-in parser.
For positions in a loop, such as positions in a table, the built-in parser expects the data in a specific format.
Therefore, we need to prepare the data accordingly before it can be processed by the built-in parser.

In the past this was done in the respective modules, e.g. SL/OE.pm. The idea would be to extract the data from the Rose
DB objects. That should hopefully result in less and simpler code.

=head1 FUNCTIONS

=head2 C<map_keys_to_arrays ($items, $keys, $template_arrays)>

Extracts the given keys from the given list of Rose DB objects and adds them to the given hash reference,
in the format that the built in template parser expects.

The expected format looks like the following, e.g.:

# 'qty_as_number' => [
# '1.00',
# '3.00'
# ],
# 'part' => [
# {
# 'partnumber' => '000013'
# },
# {
# 'partnumber' => '000004'
# }
# ],
# 'position' => [
# 1,
# 2
# ],
# 'unit' => [
# 'Stck',
# 'Stck'
# ],

=over 4

=item C<$items>

A reference to a list of Rose DB objects from which the keys should be extracted.

=item C<$keys>

A reference to a list of keys that should be extracted from the Rose DB object.
Nested keys should be denoted by a dot. E.g.:

qw( qty_as_number part.partnumber position unit )

=item C<$template_arrays>

A reference to a hash to which the extracted keys should be added.

=back

=head2 C<format_as_number ($keys, $template_arrays)>

Formats the given keys in the given hash reference as numbers.

=head1 AUTHOR

Cem Aydin E<lt>cem.aydin@revamp-it.chE<gt>
(16-16/38)