Bugzilla – Attachment 31087 Details for
Bug 8836
Resurrect Rotating Collections
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 8836 - Resurrect Rotating Collections
Bug-8836---Resurrect-Rotating-Collections.patch (text/plain), 44.23 KB, created by
Kyle M Hall (khall)
on 2014-08-22 12:01:25 UTC
(
hide
)
Description:
Bug 8836 - Resurrect Rotating Collections
Filename:
MIME Type:
Creator:
Kyle M Hall (khall)
Created:
2014-08-22 12:01:25 UTC
Size:
44.23 KB
patch
obsolete
>From ca97bf7c9c683d38ec3e155e604cb3a05c333500 Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Fri, 15 Aug 2014 16:46:03 +0300 >Subject: [PATCH] Bug 8836 - Resurrect Rotating Collections > >Test Plan: >In "Tools" -> "Rotating Collections" -> "Add/Remove items": >When adding item barcodes to the collection, the input field > <input type="text" id="barcode" name="barcode"> >should become active >automatically so it is easy to add multiple barcodes rapidly without touching the >mouse or keyboard. >Enter-press is dealt by the barcode reader so automatic form submittal should be handled >by the barcode reader. > >In "Rotating collections" -> "Transfer Collection": >When the collection is initially transferred, items are set to trasfer correctly. >When the collection is transferred while items are still being transferred, the transfer >destination library doesn't change from the original one. >The holding library changes for all items in the collection to the destination library on >retransfers as well. >This is tricky if a user accidentally places the wrong destination. >When I try to checkin these items to their new retransfer location, I get the following messages: >-"This item is part of a rotating collection and needs to be transferred to <original transfer destination>" >-"Please return Valkoinen ihmissyj / to <original transfer destination>" >-"Print slip or Cancel transfer" > >When I checkin a Item to a arbitrary branch, I get the following messages: >"This item is part of a rotating collection and needs to be transferred to <retransfer destination>" >"Please return Valkoinen ihmissyj / to <original trasfer destination>" > >Bug 8836 - Resurrect Rotating Collections - QA Followup > >Bug 8836 - Resurrect Rotating Collections - Followup 2 - Perltidy rotating collections scripts > >Bug 8836 - Resurrect Rotating Collections - Followup 3 > >* Fix bad TT Tag >* Fix bad sql query >* Fix capitalization ( HTML4 ) >* Allow a rotating collection's location to keep AutomaticItemReturn > from sending it back to the branch of origin >* Fix bad query > >Bug 8836 - Resurrect Rotating Collections - Followup 4 - Autofocus on barcode field > >Bug 8836 - Resurrect Rotating Collections - Followup 5 - Don't transfer issued and waiting items > >Items in a rotating collection are automatcially transferred when a >collection is transferred. This is a problem for currently checked out >items and items on hold marked as "Waiting". > >This patch resolves this issue by skipping the transfer for those items. >When the items are then returned, the librarian will be alerted to >transfer the item to the library currently holding that rotating >collection. > >Bug 8836 - Resurrect Rotating Collections - Followup 5 - Link collections.colBranchcode to branches.branchcode > >Signed-off-by: jmbroust <jean-manuel.broust@univ-lyon2.fr> >--- > C4/Circulation.pm | 2 + > C4/RotatingCollections.pm | 466 ++++++++++--------- > circ/returns.pl | 24 +- > installer/data/mysql/kohastructure.sql | 8 +- > installer/data/mysql/updatedatabase.pl | 16 + > .../intranet-tmpl/prog/en/modules/circ/returns.tt | 2 +- > .../en/modules/rotating_collections/addItems.tt | 7 + > .../rotating_collections/editCollections.tt | 10 +- > .../prog/en/modules/tools/tools-home.tt | 2 - > rotating_collections/addItems.pl | 132 +++--- > rotating_collections/editCollections.pl | 149 ++++--- > rotating_collections/rotatingCollections.pl | 38 +- > rotating_collections/transferCollection.pl | 84 ++-- > 13 files changed, 507 insertions(+), 433 deletions(-) > >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index dc7334a..eb4ffdd 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -42,6 +42,7 @@ use C4::Koha qw( > GetKohaAuthorisedValueLib > ); > use C4::Overdues qw(CalcFine UpdateFine); >+use C4::RotatingCollections qw(GetCollectionItemBranches); > use Algorithm::CheckDigits; > > use Data::Dumper; >@@ -2006,6 +2007,7 @@ sub AddReturn { > $messages->{'NeedsTransfer'} = 1; # TODO: instead of 1, specify branchcode that the transfer SHOULD go to, $item->{homebranch} > } > } >+ > return ( $doreturn, $messages, $issue, $borrower ); > } > >diff --git a/C4/RotatingCollections.pm b/C4/RotatingCollections.pm >index d6fad87..5a63cd8 100644 >--- a/C4/RotatingCollections.pm >+++ b/C4/RotatingCollections.pm >@@ -1,9 +1,9 @@ > package C4::RotatingCollections; > >-# $Id: RotatingCollections.pm,v 0.1 2007/04/20 kylemhall >+# $Id: RotatingCollections.pm,v 0.1 2007/04/20 kylemhall > > # This package is inteded to keep track of what library >-# Items of a certain collection should be at. >+# Items of a certain collection should be at. > > # Copyright 2007 Kyle Hall > # >@@ -22,13 +22,11 @@ package C4::RotatingCollections; > # with Koha; if not, write to the Free Software Foundation, Inc., > # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > >-use strict; >-#use warnings; FIXME - Bug 2505 >- >-require Exporter; >+use Modern::Perl; > > use C4::Context; > use C4::Circulation; >+use C4::Reserves qw(GetReserveStatus); > > use DBI; > >@@ -47,23 +45,26 @@ C4::RotatingCollections - Functions for managing rotating collections > > =cut > >-@ISA = qw( Exporter ); >-@EXPORT = qw( >- CreateCollection >- UpdateCollection >- DeleteCollection >- >- GetItemsInCollection >+BEGIN { >+ require Exporter; >+ @ISA = qw( Exporter ); >+ @EXPORT = qw( >+ CreateCollection >+ UpdateCollection >+ DeleteCollection >+ >+ GetItemsInCollection >+ >+ GetCollection >+ GetCollections > >- GetCollection >- GetCollections >- >- AddItemToCollection >- RemoveItemFromCollection >- TransferCollection >+ AddItemToCollection >+ RemoveItemFromCollection >+ TransferCollection > >- GetCollectionItemBranches >-); >+ GetCollectionItemBranches >+ ); >+} > > =head2 CreateCollection > ( $success, $errorcode, $errormessage ) = CreateCollection( $title, $description ); >@@ -81,27 +82,29 @@ C4::RotatingCollections - Functions for managing rotating collections > =cut > > sub CreateCollection { >- my ( $title, $description ) = @_; >+ my ( $title, $description ) = @_; > >- ## Check for all neccessary parameters >- if ( ! $title ) { >- return ( 0, 1, "No Title Given" ); >- } >- if ( ! $description ) { >- return ( 0, 2, "No Description Given" ); >- } >+ ## Check for all neccessary parameters >+ if ( !$title ) { >+ return ( 0, 1, "No Title Given" ); >+ } >+ if ( !$description ) { >+ return ( 0, 2, "No Description Given" ); >+ } > >- my $success = 1; >+ my $success = 1; > >- my $dbh = C4::Context->dbh; >+ my $dbh = C4::Context->dbh; > >- my $sth; >- $sth = $dbh->prepare("INSERT INTO collections ( colId, colTitle, colDesc ) >- VALUES ( NULL, ?, ? )"); >- $sth->execute( $title, $description ) or return ( 0, 3, $sth->errstr() ); >+ my $sth; >+ $sth = $dbh->prepare( >+ "INSERT INTO collections ( colId, colTitle, colDesc ) >+ VALUES ( NULL, ?, ? )" >+ ); >+ $sth->execute( $title, $description ) or return ( 0, 3, $sth->errstr() ); >+ >+ return 1; > >- return 1; >- > } > > =head2 UpdateCollection >@@ -123,30 +126,33 @@ Updates a collection > =cut > > sub UpdateCollection { >- my ( $colId, $title, $description ) = @_; >- >- ## Check for all neccessary parameters >- if ( ! $colId ) { >- return ( 0, 1, "No Id Given" ); >- } >- if ( ! $title ) { >- return ( 0, 2, "No Title Given" ); >- } >- if ( ! $description ) { >- return ( 0, 3, "No Description Given" ); >- } >- >- my $dbh = C4::Context->dbh; >- >- my $sth; >- $sth = $dbh->prepare("UPDATE collections >+ my ( $colId, $title, $description ) = @_; >+ >+ ## Check for all neccessary parameters >+ if ( !$colId ) { >+ return ( 0, 1, "No Id Given" ); >+ } >+ if ( !$title ) { >+ return ( 0, 2, "No Title Given" ); >+ } >+ if ( !$description ) { >+ return ( 0, 3, "No Description Given" ); >+ } >+ >+ my $dbh = C4::Context->dbh; >+ >+ my $sth; >+ $sth = $dbh->prepare( >+ "UPDATE collections > SET > colTitle = ?, colDesc = ? >- WHERE colId = ?"); >- $sth->execute( $title, $description, $colId ) or return ( 0, 4, $sth->errstr() ); >- >- return 1; >- >+ WHERE colId = ?" >+ ); >+ $sth->execute( $title, $description, $colId ) >+ or return ( 0, 4, $sth->errstr() ); >+ >+ return 1; >+ > } > > =head2 DeleteCollection >@@ -165,21 +171,21 @@ sub UpdateCollection { > =cut > > sub DeleteCollection { >- my ( $colId ) = @_; >+ my ($colId) = @_; >+ >+ ## Paramter check >+ if ( !$colId ) { >+ return ( 0, 1, "No Collection Id Given" ); >+ } > >- ## Paramter check >- if ( ! $colId ) { >- return ( 0, 1, "No Collection Id Given" );; >- } >- >- my $dbh = C4::Context->dbh; >+ my $dbh = C4::Context->dbh; > >- my $sth; >+ my $sth; > >- $sth = $dbh->prepare("DELETE FROM collections WHERE colId = ?"); >- $sth->execute( $colId ) or return ( 0, 4, $sth->errstr() ); >+ $sth = $dbh->prepare("DELETE FROM collections WHERE colId = ?"); >+ $sth->execute($colId) or return ( 0, 4, $sth->errstr() ); > >- return 1; >+ return 1; > } > > =head2 GetCollections >@@ -198,17 +204,17 @@ sub DeleteCollection { > > sub GetCollections { > >- my $dbh = C4::Context->dbh; >- >- my $sth = $dbh->prepare("SELECT * FROM collections"); >- $sth->execute() or return ( 1, $sth->errstr() ); >- >- my @results; >- while ( my $row = $sth->fetchrow_hashref ) { >- push( @results , $row ); >- } >- >- return \@results; >+ my $dbh = C4::Context->dbh; >+ >+ my $sth = $dbh->prepare("SELECT * FROM collections"); >+ $sth->execute() or return ( 1, $sth->errstr() ); >+ >+ my @results; >+ while ( my $row = $sth->fetchrow_hashref ) { >+ push( @results, $row ); >+ } >+ >+ return \@results; > } > > =head2 GetItemsInCollection >@@ -229,16 +235,17 @@ sub GetCollections { > =cut > > sub GetItemsInCollection { >- my ( $colId ) = @_; >+ my ($colId) = @_; >+ >+ ## Paramter check >+ if ( !$colId ) { >+ return ( 0, 0, 1, "No Collection Id Given" ); >+ } > >- ## Paramter check >- if ( ! $colId ) { >- return ( 0, 0, 1, "No Collection Id Given" );; >- } >+ my $dbh = C4::Context->dbh; > >- my $dbh = C4::Context->dbh; >- >- my $sth = $dbh->prepare("SELECT >+ my $sth = $dbh->prepare( >+ "SELECT > biblio.title, > items.itemcallnumber, > items.barcode >@@ -246,15 +253,16 @@ sub GetItemsInCollection { > WHERE collections.colId = collections_tracking.colId > AND collections_tracking.itemnumber = items.itemnumber > AND items.biblionumber = biblio.biblionumber >- AND collections.colId = ? ORDER BY biblio.title"); >- $sth->execute( $colId ) or return ( 0, 0, 2, $sth->errstr() ); >- >- my @results; >- while ( my $row = $sth->fetchrow_hashref ) { >- push( @results , $row ); >- } >- >- return \@results; >+ AND collections.colId = ? ORDER BY biblio.title" >+ ); >+ $sth->execute($colId) or return ( 0, 0, 2, $sth->errstr() ); >+ >+ my @results; >+ while ( my $row = $sth->fetchrow_hashref ) { >+ push( @results, $row ); >+ } >+ >+ return \@results; > } > > =head2 GetCollection >@@ -271,23 +279,21 @@ Returns information about a collection > =cut > > sub GetCollection { >- my ( $colId ) = @_; >- >- my $dbh = C4::Context->dbh; >- >- my ( $sth, @results ); >- $sth = $dbh->prepare("SELECT * FROM collections WHERE colId = ?"); >- $sth->execute( $colId ) or return 0; >- >- my $row = $sth->fetchrow_hashref; >- >- return ( >- $$row{'colId'}, >- $$row{'colTitle'}, >- $$row{'colDesc'}, >- $$row{'colBranchcode'} >- ); >- >+ my ($colId) = @_; >+ >+ my $dbh = C4::Context->dbh; >+ >+ my ( $sth, @results ); >+ $sth = $dbh->prepare("SELECT * FROM collections WHERE colId = ?"); >+ $sth->execute($colId) or return 0; >+ >+ my $row = $sth->fetchrow_hashref; >+ >+ return ( >+ $$row{'colId'}, $$row{'colTitle'}, >+ $$row{'colDesc'}, $$row{'colBranchcode'} >+ ); >+ > } > > =head2 AddItemToCollection >@@ -307,31 +313,36 @@ Adds an item to a rotating collection. > =cut > > sub AddItemToCollection { >- my ( $colId, $itemnumber ) = @_; >- >- ## Check for all neccessary parameters >- if ( ! $colId ) { >- return ( 0, 1, "No Collection Given" ); >- } >- if ( ! $itemnumber ) { >- return ( 0, 2, "No Itemnumber Given" ); >- } >- >- if ( isItemInThisCollection( $itemnumber, $colId ) ) { >- return ( 0, 2, "Item is already in the collection!" ); >- } elsif ( isItemInAnyCollection( $itemnumber ) ) { >- return ( 0, 3, "Item is already in a different collection!" ); >- } >- >- my $dbh = C4::Context->dbh; >- >- my $sth; >- $sth = $dbh->prepare("INSERT INTO collections_tracking ( collections_tracking_id, colId, itemnumber ) >- VALUES ( NULL, ?, ? )"); >- $sth->execute( $colId, $itemnumber ) or return ( 0, 3, $sth->errstr() ); >- >- return 1; >- >+ my ( $colId, $itemnumber ) = @_; >+ >+ ## Check for all neccessary parameters >+ if ( !$colId ) { >+ return ( 0, 1, "No Collection Given" ); >+ } >+ if ( !$itemnumber ) { >+ return ( 0, 2, "No Itemnumber Given" ); >+ } >+ >+ if ( isItemInThisCollection( $itemnumber, $colId ) ) { >+ return ( 0, 2, "Item is already in the collection!" ); >+ } >+ elsif ( isItemInAnyCollection($itemnumber) ) { >+ return ( 0, 3, "Item is already in a different collection!" ); >+ } >+ >+ my $dbh = C4::Context->dbh; >+ >+ my $sth; >+ $sth = $dbh->prepare(" >+ INSERT INTO collections_tracking ( >+ colId, >+ itemnumber >+ ) VALUES ( ?, ? ) >+ "); >+ $sth->execute( $colId, $itemnumber ) or return ( 0, 3, $sth->errstr() ); >+ >+ return 1; >+ > } > > =head2 RemoveItemFromCollection >@@ -352,25 +363,27 @@ Removes an item to a collection > =cut > > sub RemoveItemFromCollection { >- my ( $colId, $itemnumber ) = @_; >+ my ( $colId, $itemnumber ) = @_; >+ >+ ## Check for all neccessary parameters >+ if ( !$itemnumber ) { >+ return ( 0, 2, "No Itemnumber Given" ); >+ } > >- ## Check for all neccessary parameters >- if ( ! $itemnumber ) { >- return ( 0, 2, "No Itemnumber Given" ); >- } >- >- if ( ! isItemInThisCollection( $itemnumber, $colId ) ) { >- return ( 0, 2, "Item is not in the collection!" ); >- } >+ if ( !isItemInThisCollection( $itemnumber, $colId ) ) { >+ return ( 0, 2, "Item is not in the collection!" ); >+ } > >- my $dbh = C4::Context->dbh; >+ my $dbh = C4::Context->dbh; > >- my $sth; >- $sth = $dbh->prepare("DELETE FROM collections_tracking >- WHERE itemnumber = ?"); >- $sth->execute( $itemnumber ) or return ( 0, 3, $sth->errstr() ); >+ my $sth; >+ $sth = $dbh->prepare( >+ "DELETE FROM collections_tracking >+ WHERE itemnumber = ?" >+ ); >+ $sth->execute($itemnumber) or return ( 0, 3, $sth->errstr() ); > >- return 1; >+ return 1; > } > > =head2 TransferCollection >@@ -391,36 +404,44 @@ Transfers a collection to another branch > =cut > > sub TransferCollection { >- my ( $colId, $colBranchcode ) = @_; >+ my ( $colId, $colBranchcode ) = @_; > >- ## Check for all neccessary parameters >- if ( ! $colId ) { >- return ( 0, 1, "No Id Given" ); >- } >- if ( ! $colBranchcode ) { >- return ( 0, 2, "No Branchcode Given" ); >- } >+ ## Check for all neccessary parameters >+ if ( !$colId ) { >+ return ( 0, 1, "No Id Given" ); >+ } >+ if ( !$colBranchcode ) { >+ return ( 0, 2, "No Branchcode Given" ); >+ } > >- my $dbh = C4::Context->dbh; >+ my $dbh = C4::Context->dbh; > >- my $sth; >- $sth = $dbh->prepare("UPDATE collections >+ my $sth; >+ $sth = $dbh->prepare( >+ "UPDATE collections > SET > colBranchcode = ? >- WHERE colId = ?"); >- $sth->execute( $colBranchcode, $colId ) or return ( 0, 4, $sth->errstr() ); >- >- $sth = $dbh->prepare("SELECT barcode FROM items, collections_tracking >- WHERE items.itemnumber = collections_tracking.itemnumber >- AND collections_tracking.colId = ?"); >- $sth->execute( $colId ) or return ( 0, 4, $sth->errstr ); >- my @results; >- while ( my $item = $sth->fetchrow_hashref ) { >- my ( $dotransfer, $messages, $iteminformation ) = transferbook( $colBranchcode, $item->{'barcode'}, my $ignore_reserves = 1); >- } >- >- return 1; >- >+ WHERE colId = ?" >+ ); >+ $sth->execute( $colBranchcode, $colId ) or return ( 0, 4, $sth->errstr() ); >+ >+ $sth = $dbh->prepare(q{ >+ SELECT items.itemnumber, items.barcode FROM collections_tracking >+ LEFT JOIN items ON collections_tracking.itemnumber = items.itemnumber >+ LEFT JOIN issues ON items.itemnumber = issues.itemnumber >+ WHERE issues.borrowernumber IS NULL >+ AND collections_tracking.colId = ? >+ }); >+ $sth->execute($colId) or return ( 0, 4, $sth->errstr ); >+ my @results; >+ while ( my $item = $sth->fetchrow_hashref ) { >+ transferbook( $colBranchcode, $item->{barcode}, >+ my $ignore_reserves = 1 ) >+ unless ( GetReserveStatus( $item->{itemnumber} ) eq "Waiting" ); >+ } >+ >+ return 1; >+ > } > > =head2 GetCollectionItemBranches >@@ -430,27 +451,26 @@ sub TransferCollection { > =cut > > sub GetCollectionItemBranches { >- my ( $itemnumber ) = @_; >+ my ($itemnumber) = @_; > >- if ( ! $itemnumber ) { >- return; >- } >+ if ( !$itemnumber ) { >+ return; >+ } > >- my $dbh = C4::Context->dbh; >+ my $dbh = C4::Context->dbh; > >- my ( $sth, @results ); >- $sth = $dbh->prepare("SELECT holdingbranch, colBranchcode FROM items, collections, collections_tracking >+ my ( $sth, @results ); >+ $sth = $dbh->prepare( >+"SELECT holdingbranch, colBranchcode FROM items, collections, collections_tracking > WHERE items.itemnumber = collections_tracking.itemnumber > AND collections.colId = collections_tracking.colId >- AND items.itemnumber = ?"); >- $sth->execute( $itemnumber ); >- >- my $row = $sth->fetchrow_hashref; >- >- return ( >- $$row{'holdingbranch'}, >- $$row{'colBranchcode'}, >- ); >+ AND items.itemnumber = ?" >+ ); >+ $sth->execute($itemnumber); >+ >+ my $row = $sth->fetchrow_hashref; >+ >+ return ( $$row{'holdingbranch'}, $$row{'colBranchcode'}, ); > } > > =head2 isItemInThisCollection >@@ -460,16 +480,18 @@ sub GetCollectionItemBranches { > =cut > > sub isItemInThisCollection { >- my ( $itemnumber, $colId ) = @_; >- >- my $dbh = C4::Context->dbh; >- >- my $sth = $dbh->prepare("SELECT COUNT(*) as inCollection FROM collections_tracking WHERE itemnumber = ? AND colId = ?"); >- $sth->execute( $itemnumber, $colId ) or return( 0 ); >- >- my $row = $sth->fetchrow_hashref; >- >- return $$row{'inCollection'}; >+ my ( $itemnumber, $colId ) = @_; >+ >+ my $dbh = C4::Context->dbh; >+ >+ my $sth = $dbh->prepare( >+"SELECT COUNT(*) as inCollection FROM collections_tracking WHERE itemnumber = ? AND colId = ?" >+ ); >+ $sth->execute( $itemnumber, $colId ) or return (0); >+ >+ my $row = $sth->fetchrow_hashref; >+ >+ return $$row{'inCollection'}; > } > > =head2 isItemInAnyCollection >@@ -479,21 +501,23 @@ $inCollection = isItemInAnyCollection( $itemnumber ); > =cut > > sub isItemInAnyCollection { >- my ( $itemnumber ) = @_; >- >- my $dbh = C4::Context->dbh; >- >- my $sth = $dbh->prepare("SELECT itemnumber FROM collections_tracking WHERE itemnumber = ?"); >- $sth->execute( $itemnumber ) or return( 0 ); >- >- my $row = $sth->fetchrow_hashref; >- >- $itemnumber = $row->{itemnumber}; >- if ( $itemnumber ) { >- return 1; >- } else { >- return 0; >- } >+ my ($itemnumber) = @_; >+ >+ my $dbh = C4::Context->dbh; >+ >+ my $sth = $dbh->prepare( >+ "SELECT itemnumber FROM collections_tracking WHERE itemnumber = ?"); >+ $sth->execute($itemnumber) or return (0); >+ >+ my $row = $sth->fetchrow_hashref; >+ >+ $itemnumber = $row->{itemnumber}; >+ if ($itemnumber) { >+ return 1; >+ } >+ else { >+ return 0; >+ } > } > > 1; >diff --git a/circ/returns.pl b/circ/returns.pl >index d99f58c..8a17a10 100755 >--- a/circ/returns.pl >+++ b/circ/returns.pl >@@ -600,20 +600,16 @@ $template->param( > BlockReturnOfWithdrawnItems => C4::Context->preference("BlockReturnOfWithdrawnItems"), > ); > >-### Comment out rotating collections for now to allow it a little more time to bake >-### for 3.4; in particular, must ensure that it doesn't fight with transfers required >-### to fill hold requests >-### -- Galen Charlton 2010-10-06 >-#my $itemnumber = GetItemnumberFromBarcode( $query->param('barcode') ); >-#if ( $itemnumber ) { >-# my ( $holdingBranch, $collectionBranch ) = GetCollectionItemBranches( $itemnumber ); >-# if ( ! ( $holdingBranch eq $collectionBranch ) ) { >-# $template->param( >-# collectionItemNeedsTransferred => 1, >-# collectionBranch => GetBranchName($collectionBranch), >-# ); >-# } >-#} >+my $itemnumber = GetItemnumberFromBarcode( $query->param('barcode') ); >+if ( $itemnumber ) { >+ my ( $holdingBranch, $collectionBranch ) = GetCollectionItemBranches( $itemnumber ); >+ if ( ! ( $holdingBranch eq $collectionBranch ) ) { >+ $template->param( >+ collectionItemNeedsTransferred => 1, >+ collectionBranch => GetBranchName($collectionBranch), >+ ); >+ } >+} > > # actually print the page! > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql >index b46dc6a..c21ac83 100644 >--- a/installer/data/mysql/kohastructure.sql >+++ b/installer/data/mysql/kohastructure.sql >@@ -480,11 +480,17 @@ CREATE TABLE collections ( > colId integer(11) NOT NULL auto_increment, > colTitle varchar(100) NOT NULL DEFAULT '', > colDesc text NOT NULL, >- colBranchcode varchar(4) DEFAULT NULL comment 'branchcode for branch where item should be held.', >+ colBranchcode varchar(10) DEFAULT NULL, -- 'branchcode for branch where item should be held.' > PRIMARY KEY (colId) > ) ENGINE=InnoDB DEFAULT CHARACTER SET utf8; > > -- >+-- Constraints for table `collections` >+-- >+ALTER TABLE `collections` >+ ADD CONSTRAINT `collections_ibfk_1` FOREIGN KEY (`colBranchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE; >+ >+-- > -- Table: collections_tracking > -- > DROP TABLE IF EXISTS collections_tracking; >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index de77bf3..078ba46 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -8613,6 +8613,22 @@ if ( CheckVersion($DBversion) ) { > SetVersion($DBversion); > } > >+$DBversion = "3.17.00.XXX"; >+if ( CheckVersion($DBversion) ) { >+ $dbh->do(q{ >+ ALTER TABLE collections CHANGE colBranchcode colBranchcode VARCHAR( 10 ) NULL DEFAULT NULL >+ }); >+ $dbh->do(q{ >+ ALTER TABLE collections ADD INDEX ( colBranchcode ) >+ }); >+ $dbh->do(q{ >+ ALTER TABLE collections >+ ADD CONSTRAINT collections_ibfk_1 FOREIGN KEY (colBranchcode) REFERENCES branches (branchcode) ON DELETE CASCADE ON UPDATE CASCADE >+ }); >+ print "Upgrade to $DBversion done (Bug 8836 - Resurrect Rotating Collections)\n"; >+ SetVersion($DBversion); >+} >+ > =head1 FUNCTIONS > > =head2 TableExists($table) >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt >index 068f710..8a12b8b 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt >@@ -109,7 +109,7 @@ $(document).ready(function () { > [% END %] > > [% IF ( collectionItemNeedsTransferred ) %] >- <div id="rotating-collection" class="dialog message">This item is part of a Rotating Collection and needs to be Transferred to [% collectionBranch %]</div> >+ <div id="rotating-collection" class="dialog message">This item is part of a rotating collection and needs to be transferred to [% collectionBranch %]</div> > [% END %] > > <!-- Patron has fines --> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/addItems.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/addItems.tt >index 6ec945a..195b324 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/addItems.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/addItems.tt >@@ -1,6 +1,13 @@ > [% INCLUDE 'doc-head-open.inc' %] > <title>Koha › Tools › Rotating collections › Add/Remove items</title> > [% INCLUDE 'doc-head-close.inc' %] >+<script type="text/javascript"> >+ //<![CDATA[ >+ $( document ).ready(function() { >+ $("#barcode").focus(); >+ }); >+ //]]> >+</script> > </head> > <body> > [% INCLUDE 'header.inc' %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/editCollections.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/editCollections.tt >index 4917ff2..e1bb2a8 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/editCollections.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/rotating_collections/editCollections.tt >@@ -44,13 +44,16 @@ > <div> > [% IF ( collectionsLoop ) %] > <table> >+ <thead> > <tr> > <th>Title</th> > <th>Description</th> > <th>Holding library</th> >- <td></td> >- <td></td> >+ <th> </th> >+ <th> </th> > </tr> >+ <thead> >+ <tbody> > [% FOREACH collectionsLoo IN collectionsLoop %] > <tr> > <td>[% collectionsLoo.colTitle %]</td> >@@ -60,6 +63,7 @@ > <td><a href="editCollections.pl?action=delete&colId=[% collectionsLoo.colId %]">Delete</a></td> > </tr> > [% END %] >+ </tbody> > </table> > [% ELSE %] > There are no collections currently defined. >@@ -99,7 +103,7 @@ > <label for="description">Description: </label> > </td> > <td> >- [% IF (editColDescription ) %]<input type="text" size="50" name="description" value="[ editColDescription %]" /> >+ [% IF (editColDescription ) %]<input type="text" size="50" name="description" value="[% editColDescription %]" /> > [% ELSE %]<input type="text" size="50" name="description" />[% END %] > </td> > </tr> >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt >index 4ab38c9..590cb47 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt >@@ -142,12 +142,10 @@ > <dd>Enter a barcode to generate a printable spine label. For use with dedicated label printers</dd> > [% END %] > >-<!-- > [% IF ( CAN_user_tools_rotating_collections ) %] > <dt><a href="/cgi-bin/koha/rotating_collections/rotatingCollections.pl">Rotating collections</a></dt> > <dd>Manage Rotating Collections</dd> > [% END %] >---> > > [% IF ( CAN_user_tools_marc_modification_templates ) %] > <dt><a href="/cgi-bin/koha/tools/marc_modification_templates.pl">MARC modification templates</a></dt> >diff --git a/rotating_collections/addItems.pl b/rotating_collections/addItems.pl >index 36eac4c..9ef4f39 100755 >--- a/rotating_collections/addItems.pl >+++ b/rotating_collections/addItems.pl >@@ -16,9 +16,7 @@ > # Suite 330, Boston, MA 02111-1307 USA > # > >-use strict; >-#use warnings; FIXME - Bug 2505 >-require Exporter; >+use Modern::Perl; > > use C4::Output; > use C4::Auth; >@@ -29,73 +27,83 @@ use C4::Items; > use CGI; > > my $query = new CGI; >-my ($template, $loggedinuser, $cookie) >- = get_template_and_user({template_name => "rotating_collections/addItems.tt", >- query => $query, >- type => "intranet", >- authnotrequired => 0, >- flagsrequired => { tools => 'rotating_collections' }, >- debug => 1, >- }); > >-if ( $query->param('action') eq 'addItem' ) { >- ## Add the given item to the collection >- my $colId = $query->param('colId'); >- my $barcode = $query->param('barcode'); >- my $removeItem = $query->param('removeItem'); >- my $itemnumber = GetItemnumberFromBarcode( $barcode ); >- >- my ( $success, $errorCode, $errorMessage ); >- >- if ( ! $removeItem ) { >- ( $success, $errorCode, $errorMessage ) = AddItemToCollection( $colId, $itemnumber ); >- >- $template->param( >- previousActionAdd => 1, >- addedBarcode => $barcode, >- ); >- >- if ( $success ) { >- $template->param( addSuccess => 1 ); >- } else { >- $template->param( addFailure => 1 ); >- $template->param( failureMessage => $errorMessage ); >+my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >+ { >+ template_name => "rotating_collections/addItems.tmpl", >+ query => $query, >+ type => "intranet", >+ authnotrequired => 0, >+ flagsrequired => { tools => 'rotating_collections' }, >+ debug => 1, > } >- } else { >- ## Remove the given item from the collection >- ( $success, $errorCode, $errorMessage ) = RemoveItemFromCollection( $colId, $itemnumber ); >- >- $template->param( >- previousActionRemove => 1, >- removedBarcode => $barcode, >- removeChecked => 1, >- ); >- >- if ( $success ) { >- $template->param( removeSuccess => 1 ); >- } else { >- $template->param( removeFailure => 1 ); >- $template->param( failureMessage => $errorMessage ); >+); >+ >+if ( $query->param('action') eq 'addItem' ) { >+ ## Add the given item to the collection >+ my $colId = $query->param('colId'); >+ my $barcode = $query->param('barcode'); >+ my $removeItem = $query->param('removeItem'); >+ my $itemnumber = GetItemnumberFromBarcode($barcode); >+ >+ my ( $success, $errorCode, $errorMessage ); >+ >+ if ( !$removeItem ) { >+ ( $success, $errorCode, $errorMessage ) = >+ AddItemToCollection( $colId, $itemnumber ); >+ >+ $template->param( >+ previousActionAdd => 1, >+ addedBarcode => $barcode, >+ ); >+ >+ if ($success) { >+ $template->param( addSuccess => 1 ); >+ } >+ else { >+ $template->param( addFailure => 1 ); >+ $template->param( failureMessage => $errorMessage ); >+ } > } >+ else { >+ ## Remove the given item from the collection >+ ( $success, $errorCode, $errorMessage ) = >+ RemoveItemFromCollection( $colId, $itemnumber ); >+ >+ $template->param( >+ previousActionRemove => 1, >+ removedBarcode => $barcode, >+ removeChecked => 1, >+ ); >+ >+ if ($success) { >+ $template->param( removeSuccess => 1 ); >+ } >+ else { >+ $template->param( removeFailure => 1 ); >+ $template->param( failureMessage => $errorMessage ); >+ } > >- } >+ } > } > >-my ( $colId, $colTitle, $colDescription, $colBranchcode ) = GetCollection( $query->param('colId') ); >-my $collectionItems = GetItemsInCollection( $colId ); >-if ( $collectionItems ) { >- $template->param( collectionItemsLoop => $collectionItems ); >+my ( $colId, $colTitle, $colDescription, $colBranchcode ) = >+ GetCollection( $query->param('colId') ); >+my $collectionItems = GetItemsInCollection($colId); >+if ($collectionItems) { >+ $template->param( collectionItemsLoop => $collectionItems ); > } > > $template->param( >- intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), >- intranetstylesheet => C4::Context->preference("intranetstylesheet"), >- IntranetNav => C4::Context->preference("IntranetNav"), >- >- colId => $colId, >- colTitle => $colTitle, >- colDescription => $colDescription, >- colBranchcode => $colBranchcode, >- ); >+ intranetcolorstylesheet => >+ C4::Context->preference("intranetcolorstylesheet"), >+ intranetstylesheet => C4::Context->preference("intranetstylesheet"), >+ IntranetNav => C4::Context->preference("IntranetNav"), >+ >+ colId => $colId, >+ colTitle => $colTitle, >+ colDescription => $colDescription, >+ colBranchcode => $colBranchcode, >+); > > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/rotating_collections/editCollections.pl b/rotating_collections/editCollections.pl >index 5b60047..aa46f44 100755 >--- a/rotating_collections/editCollections.pl >+++ b/rotating_collections/editCollections.pl >@@ -15,9 +15,8 @@ > # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, > # Suite 330, Boston, MA 02111-1307 USA > # >-use strict; >-#use warnings; FIXME - Bug 2505 >-require Exporter; >+ >+use Modern::Perl; > > use CGI; > >@@ -28,92 +27,100 @@ use C4::Context; > use C4::RotatingCollections; > > my $query = new CGI; >-my ($template, $loggedinuser, $cookie) >- = get_template_and_user({template_name => "rotating_collections/editCollections.tt", >- query => $query, >- type => "intranet", >- authnotrequired => 0, >- flagsrequired => { tools => 'rotating_collections' }, >- debug => 1, >- }); >+ >+my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >+ { >+ template_name => "rotating_collections/editCollections.tmpl", >+ query => $query, >+ type => "intranet", >+ authnotrequired => 0, >+ flagsrequired => { tools => 'rotating_collections' }, >+ debug => 1, >+ } >+); > > # Create new Collection > if ( $query->param('action') eq 'create' ) { >- my $title = $query->param('title'); >- my $description = $query->param('description'); >- >- my ( $createdSuccessfully, $errorCode, $errorMessage ) = CreateCollection( $title, $description ); >- >- $template->param( >- previousActionCreate => 1, >- createdTitle => $title, >- ); >- >- if ( $createdSuccessfully ) { >- $template->param( createSuccess => 1 ); >- } else { >- $template->param( createFailure => 1 ); >- $template->param( failureMessage => $errorMessage ); >- } >+ my $title = $query->param('title'); >+ my $description = $query->param('description'); >+ >+ my ( $createdSuccessfully, $errorCode, $errorMessage ) = >+ CreateCollection( $title, $description ); >+ >+ $template->param( >+ previousActionCreate => 1, >+ createdTitle => $title, >+ ); >+ >+ if ($createdSuccessfully) { >+ $template->param( createSuccess => 1 ); >+ } >+ else { >+ $template->param( createFailure => 1 ); >+ $template->param( failureMessage => $errorMessage ); >+ } > } > > ## Delete a club or service > elsif ( $query->param('action') eq 'delete' ) { >- my $colId = $query->param('colId'); >- my ( $success, $errorCode, $errorMessage ) = DeleteCollection( $colId ); >- >- $template->param( previousActionDelete => 1 ); >- if ( $success ) { >- $template->param( deleteSuccess => 1 ); >- } else { >- $template->param( deleteFailure => 1 ); >- $template->param( failureMessage => $errorMessage ); >- } >+ my $colId = $query->param('colId'); >+ my ( $success, $errorCode, $errorMessage ) = DeleteCollection($colId); >+ >+ $template->param( previousActionDelete => 1 ); >+ if ($success) { >+ $template->param( deleteSuccess => 1 ); >+ } >+ else { >+ $template->param( deleteFailure => 1 ); >+ $template->param( failureMessage => $errorMessage ); >+ } > } > > ## Edit a club or service: grab data, put in form. > elsif ( $query->param('action') eq 'edit' ) { >- my $colId = $query->param('colId'); >- my ( $colId, $colTitle, $colDesc, $colBranchcode ) = GetCollection( $colId ); >- >- $template->param( >- previousActionEdit => 1, >- editColId => $colId, >- editColTitle => $colTitle, >- editColDescription => $colDesc, >- ); >+ my $colId = $query->param('colId'); >+ my ( $colId, $colTitle, $colDesc, $colBranchcode ) = GetCollection($colId); >+ >+ $template->param( >+ previousActionEdit => 1, >+ editColId => $colId, >+ editColTitle => $colTitle, >+ editColDescription => $colDesc, >+ ); > } > > # Update a Club or Service > elsif ( $query->param('action') eq 'update' ) { >- my $colId = $query->param('colId'); >- my $title = $query->param('title'); >- my $description = $query->param('description'); >- >- my ( $createdSuccessfully, $errorCode, $errorMessage ) >- = UpdateCollection( $colId, $title, $description ); >- >- $template->param( >- previousActionUpdate => 1, >- updatedTitle => $title, >- ); >- >- if ( $createdSuccessfully ) { >- $template->param( updateSuccess => 1 ); >- } else { >- $template->param( updateFailure => 1 ); >- $template->param( failureMessage => $errorMessage ); >- } >+ my $colId = $query->param('colId'); >+ my $title = $query->param('title'); >+ my $description = $query->param('description'); >+ >+ my ( $createdSuccessfully, $errorCode, $errorMessage ) = >+ UpdateCollection( $colId, $title, $description ); >+ >+ $template->param( >+ previousActionUpdate => 1, >+ updatedTitle => $title, >+ ); >+ >+ if ($createdSuccessfully) { >+ $template->param( updateSuccess => 1 ); >+ } >+ else { >+ $template->param( updateFailure => 1 ); >+ $template->param( failureMessage => $errorMessage ); >+ } > } >- >+ > my $collections = GetCollections(); > > $template->param( >- intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), >- intranetstylesheet => C4::Context->preference("intranetstylesheet"), >- IntranetNav => C4::Context->preference("IntranetNav"), >- >- collectionsLoop => $collections, >- ); >+ intranetcolorstylesheet => >+ C4::Context->preference("intranetcolorstylesheet"), >+ intranetstylesheet => C4::Context->preference("intranetstylesheet"), >+ IntranetNav => C4::Context->preference("IntranetNav"), >+ >+ collectionsLoop => $collections, >+); > > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/rotating_collections/rotatingCollections.pl b/rotating_collections/rotatingCollections.pl >index cffd9a4..59bbcdb 100755 >--- a/rotating_collections/rotatingCollections.pl >+++ b/rotating_collections/rotatingCollections.pl >@@ -16,9 +16,7 @@ > # Suite 330, Boston, MA 02111-1307 USA > # > >-use strict; >-#use warnings; FIXME - Bug 2505 >-require Exporter; >+use Modern::Perl; > > use CGI; > >@@ -28,25 +26,29 @@ use C4::Context; > use C4::RotatingCollections; > > my $query = new CGI; >-my ($template, $loggedinuser, $cookie) >- = get_template_and_user({template_name => "rotating_collections/rotatingCollections.tt", >- query => $query, >- type => "intranet", >- authnotrequired => 0, >- flagsrequired => { tools => 'rotating_collections' }, >- debug => 1, >- }); >+ >+my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >+ { >+ template_name => "rotating_collections/rotatingCollections.tmpl", >+ query => $query, >+ type => "intranet", >+ authnotrequired => 0, >+ flagsrequired => { tools => 'rotating_collections' }, >+ debug => 1, >+ } >+); > > my $branchcode = $query->cookie('branch'); > > my $collections = GetCollections(); > > $template->param( >- intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), >- intranetstylesheet => C4::Context->preference("intranetstylesheet"), >- IntranetNav => C4::Context->preference("IntranetNav"), >- >- collectionsLoop => $collections, >- ); >- >+ intranetcolorstylesheet => >+ C4::Context->preference("intranetcolorstylesheet"), >+ intranetstylesheet => C4::Context->preference("intranetstylesheet"), >+ IntranetNav => C4::Context->preference("IntranetNav"), >+ >+ collectionsLoop => $collections, >+); >+ > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/rotating_collections/transferCollection.pl b/rotating_collections/transferCollection.pl >index c84d7e1..630c222 100755 >--- a/rotating_collections/transferCollection.pl >+++ b/rotating_collections/transferCollection.pl >@@ -16,9 +16,7 @@ > # Suite 330, Boston, MA 02111-1307 USA > # > >-use strict; >-#use warnings; FIXME - Bug 2505 >-require Exporter; >+use Modern::Perl; > > use C4::Output; > use C4::Auth; >@@ -30,55 +28,61 @@ use CGI; > > my $query = new CGI; > >-my $colId = $query->param('colId'); >+my $colId = $query->param('colId'); > my $toBranch = $query->param('toBranch'); > >-my ($template, $loggedinuser, $cookie) >- = get_template_and_user({template_name => "rotating_collections/transferCollection.tt", >- query => $query, >- type => "intranet", >- authnotrequired => 0, >- flagsrequired => { tools => 'rotating_collections' }, >- debug => 1, >- }); >+my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >+ { >+ template_name => "rotating_collections/transferCollection.tmpl", >+ query => $query, >+ type => "intranet", >+ authnotrequired => 0, >+ flagsrequired => { tools => 'rotating_collections' }, >+ debug => 1, >+ } >+); > > ## Transfer collection > my ( $success, $errorCode, $errorMessage ); >-if ( $toBranch ) { >- ( $success, $errorCode, $errorMessage ) = TransferCollection( $colId, $toBranch ); >+if ($toBranch) { >+ ( $success, $errorCode, $errorMessage ) = >+ TransferCollection( $colId, $toBranch ); > >- if ( $success ) { >- $template->param( transferSuccess => 1 ); >- } else { >- $template->param( transferFailure => 1, >- errorCode => $errorCode, >- errorMessage => $errorMessage >- ); >- } >+ if ($success) { >+ $template->param( transferSuccess => 1 ); >+ } >+ else { >+ $template->param( >+ transferFailure => 1, >+ errorCode => $errorCode, >+ errorMessage => $errorMessage >+ ); >+ } > } > > ## Set up the toBranch select options > my $branches = GetBranches(); > my @branchoptionloop; >-foreach my $br (keys %$branches) { >- my %branch; >- $branch{code}=$br; >- $branch{name}=$branches->{$br}->{'branchname'}; >- push (@branchoptionloop, \%branch); >+foreach my $br ( keys %$branches ) { >+ my %branch; >+ $branch{code} = $br; >+ $branch{name} = $branches->{$br}->{'branchname'}; >+ push( @branchoptionloop, \%branch ); > } >- >+ > ## Get data about collection >-my ( $colId, $colTitle, $colDesc, $colBranchcode ) = GetCollection( $colId ); >+my ( $colId, $colTitle, $colDesc, $colBranchcode ) = GetCollection($colId); > $template->param( >- intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), >- intranetstylesheet => C4::Context->preference("intranetstylesheet"), >- IntranetNav => C4::Context->preference("IntranetNav"), >- >- colId => $colId, >- colTitle => $colTitle, >- colDesc => $colDesc, >- colBranchcode => $colBranchcode, >- branchoptionloop => \@branchoptionloop >- ); >- >+ intranetcolorstylesheet => >+ C4::Context->preference("intranetcolorstylesheet"), >+ intranetstylesheet => C4::Context->preference("intranetstylesheet"), >+ IntranetNav => C4::Context->preference("IntranetNav"), >+ >+ colId => $colId, >+ colTitle => $colTitle, >+ colDesc => $colDesc, >+ colBranchcode => $colBranchcode, >+ branchoptionloop => \@branchoptionloop >+); >+ > output_html_with_http_headers $query, $cookie, $template->output; >-- >1.7.2.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 8836
:
12560
|
16746
|
19118
|
19119
|
19337
|
19339
|
21008
|
21009
|
21010
|
21011
|
23966
|
23967
|
23968
|
23969
|
23970
|
23971
|
23976
|
28140
|
28141
|
30838
|
30921
|
31087
|
32361
|
32362
|
32588
|
32589
|
32690
|
32691
|
32693
|
32773
|
32774
|
32973
|
32974
|
32975
|
32976
|
32994
|
32999
|
33000
|
33001
|
33002
|
33045
|
33046
|
33047
|
33048
|
33050
|
33051
|
33058
|
33059
|
33060
|
33061
|
33062
|
33063
|
33064
|
33065
|
33066
|
33068
|
33070
|
33095
|
33096
|
33097
|
33098
|
33099
|
33100
|
33101
|
33102
|
33103
|
33330
|
33331
|
33374