-#'
-sub getallorders {
- #gets all orders from a certain supplier, orders them alphabetically
- my ($supid)=@_;
- my $dbh = C4::Context->dbh;
- my @results = ();
- my $strsth="Select *,aqorders.title as suggestedtitle,biblio.title as truetitle from aqorders,biblio,biblioitems,aqbasket,aqbooksellers ";
- $strsth .= ",borrowers " if (C4::Context->preference("IndependantBranches"));
- $strsth .=" where aqorders.basketno=aqbasket.basketno and aqbasket.booksellerid=aqbooksellers.id and biblio.biblionumber=aqorders.biblionumber ";
- $strsth .= " and aqbasket.authorisedby=borrowers.borrowernumber" if (C4::Context->preference("IndependantBranches"));
- $strsth.=" and booksellerid=? and (cancelledby is NULL or cancelledby = '')
- and (quantityreceived < quantity or quantityreceived is NULL)
- and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
- aqorders.biblioitemnumber ";
- if (C4::Context->preference("IndependantBranches")) {
- my $userenv = C4::Context->userenv;
- unless ($userenv->{flags} == 1){
- $strsth .= " and (borrowers.branchcode = '".$userenv->{branch}."' or borrowers.branchcode ='')";
- }
- }
- $strsth .= " group by aqorders.biblioitemnumber order by biblio.title";
- my $sth=$dbh->prepare($strsth);
- $sth->execute($supid);
- while (my $data=$sth->fetchrow_hashref){
- push(@results,$data);
- }
- $sth->finish;
- return(scalar(@results),@results);
-}
-
-# FIXME - Never used
-sub getrecorders {
- #gets all orders from a certain supplier, orders them alphabetically
- my ($supid)=@_;
- my $dbh = C4::Context->dbh;
- my @results= ();
- my $sth=$dbh->prepare("Select * from aqorders,biblio,biblioitems where booksellerid=?
- and (cancelledby is NULL or cancelledby = '')
- and biblio.biblionumber=aqorders.biblionumber and biblioitems.biblioitemnumber=
- aqorders.biblioitemnumber and
- aqorders.quantityreceived>0
- and aqorders.datereceived >=now()
- group by aqorders.biblioitemnumber
- order by
- biblio.title");
- $sth->execute($supid);
- while (my $data=$sth->fetchrow_hashref){
- push(@results,$data);
- }
- $sth->finish;
- return(scalar(@results),@results);
-}
-
-=item ordersearch
-
- ($count, @results) = &ordersearch($search, $biblionumber, $complete);
+
+sub NewOrder {
+ my $orderinfo = shift;
+#### ------------------------------
+ my $dbh = C4::Context->dbh;
+ my @params;
+
+
+ # if these parameters are missing, we can't continue
+ for my $key (qw/basketno quantity biblionumber budget_id/) {
+ die "Mandatory parameter $key missing" unless $orderinfo->{$key};
+ }
+
+ if ( defined $orderinfo->{subscription} && $orderinfo->{'subscription'} eq 'yes' ) {
+ $orderinfo->{'subscription'} = 1;
+ } else {
+ $orderinfo->{'subscription'} = 0;
+ }
+ $orderinfo->{'entrydate'} ||= C4::Dates->new()->output("iso");
+ if (!$orderinfo->{quantityreceived}) {
+ $orderinfo->{quantityreceived} = 0;
+ }
+
+ my $ordernumber=InsertInTable("aqorders",$orderinfo);
+ return ( $orderinfo->{'basketno'}, $ordernumber );
+}
+
+
+
+#------------------------------------------------------------#
+
+=head3 NewOrderItem
+
+ &NewOrderItem();
+
+=cut
+
+sub NewOrderItem {
+ #my ($biblioitemnumber,$ordernumber, $biblionumber) = @_;
+ my ($itemnumber, $ordernumber) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = qq|
+ INSERT INTO aqorders_items
+ (itemnumber, ordernumber)
+ VALUES (?,?) |;
+
+ my $sth = $dbh->prepare($query);
+ $sth->execute( $itemnumber, $ordernumber);
+}
+
+#------------------------------------------------------------#
+
+=head3 ModOrder
+
+ &ModOrder(\%hashref);
+
+Modifies an existing order. Updates the order with order number
+$hashref->{'ordernumber'} and biblionumber $hashref->{'biblionumber'}. All
+other keys of the hash update the fields with the same name in the aqorders
+table of the Koha database.
+
+=cut
+
+sub ModOrder {
+ my $orderinfo = shift;
+
+ die "Ordernumber is required" if $orderinfo->{'ordernumber'} eq '' ;
+ die "Biblionumber is required" if $orderinfo->{'biblionumber'} eq '';
+
+ my $dbh = C4::Context->dbh;
+ my @params;
+# delete($orderinfo->{'branchcode'});
+ # the hash contains a lot of entries not in aqorders, so get the columns ...
+ my $sth = $dbh->prepare("SELECT * FROM aqorders LIMIT 1;");
+ $sth->execute;
+ my $colnames = $sth->{NAME};
+ my $query = "UPDATE aqorders SET ";
+
+ foreach my $orderinfokey (grep(!/ordernumber/, keys %$orderinfo)){
+ # ... and skip hash entries that are not in the aqorders table
+ # FIXME : probably not the best way to do it (would be better to have a correct hash)
+ next unless grep(/^$orderinfokey$/, @$colnames);
+ $query .= "$orderinfokey=?, ";
+ push(@params, $orderinfo->{$orderinfokey});
+ }
+
+ $query .= "timestamp=NOW() WHERE ordernumber=?";
+# push(@params, $specorderinfo{'ordernumber'});
+ push(@params, $orderinfo->{'ordernumber'} );
+ $sth = $dbh->prepare($query);
+ $sth->execute(@params);
+ $sth->finish;
+}
+
+#------------------------------------------------------------#
+
+=head3 ModOrderItem
+
+ &ModOrderItem(\%hashref);
+
+Modifies the itemnumber in the aqorders_items table. The input hash needs three entities:
+
+=over
+
+=item - itemnumber: the old itemnumber
+=item - ordernumber: the order this item is attached to
+=item - newitemnumber: the new itemnumber we want to attach the line to
+
+=back
+
+=cut
+
+sub ModOrderItem {
+ my $orderiteminfo = shift;
+ if (! $orderiteminfo->{'ordernumber'} || ! $orderiteminfo->{'itemnumber'} || ! $orderiteminfo->{'newitemnumber'}){
+ die "Ordernumber, itemnumber and newitemnumber is required";
+ }
+
+ my $dbh = C4::Context->dbh;
+
+ my $query = "UPDATE aqorders_items set itemnumber=? where itemnumber=? and ordernumber=?";
+ my @params = ($orderiteminfo->{'newitemnumber'}, $orderiteminfo->{'itemnumber'}, $orderiteminfo->{'ordernumber'});
+ my $sth = $dbh->prepare($query);
+ $sth->execute(@params);
+ return 0;
+}
+
+#------------------------------------------------------------#
+
+
+=head3 ModOrderBibliotemNumber
+
+ &ModOrderBiblioitemNumber($biblioitemnumber,$ordernumber, $biblionumber);
+
+Modifies the biblioitemnumber for an existing order.
+Updates the order with order number C<$ordernum> and biblionumber C<$biblionumber>.
+
+=cut
+
+#FIXME: is this used at all?
+sub ModOrderBiblioitemNumber {
+ my ($biblioitemnumber,$ordernumber, $biblionumber) = @_;
+ my $dbh = C4::Context->dbh;
+ my $query = "
+ UPDATE aqorders
+ SET biblioitemnumber = ?
+ WHERE ordernumber = ?
+ AND biblionumber = ?";
+ my $sth = $dbh->prepare($query);
+ $sth->execute( $biblioitemnumber, $ordernumber, $biblionumber );
+}
+
+#------------------------------------------------------------#
+
+=head3 ModReceiveOrder
+
+ &ModReceiveOrder($biblionumber, $ordernumber, $quantityreceived, $user,
+ $unitprice, $booksellerinvoicenumber, $biblioitemnumber,
+ $freight, $bookfund, $rrp);
+
+Updates an order, to reflect the fact that it was received, at least
+in part. All arguments not mentioned below update the fields with the
+same name in the aqorders table of the Koha database.
+
+If a partial order is received, splits the order into two. The received
+portion must have a booksellerinvoicenumber.
+
+Updates the order with bibilionumber C<$biblionumber> and ordernumber
+C<$ordernumber>.
+
+=cut
+
+
+sub ModReceiveOrder {
+ my (
+ $biblionumber, $ordernumber, $quantrec, $user, $cost,
+ $invoiceno, $freight, $rrp, $budget_id, $datereceived
+ )
+ = @_;
+ my $dbh = C4::Context->dbh;
+# warn "DATE BEFORE : $daterecieved";
+# $daterecieved=POSIX::strftime("%Y-%m-%d",CORE::localtime) unless $daterecieved;
+# warn "DATE REC : $daterecieved";
+ $datereceived = C4::Dates->output('iso') unless $datereceived;
+ my $suggestionid = GetSuggestionFromBiblionumber( $dbh, $biblionumber );
+ if ($suggestionid) {
+ ModSuggestion( {suggestionid=>$suggestionid,
+ STATUS=>'AVAILABLE',
+ biblionumber=> $biblionumber}
+ );
+ }
+
+ my $sth=$dbh->prepare("
+ SELECT * FROM aqorders
+ WHERE biblionumber=? AND aqorders.ordernumber=?");
+
+ $sth->execute($biblionumber,$ordernumber);
+ my $order = $sth->fetchrow_hashref();
+ $sth->finish();
+
+ if ( $order->{quantity} > $quantrec ) {
+ $sth=$dbh->prepare("
+ UPDATE aqorders
+ SET quantityreceived=?
+ , datereceived=?
+ , booksellerinvoicenumber=?
+ , unitprice=?
+ , freight=?
+ , rrp=?
+ , quantity=?
+ WHERE biblionumber=? AND ordernumber=?");
+
+ $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$quantrec,$biblionumber,$ordernumber);
+ $sth->finish;
+
+ # create a new order for the remaining items, and set its bookfund.
+ foreach my $orderkey ( "linenumber", "allocation" ) {
+ delete($order->{'$orderkey'});
+ }
+ $order->{'quantity'} -= $quantrec;
+ $order->{'quantityreceived'} = 0;
+ my $newOrder = NewOrder($order);
+} else {
+ $sth=$dbh->prepare("update aqorders
+ set quantityreceived=?,datereceived=?,booksellerinvoicenumber=?,
+ unitprice=?,freight=?,rrp=?
+ where biblionumber=? and ordernumber=?");
+ $sth->execute($quantrec,$datereceived,$invoiceno,$cost,$freight,$rrp,$biblionumber,$ordernumber);
+ $sth->finish;
+ }
+ return $datereceived;
+}
+#------------------------------------------------------------#
+
+=head3 SearchOrder
+
+@results = &SearchOrder($search, $biblionumber, $complete);