my $itemnumber=$cgi->param('itemnumber');
my $biblioitemnumber=$cgi->param('biblioitemnumber');
my $itemlost=$cgi->param('itemlost');
+my $itemnotes=$cgi->param('itemnotes');
my $wthdrawn=$cgi->param('wthdrawn');
my $damaged=$cgi->param('damaged');
my $confirm=$cgi->param('confirm');
my $dbh = C4::Context->dbh;
# get the rest of this item's information
-my $item_data_sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
-$item_data_sth->execute($itemnumber);
-my $item_data_hashref = $item_data_sth->fetchrow_hashref();
+my $item_data_hashref = GetItem($itemnumber, undef);
+my $newitemdata;
+# modify MARC item if input differs from items table.
+if ( $itemnotes ne $item_data_hashref->{'itemnotes'}) {
+ ModItemInMarconefield($biblionumber, $itemnumber, 'items.itemnotes', $itemnotes);
+ $newitemdata->{'itemnotes'} = $itemnotes;
+} elsif ($itemlost ne $item_data_hashref->{'itemlost'}) {
+ ModItemInMarconefield($biblionumber, $itemnumber, 'items.itemlost', $itemlost);
+ $newitemdata->{'itemlost'} = $itemlost;
+} elsif ($wthdrawn ne $item_data_hashref->{'wthdrawn'}) {
+ ModItemInMarconefield($biblionumber, $itemnumber, 'items.wthdrawn', $wthdrawn);
+ $newitemdata->{'wthdrawn'} = $wthdrawn;
+} elsif ($damaged ne $item_data_hashref->{'damaged'}) {
+ ModItemInMarconefield($biblionumber, $itemnumber, 'items.damaged', $damaged);
+ $newitemdata->{'damaged'} = $damaged;
+} else {
+ #nothings changed, so do nothing.
+ print $cgi->redirect("moredetail.pl?biblionumber=$biblionumber&itemnumber=$itemnumber");
+}
-# superimpose the new on the old
-$item_data_hashref->{'itemlost'} = $itemlost if $itemlost;
-$item_data_hashref->{'wthdrawn'} = $wthdrawn if $wthdrawn;
-$item_data_hashref->{'damaged'} = $damaged if $damaged;
+# FIXME: eventually we'll use Biblio.pm, but it's currently too buggy (is this current ??)
+#ModItem( $dbh,'',$biblionumber,$itemnumber,'',$item_hashref );
+ $newitemdata->{'itemnumber'} = $itemnumber;
+# &C4::Biblio::_koha_modify_item($dbh,$newitemdata);
-# check reservations
-my ($status, $reserve) = CheckReserves($itemnumber, $item_data_hashref->{'barcode'});
-if ($reserve){
- #print $cgi->header;
- warn "Reservation found on item $itemnumber";
- #exit;
-}
-# check issues
-my $sth=$dbh->prepare("SELECT * FROM issues WHERE (itemnumber=? AND returndate IS NULL)");
-$sth->execute($itemnumber);
-my $issues=$sth->fetchrow_hashref();
+ $sth = $dbh->prepare("UPDATE items SET wthdrawn=?,itemlost=?,damaged=?,itemnotes=? WHERE itemnumber=?");
+ $sth->execute($wthdrawn,$itemlost,$damaged,$itemnotes,$itemnumber);
+ &ModZebra($biblionumber,"specialUpdate","biblioserver");
+
+# check issues iff itemlost.
+ # FIXME : is there documentation or enforcement that itemlost value must be '1'? if no replacement price, then borrower just doesn't get charged?
+if ($itemlost==1) {
+ my $sth=$dbh->prepare("SELECT * FROM issues WHERE (itemnumber=? AND returndate IS NULL)");
+ $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}) && ($itemlost==1) ){
+ # if a borrower lost the item, add a replacement cost to the their record
+ if ( ($issues->{borrowernumber}) && ($itemlost==1) ){
# first make sure the borrower hasn't already been charged for this item
my $sth1=$dbh->prepare("SELECT * from accountlines
"Lost Item $item_data_hashref->{'title'} $item_data_hashref->{'barcode'}",
$item_data_hashref->{'replacementprice'},$itemnumber);
$sth2->finish;
+ # FIXME: Log this ?
}
+ }
+ $sth->finish;
}
-$sth->finish;
-
-# FIXME: eventually we'll use Biblio.pm, but it's currently too buggy
-#ModItem( $dbh,'',$biblionumber,$itemnumber,'',$item_hashref );
-$sth = $dbh->prepare("UPDATE items SET wthdrawn=?,itemlost=?,damaged=? WHERE itemnumber=?");
-$sth->execute($wthdrawn,$itemlost,$damaged,$itemnumber);
print $cgi->redirect("moredetail.pl?biblionumber=$biblionumber&itemnumber=$itemnumber");