From cd2d3e04c1866bdbb9b9398d564ad9ed3bdeb8f5 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 8 May 2014 11:23:38 +0200 Subject: [PATCH] Bug 11169: Display acquition details at the OPAC This patch adds a new system preference 'OPACAcquisitionDetail'. If it is enabled, information about items on order will be displayed on the OPAC detail page. Test plan: - switch on the OPACAcquisitionDetails pref. - set the AcqCreateItems pref to 'receiving'. - create some orders on 1 or more items. - go to the opac detail page and verify the "Holdings" tab contains the line "X item are on order." (at the bottom of the table containing the item list). - receive the items. - verify the number of items has decreased. - set the AcqCreateItems pref to 'ordering'. - create some orders on 1 or more items. - go to the opac detail page and verify the item list contains the items with the "on order" status. - receive the items. - verify the received items don't have anymore the "on order" status. To test completely this feature, you should verify there is no regression on the pref OpacMaxItemsToDisplay, OpacSeparateHoldings and OpacSeparateHoldingsBranch. --- C4/Acquisition.pm | 5 ++++ installer/data/mysql/sysprefs.sql | 1 + installer/data/mysql/updatedatabase.pl | 12 ++++++++++ .../prog/en/modules/admin/preferences/opac.pref | 8 ++++++- .../bootstrap/en/includes/item-status.inc | 2 ++ .../opac-tmpl/bootstrap/en/modules/opac-detail.tt | 8 ++++++- opac/opac-detail.pl | 25 ++++++++++++++++++++ t/db_dependent/Acquisition.t | 6 ++++- 8 files changed, 64 insertions(+), 3 deletions(-) diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index a14ffe7..30b45e3 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -1723,6 +1723,7 @@ sub SearchOrders { my $owner = $params->{owner}; my $pending = $params->{pending}; my $ordered = $params->{ordered}; + my $biblionumber = $params->{biblionumber}; my $dbh = C4::Context->dbh; my @args = (); @@ -1782,6 +1783,10 @@ sub SearchOrders { $query .= ' AND ( aqorders.ordernumber = ? OR aqorders_transfers.ordernumber_from = ? ) '; push @args, ( $ordernumber, $ordernumber ); } + if ( $biblionumber ) { + $query .= 'AND aqorders.biblionumber = ?'; + push @args, $biblionumber; + } if( $search ) { $query .= ' AND (biblio.title LIKE ? OR biblio.author LIKE ? OR biblioitems.isbn LIKE ?)'; push @args, ("%$search%","%$search%","%$search%"); diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index b06dd72..3d81fac 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -210,6 +210,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('OAI-PMH:ConfFile','',NULL,'If empty, Koha OAI Server operates in normal mode, otherwise it operates in extended mode.','File'), ('OAI-PMH:MaxCount','50',NULL,'OAI-PMH maximum number of records by answer to ListRecords and ListIdentifiers queries','Integer'), ('OCLCAffiliateID','','','Use with FRBRizeEditions and XISBN. You can sign up for an AffiliateID here: http://www.worldcat.org/wcpa/do/AffiliateUserServices?method=initSelfRegister','free'), +('OPACAcquisitionDetails','0','','Show the acquisition details at the OPAC','YesNo'), ('OpacAddMastheadLibraryPulldown','0','','Adds a pulldown menu to select the library to search on the opac masthead.','YesNo'), ('OPACAllowHoldDateInFuture','0','','If set, along with the AllowHoldDateInFuture system preference, OPAC users can set the date of a hold to be in the future.','YesNo'), ('OpacAllowPublicListCreation','1',NULL,'If set, allows opac users to create public lists','YesNo'), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 3b1718c..50b2a3a 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -8465,6 +8465,18 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.15.00.XXX"; +if ( CheckVersion($DBversion) ) { + $dbh->do(q| + INSERT IGNORE INTO systempreferences (variable,value,options,explanation,type) VALUES('OPACAcquisitionDetails','0', '','Show the acquisition details at the OPAC','YesNo') + |); + print "Upgrade to $DBversion done (Bug 11169 - Add OPACAcquisitionDetails syspref)\n"; + SetVersion($DBversion); +} + + + + =head1 FUNCTIONS =head2 TableExists($table) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref index 428f569..50bab6e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -444,7 +444,13 @@ OPAC: yes: Allow no: Do not allow - users to add a note when placing a hold. - + - + - pref: OPACAcquisitionDetails + default: 0 + choices: + yes: Display + no: Don't display + - the acquisition details on OPAC detail pages. Policy: - - pref: singleBranchMode diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc index f14df90..16599de 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc +++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc @@ -46,6 +46,8 @@ not use an API to fetch items that populates item.datedue. [% ELSE %] Item damaged [% END %] +[% ELSIF item.on_order %] + On order [% ELSE %] Available [% IF ( item.restrictedopac ) %]([% item.restrictedopac %])[% END %] [% END %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt index 45392ec..95a961a 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt @@ -632,7 +632,13 @@

This record has many physical items ([% items_count %]). Click here to view them all.

[% ELSIF ( itemloop.size ) %] [% INCLUDE items_table items=itemloop tab="holdings" %] - + [% IF Koha.Preference('OPACAcquisitionDetails') and Koha.Preference('AcqCreateItem') != 'ordering' and acquisition_details.total_quantity > 0 %] + [% IF acquisition_details.total_quantity == 1 %] + 1 item is on order. + [% ELSE %] + [% acquisition_details.total_quantity %] items are on order. + [% END %] + [% END %] [% IF holds_count.defined || priority %]
[% IF holds_count.defined %] diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index 01c801f..1b03c74 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -596,6 +596,31 @@ if ($currentbranch and C4::Context->preference('OpacSeparateHoldings')) { my $separatebranch = C4::Context->preference('OpacSeparateHoldingsBranch'); my $viewallitems = $query->param('viewallitems'); my $max_items_to_display = C4::Context->preference('OpacMaxItemsToDisplay') // 50; + +# Get items on order +my ( $items_on_order, $orders ); +if ( C4::Context->preference('OPACAcquisitionDetails' ) ) { + $orders = C4::Acquisition::SearchOrders({ + biblionumber => $biblionumber, + pending => 1, + }); + my $total_quantity = 0; + for my $order ( @$orders ) { + if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) { + for my $itemnumber ( C4::Acquisition::GetItemnumbersFromOrder( $order->{ordernumber} ) ) { + my $item = C4::Items::GetItem( $itemnumber ); + $item->{on_order} = 1; + $item->{branchname} = C4::Branch::GetBranchName( $item->{holdingbranch} ); + push @items, $item; + } + } + $total_quantity += $order->{quantity}; + } + $template->{VARS}->{acquisition_details} = { + total_quantity => $total_quantity, + }; +} + if ( not $viewallitems and @items > $max_items_to_display ) { $template->param( too_many_items => 1, diff --git a/t/db_dependent/Acquisition.t b/t/db_dependent/Acquisition.t index 4863cc5..8936ec4 100755 --- a/t/db_dependent/Acquisition.t +++ b/t/db_dependent/Acquisition.t @@ -8,7 +8,7 @@ use POSIX qw(strftime); use C4::Bookseller qw( GetBookSellerFromId ); -use Test::More tests => 76; +use Test::More tests => 77; BEGIN { use_ok('C4::Acquisition'); @@ -798,6 +798,10 @@ $search_orders = SearchOrders({ }); is( scalar (@$search_orders), 3, "SearchOrders with pending and ordered params gets only pending ordered orders. After closing the basket, orders are marked as 'ordered' (bug 11170)" ); +$search_orders = SearchOrders({ + ordernumber => $ordernumbers[4] +}); +is( scalar (@$search_orders), 1, "SearchOrders takes into account the ordernumber filter" ); # # Test AddClaim -- 1.7.10.4