No subject
Fri Jul 29 16:50:56 CEST 2011
Select an item to edit
Edit the item as you see fit
Verify that all values are saved in correct fields, and your changes are correct. (they are)
Verify that you cannot set 'lost' status from the edit item interface. (You cannot)
longoverdue.pl
backdate an item so it will be long overdue
run longoverdue.pl to set your item as long overdue.
verify that the item is not removed from the patron's checked out items.
Long Overdue does not charge the patron for the replacement.
---
C4/Accounts.pm | 77 ++++++++-------------------
C4/Circulation.pm | 40 ++++++++++++++-
C4/Items.pm | 8 +++-
catalogue/updateitem.pl | 3 +-
cataloguing/additem.pl | 38 ++++++++-----
misc/cronjobs/longoverdue.pl | 3 +-
t/db_dependent/lib/KohaTest/Accounts.pm | 1 -
t/db_dependent/lib/KohaTest/Circulation.pm | 1 +
tools/batchMod.pl | 7 ++-
9 files changed, 100 insertions(+), 78 deletions(-)
diff --git a/C4/Accounts.pm b/C4/Accounts.pm
index 2352e9e..860e187 100644
--- a/C4/Accounts.pm
+++ b/C4/Accounts.pm
@@ -23,8 +23,7 @@ use strict;
use C4::Context;
use C4::Stats;
use C4::Members;
-use C4::Items;
-use C4::Circulation qw(MarkIssueReturned);
+use C4::Circulation qw(ReturnLostItem);
use vars qw($VERSION @ISA @EXPORT);
@@ -218,7 +217,7 @@ sub makepayment {
#check to see what accounttype
if ( $data->{'accounttype'} eq 'Rep' || $data->{'accounttype'} eq 'L' ) {
- returnlost( $borrowernumber, $data->{'itemnumber'} );
+ ReturnLostItem( $borrowernumber, $data->{'itemnumber'} );
}
}
@@ -278,64 +277,34 @@ EOT
=cut
-sub returnlost{
- my ( $borrowernumber, $itemnum ) = @_;
- C4::Circulation::MarkIssueReturned( $borrowernumber, $itemnum );
- my $borrower = C4::Members::GetMember( 'borrowernumber'=>$borrowernumber );
- my @datearr = localtime(time);
- my $date = ( 1900 + $datearr[5] ) . "-" . ( $datearr[4] + 1 ) . "-" . $datearr[3];
- my $bor = "$borrower->{'firstname'} $borrower->{'surname'} $borrower->{'cardnumber'}";
- ModItem({ paidfor => "Paid for by $bor $date" }, undef, $itemnum);
-}
-
-
sub chargelostitem{
# lost ==1 Lost, lost==2 longoverdue, lost==3 lost and paid for
# FIXME: itemlost should be set to 3 after payment is made, should be a warning to the interface that
# a charge has been added
# FIXME : if no replacement price, borrower just doesn't get charged?
-
my $dbh = C4::Context->dbh();
- my ($itemnumber) = @_;
- my $sth=$dbh->prepare("SELECT issues.*,items.*,biblio.title
- FROM issues
- JOIN items USING (itemnumber)
- JOIN biblio USING (biblionumber)
- WHERE issues.itemnumber=?");
- $sth->execute($itemnumber);
- my $issues=$sth->fetchrow_hashref();
-
- # if a borrower lost the item, add a replacement cost to the their record
- if ( $issues->{borrowernumber} ){
-
- # first make sure the borrower hasn't already been charged for this item
- my $sth1=$dbh->prepare("SELECT * from accountlines
- WHERE borrowernumber=? AND itemnumber=? and accounttype='L'");
- $sth1->execute($issues->{'borrowernumber'},$itemnumber);
- my $existing_charge_hashref=$sth1->fetchrow_hashref();
-
- # OK, they haven't
- unless ($existing_charge_hashref) {
- # This item is on issue ... add replacement cost to the borrower's record and mark it returned
- # Note that we add this to the account even if there's no replacement price, allowing some other
- # process (or person) to update it, since we don't handle any defaults for replacement prices.
- my $accountno = getnextacctno($issues->{'borrowernumber'});
- my $sth2=$dbh->prepare("INSERT INTO accountlines
- (borrowernumber,accountno,date,amount,description,accounttype,amountoutstanding,itemnumber)
- VALUES (?,?,now(),?,?,'L',?,?)");
- $sth2->execute($issues->{'borrowernumber'},$accountno,$issues->{'replacementprice'},
- "Lost Item $issues->{'title'} $issues->{'barcode'}",
- $issues->{'replacementprice'},$itemnumber);
- $sth2->finish;
- # FIXME: Log this ?
- }
- #FIXME : Should probably have a way to distinguish this from an item that really was returned.
- #warn " $issues->{'borrowernumber'} / $itemnumber ";
- C4::Circulation::MarkIssueReturned($issues->{borrowernumber},$itemnumber);
- # Shouldn't MarkIssueReturned do this?
- C4::Items::ModItem({ onloan => undef }, undef, $itemnumber);
+ my ($borrowernumber, $itemnumber, $amount, $description) = @_;
+
+ # first make sure the borrower hasn't already been charged for this item
+ my $sth1=$dbh->prepare("SELECT * from accountlines
+ WHERE borrowernumber=? AND itemnumber=? and accounttype='L'");
+ $sth1->execute($borrowernumber,$itemnumber);
+ my $existing_charge_hashref=$sth1->fetchrow_hashref();
+
+ # OK, they haven't
+ unless ($existing_charge_hashref) {
+ # This item is on issue ... add replacement cost to the borrower's record and mark it returned
+ # Note that we add this to the account even if there's no replacement price, allowing some other
+ # process (or person) to update it, since we don't handle any defaults for replacement prices.
+ my $accountno = getnextacctno($borrowernumber);
+ my $sth2=$dbh->prepare("INSERT INTO accountlines
+ (borrowernumber,accountno,date,amount,description,accounttype,amountoutstanding,itemnumber)
+ VALUES (?,?,now(),?,?,'L',?,?)");
+ $sth2->execute($borrowernumber,$accountno,$amount,
+ $description,$amount,$itemnumber);
+ $sth2->finish;
+ # FIXME: Log this ?
}
- $sth->finish;
}
=head2 manualinvoice
diff --git a/C4/Circulation.pm b/C4/Circulation.pm
index 520c116..589b5c5 100644
--- a/C4/Circulation.pm
+++ b/C4/Circulation.pm
@@ -59,8 +59,9 @@ BEGIN {
# FIXME subs that should probably be elsewhere
push @EXPORT, qw(
- &FixOverduesOnReturn
&barcodedecode
+ &LostItem
+ &ReturnLostItem
);
# subs to deal with issuing a book
@@ -2943,8 +2944,43 @@ sub DeleteBranchTransferLimits {
$sth->execute();
}
+sub ReturnLostItem{
+ my ( $borrowernumber, $itemnum ) = @_;
- 1;
+ MarkIssueReturned( $borrowernumber, $itemnum );
+ my $borrower = C4::Members::GetMember( 'borrowernumber'=>$borrowernumber );
+ my @datearr = localtime(time);
+ my $date = ( 1900 + $datearr[5] ) . "-" . ( $datearr[4] + 1 ) . "-" . $datearr[3];
+ my $bor = "$borrower->{'firstname'} $borrower->{'surname'} $borrower->{'cardnumber'}";
+ ModItem({ paidfor => "Paid for by $bor $date" }, undef, $itemnum);
+}
+
+
+sub LostItem{
+ my ($itemnumber, $mark_returned) = @_;
+
+ my $dbh = C4::Context->dbh();
+ my $sth=$dbh->prepare("SELECT issues.*,items.*,biblio.title
+ FROM issues
+ JOIN items USING (itemnumber)
+ JOIN biblio USING (biblionumber)
+ WHERE issues.itemnumber=?");
+ $sth->execute($itemnumber);
+ my $issues=$sth->fetchrow_hashref();
+ $sth->finish;
+
+ # if a borrower lost the item, add a replacement cost to the their record
+ if ( my $borrowernumber = $issues->{borrowernumber} ){
+
+ C4::Accounts::chargelostitem($borrowernumber, $itemnumber, $issues->{'replacementprice'}, "Lost Item $issues->{'title'} $issues->{'barcode'}");
+ #FIXME : Should probably have a way to distinguish this from an item that really was returned.
+ #warn " $issues->{'borrowernumber'} / $itemnumber ";
+ MarkIssueReturned($borrowernumber,$itemnumber) if $mark_returned;
+ }
+}
+
+
+1;
__END__
diff --git a/C4/Items.pm b/C4/Items.pm
index bc36dd1..9e7167d 100644
--- a/C4/Items.pm
+++ b/C4/Items.pm
@@ -397,6 +397,8 @@ Note that only columns that can be directly
changed from the cataloging and serials
item editors are included in this hash.
+Returns item record
+
=cut
my %default_values_for_mod_from_marc = (
@@ -446,7 +448,8 @@ sub ModItemFromMarc {
}
my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
- return ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
+ ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
+ return $item;
}
=head2 ModItem
@@ -495,6 +498,9 @@ sub ModItem {
};
$item->{'itemnumber'} = $itemnumber or return undef;
+
+ $item->{onloan} = undef if $item->{itemlost};
+
_set_derived_columns_for_mod($item);
_do_column_fixes_for_mod($item);
# FIXME add checks
diff --git a/catalogue/updateitem.pl b/catalogue/updateitem.pl
index e8ce20d..345d0c8 100755
--- a/catalogue/updateitem.pl
+++ b/catalogue/updateitem.pl
@@ -26,7 +26,6 @@ use C4::Biblio;
use C4::Items;
use C4::Output;
use C4::Circulation;
-use C4::Accounts;
use C4::Reserves;
my $cgi= new CGI;
@@ -75,6 +74,6 @@ if (defined $itemnotes) { # i.e., itemnotes parameter passed from form
ModItem($item_changes, $biblionumber, $itemnumber);
-C4::Accounts::chargelostitem($itemnumber) if ($itemlost==1) ;
+LostItem($itemnumber, 'MARK RETURNED') if ($itemlost==1) ;
print $cgi->redirect("moredetail.pl?biblionumber=$biblionumber&itemnumber=$itemnumber#item$itemnumber");
diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl
index 0db2d2d..4b99654 100755
--- a/cataloguing/additem.pl
+++ b/cataloguing/additem.pl
@@ -26,6 +26,7 @@ use C4::Auth;
use C4::Output;
use C4::Biblio;
use C4::Items;
+use C4::Circulation;
use C4::Context;
use C4::Koha; # XXX subfield_is_koha_internal_p
use C4::Branch; # XXX subfield_is_koha_internal_p
@@ -206,28 +207,33 @@ sub generate_subfield_form {
}
}
- $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list
- -name => "field_value",
- -values => \@authorised_values,
- -default => $value,
- -labels => \%authorised_lib,
- -override => 1,
- -size => 1,
- -multiple => 0,
- -tabindex => 1,
- -id => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
- -class => "input_marceditor",
- );
+ if ($subfieldlib->{'hidden'}) {
+ $subfield_data{marc_value} = qq(<input type="hidden" $attributes /> $authorised_lib{$value});
+ }
+ else {
+ $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list
+ -name => "field_value",
+ -values => \@authorised_values,
+ -default => $value,
+ -labels => \%authorised_lib,
+ -override => 1,
+ -size => 1,
+ -multiple => 0,
+ -tabindex => 1,
+ -id => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
+ -class => "input_marceditor",
+ );
+ }
- # it's a thesaurus / authority field
}
+ # it's a thesaurus / authority field
elsif ( $subfieldlib->{authtypecode} ) {
$subfield_data{marc_value} = "<input type=\"text\" $attributes />
<a href=\"#\" class=\"buttonDot\"
onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$subfieldlib->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
";
- # it's a plugin field
}
+ # it's a plugin field
elsif ( $subfieldlib->{value_builder} ) {
# opening plugin
my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $subfieldlib->{'value_builder'};
@@ -498,7 +504,7 @@ if ($op eq "additem") {
if ($exist_itemnumber && $exist_itemnumber != $itemnumber) {
push @errors,"barcode_not_unique";
} else {
- my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = ModItemFromMarc($itemtosave,$biblionumber,$itemnumber);
+ ModItemFromMarc($itemtosave,$biblionumber,$itemnumber);
$itemnumber="";
}
$nextop="additem";
@@ -608,6 +614,8 @@ if($itemrecord){
next if subfield_is_koha_internal_p($subfieldtag);
next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
+ $subfieldlib->{hidden} = 1
+ if $tagslib->{$tag}->{$subfieldtag}->{authorised_value} eq 'LOST';
my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);
push @fields, "$tag$subfieldtag";
diff --git a/misc/cronjobs/longoverdue.pl b/misc/cronjobs/longoverdue.pl
index 651b9d2..2179d10 100755
--- a/misc/cronjobs/longoverdue.pl
+++ b/misc/cronjobs/longoverdue.pl
@@ -35,7 +35,6 @@ BEGIN {
}
use C4::Context;
use C4::Items;
-use C4::Accounts;
use Getopt::Long;
my $lost; # key=lost value, value=num days.
@@ -155,7 +154,7 @@ foreach my $startrange (sort keys %$lost) {
printf ("Due %s: item %5s from borrower %5s to lost: %s\n", $row->{date_due}, $row->{itemnumber}, $row->{borrowernumber}, $lostvalue) if($verbose);
if($confirm) {
ModItem({ itemlost => $lostvalue }, $row->{'biblionumber'}, $row->{'itemnumber'});
- chargelostitem($row->{'itemnumber'}) if( $charge && $charge eq $lostvalue);
+ LostItem($row->{'itemnumber'}) if( $charge && $charge eq $lostvalue);
}
$count++;
}
diff --git a/t/db_dependent/lib/KohaTest/Accounts.pm b/t/db_dependent/lib/KohaTest/Accounts.pm
index 703d478..ac3a78e 100644
--- a/t/db_dependent/lib/KohaTest/Accounts.pm
+++ b/t/db_dependent/lib/KohaTest/Accounts.pm
@@ -15,7 +15,6 @@ sub methods : Test( 1 ) {
my @methods = qw( recordpayment
makepayment
getnextacctno
- returnlost
manualinvoice
fixcredit
refund
diff --git a/t/db_dependent/lib/KohaTest/Circulation.pm b/t/db_dependent/lib/KohaTest/Circulation.pm
index 7d5e69d..b3a1ff8 100644
--- a/t/db_dependent/lib/KohaTest/Circulation.pm
+++ b/t/db_dependent/lib/KohaTest/Circulation.pm
@@ -47,6 +47,7 @@ sub methods : Test( 1 ) {
CheckSpecialHolidays
CheckRepeatableSpecialHolidays
CheckValidBarcode
+ ReturnLostItem
);
can_ok( $self->testing_class, @methods );
diff --git a/tools/batchMod.pl b/tools/batchMod.pl
index 9d4431b..a7848b9 100755
--- a/tools/batchMod.pl
+++ b/tools/batchMod.pl
@@ -25,6 +25,7 @@ use C4::Auth;
use C4::Output;
use C4::Biblio;
use C4::Items;
+use C4::Circulation;
use C4::Context;
use C4::Koha; # XXX subfield_is_koha_internal_p
use C4::Branch; # XXX subfield_is_koha_internal_p
@@ -173,7 +174,11 @@ if ($op eq "action") {
if ($values_to_modify || $values_to_blank) {
my $localmarcitem = Item2Marc($itemdata);
UpdateMarcWith( $marcitem, $localmarcitem );
- eval{ my ( $oldbiblionumber, $oldbibnum, $oldbibitemnum ) = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) };
+ eval{
+ if ( my $item = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) ) {
+ LostItem($itemnumber, 'MARK RETURNED') if $item->{itemlost} == 1;
+ }
+ };
}
}
$i++;
--
1.7.2.5
More information about the Koha-patches
mailing list