Bug 17642: Try to fix AV code
[koha.git] / Koha / AuthorisedValues.pm
1 package Koha::AuthorisedValues;
2
3 # Copyright ByWater Solutions 2014
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 use Modern::Perl;
21
22 use Carp;
23
24 use Koha::Database;
25
26 use Koha::AuthorisedValue;
27 use Koha::MarcSubfieldStructures;
28
29 use base qw(Koha::Objects);
30
31 =head1 NAME
32
33 Koha::AuthorisedValues - Koha Authorised value Object set class
34
35 =head1 API
36
37 =head2 Class Methods
38
39 =cut
40
41 =head3 Koha::AuthorisedValues->search();
42
43 my @objects = Koha::AuthorisedValues->search($params);
44
45 =cut
46
47 sub search {
48     my ( $self, $params, $attributes ) = @_;
49
50     my $branchcode = $params->{branchcode};
51     delete( $params->{branchcode} );
52
53     my $or =
54       $branchcode
55       ? {
56         '-or' => [
57             'authorised_values_branches.branchcode' => undef,
58             'authorised_values_branches.branchcode' => $branchcode,
59         ]
60       }
61       : {};
62     my $join = $branchcode ? { join => 'authorised_values_branches' } : {};
63     $attributes //= {};
64     $attributes = { %$attributes, %$join };
65     return $self->SUPER::search( { %$params, %$or, }, $attributes );
66 }
67
68 sub search_by_marc_field {
69     my ( $self, $params ) = @_;
70     my $frameworkcode = $params->{frameworkcode} || '';
71     my $tagfield      = $params->{tagfield};
72     my $tagsubfield   = $params->{tagsubfield};
73
74     return unless $tagfield or $tagsubfield;
75
76     return $self->SUPER::search(
77         {   'marc_subfield_structures.frameworkcode' => $frameworkcode,
78             ( defined $tagfield    ? ( 'marc_subfield_structures.tagfield'    => $tagfield )    : () ),
79             ( defined $tagsubfield ? ( 'marc_subfield_structures.tagsubfield' => $tagsubfield ) : () ),
80         },
81         { join => { category => 'marc_subfield_structures' } }
82     );
83 }
84
85 sub search_by_koha_field {
86     my ( $self, $params ) = @_;
87     my $frameworkcode    = $params->{frameworkcode} || '';
88     my $kohafield        = $params->{kohafield};
89     my $category         = $params->{category};
90     #my $authorised_value = $params->{authorised_value};
91
92     return unless $kohafield;
93
94     return $self->SUPER::search(
95         {   'marc_subfield_structures.frameworkcode' => $frameworkcode,
96             'marc_subfield_structures.kohafield'     => $kohafield,
97             ( defined $category ? ( category_name    => $category )         : () ),
98             ( exists $params->{authorised_value} ? ( 'me.authorised_value' => $params->{authorised_value} ) : () ),
99         },
100         {   join     => { category => 'marc_subfield_structures' },
101             distinct => 1,
102         }
103     );
104 }
105
106 sub categories {
107     my ( $self ) = @_;
108     my $rs = $self->_resultset->search(
109         undef,
110         {
111             select => ['category'],
112             distinct => 1,
113             order_by => 'category',
114         },
115     );
116     return map $_->get_column('category'), $rs->all;
117 }
118
119 =head3 type
120
121 =cut
122
123 sub _type {
124     return 'AuthorisedValue';
125 }
126
127 sub object_class {
128     return 'Koha::AuthorisedValue';
129 }
130
131 =head1 AUTHOR
132
133 Kyle M Hall <kyle@bywatersolutions.com>
134
135 =cut
136
137 1;