#!/usr/bin/perl # Finlay working on this file from 26-03-2002 # Reorganising this branches admin page..... use strict; use CGI; use C4::Output; use C4::Database; # Fixed variables my $linecolor1='#ffffcc'; my $linecolor2='white'; my $backgroundimage="/images/background-mem.gif"; my $script_name="/cgi-bin/koha/admin/branches.pl"; my $pagesize=20; ####################################################################################### # Main loop.... my $input = new CGI; my $branchcode=$input->param('branchcode'); my $op = $input->param('op'); # header print $input->header; # start the page and read in includes print startpage(); print startmenu('admin'); if ($op eq 'add') { # If the user has pressed the "add new branch" button. print heading("Branches: Add Branch"); print editbranchform(); } elsif ($op eq 'edit') { # if the user has pressed the "edit branch settings" button. print heading("Branches: Edit Branch"); print editbranchform($branchcode); } elsif ($op eq 'add_validate') { # confirm settings change... my $params = $input->Vars; unless ($params->{'branchcode'} && $params->{'branchname'}) { default ("Cannot change branch record: You must specify a Branchname and a Branchcode"); } else { setbranchinfo($params); default ("Branch record changed for branch: $params->{'branchname'}"); } } elsif ($op eq 'delete') { # if the user has pressed the "delete branch" button. my $message = checkdatabasefor($branchcode); if ($message) { default($message); } else { print deleteconfirm($branchcode); } } elsif ($op eq 'delete_confirmed') { # actually delete branch and return to the main screen.... deletebranch($branchcode); default("The branch with code $branchcode has been deleted."); } else { # if no operation has been set... default(); } print endmenu('admin'); print endpage(); ###################################################################################################### # # html output functions.... sub default { my ($message) = @_; print heading("Branches"); print "$message"; print "
"; print branchinfotable(); print branchcategoriestable(); } sub heading { my ($head) = @_; return "$head
"; } sub editbranchform { # prepares the edit form... my ($branchcode) = @_; my $data; if ($branchcode) { $data = getbranchinfo($branchcode); $data = $data->[0]; } # make the checkboxs..... my $catinfo = getcategoryinfo(); my $catcheckbox; foreach my $cat (@$catinfo) { my $checked = ""; my $tmp = $cat->{'categorycode'}; if (grep {/^$tmp$/} @{$data->{'categories'}}) { $checked = "CHECKED"; } $catcheckbox .= <$cat->{'categoryname'} $cat->{'codedescription'} EOF } my $form = < $catcheckbox
Branch code
Name 
Address
 
 
Phone
Fax
E-mail
 
EOF return $form; } sub deleteconfirm { # message to print if the my ($branchcode) = @_; my $output = <
EOF return $output; } sub branchinfotable { # makes the html for a table of branch info from reference to an array of hashs. my ($branchcode) = @_; my $branchinfo; if ($branchcode) { $branchinfo = getbranchinfo($branchcode); } else { $branchinfo = getbranchinfo(); } my $table = < Branches Name Code Address Categories   EOF my $color; foreach my $branch (@$branchinfo) { ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1); my $address = ''; $address .= $branch->{'branchaddress1'} if ($branch->{'branchaddress1'}); $address .= '
'.$branch->{'branchaddress2'} if ($branch->{'branchaddress2'}); $address .= '
'.$branch->{'branchaddress3'} if ($branch->{'branchaddress3'}); $address .= '
ph: '.$branch->{'branchphone'} if ($branch->{'branchphone'}); $address .= '
fax: '.$branch->{'branchfax'} if ($branch->{'branchfax'}); $address .= '
email: '.$branch->{'branchemail'} if ($branch->{'branchemail'}); $address = '(nothing entered)' unless ($address); my $categories = ''; foreach my $cat (@{$branch->{'categories'}}) { my ($catinfo) = @{getcategoryinfo($cat)}; $categories .= $catinfo->{'categoryname'}."
"; } $categories = '(no categories set)' unless ($categories); $table .= < $branch->{'branchname'} $branch->{'branchcode'} $address $categories
EOF } $table .= "
"; return $table; } sub branchcategoriestable { #Needs to be implemented... my $categoryinfo = getcategoryinfo(); my $table = < Branches Categories Name Code Description EOF my $color; foreach my $cat (@$categoryinfo) { ($color eq $linecolor1) ? ($color=$linecolor2) : ($color=$linecolor1); $table .= < $cat->{'categoryname'} $cat->{'categorycode'} $cat->{'codedescription'} EOF } $table .= ""; return $table; } ###################################################################################################### # # Database functions.... sub getbranchinfo { # returns a reference to an array of hashes containing branches, my ($branchcode) = @_; my $dbh = &C4Connect; my $query; if ($branchcode) { my $bc = $dbh->quote($branchcode); $query = "Select * from branches where branchcode = $bc"; } else {$query = "Select * from branches";} my $sth = $dbh->prepare($query); $sth->execute; my @results; while (my $data = $sth->fetchrow_hashref) { my $tmp = $data->{'branchcode'}; my $brc = $dbh->quote($tmp); $query = "select categorycode from branchrelations where branchcode = $brc"; my $nsth = $dbh->prepare($query); $nsth->execute; my @cats = (); while (my ($cat) = $nsth->fetchrow_array) { push(@cats, $cat); } $nsth->finish; $data->{'categories'} = \@cats; push(@results, $data); } $sth->finish; $dbh->disconnect; return \@results; } sub getcategoryinfo { # returns a reference to an array of hashes containing branches, my ($catcode) = @_; my $dbh = &C4Connect; my $query; if ($catcode) { my $cc = $dbh->quote($catcode); $query = "select * from branchcategories where categorycode = $cc"; } else { $query = "Select * from branchcategories"; } my $sth = $dbh->prepare($query); $sth->execute; my @results; while (my $data = $sth->fetchrow_hashref) { push(@results, $data); } $sth->finish; $dbh->disconnect; return \@results; } sub setbranchinfo { # sets the data from the editbranch form, and writes to the database... my ($data) = @_; my $dbh=&C4Connect; my $query = "replace branches (branchcode,branchname,branchaddress1,branchaddress2,branchaddress3,branchphone,branchfax,branchemail) values ("; my $tmp; $tmp = $data->{'branchcode'}; $query.= $dbh->quote($tmp).","; $tmp = $data->{'branchname'}; $query.= $dbh->quote($tmp).","; $tmp = $data->{'branchaddress1'}; $query.= $dbh->quote($tmp).","; $tmp = $data->{'branchaddress2'}; $query.= $dbh->quote($tmp).","; $tmp = $data->{'branchaddress3'}; $query.= $dbh->quote($tmp).","; $tmp = $data->{'branchphone'}; $query.= $dbh->quote($tmp).","; $tmp = $data->{'branchfax'}; $query.= $dbh->quote($tmp).","; $tmp = $data->{'branchemail'}; $query.= $dbh->quote($tmp).")"; my $sth=$dbh->prepare($query); $sth->execute; $sth->finish; $dbh->disconnect; # sort out the categories.... my @checkedcats; my $cats = getcategoryinfo(); foreach my $cat (@$cats) { my $code = $cat->{'categorycode'}; if ($data->{$code}) { push(@checkedcats, $code); } } my $branchcode = $data->{'branchcode'}; my $branch = getbranchinfo($branchcode); $branch = $branch->[0]; my $branchcats = $branch->{'categories'}; my @addcats; my @removecats; foreach my $bcat (@$branchcats) { unless (grep {/^$bcat$/} @checkedcats) { push(@removecats, $bcat); } } foreach my $ccat (@checkedcats){ unless (grep {/^$ccat$/} @$branchcats) { push(@addcats, $ccat); } } my $dbh=&C4Connect; foreach my $cat (@addcats) { my $query = "insert into branchrelations (branchcode, categorycode) values('$branchcode', '$cat')"; my $sth = $dbh->prepare($query); $sth->execute; $sth->finish; } foreach my $cat (@removecats) { my $query = "delete from branchrelations where branchcode='$branchcode' and categorycode='$cat'"; my $sth = $dbh->prepare($query); $sth->execute; $sth->finish; } $dbh->disconnect; } sub deletebranch { # delete branch... my ($branchcode) = @_; my $query = "delete from branches where branchcode = '$branchcode'"; my $dbh=&C4Connect; my $sth=$dbh->prepare($query); $sth->execute; $sth->finish; $dbh->disconnect; } sub checkdatabasefor { # check to see if the branchcode is being used in the database somewhere.... my ($branchcode) = @_; my $dbh = &C4Connect; my $sth=$dbh->prepare("select count(*) from items where holdingbranch='$branchcode' or homebranch='$branchcode'"); $sth->execute; my ($total) = $sth->fetchrow_array; $sth->finish; $dbh->disconnect; my $message; if ($total) { $message = "Branch cannot be deleted because there are $total items using that branch."; } return $message; }