Bug 5349: Create a table for order line transfers
authorJulian Maurice <julian.maurice@biblibre.com>
Tue, 2 Jul 2013 10:46:37 +0000 (10:46 +0000)
committerGalen Charlton <gmc@esilibrary.com>
Sun, 8 Sep 2013 22:38:28 +0000 (22:38 +0000)
This allow to keep transfers informations without having untranslatable
strings in database.

Signed-off-by: sonia <koha@univ-lyon3.fr>
Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
C4/Acquisition.pm
acqui/basket.pl
installer/data/mysql/kohastructure.sql
installer/data/mysql/updatedatabase.pl
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/basket.tt

index 5662e0b..ed9c215 100644 (file)
@@ -939,11 +939,14 @@ sub GetOrders {
         SELECT biblio.*,biblioitems.*,
                 aqorders.*,
                 aqbudgets.*,
-                biblio.title
+                biblio.title,
+                aqorders_transfers.ordernumber_from AS transferred_from,
+                aqorders_transfers.timestamp AS transferred_from_timestamp
         FROM    aqorders
             LEFT JOIN aqbudgets        ON aqbudgets.budget_id = aqorders.budget_id
             LEFT JOIN biblio           ON biblio.biblionumber = aqorders.biblionumber
             LEFT JOIN biblioitems      ON biblioitems.biblionumber =biblio.biblionumber
+            LEFT JOIN aqorders_transfers ON aqorders_transfers.ordernumber_to = aqorders.ordernumber
         WHERE   basketno=?
             AND (datecancellationprinted IS NULL OR datecancellationprinted='0000-00-00')
     ";
@@ -1265,11 +1268,18 @@ sub GetCancelledOrders {
 
     my $dbh   = C4::Context->dbh;
     my $query = "
-        SELECT biblio.*, biblioitems.*, aqorders.*, aqbudgets.*
+        SELECT
+            biblio.*,
+            biblioitems.*,
+            aqorders.*,
+            aqbudgets.*,
+            aqorders_transfers.ordernumber_to AS transferred_to,
+            aqorders_transfers.timestamp AS transferred_to_timestamp
         FROM aqorders
           LEFT JOIN aqbudgets   ON aqbudgets.budget_id = aqorders.budget_id
           LEFT JOIN biblio      ON biblio.biblionumber = aqorders.biblionumber
           LEFT JOIN biblioitems ON biblioitems.biblionumber = biblio.biblionumber
+          LEFT JOIN aqorders_transfers ON aqorders_transfers.ordernumber_from = aqorders.ordernumber
         WHERE basketno = ?
           AND (datecancellationprinted IS NOT NULL
                AND datecancellationprinted <> '0000-00-00')
@@ -1617,42 +1627,22 @@ sub TransferOrder {
 
     my $order = GetOrder( $ordernumber );
     return if $order->{datereceived};
+    my $basket = GetBasket($basketno);
+    return unless $basket;
 
-    my $today = C4::Dates->new()->output("iso");
-    my $query = qq{
-        SELECT aqbooksellers.name
-        FROM aqorders
-            LEFT JOIN aqbasket ON aqorders.basketno = aqbasket.basketno
-            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
-        WHERE aqorders.ordernumber = ?
-    };
     my $dbh = C4::Context->dbh;
-    my $sth = $dbh->prepare($query);
-    $sth->execute($ordernumber);
-    my ($booksellerfromname) = $sth->fetchrow_array;
-
-    $query = qq{
-        SELECT aqbooksellers.name
-        FROM aqbasket
-            LEFT JOIN aqbooksellers ON aqbasket.booksellerid = aqbooksellers.id
-        WHERE aqbasket.basketno = ?
-    };
-    $sth = $dbh->prepare($query);
-    $sth->execute($basketno);
-    my ($booksellertoname) = $sth->fetchrow_array;
+    my ($query, $sth, $rv);
 
     $query = qq{
         UPDATE aqorders
-        SET datecancellationprinted = CAST(NOW() AS date),
-            internalnotes = ?
+        SET datecancellationprinted = CAST(NOW() AS date)
         WHERE ordernumber = ?
     };
     $sth = $dbh->prepare($query);
-    $sth->execute("Cancelled and transfered to $booksellertoname on $today", $ordernumber);
+    $rv = $sth->execute($ordernumber);
 
     delete $order->{'ordernumber'};
     $order->{'basketno'} = $basketno;
-    $order->{'internalnotes'} = "Transfered from $booksellerfromname on $today";
     my $newordernumber;
     (undef, $newordernumber) = NewOrder($order);
 
@@ -1664,6 +1654,13 @@ sub TransferOrder {
     $sth = $dbh->prepare($query);
     $sth->execute($newordernumber, $ordernumber);
 
+    $query = q{
+        INSERT INTO aqorders_transfers (ordernumber_from, ordernumber_to)
+        VALUES (?, ?)
+    };
+    $sth = $dbh->prepare($query);
+    $sth->execute($ordernumber, $newordernumber);
+
     return $newordernumber;
 }
 
index 06d4d1a..681cd60 100755 (executable)
@@ -304,11 +304,6 @@ if ( $op eq 'delete_confirm' ) {
         last;
     }
 
-    my @cancelledorders = GetCancelledOrders($basketno);
-    foreach (@cancelledorders) {
-        $_->{'line_total'} = sprintf("%.2f", $_->{'ecost'} * $_->{'quantity'});
-    }
-
     $template->param(
         basketno             => $basketno,
         basketname           => $basket->{'basketname'},
@@ -328,7 +323,7 @@ if ( $op eq 'delete_confirm' ) {
         name                 => $bookseller->{'name'},
         books_loop           => \@books_loop,
         book_foot_loop       => \@book_foot_loop,
-        cancelledorders_loop => \@cancelledorders,
+        cancelledorders_loop => \@cancelledorders_loop,
         total_quantity       => $total_quantity,
         total_gste           => sprintf( "%.2f", $total_gste ),
         total_gsti           => sprintf( "%.2f", $total_gsti ),
@@ -424,6 +419,20 @@ sub get_order_infos {
     $line{surnamesuggestedby}   = $$suggestion{surnamesuggestedby};
     $line{firstnamesuggestedby} = $$suggestion{firstnamesuggestedby};
 
+    foreach my $key (qw(transferred_from transferred_to)) {
+        if ($line{$key}) {
+            my $order = GetOrder($line{$key});
+            my $basket = GetBasket($order->{basketno});
+            my $bookseller = GetBookSellerFromId($basket->{booksellerid});
+            $line{$key} = {
+                order => $order,
+                basket => $basket,
+                bookseller => $bookseller,
+                timestamp => $line{$key . '_timestamp'},
+            };
+        }
+    }
+
     return \%line;
 }
 
index c885b55..b22134b 100644 (file)
@@ -2911,7 +2911,6 @@ CREATE TABLE `aqorders` ( -- information related to the basket line items
   `cancelledby` varchar(10) default NULL, -- not used? always NULL
   `datecancellationprinted` date default NULL, -- the date the line item was deleted
   `notes` mediumtext, -- notes related to this order line
-  internalnotes mediumtext DEFAULT NULL, -- used by Koha to store some informations, not editable by librarians
   `supplierreference` mediumtext, -- not used? always NULL
   `purchaseordernumber` mediumtext, -- not used? always NULL
   `basketno` int(11) default NULL, -- links this order line to a specific basket (aqbasket.basketno)
@@ -2958,6 +2957,21 @@ CREATE TABLE `aqorders_items` ( -- information on items entered in the acquisiti
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
 
+--
+-- Table structure for table aqorders_transfers
+--
+
+DROP TABLE IF EXISTS aqorders_transfers;
+CREATE TABLE aqorders_transfers (
+  ordernumber_from int(11) NULL,
+  ordernumber_to int(11) NULL,
+  timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+  UNIQUE KEY ordernumber_from (ordernumber_from),
+  UNIQUE KEY ordernumber_to (ordernumber_to),
+  CONSTRAINT aqorders_transfers_ordernumber_from FOREIGN KEY (ordernumber_from) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE,
+  CONSTRAINT aqorders_transfers_ordernumber_to FOREIGN KEY (ordernumber_to) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
 --
 -- Table structure for table aqinvoices
 --
index 3d1699f..9aa8998 100755 (executable)
@@ -7106,11 +7106,19 @@ if ( CheckVersion($DBversion) ) {
 
 $DBversion = "XXX";
 if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do(qq{DROP TABLE IF EXISTS aqorders_transfers;});
     $dbh->do(qq{
-        ALTER TABLE aqorders
-        ADD COLUMN internalnotes MEDIUMTEXT DEFAULT NULL AFTER notes
+        CREATE TABLE aqorders_transfers (
+          ordernumber_from int(11) NULL,
+          ordernumber_to int(11) NULL,
+          timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+          UNIQUE KEY ordernumber_from (ordernumber_from),
+          UNIQUE KEY ordernumber_to (ordernumber_to),
+          CONSTRAINT aqorders_transfers_ordernumber_from FOREIGN KEY (ordernumber_from) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE,
+          CONSTRAINT aqorders_transfers_ordernumber_to FOREIGN KEY (ordernumber_to) REFERENCES aqorders (ordernumber) ON DELETE SET NULL ON UPDATE CASCADE
+        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     });
-    print "Upgrade to $DBversion done (Add internalnotes field in aqorders table)\n";
+    print "Upgrade to $DBversion done (Add aqorders_transfers table)\n";
     SetVersion($DBversion);
 }
 
index 1c74120..08a7ff4 100644 (file)
                                 [% ELSE %]
                                     <p>[<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% books_loo.ordernumber %]">Add note</a>]</p>
                                 [% END %]
-                            <p>[% books_loo.internalnotes %]</p>
+                            [% IF (books_loo.transferred_from) %]
+                              [% basket = books_loo.transferred_from.basket %]
+                              [% bookseller = books_loo.transferred_from.bookseller %]
+                              [% timestamp = books_loo.transferred_from.timestamp %]
+                              <p>Transferred from
+                                <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basket.basketno %]">basket: [% basket.basketname %]</a>
+                                (<a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% bookseller.id %]">[% bookseller.name %]</a>)
+                                on <span title="[% timestamp | $KohaDates with_hours = 1 %]">
+                                  [% timestamp | $KohaDates %]
+                                </span>
+                              </p>
+                            [% END %]
                         </td>
                         <td class="number gste [% IF books_loo.rrpgste.search('^0') %]error[% END %]">[% books_loo.rrpgste %]</td>
                         <td class="number gste [% IF books_loo.ecostgste.search('^0') %]error[% END %]">[% books_loo.ecostgste %]</td>
                         [% IF ( order.publicationyear ) %], [% order.publicationyear %][% END %]
                         [% IF ( books_loo.editionstatement ) %], [% books_loo.editionstatement %][% END %]
                       </p>
-                      <p>[% order.internalnotes %]</p>
+                      [% IF order.transferred_to %]
+                        [% basket = order.transferred_to.basket %]
+                        [% bookseller = order.transferred_to.bookseller %]
+                        [% timestamp = order.transferred_to.timestamp %]
+                        <p>Transferred to
+                          <a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% basket.basketno %]">basket: [% basket.basketname %]</a>
+                          (<a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% bookseller.id %]">[% bookseller.name %]</a>)
+                          on <span title="[% timestamp | $KohaDates with_hours = 1%]">
+                            [% timestamp | $KohaDates %]
+                          </span>
+                        </p>
+                      [% END %]
                     </td>
                     <td class="number gste">[% order.rrpgste %]</td>
                     <td class="number gste">[% order.ecostgste %]</td>