Bug 19889: Add feedback when exclusion is updated on moredetail.pl
[srvgit] / catalogue / moredetail.pl
index 04a0e9d..f1d7f3d 100755 (executable)
@@ -19,8 +19,7 @@
 # along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 
-use strict;
-#use warnings; FIXME - Bug 2505
+use Modern::Perl;
 use C4::Koha;
 use CGI qw ( -utf8 );
 use HTML::Entities;
@@ -30,7 +29,6 @@ use C4::Acquisition;
 use C4::Output;
 use C4::Auth;
 use C4::Serials;
-use C4::Members; # to use GetMember
 use C4::Search;                # enabled_staff_search_views
 
 use Koha::Acquisition::Booksellers;
@@ -52,17 +50,27 @@ my ($template, $loggedinuser, $cookie) = get_template_and_user(
     }
 );
 
+$template->param(
+    updated_exclude_from_local_holds_priority => $query->param('updated_exclude_from_local_holds_priority')
+);
+
 if($query->cookie("holdfor")){ 
-    my $holdfor_patron = GetMember('borrowernumber' => $query->cookie("holdfor"));
+    my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") );
     $template->param(
         holdfor => $query->cookie("holdfor"),
-        holdfor_surname => $holdfor_patron->{'surname'},
-        holdfor_firstname => $holdfor_patron->{'firstname'},
-        holdfor_cardnumber => $holdfor_patron->{'cardnumber'},
+        holdfor_surname => $holdfor_patron->surname,
+        holdfor_firstname => $holdfor_patron->firstname,
+        holdfor_cardnumber => $holdfor_patron->cardnumber,
     );
 }
 
-my $hidepatronname = C4::Context->preference("HidePatronName");
+if( $query->cookie("searchToOrder") ){
+    my ( $basketno, $vendorid ) = split( /\//, $query->cookie("searchToOrder") );
+    $template->param(
+        searchtoorder_basketno => $basketno,
+        searchtoorder_vendorid => $vendorid
+    );
+}
 
 # get variables
 
@@ -101,7 +109,10 @@ for my $itm (@all_items) {
                                ($itemnumber != $itm->{itemnumber}));
 }
 
-my $record=GetMarcBiblio($biblionumber);
+my $record=GetMarcBiblio({ biblionumber => $biblionumber });
+
+output_and_exit( $query, $cookie, $template, 'unknown_biblio')
+    unless $record;
 
 my $hostrecords;
 # adding items linked via host biblios
@@ -111,7 +122,7 @@ if (@hostitems){
         push (@items,@hostitems);
 }
 
-my $subtitle = GetRecordValue('subtitle', $record, $fw);
+my $biblio = Koha::Biblios->find( $biblionumber );
 
 my $totalcount=@all_items;
 my $showncount=@items;
@@ -127,8 +138,8 @@ my $copynumbers =
 
 my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } };
 
-$data->{'itemtypename'} = $itemtypes->{$data->{'itemtype'}}->{'translated_description'};
-$data->{'rentalcharge'} = sprintf( "%.2f", $data->{'rentalcharge'} );
+$data->{'itemtypename'} = $itemtypes->{ $data->{'itemtype'} }->{'translated_description'}
+  if $data->{itemtype} && exists $itemtypes->{ $data->{itemtype} };
 foreach ( keys %{$data} ) {
     $template->param( "$_" => defined $data->{$_} ? $data->{$_} : '' );
 }
@@ -136,9 +147,9 @@ foreach ( keys %{$data} ) {
 ($itemnumber) and @items = (grep {$_->{'itemnumber'} == $itemnumber} @items);
 foreach my $item (@items){
     $item->{object} = Koha::Items->find( $item->{itemnumber} );
-    $item->{'collection'}              = $ccodes->{ $item->{ccode} } if ($ccodes);
-    $item->{'itype'}                   = $itemtypes->{ $item->{'itype'} }->{'translated_description'};
-    $item->{'replacementprice'}        = sprintf( "%.2f", $item->{'replacementprice'} );
+    $item->{'collection'}              = $ccodes->{ $item->{ccode} } if $ccodes && $item->{ccode} && exists $ccodes->{ $item->{ccode} };
+    $item->{'itype'}                   = $itemtypes->{ $item->{'itype'} }->{'translated_description'} if exists $itemtypes->{ $item->{'itype'} };
+    $item->{'replacementprice'}        = $item->{'replacementprice'};
     if ( defined $item->{'copynumber'} ) {
         $item->{'displaycopy'} = 1;
         if ( defined $copynumbers->{ $item->{'copynumber'} } ) {
@@ -175,6 +186,40 @@ foreach my $item (@items){
         $item->{status_advisory} = 1;
     }
 
+    # Add paidfor info
+    if ( $item->{itemlost} ) {
+        my $accountlines = Koha::Account::Lines->search(
+            {
+                itemnumber        => $item->{itemnumber},
+                debit_type_code   => 'LOST',
+                status            => [ undef, { '<>' => 'RETURNED' } ],
+                amountoutstanding => 0
+            },
+            {
+                order_by => { '-desc' => 'date' },
+                rows     => 1
+            }
+        );
+
+        if ( my $accountline = $accountlines->next ) {
+            my $payment_offsets = Koha::Account::Offsets->search(
+                {
+                    debit_id  => $accountline->id,
+                    credit_id => { '!=' => undef }, # it is not the debit itself
+                    type => { '!=' => [ 'Writeoff', 'Forgiven' ] },
+                    amount => { '<' => 0 }    # credits are negative on the DB
+                },
+                { order_by => { '-desc' => 'created_on' } }
+            );
+
+            if ($payment_offsets->count) {
+                my $patron = $accountline->patron;
+                my $payment_offset = $payment_offsets->next;
+                $item->{paidfor} = { patron => $patron, created_on => $payment_offset->created_on };
+            }
+        }
+    }
+
     if (C4::Context->preference("IndependentBranches")) {
         #verifying rights
         my $userenv = C4::Context->userenv();
@@ -188,25 +233,21 @@ foreach my $item (@items){
         $item->{'issue'}= 0;
     }
 
-    unless ($hidepatronname) {
-        if ( $item->{'borrowernumber'} ) {
-            my $curr_borrower = GetMember('borrowernumber' => $item->{'borrowernumber'} );
-            $item->{borrowerfirstname} = $curr_borrower->{'firstname'};
-            $item->{borrowersurname} = $curr_borrower->{'surname'};
-        }
+    if ( $item->{'borrowernumber'} ) {
+        my $curr_borrower = Koha::Patrons->find( $item->{borrowernumber} );
+        $item->{patron} = $curr_borrower;
     }
-
 }
 
-my $mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.itemlost', authorised_value => { not => undef } });
+my $mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.itemlost', authorised_value => [ -and => {'!=' => undef }, {'!=' => ''}] });
 if ( $mss->count ) {
     $template->param( itemlostloop => GetAuthorisedValues( $mss->next->authorised_value ) );
 }
-$mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.damaged', authorised_value => { not => undef } });
+$mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.damaged', authorised_value => [ -and => {'!=' => undef }, {'!=' => ''}] });
 if ( $mss->count ) {
     $template->param( itemdamagedloop => GetAuthorisedValues( $mss->next->authorised_value ) );
 }
-$mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.withdrawn', authorised_value => { not => undef } });
+$mss = Koha::MarcSubfieldStructures->search({ frameworkcode => $fw, kohafield => 'items.withdrawn', authorised_value => [ -and => {'!=' => undef }, {'!=' => ''}] });
 if ( $mss->count ) {
     $template->param( itemwithdrawnloop => GetAuthorisedValues( $mss->next->authorised_value) );
 }
@@ -225,41 +266,11 @@ $template->param(
     biblioitemnumber    => $bi,
     itemnumber          => $itemnumber,
     z3950_search_params => C4::Search::z3950_search_args(GetBiblioData($biblionumber)),
-    subtitle            => $subtitle,
-    hidepatronname      => $hidepatronname,
+    biblio              => $biblio,
 );
 $template->param(ONLY_ONE => 1) if ( $itemnumber && $showncount != @items );
 $template->{'VARS'}->{'searchid'} = $query->param('searchid');
 
-my @allorders_using_biblio = GetOrdersByBiblionumber ($biblionumber);
-my @deletedorders_using_biblio;
-my @orders_using_biblio;
-my @baskets_orders;
-my @baskets_deletedorders;
-
-foreach my $myorder (@allorders_using_biblio) {
-    my $basket = $myorder->{'basketno'};
-    if ((defined $myorder->{'datecancellationprinted'}) and  ($myorder->{'datecancellationprinted'} ne '0000-00-00') ){
-        push @deletedorders_using_biblio, $myorder;
-        unless (grep(/^$basket$/, @baskets_deletedorders)){
-            push @baskets_deletedorders,$myorder->{'basketno'};
-        }
-    }
-    else {
-        push @orders_using_biblio, $myorder;
-        unless (grep(/^$basket$/, @baskets_orders)){
-            push @baskets_orders,$myorder->{'basketno'};
-            }
-    }
-}
-
-my $count_orders_using_biblio = scalar @orders_using_biblio ;
-$template->param (countorders => $count_orders_using_biblio);
-
-my $count_deletedorders_using_biblio = scalar @deletedorders_using_biblio ;
-$template->param (countdeletedorders => $count_deletedorders_using_biblio);
-
-my $biblio = Koha::Biblios->find( $biblionumber );
 my $holds = $biblio->holds;
 $template->param( holdcount => $holds->count );