if ( @$ordernumbers ) {
$query .= ' AND (aqorders.ordernumber IN ( ' . join (',', ('?') x @$ordernumbers ) . '))';
push @query_params, @$ordernumbers;
+ }
if ( @$additional_fields ) {
- my @baskets = Koha::Acquisition::Baskets->search_additional_fields($additional_fields);
+ my @baskets = Koha::Acquisition::Baskets->filter_by_additional_fields($additional_fields);
return [] unless @baskets;
my $additional_fields = $args->{additional_fields} // [];
my $matching_record_ids_for_additional_fields = [];
if ( @$additional_fields ) {
- my @subscriptions = Koha::Subscriptions->search_additional_fields($additional_fields);
+ my @subscriptions = Koha::Subscriptions->filter_by_additional_fields($additional_fields);
return () unless @subscriptions;
package Koha::AdditionalFieldValue;
+use Modern::Perl;
+
+use base 'Koha::Object';
+
=head1 NAME
Koha::AdditionalFieldValue - Koha::Object derived class for additional field
=cut
-use Modern::Perl;
+=head2 Class methods
-use base 'Koha::Object';
+=cut
+
+=head3 field
+
+Return the Koha:AdditionalField object for this AdditionalFeidlValue
+
+=cut
+
+sub field {
+ my ( $self ) = @_;
+
+ return Koha::AdditionalField->_new_from_dbic( $self->_result()->field() );
+}
+
+=head2 Internal methods
+
+=head3 _type
+
+=cut
sub _type { 'AdditionalFieldValue' }
=cut
use Modern::Perl;
+use Koha::AdditionalFieldValue;
use base 'Koha::Objects';
package Koha::Object::Mixin::AdditionalFields;
use Modern::Perl;
+use Koha::AdditionalFieldValues;
=head1 NAME
sub set_additional_fields {
my ($self, $additional_fields) = @_;
- my $rs = Koha::Database->new->schema->resultset('AdditionalFieldValue');
+ my @additional_field_values = $self->additional_field_values->delete;
foreach my $additional_field (@$additional_fields) {
- my $field_value = $rs->find_or_new({
- field_id => $additional_field->{id},
- record_id => $self->id,
- });
my $value = $additional_field->{value};
if (defined $value) {
- $field_value->set_columns({ value => $value })->update_or_insert;
- } elsif ($field_value->in_storage) {
- $field_value->delete;
+ my $field_value = Koha::AdditionalFieldValue->new({
+ field_id => $additional_field->{id},
+ record_id => $self->id,
+ value => $value,
+ })->store;
}
}
}
sub additional_field_values {
my ($self) = @_;
- return $self->_result->additional_field_values;
+ my $afv_rs = $self->_result->additional_field_values;
+ return Koha::AdditionalFieldValues->_new_from_dbic( $afv_rs );
}
=head1 AUTHOR
use Koha::Foos;
- Koha::Foos->search_additional_fields(...)
+ Koha::Foos->filter_by_additional_fields(...)
=head1 API
=head2 Public methods
-=head3 search_additional_fields
+=head3 filter_by_additional_fields
- my @objects = Koha::Foos->search_additional_fields([
+ my @objects = Koha::Foos->filter_by_additional_fields([
{
id => 1,
value => 'foo',
=cut
-sub search_additional_fields {
+sub filter_by_additional_fields {
my ($class, $additional_fields) = @_;
my %conditions;
return {
"$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.basketno" },
- # TODO Add column additional_field_values.tablename to avoid subquery ?
"$args->{foreign_alias}.field_id" =>
{ -in => \'(SELECT id FROM additional_fields WHERE tablename = "aqbasket")' },
};
return {
"$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.subscriptionid" },
- # TODO Add column additional_field_values.tablename to avoid subquery ?
"$args->{foreign_alias}.field_id" =>
{ -in => \'(SELECT id FROM additional_fields WHERE tablename = "subscription")' },
};
available_additional_fields => [ Koha::AdditionalFields->search( { tablename => 'aqbasket' } ) ],
additional_field_values => { map {
$_->field->name => $_->value
- } Koha::Acquisition::Baskets->find($basketno)->additional_field_values },
+ } Koha::Acquisition::Baskets->find($basketno)->additional_field_values->as_list },
);
}
$template->param(
additional_field_values => { map {
$_->field->id => $_->value
- } Koha::Acquisition::Baskets->find($basketno)->additional_field_values },
+ } Koha::Acquisition::Baskets->find($basketno)->additional_field_values->as_list },
);
} else {
#new basket
}
my @additional_fields;
- for my $field (Koha::AdditionalFields->search({ tablename => 'aqbasket' })) {
+ my $basket_fields = Koha::AdditionalFields->search({ tablename => 'aqbasket' });
+ while ( my $field = $basket_fields->next ) {
my $value = $input->param('additional_field_' . $field->id);
push @additional_fields, {
id => $field->id,
my %additional_field_values;
if ($subscriptionid) {
my $subscription = Koha::Subscriptions->find($subscriptionid);
- foreach my $value ($subscription->additional_field_values) {
+ foreach my $value ($subscription->additional_field_values->as_list) {
$additional_field_values{$value->field_id} = $value->value;
}
}
my @additional_fields;
my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 });
- for my $field (Koha::AdditionalFields->search({ tablename => 'subscription' })) {
+ my $basket_fields = Koha::AdditionalFields->search({ tablename => 'aqbasket' });
+ while ( my $field = $basket_fields->next ) {
my $value = $query->param('additional_field_' . $field->id);
if ($field->marcfield) {
my ($field, $subfield) = split /\$/, $field->marcfield;
my @additional_fields;
my $record = GetMarcBiblio({ biblionumber => $biblionumber, embed_items => 1 });
- for my $field (Koha::AdditionalFields->search({ tablename => 'subscription' })) {
+ my $basket_fields = Koha::AdditionalFields->search({ tablename => 'aqbasket' });
+ while ( my $field = $basket_fields->next ) {
my $value = $query->param('additional_field_' . $field->id);
if ($field->marcfield) {
my ($field, $subfield) = split /\$/, $field->marcfield;
use POSIX qw(strftime);
-use Test::More tests => 73;
+use Test::More tests => 74;
use t::lib::Mocks;
use Koha::Database;
+use Koha::Acquisition::Basket;
use MARC::File::XML ( BinaryEncoding => 'utf8', RecordFormat => 'MARC21' );
is( $order->get_from_storage->order_internalnote, $first_note );
};
+subtest 'GetHistory with additional fields' => sub {
+ plan tests => 3;
+ my $builder = t::lib::TestBuilder->new;
+ my $order_basket = $builder->build({ source => 'Aqbasket', value => { is_standing => 0 } });
+ my $orderinfo ={
+ basketno => $order_basket->{basketno},
+ rrp => 19.99,
+ replacementprice => undef,
+ quantity => 1,
+ quantityreceived => 0,
+ datereceived => undef,
+ datecancellationprinted => undef,
+ };
+ my $order = $builder->build({ source => 'Aqorder', value => $orderinfo });
+ my $history = GetHistory(ordernumber => $order->{ordernumber});
+ is( scalar( @$history ), 1, 'GetHistory returns the one order');
+
+ my $additional_field = $builder->build({source => 'AdditionalField', value => {
+ tablename => 'aqbasket',
+ name => 'snakeoil',
+ authorised_value_category => "",
+ }
+ });
+ $history = GetHistory( ordernumber => $order->{ordernumber}, additional_fields => [{ id => $additional_field->{id}, value=>'delicious'}]);
+ is( scalar ( @$history ), 0, 'GetHistory returns no order for an unused additional field');
+ my $basket = Koha::Acquisition::Baskets->find({ basketno => $order_basket->{basketno} });
+ $basket->set_additional_fields([{
+ id => $additional_field->{id},
+ value => 'delicious',
+ }]);
+
+ $history = GetHistory( ordernumber => $order->{ordernumber}, additional_fields => [{ id => $additional_field->{id}, value=>'delicious'}]);
+ is( scalar( @$history ), 1, 'GetHistory returns the order when additional field is set');
+};
+
$schema->storage->txn_rollback();
value => 'bar value for basket2',
})->store;
-my @baskets = Koha::Acquisition::Baskets->search_additional_fields([
+my @baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
{
id => $foo->id,
value => 'foo value for basket1',
is(scalar @baskets, 1, 'search returns only one result');
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
-@baskets = Koha::Acquisition::Baskets->search_additional_fields([
+@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
{
id => $foo->id,
value => 'foo value for basket2',
is(scalar @baskets, 1, 'search returns only one result');
is($baskets[0]->basketno, $basket2->basketno, 'result is basket2');
-@baskets = Koha::Acquisition::Baskets->search_additional_fields([
+@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
{
id => $foo->id,
value => 'foo value for basket1',
is(scalar @baskets, 1, 'search returns only one result');
is($baskets[0]->basketno, $basket1->basketno, 'result is basket1');
-@baskets = Koha::Acquisition::Baskets->search_additional_fields([
+@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
{
id => $foo->id,
value => 'foo value for basket1',
is(scalar @baskets, 0, 'search returns no result');
-@baskets = Koha::Acquisition::Baskets->search_additional_fields([
+@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
{
id => $foo->id,
value => 'foo',
is(scalar @baskets, 2, 'search returns two results');
-@baskets = Koha::Acquisition::Baskets->search_additional_fields([
+@baskets = Koha::Acquisition::Baskets->filter_by_additional_fields([
{
id => $foo->id,
value => 'foo',