X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Fbasketgroup.pl;h=d29df7485db077cff0bb8bcdd3a8d6d52e321231;hb=refs%2Fheads%2Fkoha_ffzg;hp=d6bd5d1f4a73cf86ec124d36616d9b3f2e1e6303;hpb=b38a3126e1529829fe18c1c74992152d830bf6d3;p=koha.git diff --git a/acqui/basketgroup.pl b/acqui/basketgroup.pl index d6bd5d1f4a..d29df7485d 100755 --- a/acqui/basketgroup.pl +++ b/acqui/basketgroup.pl @@ -8,18 +8,18 @@ # # This file is part of Koha. # -# Koha is free software; you can redistribute it and/or modify it under the -# terms of the GNU General Public License as published by the Free Software -# Foundation; either version 2 of the License, or (at your option) any later -# version. +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. # -# Koha is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR -# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along -# with Koha; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . =head1 NAME @@ -29,7 +29,7 @@ basketgroup.pl =head1 DESCRIPTION This script lets the user group (closed) baskets into basket groups for easier order management. Note that the grouped baskets have to be from the same bookseller and - have to be closed. + have to be closed to be printed or exported. =head1 CGI PARAMETERS @@ -43,26 +43,26 @@ The bookseller who we want to display the baskets (and basketgroups) of. =cut -use strict; -use warnings; +use Modern::Perl; use Carp; -use C4::Input; use C4::Auth; use C4::Output; -use CGI; +use CGI qw ( -utf8 ); +use File::Spec; -use C4::Bookseller qw/GetBookSellerFromId/; -use C4::Budgets qw/ConvertCurrency/; -use C4::Acquisition qw/CloseBasketgroup ReOpenBasketgroup GetOrders GetBasketsByBasketgroup GetBasketsByBookseller ModBasketgroup NewBasketgroup DelBasketgroup GetBasketgroups ModBasket GetBasketgroup GetBasket GetBasketGroupAsCSV/; -use C4::Bookseller qw/GetBookSellerFromId/; -use C4::Branch qw/GetBranches/; -use C4::Members qw/GetMember/; +use C4::Acquisition qw/CloseBasketgroup ReOpenBasketgroup GetOrders GetBasketsByBasketgroup GetBasketsByBookseller ModBasketgroup NewBasketgroup DelBasketgroup GetBasketgroups ModBasket GetBasketgroup GetBasket GetBasketGroupAsCSV get_rounded_price/; +use Koha::EDI qw/create_edi_order get_edifact_ean/; + +use Koha::Biblioitems; +use Koha::Acquisition::Booksellers; +use Koha::ItemTypes; +use Koha::Patrons; our $input=new CGI; our ($template, $loggedinuser, $cookie) - = get_template_and_user({template_name => "acqui/basketgroup.tmpl", + = get_template_and_user({template_name => "acqui/basketgroup.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -70,82 +70,19 @@ our ($template, $loggedinuser, $cookie) debug => 1, }); -sub parseinputbaskets { - my $booksellerid = shift; - my $baskets = &GetBasketsByBookseller($booksellerid); - for(my $i=0; $i < scalar @$baskets; ++$i) { - if( @$baskets[$i] && ! @$baskets[$i]->{'closedate'} ) { - splice(@$baskets, $i, 1); - --$i; - } - } - foreach my $basket (@$baskets){ -#perl DBI uses value "undef" for the mysql "NULL" value, so i need to check everywhere where $basket->{'basketgroupid'} is used for undef ☹ - $basket->{'basketgroupid'} = $input->param($basket->{'basketno'}.'-group') || undef; - } - return $baskets; -} - - - -sub parseinputbasketgroups { - my $booksellerid = shift; - my $baskets = shift; - my $basketgroups = &GetBasketgroups($booksellerid); - my $newbasketgroups; - foreach my $basket (@$baskets){ - my $basketgroup; - my $i = 0; - my $exists; - if(! $basket->{'basketgroupid'} || $basket->{'basketgroupid'} == 0){ - $exists = "true"; - } else { - foreach my $basketgroup (@$basketgroups){ - if($basket->{'basketgroupid'} == $basketgroup->{'id'}){ - $exists = "true"; - push(@{$basketgroup->{'basketlist'}}, $basket->{'basketno'}); - last; - } - } - } - if (! $exists){ -#if the basketgroup doesn't exist yet - $basketgroup = $newbasketgroups->{$basket->{'basketgroupid'}} || undef; - $basketgroup->{'booksellerid'} = $booksellerid; - } else { - while($i < scalar @$basketgroups && @$basketgroups[$i]->{'id'} != $basket->{'basketgroupid'}){ - ++$i; - } - $basketgroup = @$basketgroups[$i]; - } - $basketgroup->{'id'}=$basket->{'basketgroupid'}; - $basketgroup->{'name'}=$input->param('basketgroup-'.$basketgroup->{'id'}.'-name') || ""; - $basketgroup->{'closed'}= $input->param('basketgroup-'.$basketgroup->{'id'}.'-closed'); - push(@{$basketgroup->{'basketlist'}}, $basket->{'basketno'}); - if (! $exists){ - $newbasketgroups->{$basket->{'basketgroupid'}} = $basketgroup; - } else { - if($basketgroup->{'id'}){ - @$basketgroups[$i] = $basketgroup; - } - } - } - return($basketgroups, $newbasketgroups); -} - sub BasketTotal { my $basketno = shift; my $bookseller = shift; my $total = 0; my @orders = GetOrders($basketno); for my $order (@orders){ - $total = $total + ( $order->{ecost} * $order->{quantity} ); - if ($bookseller->{invoiceincgst} && ! $bookseller->{listincgst} && ( $bookseller->{gstrate} // C4::Context->preference("gist") )) { - my $gst = $bookseller->{gstrate} // C4::Context->preference("gist"); - $total = $total * ( $gst / 100 +1); + # FIXME The following is wrong + if ( $bookseller->listincgst ) { + $total = $total + ( get_rounded_price($order->{ecost_tax_included}) * $order->{quantity} ); + } else { + $total = $total + ( get_rounded_price($order->{ecost_tax_excluded}) * $order->{quantity} ); } } - $total .= $bookseller->{invoiceprice}; return $total; } @@ -157,16 +94,19 @@ sub displaybasketgroups { if (scalar @$basketgroups != 0) { foreach my $basketgroup (@$basketgroups){ my $i = 0; + my $basketsqty = 0; while($i < scalar(@$baskets)){ my $basket = @$baskets[$i]; if($basket->{'basketgroupid'} && $basket->{'basketgroupid'} == $basketgroup->{'id'}){ $basket->{total} = BasketTotal($basket->{basketno}, $bookseller); push(@{$basketgroup->{'baskets'}}, $basket); splice(@$baskets, $i, 1); + ++$basketsqty; --$i; } ++$i; } + $basketgroup -> {'basketsqty'} = $basketsqty; } $template->param(basketgroups => $basketgroups); } @@ -179,33 +119,32 @@ sub displaybasketgroups { } } $template->param(baskets => $baskets); - $template->param( booksellername => $bookseller ->{'name'}); + $template->param( booksellername => $bookseller->name); } sub printbasketgrouppdf{ my ($basketgroupid) = @_; - + my $pdfformat = C4::Context->preference("OrderPdfFormat"); - if ($pdfformat eq 'pdfformat::layout3pages' || $pdfformat eq 'pdfformat::layout2pages'){ - eval { - eval "require $pdfformat"; - import $pdfformat; - }; - if ($@){ - } + my @valid_pdfformats = qw(pdfformat::layout3pages pdfformat::layout2pages pdfformat::layout3pagesfr pdfformat::layout2pagesde pdfformat::ffzg); + if (grep {$_ eq $pdfformat} @valid_pdfformats) { + $pdfformat = "Koha::$pdfformat"; + my $pdfformat_filepath = File::Spec->catfile(split /::/, $pdfformat) . '.pm'; + require $pdfformat_filepath; + import $pdfformat qw(printpdf); } else { - print $input->header; - print $input->start_html; # FIXME Should do a nicer page - print "

Invalid PDF Format set

"; - print "Please go to the systempreferences and set a valid pdfformat"; - exit; + print $input->header; + print $input->start_html; # FIXME Should do a nicer page + print "

Invalid PDF Format set

"; + print "Please go to the systempreferences and set a valid pdfformat"; + exit; } - + my $basketgroup = GetBasketgroup($basketgroupid); - my $bookseller = GetBookSellerFromId($basketgroup->{'booksellerid'}); + my $bookseller = Koha::Acquisition::Booksellers->find( $basketgroup->{booksellerid} ); my $baskets = GetBasketsByBasketgroup($basketgroupid); - + my %orders; for my $basket (@$baskets) { my @ba_orders; @@ -228,56 +167,41 @@ sub printbasketgrouppdf{ croak $@; } - $ord->{rrp} = ConvertCurrency( $ord->{'currency'}, $ord->{rrp} ); - if ( $bookseller->{'listincgst'} ) { - $ord->{rrpgsti} = sprintf( "%.2f", $ord->{rrp} ); - $ord->{gstgsti} = sprintf( "%.2f", $ord->{gstrate} * 100 ); - $ord->{rrpgste} = sprintf( "%.2f", $ord->{rrp} / ( 1 + ( $ord->{gstgsti} / 100 ) ) ); - $ord->{gstgste} = sprintf( "%.2f", $ord->{gstgsti} / ( 1 + ( $ord->{gstgsti} / 100 ) ) ); - $ord->{ecostgsti} = sprintf( "%.2f", $ord->{ecost} ); - $ord->{ecostgste} = sprintf( "%.2f", $ord->{ecost} / ( 1 + ( $ord->{gstgsti} / 100 ) ) ); - $ord->{gstvalue} = sprintf( "%.2f", ( $ord->{ecostgsti} - $ord->{ecostgste} ) * $ord->{quantity}); - $ord->{totalgste} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgste} ); - $ord->{totalgsti} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgsti} ); - } else { - $ord->{rrpgsti} = sprintf( "%.2f", $ord->{rrp} * ( 1 + ( $ord->{gstrate} ) ) ); - $ord->{rrpgste} = sprintf( "%.2f", $ord->{rrp} ); - $ord->{gstgsti} = sprintf( "%.2f", $ord->{gstrate} * 100 ); - $ord->{gstgste} = sprintf( "%.2f", $ord->{gstrate} * 100 ); - $ord->{ecostgsti} = sprintf( "%.2f", $ord->{ecost} * ( 1 + ( $ord->{gstrate} ) ) ); - $ord->{ecostgste} = sprintf( "%.2f", $ord->{ecost} ); - $ord->{gstvalue} = sprintf( "%.2f", ( $ord->{ecostgsti} - $ord->{ecostgste} ) * $ord->{quantity}); - $ord->{totalgste} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgste} ); - $ord->{totalgsti} = sprintf( "%.2f", $ord->{quantity} * $ord->{ecostgsti} ); - } - my $bib = GetBiblioData($ord->{biblionumber}); - my $itemtypes = GetItemTypes(); + $ord->{tax_value} = $ord->{tax_value_on_ordering}; + $ord->{tax_rate} = $ord->{tax_rate_on_ordering}; + $ord->{total_tax_included} = get_rounded_price($ord->{ecost_tax_included}) * $ord->{quantity}; + $ord->{total_tax_excluded} = get_rounded_price($ord->{ecost_tax_excluded}) * $ord->{quantity}; + + my $biblioitem = Koha::Biblioitems->search({ biblionumber => $ord->{biblionumber} })->next; #FIXME DELETE ME # 0 1 2 3 4 5 6 7 8 9 - #isbn, itemtype, author, title, publishercode, quantity, listprice ecost discount gstrate + #isbn, itemtype, author, title, publishercode, quantity, listprice ecost discount tax_rate # Editor Number my $en; + my $edition; + $ord->{marcxml} = C4::Biblio::GetXmlBiblio( $ord->{biblionumber} ); my $marcrecord=eval{MARC::Record::new_from_xml( $ord->{marcxml},'UTF-8' )}; if ($marcrecord){ if ( C4::Context->preference("marcflavour") eq 'UNIMARC' ) { $en = $marcrecord->subfield( '345', "b" ); + $edition = $marcrecord->subfield( '205', 'a' ); } elsif ( C4::Context->preference("marcflavour") eq 'MARC21' ) { $en = $marcrecord->subfield( '037', "a" ); + $edition = $marcrecord->subfield( '250', 'a' ); } } - my $ba_order = { - isbn => ($ord->{isbn} ? $ord->{isbn} : undef), - itemtype => ( $ord->{itemtype} and $bib->{itemtype} ? $itemtypes->{$bib->{itemtype}}->{description} : undef ), - en => ( $en ? $en : undef ), - }; - for my $key ( qw/ gstrate author title itemtype publishercode discount quantity rrpgsti rrpgste gstgsti gstgste ecostgsti ecostgste gstvalue totalgste totalgsti / ) { - $ba_order->{$key} = $ord->{$key}; - } + my $itemtype = ( $ord->{itemtype} and $biblioitem->itemtype ) + ? Koha::ItemTypes->find( $biblioitem->itemtype ) + : undef; + $ord->{itemtype} = $itemtype ? $itemtype->description : undef; - push(@ba_orders, $ba_order); + $ord->{en} = $en ? $en : undef; + $ord->{edition} = $edition ? $edition : undef; + + push(@ba_orders, $ord); } $orders{$basket->{basketno}} = \@ba_orders; } @@ -285,133 +209,126 @@ sub printbasketgrouppdf{ -type => 'application/pdf', -attachment => ( $basketgroup->{name} || $basketgroupid ) . '.pdf' ); - my $pdf = printpdf($basketgroup, $bookseller, $baskets, \%orders, $bookseller->{gstrate} // C4::Context->preference("gist")) || die "pdf generation failed"; + my $pdf = printpdf($basketgroup, $bookseller, $baskets, \%orders, $bookseller->tax_rate // C4::Context->preference("gist")) || die "pdf generation failed"; print $pdf; } +sub generate_edifact_orders { + my $basketgroupid = shift; + my $baskets = GetBasketsByBasketgroup($basketgroupid); + my $ean = get_edifact_ean(); + + if($ean) { + for my $basket ( @{$baskets} ) { + create_edi_order( { ean => $ean, basketno => $basket->{basketno}, } ); + } + } else { + my $booksellerid = $input->param('booksellerid') || 0; + print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . + $booksellerid . + '&message=No%20EDIFACT%20Setup'); + } + return; +} + my $op = $input->param('op') || 'display'; +# possible values of $op : +# - add : adds a new basketgroup, or edit an open basketgroup, or display a closed basketgroup +# - mod_basket : modify an individual basket of the basketgroup +# - closeandprint : close and print an closed basketgroup in pdf. called by clicking on "Close and print" button in closed basketgroups list +# - print : print a closed basketgroup. called by clicking on "Print" button in closed basketgroups list +# - ediprint : generate edi order messages for the baskets in the group +# - export : export in CSV a closed basketgroup. called by clicking on "Export" button in closed basketgroups list +# - delete : delete an open basketgroup. called by clicking on "Delete" button in open basketgroups list +# - reopen : reopen a closed basketgroup. called by clicking on "Reopen" button in closed basketgroup list +# - attachbasket : save a modified basketgroup, or creates a new basketgroup when a basket is closed. called from basket page +# - display : display the list of all basketgroups for a vendor my $booksellerid = $input->param('booksellerid'); $template->param(booksellerid => $booksellerid); +my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid ); + +my $schema = Koha::Database->new()->schema(); +my $rs = $schema->resultset('VendorEdiAccount')->search( + { vendor_id => $booksellerid, } ); +$template->param( ediaccount => ($rs->count > 0)); if ( $op eq "add" ) { - if(! $booksellerid){ - $template->param( ungroupedlist => 1); - my @booksellers = GetBookSeller(''); - for (my $i=0; $i < scalar @booksellers; $i++) { - my $baskets = &GetBasketsByBookseller($booksellers[$i]->{id}); - for (my $j=0; $j < scalar @$baskets; $j++) { - if(! @$baskets[$i]->{closedate} || @$baskets[$i]->{basketgroupid}) { - splice(@$baskets, $j, 1); - $j--; - } - } - if (scalar @$baskets == 0){ - splice(@booksellers, $i, 1); - $i--; - } +# +# if no param('basketgroupid') is not defined, adds a new basketgroup +# else, edit (if it is open) or display (if it is close) the basketgroup basketgroupid +# the template will know if basketgroup must be displayed or edited, depending on the value of closed key +# + my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid ); + my $basketgroupid = $input->param('basketgroupid'); + my $billingplace; + my $deliveryplace; + my $freedeliveryplace; + if ( $basketgroupid ) { + # Get the selected baskets in the basketgroup to display them + my $selecteds = GetBasketsByBasketgroup($basketgroupid); + foreach my $basket(@{$selecteds}){ + $basket->{total} = BasketTotal($basket->{basketno}, $bookseller); } + $template->param(basketgroupid => $basketgroupid, + selectedbaskets => $selecteds); + + # Get general informations about the basket group to prefill the form + my $basketgroup = GetBasketgroup($basketgroupid); + $template->param( + name => $basketgroup->{name}, + deliverycomment => $basketgroup->{deliverycomment}, + freedeliveryplace => $basketgroup->{freedeliveryplace}, + ); + $billingplace = $basketgroup->{billingplace}; + $deliveryplace = $basketgroup->{deliveryplace}; + $freedeliveryplace = $basketgroup->{freedeliveryplace}; + $template->param( closedbg => ($basketgroup ->{'closed'}) ? 1 : 0); } else { - my $basketgroupid = $input->param('basketgroupid'); - my $billingplace; - my $deliveryplace; - my $freedeliveryplace; - if ( $basketgroupid ) { - # Get the selected baskets in the basketgroup to display them - my $selecteds = GetBasketsByBasketgroup($basketgroupid); - foreach (@{$selecteds}){ - $_->{total} = BasketTotal($_->{basketno}, $_); - } - $template->param(basketgroupid => $basketgroupid, - selectedbaskets => $selecteds); - - # Get general informations about the basket group to prefill the form - my $basketgroup = GetBasketgroup($basketgroupid); - $template->param( - name => $basketgroup->{name}, - deliverycomment => $basketgroup->{deliverycomment}, - freedeliveryplace => $basketgroup->{freedeliveryplace}, - ); - $billingplace = $basketgroup->{billingplace}; - $deliveryplace = $basketgroup->{deliveryplace}; - $freedeliveryplace = $basketgroup->{freedeliveryplace}; - } - - # determine default billing and delivery places depending on librarian homebranch and existing basketgroup data - my $borrower = GetMember( ( 'borrowernumber' => $loggedinuser ) ); - $billingplace = $billingplace || $borrower->{'branchcode'}; - $deliveryplace = $deliveryplace || $borrower->{'branchcode'}; + $template->param( closedbg => 0); + } + # determine default billing and delivery places depending on librarian homebranch and existing basketgroup data + my $patron = Koha::Patrons->find( $loggedinuser ); # FIXME Not needed if billingplace and deliveryplace are set + $billingplace = $billingplace || $patron->branchcode; + $deliveryplace = $deliveryplace || $patron->branchcode; - my $branches = C4::Branch::GetBranchesLoop( $billingplace ); - $template->param( billingplaceloop => $branches ); - $branches = C4::Branch::GetBranchesLoop( $deliveryplace ); - $template->param( deliveryplaceloop => $branches ); + $template->param( billingplace => $billingplace ); + $template->param( deliveryplace => $deliveryplace ); + $template->param( booksellerid => $booksellerid ); - $template->param( booksellerid => $booksellerid ); - } + # the template will display a unique basketgroup $template->param(grouping => 1); my $basketgroups = &GetBasketgroups($booksellerid); - my $bookseller = &GetBookSellerFromId($booksellerid); my $baskets = &GetBasketsByBookseller($booksellerid); - displaybasketgroups($basketgroups, $bookseller, $baskets); } elsif ($op eq 'mod_basket') { -#we want to modify an individual basket's group +# +# edit an individual basket contained in this basketgroup +# my $basketno=$input->param('basketno'); my $basketgroupid=$input->param('basketgroupid'); ModBasket( { basketno => $basketno, basketgroupid => $basketgroupid } ); print $input->redirect("basket.pl?basketno=" . $basketno); -} elsif ($op eq 'validate') { - if(! $booksellerid){ - $template->param( booksellererror => 1); - } else { - $template->param( booksellerid => $booksellerid ); - } - my $baskets = parseinputbaskets($booksellerid); - my ($basketgroups, $newbasketgroups) = parseinputbasketgroups($booksellerid, $baskets); - foreach my $nbgid (keys %$newbasketgroups){ -#javascript just picks an ID that's higher than anything else, the ID might not be correct..chenge it and change all the basket's basketgroupid as well - my $bgid = NewBasketgroup($newbasketgroups->{$nbgid}); - ${$newbasketgroups->{$nbgid}}->{'id'} = $bgid; - ${$newbasketgroups->{$nbgid}}->{'oldid'} = $nbgid; - } - foreach my $basket (@$baskets){ -#if the basket was added to a new basketgroup, first change the groupid to the groupid of the basket in mysql, because it contains the id from javascript otherwise. - if ( $basket->{'basketgroupid'} && $newbasketgroups->{$basket->{'basketgroupid'}} ){ - $basket->{'basketgroupid'} = ${$newbasketgroups->{$basket->{'basketgroupid'}}}->{'id'}; - } - ModBasket($basket); - } - foreach my $basketgroup (@$basketgroups){ - if(! $basketgroup->{'id'}){ - foreach my $basket (@{$basketgroup->{'baskets'}}){ - if($input->param('basket'.$basket->{'basketno'}.'changed')){ - ModBasket($basket); - } - } - } elsif ($input->param('basketgroup-'.$basketgroup->{'id'}.'-changed')){ - ModBasketgroup($basketgroup); - } - } - $basketgroups = &GetBasketgroups($booksellerid); - my $bookseller = &GetBookSellerFromId($booksellerid); - $baskets = &GetBasketsByBookseller($booksellerid); - - displaybasketgroups($basketgroups, $bookseller, $baskets); } elsif ( $op eq 'closeandprint') { +# +# close an open basketgroup and generates a pdf +# my $basketgroupid = $input->param('basketgroupid'); - CloseBasketgroup($basketgroupid); - printbasketgrouppdf($basketgroupid); exit; }elsif ($op eq 'print'){ +# +# print a closed basketgroup +# my $basketgroupid = $input->param('basketgroupid'); - printbasketgrouppdf($basketgroupid); exit; }elsif ( $op eq "export" ) { +# +# export a closed basketgroup in csv +# my $basketgroupid = $input->param('basketgroupid'); print $input->header( -type => 'text/csv', @@ -420,23 +337,28 @@ if ( $op eq "add" ) { print GetBasketGroupAsCSV( $basketgroupid, $input ); exit; }elsif( $op eq "delete"){ +# +# delete an closed basketgroup +# my $basketgroupid = $input->param('basketgroupid'); DelBasketgroup($basketgroupid); - print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid); - + print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid.'&listclosed=1'); }elsif ( $op eq 'reopen'){ +# +# reopen a closed basketgroup +# my $basketgroupid = $input->param('basketgroupid'); my $booksellerid = $input->param('booksellerid'); - ReOpenBasketgroup($basketgroupid); - - print $input->redirect('/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid . '#closed'); - + my $redirectpath = ((defined $input->param('mode'))&& ($input->param('mode') eq 'singlebg')) ?'/cgi-bin/koha/acqui/basketgroup.pl?op=add&basketgroupid='.$basketgroupid.'&booksellerid='.$booksellerid : '/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' .$booksellerid.'&listclosed=1'; + print $input->redirect($redirectpath); } elsif ( $op eq 'attachbasket') { - +# +# save a modified basketgroup, or creates a new basketgroup when a basket is closed. called from basket page +# # Getting parameters my $basketgroup = {}; - my @baskets = $input->param('basket'); + my @baskets = $input->multi_param('basket'); my $basketgroupid = $input->param('basketgroupid'); my $basketgroupname = $input->param('basketgroupname'); my $booksellerid = $input->param('booksellerid'); @@ -444,9 +366,9 @@ if ( $op eq "add" ) { my $deliveryplace = $input->param('deliveryplace'); my $freedeliveryplace = $input->param('freedeliveryplace'); my $deliverycomment = $input->param('deliverycomment'); - my $close = $input->param('close') ? 1 : 0; - # If we got a basketgroupname, we create a basketgroup + my $closedbg = $input->param('closedbg') ? 1 : 0; if ($basketgroupid) { + # If we have a basketgroupid we edit the basketgroup $basketgroup = { name => $basketgroupname, id => $basketgroupid, @@ -455,13 +377,14 @@ if ( $op eq "add" ) { deliveryplace => $deliveryplace, freedeliveryplace => $freedeliveryplace, deliverycomment => $deliverycomment, - closed => $close, + closed => $closedbg, }; ModBasketgroup($basketgroup); - if($close){ - + if($closedbg){ +# FIXME } }else{ + # we create a new basketgroup (with a closed basket) $basketgroup = { name => $basketgroupname, booksellerid => $booksellerid, @@ -470,22 +393,35 @@ if ( $op eq "add" ) { deliveryplace => $deliveryplace, freedeliveryplace => $freedeliveryplace, deliverycomment => $deliverycomment, - closed => $close, + closed => $closedbg, }; $basketgroupid = NewBasketgroup($basketgroup); } - - my $url = '/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid; - $url .= "&closed=1" if ($input->param("closed")); - print $input->redirect($url); + my $redirectpath = ((defined $input->param('mode')) && ($input->param('mode') eq 'singlebg')) ?'/cgi-bin/koha/acqui/basketgroup.pl?op=add&basketgroupid='.$basketgroupid.'&booksellerid='.$booksellerid : '/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=' . $booksellerid; + $redirectpath .= "&listclosed=1" if $closedbg ; + print $input->redirect($redirectpath ); +} elsif ( $op eq 'ediprint') { + my $basketgroupid = $input->param('basketgroupid'); + if ($template->param( 'ediaccount' )) { + generate_edifact_orders( $basketgroupid ); + exit; + } else { + $template->param('NoEDIMessage' => 1); + my $basketgroups = &GetBasketgroups($booksellerid); + my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid ); + my $baskets = &GetBasketsByBookseller($booksellerid); + + displaybasketgroups($basketgroups, $bookseller, $baskets); + } }else{ +# no param : display the list of all basketgroups for a given vendor my $basketgroups = &GetBasketgroups($booksellerid); - my $bookseller = &GetBookSellerFromId($booksellerid); + my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid ); my $baskets = &GetBasketsByBookseller($booksellerid); displaybasketgroups($basketgroups, $bookseller, $baskets); } -$template->param(closed => $input->param("closed")); +$template->param(listclosed => ((defined $input->param('listclosed')) && ($input->param('listclosed') eq '1'))? 1:0 ); #prolly won't use all these, maybe just use print, the rest can be done inside validate output_html_with_http_headers $input, $cookie, $template->output;