GetBorrowerCategorycode
&GetBorrowercategoryList
- &GetBorrowersWhoHaveNotBorrowedSince
+ &GetBorrowersToExpunge
&GetBorrowersWhoHaveNeverBorrowed
&GetBorrowersWithIssuesHistoryOlderThan
my %flags;
my ( $patroninformation) = @_;
my $dbh=C4::Context->dbh;
- my ($amount) = GetMemberAccountRecords( $patroninformation->{'borrowernumber'});
- if ( $amount > 0 ) {
+ my ($balance, $owing) = GetMemberAccountBalance( $patroninformation->{'borrowernumber'});
+ if ( $owing > 0 ) {
my %flaginfo;
my $noissuescharge = C4::Context->preference("noissuescharge") || 5;
- $flaginfo{'message'} = sprintf "Patron owes \$%.02f", $amount;
- $flaginfo{'amount'} = sprintf "%.02f", $amount;
- if ( $amount > $noissuescharge && !C4::Context->preference("AllowFineOverride") ) {
+ $flaginfo{'message'} = sprintf "Patron owes \$%.02f", $owing;
+ $flaginfo{'amount'} = sprintf "%.02f", $owing;
+ if ( $owing > $noissuescharge && !C4::Context->preference("AllowFineOverride") ) {
$flaginfo{'noissues'} = 1;
}
$flags{'CHARGES'} = \%flaginfo;
}
- elsif ( $amount < 0 ) {
+ elsif ( $balance < 0 ) {
my %flaginfo;
- $flaginfo{'message'} = sprintf "Patron has credit of \$%.02f", -$amount;
- $flaginfo{'amount'} = sprintf "%.02f", $amount;
+ $flaginfo{'message'} = sprintf "Patron has credit of \$%.02f", -$balance;
+ $flaginfo{'amount'} = sprintf "%.02f", $balance;
$flags{'CREDITS'} = \%flaginfo;
}
if ( $patroninformation->{'gonenoaddress'}
=cut
-#'
sub GetMemberAccountRecords {
- my ($borrowernumber,$date) = @_;
+ my ($borrowernumber) = @_;
my $dbh = C4::Context->dbh;
my @acctlines;
my $numlines = 0;
SELECT *
FROM accountlines
WHERE borrowernumber=?);
- my @bind = ($borrowernumber);
- if ($date && $date ne ''){
- $strsth.=" AND date < ? ";
- push(@bind,$date);
- }
$strsth.=" ORDER BY date desc,timestamp DESC";
my $sth= $dbh->prepare( $strsth );
- $sth->execute( @bind );
+ $sth->execute( $borrowernumber );
+
my $total = 0;
while ( my $data = $sth->fetchrow_hashref ) {
if ( $data->{itemnumber} ) {
return ( $total, \@acctlines,$numlines);
}
+=head2 GetMemberAccountBalance
+
+ ($total_balance, $non_issue_balance, $other_charges) = &GetMemberAccountBalance($borrowernumber);
+
+Calculates amount immediately owing by the patron - non-issue charges.
+Based on GetMemberAccountRecords.
+Charges exempt from non-issue are:
+* Res (reserves)
+* Rent (rental) if RentalsInNoissuesCharge syspref is set to false
+* Manual invoices if ManInvInNoissuesCharge syspref is set to false
+
+=cut
+
+sub GetMemberAccountBalance {
+ my ($borrowernumber) = @_;
+
+ my $ACCOUNT_TYPE_LENGTH = 5; # this is plain ridiculous...
+
+ my @not_fines = ('Res');
+ push @not_fines, 'Rent' unless C4::Context->preference('RentalsInNoissuesCharge');
+ unless ( C4::Context->preference('ManInvInNoissuesCharge') ) {
+ my $dbh = C4::Context->dbh;
+ my $man_inv_types = $dbh->selectcol_arrayref(qq{SELECT authorised_value FROM authorised_values WHERE category = 'MANUAL_INV'});
+ push @not_fines, map substr($_, 0, $ACCOUNT_TYPE_LENGTH), @$man_inv_types;
+ }
+ my %not_fine = map {$_ => 1} @not_fines;
+
+ my ($total, $acctlines) = GetMemberAccountRecords($borrowernumber);
+ my $other_charges = 0;
+ foreach (@$acctlines) {
+ $other_charges += $_->{amountoutstanding} if $not_fine{ substr($_->{accounttype}, 0, $ACCOUNT_TYPE_LENGTH) };
+ }
+
+ return ( $total, $total - $other_charges, $other_charges);
+}
+
=head2 GetBorNotifyAcctRecord
($total, $acctlines, $count) = &GetBorNotifyAcctRecord($params,$notifyid);
return ($roadtype);
}
-=head2 GetBorrowersWhoHaveNotBorrowedSince
+=head2 GetBorrowersToExpunge
- &GetBorrowersWhoHaveNotBorrowedSince($date)
+ $borrowers = &GetBorrowersToExpunge(
+ not_borrowered_since => $not_borrowered_since,
+ expired_before => $expired_before,
+ category_code => $category_code,
+ branchcode => $branchcode
+ );
-this function get all borrowers who haven't borrowed since the date given on input arg.
+ This function get all borrowers based on the given criteria.
=cut
-sub GetBorrowersWhoHaveNotBorrowedSince {
- my $filterdate = shift||POSIX::strftime("%Y-%m-%d",localtime());
- my $filterexpiry = shift;
- my $filterbranch = shift ||
+sub GetBorrowersToExpunge {
+ my $params = shift;
+
+ my $filterdate = $params->{'not_borrowered_since'};
+ my $filterexpiry = $params->{'expired_before'};
+ my $filtercategory = $params->{'category_code'};
+ my $filterbranch = $params->{'branchcode'} ||
((C4::Context->preference('IndependantBranches')
&& C4::Context->userenv
&& C4::Context->userenv->{flags} % 2 !=1
&& C4::Context->userenv->{branch})
? C4::Context->userenv->{branch}
: "");
+
my $dbh = C4::Context->dbh;
my $query = "
SELECT borrowers.borrowernumber,
- max(old_issues.timestamp) as latestissue,
- max(issues.timestamp) as currentissue
+ MAX(old_issues.timestamp) AS latestissue,
+ MAX(issues.timestamp) AS currentissue
FROM borrowers
JOIN categories USING (categorycode)
LEFT JOIN old_issues USING (borrowernumber)
LEFT JOIN issues USING (borrowernumber)
WHERE category_type <> 'S'
- AND borrowernumber NOT IN (SELECT guarantorid FROM borrowers WHERE guarantorid IS NOT NULL AND guarantorid <> 0)
+ AND borrowernumber NOT IN (SELECT guarantorid FROM borrowers WHERE guarantorid IS NOT NULL AND guarantorid <> 0)
";
my @query_params;
- if ($filterbranch && $filterbranch ne ""){
- $query.=" AND borrowers.branchcode= ?";
- push @query_params,$filterbranch;
+ if ( $filterbranch && $filterbranch ne "" ) {
+ $query.= " AND borrowers.branchcode = ? ";
+ push( @query_params, $filterbranch );
}
- if($filterexpiry){
+ if ( $filterexpiry ) {
$query .= " AND dateexpiry < ? ";
- push @query_params,$filterdate;
+ push( @query_params, $filterexpiry );
+ }
+ if ( $filtercategory ) {
+ $query .= " AND categorycode = ? ";
+ push( @query_params, $filtercategory );
}
- $query.=" GROUP BY borrowers.borrowernumber";
- if ($filterdate){
- $query.=" HAVING (latestissue < ? OR latestissue IS NULL)
- AND currentissue IS NULL";
+ $query.=" GROUP BY borrowers.borrowernumber HAVING currentissue IS NULL ";
+ if ( $filterdate ) {
+ $query.=" AND ( latestissue < ? OR latestissue IS NULL ) ";
push @query_params,$filterdate;
}
warn $query if $debug;
+
my $sth = $dbh->prepare($query);
if (scalar(@query_params)>0){
$sth->execute(@query_params);
my $issueslist = GetPendingIssues($borrowernumber);
foreach my $it (@$issueslist){
- if ((substr $it->{'issuedate'}, 0, 10) eq $now) {
+ if ((substr $it->{'issuedate'}, 0, 10) eq $now || (substr $it->{'lastreneweddate'}, 0, 10) eq $now) {
$it->{'now'} = 1;
}
elsif ((substr $it->{'date_due'}, 0, 10) le $now) {