3 # This file is part of Koha.
5 # Koha is free software; you can redistribute it and/or modify it under the
6 # terms of the GNU General Public License as published by the Free Software
7 # Foundation; either version 2 of the License, or (at your option) any later
10 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
11 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License along with
15 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
16 # Suite 330, Boston, MA 02111-1307 USA
24 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
26 # set the version for version checking
31 C4::Branch - Koha branch module
39 The functions in this module deal with branches.
54 &CheckBranchCategorycode
58 &GetBranchesInCategory
59 &ModBranchCategoryInfo
66 $branches = &GetBranches();
67 returns informations about ALL branches.
68 Create a branch selector with the following code
69 IndependantBranches Insensitive...
70 GetBranchInfo() returns the same information without the problems of this function
71 (namespace collision, mainly). You should probably use that, and replace GetBranches()
72 with GetBranchInfo() where you see it in the code.
76 my $branches = GetBranches;
78 foreach my $thisbranch (keys %$branches) {
79 my $selected = 1 if $thisbranch eq $branch;
80 my %row =(value => $thisbranch,
81 selected => $selected,
82 branchname => $branches->{$thisbranch}->{'branchname'},
84 push @branchloop, \%row;
89 <select name="branch">
90 <option value="">Default</option>
91 <!-- TMPL_LOOP name="branchloop" -->
92 <option value="<!-- TMPL_VAR name="value" -->" <!-- TMPL_IF name="selected" -->selected<!-- /TMPL_IF -->><!-- TMPL_VAR name="branchname" --></option>
100 # returns a reference to a hash of references to ALL branches...
102 my $dbh = C4::Context->dbh;
104 my $query="SELECT * from branches";
105 if ($onlymine && C4::Context->userenv && C4::Context->userenv->{branch}){
106 $query .= " WHERE branchcode =".$dbh->quote(C4::Context->userenv->{branch});
108 $query.=" order by branchname";
109 $sth = $dbh->prepare($query);
111 while ( my $branch = $sth->fetchrow_hashref ) {
114 "select categorycode from branchrelations where branchcode = ?");
115 $nsth->execute( $branch->{'branchcode'} );
116 while ( my ($cat) = $nsth->fetchrow_array ) {
118 # FIXME - This seems wrong. It ought to be
119 # $branch->{categorycodes}{$cat} = 1;
120 # otherwise, there's a namespace collision if there's a
121 # category with the same name as a field in the 'branches'
122 # table (i.e., don't create a category called "issuing").
123 # In addition, the current structure doesn't really allow
124 # you to list the categories that a branch belongs to:
125 # you'd have to list keys %$branch, and remove those keys
126 # that aren't fields in the "branches" table.
127 # $branch->{$cat} = 1;
128 $branch->{category}{$cat} = 1;
130 $branches{ $branch->{'branchcode'} } = $branch;
132 return ( \%branches );
140 my ($branchcode) = @_;
141 my $dbh = C4::Context->dbh;
143 $sth = $dbh->prepare("Select branchname from branches where branchcode=?");
144 $sth->execute($branchcode);
145 my $branchname = $sth->fetchrow_array;
147 return ($branchname);
152 &ModBranch($newvalue);
154 This function modify an existing branches.
156 C<$newvalue> is a ref to an array wich is containt all the column from branches table.
163 my $dbh = C4::Context->dbh;
167 (branchcode,branchname,branchaddress1,
168 branchaddress2,branchaddress3,branchphone,
169 branchfax,branchemail,branchip,branchprinter)
170 VALUES (?,?,?,?,?,?,?,?,?,?)
172 my $sth = $dbh->prepare($query);
174 $data->{'branchcode'}, $data->{'branchname'},
175 $data->{'branchaddress1'}, $data->{'branchaddress2'},
176 $data->{'branchaddress3'}, $data->{'branchphone'},
177 $data->{'branchfax'}, $data->{'branchemail'},
178 $data->{'branchip'}, $data->{'branchprinter'},
183 SET branchname=?,branchaddress1=?,
184 branchaddress2=?,branchaddress3=?,branchphone=?,
185 branchfax=?,branchemail=?,branchip=?,branchprinter=?
188 my $sth = $dbh->prepare($query);
190 $data->{'branchname'},
191 $data->{'branchaddress1'}, $data->{'branchaddress2'},
192 $data->{'branchaddress3'}, $data->{'branchphone'},
193 $data->{'branchfax'}, $data->{'branchemail'},
194 $data->{'branchip'}, $data->{'branchprinter'},
195 $data->{'branchcode'},
198 # sort out the categories....
200 my $cats = GetBranchCategory();
201 foreach my $cat (@$cats) {
202 my $code = $cat->{'categorycode'};
203 if ( $data->{$code} ) {
204 push( @checkedcats, $code );
207 my $branchcode = uc( $data->{'branchcode'} );
208 my $branch = GetBranchInfo($branchcode);
209 $branch = $branch->[0];
210 my $branchcats = $branch->{'categories'};
213 foreach my $bcat (@$branchcats) {
215 unless ( grep { /^$bcat$/ } @checkedcats ) {
216 push( @removecats, $bcat );
219 foreach my $ccat (@checkedcats) {
220 unless ( grep { /^$ccat$/ } @$branchcats ) {
221 push( @addcats, $ccat );
224 foreach my $cat (@addcats) {
227 "insert into branchrelations (branchcode, categorycode) values(?, ?)"
229 $sth->execute( $branchcode, $cat );
232 foreach my $cat (@removecats) {
235 "delete from branchrelations where branchcode=? and categorycode=?"
237 $sth->execute( $branchcode, $cat );
242 =head2 GetBranchCategory
244 $results = GetBranchCategory($categorycode);
246 C<$results> is an ref to an array.
250 sub GetBranchCategory {
252 # returns a reference to an array of hashes containing branches,
254 my $dbh = C4::Context->dbh;
257 # print DEBUG "GetBranchCategory: entry: catcode=".cvs($catcode)."\n";
261 "select * from branchcategories where categorycode = ?");
262 $sth->execute($catcode);
265 $sth = $dbh->prepare("Select * from branchcategories");
269 while ( my $data = $sth->fetchrow_hashref ) {
270 push( @results, $data );
274 # print DEBUG "GetBranchCategory: exit: returning ".cvs(\@results)."\n";
278 =head2 GetCategoryTypes
280 $categorytypes = GetCategoryTypes;
281 returns a list of category types.
282 Currently these types are HARDCODED.
283 type: 'searchdomain' defines a group of agencies that the calling library may search in.
284 Other usage of agency categories falls under type: 'properties'.
285 to allow for other uses of categories.
286 The searchdomain bit may be better implemented as a separate module, but
287 the categories were already here, and minimally used.
290 #TODO manage category types. rename possibly to 'agency domains' ? as borrowergroups are called categories.
291 sub GetCategoryTypes() {
292 return ( 'searchdomain','properties');
297 $branch = GetBranch( $query, $branches );
302 my ( $query, $branches ) = @_; # get branch for this query from branches
303 my $branch = $query->param('branch');
304 my %cookie = $query->cookie('userenv');
305 ($branch) || ($branch = $cookie{'branchname'});
306 ( $branches->{$branch} ) || ( $branch = ( keys %$branches )[0] );
310 =head2 GetBranchDetail
312 $branchname = &GetBranchDetail($branchcode);
314 Given the branch code, the function returns the corresponding
315 branch name for a comprehensive information display
319 sub GetBranchDetail {
320 my ($branchcode) = @_;
321 my $dbh = C4::Context->dbh;
322 my $sth = $dbh->prepare("SELECT * FROM branches WHERE branchcode = ?");
323 $sth->execute($branchcode);
324 my $branchname = $sth->fetchrow_hashref();
329 =head2 get_branchinfos_of
331 my $branchinfos_of = get_branchinfos_of(@branchcodes);
333 Associates a list of branchcodes to the information of the branch, taken in
336 Returns a href where keys are branchcodes and values are href where keys are
337 branch information key.
339 print 'branchname is ', $branchinfos_of->{$code}->{branchname};
343 sub get_branchinfos_of {
344 my @branchcodes = @_;
350 WHERE branchcode IN ('
351 . join( ',', map( { "'" . $_ . "'" } @branchcodes ) ) . ')
353 return C4::Koha::get_infos_of( $query, 'branchcode' );
356 =head2 GetBranchCategories
358 my $categories = GetBranchCategories($branchcode,$categorytype);
360 Returns a list ref of anon hashrefs with keys eq columns of branchcategories table,
361 i.e. categorycode, categorydescription, categorytype, categoryname.
362 if $branchcode and/or $categorytype are passed, limit set to categories that
363 $branchcode is a member of , and to $categorytype.
367 sub GetBranchCategories($$) {
368 my ($branchcode,$categorytype) = @_;
369 my $dbh = C4::Context->dbh();
370 my $select = "SELECT c.* FROM branchcategories c";
373 $select .= ",branchrelations r, branches b ";
374 push @where, "c.categorycode=r.categorycode and r.branchcode=? ";
375 push @bind , $branchcode;
378 push @where, " c.categorytype=? ";
379 push @bind, $categorytype;
381 my $sth=$dbh->prepare( $select . " where " . join(" and ", @where) );
382 $sth->execute(@bind);
384 my $branchcats = $sth->fetchall_arrayref({});
386 return( $branchcats );
390 =head2 GetBranchesInCategory
392 my $branches = GetBranchesInCategory($categorycode);
394 Returns a href: keys %$branches eq (branchcode,branchname) .
398 sub GetBranchesInCategory($) {
399 my ($categorycode) = @_;
400 my $dbh = C4::context->dbh();
401 my $sth=$dbh->prepare( "SELECT branchcode, branchname FROM branchrelations r, branches b
402 where r.branchcode=b.branchcode and r.categorycode=?");
403 $sth->execute($categorycode);
404 my $branches = $sth->fetchall_hashref;
411 $results = GetBranchInfo($branchcode);
413 returns C<$results>, a reference to an array of hashes containing branches.
414 if $branchcode, just this branch, with associated categories.
415 if ! $branchcode && $categorytype, all branches in the category.
419 my ($branchcode,$categorytype) = @_;
420 my $dbh = C4::Context->dbh;
427 "Select * from branches where branchcode = ? order by branchcode");
428 $sth->execute($branchcode);
431 $sth = $dbh->prepare("Select * from branches order by branchcode");
435 while ( my $data = $sth->fetchrow_hashref ) {
436 my @bind = ($data->{'branchcode'});
437 my $query= "select r.categorycode from branchrelations r";
438 $query .= ", branchcategories c " if($categorytype);
439 $query .= " where branchcode=? ";
441 $query .= " and c.categorytype=? and r.categorycode=c.categorycode";
442 push @bind, $categorytype;
444 my $nsth=$dbh->prepare($query);
445 $nsth->execute( @bind );
447 while ( my ($cat) = $nsth->fetchrow_array ) {
451 $data->{'categories'} = \@cats;
452 push( @results, $data );
460 &DelBranch($branchcode);
465 my ($branchcode) = @_;
466 my $dbh = C4::Context->dbh;
467 my $sth = $dbh->prepare("delete from branches where branchcode = ?");
468 $sth->execute($branchcode);
472 =head2 ModBranchCategoryInfo
474 &ModBranchCategoryInfo($data);
475 sets the data from the editbranch form, and writes to the database...
479 sub ModBranchCategoryInfo {
482 my $dbh = C4::Context->dbh;
483 my $sth = $dbh->prepare("replace branchcategories (categorycode,categoryname,codedescription,categorytype) values (?,?,?,?)");
484 $sth->execute(uc( $data->{'categorycode'} ),$data->{'categoryname'}, $data->{'codedescription'},$data->{'categorytype'} );
488 =head2 DeleteBranchCategory
490 DeleteBranchCategory($categorycode);
494 sub DelBranchCategory {
495 my ($categorycode) = @_;
496 my $dbh = C4::Context->dbh;
497 my $sth = $dbh->prepare("delete from branchcategories where categorycode = ?");
498 $sth->execute($categorycode);
502 =head2 CheckBranchCategorycode
504 $number_rows_affected = CheckBranchCategorycode($categorycode);
508 sub CheckBranchCategorycode {
510 # check to see if the branchcode is being used in the database somewhere....
511 my ($categorycode) = @_;
512 my $dbh = C4::Context->dbh;
515 "select count(*) from branchrelations where categorycode=?");
516 $sth->execute($categorycode);
517 my ($total) = $sth->fetchrow_array;
525 Koha Developement team <info@koha.org>