Allows a person to choose an associated borrower (orgranisation) when Issuing.

This is to allow a person who is associated with many organisations to choose the one he/she is borrowing an item for

No changes to the issuing code, or the issues table, the associated borrower number is stored in the statistics table
This commit is contained in:
rangi 2006-06-01 01:44:16 +00:00
parent 0cc091d223
commit c1c08d65b1
2 changed files with 385 additions and 311 deletions

View file

@ -2,9 +2,8 @@
# Please use 8-character tabs for this file (indents are every 4 characters)
#written 8/5/2002 by Finlay
#script to execute issuing of books
# written 8/5/2002 by Finlay
# script to execute issuing of books
# Copyright 2000-2002 Katipo Communications
#
@ -40,63 +39,77 @@ use Date::Manip;
#
# PARAMETERS READING
#
my $query=new CGI;
my $query = new CGI;
my ($template, $loggedinuser, $cookie) = get_template_and_user
({
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{
template_name => 'circ/circulation.tmpl',
query => $query,
type => "intranet",
authnotrequired => 0,
flagsrequired => { circulate => 1 },
});
}
);
my $branches = getbranches();
my $printers = getprinters();
my $branch = getbranch($query, $branches);
my $printer = getprinter($query, $printers);
my $branch = getbranch( $query, $branches );
my $printer = getprinter( $query, $printers );
my $findborrower = $query->param('findborrower');
$findborrower =~ s|,| |g;
$findborrower =~ s|'| |g;
my $borrowernumber = $query->param('borrnumber');
my $print=$query->param('print') || '';
my $print = $query->param('print') || '';
my $barcode = $query->param('barcode') || '';
my $year=$query->param('year');
my $month=$query->param('month');
my $day=$query->param('day');
my $stickyduedate=$query->param('stickyduedate');
my $year = $query->param('year');
my $month = $query->param('month');
my $day = $query->param('day');
my $stickyduedate = $query->param('stickyduedate');
my $issueconfirmed = $query->param('issueconfirmed');
my $cancelreserve = $query->param('cancelreserve');
my $organisation = $query->param('organisations');
#set up cookie.....
my $branchcookie;
my $printercookie;
if ($query->param('setcookies')) {
$branchcookie = $query->cookie(-name=>'branch', -value=>"$branch", -expires=>'+1y');
$printercookie = $query->cookie(-name=>'printer', -value=>"$printer", -expires=>'+1y');
if ( $query->param('setcookies') ) {
$branchcookie = $query->cookie(
-name => 'branch',
-value => "$branch",
-expires => '+1y'
);
$printercookie = $query->cookie(
-name => 'printer',
-value => "$printer",
-expires => '+1y'
);
}
my %env; # FIXME env is used as an "environment" variable. Could be dropped probably...
my %env
; # FIXME env is used as an "environment" variable. Could be dropped probably...
$env{'branchcode'}=$branch;
$env{'printer'}=$printer;
$env{'queue'}=$printer;
$env{'branchcode'} = $branch;
$env{'printer'} = $printer;
$env{'queue'} = $printer;
$env{'organisation'} = $organisation;
my @datearr = localtime( time() );
my @datearr = localtime(time());
# FIXME - Could just use POSIX::strftime("%Y%m%d", localtime);
my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf ("%0.2d", ($datearr[3]));
my $todaysdate =
( 1900 + $datearr[5] )
. sprintf( "%0.2d", ( $datearr[4] + 1 ) )
. sprintf( "%0.2d", ( $datearr[3] ) );
# check and see if we should print
if ($barcode eq '' && $print eq 'maybe'){
if ( $barcode eq '' && $print eq 'maybe' ) {
$print = 'yes';
}
if ($print eq 'yes' && $borrowernumber ne ''){
printslip(\%env,$borrowernumber);
$query->param('borrnumber','');
$borrowernumber='';
}
}
if ( $print eq 'yes' && $borrowernumber ne '' ) {
printslip( \%env, $borrowernumber );
$query->param( 'borrnumber', '' );
$borrowernumber = '';
}
#
# STEP 2 : FIND BORROWER
@ -105,16 +118,19 @@ my $todaysdate = (1900+$datearr[5]).sprintf ("%0.2d", ($datearr[4]+1)).sprintf (
my $borrowerslist;
my $message;
if ($findborrower) {
my ($count,$borrowers)=BornameSearch(\%env,$findborrower,'cardnumber','web');
my @borrowers=@$borrowers;
if ($#borrowers == -1) {
$query->param('findborrower', '');
my ( $count, $borrowers ) =
BornameSearch( \%env, $findborrower, 'cardnumber', 'web' );
my @borrowers = @$borrowers;
if ( $#borrowers == -1 ) {
$query->param( 'findborrower', '' );
$message = "'$findborrower'";
} elsif ($#borrowers == 0) {
$query->param('borrnumber', $borrowers[0]->{'borrowernumber'});
$query->param('barcode','');
$borrowernumber=$borrowers[0]->{'borrowernumber'};
} else {
}
elsif ( $#borrowers == 0 ) {
$query->param( 'borrnumber', $borrowers[0]->{'borrowernumber'} );
$query->param( 'barcode', '' );
$borrowernumber = $borrowers[0]->{'borrowernumber'};
}
else {
$borrowerslist = \@borrowers;
}
}
@ -123,175 +139,226 @@ if ($findborrower) {
my $borrower;
my $picture;
if ($borrowernumber) {
$borrower = getpatroninformation(\%env,$borrowernumber,0);
my ($od,$issue,$fines)=borrdata2(\%env,$borrowernumber);
$borrower = getpatroninformation( \%env, $borrowernumber, 0 );
my ( $od, $issue, $fines ) = borrdata2( \%env, $borrowernumber );
warn $borrower->{'expiry'};
my $warningdate = DateCalc($borrower->{'expiry'},"- ".C4::Context->preference('NotifyBorrowerDeparture')." days");
my $warning=Date_Cmp(ParseDate("today"),$warningdate);
if ($warning>0){
#borrowercard expired
$template->param(warndeparture=>$warning);
}
$template->param(overduecount => $od,
issuecount => $issue,
finetotal => $fines);
my $htdocs = C4::Context->config('intrahtdocs');
$picture = "/borrowerimages/".$borrowernumber.".jpg";
if (-e $htdocs."$picture")
{
$template->param(picture => $picture)
};
}
my $warningdate =
DateCalc( $borrower->{'expiry'},
"- " . C4::Context->preference('NotifyBorrowerDeparture') . " days" );
my $warning = Date_Cmp( ParseDate("today"), $warningdate );
if ( $warning > 0 ) {
#borrowercard expired
$template->param( warndeparture => $warning );
}
$template->param(
overduecount => $od,
issuecount => $issue,
finetotal => $fines
);
my $htdocs = C4::Context->config('intrahtdocs');
$picture = "/borrowerimages/" . $borrowernumber . ".jpg";
if ( -e $htdocs . "$picture" ) {
$template->param( picture => $picture );
}
}
#
# STEP 3 : ISSUING
#
#
if ($barcode) {
$barcode = cuecatbarcodedecode($barcode);
my ($datedue, $invalidduedate) = fixdate($year, $month, $day);
my ( $datedue, $invalidduedate ) = fixdate( $year, $month, $day );
if ($issueconfirmed) {
issuebook(\%env, $borrower, $barcode, $datedue,$cancelreserve);
} else {
my ($error, $question) = canbookbeissued(\%env, $borrower, $barcode, $year, $month, $day);
my $noerror=1;
issuebook( \%env, $borrower, $barcode, $datedue, $cancelreserve );
}
else {
my ( $error, $question ) =
canbookbeissued( \%env, $borrower, $barcode, $year, $month, $day );
my $noerror = 1;
my $noquestion = 1;
foreach my $impossible (keys %$error) {
$template->param($impossible => $$error{$impossible},
IMPOSSIBLE => 1);
foreach my $impossible ( keys %$error ) {
$template->param(
$impossible => $$error{$impossible},
IMPOSSIBLE => 1
);
$noerror = 0;
}
foreach my $needsconfirmation (keys %$question) {
$template->param($needsconfirmation => $$question{$needsconfirmation},
NEEDSCONFIRMATION => 1);
foreach my $needsconfirmation ( keys %$question ) {
$template->param(
$needsconfirmation => $$question{$needsconfirmation},
NEEDSCONFIRMATION => 1
);
$noquestion = 0;
}
$template->param(day => $day,
$template->param(
day => $day,
month => $month,
year => $year);
if ($noerror && ($noquestion || $issueconfirmed)) {
issuebook(\%env, $borrower, $barcode, $datedue);
year => $year
);
if ( $noerror && ( $noquestion || $issueconfirmed ) ) {
issuebook( \%env, $borrower, $barcode, $datedue );
}
}
}
# reload the borrower info for the sake of reseting the flags.....
if ($borrowernumber) {
$borrower = getpatroninformation(\%env,$borrowernumber,0);
$borrower = getpatroninformation( \%env, $borrowernumber, 0 );
}
##################################################################################
# BUILD HTML
# make the issued books table.....
my $todaysissues='';
my $previssues='';
my $todaysissues = '';
my $previssues = '';
my @realtodayissues;
my @realprevissues;
my $allowborrow;
if ($borrower) {
# get each issue of the borrower & separate them in todayissues & previous issues
my @todaysissues;
my @previousissues;
my $issueslist = getissues($borrower);
# split in 2 arrays for today & previous
foreach my $it (keys %$issueslist) {
foreach my $it ( keys %$issueslist ) {
my $issuedate = $issueslist->{$it}->{'timestamp'};
$issuedate =~ s/-//g;
$issuedate = substr($issuedate, 0, 8);
if ($todaysdate == $issuedate) {
$issuedate = substr( $issuedate, 0, 8 );
if ( $todaysdate == $issuedate ) {
push @todaysissues, $issueslist->{$it};
} else {
}
else {
push @previousissues, $issueslist->{$it};
}
}
my $od; # overdues
my $i = 0;
my $togglecolor;
# parses today & build Template array
foreach my $book (sort {$b->{'timestamp'} <=> $a->{'timestamp'}} @todaysissues){
foreach my $book ( sort { $b->{'timestamp'} <=> $a->{'timestamp'} }
@todaysissues )
{
my $dd = $book->{'date_due'};
my $datedue = $book->{'date_due'};
$dd=format_date($dd);
$datedue=~s/-//g;
if ($datedue < $todaysdate) {
$dd = format_date($dd);
$datedue =~ s/-//g;
if ( $datedue < $todaysdate ) {
$od = 1;
} else {
$od=0;
}
if ($i%2) {
$togglecolor=0;
} else {
$togglecolor=1;
else {
$od = 0;
}
if ( $i % 2 ) {
$togglecolor = 0;
}
else {
$togglecolor = 1;
}
$book->{'togglecolor'} = $togglecolor;
$book->{'od'}=$od;
$book->{'dd'}=$dd;
if ($book->{'author'} eq ''){
$book->{'author'}=' ';
$book->{'od'} = $od;
$book->{'dd'} = $dd;
if ( $book->{'author'} eq '' ) {
$book->{'author'} = ' ';
}
push @realtodayissues,$book;
push @realtodayissues, $book;
$i++;
}
# parses previous & build Template array
$i = 0;
foreach my $book (sort {$a->{'date_due'} cmp $b->{'date_due'}} @previousissues){
foreach my $book ( sort { $a->{'date_due'} cmp $b->{'date_due'} }
@previousissues )
{
my $dd = $book->{'date_due'};
my $datedue = $book->{'date_due'};
$dd=format_date($dd);
$dd = format_date($dd);
my $pcolor = '';
my $od = '';
$datedue=~s/-//g;
if ($datedue < $todaysdate) {
$datedue =~ s/-//g;
if ( $datedue < $todaysdate ) {
$od = 1;
} else {
}
else {
$od = 0;
}
if ($i%2) {
$togglecolor=0;
} else {
$togglecolor=1;
if ( $i % 2 ) {
$togglecolor = 0;
}
else {
$togglecolor = 1;
}
$book->{'togglecolor'} = $togglecolor;
$book->{'dd'}=$dd;
$book->{'od'}=$od;
if ($book->{'author'} eq ''){
$book->{'author'}=' ';
$book->{'dd'} = $dd;
$book->{'od'} = $od;
if ( $book->{'author'} eq '' ) {
$book->{'author'} = ' ';
}
push @realprevissues,$book;
push @realprevissues, $book;
$i++;
}
}
my @values;
my %labels;
my $CGIselectborrower;
if ($borrowerslist) {
foreach (sort {$a->{'surname'}.$a->{'firstname'} cmp $b->{'surname'}.$b->{'firstname'}} @$borrowerslist){
push @values,$_->{'borrowernumber'};
$labels{$_->{'borrowernumber'}} ="$_->{'surname'}, $_->{'firstname'} ... ($_->{'cardnumber'} - $_->{'categorycode'}) ... $_->{'streetaddress'} ";
foreach (
sort {
$a->{'surname'}
. $a->{'firstname'} cmp $b->{'surname'}
. $b->{'firstname'}
} @$borrowerslist
)
{
push @values, $_->{'borrowernumber'};
$labels{ $_->{'borrowernumber'} } =
"$_->{'surname'}, $_->{'firstname'} ... ($_->{'cardnumber'} - $_->{'categorycode'}) ... $_->{'streetaddress'} ";
}
$CGIselectborrower=CGI::scrolling_list( -name => 'borrnumber',
$CGIselectborrower = CGI::scrolling_list(
-name => 'borrnumber',
-values => \@values,
-labels => \%labels,
-size => 7,
-multiple => 0 );
-multiple => 0
);
}
#title
my ($patrontable, $flaginfotable) = patrontable($borrower);
my $amountold=$borrower->{flags}->{'CHARGES'}->{'message'} || 0;
my @temp=split(/\$/,$amountold);
$amountold=$temp[1];
my ( $patrontable, $flaginfotable ) = patrontable($borrower);
my $amountold = $borrower->{flags}->{'CHARGES'}->{'message'} || 0;
my @temp = split( /\$/, $amountold );
my $CGIorganisations;
my $member_of_institution;
if ( C4::Context->preference("memberofinstitution") ) {
my $organisations = get_institutions();
my @orgs;
my %org_labels;
foreach my $organisation ( keys %$organisations ) {
push @orgs, $organisation;
$org_labels{$organisation} =
$organisations->{$organisation}->{'surname'};
}
$member_of_institution = 1;
$CGIorganisations = CGI::popup_menu(
-id => 'organisations',
-name => 'organisations',
-labels => \%org_labels,
-values => \@orgs,
);
}
$amountold = $temp[1];
$template->param(
findborrower => $findborrower,
borrower => $borrower,
@ -316,12 +383,15 @@ $template->param(
CGIselectborrower => $CGIselectborrower,
todayissues => \@realtodayissues,
previssues => \@realprevissues,
);
memberofinstution => $member_of_institution,
CGIorganisations => $CGIorganisations,
);
# set return date if stickyduedate
if ($stickyduedate) {
my $t_year = "year".$year;
my $t_month = "month".$month;
my $t_day = "day".$day;
my $t_year = "year" . $year;
my $t_month = "month" . $month;
my $t_day = "day" . $day;
$template->param(
$t_year => 1,
$t_month => 1,
@ -329,9 +399,8 @@ if ($stickyduedate) {
);
}
if ($branchcookie) {
$cookie=[$cookie, $branchcookie, $printercookie];
$cookie = [ $cookie, $branchcookie, $printercookie ];
}
output_html_with_http_headers $query, $cookie, $template->output;
@ -342,54 +411,54 @@ output_html_with_http_headers $query, $cookie, $template->output;
sub patrontable {
my ($borrower) = @_;
my $flags = $borrower->{'flags'};
my $flaginfotable='';
my $flaginfotable = '';
my $flaginfotext;
#my $flaginfotext='';
my $flag;
my $color='';
foreach $flag (sort keys %$flags) {
# my @itemswaiting='';
$flags->{$flag}->{'message'}=~s/\n/<br>/g;
if ($flags->{$flag}->{'noissues'}) {
my $color = '';
foreach $flag ( sort keys %$flags ) {
# my @itemswaiting='';
$flags->{$flag}->{'message'} =~ s/\n/<br>/g;
if ( $flags->{$flag}->{'noissues'} ) {
$template->param(
flagged => 1,
noissues => 'true',
);
if ($flag eq 'GNA'){
$template->param(
gna => 'true'
);
if ( $flag eq 'GNA' ) {
$template->param( gna => 'true' );
}
if ($flag eq 'LOST'){
$template->param(
lost => 'true'
);
if ( $flag eq 'LOST' ) {
$template->param( lost => 'true' );
}
if ($flag eq 'DBARRED'){
$template->param(
dbarred => 'true'
);
if ( $flag eq 'DBARRED' ) {
$template->param( dbarred => 'true' );
}
if ($flag eq 'CHARGES') {
if ( $flag eq 'CHARGES' ) {
$template->param(
charges => 'true',
chargesmsg => $flags->{'CHARGES'}->{'message'}
);
}
} else {
if ($flag eq 'CHARGES') {
}
else {
if ( $flag eq 'CHARGES' ) {
$template->param(
charges => 'true',
flagged => 1,
chargesmsg => $flags->{'CHARGES'}->{'message'}
);
}
if ($flag eq 'WAITING') {
my $items=$flags->{$flag}->{'itemlist'};
if ( $flag eq 'WAITING' ) {
my $items = $flags->{$flag}->{'itemlist'};
my @itemswaiting;
foreach my $item (@$items) {
my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0);
$iteminformation->{'branchname'} = $branches->{$iteminformation->{'holdingbranch'}}->{'branchname'};
my ($iteminformation) =
getiteminformation( \%env, $item->{'itemnumber'}, 0 );
$iteminformation->{'branchname'} =
$branches->{ $iteminformation->{'holdingbranch'} }
->{'branchname'};
push @itemswaiting, $iteminformation;
}
$template->param(
@ -399,26 +468,27 @@ sub patrontable {
itemswaiting => \@itemswaiting,
);
}
if ($flag eq 'ODUES') {
if ( $flag eq 'ODUES' ) {
$template->param(
odues => 'true',
flagged => 1,
oduesmsg => $flags->{'ODUES'}->{'message'}
);
my $items=$flags->{$flag}->{'itemlist'};
my $items = $flags->{$flag}->{'itemlist'};
{
my @itemswaiting;
foreach my $item (@$items) {
my ($iteminformation) = getiteminformation(\%env, $item->{'itemnumber'}, 0);
my ($iteminformation) =
getiteminformation( \%env, $item->{'itemnumber'}, 0 );
push @itemswaiting, $iteminformation;
}
}
if ($query->param('module') ne 'returns'){
if ( $query->param('module') ne 'returns' ) {
$template->param( nonreturns => 'true' );
}
}
if ($flag eq 'NOTES') {
if ( $flag eq 'NOTES' ) {
$template->param(
notes => 'true',
flagged => 1,
@ -427,17 +497,18 @@ sub patrontable {
}
}
}
return($patrontable, $flaginfotext);
return ( $patrontable, $flaginfotext );
}
sub cuecatbarcodedecode {
my ($barcode) = @_;
chomp($barcode);
my @fields = split(/\./,$barcode);
my @results = map(decode($_), @fields[1..$#fields]);
if ($#results == 2){
my @fields = split( /\./, $barcode );
my @results = map( decode($_), @fields[ 1 .. $#fields ] );
if ( $#results == 2 ) {
return $results[2];
} else {
}
else {
return $barcode;
}
}

View file

@ -297,6 +297,9 @@
<tr>
<th><label for="barcode">Enter Item Barcode: </label></th>
<td><input name="barcode" size="14" /></td>
<!-- TMPL_IF NAME="memberofinstution" -->
<td><!-- TMPL_VAR NAME="CGIorganisations" --></td>
<!-- /TMPL_IF -->
</tr>
<tr>