From 12831344dc31620432b532c2758dfb21f23a8a4d Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@biblibre.com>
Date: Wed, 18 Jan 2012 16:05:40 +0100
Subject: [PATCH] Bug 5336:Order search (search and UI enhancements)

You can now search orders by
- order status
- branchcode
- budget

New authorised value 'ORDRSTATUS' is created with following values:
  0 => New
  1 => Ordered
  2 => Partial
  3 => Complete
  4 => Deleted

New field aqorders.parent_ordernumber is added (which is mainly used by others enhancement).
It allows to know the main(=parent)  order for an order (if an order is partially received,
Koha creates another order. But it is the same order. We want to know this information).

To test: Search and check if results are consistent in histsearch.pl
---
 C4/Acquisition.pm                                  |  121 +++++++++++++++++---
 acqui/histsearch.pl                                |   50 +++++++-
 installer/data/mysql/de-DE/optional/auth_val.sql   |    7 ++
 installer/data/mysql/en/optional/auth_val.sql      |    7 ++
 installer/data/mysql/es-ES/optional/auth_val.sql   |    7 ++
 .../fr-FR/1-Obligatoire/authorised_values.sql      |    5 +
 installer/data/mysql/it-IT/necessari/auth_val.sql  |    7 ++
 installer/data/mysql/kohastructure.sql             |    1 +
 .../data/mysql/nb-NO/2-Valgfritt/auth_val.sql      |    7 ++
 installer/data/mysql/pl-PL/optional/auth_val.sql   |    7 ++
 installer/data/mysql/updatedatabase.pl             |   20 ++++
 .../prog/en/modules/acqui/histsearch.tt            |  102 ++++++++++++-----
 12 files changed, 294 insertions(+), 47 deletions(-)

diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm
index 17330e5..eaecc7f 100644
--- a/C4/Acquisition.pm
+++ b/C4/Acquisition.pm
@@ -28,7 +28,7 @@ use MARC::Record;
 use C4::Suggestions;
 use C4::Biblio;
 use C4::Debug;
-use C4::SQLHelper qw(InsertInTable);
+use C4::SQLHelper qw(InsertInTable UpdateInTable);
 use C4::Bookseller qw(GetBookSellerFromId);
 use C4::Templates qw(gettemplate);
 
@@ -75,6 +75,7 @@ BEGIN {
         &GetItemnumbersFromOrder
 
         &AddClaim
+        &GetBiblioCountByBasketno
     );
 }
 
@@ -225,6 +226,17 @@ sub CloseBasket {
     ";
     my $sth = $dbh->prepare($query);
     $sth->execute($basketno);
+
+    my @orders = GetOrders($basketno);
+    foreach my $order (@orders) {
+        $query = qq{
+            UPDATE aqorders
+            SET orderstatus = 1
+            WHERE ordernumber = ?;
+        };
+        $sth = $dbh->prepare($query);
+        $sth->execute($order->{'ordernumber'});
+    }
 }
 
 #------------------------------------------------------------#
@@ -464,6 +476,19 @@ sub ModBasket {
     my $dbh = C4::Context->dbh;
     my $sth = $dbh->prepare($query);
     $sth->execute(@params);
+
+    # set orders status = new
+    my @orders = GetOrders($basketinfo->{'basketno'});
+    foreach my $order (@orders) {
+        $query = qq{
+            UPDATE aqorders
+            SET orderstatus = 0
+            WHERE ordernumber = ?;
+        };
+        $sth = $dbh->prepare($query);
+        $sth->execute($order->{'ordernumber'});
+    }
+
     $sth->finish;
 }
 
@@ -1040,7 +1065,8 @@ The following keys are used: "biblionumber", "title", "basketno", "quantity", "n
 
 sub NewOrder {
     my $orderinfo = shift;
-#### ------------------------------
+    my $parent_ordernumber = shift;
+
     my $dbh = C4::Context->dbh;
     my @params;
 
@@ -1313,6 +1339,7 @@ sub ModReceiveOrder {
         $sth=$dbh->prepare("
             UPDATE aqorders
             SET quantity = ?
+                ordernumber = 2
             WHERE ordernumber = ?
         ");
 
@@ -1339,7 +1366,7 @@ sub ModReceiveOrder {
     } else {
         $sth=$dbh->prepare("update aqorders
                             set quantityreceived=?,datereceived=?,invoiceid=?,
-                                unitprice=?,rrp=?,ecost=?
+                                unitprice=?,rrp=?,ecost=?,orderstatus=3
                             where biblionumber=? and ordernumber=?");
         $sth->execute($quantrec,$datereceived,$invoiceid,$cost,$rrp,$ecost,$biblionumber,$ordernumber);
         $sth->finish;
@@ -1556,7 +1583,7 @@ sub DelOrder {
     my $dbh = C4::Context->dbh;
     my $query = "
         UPDATE aqorders
-        SET    datecancellationprinted=now()
+        SET    datecancellationprinted=now(), orderstatus=4
         WHERE  biblionumber=? AND ordernumber=?
     ";
     my $sth = $dbh->prepare($query);
@@ -1917,6 +1944,10 @@ sub GetHistory {
     my $basket = $params{basket};
     my $booksellerinvoicenumber = $params{booksellerinvoicenumber};
     my $basketgroupname = $params{basketgroupname};
+    my $budget = $params{budget};
+    my $branchcode = $params{branchcode};
+    my $orderstatus = $params{orderstatus};
+
     my @order_loop;
     my $total_qty         = 0;
     my $total_qtyreceived = 0;
@@ -1925,10 +1956,10 @@ sub GetHistory {
     my $dbh   = C4::Context->dbh;
     my $query ="
         SELECT
-            biblio.title,
-            biblio.author,
-	    biblioitems.isbn,
-        biblioitems.ean,
+            COALESCE(biblio.title,     deletedbiblio.title)     AS title,
+            COALESCE(biblio.author,    deletedbiblio.author)    AS author,
+            COALESCE(biblioitems.isbn, deletedbiblioitems.isbn) AS isbn,
+            COALESCE(biblioitems.ean,  deletedbiblioitems.ean)  AS ean,
             aqorders.basketno,
             aqbasket.basketname,
             aqbasket.basketgroupid,
@@ -1942,19 +1973,35 @@ sub GetHistory {
             aqorders.ordernumber,
             aqinvoices.invoicenumber,
             aqbooksellers.id as id,
-            aqorders.biblionumber
+            aqorders.biblionumber,
+            aqorders.orderstatus,
+            aqorders.parent_ordernumber";
+    $query .= ", aqbudgets.budget_id AS budget" if defined $budget;
+    $query .= ", aqorders.branchcode " if ( not C4::Context->preference("IndependantBranches")  and defined $branchcode and $branchcode );
+    $query .= "
         FROM aqorders
         LEFT JOIN aqbasket ON aqorders.basketno=aqbasket.basketno
         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 biblioitems ON biblioitems.biblionumber=aqorders.biblionumber
         LEFT JOIN biblio ON biblio.biblionumber=aqorders.biblionumber
-    LEFT JOIN aqinvoices ON aqorders.invoiceid = aqinvoices.invoiceid";
+        LEFT JOIN aqinvoices ON aqorders.invoiceid = aqinvoices.invoiceid
+        LEFT JOIN deletedbiblio ON deletedbiblio.biblionumber=aqorders.biblionumber
+        LEFT JOIN deletedbiblioitems ON deletedbiblioitems.biblionumber=aqorders.biblionumber
+        ";
+
+    $query .= " LEFT JOIN aqbudgets ON aqorders.budget_id=aqbudgets.budget_id"
+        if defined $budget;
+
+    if ( C4::Context->preference("IndependantBranches") ) {
+        $query .= " LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber";
+    } elsif ( defined $branchcode and $branchcode) {
+        $query .= " LEFT JOIN borrowers ON aqorders.branchcode=borrowers.branchcode"
+    }
 
-    $query .= " LEFT JOIN borrowers ON aqbasket.authorisedby=borrowers.borrowernumber"
-    if ( C4::Context->preference("IndependantBranches") );
+    $query .= " WHERE 1 ";
 
-    $query .= " WHERE (datecancellationprinted is NULL or datecancellationprinted='0000-00-00') ";
+    $query .= " AND (datecancellationprinted is NULL or datecancellationprinted='0000-00-00') " if $orderstatus ne '4';
 
     my @query_params  = ();
 
@@ -1973,7 +2020,7 @@ sub GetHistory {
         $query .= " AND biblioitems.isbn LIKE ? ";
         push @query_params, "%$isbn%";
     }
-    if ( defined $ean and $ean ) {
+    if ( $ean ) {
         $query .= " AND biblioitems.ean = ? ";
         push @query_params, "$ean";
     }
@@ -1982,6 +2029,11 @@ sub GetHistory {
         push @query_params, "%$name%";
     }
 
+    if ( $budget ) {
+        $query .= " AND aqbudgets.budget_id = ? ";
+        push @query_params, "$budget";
+    }
+
     if ( $from_placed_on ) {
         $query .= " AND creationdate >= ? ";
         push @query_params, $from_placed_on;
@@ -1992,6 +2044,11 @@ sub GetHistory {
         push @query_params, $to_placed_on;
     }
 
+    if ( defined $orderstatus and $orderstatus ne '') {
+        $query .= " AND aqorders.orderstatus = ? ";
+        push @query_params, "$orderstatus";
+    }
+
     if ($basket) {
         if ($basket =~ m/^\d+$/) {
             $query .= " AND aqorders.basketno = ? ";
@@ -2018,6 +2075,9 @@ sub GetHistory {
             $query .= " AND (borrowers.branchcode = ? OR borrowers.branchcode ='' ) ";
             push @query_params, $userenv->{branch};
         }
+    } elsif ( defined $branchcode and $branchcode ) {
+        $query .= " AND aqorders.branchcode = ? ";
+        push @query_params, $branchcode;
     }
     $query .= " ORDER BY id";
     my $sth = $dbh->prepare($query);
@@ -2027,9 +2087,9 @@ sub GetHistory {
         $line->{count} = $cnt++;
         $line->{toggle} = 1 if $cnt % 2;
         push @order_loop, $line;
-        $total_qty         += $line->{'quantity'};
-        $total_qtyreceived += $line->{'quantityreceived'};
-        $total_price       += $line->{'quantity'} * $line->{'ecost'};
+        $total_qty         += ( $line->{quantity} ) ? $line->{quantity} : 0;
+        $total_qtyreceived += ( $line->{quantityreceived} ) ? $line->{quantityreceived} : 0;
+        $total_price       += ( $line->{quantity} and $line->{ecost} ) ? $line->{quantity} * $line->{ecost} : 0;
     }
     return \@order_loop, $total_qty, $total_price, $total_qtyreceived;
 }
@@ -2491,6 +2551,31 @@ sub ReopenInvoice {
     $sth->execute($invoiceid);
 }
 
+=head3 GetBiblioCountByBasketno
+
+$biblio_count = &GetBiblioCountByBasketno($basketno);
+
+Looks up the biblio's count that has basketno value $basketno
+
+Returns a quantity
+
+=cut
+
+sub GetBiblioCountByBasketno {
+    my ($basketno) = @_;
+    my $dbh          = C4::Context->dbh;
+    my $query        = "
+        SELECT COUNT( DISTINCT( biblionumber ) )
+        FROM   aqorders
+        WHERE  basketno = ?
+            AND (datecancellationprinted IS NULL OR datecancellationprinted='0000-00-00')
+        ";
+
+    my $sth = $dbh->prepare($query);
+    $sth->execute($basketno);
+    return $sth->fetchrow;
+}
+
 1;
 __END__
 
diff --git a/acqui/histsearch.pl b/acqui/histsearch.pl
index e89bcae..9705e53 100755
--- a/acqui/histsearch.pl
+++ b/acqui/histsearch.pl
@@ -57,6 +57,8 @@ use C4::Output;
 use C4::Acquisition;
 use C4::Dates;
 use C4::Debug;
+use C4::Branch;
+use C4::Koha;
 
 my $input = new CGI;
 my $title                   = $input->param( 'title');
@@ -70,6 +72,10 @@ my $booksellerinvoicenumber = $input->param( 'booksellerinvoicenumber' );
 my $do_search               = $input->param('do_search') || 0;
 my $from_placed_on          = C4::Dates->new($input->param('from'));
 my $to_placed_on            = C4::Dates->new($input->param('to'));
+my $budget                  = $input->param( 'budget' );
+my $branchcode              = $input->param( 'branchcode' );
+my $orderstatus             = $input->param( 'orderstatus' );
+
 if ( not $input->param('from') ) {
     # FIXME Dirty but we can't sent a Date::Calc to C4::Dates ?
     # We would use a function like Add_Delta_YM(-1, 0, 0);
@@ -110,21 +116,59 @@ if ($do_search) {
         basket => $basket,
         booksellerinvoicenumber => $booksellerinvoicenumber,
         basketgroupname => $basketgroupname,
+        budget => $budget,
+        branchcode => $branchcode,
+        orderstatus => $orderstatus,
     );
 }
 
 my $from_date = $from_placed_on ? $from_placed_on->output('syspref') : undef;
 my $to_date = $to_placed_on ? $to_placed_on->output('syspref') : undef;
 
+my $budgetperiods = C4::Budgets::GetBudgetPeriods;
+my $bp_loop = $budgetperiods;
+for my $bp ( @{$budgetperiods} ) {
+    my $hierarchy = C4::Budgets::GetBudgetHierarchy( $$bp{budget_period_id} );
+    for my $budget ( @{$hierarchy} ) {
+        $$budget{budget_display_name} = sprintf("%s", ">" x $$budget{depth} . $$budget{budget_name});
+    }
+    $$bp{hierarchy} = $hierarchy;
+}
+
+if ( not C4::Context->preference("IndependantBranches") ){
+    my $branches = GetBranches();
+    my @branchloop;
+    foreach my $thisbranch ( keys %$branches ) {
+        my %row = (
+            value      => $thisbranch,
+            branchname => $branches->{$thisbranch}->{'branchname'},
+        );
+        push @branchloop, \%row;
+    }
+    $template->param(
+        branchcode           => $branchcode,
+        display_branchcode   => !C4::Context->preference("IndependantBranches"),
+        branchloop          => \@branchloop
+    );
+}
+
+my $orderstatusloop = GetAuthorisedValues( "ORDRSTATUS" );
+my %order_status = map {
+    $_->{authorised_value} => $_->{lib}
+} @$orderstatusloop;
+
+$_->{lib_orderstatus} = $order_status{$_->{orderstatus}}
+    for @$order_loop;
+
 $template->param(
-    suggestions_loop        => $order_loop,
+    order_loop              => $order_loop,
     total_qty               => $total_qty,
     total_qtyreceived       => $total_qtyreceived,
     total_price             => sprintf( "%.2f", $total_price ),
     numresults              => $order_loop ? scalar(@$order_loop) : undef,
     title                   => $title,
     author                  => $author,
-    isbn		    => $isbn,
+    isbn                    => $isbn,
     ean                     => $ean,
     name                    => $name,
     basket                  => $basket,
@@ -132,6 +176,8 @@ $template->param(
     basketgroupname         => $basketgroupname,
     from_placed_on          => $from_date,
     to_placed_on            => $to_date,
+    bp_loop                 => $bp_loop,
+    orderstatusloop         => $orderstatusloop,
     DHTMLcalendar_dateformat=> C4::Dates->DHTMLcalendar(),
     dateformat              => C4::Dates->new()->format(),
     debug                   => $debug || $input->param('debug') || 0,
diff --git a/installer/data/mysql/de-DE/optional/auth_val.sql b/installer/data/mysql/de-DE/optional/auth_val.sql
index 3c45e08..9f9bb9b 100644
--- a/installer/data/mysql/de-DE/optional/auth_val.sql
+++ b/installer/data/mysql/de-DE/optional/auth_val.sql
@@ -57,3 +57,10 @@ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_
 INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'PAT', 'Benutzer');
 INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACQ', 'Erwerbung');
 INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACC', 'Gebühren');
+
+-- order status
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '0', 'New');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '1', 'Ordered');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '2', 'Partial');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '3', 'Complete');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '4', 'Deleted');
diff --git a/installer/data/mysql/en/optional/auth_val.sql b/installer/data/mysql/en/optional/auth_val.sql
index db6df3d..66e34b0 100644
--- a/installer/data/mysql/en/optional/auth_val.sql
+++ b/installer/data/mysql/en/optional/auth_val.sql
@@ -57,3 +57,10 @@ INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_
 INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'PAT', 'Patrons');
 INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACQ', 'Acquisitions');
 INSERT INTO authorised_values (category, authorised_value, lib) VALUES ('REPORT_GROUP', 'ACC', 'Accounts');
+
+-- order status
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '0', 'New');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '1', 'Ordered');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '2', 'Partial');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '3', 'Complete');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '4', 'Deleted');
diff --git a/installer/data/mysql/es-ES/optional/auth_val.sql b/installer/data/mysql/es-ES/optional/auth_val.sql
index e1c7917..1ab14d5 100644
--- a/installer/data/mysql/es-ES/optional/auth_val.sql
+++ b/installer/data/mysql/es-ES/optional/auth_val.sql
@@ -50,3 +50,10 @@ INSERT INTO `authorised_values` (category, authorised_value, lib) VALUES ('BOR_N
 -- OPAC Suggestions reasons
 INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('OPAC_SUG','damaged','The copy on the shelf is damaged','The copy on the shelf is damaged');
 INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('OPAC_SUG','bestseller','Upcoming title by popular author','Upcoming title by popular author');
+
+-- order status
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '0', 'New');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '1', 'Ordered');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '2', 'Partial');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '3', 'Complete');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '4', 'Deleted');
diff --git a/installer/data/mysql/fr-FR/1-Obligatoire/authorised_values.sql b/installer/data/mysql/fr-FR/1-Obligatoire/authorised_values.sql
index 8c46b7b..a527dfd 100644
--- a/installer/data/mysql/fr-FR/1-Obligatoire/authorised_values.sql
+++ b/installer/data/mysql/fr-FR/1-Obligatoire/authorised_values.sql
@@ -351,3 +351,8 @@ INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES
 INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'qualif', '295', 'Donneur de grades');
 INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'qualif', '010', 'Adaptateur');
 INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'LOC', 'En reliure', 'En reliure');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '0', 'Nouveau');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '1', 'Demandé');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '2', 'Partielle');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '3', 'Complète');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '4', 'Supprimée')
diff --git a/installer/data/mysql/it-IT/necessari/auth_val.sql b/installer/data/mysql/it-IT/necessari/auth_val.sql
index cd78c83..d6d2707 100644
--- a/installer/data/mysql/it-IT/necessari/auth_val.sql
+++ b/installer/data/mysql/it-IT/necessari/auth_val.sql
@@ -79,4 +79,11 @@ INSERT INTO authorised_values (category, authorised_value, lib) VALUES
 ('LANG', 'fre', 'francese'),
 ('LANG', 'lat', 'latino');
 
+-- order status
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '0', 'New');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '1', 'Ordered');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '2', 'Partial');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '3', 'Complete');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '4', 'Deleted');
+
 SET FOREIGN_KEY_CHECKS=1;
diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql
index ddf4b0f..521da86 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -2805,6 +2805,7 @@ CREATE TABLE `aqorders` ( -- information related to the basket line items
   `claims_count` int(11) default 0, -- count of claim letters generated
   `claimed_date` date default NULL, -- last date a claim was generated
   parent_ordernumber int(11) default NULL, -- ordernumber of parent order line, or same as ordernumber if no parent
+  `orderstatus` tinyint(2) default 0, -- the current status for this line item
   PRIMARY KEY  (`ordernumber`),
   KEY `basketno` (`basketno`),
   KEY `biblionumber` (`biblionumber`),
diff --git a/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql b/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql
index 3deeae2..9073015 100644
--- a/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql
+++ b/installer/data/mysql/nb-NO/2-Valgfritt/auth_val.sql
@@ -71,3 +71,10 @@ INSERT INTO `authorised_values` (category, authorised_value, lib) VALUES ('BOR_N
 -- OPAC Suggestions reasons
 INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('OPAC_SUG','damaged','Eksemplaret på hylla er skadet','Eksemplaret på hylla er skadet');
 INSERT INTO authorised_values (category,authorised_value,lib,lib_opac) VALUES ('OPAC_SUG','bestseller','Kommende tittel av populær forfatter','Kommende tittel av populær forfatter');
+
+-- order status
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '0', 'New');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '1', 'Ordered');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '2', 'Partial');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '3', 'Complete');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '4', 'Deleted');
diff --git a/installer/data/mysql/pl-PL/optional/auth_val.sql b/installer/data/mysql/pl-PL/optional/auth_val.sql
index 0bc10c9..447589d 100644
--- a/installer/data/mysql/pl-PL/optional/auth_val.sql
+++ b/installer/data/mysql/pl-PL/optional/auth_val.sql
@@ -38,3 +38,10 @@ INSERT INTO `authorised_values` (category, authorised_value, lib) VALUES ('NOT_L
 
 -- restricted status of an item, linked to items.restricted
 INSERT INTO `authorised_values` (category, authorised_value, lib) VALUES ('RESTRICTED','1','Restricted Access');
+
+-- order status
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '0', 'New');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '1', 'Ordered');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '2', 'Partial');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '3', 'Complete');
+INSERT INTO `authorised_values` ( `category`, `authorised_value`, `lib`) VALUES ( 'ORDRSTATUS', '4', 'Deleted');
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 39e4bde..5ddab4a 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -6181,6 +6181,26 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
     SetVersion ($DBversion);
 }
 
+$DBversion = "3.11.00.XXX";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    my $return_count;
+    eval { $return_count = $dbh->do("SELECT 1 FROM authorised_values WHERE category='ORDRSTATUS'"); };
+    if ( $return_count == 0 ) {
+        $dbh->do("INSERT IGNORE INTO authorised_values ( category, authorised_value, lib) VALUES ( 'ORDRSTATUS', '0', 'New')");
+        $dbh->do("INSERT IGNORE INTO authorised_values ( category, authorised_value, lib) VALUES ( 'ORDRSTATUS', '1', 'Ordered')");
+        $dbh->do("INSERT IGNORE INTO authorised_values ( category, authorised_value, lib) VALUES ( 'ORDRSTATUS', '2', 'Partial')");
+        $dbh->do("INSERT IGNORE INTO authorised_values ( category, authorised_value, lib) VALUES ( 'ORDRSTATUS', '3', 'Complete')");
+        $dbh->do("INSERT IGNORE INTO authorised_values ( category, authorised_value, lib) VALUES ( 'ORDRSTATUS', '4', 'Deleted')");
+        $dbh->do("ALTER TABLE aqorders ADD COLUMN orderstatus tinyint(2) DEFAULT 0 AFTER parent_ordernumber");
+        $dbh->do("UPDATE aqorders SET orderstatus=1 WHERE basketno IN (SELECT basketno FROM aqbasket WHERE closedate IS NOT NULL)");
+        $dbh->do("UPDATE aqorders SET orderstatus=2 WHERE quantity > quantityreceived AND quantityreceived > 0");
+        $dbh->do("UPDATE aqorders SET orderstatus=3 WHERE quantity=quantityreceived");
+        $dbh->do("UPDATE aqorders SET orderstatus=4 WHERE datecancellationprinted IS NOT NULL");
+    }
+    print "Upgrade to $DBversion done (Add category ORDRSTATUS values in authorised_values table)\n";
+    SetVersion($DBversion);
+}
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt
index 5659c1d..b860696 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/histsearch.tt
@@ -1,6 +1,6 @@
 [% USE KohaDates %]
 [% INCLUDE 'doc-head-open.inc' %]
-<title>Koha &rsaquo; Acquisitions &rsaquo; [% IF ( suggestions_loop ) %]Orders search &rsaquo; Search results[% ELSE %]Order search[% END %]</title>
+<title>Koha &rsaquo; Acquisitions &rsaquo; [% IF ( order_loop ) %]Orders search &rsaquo; Search results[% ELSE %]Order search[% END %]</title>
 <link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
 [% INCLUDE 'doc-head-close.inc' %]
 [% INCLUDE 'calendar.inc' %]
@@ -21,7 +21,7 @@
 [% INCLUDE 'header.inc' %]
 [% INCLUDE 'acquisitions-search.inc' %]
 
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/acqui/acqui-home.pl">Acquisitions</a> &rsaquo; [% IF ( suggestions_loop ) %]<a href="/cgi-bin/koha/acqui/histsearch.pl">Orders search</a> &rsaquo; Search results[% ELSE %]Order search[% END %]</div>
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/acqui/acqui-home.pl">Acquisitions</a> &rsaquo; [% IF ( order_loop ) %]<a href="/cgi-bin/koha/acqui/histsearch.pl">Orders search</a> &rsaquo; Search results[% ELSE %]Order search[% END %]</div>
 
 <div id="doc3" class="yui-t2">
    
@@ -29,7 +29,7 @@
 	<div id="yui-main">
 	<div class="yui-b">
 	
-		[% UNLESS ( suggestions_loop ) %]<form action="/cgi-bin/koha/acqui/histsearch.pl" method="post">
+		[% UNLESS ( order_loop ) %]<form action="/cgi-bin/koha/acqui/histsearch.pl" method="post">
 <fieldset class="rows">
 	<legend>Search Orders</legend>
 		<ol>
@@ -46,6 +46,47 @@
             <label for="basketgroupname">Basket group:</label>
             <input type="text" name="basketgroupname" id="basketgroupname" value="[% basketgroupname %]" />
         </li>
+
+        <li>
+            <label for="orderstatus">Order Status: </label>
+            <select name="orderstatus" id="orderstatus">
+                <option value=""></option>
+                [% FOREACH order_loo IN orderstatusloop %]
+                    <option value="[% order_loo.authorised_value %]">[% order_loo.lib %]</option>
+                [% END %]
+            </select>
+        </li>
+
+        [% IF ( display_branchcode ) %]
+            <li>
+                <label for="branchcode">Branch: </label>
+                <select name="branchcode" id="branchcode">
+                    <option value=""></option>
+                    [% FOREACH branch IN branchloop %]
+                        <option value="[% branch.value %]">
+                            [% branch.value %] - [% branch.branchname %]
+                        </option>
+                    [% END %]
+                </select>
+            </li>
+        [% END %]
+
+        <li>
+            <label for="budget">Budget: </label>
+            <select name="budget" id="budget">
+                <option value="">All budgets</option>
+                [% FOREACH bp_loo IN bp_loop %]
+                    <optgroup label="[% bp_loo.budget_period_description %]">
+                    [% FOREACH h_loo IN bp_loo.hierarchy %]
+                        <option type="text" name="budget" value="[% h_loo.budget_id %]" branchcode="[% h_loo.budget_branchcode %]">
+                            [% h_loo.budget_display_name %]
+                        </option>
+                    [% END %]
+                    </optgroup>
+                [% END %]
+            </select>
+        </li>
+
 		<li><label for="from">From: </label> 
         <input type="text" size="10" id="from" name="from" value="[% from_placed_on %]" class="datepickerfrom" />
 				<div class="hint">[% INCLUDE 'date-format.inc' %]</div>
@@ -59,11 +100,12 @@
     <input type="hidden" name="do_search" value="1" />
 	<fieldset class="action"><input type="submit" value="Search" /></fieldset>
 	</form>[% END %]
-    [% IF ( suggestions_loop ) %]<h1>Search results</h1>
+    [% IF ( order_loop ) %]<h1>Search results</h1>
 	<div id="acqui_histsearch">
         <table id="histsearcht">
             <thead>
 			<tr>
+                <th>Order line</th>
 				<th>Basket</th>
 				<th>Basket group</th>
                 <th>Invoice number</th>
@@ -72,41 +114,47 @@
 				<th>Vendor</th>
 				<th>Placed on</th>
 				<th>Received on</th>
-				<th>Quantity ordered</th>
+                <th>Status</th>
+				<th>Quantity received</th>
+                <th>Pending order</th>
 				<th>Unit cost</th>
 			</tr>
             </thead>
             <tbody>
-			[% FOREACH suggestions_loo IN suggestions_loop %]
-				<tr>
-                    <td>[% suggestions_loo.basketname %] (<a href="basket.pl?basketno=[% suggestions_loo.basketno %]">[% suggestions_loo.basketno %]</a>)</td>
+            [% FOREACH order IN order_loop %]
+                <tr>
+                    <td>[% order.parent_ordernumber %]</td>
+                    <td>[% order.basketname %] (<a href="basket.pl?basketno=[% order.basketno %]">[% order.basketno %]</a>)</td>
                     <td>
-                        [% IF ( suggestions_loo.basketgroupid ) %]
-                            [% suggestions_loo.groupname %] (<a href="basketgroup.pl?booksellerid=[% suggestions_loo.id %]">[% suggestions_loo.basketgroupid %]</a>)
+                        [% IF ( order.basketgroupid ) %]
+                            [% order.groupname %] (<a href="basketgroup.pl?booksellerid=[% order.id %]">[% order.basketgroupid %]</a>)
                         [% ELSE %]
                             &nbsp;
                         [% END %]
                     </td>
-					<td>[% IF ( suggestions_loo.invoicenumber ) %]
-					        <a href="/cgi-bin/koha/acqui/parcel.pl?invoice=[% suggestions_loo.invoicenumber %]&amp;booksellerid=[% suggestions_loo.id %]&amp;datereceived=[% suggestions_loo.datereceived %]">[% suggestions_loo.invoicenumber %]</a>
-					    [% ELSE %]
-					        &nbsp;
-					    [% END %]
-					</td>
-                    <td>[% suggestions_loo.ordernumber %]</td>
-					<td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% suggestions_loo.biblionumber %]">[% suggestions_loo.title |html %]</a>
-                        <br />[% suggestions_loo.author %] <br /> [% suggestions_loo.isbn %]</td>
-					<td><a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% suggestions_loo.id %]">[% suggestions_loo.name %]</a></td>
-					<td>[% suggestions_loo.creationdate | $KohaDates %]</td>
+                    <td>[% IF ( order.invoicenumber ) %]
+                            <a href="/cgi-bin/koha/acqui/parcel.pl?invoice=[% order.invoicenumber %]&amp;booksellerid=[% order.id %]&amp;datereceived=[% order.datereceived %]">[% order.invoicenumber %]</a>
+                        [% ELSE %]
+                            &nbsp;
+                        [% END %]
+                    </td>
+                    <td>[% order.ordernumber %]</td>
+                    <td>
+                        <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% order.biblionumber %]">[% order.title |html %]</a>
+                        <br />[% order.author %] <br /> [% IF ( order.internalnotes ) %][% order.internalnotes %]<br />[% END %][% order.isbn %]</td>
+                    <td><a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% order.id %]">[% order.name %]</a></td>
+                    <td>[% order.creationdate | $KohaDates %]</td>
                     <td>
-                        [% IF suggestions_loo.datereceived %]
-                            [% suggestions_loo.datereceived | $KohaDates %]
+                        [% IF order.datereceived %]
+                            [% order.datereceived | $KohaDates %]
                         [% END %]
                     </td>
-					<td>[% suggestions_loo.quantity %]</td>
-					<td>[% suggestions_loo.ecost %]</td>
-				</tr>
-			[% END %]
+                    <td>[% order.lib_orderstatus %]</td>
+                    <td>[% order.quantityreceived %]</td>
+                    <td>[% order.quantity %]</td>
+                    <td>[% order.ecost %]</td>
+                </tr>
+            [% END %]
             </tbody>
 		</table>
 	</div>[% ELSE %][% END %]
-- 
1.7.10.4