X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=acqui%2Fbooksellers.pl;h=634eb93d576fb3dd2e035db5eec3923f32423778;hb=bfc3ea8cc4f0746d4d5658d7c2e2353855bd2b29;hp=4332a28453bdf2f09beda41ebee9ae3548c1e1b4;hpb=04720ffed869b4a0862ffae7f9e0a980132addb1;p=koha_gimpoz diff --git a/acqui/booksellers.pl b/acqui/booksellers.pl index 4332a28453..634eb93d57 100755 --- a/acqui/booksellers.pl +++ b/acqui/booksellers.pl @@ -1,9 +1,10 @@ #!/usr/bin/perl #script to show suppliers and orders -#written by chris@katipo.co.nz 23/2/2000 # Copyright 2000-2002 Katipo Communications +# Copyright 2008-2009 BibLibre SARL +# Copyright 2010 PTFS Europe # # This file is part of Koha. # @@ -16,11 +17,9 @@ # 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., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA - -# $Id$ +# 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. =head1 NAME @@ -28,7 +27,7 @@ booksellers.pl =head1 DESCRIPTION -this script displays the list of suppliers & orders like C<$supplier> given on input arg. +this script displays the list of suppliers & baskets like C<$supplier> given on input arg. thus, this page brings differents features like to display supplier's details, to add an order for a specific supplier or to just add a new supplier. @@ -38,102 +37,130 @@ to add an order for a specific supplier or to just add a new supplier. =item supplier -C<$supplier> is the suplier we have to search order. -=back - -=item op +C<$supplier> is the string with which we search for a supplier -C can be equals to 'close' if we have to close a basket before building the page. +=back -=item basket +=item id or supplierid -the C we have to close if op is equal to 'close'. +The id of the supplier whose baskets we will display =back =cut use strict; +use warnings; use C4::Auth; use C4::Biblio; use C4::Output; use CGI; -use C4::Interface::CGI::Output; -use C4::Database; -use HTML::Template; -use C4::Acquisition; -use C4::Date; -use C4::Bookseller; - -my $query = new CGI; + +use C4::Dates qw/format_date/; +use C4::Bookseller qw/ GetBookSellerFromId GetBookSeller /; +use C4::Members qw/GetMember/; +use C4::Context; + +my $query = CGI->new; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { - template_name => "acqui/suppliers.tmpl", + { template_name => 'acqui/booksellers.tmpl', query => $query, - type => "intranet", + type => 'intranet', authnotrequired => 0, - flagsrequired => { acquisition => 1 }, + flagsrequired => { acquisition => '*' }, debug => 1, } ); #parameters my $supplier = $query->param('supplier'); +my $id = $query->param('id') || $query->param('supplierid'); +my @suppliers; + +if ($id) { + push @suppliers, GetBookSellerFromId($id); +} else { + @suppliers = GetBookSeller($supplier); +} -my @suppliers = GetBookSeller($supplier); -my $count = scalar @suppliers; +my $supplier_count = @suppliers; +if ( $supplier_count == 1 ) { + $template->param( + supplier_name => $suppliers[0]->{'name'}, + id => $suppliers[0]->{'id'} + ); +} -# check if we have to "close" a basket before building page -my $op = $query->param('op'); -my $basket = $query->param('basket'); -if ( $op eq 'close' ) { - CloseBasket($basket); +my $uid; +if ($loggedinuser) { + $uid = GetMember( borrowernumber => $loggedinuser )->{userid}; } +my $userenv = C4::Context::userenv; +my $viewbaskets = C4::Context->preference('AcqViewBaskets'); + +my $userbranch = $userenv->{branch}; + #build result page -my $toggle = 0; -my @loop_suppliers; -for ( my $i = 0 ; $i < $count ; $i++ ) { - my $orders = GetPendingOrders( $suppliers[$i]->{'id'} ); - my $ordcount = scalar @$orders; -# FIXME : $ordcount seems to be equals to 0 each times... - - my %line; - if ( $toggle == 0 ) { - $line{even} = 1; - $toggle = 1; - } - else { - $line{even} = 0; - $toggle = 0; - } - $line{supplierid} = $suppliers[$i]->{'id'}; - $line{name} = $suppliers[$i]->{'name'}; - $line{active} = $suppliers[$i]->{'active'}; - my @loop_basket; - for ( my $i2 = 0 ; $i2 < $ordcount ; $i2++ ) { - my %inner_line; - $inner_line{basketno} = $orders->[$i2]->{'basketno'}; - $inner_line{total} = $orders->[$i2]->{'count(*)'}; - $inner_line{authorisedby} = $orders->[$i2]->{'authorisedby'}; - $inner_line{surname} = $orders->[$i2]->{'firstname'}; - $inner_line{firstname} = $orders->[$i2]->{'surname'}; - $inner_line{creationdate} = - format_date( $orders->[$i2]->{'creationdate'} ); - $inner_line{closedate} = format_date( $orders->[$i2]->{'closedate'} ); - push @loop_basket, \%inner_line; +my $loop_suppliers = []; + +for my $vendor (@suppliers) { + my $baskets = get_vendors_baskets( $vendor->{id} ); + + my $loop_basket = []; + + for my $basket ( @{$baskets} ) { + my $authorisedby = $basket->{authorisedby}; + my $basketbranch = ''; # set a blank branch to start with + if ( GetMember( borrowernumber => $authorisedby ) ) { + # authorisedby may not be a valid borrowernumber; it's not foreign-key constrained! + $basketbranch = GetMember( borrowernumber => $authorisedby )->{branchcode}; + } + + if ($userenv->{'flags'} & 1 || #user is superlibrarian + (haspermission( $uid, { acquisition => q{*} } ) && #user has acq permissions and + ($viewbaskets eq 'all' || #user is allowed to see all baskets + ($viewbaskets eq 'branch' && $authorisedby && $userbranch eq $basketbranch) || #basket belongs to user's branch + ($basket->{authorisedby} && $viewbaskets == 'user' && $authorisedby == $loggedinuser) #user created this basket + ) + ) + ) { + for my $date_field (qw( creationdate closedate)) { + if ( $basket->{$date_field} ) { + $basket->{$date_field} = format_date( $basket->{$date_field} ); + } + } + push @{$loop_basket}, $basket; + } } - $line{loop_basket} = \@loop_basket; - push @loop_suppliers, \%line; + + push @{$loop_suppliers}, + { loop_basket => $loop_basket, + supplierid => $vendor->{id}, + name => $vendor->{name}, + active => $vendor->{active}, + }; + } $template->param( - loop_suppliers => \@loop_suppliers, - supplier => $supplier, - count => $count, - intranetcolorstylesheet => - C4::Context->preference("intranetcolorstylesheet"), - intranetstylesheet => C4::Context->preference("intranetstylesheet"), - IntranetNav => C4::Context->preference("IntranetNav"), + loop_suppliers => $loop_suppliers, + supplier => ( $id || $supplier ), + count => $supplier_count, ); output_html_with_http_headers $query, $cookie, $template->output; + +sub get_vendors_baskets { + my $supplier_id = shift; + my $dbh = C4::Context->dbh; + my $sql = <<'ENDSQL'; +select aqbasket.*, count(*) as total, borrowers.firstname, borrowers.surname +from aqbasket left join aqorders on aqorders.basketno = aqbasket.basketno +left join borrowers on aqbasket.authorisedby = borrowers.borrowernumber +where booksellerid = ? +AND ( aqorders.quantity > aqorders.quantityreceived OR quantityreceived IS NULL) +AND datecancellationprinted IS NULL +group by basketno +ENDSQL + return $dbh->selectall_arrayref( $sql, { Slice => {} }, $supplier_id ); +}