[Koha-cvs] koha C4/Circulation/Circ2.pm C4/Reserves2.pm ko...
LAURIN arnaud
alaurin at ouestprovence.fr
Fri May 19 19:01:03 CEST 2006
CVSROOT: /sources/koha
Module name: koha
Branch:
Changes by: LAURIN arnaud <alaurin at savannah.gnu.org> 06/05/19 17:01:03
Modified files:
C4/Circulation : Circ2.pm
C4 : Reserves2.pm
koha-tmpl/intranet-tmpl/prog/en/includes: menus.inc
koha-tmpl/intranet-tmpl/prog/en: intranet-main.tmpl
Added files:
circ : branchreserves.pl currenttransfers.pl
waitingreservestransfers.pl
koha-tmpl/intranet-tmpl/prog/en/circ: branchreserves.tmpl
currenttransfers.tmpl
waitingreservestransfers.tmpl
koha-tmpl/intranet-tmpl/prog/en/includes: menu-circ.inc
Log message:
new dev : create 3 new program for circulation :
branchreserves : to see reserves for one library (with the branchip selection or librarian preferences)
currenttransfers : show all the transfers are waiting in the library
waitingreservetransfers: show all the book the librarian have to transfer to an another library .
"actions" are bugged, will be corrected .
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/koha/C4/Circulation/Circ2.pm.diff?tr1=1.102&tr2=1.103&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/koha/koha/C4/Reserves2.pm.diff?tr1=1.42&tr2=1.43&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/koha/koha/circ/branchreserves.pl?rev=1.1
http://cvs.savannah.gnu.org/viewcvs/koha/koha/circ/currenttransfers.pl?rev=1.1
http://cvs.savannah.gnu.org/viewcvs/koha/koha/circ/waitingreservestransfers.pl?rev=1.1
http://cvs.savannah.gnu.org/viewcvs/koha/koha/koha-tmpl/intranet-tmpl/prog/en/circ/branchreserves.tmpl?rev=1.1
http://cvs.savannah.gnu.org/viewcvs/koha/koha/koha-tmpl/intranet-tmpl/prog/en/circ/currenttransfers.tmpl?rev=1.1
http://cvs.savannah.gnu.org/viewcvs/koha/koha/koha-tmpl/intranet-tmpl/prog/en/circ/waitingreservestransfers.tmpl?rev=1.1
http://cvs.savannah.gnu.org/viewcvs/koha/koha/koha-tmpl/intranet-tmpl/prog/en/includes/menu-circ.inc?rev=1.1
http://cvs.savannah.gnu.org/viewcvs/koha/koha/koha-tmpl/intranet-tmpl/prog/en/includes/menus.inc.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/koha/koha/koha-tmpl/intranet-tmpl/prog/en/intranet-main.tmpl.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
Patches:
Index: koha/C4/Circulation/Circ2.pm
diff -u koha/C4/Circulation/Circ2.pm:1.102 koha/C4/Circulation/Circ2.pm:1.103
--- koha/C4/Circulation/Circ2.pm:1.102 Wed May 17 16:06:23 2006
+++ koha/C4/Circulation/Circ2.pm Fri May 19 17:01:02 2006
@@ -3,7 +3,7 @@
package C4::Circulation::Circ2;
-# $Id: Circ2.pm,v 1.102 2006/05/17 16:06:23 plg Exp $
+# $Id: Circ2.pm,v 1.103 2006/05/19 17:01:02 alaurin Exp $
#package to deal with Returns
#written 3/11/99 by olwen at katipo.co.nz
@@ -83,8 +83,13 @@
&fixdate
get_return_date_of
get_transfert_infos
+ &checktransferts
+ &GetReservesForBranch
+ &GetReservesToBranch
+ &GetTransfersFromBib
+ &getBranchIp
+ &dotranfer
);
-
# &getbranches &getprinters &getbranch &getprinter => moved to C4::Koha.pm
=head2 itemseen
@@ -503,11 +508,11 @@
my ($resfound, $resrec) = CheckReserves($iteminformation->{'itemnumber'});
if ($resfound and not $ignoreRs) {
$resrec->{'ResFound'} = $resfound;
- $messages->{'ResFound'} = $resrec;
- $dotransfer = 0;
+# $messages->{'ResFound'} = $resrec;
+ $dotransfer = 1;
}
- #actually do the transfer....
- if ($dotransfer) {
+
+ if ($dotransfer and not $resfound) {
dotransfer($iteminformation->{'itemnumber'}, $fbr, $tbr);
$messages->{'WasTransfered'} = 1;
}
@@ -524,10 +529,10 @@
$fbr = $dbh->quote($fbr);
$tbr = $dbh->quote($tbr);
#new entry in branchtransfers....
- $dbh->do("INSERT INTO branchtransfers (itemnumber, frombranch, datearrived, tobranch)
+ $dbh->do("INSERT INTO branchtransfers (itemnumber, frombranch, datesent, tobranch)
VALUES ($itm, $fbr, now(), $tbr)");
#update holdingbranch in items .....
- $dbh->do("UPDATE items set holdingbranch = $tbr WHERE items.itemnumber = $itm");
+ $dbh->do("UPDATE items set holdingbranch = $tbr WHERE items.itemnumber = $itm");
&itemseen($itm);
&domarctransfer($dbh,$itm);
return;
@@ -897,7 +902,7 @@
CancelReserve(0, $res->{'itemnumber'}, $res->{'borrowernumber'});
}
} elsif ($restype eq "Reserved") {
- warn "Reserved";
+# warn "Reserved";
# The item is on reserve for someone else.
my ($resborrower, $flags)=getpatroninformation($env, $resbor,0);
my $branches = getbranches();
@@ -914,7 +919,7 @@
} else {
# my $tobrcd = ReserveWaiting($res->{'itemnumber'}, $res->{'borrowernumber'});
# transferbook($tobrcd,$barcode, 1);
- warn "transferbook";
+# warn "transferbook";
}
}
}
@@ -934,8 +939,8 @@
$sth->execute($borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'}, $dateduef, $env->{'branchcode'});
$sth->finish;
$iteminformation->{'issues'}++;
- $sth=$dbh->prepare("update items set issues=? where itemnumber=?");
- $sth->execute($iteminformation->{'issues'},$iteminformation->{'itemnumber'});
+ $sth=$dbh->prepare("update items set issues=?, holdingbranch=? where itemnumber=?");
+ $sth->execute($iteminformation->{'issues'},C4::Context->userenv->{'branch'},$iteminformation->{'itemnumber'});
$sth->finish;
&itemseen($iteminformation->{'itemnumber'});
itemborrowed($iteminformation->{'itemnumber'});
@@ -1092,28 +1097,64 @@
$messages->{'wthdrawn'} = 1;
$doreturn = 0;
}
+# new op dev : if the book returned in an other branch update the holding branch
+
# update issues, thereby returning book (should push this out into another subroutine
my ($borrower) = getpatroninformation(\%env, $currentborrower, 0);
if ($doreturn) {
my $sth = $dbh->prepare("update issues set returndate = now() where (borrowernumber = ?) and (itemnumber = ?) and (returndate is null)");
$sth->execute($borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'});
+
+# FIXME the holdingbranch is updated if the document is returned in an other location .
+ if ( $iteminformation->{'holdingbranch'} ne C4::Context->userenv->{'branch'}){
+ my $sth_upd_location = $dbh->prepare("UPDATE items SET holdingbranch=? WHERE itemnumber=?");
+ $sth_upd_location->execute(C4::Context->userenv->{'branch'},$iteminformation->{'itemnumber'});
+ $sth_upd_location->finish;
+ $iteminformation->{'holdingbranch'} = C4::Context->userenv->{'branch'};
+ }
+
$messages->{'WasReturned'} = 1; # FIXME is the "= 1" right?
}
itemseen($iteminformation->{'itemnumber'});
($borrower) = getpatroninformation(\%env, $currentborrower, 0);
# transfer book to the current branch
- my ($transfered, $mess, $item) = transferbook($branch, $barcode, 1);
- if ($transfered) {
- $messages->{'WasTransfered'} = 1; # FIXME is the "= 1" right?
- }
+
+# FIXME function transfered still always used ????
+# my ($transfered, $mess, $item) = transferbook($branch, $barcode, 1);
+# if ($transfered) {
+# $messages->{'WasTransfered'} = 1; # FIXME is the "= 1" right?
+# }
+
# fix up the accounts.....
if ($iteminformation->{'itemlost'}) {
fixaccountforlostandreturned($iteminformation, $borrower);
$messages->{'WasLost'} = 1; # FIXME is the "= 1" right?
}
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# check if we have a transfer for this document
+ my $checktransfer = checktransferts($iteminformation->{'itemnumber'});
+# if we have a return, we update the line of transfers with the datearrived
+ if ($checktransfer){
+ my $sth = $dbh->prepare("update branchtransfers set datearrived = now() where itemnumber= ? AND datearrived IS NULL");
+ $sth->execute($iteminformation->{'itemnumber'});
+ $sth->finish;
+# now we check if there is a reservation with the validate of transfer if we have one, we can set it with the status 'W'
+ my $updateWaiting = SetWaitingStatus($iteminformation->{'itemnumber'});
+ }
+# if we don't have a transfer on run, we check if the document is not in his homebranch and there is not a reservation, we transfer this one to his home branch directly .
+ else {
+ # new op dev
+ my $checkreserves = CheckReserves($iteminformation->{'itemnumber'});
+ if (($iteminformation->{'homebranch'} ne $iteminformation->{'holdingbranch'}) and (not $checkreserves)){
+ my $automatictransfer = dotransfer($iteminformation->{'itemnumber'},$iteminformation->{'holdingbranch'},$iteminformation->{'homebranch'});
+ $messages->{'WasTransfered'} = 1;
+ }
+ }
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# fix up the overdues in accounts...
fixoverduesonreturn($borrower->{'borrowernumber'}, $iteminformation->{'itemnumber'});
# find reserves.....
+# if we don't have a reserve with the status W, we launch the Checkreserves routine
my ($resfound, $resrec) = CheckReserves($iteminformation->{'itemnumber'});
if ($resfound) {
# my $tobrcd = ReserveWaiting($resrec->{'itemnumber'}, $resrec->{'borrowernumber'});
@@ -1967,6 +2008,87 @@
return @row;
}
+
+sub DeleteTransfer {
+ my($itemnumber) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth=$dbh->prepare("DELETE FROM branchtransfers
+ where itemnumber=?
+ AND datearrived is null ");
+ $sth->execute($itemnumber);
+ $sth->finish;
+}
+
+sub GetTransfersFromBib {
+ my($frombranch,$tobranch) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth=$dbh->prepare("SELECT itemnumber,datesent,frombranch FROM
+ branchtransfers
+ where frombranch=?
+ AND tobranch=?
+ AND datearrived is null ");
+ $sth->execute($frombranch,$tobranch);
+ my @gettransfers;
+ my $i=0;
+ while (my $data=$sth->fetchrow_hashref){
+ $gettransfers[$i]=$data;
+ $i++;
+ }
+ $sth->finish;
+ return(@gettransfers);
+}
+
+sub GetReservesToBranch {
+ my($frombranch,$default) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth=$dbh->prepare("SELECT borrowernumber,reservedate,itemnumber,timestamp FROM
+ reserves
+ where priority='0' AND cancellationdate is null
+ AND branchcode=?
+ AND branchcode!=?
+ AND found is null ");
+ $sth->execute($frombranch,$default);
+ my @transreserv;
+ my $i=0;
+ while (my $data=$sth->fetchrow_hashref){
+ $transreserv[$i]=$data;
+ $i++;
+ }
+ $sth->finish;
+ return(@transreserv);
+}
+
+sub GetReservesForBranch {
+ my($frombranch) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth=$dbh->prepare("SELECT borrowernumber,reservedate,itemnumber,waitingdate FROM
+ reserves
+ where priority='0' AND cancellationdate is null
+ AND found='W'
+ AND branchcode=? order by reservedate");
+ $sth->execute($frombranch);
+ my @transreserv;
+ my $i=0;
+ while (my $data=$sth->fetchrow_hashref){
+ $transreserv[$i]=$data;
+ $i++;
+ }
+ $sth->finish;
+ return(@transreserv);
+}
+
+sub checktransferts{
+ my($itemnumber) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth=$dbh->prepare("SELECT datesent,frombranch,tobranch FROM branchtransfers
+ WHERE itemnumber = ? AND datearrived IS NULL");
+ $sth->execute($itemnumber);
+ my @tranferts = $sth->fetchrow_array;
+ $sth->finish;
+
+ return (@tranferts);
+}
+
1;
__END__
@@ -1977,3 +2099,4 @@
Koha Developement team <info at koha.org>
=cut
+
Index: koha/C4/Reserves2.pm
diff -u koha/C4/Reserves2.pm:1.42 koha/C4/Reserves2.pm:1.43
--- koha/C4/Reserves2.pm:1.42 Wed May 17 16:06:24 2006
+++ koha/C4/Reserves2.pm Fri May 19 17:01:03 2006
@@ -3,7 +3,7 @@
package C4::Reserves2;
-# $Id: Reserves2.pm,v 1.42 2006/05/17 16:06:24 plg Exp $
+# $Id: Reserves2.pm,v 1.43 2006/05/19 17:01:03 alaurin Exp $
# Copyright 2000-2002 Katipo Communications
#
@@ -66,11 +66,153 @@
&UpdateReserve
&getreservetitle
&Findgroupreserve
+ &FastFindReserves
+ &SetWaitingStatus
+ &GlobalCancel
+ &MinusPriority
+ &OtherReserves
GetFirstReserveDateFromItem
GetNumberReservesFromBorrower
);
# make all your functions, whether exported or not;
+=item GlobalCancel
+ New op dev for the circulation based on item, global is a function to cancel reserv,check other reserves, and transfer document if it's necessary
+=cut
+#'
+sub GlobalCancel {
+ my $messages;
+ my $nextreservinfo;
+ my ($itemnumber,$borrowernumber)=@_;
+
+# step 1 : cancel the reservation
+ my $CancelReserve = CancelReserve(0,$itemnumber,$borrowernumber);
+
+# step 2 launch the subroutine of the others reserves
+ my ($messages,$nextreservinfo) = OtherReserves($itemnumber);
+
+return ($messages,$nextreservinfo);
+}
+
+=item OtherReserves
+ New op dev: check queued list of this document and check if this document must be transfered
+=cut
+#'
+sub OtherReserves {
+ my ($itemnumber)=@_;
+ my $messages;
+ my $nextreservinfo;
+ my ($restype,$checkreserves) = CheckReserves($itemnumber);
+ if ($checkreserves){
+ my %env;
+ my $iteminfo = C4::Circulation::Circ2::getiteminformation(\%env,$itemnumber);
+ if ($iteminfo->{'holdingbranch'} ne $checkreserves->{'branchcode'}){
+ $messages->{'transfert'} = $checkreserves->{'branchcode'};
+
+# minus priorities of others reservs
+ MinusPriority($itemnumber,$checkreserves->{'borrowernumber'},$iteminfo->{'biblionumber'});
+# launch the subroutine dotransfer
+ C4::Circulation::Circ2::dotransfer($itemnumber,$iteminfo->{'holdingbranch'},$checkreserves->{'branchcode'}),
+ }
+
+# step 2b : case of a reservation on the same branch, set the waiting status
+ else{
+ $messages->{'waiting'} = 1;
+ MinusPriority($itemnumber,$checkreserves->{'borrowernumber'},$iteminfo->{'biblionumber'});
+ SetWaitingStatus($itemnumber);
+ }
+
+ $nextreservinfo = $checkreserves->{'borrowernumber'};
+ }
+
+ return ($messages,$nextreservinfo);
+}
+
+=item MinusPriority
+ Reduce the values of queuded list
+=cut
+#'
+sub MinusPriority{
+ my ($itemnumber,$borrowernumber,$biblionumber)=@_;
+# first step update the value of the first person on reserv
+ my $dbh = C4::Context->dbh;
+ my $sth_upd=$dbh->prepare("UPDATE reserves SET priority = 0 , itemnumber = ?
+ WHERE cancellationdate is NULL
+ AND borrowernumber=?
+ AND biblionumber=?");
+ $sth_upd->execute($itemnumber,$borrowernumber,$biblionumber);
+ $sth_upd->finish;
+
+# second step update all others reservs
+ my $sth_oth=$dbh->prepare("SELECT priority,borrowernumber,biblionumber,reservedate FROM reserves WHERE priority !='0' AND cancellationdate is NULL");
+ $sth_oth->execute();
+ while (my ($priority,$borrowernumber,$biblionumber,$reservedate)=$sth_oth->fetchrow_array){
+ $priority--;
+ my $sth_upd_oth = $dbh->prepare("UPDATE reserves SET priority = ?
+ WHERE biblionumber = ?
+ AND borrowernumber = ?
+ AND reservedate = ?");
+ $sth_upd_oth->execute($priority,$biblionumber,$borrowernumber,$reservedate);
+ $sth_upd_oth->finish;
+ }
+ $sth_oth->finish;
+
+}
+
+
+=item GlobalCancel
+ New op dev for the circulation based on item, global is a function to cancel reserv,check other reserves, and transfer document if it's necessary
+=cut
+#'
+# New op dev :
+# we check if we have a reserves with itemnumber (New op system of reserves), if we found one, we update the status of the reservation when we have : 'priority' = 0, and we have an itemnumber
+sub SetWaitingStatus{
+# first : check if we have a reservation for this item .
+ my ($itemnumber)=@_;
+ my $dbh = C4::Context->dbh;
+ my $sth_find=$dbh->prepare("SELECT priority,borrowernumber from reserves WHERE itemnumber=? and cancellationdate is NULL and found is NULL and priority='0'");
+ $sth_find->execute($itemnumber);
+ my ($priority,$borrowernumber) = $sth_find->fetchrow_array;
+ $sth_find->finish;
+ if (not $borrowernumber){
+ return();
+ }
+ else{
+# step 2 : if we have a borrowernumber, we update the value found to 'W' for notify the borrower
+ my $sth_set=$dbh->prepare("UPDATE reserves SET found='W',waitingdate = now() where borrowernumber=? AND itemnumber=? AND found is null");
+ $sth_set->execute($borrowernumber,$itemnumber);
+ $sth_set->finish;
+ }
+
+}
+
+sub FastFindReserves {
+ my ($itemnumber,$borrowernumber)=@_;
+ if ($itemnumber){
+ my $dbh = C4::Context->dbh;
+ my $sth_res=$dbh->prepare("SELECT reservedate,borrowernumber from reserves WHERE itemnumber=? and cancellationdate is NULL AND (found != 'F' or found is null)");
+ $sth_res->execute($itemnumber);
+ my ($reservedate,$borrowernumber)=$sth_res->fetchrow_array;
+ $sth_res->finish;
+ return($reservedate,$borrowernumber);
+ }
+ if ($borrowernumber){
+ my $dbh = C4::Context->dbh;
+ my $sth_find=$dbh->prepare("SELECT * from reserves WHERE borrowernumber=? and cancellationdate is NULL and (found != 'F' or found is null) order by reservedate");
+ $sth_find->execute($borrowernumber);
+ my @borrowerreserv;
+ my $i=0;
+ while (my $data=$sth_find->fetchrow_hashref){
+ $borrowerreserv[$i]=$data;
+ $i++;
+ }
+ $sth_find->finish;
+ return (@borrowerreserv);
+ }
+
+}
+
+
=item FindReserves
@@ -551,13 +693,17 @@
# C4::Reserves. Pick one and stick with it.
# XXX - POD
sub CreateReserve {
- my
-($env,$branch,$borrnum,$biblionumber,$constraint,$bibitems,$priority,$notes,$title)= @_;
+ my ($env,$branch,$borrnum,$biblionumber,$constraint,$bibitems,$priority,$notes,$title,$checkitem,$found)= @_;
my $fee=CalcReserveFee($env,$borrnum,$biblionumber,$constraint,$bibitems);
my $dbh = C4::Context->dbh;
my $const = lc substr($constraint,0,1);
my @datearr = localtime(time);
my $resdate =(1900+$datearr[5])."-".($datearr[4]+1)."-".$datearr[3];
+ my $waitingdate;
+# If the reserv had the waiting status, we had the value of the resdate
+ if ($found eq 'W'){
+ $waitingdate = $resdate;
+ }
#eval {
# updates take place here
if ($fee > 0) {
@@ -572,9 +718,9 @@
}
#if ($const eq 'a'){
my $sth = $dbh->prepare("insert into reserves
- (borrowernumber,biblionumber,reservedate,branchcode,constrainttype,priority,reservenotes)
- values (?,?,?,?,?,?,?)");
- $sth->execute($borrnum,$biblionumber,$resdate,$branch,$const,$priority,$notes);
+ (borrowernumber,biblionumber,reservedate,branchcode,constrainttype,priority,reservenotes,itemnumber,found,waitingdate)
+ values (?,?,?,?,?,?,?,?,?,?)");
+ $sth->execute($borrnum,$biblionumber,$resdate,$branch,$const,$priority,$notes,$checkitem,$found,$waitingdate);
$sth->finish;
#}
if (($const eq "o") || ($const eq "e")) {
Index: koha/koha-tmpl/intranet-tmpl/prog/en/includes/menus.inc
diff -u koha/koha-tmpl/intranet-tmpl/prog/en/includes/menus.inc:1.3 koha/koha-tmpl/intranet-tmpl/prog/en/includes/menus.inc:1.4
--- koha/koha-tmpl/intranet-tmpl/prog/en/includes/menus.inc:1.3 Tue May 9 13:28:08 2006
+++ koha/koha-tmpl/intranet-tmpl/prog/en/includes/menus.inc Fri May 19 17:01:03 2006
@@ -1,4 +1,5 @@
<script language="JavaScript" type="text/javascript">
+function _(s) { return s } // dummy function for gettext
function Help() {
newin=window.open("/cgi-bin/koha/help.pl","Koha Help",'width=600,height=600,toolbar=false,scrollbars=yes');
}
Index: koha/koha-tmpl/intranet-tmpl/prog/en/intranet-main.tmpl
diff -u koha/koha-tmpl/intranet-tmpl/prog/en/intranet-main.tmpl:1.5 koha/koha-tmpl/intranet-tmpl/prog/en/intranet-main.tmpl:1.6
--- koha/koha-tmpl/intranet-tmpl/prog/en/intranet-main.tmpl:1.5 Fri Apr 14 09:37:14 2006
+++ koha/koha-tmpl/intranet-tmpl/prog/en/intranet-main.tmpl Fri May 19 17:01:03 2006
@@ -7,14 +7,19 @@
<li><a href="/cgi-bin/koha/circ/circulation.pl">Issues</a></li>
<li><a href="/cgi-bin/koha/circ/returns.pl">Returns</a></li>
<li><a href="/cgi-bin/koha/circ/branchtransfers.pl">Transfers</a></li>
- <li><a href="/cgi-bin/koha/circ/selectbranchprinter.pl">Set Branch</a></li>
+ <li><a href="/cgi-bin/koha/circ/selectbranchprinter.pl">Set branch</a></li>
+ <li><a href="/cgi-bin/koha/circ/branchreserves.pl">Waiting reserves</a></li>
+ <li><a href="/cgi-bin/koha/circ/waitingreservestransfers.pl">Transfers to do</a></li>
+ <li><a href="/cgi-bin/koha/circ/currenttransfers.pl">Transfers to recieve</a></li>
</ul>
</li>
<li>Members
<ul>
- <li><a href="/cgi-bin/koha/members/members-home.pl">Member Search</a></li>
- <li><a href="/cgi-bin/koha/members/memberentry.pl?actionType=Add">Add Member</a></li>
- <li><a href="/cgi-bin/koha/members/memberentry.pl?categorycode=I&actionType=Add">Add Institution</a></li>
+ <li><a href="/cgi-bin/koha/members/members-home.pl">Search</a></li>
+ <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&category_type=A"/>Add adult</a></li>
+ <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&category_type=C"/>Add child</a></li>
+ <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&category_type=P"/>Add prof</a></li>
+ <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&category_type=I"/>Add org</a></li>
</ul>
</li>
<li>Catalogue
More information about the Koha-cvs
mailing list