Bug 16844: (follow-up of 15656) Remove export of GetMemberRelatives from C4::Members
[koha.git] / C4 / Category.pm
1 package C4::Category;
2
3 # Copyright 2009 Liblime
4 # Parts Copyright 2011 Tamil
5 #
6 # This file is part of Koha.
7 #
8 # Koha is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # Koha is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20
21 use strict;
22 use warnings;
23 use C4::Context;
24
25 our $AUTOLOAD;
26
27
28
29
30 =head1 NAME
31
32 C4::Category - objects from the categories table
33
34 =head1 SYNOPSIS
35
36     use C4::Category;
37     my @categories = C4::Category->all;
38     print join("\n", map { $_->description } @categories), "\n";
39
40 =head1 DESCRIPTION
41
42 Objects of this class represent a row in the C<categories> table.
43
44 Currently, the bare minimum for using this as a read-only data source has
45 been implemented.  The API was designed to make it easy to transition to
46 an ORM later on.
47
48 =head1 API
49
50 =head2 Class Methods
51
52 =cut
53
54 =head3 C4::Category->new(\%opts)
55
56 Given a hashref, a new (in-memory) C4::Category object will be instantiated.
57 The database is not touched.
58
59 =cut
60
61 sub new {
62     my ($class, $opts) = @_;
63     bless $opts => $class;
64 }
65
66
67
68
69 =head3 C4::Category->all
70
71 This returns all the categories as objects.  By default they're ordered by
72 C<description>.
73
74 =cut
75
76 sub all {
77     my ( $class ) = @_;
78     my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : "";
79     my $dbh = C4::Context->dbh;
80     # The categories table is small enough for
81     # `SELECT *` to be harmless.
82     my $query = "SELECT categories.* FROM categories";
83     $query .= qq{
84         LEFT JOIN categories_branches ON categories_branches.categorycode = categories.categorycode
85         WHERE categories_branches.branchcode = ? OR categories_branches.branchcode IS NULL
86     } if $branch_limit;
87     $query .= " ORDER BY description";
88     return map { $class->new($_) } @{
89         $dbh->selectall_arrayref(
90             $query,
91             { Slice => {} },
92             $branch_limit ? $branch_limit : ()
93         )
94     };
95 }
96
97
98
99
100 =head2 Object Methods
101
102 These are read-only accessors for attributes of a C4::Category object.
103
104 =head3 $category->categorycode
105
106 =cut
107
108 =head3 $category->description
109
110 =cut
111
112 =head3 $category->enrolmentperiod
113
114 =cut
115
116 =head3 $category->upperagelimit
117
118 =cut
119
120 =head3 $category->dateofbirthrequired
121
122 =cut
123
124 =head3 $category->finetype
125
126 =cut
127
128 =head3 $category->bulk
129
130 =cut
131
132 =head3 $category->enrolmentfee
133
134 =cut
135
136 =head3 $category->overduenoticerequired
137
138 =cut
139
140 =head3 $category->issuelimit
141
142 =cut
143
144 =head3 $category->reservefee
145
146 =cut
147
148 =head3 $category->category_type
149
150 =cut
151
152 sub AUTOLOAD {
153     my $self = shift;
154     my $attr = $AUTOLOAD;
155     $attr =~ s/.*://;
156     if (exists $self->{$attr}) {
157         return $self->{$attr};
158     } else {
159         return undef;
160     }
161 }
162
163 sub DESTROY { }
164
165
166
167
168 =head1 SEE ALSO
169
170 The following modules make reference to the C<categories> table.
171
172 L<C4::Members>, L<C4::Overdues>, L<C4::Reserves>
173
174
175 =head1 AUTHOR
176
177 John Beppu <john.beppu@liblime.com>
178
179 =cut
180
181 1;