Adding calendar widget to circulation/stickyduedate

Signed-off-by: Chris Cormack <crc@liblime.com>
Signed-off-by: Joshua Ferraro <jmf@liblime.com>
This commit is contained in:
Ryan Higgins 2007-11-19 17:31:57 -06:00 committed by Joshua Ferraro
parent 5cc3cdeb29
commit cb1ec158c0
4 changed files with 100 additions and 369 deletions

View File

@ -633,14 +633,14 @@ sub itemissues {
=head2 CanBookBeIssued
$issuingimpossible, $needsconfirmation =
CanBookBeIssued( $borrower, $barcode, $year, $month, $day, $inprocess );
CanBookBeIssued( $borrower, $barcode, $duedatespec, $inprocess );
C<$duedatespec> is a C4::Dates object.
C<$issuingimpossible> and C<$needsconfirmation> are some hashref.
=cut
sub CanBookBeIssued {
my ( $borrower, $barcode, $year, $month, $day, $inprocess ) = @_;
my ( $borrower, $barcode, $duedate, $inprocess ) = @_;
my %needsconfirmation; # filled with problems that needs confirmations
my %issuingimpossible; # filled with problems that causes the issue to be IMPOSSIBLE
my $item = GetItem(GetItemnumberFromBarcode( $barcode ));
@ -648,10 +648,9 @@ sub CanBookBeIssued {
my $dbh = C4::Context->dbh;
#
# DUE DATE is OK ?
# DUE DATE is OK ? -- should already have checked.
#
my ( $duedate, $invalidduedate ) = fixdate( $year, $month, $day );
$issuingimpossible{INVALID_DATE} = 1 if ($invalidduedate);
#$issuingimpossible{INVALID_DATE} = 1 unless ($duedate);
#
# BORROWER STATUS
@ -680,7 +679,7 @@ sub CanBookBeIssued {
# DEBTS
my ($amount) =
C4::Members::GetMemberAccountRecords( $borrower->{'borrowernumber'}, $duedate );
C4::Members::GetMemberAccountRecords( $borrower->{'borrowernumber'}, '' && $duedate->output('iso') );
if ( C4::Context->preference("IssuingInProcess") ) {
my $amountlimit = C4::Context->preference("noissuescharge");
if ( $amount > $amountlimit && !$inprocess ) {
@ -943,30 +942,30 @@ if ($borrower and $barcode and $barcodecheck ne '0'){
(borrowernumber, itemnumber,issuedate, date_due, branchcode)
VALUES (?,?,?,?,?)"
);
my $itype=(C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'} ;
my $loanlength = GetLoanLength(
$borrower->{'categorycode'},
$itype,
$borrower->{'branchcode'}
);
$datedue = time + ($loanlength) * 86400;
my @datearr = localtime($datedue);
my $dateduef =
sprintf("%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3]);
my $dateduef;
if ($date) {
$dateduef = $date;
}
$dateduef=CheckValidDatedue($dateduef,$item->{'itemnumber'},C4::Context->userenv->{'branch'});
# if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
if ( C4::Context->preference('ReturnBeforeExpiry')
&& $dateduef gt $borrower->{dateexpiry} )
{
$dateduef = $borrower->{dateexpiry};
}
$sth->execute(
} else {
my $itype=(C4::Context->preference('item-level_itypes')) ? $biblio->{'itype'} : $biblio->{'itemtype'} ;
my $loanlength = GetLoanLength(
$borrower->{'categorycode'},
$itype,
$borrower->{'branchcode'}
);
$datedue = time + ($loanlength) * 86400;
my @datearr = localtime($datedue);
$dateduef = C4::Dates->new( sprintf("%04d-%02d-%02d", 1900 + $datearr[5], $datearr[4] + 1, $datearr[3]), 'iso');
$dateduef=CheckValidDatedue($dateduef,$item->{'itemnumber'},C4::Context->userenv->{'branch'});
# if ReturnBeforeExpiry ON the datedue can't be after borrower expirydate
if ( C4::Context->preference('ReturnBeforeExpiry') && $dateduef gt $borrower->{dateexpiry} ) {
$dateduef = $borrower->{dateexpiry};
}
};
$sth->execute(
$borrower->{'borrowernumber'},
$item->{'itemnumber'},
strftime( "%Y-%m-%d", localtime ),$dateduef, C4::Context->userenv->{'branch'}
strftime( "%Y-%m-%d", localtime ),$dateduef->output('iso'), C4::Context->userenv->{'branch'}
);
$sth->finish;
$item->{'issues'}++;
@ -1602,7 +1601,7 @@ sub AddRenewal {
# If the due date wasn't specified, calculate it by adding the
# book's loan length to today's date.
if ( $datedue eq "" ) {
unless ( $datedue ) {
my $biblio = GetBiblioFromItemNumber($itemnumber);
my $borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 );
@ -1615,7 +1614,7 @@ sub AddRenewal {
#FIXME -- where's the calendar ?
my ( $due_year, $due_month, $due_day ) =
Add_Delta_DHMS( Today_and_Now(), $loanlength, 0, 0, 0 );
$datedue = "$due_year-$due_month-$due_day";
$datedue = C4::Dates->new( "$due_year-$due_month-$due_day",'iso');
$datedue=CheckValidDatedue($datedue,$itemnumber,$branch);
}
@ -1638,12 +1637,11 @@ sub AddRenewal {
AND itemnumber=?
AND returndate IS NULL"
);
$sth->execute( $datedue, $renews, $borrowernumber, $itemnumber );
$sth->execute( $datedue->output('iso'), $renews, $borrowernumber, $itemnumber );
$sth->finish;
# Log the renewal
# Charge a new rental fee, if applicable?
my ( $charge, $type ) = GetIssuingCharges( $itemnumber, $borrowernumber );
if ( $charge > 0 ) {
@ -1899,9 +1897,11 @@ C<$date_due> = returndate calculate with no day check
C<$itemnumber> = itemnumber
C<$branchcode> = localisation of issue
=cut
sub CheckValidDatedue{
# Why not create calendar object? -
# TODO add 'duedate' option to useDaysMode .
sub CheckValidDatedue {
my ($date_due,$itemnumber,$branchcode)=@_;
my @datedue=split('-',$date_due);
my @datedue=split('-',$date_due->output('iso'));
my $years=$datedue[0];
my $month=$datedue[1];
my $day=$datedue[2];
@ -1917,7 +1917,7 @@ for (my $i=0;$i<2;$i++){
(($years,$month,$day) = Add_Delta_Days($years,$month,$day, 1))if ($i ne '1');
}
}
my $newdatedue=$years."-".$month."-".$day;
my $newdatedue=C4::Dates->new( $years."-".$month."-".$day,'iso');
return $newdatedue;
}
=head2 CheckRepeatableHolidays

View File

@ -51,7 +51,7 @@ sub do_checkout {
my $borrower = GetMember( $patron_barcode, 'cardnumber' );
# use Data::Dumper;
# warn Dumper $borrower;
my ($issuingimpossible,$needsconfirmation) = CanBookBeIssued ( $borrower, $barcode, 0, 0, 0, 0 );
my ($issuingimpossible,$needsconfirmation) = CanBookBeIssued ( $borrower, $barcode );
my $noerror=1;
foreach my $impossible ( keys %$issuingimpossible ) {
# do something here so we pass these errors

View File

@ -115,6 +115,7 @@ my $year = $query->param('year');
my $month = $query->param('month');
my $day = $query->param('day');
my $stickyduedate = $query->param('stickyduedate');
my $duedatespec = $query->param('duedatespec');
my $issueconfirmed = $query->param('issueconfirmed');
my $cancelreserve = $query->param('cancelreserve');
my $organisation = $query->param('organisations');
@ -129,6 +130,16 @@ my $print = $query->param('print');
# }
#
my ($datedue,$invalidduedate);
if($duedatespec) {
$datedue= C4::Dates->new($duedatespec );
$invalidduedate=1 unless $datedue;
}
#if (defined($year)) {
# $duedatespec = "$year-$month-$day";
#} else {
# ($year, $month, $day) = ($duedatespec) ? split /-/, $duedatespec : (0,0,0);
#}
my @datearr = localtime( time() );
@ -185,7 +196,7 @@ if ($findborrower) {
# get the borrower information.....
my $borrower;
my @lines;
warn $borrowernumber;
if ($borrowernumber) {
$borrower = GetMemberDetails( $borrowernumber, 0 );
my ( $od, $issue, $fines ) = GetMemberIssuesAndFines( $borrowernumber );
@ -234,16 +245,15 @@ if ($borrowernumber) {
#
if ($barcode) {
$barcode = cuecatbarcodedecode($barcode);
my ( $datedue, $invalidduedate ) = fixdate( $year, $month, $day );
if ($issueconfirmed) {
# $barcode = cuecatbarcodedecode($barcode);
if ($issueconfirmed) {
AddIssue( $borrower, $barcode, $datedue, $cancelreserve );
$inprocess = 1;
}
else {
my ( $error, $question ) =
CanBookBeIssued( $borrower, $barcode, $year, $month, $day,
$inprocess );
CanBookBeIssued( $borrower, $barcode, $datedue , $inprocess );
my $noerror = 1;
my $noquestion = 1;
# Get the item title for more information
@ -645,13 +655,8 @@ $template->param(
# set return date if stickyduedate
if ($stickyduedate) {
my $t_year = "year" . $year;
my $t_month = "month" . $month;
my $t_day = "day" . $day;
$template->param(
$t_year => 1,
$t_month => 1,
$t_day => 1,
duedatespec => $duedatespec,
);
}
@ -660,7 +665,8 @@ if ($stickyduedate) {
#}
$template->param(
SpecifyDueDate => C4::Context->preference("SpecifyDueDate")
SpecifyDueDate => C4::Context->preference("SpecifyDueDate"),
CircAutocompl => C4::Context->preference("CircAutocompl") ,
DHTMLformat => C4::Dates->DHTMLcalendar(),
);
$template->param( CircAutocompl => C4::Context->preference("CircAutocompl") );
output_html_with_http_headers $query, $cookie, $template->output;

View File

@ -12,7 +12,7 @@
});
//]]>
</script>
<!-- TMPL_INCLUDE NAME="calendar.inc" -->
</head>
<body>
@ -198,327 +198,52 @@ No patron matched <span class="ex"><!-- TMPL_VAR name="message" --></span>
<!-- /TMPL_IF -->
<!--/TMPL_IF --> <!-- /impossible -->
<p><label for="day">Specify due date: </label>
<select name="day" id="day">
<option value="0">Day</option>
<!-- TMPL_IF NAME="day1" -->
<option value="1" selected="selected">1</option>
<!-- TMPL_ELSE -->
<option value="1">1</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day2" -->
<option value="2" selected="selected">2</option>
<!-- TMPL_ELSE -->
<option value="2">2</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day3" -->
<option value="3" selected="selected">3</option>
<!-- TMPL_ELSE -->
<option value="3">3</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day4" -->
<option value="4" selected="selected">4</option>
<!-- TMPL_ELSE -->
<option value="4">4</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day5" -->
<option value="5" selected="selected">5</option>
<!-- TMPL_ELSE -->
<option value="5">5</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day6" -->
<option value="6" selected="selected">6</option>
<!-- TMPL_ELSE -->
<option value="6">6</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day7" -->
<option value="7" selected="selected">7</option>
<!-- TMPL_ELSE -->
<option value="7">7</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day8" -->
<option value="8" selected="selected">8</option>
<!-- TMPL_ELSE -->
<option value="8">8</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day9" -->
<option value="9" selected="selected">9</option>
<!-- TMPL_ELSE -->
<option value="9">9</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day10" -->
<option value="10" selected="selected">10</option>
<!-- TMPL_ELSE -->
<option value="10">10</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day11" -->
<option value="11" selected="selected">11</option>
<!-- TMPL_ELSE -->
<option value="11">11</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day12" -->
<option value="12" selected="selected">12</option>
<!-- TMPL_ELSE -->
<option value="12">12</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day13" -->
<option value="13" selected="selected">13</option>
<!-- TMPL_ELSE -->
<option value="13">13</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day14" -->
<option value="14" selected="selected">14</option>
<!-- TMPL_ELSE -->
<option value="14">14</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day15" -->
<option value="15" selected="selected">15</option>
<!-- TMPL_ELSE -->
<option value="15">15</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day16" -->
<option value="16" selected="selected">16</option>
<!-- TMPL_ELSE -->
<option value="16">16</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day17" -->
<option value="17" selected="selected">17</option>
<!-- TMPL_ELSE -->
<option value="17">17</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day18" -->
<option value="18" selected="selected">18</option>
<!-- TMPL_ELSE -->
<option value="18">18</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day19" -->
<option value="19" selected="selected">19</option>
<!-- TMPL_ELSE -->
<option value="19">19</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day20" -->
<option value="20" selected="selected">20</option>
<!-- TMPL_ELSE -->
<option value="20">20</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day21" -->
<option value="21" selected="selected">21</option>
<!-- TMPL_ELSE -->
<option value="21">21</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day22" -->
<option value="22" selected="selected">22</option>
<!-- TMPL_ELSE -->
<option value="22">22</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day23" -->
<option value="23" selected="selected">23</option>
<!-- TMPL_ELSE -->
<option value="23">23</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day24" -->
<option value="24" selected="selected">24</option>
<!-- TMPL_ELSE -->
<option value="24">24</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day25" -->
<option value="25" selected="selected">25</option>
<!-- TMPL_ELSE -->
<option value="25">25</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day26" -->
<option value="26" selected="selected">26</option>
<!-- TMPL_ELSE -->
<option value="26">26</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day27" -->
<option value="27" selected="selected">27</option>
<!-- TMPL_ELSE -->
<option value="27">27</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day28" -->
<option value="28" selected="selected">28</option>
<!-- TMPL_ELSE -->
<option value="28">28</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day29" -->
<option value="29" selected="selected">29</option>
<!-- TMPL_ELSE -->
<option value="29">29</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day30" -->
<option value="30" selected="selected">30</option>
<!-- TMPL_ELSE -->
<option value="30">30</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="day31" -->
<option value="31" selected="selected">31</option>
<!-- TMPL_ELSE -->
<option value="31">31</option>
<!-- /TMPL_IF -->
</select>
<select name="month">
<option value="0">Month</option>
<!-- TMPL_IF NAME="month1" -->
<option value="1" selected="selected">Jan</option>
<!-- TMPL_ELSE -->
<option value="1">Jan</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month2" -->
<option value="2" selected="selected">Feb</option>
<!-- TMPL_ELSE -->
<option value="2">Feb</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month3" -->
<option value="3" selected="selected">Mar</option>
<!-- TMPL_ELSE -->
<option value="3">Mar</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month4" -->
<option value="4" selected="selected">Apr</option>
<!-- TMPL_ELSE -->
<option value="4">Apr</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month5" -->
<option value="5" selected="selected">May</option>
<!-- TMPL_ELSE -->
<option value="5">May</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month6" -->
<option value="6" selected="selected">Jun</option>
<!-- TMPL_ELSE -->
<option value="6">Jun</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month7" -->
<option value="7" selected="selected">Jul</option>
<!-- TMPL_ELSE -->
<option value="7">Jul</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month8" -->
<option value="8" selected="selected">Aug</option>
<!-- TMPL_ELSE -->
<option value="8">Aug</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month9" -->
<option value="9" selected="selected">Sep</option>
<!-- TMPL_ELSE -->
<option value="9">Sep</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month10" -->
<option value="10" selected="selected">Oct</option>
<!-- TMPL_ELSE -->
<option value="10">Oct</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month11" -->
<option value="11" selected="selected">Nov</option>
<!-- TMPL_ELSE -->
<option value="11">Nov</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="month12" -->
<option value="12" selected="selected">Dec</option>
<!-- TMPL_ELSE -->
<option value="12">Dec</option>
<!-- /TMPL_IF -->
</select>
<select name="year">
<option value="0">Year</option>
<!-- TMPL_IF NAME="year2007" -->
<option value="2007" selected="selected">2007</option>
<!-- TMPL_ELSE -->
<option value="2007">2007</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="year2008" -->
<option value="2008" selected="selected">2008</option>
<!-- TMPL_ELSE -->
<option value="2008">2008</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="year2009" -->
<option value="2009" selected="selected">2009</option>
<!-- TMPL_ELSE -->
<option value="2009">2009</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="year2010" -->
<option value="2010" selected="selected">2010</option>
<!-- TMPL_ELSE -->
<option value="2010">2010</option>
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="year2011" -->
<option value="2011" selected="selected">2011</option>
<!-- TMPL_ELSE -->
<option value="2011">2011</option>
<!-- /TMPL_IF -->
</select>
<label for="stickyduedate">
<!-- TMPL_IF NAME="stickyduedate" -->
<input type="checkbox" id="stickyduedate" name="stickyduedate" <!-- TMPL_VAR NAME="selected" --> checked="checked" />
Remember due date for this patron
<!-- TMPL_ELSE -->
<input type="checkbox" id="stickyduedate" name="stickyduedate" <!-- TMPL_VAR NAME="selected" --> />
<!-- /TMPL_IF -->
</label>
</p>
<p class="date-select">
<label for "duedatespec">Specify Due Date:</label> <input type="text" size="10" id="duedatespec" name="duedatespec" value="<!-- TMPL_VAR NAME="duedatespec" -->" />
<img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" alt="Show Calendar" border="0" id="CalendarDueDate" style="cursor: pointer;" valign="top" />
<script language="JavaScript" type="text/javascript">
function validate1(date) {
var today = new Date();
if ( date < today ) {
return true;
} else {
return false;
}
};
function refocus(calendar) {
document.getElementById('barcode').focus();
calendar.hide();
};
//#TODO - ADD syspref (AllowPostDatedCheckouts).
Calendar.setup(
{
inputField : "duedatespec",
ifFormat : "%Y-%m-%d",
button : "CalendarDueDate",
disableFunc : validate1,
dateStatusFunc : validate1,
onClose : refocus
}
);
</script>
<input type="hidden" name="day" value="0" />
<input type="hidden" name="month" value="0" />
<input type="hidden" name="year" value="0" />
<input type="hidden" name="borrowernumber" value="<!-- TMPL_VAR NAME="borrowernumber" -->" />
<input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->" />
<input type="hidden" name="printer" value="<!-- TMPL_VAR NAME="printer" -->" />
<input type="hidden" name="print" value="maybe" />
<!-- TMPL_IF NAME="CHARGES" -->
<input type="hidden" name="charges" value="yes" />
<input type="hidden" name="oldamount" value="<!-- TMPL_VAR NAME="amountold" -->" />
<!-- /TMPL_IF -->
<label for="stickyduedate">Remember for Session:</label>
<input type="checkbox" id="stickyduedate" onclick="this.form.barcode.focus();" name="stickyduedate" <!-- TMPL_IF NAME="stickyduedate" --> checked="1" <!-- /TMPL_IF --> />
<input type="button" class="action" id="cleardate" value="Clear" name="cleardate" onclick="this.checked = false; this.form.duedatespec.value = ''; this.form.stickyduedate.checked = false; this.form.barcode.focus(); return false;" />
<input type="hidden" name="borrowernumber" value="<!-- TMPL_VAR NAME="borrowernumber" -->" />
<input type="hidden" name="branch" value="<!-- TMPL_VAR NAME="branch" -->" />
<input type="hidden" name="printer" value="<!-- TMPL_VAR NAME="printer" -->" />
<input type="hidden" name="print" value="maybe" />
<!-- TMPL_IF NAME="CHARGES" -->
<input type="hidden" name="charges" value="yes" />
<input type="hidden" name="oldamount" value="<!-- TMPL_VAR NAME="amountold" -->" />
<!-- /TMPL_IF -->
<fieldset class="action">
<input type="submit" value="Issue" />
</fieldset>
</fieldset>
<fieldset class="action">
<input type="submit" value="Issue" />
</fieldset>
</p>
</fieldset>
</form></div><!-- /TMPL_UNLESS --><!-- /unless noissues -->
<!-- TMPL_IF NAME="noissues" --><div><!-- TMPL_ELSE --><div class="yui-u"><!-- /TMPL_IF -->