View | Details | Raw Unified | Return to bug 15774
Collapse All | Expand All

(-)a/C4/Acquisition.pm (-1 / +1 lines)
Lines 2456-2462 sub GetHistory { Link Here
2456
    }
2456
    }
2457
2457
2458
    if ( @$additional_fields ) {
2458
    if ( @$additional_fields ) {
2459
        my @baskets = Koha::Acquisition::Baskets->search_additional_fields($additional_fields);
2459
        my @baskets = Koha::Acquisition::Baskets->filter_by_additional_fields($additional_fields);
2460
2460
2461
        return [] unless @baskets;
2461
        return [] unless @baskets;
2462
2462
(-)a/C4/Serials.pm (-1 / +1 lines)
Lines 521-527 sub SearchSubscriptions { Link Here
521
    my $additional_fields = $args->{additional_fields} // [];
521
    my $additional_fields = $args->{additional_fields} // [];
522
    my $matching_record_ids_for_additional_fields = [];
522
    my $matching_record_ids_for_additional_fields = [];
523
    if ( @$additional_fields ) {
523
    if ( @$additional_fields ) {
524
        my @subscriptions = Koha::Subscriptions->search_additional_fields($additional_fields);
524
        my @subscriptions = Koha::Subscriptions->filter_by_additional_fields($additional_fields);
525
525
526
        return () unless @subscriptions;
526
        return () unless @subscriptions;
527
527
(-)a/Koha/AdditionalFieldValue.pm (-2 / +24 lines)
Lines 1-5 Link Here
1
package Koha::AdditionalFieldValue;
1
package Koha::AdditionalFieldValue;
2
2
3
use Modern::Perl;
4
5
use base 'Koha::Object';
6
3
=head1 NAME
7
=head1 NAME
4
8
5
Koha::AdditionalFieldValue - Koha::Object derived class for additional field
9
Koha::AdditionalFieldValue - Koha::Object derived class for additional field
Lines 7-15 values Link Here
7
11
8
=cut
12
=cut
9
13
10
use Modern::Perl;
14
=head2 Class methods
11
15
12
use base 'Koha::Object';
16
=cut
17
18
=head3 field
19
20
Return the Koha:AdditionalField object for this AdditionalFeidlValue
21
22
=cut
23
24
sub field {
25
    my ( $self ) = @_;
26
27
    return Koha::AdditionalField->_new_from_dbic( $self->_result()->field() );
28
}
29
30
=head2 Internal methods
31
32
=head3 _type
33
34
=cut
13
35
14
sub _type { 'AdditionalFieldValue' }
36
sub _type { 'AdditionalFieldValue' }
15
37
(-)a/Koha/AdditionalFieldValues.pm (+1 lines)
Lines 8-13 values Link Here
8
=cut
8
=cut
9
9
10
use Modern::Perl;
10
use Modern::Perl;
11
use Koha::AdditionalFieldValue;
11
12
12
use base 'Koha::Objects';
13
use base 'Koha::Objects';
13
14
(-)a/Koha/Object/Mixin/AdditionalFields.pm (-9 / +9 lines)
Lines 1-6 Link Here
1
package Koha::Object::Mixin::AdditionalFields;
1
package Koha::Object::Mixin::AdditionalFields;
2
2
3
use Modern::Perl;
3
use Modern::Perl;
4
use Koha::AdditionalFieldValues;
4
5
5
=head1 NAME
6
=head1 NAME
6
7
Lines 43-60 Koha::Object::Mixin::AdditionalFields Link Here
43
sub set_additional_fields {
44
sub set_additional_fields {
44
    my ($self, $additional_fields) = @_;
45
    my ($self, $additional_fields) = @_;
45
46
46
    my $rs = Koha::Database->new->schema->resultset('AdditionalFieldValue');
47
    my @additional_field_values = $self->additional_field_values->delete;
47
48
48
    foreach my $additional_field (@$additional_fields) {
49
    foreach my $additional_field (@$additional_fields) {
49
        my $field_value = $rs->find_or_new({
50
            field_id => $additional_field->{id},
51
            record_id => $self->id,
52
        });
53
        my $value = $additional_field->{value};
50
        my $value = $additional_field->{value};
54
        if (defined $value) {
51
        if (defined $value) {
55
            $field_value->set_columns({ value => $value })->update_or_insert;
52
            my $field_value = Koha::AdditionalFieldValue->new({
56
        } elsif ($field_value->in_storage) {
53
                field_id => $additional_field->{id},
57
            $field_value->delete;
54
                record_id => $self->id,
55
                value => $value,
56
            })->store;
58
        }
57
        }
59
    }
58
    }
60
}
59
}
Lines 70-76 Returns additional field values Link Here
70
sub additional_field_values {
69
sub additional_field_values {
71
    my ($self) = @_;
70
    my ($self) = @_;
72
71
73
    return $self->_result->additional_field_values;
72
    my $afv_rs = $self->_result->additional_field_values;
73
    return Koha::AdditionalFieldValues->_new_from_dbic( $afv_rs );
74
}
74
}
75
75
76
=head1 AUTHOR
76
=head1 AUTHOR
(-)a/Koha/Objects/Mixin/AdditionalFields.pm (-4 / +4 lines)
Lines 20-34 Koha::Objects::Mixin::AdditionalFields Link Here
20
20
21
    use Koha::Foos;
21
    use Koha::Foos;
22
22
23
    Koha::Foos->search_additional_fields(...)
23
    Koha::Foos->filter_by_additional_fields(...)
24
24
25
=head1 API
25
=head1 API
26
26
27
=head2 Public methods
27
=head2 Public methods
28
28
29
=head3 search_additional_fields
29
=head3 filter_by_additional_fields
30
30
31
    my @objects = Koha::Foos->search_additional_fields([
31
    my @objects = Koha::Foos->filter_by_additional_fields([
32
        {
32
        {
33
            id => 1,
33
            id => 1,
34
            value => 'foo',
34
            value => 'foo',
Lines 41-47 Koha::Objects::Mixin::AdditionalFields Link Here
41
41
42
=cut
42
=cut
43
43
44
sub search_additional_fields {
44
sub filter_by_additional_fields {
45
    my ($class, $additional_fields) = @_;
45
    my ($class, $additional_fields) = @_;
46
46
47
    my %conditions;
47
    my %conditions;
(-)a/Koha/Schema/Result/Aqbasket.pm (-1 lines)
Lines 321-327 __PACKAGE__->has_many( Link Here
321
    return {
321
    return {
322
        "$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.basketno" },
322
        "$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.basketno" },
323
323
324
        # TODO Add column additional_field_values.tablename to avoid subquery ?
325
        "$args->{foreign_alias}.field_id" =>
324
        "$args->{foreign_alias}.field_id" =>
326
            { -in => \'(SELECT id FROM additional_fields WHERE tablename = "aqbasket")' },
325
            { -in => \'(SELECT id FROM additional_fields WHERE tablename = "aqbasket")' },
327
    };
326
    };
(-)a/Koha/Schema/Result/Subscription.pm (-1 lines)
Lines 457-463 __PACKAGE__->has_many( Link Here
457
    return {
457
    return {
458
        "$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.subscriptionid" },
458
        "$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.subscriptionid" },
459
459
460
        # TODO Add column additional_field_values.tablename to avoid subquery ?
461
        "$args->{foreign_alias}.field_id" =>
460
        "$args->{foreign_alias}.field_id" =>
462
            { -in => \'(SELECT id FROM additional_fields WHERE tablename = "subscription")' },
461
            { -in => \'(SELECT id FROM additional_fields WHERE tablename = "subscription")' },
463
    };
462
    };
(-)a/acqui/basket.pl (-1 / +1 lines)
Lines 435-441 if ( $op eq 'list' ) { Link Here
435
        available_additional_fields => [ Koha::AdditionalFields->search( { tablename => 'aqbasket' } ) ],
435
        available_additional_fields => [ Koha::AdditionalFields->search( { tablename => 'aqbasket' } ) ],
436
        additional_field_values => { map {
436
        additional_field_values => { map {
437
            $_->field->name => $_->value
437
            $_->field->name => $_->value
438
        } Koha::Acquisition::Baskets->find($basketno)->additional_field_values },
438
        } Koha::Acquisition::Baskets->find($basketno)->additional_field_values->as_list },
439
    );
439
    );
440
}
440
}
441
441
(-)a/acqui/basketheader.pl (-2 / +3 lines)
Lines 101-107 if ( $op eq 'add_form' ) { Link Here
101
        $template->param(
101
        $template->param(
102
            additional_field_values => { map {
102
            additional_field_values => { map {
103
                $_->field->id => $_->value
103
                $_->field->id => $_->value
104
            } Koha::Acquisition::Baskets->find($basketno)->additional_field_values },
104
            } Koha::Acquisition::Baskets->find($basketno)->additional_field_values->as_list },
105
        );
105
        );
106
    } else {
106
    } else {
107
    #new basket
107
    #new basket
Lines 171-177 if ( $op eq 'add_form' ) { Link Here
171
    }
171
    }
172
172
173
    my @additional_fields;
173
    my @additional_fields;
174
    for my $field (Koha::AdditionalFields->search({ tablename => 'aqbasket' })) {
174
    my $basket_fields = Koha::AdditionalFields->search({ tablename => 'aqbasket' });
175
    while ( my $field = $basket_fields->next ) {
175
        my $value = $input->param('additional_field_' . $field->id);
176
        my $value = $input->param('additional_field_' . $field->id);
176
        push @additional_fields, {
177
        push @additional_fields, {
177
            id => $field->id,
178
            id => $field->id,
(-)a/serials/subscription-add.pl (-3 / +5 lines)
Lines 142-148 my @additional_fields = Koha::AdditionalFields->search({ tablename => 'subscript Link Here
142
my %additional_field_values;
142
my %additional_field_values;
143
if ($subscriptionid) {
143
if ($subscriptionid) {
144
    my $subscription = Koha::Subscriptions->find($subscriptionid);
144
    my $subscription = Koha::Subscriptions->find($subscriptionid);
145
    foreach my $value ($subscription->additional_field_values) {
145
    foreach my $value ($subscription->additional_field_values->as_list) {
146
        $additional_field_values{$value->field_id} = $value->value;
146
        $additional_field_values{$value->field_id} = $value->value;
147
    }
147
    }
148
}
148
}
Lines 357-363 sub redirect_add_subscription { Link Here
357
357
358
    my @additional_fields;
358
    my @additional_fields;
359
    my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 });
359
    my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 });
360
    for my $field (Koha::AdditionalFields->search({ tablename => 'subscription' })) {
360
    my $basket_fields = Koha::AdditionalFields->search({ tablename => 'aqbasket' });
361
    while ( my $field = $basket_fields->next ) {
361
        my $value = $query->param('additional_field_' . $field->id);
362
        my $value = $query->param('additional_field_' . $field->id);
362
        if ($field->marcfield) {
363
        if ($field->marcfield) {
363
            my ($field, $subfield) = split /\$/, $field->marcfield;
364
            my ($field, $subfield) = split /\$/, $field->marcfield;
Lines 455-461 sub redirect_mod_subscription { Link Here
455
456
456
    my @additional_fields;
457
    my @additional_fields;
457
    my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 });
458
    my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 });
458
    for my $field (Koha::AdditionalFields->search({ tablename => 'subscription' })) {
459
    my $basket_fields = Koha::AdditionalFields->search({ tablename => 'aqbasket' });
460
    while ( my $field = $basket_fields->next ) {
459
        my $value = $query->param('additional_field_' . $field->id);
461
        my $value = $query->param('additional_field_' . $field->id);
460
        if ($field->marcfield) {
462
        if ($field->marcfield) {
461
            my ($field, $subfield) = split /\$/, $field->marcfield;
463
            my ($field, $subfield) = split /\$/, $field->marcfield;
(-)a/t/db_dependent/Acquisition.t (-1 / +38 lines)
Lines 19-27 use Modern::Perl; Link Here
19
19
20
use POSIX qw(strftime);
20
use POSIX qw(strftime);
21
21
22
use Test::More tests => 70;
22
use Test::More tests => 71;
23
use t::lib::Mocks;
23
use t::lib::Mocks;
24
use Koha::Database;
24
use Koha::Database;
25
use Koha::Acquisition::Basket;
25
26
26
use MARC::File::XML ( BinaryEncoding => 'utf8', RecordFormat => 'MARC21' );
27
use MARC::File::XML ( BinaryEncoding => 'utf8', RecordFormat => 'MARC21' );
27
28
Lines 708-711 subtest 'ModReceiveOrder replacementprice tests' => sub { Link Here
708
    is ($received_order->{replacementprice},'16.120000',"Replacement price set if none passed in");
709
    is ($received_order->{replacementprice},'16.120000',"Replacement price set if none passed in");
709
};
710
};
710
711
712
subtest 'GetHistory with additional fields' => sub {
713
    plan tests => 3;
714
    my $builder = t::lib::TestBuilder->new;
715
    my $order_basket = $builder->build({ source => 'Aqbasket', value => { is_standing => 0 } });
716
    my $orderinfo ={
717
        basketno => $order_basket->{basketno},
718
        rrp => 19.99,
719
        replacementprice => undef,
720
        quantity => 1,
721
        quantityreceived => 0,
722
        datereceived => undef,
723
        datecancellationprinted => undef,
724
    };
725
    my $order =        $builder->build({ source => 'Aqorder', value => $orderinfo });
726
    my $history = GetHistory(ordernumber => $order->{ordernumber});
727
    is( scalar( @$history ), 1, 'GetHistory returns the one order');
728
729
    my $additional_field = $builder->build({source => 'AdditionalField', value => {
730
            tablename => 'aqbasket',
731
            name => 'snakeoil',
732
            authorised_value_category => "",
733
        }
734
    });
735
    $history = GetHistory( ordernumber => $order->{ordernumber}, additional_fields => [{ id => $additional_field->{id}, value=>'delicious'}]);
736
    is( scalar ( @$history ), 0, 'GetHistory returns no order for an unused additional field');
737
    my $basket = Koha::Acquisition::Baskets->find({ basketno => $order_basket->{basketno} });
738
    $basket->set_additional_fields([{
739
        id => $additional_field->{id},
740
        value => 'delicious',
741
    }]);
742
743
    $history = GetHistory( ordernumber => $order->{ordernumber}, additional_fields => [{ id => $additional_field->{id}, value=>'delicious'}]);
744
    is( scalar( @$history ), 1, 'GetHistory returns the order when additional field is set');
745
746
};
747
711
$schema->storage->txn_rollback();
748
$schema->storage->txn_rollback();
(-)a/t/db_dependent/Koha/Objects/Mixin/AdditionalFields.t (-7 / +6 lines)
Lines 53-59 Koha::AdditionalFieldValue->new({ Link Here
53
    value => 'bar value for basket2',
53
    value => 'bar value for basket2',
54
})->store;
54
})->store;
55
55
56
my @baskets = Koha::Acquisition::Baskets->search_additional_fields([
56
my @baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
57
    {
57
    {
58
        id => $foo->id,
58
        id => $foo->id,
59
        value => 'foo value for basket1',
59
        value => 'foo value for basket1',
Lines 63-69 my @baskets = Koha::Acquisition::Baskets->search_additional_fields([ Link Here
63
is(scalar @baskets, 1, 'search returns only one result');
63
is(scalar @baskets, 1, 'search returns only one result');
64
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
64
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
65
65
66
@baskets = Koha::Acquisition::Baskets->search_additional_fields([
66
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
67
    {
67
    {
68
        id => $foo->id,
68
        id => $foo->id,
69
        value => 'foo value for basket2',
69
        value => 'foo value for basket2',
Lines 73-79 is($baskets[0]->basketno, $basket1->basketno, 'result is basket1'); Link Here
73
is(scalar @baskets, 1, 'search returns only one result');
73
is(scalar @baskets, 1, 'search returns only one result');
74
is($baskets[0]->basketno, $basket2->basketno, 'result is basket2');
74
is($baskets[0]->basketno, $basket2->basketno, 'result is basket2');
75
75
76
@baskets = Koha::Acquisition::Baskets->search_additional_fields([
76
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
77
    {
77
    {
78
        id => $foo->id,
78
        id => $foo->id,
79
        value => 'foo value for basket1',
79
        value => 'foo value for basket1',
Lines 87-93 is($baskets[0]->basketno, $basket2->basketno, 'result is basket2'); Link Here
87
is(scalar @baskets, 1, 'search returns only one result');
87
is(scalar @baskets, 1, 'search returns only one result');
88
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
88
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
89
89
90
@baskets = Koha::Acquisition::Baskets->search_additional_fields([
90
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
91
    {
91
    {
92
        id => $foo->id,
92
        id => $foo->id,
93
        value => 'foo value for basket1',
93
        value => 'foo value for basket1',
Lines 100-106 is($baskets[0]->basketno, $basket1->basketno, 'result is basket1'); Link Here
100
100
101
is(scalar @baskets, 0, 'search returns no result');
101
is(scalar @baskets, 0, 'search returns no result');
102
102
103
@baskets = Koha::Acquisition::Baskets->search_additional_fields([
103
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
104
    {
104
    {
105
        id => $foo->id,
105
        id => $foo->id,
106
        value => 'foo',
106
        value => 'foo',
Lines 109-115 is(scalar @baskets, 0, 'search returns no result'); Link Here
109
109
110
is(scalar @baskets, 2, 'search returns two results');
110
is(scalar @baskets, 2, 'search returns two results');
111
111
112
@baskets = Koha::Acquisition::Baskets->search_additional_fields([
112
@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
113
    {
113
    {
114
        id => $foo->id,
114
        id => $foo->id,
115
        value => 'foo',
115
        value => 'foo',
116
- 

Return to bug 15774