Bug 12502: Add vendor note, internal note, ordernumber and isbn to late orders page
authorDavid Bourgault <david.bourgault@inlibro.com>
Mon, 25 Sep 2017 19:18:38 +0000 (15:18 -0400)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 20 Jan 2020 16:37:21 +0000 (16:37 +0000)
Test plan:

0) Make sure you have a late order
    a) Create a test vendor unless you have one
    b) Create a test basket unless you have one
    c) Close the basket to mark the order as late
1) Go to the late orders table
Before patch : Orderno, ISBN, vendor notes, internal notes are absent
After patch: fields are present

2) Edit the vendor note and/or the internal note
3) Press the save notes button
4) Refresh page and cache (CTRL+F5), if notes have been correctly saved, your modifications should be displayed.

Signed-off-by: Alex Buckley <alexbuckley@catalyst.net.nz>
Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

C4/Acquisition.pm
acqui/lateorders-export.pl
acqui/lateorders.pl
admin/columns_settings.yml
koha-tmpl/intranet-tmpl/prog/en/includes/csv_headers/acqui/lateorders.tt
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/lateorders.tt

index d99b39a..c8bdf1b 100644 (file)
@@ -2165,7 +2165,7 @@ sub GetLateOrders {
     my @query_params = ();
     my $select = "
     SELECT aqbasket.basketno,
-        aqorders.ordernumber,
+        aqorders.ordernumber      AS ordernumber,
         DATE(aqbasket.closedate)  AS orderdate,
         aqbasket.basketname       AS basketname,
         aqbasket.basketgroupid    AS basketgroupid,
@@ -2174,6 +2174,8 @@ sub GetLateOrders {
         aqorders.ecost            AS unitpricelib,
         aqorders.claims_count     AS claims_count,
         aqorders.claimed_date     AS claimed_date,
+        aqorders.order_internalnote AS internalnote,
+        aqorders.order_vendornote   AS vendornote,
         aqbudgets.budget_name     AS budget,
         borrowers.branchcode      AS branch,
         aqbooksellers.name        AS supplier,
@@ -2181,6 +2183,7 @@ sub GetLateOrders {
         biblio.author, biblio.title,
         biblioitems.publishercode AS publisher,
         biblioitems.publicationyear,
+        biblioitems.isbn          AS isbn,
         ADDDATE(aqbasket.closedate, INTERVAL aqbooksellers.deliverytime DAY) AS estimateddeliverydate,
     ";
     my $from = "
index c8d86e6..332f652 100755 (executable)
@@ -53,6 +53,9 @@ for my $ordernumber ( @ordernumbers ) {
             basketno => $order->{basketno},
             claims_count => $order->{claims_count},
             claimed_date => $order->{claimed_date},
+            internalnote => $order->{internalnote},
+            vendornote   => $order->{vendornote},
+            isbn => $order->{isbn},
         }
     ;
 }
index 9febcf6..5232dd7 100755 (executable)
@@ -53,6 +53,7 @@ use C4::Context;
 use C4::Acquisition;
 use C4::Letters;
 use Koha::DateUtils;
+use Koha::Acquisition::Orders;
 
 my $input = new CGI;
 my ($template, $loggedinuser, $cookie) = get_template_and_user(
@@ -122,6 +123,28 @@ if ($op and $op eq "send_alert"){
     }
 }
 
+if ($op && $op eq "save"){
+    my $listorders;
+    my @orders = $input->param;
+
+    foreach my $order (@orders){
+        if ( $order ne "op"){
+            my @split = split (/_/,$order);
+            $listorders->{$split[0]}->{$split[1]} = $input->param($order);
+        }
+    }
+
+    my $orders_rs = Koha::Acquisition::Orders->search({ ordernumber => [ keys %$listorders ] });
+    while ( my $order = $orders_rs->next ) {
+        my $internalnote = $listorders->{$order->ordernumber}->{i};
+        my $vendornote   = $listorders->{$order->ordernumber}->{v};
+
+        $order->order_internalnote($internalnote) if defined $internalnote;
+        $order->order_vendornote($vendornote)     if defined $vendornote;
+        $order->store;
+    }
+}
+
 my @parameters = ( $delay );
 push @parameters, $estimateddeliverydatefrom_dt
     ? $estimateddeliverydatefrom_dt->ymd()
index e435322..f604f79 100644 (file)
@@ -38,6 +38,8 @@ modules:
           cannot_be_toggled: 1
           cannot_be_modified: 1
         -
+          columnname: order_line
+        -
           columnname: order_date
         -
           columnname: estimated_delivery_date
@@ -59,6 +61,13 @@ modules:
           columnname: claims_count
         -
           columnname: claimed_date
+        -
+          columnname: internal_note
+        -
+          columnname: vendor_note
+        -
+          columnname: isbn
+
     basket:
       orders:
         -
index 8231efb..f15f545 100644 (file)
@@ -1,4 +1,4 @@
 [%- USE Koha -%]
 [%- SET delimiter = Koha.Preference( 'delimiter' ) || ',' -%]
 
-[%- BLOCK -%]ORDER DATE[%- delimiter | html -%]ESTIMATED DELIVERY DATE[%- delimiter | html -%]VENDOR[%- delimiter | html -%]INFORMATION[%- delimiter | html -%]TOTAL COST[%- delimiter | html -%]BASKET[%- delimiter | html -%]CLAIMS COUNT[%- delimiter | html -%]CLAIMED DATE[%- END -%]
+[%- BLOCK -%]ORDER DATE[%- delimiter | html -%]ESTIMATED DELIVERY DATE[%- delimiter | html -%]VENDOR[%- delimiter | html -%]INFORMATION[%- delimiter | html -%]TOTAL COST[%- delimiter | html -%]BASKET[%- delimiter | html -%]CLAIMS COUNT[%- delimiter | html -%]CLAIMED DATE[%- delimiter | html -%]INTERNAL NOTE[%- delimiter | html -%]VENDOR NOTE[%- delimiter | html -%]ISBN[%- END -%]
index 8773505..caa5653 100644 (file)
@@ -56,6 +56,7 @@
             [% ELSE %]
                 <th></th>
             [% END %]
+            <th>Order line</th>
             <th class="title-string">Order date</th>
             <th class="title-string">Estimated delivery date</th>
             <th>Vendor</th>
@@ -67,6 +68,9 @@
             <th>Fund</th>
             <th>Claims count</th>
             <th class="title-string">Claimed date</th>
+            <th>Internal note</th>
+            <th>Vendor note</th>
+            <th>ISBN</th>
         </tr>
       </thead>
       <tbody>
@@ -76,6 +80,9 @@
                 <input type="checkbox" value="[% lateorder.ordernumber | html %]" data-booksellerid="[% lateorder.supplierid | html %]" name="ordernumber">
             </td>
             <td>
+                [% lateorder.ordernumber | $raw %]
+            </td>
+            <td>
                 <span title="[% lateorder.orderdate | html %]">[% lateorder.orderdate | $KohaDates %] ([% lateorder.latesince | html %] days)</span>
             </td>
             <td>
                     <span title="0000-00-00"></span>
                 [% END %]
             </td>
+            <td><input name="internalnote" id="internalnote" type="text" value="[% lateorder.internalnote | html %]"></td>
+            <td><input name="vendornote" id="vendornote" type="text" value="[% lateorder.vendornote | html %]"></td>
+            <td>[% lateorder.isbn | $raw %]</td>
         </tr>
       [% END %]
       </tbody>
       <tfoot>
         <tr>
-            <th colspan="5">Total</th>
+            <th colspan="6">Total</th>
             <th>[% total | html %]</th>
-            <th colspan="6">&nbsp;</th>
+            <th colspan="9">&nbsp;</th>
         </tr>
       </tfoot>
     </table>
         [% UNLESS lateorder.budget_lock %]
             <input type="submit"  value="Claim order" />
         [% END %]
+        <input type="button" value="Save notes" id="savenotes"/>
     </p>
 </form>
 [% ELSE %]<p>There are no late orders.</p>
                 location.href = url;
                 return false;
             });
+            // Update all notes
+            $("#savenotes").click(function(){
+                $("#savenotes").after("<span id=\"loading\" style=\"margin:4px;\"><img src=\"[% interface | html %]/[% theme | html %]/img/loading-small.gif\" alt=\"\" /> "+_("Loading")+"</span>");
+                var all_nodes = $(late_orderst.fnGetNodes());
+                var req = new XMLHttpRequest();
+                var url = '/cgi-bin/koha/acqui/lateorders.pl';
+                var data = new FormData();
+                data.append("op","save");
+                for (var i = 0; i < all_nodes.length; i++) {
+                    var order = $(all_nodes[i]).find("input[name='ordernumber']");
+                    var internalnote = $(all_nodes[i]).find("input[name='internalnote']")[0].value;
+                    var vendornote = $(all_nodes[i]).find("input[name='vendornote']")[0].value;
+                    var internalnote_key = order[0].value + "_i";
+                    var vendornote_key = order[0].value + "_v";
+                    data.append(internalnote_key, internalnote);
+                    data.append(vendornote_key, vendornote);
+                }
+
+                req.open("POST",url);
+                req.send(data);
+                req.onreadystatechange = function () {
+                    $("#loading").remove();
+                    if (req.readyState == '4' ){
+                        if ( req.status == 200 ){
+                            alert(_("Notes successfully saved"));
+                        }
+                        else {
+                            alert(_("Error while saving the notes. Please try again"));
+                        }
+                    }
+                }
+            });
         });
     </script>
 [% END %]