Bug 17971: Add support for objects represented by fk

For instance an issue is not fetch from its fk but using the fk
itemnumber.
We need to support them.

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Jonathan Druart 2017-01-17 16:18:54 +01:00 committed by Kyle M Hall
parent 3ee3cf10e6
commit 77b72decd4
2 changed files with 19 additions and 3 deletions

View File

@ -1563,10 +1563,12 @@ sub _get_tt_params {
my $fk = $config->{$table}->{fk};
if ( $is_a_loop ) {
unless ( ref( $tables->{$table} ) eq 'ARRAY' ) {
my $values = $tables->{$table} || [];
unless ( ref( $values ) eq 'ARRAY' ) {
croak "ERROR processing table $table. Wrong API call.";
}
my $objects = $module->search( { $pk => { -in => $tables->{$table} } } );
my $key = $pk ? $pk : $fk;
my $objects = $module->search( { $key => { -in => $values } } );
$params->{ $config->{$table}->{plural} } = $objects;
}
elsif ( $ref eq q{} || $ref eq 'HASH' ) {

View File

@ -380,7 +380,7 @@ subtest 'regression tests' => sub {
};
subtest 'loops' => sub {
plan tests => 1;
plan tests => 2;
my $code = "TEST";
my $module = "TEST";
@ -395,6 +395,20 @@ subtest 'loops' => sub {
my $expected_letter = join '', ( $patron_1->{surname}, $patron_2->{surname} );
is( $letter->{content}, $expected_letter, );
};
subtest 'foreign key is used' => sub {
plan tests => 1;
my $patron_1 = $builder->build({ source => 'Borrower' });
my $patron_2 = $builder->build({ source => 'Borrower' });
my $checkout_1 = $builder->build({ source => 'Issue', value => { borrowernumber => $patron_1->{borrowernumber} } } );
my $checkout_2 = $builder->build({ source => 'Issue', value => { borrowernumber => $patron_1->{borrowernumber} } } );
my $template = q|[% FOREACH checkout IN checkouts %][% checkout.issue_id %][% END %]|;
reset_template( { template => $template, code => $code, module => $module } );
my $letter = GetPreparedLetter( module => $module, letter_code => $code, loops => { issues => [ $checkout_1->{itemnumber}, $checkout_2->{itemnumber} ] } );
my $expected_letter = join '', ( $checkout_1->{issue_id}, $checkout_2->{issue_id} );
is( $letter->{content}, $expected_letter, );
};
};
sub reset_template {