From aeeaac6220e5bc6ce05491473c46908d629f3a6c Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Fri, 14 Feb 2014 12:57:47 +0100 Subject: [PATCH] [SIGNED-OFF] Bug 11759: Batch checkout - prepare the ground This patch does not introduce any changes. It prepares the circulation script to accept several barcodes in parameter. A loop is done on all barcodes (until now, only 1) to generate a structure to sent to the template. At the end, only the first generated data is sent. Signed-off-by: Josef Moravec --- circ/circulation.pl | 84 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 52 insertions(+), 32 deletions(-) diff --git a/circ/circulation.pl b/circ/circulation.pl index 22c5e24..4d830d9 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -87,6 +87,11 @@ if (!C4::Context->userenv && !$branch){ } } +my $barcodes = []; +if ( my $barcode = $query->param('barcode') ) { + $barcodes = [ $barcode ]; +} + my ( $template, $loggedinuser, $cookie ) = get_template_and_user ( { template_name => 'circ/circulation.tt', @@ -131,10 +136,12 @@ if (C4::Context->preference("DisplayClearScreenButton")) { $template->param(DisplayClearScreenButton => 1); } -my $barcode = $query->param('barcode') || q{}; -$barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace +for my $barcode ( @$barcodes ) { + $barcode =~ s/^\s*|\s*$//g; # remove leading/trailing whitespace + $barcode = barcodedecode($barcode) + if( $barcode && C4::Context->preference('itemBarcodeInputFilter')); +} -$barcode = barcodedecode($barcode) if( $barcode && C4::Context->preference('itemBarcodeInputFilter')); my $stickyduedate = $query->param('stickyduedate') || $session->param('stickyduedate'); my $duedatespec = $query->param('duedatespec') || $session->param('stickyduedate'); my $issueconfirmed = $query->param('issueconfirmed'); @@ -144,7 +151,7 @@ my $debt_confirmed = $query->param('debt_confirmed') || 0; # Don't show the debt my $charges = $query->param('charges') || q{}; # Check if stickyduedate is turned off -if ( $barcode ) { +if ( @$barcodes ) { # was stickyduedate loaded from session? if ( $stickyduedate && ! $query->param("stickyduedate") ) { $session->clear( 'stickyduedate' ); @@ -177,12 +184,12 @@ if( $onsite_checkout && !$duedatespec_allow ) { our $todaysdate = C4::Dates->new->output('iso'); # check and see if we should print -if ( $barcode eq '' && $print eq 'maybe' ) { +if ( @$barcodes == 0 && $print eq 'maybe' ) { $print = 'yes'; } -my $inprocess = ($barcode eq '') ? '' : $query->param('inprocess'); -if ( $barcode eq '' && $charges eq 'yes' ) { +my $inprocess = (@$barcodes == 0) ? '' : $query->param('inprocess'); +if ( @$barcodes == 0 && $charges eq 'yes' ) { $template->param( PAYCHARGES => 'yes', borrowernumber => $borrowernumber @@ -294,25 +301,29 @@ if ($borrowernumber) { # STEP 3 : ISSUING # # -if ($barcode) { +if (@$barcodes) { + my $checkout_infos; + for my $barcode ( @$barcodes ) { + my $template_params = { barcode => $barcode }; # always check for blockers on issuing my ( $error, $question, $alerts ) = CanBookBeIssued( $borrower, $barcode, $datedue , $inprocess ); my $blocker = $invalidduedate ? 1 : 0; - $template->param( alert => $alerts ); + $template_params->{alert} = $alerts; # Get the item title for more information my $getmessageiteminfo = GetBiblioFromItemNumber(undef,$barcode); - $template->param( - authvalcode_notforloan => C4::Koha::GetAuthValCode('items.notforloan', $getmessageiteminfo->{'frameworkcode'}), - ); + $template_params->{authvalcode_notforloan} = + C4::Koha::GetAuthValCode('items.notforloan', $getmessageiteminfo->{'frameworkcode'}); + # Fix for bug 7494: optional checkout-time fallback search for a book if ( $error->{'UNKNOWN_BARCODE'} - && C4::Context->preference("itemBarcodeFallbackSearch") ) + && C4::Context->preference("itemBarcodeFallbackSearch") + ) { - $template->param( FALLBACK => 1 ); + $template_params->{FALLBACK} = 1; my $query = "kw=" . $barcode; my ( $searcherror, $results, $total_hits ) = SimpleSearch($query); @@ -334,37 +345,33 @@ if ($barcode) { } } } - $template->param( options => \@options ); + $template_params->{options} = \@options; } } unless( $onsite_checkout and C4::Context->preference("OnSiteCheckoutsForce") ) { delete $question->{'DEBT'} if ($debt_confirmed); foreach my $impossible ( keys %$error ) { - $template->param( - $impossible => $$error{$impossible}, - IMPOSSIBLE => 1 - ); + $template_params->{$impossible} = $$error{$impossible}; + $template_params->{IMPOSSIBLE} = 1; $blocker = 1; } } + my $iteminfo = GetBiblioFromItemNumber(undef, $barcode); if( !$blocker || $force_allow_issue ){ my $confirm_required = 0; unless($issueconfirmed){ # Get the item title for more information - my $getmessageiteminfo = GetBiblioFromItemNumber(undef,$barcode); - $template->{VARS}->{'additional_materials'} = $getmessageiteminfo->{'materials'}; - $template->param( itemhomebranch => $getmessageiteminfo->{'homebranch'} ); + $template_params->{additional_materials} = $iteminfo->{'materials'}; + $template_params->{itemhomebranch} = $iteminfo->{'homebranch'}; # pass needsconfirmation to template if issuing is possible and user hasn't yet confirmed. foreach my $needsconfirmation ( keys %$question ) { - $template->param( - $needsconfirmation => $$question{$needsconfirmation}, - getTitleMessageIteminfo => $getmessageiteminfo->{'title'}, - getBarcodeMessageIteminfo => $getmessageiteminfo->{'barcode'}, - NEEDSCONFIRMATION => 1, - onsite_checkout => $onsite_checkout, - ); + $template_params->{$needsconfirmation} = $$question{$needsconfirmation}; + $template_params->{getTitleMessageIteminfo} = $iteminfo->{'title'}; + $template_params->{getBarcodeMessageIteminfo} = $iteminfo->{'barcode'}; + $template_params->{NEEDSCONFIRMATION} = 1; + $template_params->{onsite_checkout} => $onsite_checkout, $confirm_required = 1; } } @@ -374,9 +381,22 @@ if ($barcode) { $inprocess = 1; } } - + my ( $od, $issue, $fines ) = GetMemberIssuesAndFines($borrowernumber); - $template->param( issuecount => $issue ); + + # FIXME If the issue is confirmed, we launch another time GetMemberIssuesAndFines, now display the issue count after issue + my ( $od, $issue, $fines ) = GetMemberIssuesAndFines( $borrowernumber ); + $iteminfo->{issuecount} = $issue; + + if ( $iteminfo ) { + $iteminfo->{subtitle} = GetRecordValue('subtitle', GetMarcBiblio($iteminfo->{biblionumber}), GetFrameworkCode($iteminfo->{biblionumber})); + $template_params->{item} = $iteminfo; + } + push @$checkout_infos, $template_params; + } + + $template->param( %{$checkout_infos->[0]} ); + $template->param( barcode => $barcodes->[0] ); } # reload the borrower info for the sake of reseting the flags..... @@ -585,7 +605,7 @@ $template->param( cardnumber => $borrower->{'cardnumber'}, othernames => $borrower->{'othernames'}, amountold => $amountold, - barcode => $barcode, + barcodes => $barcodes, stickyduedate => $stickyduedate, duedatespec => $duedatespec, message => $message, -- 1.7.10.4