Adding Some new functions
Signed-off-by: Galen Charlton <gmcharlt@gmail.com>
This commit is contained in:
parent
961d7fceef
commit
7753bbad4f
1 changed files with 136 additions and 17 deletions
153
C4/Items.pm
153
C4/Items.pm
|
@ -64,6 +64,9 @@ BEGIN {
|
|||
get_itemnumbers_of
|
||||
GetItemnumberFromBarcode
|
||||
|
||||
DelItemCheck
|
||||
MoveItemFromBiblio
|
||||
GetLatestAcquisitions
|
||||
CartToShelf
|
||||
);
|
||||
}
|
||||
|
@ -800,7 +803,6 @@ sub GetItemStatus {
|
|||
while ( my ( $authorisedvalue, $lib ) = $authvalsth->fetchrow ) {
|
||||
$itemstatus{$authorisedvalue} = $lib;
|
||||
}
|
||||
$authvalsth->finish;
|
||||
return \%itemstatus;
|
||||
exit 1;
|
||||
}
|
||||
|
@ -809,7 +811,6 @@ sub GetItemStatus {
|
|||
#No authvalue list
|
||||
# build default
|
||||
}
|
||||
$sth->finish;
|
||||
}
|
||||
|
||||
#No authvalue list
|
||||
|
@ -900,7 +901,6 @@ sub GetItemLocation {
|
|||
while ( my ( $authorisedvalue, $lib ) = $authvalsth->fetchrow ) {
|
||||
$itemlocation{$authorisedvalue} = $lib;
|
||||
}
|
||||
$authvalsth->finish;
|
||||
return \%itemlocation;
|
||||
exit 1;
|
||||
}
|
||||
|
@ -909,7 +909,6 @@ sub GetItemLocation {
|
|||
#No authvalue list
|
||||
# build default
|
||||
}
|
||||
$sth->finish;
|
||||
}
|
||||
|
||||
#No authvalue list
|
||||
|
@ -997,7 +996,7 @@ sub GetLostItems {
|
|||
|
||||
=over 4
|
||||
|
||||
$itemlist = GetItemsForInventory($minlocation, $maxlocation, $location, $itemtype $datelastseen, $branch, $offset, $size);
|
||||
$itemlist = GetItemsForInventory($minlocation, $maxlocation, $location, $itemtype $datelastseen, $branch, $offset, $size, $statushash);
|
||||
|
||||
=back
|
||||
|
||||
|
@ -1010,11 +1009,12 @@ seen. It is ordered by callnumber then title.
|
|||
The required minlocation & maxlocation parameters are used to specify a range of item callnumbers
|
||||
the datelastseen can be used to specify that you want to see items not seen since a past date only.
|
||||
offset & size can be used to retrieve only a part of the whole listing (defaut behaviour)
|
||||
$statushash requires a hashref that has the authorized values fieldname (intems.notforloan, etc...) as keys, and an arrayref of statuscodes we are searching for as values.
|
||||
|
||||
=cut
|
||||
|
||||
sub GetItemsForInventory {
|
||||
my ( $minlocation, $maxlocation,$location, $itemtype, $ignoreissued, $datelastseen, $branch, $offset, $size ) = @_;
|
||||
my ( $minlocation, $maxlocation,$location, $itemtype, $ignoreissued, $datelastseen, $branch, $offset, $size, $statushash ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my ( @bind_params, @where_strings );
|
||||
|
||||
|
@ -1024,6 +1024,14 @@ FROM items
|
|||
LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber
|
||||
LEFT JOIN biblioitems on items.biblionumber = biblioitems.biblionumber
|
||||
END_SQL
|
||||
if ($statushash){
|
||||
for my $authvfield (keys %$statushash){
|
||||
if ( scalar @{$statushash->{$authvfield}} > 0 ){
|
||||
my $joinedvals = join ',', @{$statushash->{$authvfield}};
|
||||
push @where_strings, "$authvfield in (" . $joinedvals . ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($minlocation) {
|
||||
push @where_strings, 'itemcallnumber >= ?';
|
||||
|
@ -1102,7 +1110,6 @@ sub GetItemsCount {
|
|||
my $sth = $dbh->prepare($query);
|
||||
$sth->execute($biblionumber);
|
||||
my $count = $sth->fetchrow;
|
||||
$sth->finish;
|
||||
return ($count);
|
||||
}
|
||||
|
||||
|
@ -1165,7 +1172,6 @@ sub GetItemsByBiblioitemnumber {
|
|||
# set date_due to blank, so in the template we check itemlost, and wthdrawn
|
||||
$data->{'date_due'} = '';
|
||||
} # else
|
||||
$sth2->finish;
|
||||
# Find the last 3 people who borrowed this item.
|
||||
my $query2 = "SELECT * FROM old_issues, borrowers WHERE itemnumber = ?
|
||||
AND old_issues.borrowernumber = borrowers.borrowernumber
|
||||
|
@ -1179,10 +1185,8 @@ sub GetItemsByBiblioitemnumber {
|
|||
$data->{"borrower$i2"} = $data2->{'borrowernumber'};
|
||||
$i2++;
|
||||
}
|
||||
$sth2->finish;
|
||||
push(@results,$data);
|
||||
}
|
||||
$sth->finish;
|
||||
return (\@results);
|
||||
}
|
||||
|
||||
|
@ -1304,8 +1308,6 @@ sub GetItemsInfo {
|
|||
# value.
|
||||
$count_reserves = $restype;
|
||||
}
|
||||
$isth->finish;
|
||||
$ssth->finish;
|
||||
#get branch information.....
|
||||
my $bsth = $dbh->prepare(
|
||||
"SELECT * FROM branches WHERE branchcode = ?
|
||||
|
@ -1388,6 +1390,60 @@ sub GetItemsInfo {
|
|||
}
|
||||
}
|
||||
|
||||
=head2 GetLastAcquisitions
|
||||
|
||||
=over 4
|
||||
|
||||
my $lastacq = GetLastAcquisitions({'branches' => ('branch1','branch2'), 'itemtypes' => ('BK','BD')}, 10);
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
sub GetLastAcquisitions {
|
||||
my ($data,$max) = @_;
|
||||
|
||||
my $itemtype = C4::Context->preference('item-level_itypes') ? 'itype' : 'itemtype';
|
||||
|
||||
my $number_of_branches = @{$data->{branches}};
|
||||
my $number_of_itemtypes = @{$data->{itemtypes}};
|
||||
|
||||
|
||||
my @where = ('WHERE 1 ');
|
||||
$number_of_branches and push @where
|
||||
, 'AND holdingbranch IN ('
|
||||
, join(',', ('?') x $number_of_branches )
|
||||
, ')'
|
||||
;
|
||||
|
||||
$number_of_itemtypes and push @where
|
||||
, "AND $itemtype IN ("
|
||||
, join(',', ('?') x $number_of_itemtypes )
|
||||
, ')'
|
||||
;
|
||||
|
||||
my $query = "SELECT biblio.biblionumber as biblionumber, title, dateaccessioned
|
||||
FROM items RIGHT JOIN biblio ON (items.biblionumber=biblio.biblionumber)
|
||||
RIGHT JOIN biblioitems ON (items.biblioitemnumber=biblioitems.biblioitemnumber)
|
||||
@where
|
||||
GROUP BY biblio.biblionumber
|
||||
ORDER BY dateaccessioned DESC LIMIT $max";
|
||||
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare($query);
|
||||
|
||||
$sth->execute((@{$data->{branches}}, @{$data->{itemtypes}}));
|
||||
|
||||
my @results;
|
||||
while( my $row = $sth->fetchrow_hashref){
|
||||
push @results, {date => $row->{dateaccessioned}
|
||||
, biblionumber => $row->{biblionumber}
|
||||
, title => $row->{title}};
|
||||
}
|
||||
|
||||
return @results;
|
||||
}
|
||||
|
||||
=head2 get_itemnumbers_of
|
||||
|
||||
=over 4
|
||||
|
@ -1946,10 +2002,77 @@ sub _koha_new_item {
|
|||
if ( defined $sth->errstr ) {
|
||||
$error.="ERROR in _koha_new_item $query".$sth->errstr;
|
||||
}
|
||||
$sth->finish();
|
||||
return ( $itemnumber, $error );
|
||||
}
|
||||
|
||||
=head2 MoveItemFromBiblio
|
||||
|
||||
=over 4
|
||||
|
||||
MoveItemFromBiblio($itenumber, $frombiblio, $tobiblio);
|
||||
|
||||
=back
|
||||
|
||||
Moves an item from a biblio to another
|
||||
|
||||
=cut
|
||||
sub MoveItemFromBiblio {
|
||||
my ($itemnumber, $frombiblio, $tobiblio) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $sth = $dbh->prepare("UPDATE items SET biblioitemnumber = ?, biblionumber = ? WHERE itemnumber = ? AND biblionumber = ?");
|
||||
my $return = $sth->execute($tobiblio, $tobiblio, $itemnumber, $frombiblio);
|
||||
if ($return == 1) {
|
||||
my $record = GetMarcBiblio($frombiblio);
|
||||
my $frameworkcode = GetFrameworkCode($frombiblio);
|
||||
ModBiblioMarc($record, $frombiblio, $frameworkcode);
|
||||
|
||||
$record = GetMarcBiblio($tobiblio);
|
||||
$frameworkcode = GetFrameworkCode($frombiblio);
|
||||
ModBiblioMarc($record, $tobiblio, $frameworkcode);
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
=head2 DelItemCheck
|
||||
|
||||
=over 4
|
||||
|
||||
DelItemCheck($dbh, $biblionumber, $itemnumber);
|
||||
|
||||
=back
|
||||
|
||||
Exported function (core API) for deleting an item record in Koha if there no current issue.
|
||||
|
||||
=cut
|
||||
|
||||
sub DelItemCheck {
|
||||
my ( $dbh, $biblionumber, $itemnumber ) = @_;
|
||||
my $error;
|
||||
|
||||
# check that there is no issue on this item before deletion.
|
||||
my $sth=$dbh->prepare("select * from issues i where i.itemnumber=?");
|
||||
$sth->execute($itemnumber);
|
||||
|
||||
my $onloan=$sth->fetchrow;
|
||||
|
||||
if ($onloan){
|
||||
$error = "book_on_loan"
|
||||
}else{
|
||||
# check it doesnt have a waiting reserve
|
||||
$sth=$dbh->prepare("SELECT * FROM reserves WHERE found = 'W' AND itemnumber = ?");
|
||||
$sth->execute($itemnumber);
|
||||
my $reserve=$sth->fetchrow;
|
||||
if ($reserve){
|
||||
$error = "book_reserved";
|
||||
}else{
|
||||
DelItem($dbh, $biblionumber, $itemnumber);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return $error;
|
||||
}
|
||||
|
||||
=head2 _koha_modify_item
|
||||
|
||||
=over 4
|
||||
|
@ -1983,7 +2106,6 @@ sub _koha_modify_item {
|
|||
$error.="ERROR in _koha_modify_item $query".$dbh->errstr;
|
||||
warn $error;
|
||||
}
|
||||
$sth->finish();
|
||||
return ($item->{'itemnumber'},$error);
|
||||
}
|
||||
|
||||
|
@ -2006,7 +2128,6 @@ sub _koha_delete_item {
|
|||
my $sth = $dbh->prepare("SELECT * FROM items WHERE itemnumber=?");
|
||||
$sth->execute($itemnum);
|
||||
my $data = $sth->fetchrow_hashref();
|
||||
$sth->finish();
|
||||
my $query = "INSERT INTO deleteditems SET ";
|
||||
my @bind = ();
|
||||
foreach my $key ( keys %$data ) {
|
||||
|
@ -2016,12 +2137,10 @@ sub _koha_delete_item {
|
|||
$query =~ s/\,$//;
|
||||
$sth = $dbh->prepare($query);
|
||||
$sth->execute(@bind);
|
||||
$sth->finish();
|
||||
|
||||
# delete from items table
|
||||
$sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?");
|
||||
$sth->execute($itemnum);
|
||||
$sth->finish();
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue