use C4::Biblio;
use C4::Debug;
use C4::SQLHelper qw(InsertInTable);
+use C4::Bookseller qw(GetBookSellerFromId);
+use C4::Templates qw(gettemplate);
use Time::localtime;
use HTML::Entities;
BEGIN {
# set the version for version checking
- $VERSION = 3.01;
+ $VERSION = 3.07.00.049;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(
&GetBasket &NewBasket &CloseBasket &DelBasket &ModBasket
- &GetBasketAsCSV
+ &GetBasketAsCSV &GetBasketGroupAsCSV
&GetBasketsByBookseller &GetBasketsByBasketgroup
&GetBasketsInfosByBookseller
&ModReceiveOrder &ModOrderBiblioitemNumber
&GetCancelledOrders
- &NewOrderItem &ModOrderItem
+ &NewOrderItem &ModOrderItem &ModItemOrder
&GetParcels &GetParcel
&GetContracts &GetContract
$dbh->do($query);
#find & return basketno MYSQL dependant, but $dbh->last_insert_id always returns null :-(
my $basket = $dbh->{'mysql_insertid'};
- ModBasketHeader($basket, $basketname || '', $basketnote || '', $basketbooksellernote || '', $basketcontractnumber || undef);
+ ModBasketHeader($basket, $basketname || '', $basketnote || '', $basketbooksellernote || '', $basketcontractnumber || undef, $booksellerid);
return $basket;
}
Export a basket as CSV
+$cgi parameter is needed for column name translation
+
=cut
sub GetBasketAsCSV {
- my ($basketno) = @_;
+ my ($basketno, $cgi) = @_;
my $basket = GetBasket($basketno);
my @orders = GetOrders($basketno);
my $contract = GetContract($basket->{'contractnumber'});
- my $csv = Text::CSV->new();
- my $output;
- # TODO: Translate headers
- my @headers = qw(contractname ordernumber entrydate isbn author title publishercode collectiontitle notes quantity rrp);
-
- $csv->combine(@headers);
- $output = $csv->string() . "\n";
+ my $template = C4::Templates::gettemplate("acqui/csv/basket.tmpl", "intranet", $cgi);
my @rows;
foreach my $order (@orders) {
- my @cols;
- # newlines are not valid characters for Text::CSV combine()
- $order->{'notes'} =~ s/[\r\n]+//g;
- push(@cols,
- $contract->{'contractname'},
- $order->{'ordernumber'},
- $order->{'entrydate'},
- $order->{'isbn'},
- $order->{'author'},
- $order->{'title'},
- $order->{'publishercode'},
- $order->{'collectiontitle'},
- $order->{'notes'},
- $order->{'quantity'},
- $order->{'rrp'},
- );
- push (@rows, \@cols);
+ my $bd = GetBiblioData( $order->{'biblionumber'} );
+ my $row = {
+ contractname => $contract->{'contractname'},
+ ordernumber => $order->{'ordernumber'},
+ entrydate => $order->{'entrydate'},
+ isbn => $order->{'isbn'},
+ author => $bd->{'author'},
+ title => $bd->{'title'},
+ publicationyear => $bd->{'publicationyear'},
+ publishercode => $bd->{'publishercode'},
+ collectiontitle => $bd->{'collectiontitle'},
+ notes => $order->{'notes'},
+ quantity => $order->{'quantity'},
+ rrp => $order->{'rrp'},
+ deliveryplace => $basket->{'deliveryplace'},
+ billingplace => $basket->{'billingplace'}
+ };
+ foreach(qw(
+ contractname author title publishercode collectiontitle notes
+ deliveryplace billingplace
+ ) ) {
+ # Double the quotes to not be interpreted as a field end
+ $row->{$_} =~ s/"/""/g if $row->{$_};
+ }
+ push @rows, $row;
}
- foreach my $row (@rows) {
- $csv->combine(@$row);
- $output .= $csv->string() . "\n";
+ @rows = sort {
+ if(defined $a->{publishercode} and defined $b->{publishercode}) {
+ $a->{publishercode} cmp $b->{publishercode};
+ }
+ } @rows;
- }
-
- return $output;
+ $template->param(rows => \@rows);
+ return $template->output;
}
+=head3 GetBasketGroupAsCSV
+
+=over 4
+
+&GetBasketGroupAsCSV($basketgroupid);
+
+Export a basket group as CSV
+
+$cgi parameter is needed for column name translation
+
+=back
+
+=cut
+
+sub GetBasketGroupAsCSV {
+ my ($basketgroupid, $cgi) = @_;
+ my $baskets = GetBasketsByBasketgroup($basketgroupid);
+
+ my $template = C4::Templates::gettemplate('acqui/csv/basketgroup.tmpl', 'intranet', $cgi);
+
+ my @rows;
+ for my $basket (@$baskets) {
+ my @orders = GetOrders( $$basket{basketno} );
+ my $contract = GetContract( $$basket{contractnumber} );
+ my $bookseller = GetBookSellerFromId( $$basket{booksellerid} );
+
+ foreach my $order (@orders) {
+ my $bd = GetBiblioData( $order->{'biblionumber'} );
+ my $row = {
+ clientnumber => $bookseller->{accountnumber},
+ basketname => $basket->{basketname},
+ ordernumber => $order->{ordernumber},
+ author => $bd->{author},
+ title => $bd->{title},
+ publishercode => $bd->{publishercode},
+ publicationyear => $bd->{publicationyear},
+ collectiontitle => $bd->{collectiontitle},
+ isbn => $order->{isbn},
+ quantity => $order->{quantity},
+ rrp => $order->{rrp},
+ discount => $bookseller->{discount},
+ ecost => $order->{ecost},
+ notes => $order->{notes},
+ entrydate => $order->{entrydate},
+ booksellername => $bookseller->{name},
+ bookselleraddress => $bookseller->{address1},
+ booksellerpostal => $bookseller->{postal},
+ contractnumber => $contract->{contractnumber},
+ contractname => $contract->{contractname},
+ };
+ foreach(qw(
+ basketname author title publishercode collectiontitle notes
+ booksellername bookselleraddress booksellerpostal contractname
+ basketgroupdeliveryplace basketgroupbillingplace
+ basketdeliveryplace basketbillingplace
+ ) ) {
+ # Double the quotes to not be interpreted as a field end
+ $row->{$_} =~ s/"/""/g if $row->{$_};
+ }
+ push @rows, $row;
+ }
+ }
+ $template->param(rows => \@rows);
+
+ return $template->output;
+
+}
+
=head3 CloseBasketgroup
&CloseBasketgroup($basketgroupno);
=head3 ModBasketHeader
- &ModBasketHeader($basketno, $basketname, $note, $booksellernote, $contractnumber);
+ &ModBasketHeader($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid);
Modifies a basket's header.
=item C<$contractnumber> is the "contractnumber" (foreign) key in the "aqbasket" table.
+=item C<$booksellerid> is the id (foreign) key in the "aqbooksellers" table for the vendor.
+
=back
=cut
sub ModBasketHeader {
- my ($basketno, $basketname, $note, $booksellernote, $contractnumber) = @_;
- my $query = "UPDATE aqbasket SET basketname=?, note=?, booksellernote=? WHERE basketno=?";
+ my ($basketno, $basketname, $note, $booksellernote, $contractnumber, $booksellerid) = @_;
+
+ my $query = "UPDATE aqbasket SET basketname=?, note=?, booksellernote=?, booksellerid=? WHERE basketno=?";
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
- $sth->execute($basketname,$note,$booksellernote,$basketno);
+ $sth->execute($basketname,$note,$booksellernote,$booksellerid,$basketno);
+
if ( $contractnumber ) {
my $query2 ="UPDATE aqbasket SET contractnumber=? WHERE basketno=?";
my $sth2 = $dbh->prepare($query2);
SELECT aqbasket.*,
SUM(aqorders.quantity) AS total_items,
COUNT(DISTINCT aqorders.biblionumber) AS total_biblios,
- SUM(IF(aqorders.datereceived IS NULL, aqorders.quantity, 0)) AS expected_items
+ SUM(
+ IF(aqorders.datereceived IS NULL
+ AND aqorders.datecancellationprinted IS NULL
+ , aqorders.quantity
+ , 0)
+ ) AS expected_items
FROM aqbasket
LEFT JOIN aqorders ON aqorders.basketno = aqbasket.basketno
WHERE booksellerid = ?
sub GetBasketsByBasketgroup {
my $basketgroupid = shift;
- my $query = "SELECT * FROM aqbasket
- LEFT JOIN aqcontract USING(contractnumber) WHERE basketgroupid=?";
+ my $query = qq{
+ SELECT *, aqbasket.booksellerid as booksellerid
+ FROM aqbasket
+ LEFT JOIN aqcontract USING(contractnumber) WHERE basketgroupid=?
+ };
my $dbh = C4::Context->dbh;
my $sth = $dbh->prepare($query);
$sth->execute($basketgroupid);
return 0;
}
+=head3 ModItemOrder
+
+ ModItemOrder($itemnumber, $ordernumber);
+
+Modifies the ordernumber of an item in aqorders_items.
+
+=cut
+
+sub ModItemOrder {
+ my ($itemnumber, $ordernumber) = @_;
+
+ return unless ($itemnumber and $ordernumber);
+
+ my $dbh = C4::Context->dbh;
+ my $query = qq{
+ UPDATE aqorders_items
+ SET ordernumber = ?
+ WHERE itemnumber = ?
+ };
+ my $sth = $dbh->prepare($query);
+ return $sth->execute($ordernumber, $itemnumber);
+}
+
#------------------------------------------------------------#
sub ModReceiveOrder {
my (
$biblionumber, $ordernumber, $quantrec, $user, $cost,
- $invoiceno, $freight, $rrp, $budget_id, $datereceived
+ $invoiceno, $freight, $rrp, $budget_id, $datereceived, $received_items
)
= @_;
my $dbh = C4::Context->dbh;
$order->{'quantity'} -= $quantrec;
$order->{'quantityreceived'} = 0;
my $newOrder = NewOrder($order);
-} else {
+ # Change ordernumber in aqorders_items for items not received
+ my @orderitems = GetItemnumbersFromOrder( $order->{'ordernumber'} );
+ my $count = scalar @orderitems;
+
+ for (my $i=0; $i<$count; $i++){
+ foreach (@$received_items){
+ splice (@orderitems, $i, 1) if ($orderitems[$i] == $_);
+ }
+ }
+ foreach (@orderitems) {
+ ModItemOrder($_, $newOrder);
+ }
+ } else {
$sth=$dbh->prepare("update aqorders
set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?,
unitprice=?,freight=?,rrp=?
sub SearchOrder {
#### -------- SearchOrder-------------------------------
- my ($ordernumber, $search, $supplierid, $basket) = @_;
+ my ( $ordernumber, $search, $ean, $supplierid, $basket ) = @_;
my $dbh = C4::Context->dbh;
my @args = ();
$query .= " AND (biblio.title like ? OR biblio.author LIKE ? OR biblioitems.isbn like ?)";
push @args, ("%$search%","%$search%","%$search%");
}
- if($supplierid){
+ if ($ean) {
+ $query .= " AND biblioitems.ean = ?";
+ push @args, $ean;
+ }
+ if ($supplierid) {
$query .= "AND aqbasket.booksellerid = ?";
push @args, $supplierid;
}
my $title = $params{title};
my $author = $params{author};
my $isbn = $params{isbn};
+ my $ean = $params{ean};
my $name = $params{name};
my $from_placed_on = $params{from_placed_on};
my $to_placed_on = $params{to_placed_on};
my $basket = $params{basket};
my $booksellerinvoicenumber = $params{booksellerinvoicenumber};
-
my @order_loop;
my $total_qty = 0;
my $total_qtyreceived = 0;
biblio.title,
biblio.author,
biblioitems.isbn,
+ biblioitems.ean,
aqorders.basketno,
- aqbasket.basketname,
- aqbasket.basketgroupid,
- aqbasketgroups.name as groupname,
+ aqbasket.basketname,
+ aqbasket.basketgroupid,
+ aqbasketgroups.name as groupname,
aqbooksellers.name,
- aqbasket.creationdate,
+ aqbasket.creationdate,
aqorders.datereceived,
aqorders.quantity,
aqorders.quantityreceived,
aqorders.biblionumber
FROM aqorders
LEFT JOIN aqbasket ON aqorders.basketno=aqbasket.basketno
- LEFT JOIN aqbasketgroups ON aqbasket.basketgroupid=aqbasketgroups.id
+ LEFT JOIN aqbasketgroups ON aqbasket.basketgroupid=aqbasketgroups.id
LEFT JOIN aqbooksellers ON aqbasket.booksellerid=aqbooksellers.id
LEFT JOIN biblioitems ON biblioitems.biblionumber=aqorders.biblionumber
LEFT JOIN biblio ON biblio.biblionumber=aqorders.biblionumber";
$query .= " AND biblioitems.isbn LIKE ? ";
push @query_params, "%$isbn%";
}
-
+ if ( defined $ean and $ean ) {
+ $query .= " AND biblioitems.ean = ? ";
+ push @query_params, "$ean";
+ }
if ( $name ) {
$query .= " AND aqbooksellers.name LIKE ? ";
push @query_params, "%$name%";