&CalcFine
&Getoverdues
&checkoverdues
- &NumberNotifyId
- &AmountNotify
&UpdateFine
&GetFine
&get_chargeable_units
- &CheckItemNotify
&GetOverduesForBranch
- &RemoveNotifyLine
- &AddNotifyLine
&GetOverdueMessageTransportTypes
&parse_overdues_letter
);
push @EXPORT, qw(
&GetIssuesIteminfo
);
-
- # subs to move to Biblio.pm
- push @EXPORT, qw(
- &GetItems
- );
}
=head1 NAME
=head2 CalcFine
- ($amount, $chargename, $units_minus_grace, $chargeable_units) = &CalcFine($item,
+ ($amount, $units_minus_grace, $chargeable_units) = &CalcFine($item,
$categorycode, $branch,
$start_dt, $end_dt );
Fines scripts should just supply the date range over which to calculate the fine.
-C<&CalcFine> returns four values:
+C<&CalcFine> returns three values:
C<$amount> is the fine owed by the patron (see above).
-C<$chargename> is the chargename field from the applicable record in
-the categoryitem table, whatever that is.
-
C<$units_minus_grace> is the number of chargeable units minus the grace period
C<$chargeable_units> is the number of chargeable units (days between start and end dates, Calendar adjusted where needed,
my $itemtype = $item->{itemtype} || $item->{itype};
my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule({ categorycode => $bortype, itemtype => $itemtype, branchcode => $branchcode });
+ $itemtype = Koha::ItemTypes->find($itemtype);
+
return unless $issuing_rule; # If not rule exist, there is no fine
my $fine_unit = $issuing_rule->lengthunit || 'days';
} # else { # a zero (or null) chargeperiod or negative units_minus_grace value means no charge. }
$amount = $issuing_rule->overduefinescap if $issuing_rule->overduefinescap && $amount > $issuing_rule->overduefinescap;
+
+ # This must be moved to Koha::Item (see also similar code in C4::Accounts::chargelostitem
+ $item->{replacementprice} ||= $itemtype->defaultreplacecost
+ if $itemtype
+ && $item->{replacementprice} == 0
+ && C4::Context->preference("useDefaultReplacementCost");
+
$amount = $item->{replacementprice} if ( $issuing_rule->cap_fine_to_replacement_price && $item->{replacementprice} && $amount > $item->{replacementprice} );
- $debug and warn sprintf("CalcFine returning (%s, %s, %s, %s)", $amount, $issuing_rule->chargename, $units_minus_grace, $chargeable_units);
- return ($amount, $issuing_rule->chargename, $units_minus_grace, $chargeable_units);
- # FIXME: chargename is NEVER populated anywhere.
+
+ $debug and warn sprintf("CalcFine returning (%s, %s, %s)", $amount, $units_minus_grace, $chargeable_units);
+ return ($amount, $units_minus_grace, $chargeable_units);
}
=head2 UpdateFine
- &UpdateFine({ issue_id => $issue_id, itemnumber => $itemnumber, borrwernumber => $borrowernumber, amount => $amount, type => $type, $due => $date_due });
+ &UpdateFine(
+ {
+ issue_id => $issue_id,
+ itemnumber => $itemnumber,
+ borrowernumber => $borrowernumber,
+ amount => $amount,
+ due => $date_due
+ }
+ );
(Note: the following is mostly conjecture and guesswork.)
C<$amount> is the current amount owed by the patron.
-C<$type> will be used in the description of the fine.
-
C<$due> is the due date formatted to the currently specified date format
C<&UpdateFine> looks up the amount currently owed on the given item
my $itemnum = $params->{itemnumber};
my $borrowernumber = $params->{borrowernumber};
my $amount = $params->{amount};
- my $type = $params->{type};
my $due = $params->{due};
- $debug and warn "UpdateFine({ itemnumber => $itemnum, borrowernumber => $borrowernumber, type => $type, due => $due, issue_id => $issue_id})";
+ $debug and warn "UpdateFine({ itemnumber => $itemnum, borrowernumber => $borrowernumber, due => $due, issue_id => $issue_id})";
unless ( $issue_id ) {
carp("No issue_id passed in!");
my $nextaccntno = C4::Accounts::getnextacctno($borrowernumber);
- my $desc = ( $type ? "$type " : '' ) . "$title $due"; # FIXEDME, avoid whitespace prefix on empty $type
+ my $desc = "$title $due";
my $accountline = Koha::Account::Line->new(
{
# logging action
&logaction(
"FINES",
- $type,
+ undef,
$borrowernumber,
"due=".$due." amount=".$amount." itemnumber=".$itemnum
) if C4::Context->preference("FinesLog");
return 0;
}
-=head2 NumberNotifyId
-
- (@notify) = &NumberNotifyId($borrowernumber);
-
-Returns amount for all file per borrowers
-C<@notify> array contains all file per borrowers
-
-C<$notify_id> contains the file number for the borrower number nad item number
-
-=cut
-
-sub NumberNotifyId{
- my ($borrowernumber)=@_;
- my $dbh = C4::Context->dbh;
- my $query=qq| SELECT distinct(notify_id)
- FROM accountlines
- WHERE borrowernumber=?|;
- my @notify;
- my $sth = $dbh->prepare($query);
- $sth->execute($borrowernumber);
- while ( my ($numberofnotify) = $sth->fetchrow ) {
- push( @notify, $numberofnotify );
- }
- return (@notify);
-}
-
-=head2 AmountNotify
-
- ($totalnotify) = &AmountNotify($notifyid);
-
-Returns amount for all file per borrowers
-C<$notifyid> is the file number
-
-C<$totalnotify> contains amount of a file
-
-C<$notify_id> contains the file number for the borrower number and item number
-
-=cut
-
-sub AmountNotify{
- my ($notifyid,$borrowernumber)=@_;
- my $dbh = C4::Context->dbh;
- my $query=qq| SELECT sum(amountoutstanding)
- FROM accountlines
- WHERE notify_id=? AND borrowernumber = ?|;
- my $sth=$dbh->prepare($query);
- $sth->execute($notifyid,$borrowernumber);
- my $totalnotify=$sth->fetchrow;
- $sth->finish;
- return ($totalnotify);
-}
-
-=head2 GetItems
-
- ($items) = &GetItems($itemnumber);
-
-Returns the list of all delays from overduerules.
-
-C<$items> is a reference-to-hash whose keys are all of the fields
-from the items tables of the Koha database. Thus,
-
-C<$itemnumber> contains the borrower categorycode
-
-=cut
-
-# FIXME: This is a bad function to have here.
-# Shouldn't it be in C4::Items?
-# Shouldn't it be called GetItem since you only get 1 row?
-# Shouldn't it be called GetItem since you give it only 1 itemnumber?
-
-sub GetItems {
- my $itemnumber = shift or return;
- my $query = qq|SELECT *
- FROM items
- WHERE itemnumber=?|;
- my $sth = C4::Context->dbh->prepare($query);
- $sth->execute($itemnumber);
- my ($items) = $sth->fetchrow_hashref;
- return ($items);
-}
-
=head2 GetBranchcodesWithOverdueRules
my @branchcodes = C4::Overdues::GetBranchcodesWithOverdueRules()
return @$branchcodes;
}
-=head2 CheckItemNotify
-
-Sql request to check if the document has alreday been notified
-this function is not exported, only used with GetOverduesForBranch
-
-=cut
-
-sub CheckItemNotify {
- my ($notify_id,$notify_level,$itemnumber) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare("
- SELECT COUNT(*)
- FROM notifys
- WHERE notify_id = ?
- AND notify_level = ?
- AND itemnumber = ? ");
- $sth->execute($notify_id,$notify_level,$itemnumber);
- my $notified = $sth->fetchrow;
- return ($notified);
-}
-
=head2 GetOverduesForBranch
Sql request for display all information for branchoverdues.pl
items.location,
items.itemnumber,
itemtypes.description,
- accountlines.notify_id,
- accountlines.notify_level,
accountlines.amountoutstanding
FROM accountlines
LEFT JOIN issues ON issues.itemnumber = accountlines.itemnumber
AND (issues.branchcode = ? )
AND (issues.date_due < NOW())
";
- my @getoverdues;
- my $i = 0;
- my $sth;
if ($location) {
- $sth = $dbh->prepare("$select AND items.location = ? ORDER BY borrowers.surname, borrowers.firstname");
- $sth->execute($branch, $location);
+ my $q = "$select AND items.location = ? ORDER BY borrowers.surname, borrowers.firstname";
+ return @{ $dbh->selectall_arrayref($q, { Slice => {} }, $branch, $location ) };
} else {
- $sth = $dbh->prepare("$select ORDER BY borrowers.surname, borrowers.firstname");
- $sth->execute($branch);
- }
- while ( my $data = $sth->fetchrow_hashref ) {
- #check if the document has already been notified
- my $countnotify = CheckItemNotify($data->{'notify_id'}, $data->{'notify_level'}, $data->{'itemnumber'});
- if ($countnotify eq '0') {
- $getoverdues[$i] = $data;
- $i++;
- }
- }
- return (@getoverdues);
-}
-
-
-=head2 AddNotifyLine
-
- &AddNotifyLine($borrowernumber, $itemnumber, $overduelevel, $method, $notifyId)
-
-Create a line into notify, if the method is phone, the notification_send_date is implemented to
-
-=cut
-
-sub AddNotifyLine {
- my ( $borrowernumber, $itemnumber, $overduelevel, $method, $notifyId ) = @_;
- my $dbh = C4::Context->dbh;
- if ( $method eq "phone" ) {
- my $sth = $dbh->prepare(
- "INSERT INTO notifys (borrowernumber,itemnumber,notify_date,notify_send_date,notify_level,method,notify_id)
- VALUES (?,?,now(),now(),?,?,?)"
- );
- $sth->execute( $borrowernumber, $itemnumber, $overduelevel, $method,
- $notifyId );
+ my $q = "$select ORDER BY borrowers.surname, borrowers.firstname";
+ return @{ $dbh->selectall_arrayref($q, { Slice => {} }, $branch ) };
}
- else {
- my $sth = $dbh->prepare(
- "INSERT INTO notifys (borrowernumber,itemnumber,notify_date,notify_level,method,notify_id)
- VALUES (?,?,now(),?,?,?)"
- );
- $sth->execute( $borrowernumber, $itemnumber, $overduelevel, $method,
- $notifyId );
- }
- return 1;
-}
-
-=head2 RemoveNotifyLine
-
- &RemoveNotifyLine( $borrowernumber, $itemnumber, $notify_date );
-
-Cancel a notification
-
-=cut
-
-sub RemoveNotifyLine {
- my ( $borrowernumber, $itemnumber, $notify_date ) = @_;
- my $dbh = C4::Context->dbh;
- my $sth = $dbh->prepare(
- "DELETE FROM notifys
- WHERE
- borrowernumber=?
- AND itemnumber=?
- AND notify_date=?"
- );
- $sth->execute( $borrowernumber, $itemnumber, $notify_date );
- return 1;
}
=head2 GetOverdueMessageTransportTypes