From 420169e1a15871c5fe48e02e179301d949583487 Mon Sep 17 00:00:00 2001
From: Owen Leonard <oleonard@myacpl.org>
Date: Thu, 2 Jun 2016 13:00:22 -0400
Subject: [PATCH] Bug 16640 - Move actions on acquisitions receipt summary page
 into menu
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch moves two groups of links into two menus: MARC and Card
preview into one, Receive, transfer, cancel, etc. into another.

Also changed: The transfer order pop-up window has been sized down to be
more consistent with other similar pop-ups. Baskets and basket
group links now include the whole name rather than just the number to
make it easier to click.

To test you must have a basket or baskets with multiple titles on order,
both received and pending.

- Apply the patch and go to Acquisitions -> Vendor -> Receive shipment
  -> Receive a new shipment (or open an existing invoice).
- In the list of pending orders:
  - Test the 'View' menu for multiple titles. The 'MARC' and 'Card' menu
    items should work correctly.
  - Test the 'Actions' menu for the following actions:
    - Receive
    - Transfer
    - Cancel order
    - Cancel order and delete catalog record
  - Confirm that under some circumstances the 'Cancel order' and 'Cancel
    order and delete catalog record' items are disabled. In these cases
    hovering over the menu items should trigger a tooltip. An
    explanation should be displayed in red at the bottom of the menu.
    Clicking the menu item should trigger an alert with the explanation.

Followed test plan, works as expected.
Signed-off-by: Marc Véron <veron@veron.ch>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
---
 .../intranet-tmpl/prog/en/modules/acqui/parcel.tt  | 174 ++++++++++++++-------
 1 file changed, 119 insertions(+), 55 deletions(-)

diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt
index c66f2f2..59c570b 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/acqui/parcel.tt
@@ -117,6 +117,13 @@
             $("#dataPreview .modal-body").html("<div id=\"loading\"><img src=\"[% interface %]/[% theme %]/img/loading-small.gif\" alt=\"\" /> "+_("Loading")+"</div>");
         });
 
+        $("li.disabled a,li.message a").on("click",function(e){
+            e.preventDefault();
+            var ordernumber = $(this).data("ordernumber");
+            if( ordernumber ){
+                showErrors( ordernumber );
+            }
+        }).tooltip();
     });
 
      // Case-insensitive version of jquery's contains function
@@ -129,18 +136,40 @@
           containsExactly: "$(a).text() == m[3]"
      });
 
-//]]>
-</script>
-<script type="text/javascript">
-//<![CDATA[
-            function transfer_order_popup(ordernumber) {
-                var url = "/cgi-bin/koha/acqui/transferorder.pl?"
-                    + "ordernumber=" + ordernumber
-                window.open(url, 'TransferOrder');
-            }
+    function transfer_order_popup(ordernumber) {
+        var url = "/cgi-bin/koha/acqui/transferorder.pl?"
+            + "ordernumber=" + ordernumber
+        window.open(url, 'TransferOrder','width=800,height=500,location=yes,toolbar=no,scrollbars=yes,resize=yes');
+    }
+
+    function showErrors( ordernumber ){
+        var errorstring = _("Cannot cancel or delete order: ") + "\n";
+        $(".del_error" + ordernumber ).each(function(){
+            errorstring += "\n" + $(this).text();
+        });
+        alert( errorstring );
+    }
 
 //]]>
 </script>
+<style>
+.dropdown-menu .message > a {
+    clear: both;
+    color: #C30;
+    display: block;
+    font-weight: bold;
+    line-height: 20px;
+    padding: 3px 20px;
+    white-space: nowrap;
+}
+.dropdown-menu .message > a:hover {
+    background-color: #EEE;
+    background-image: none;
+    color: #C00;
+    cursor: default;
+    text-decoration: none;
+}
+</style>
 </head>
 <body id="acq_parcel" class="acq">
 [% INCLUDE 'header.inc' %]
@@ -257,15 +286,15 @@
         <tbody class="filterclass">
         [% FOREACH loop_order IN loop_orders %]
             <tr>
-                <td class="basketfilterclass">[% loop_order.basketname %] (<a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% loop_order.basketno %]">[% loop_order.basketno %]</a>)</td>
+                <td class="basketfilterclass"><a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% loop_order.basketno %]">[% loop_order.basketname %] ([% loop_order.basketno %])</a></td>
                 <td>
                   [% IF loop_order.basketgroupid %]
-                    [% loop_order.basketgroupname %] (<a href="/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=[% loop_order.booksellerid %]">[% loop_order.basketgroupid %]</a>)
+                     <a href="/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=[% loop_order.booksellerid %]">[% loop_order.basketgroupname %] ([% loop_order.basketgroupid %])</a>
                   [% ELSE %]
                     No basket group
                   [% END %]
                 </td>
-                <td class="orderfilterclass"><a href="neworderempty.pl?ordernumber=[% loop_order.ordernumber %]&amp;booksellerid=[% loop_order.booksellerid %]">[% loop_order.ordernumber %]</a></td>
+                <td class="orderfilterclass"><a href="neworderempty.pl?ordernumber=[% loop_order.ordernumber %]&amp;booksellerid=[% loop_order.booksellerid %]">Order line [% loop_order.ordernumber %]</a></td>
                 <td class="summaryfilterclass">
                   <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% loop_order.biblionumber %]">[% loop_order.title |html %]</a>
                 [% IF ( loop_order.author ) %] by [% loop_order.author %][% END %]
@@ -288,41 +317,64 @@
                     [<a href="/cgi-bin/koha/acqui/modordernotes.pl?ordernumber=[% loop_order.ordernumber %]&amp;referrer=/cgi-bin/koha/acqui/parcel.pl%3Finvoiceid=[% invoiceid %]&type=vendor">Add vendor note</a>]
                 [% END %]
                 </td>
-                <td><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% loop_order.biblionumber %]" class="previewData">MARC</a> | <a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&amp;id=[% loop_order.biblionumber %]" class="previewData">Card</a></td>
+                <td>
+                    <div class="dropup">
+                        <a class="btn btn-mini dropdown-toggle" id="viewpending[% loop_order.biblionumber %]" role="button" data-toggle="dropdown" href="#">
+                           View <b class="caret"></b>
+                        </a>
+                        <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="viewpending[% loop_order.biblionumber %]">
+                            <li><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% loop_order.biblionumber %]" class="previewData">MARC</a></li>
+                            <li><a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&amp;id=[% loop_order.biblionumber %]" class="previewData">Card</a></li>
+                        </ul>
+                    </div>
+                </td>
                 <td>[% loop_order.quantity %]</td>
                 <td>[% loop_order.ecost | $Price %]</td>
                 <td>[% loop_order.total | $Price %]</td>
                 <td>[% loop_order.budget_name %]</td>
-				<td>
-                              <a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]">Receive</a>
-                    <br />
-                    <a href="#" onclick="transfer_order_popup([% loop_order.ordernumber %]); return false;">Transfer</a>
-				</td>
-				<td>
-                        [% IF ( loop_order.left_holds_on_order ) %]
-                        <span class="button" title="Can't cancel order, ([% loop_order.holds_on_order %]) holds are linked with this order cancel holds first">Can't cancel order</span><br>
-                        [% ELSE %]
-                        <a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% loop_order.ordernumber %]&biblionumber=[% loop_order.biblionumber %]&referrer=[% "/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid" | uri %]">Cancel order</a><br />
-                        [% END %]
-                        [% IF ( loop_order.can_del_bib ) %]
-                        <a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% loop_order.ordernumber %]&biblionumber=[% loop_order.biblionumber %]&del_biblio=1&referrer=[% "/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid" | uri %]">Cancel order and catalog record</a><br />
-                        [% ELSE %]
-                        <span class="button" title="Can't delete catalog record, see constraints below">Can't cancel order and delete catalog record</span><br>
-                        [% END %]
-                        [% IF ( loop_order.left_item ) %]
-                        <b title="Can't delete catalog record, because of [% loop_order.items %] existing item(s)" >[% loop_order.items %] item(s) left</b><br>
-                        [% END %]
-                        [% IF ( loop_order.left_biblio ) %]
-                        <b title="Can't delete catalog record, delete other orders linked to it first">[% loop_order.biblios %] order(s) left</b><br>
-                        [% END %]
-                        [% IF ( loop_order.left_subscription ) %]
-                        <b title="Can't delete catalog record, delete subscriptions first">[% loop_order.subscriptions %] subscription(s) left</b><br>
-                        [% END %]
-                        [% IF ( loop_order.left_holds ) %]
-                        <b title="Can't delete catalog record or order, cancel holds first">[% loop_order.holds %] hold(s) left</b>
-                        [% END %]
-                    </td>
-                </tr>
+                <td class="actions">
+                    <div class="dropup">
+                        <a class="btn btn-mini dropdown-toggle" id="actions[% loop_order.ordernumber %]" role="button" data-toggle="dropdown" href="#">
+                           Actions <b class="caret"></b>
+                        </a>
+                        <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="actions[% loop_order.ordernumber %]">
+                            <li><a href="orderreceive.pl?ordernumber=[% loop_order.ordernumber %]&amp;invoiceid=[% invoiceid %]"><i class="fa fa-inbox"></i> Receive</a></li>
+                            <li><a href="#" onclick="transfer_order_popup([% loop_order.ordernumber %]); return false;"><i class="fa fa-exchange"></i> Transfer</a></li>
+
+                            [% IF ( loop_order.left_holds_on_order ) %]
+                                <li class="disabled">
+                                    <a href="#" data-ordernumber="[% loop_order.ordernumber %]" data-toggle="tooltip" data-placement="left" title="Can't cancel order, ([% loop_order.holds_on_order %]) holds are linked with this order cancel holds first"><i class="fa fa-remove"></i> Cancel order</a></li>
+                            [% ELSE %]
+                                <li><a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% loop_order.ordernumber %]&biblionumber=[% loop_order.biblionumber %]&referrer=[% "/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid" | uri %]"><i class="fa fa-remove"></i> Cancel order</a></li>
+                            [% END %]
+                            [% IF ( loop_order.can_del_bib ) %]
+                                <li><a href="/cgi-bin/koha/acqui/cancelorder.pl?ordernumber=[% loop_order.ordernumber %]&biblionumber=[% loop_order.biblionumber %]&del_biblio=1&referrer=[% "/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid" | uri %]"><i class="fa fa-trash"></i> Cancel order and delete catalog record</a></li>
+                            [% ELSE %]
+                                <li class="disabled">
+                                    <a data-ordernumber="[% loop_order.ordernumber %]" data-toggle="tooltip" data-placement="left" title="Can't delete catalog record, see constraints below" href="#"><i class="fa fa-trash"></i> Cancel order and delete catalog record</a>
+                                </li>
+                            [% END %]
+                            [% IF ( loop_order.left_item || loop_order.left_biblio || loop_order.left_subscription || loop_order.left_holds ) %]
+                                <li class="divider"></li>
+                                [% IF ( loop_order.left_item ) %]
+                                    <li class="message"><a class="del_error[% loop_order.ordernumber %]" href="#" title="Can't delete catalog record, because of [% loop_order.items %] existing item(s)" >[% loop_order.items %] item(s) left</a></li>
+                                [% END %]
+                                [% IF ( loop_order.left_biblio ) %]
+                                    <li class="message"><a class="del_error[% loop_order.ordernumber %]" href="#" title="Can't delete catalog record, delete other orders linked to it first">[% loop_order.biblios %] order(s) left</a></li>
+                                [% END %]
+                                [% IF ( loop_order.left_subscription ) %]
+                                    <li class="message"><a class="del_error[% loop_order.ordernumber %]" href="#" title="Can't delete catalog record, delete subscriptions first">[% loop_order.subscriptions %] subscription(s) left</a></li>
+                                [% END %]
+                                [% IF ( loop_order.left_holds ) %]
+                                    <li class="message"><a class="del_error[% loop_order.ordernumber %]" href="#" title="Can't delete catalog record or order, cancel holds first">[% loop_order.holds %] hold(s) left</a></li>
+                                [% END %]
+                            [% END %]
+                        </ul>
+                    </div>
+
+                </td>
+                <td>&nbsp;</td>
+            </tr>
         [% END %]
         </tbody>
       </table>
@@ -393,16 +445,16 @@
     <tbody class="filterclass">
         [% FOREACH order IN loop_received %]
             <tr>
-                <td>[% order.basketname %] (<a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% order.basketno %]">[% order.basketno %]</a>)</td>
+                <td><a href="/cgi-bin/koha/acqui/basket.pl?basketno=[% order.basketno %]">[% order.basketname %] ([% order.basketno %])</a></td>
                 <td>
                   [% IF order.basketgroupid %]
-                    [% order.basketgroupname %] (<a href="/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=[% order.booksellerid %]">[% order.basketgroupid %]</a>)
+                      <a href="/cgi-bin/koha/acqui/basketgroup.pl?booksellerid=[% order.booksellerid %]">[% order.basketgroupname %] ([% order.basketgroupid %])</a>
                   [% ELSE %]
                     No basket group
                   [% END %]
                 </td>
                 <td>
-                  <a href="neworderempty.pl?ordernumber=[% order.ordernumber %]&amp;booksellerid=[% booksellerid %]">[% order.ordernumber %]</a>
+                  <a href="neworderempty.pl?ordernumber=[% order.ordernumber %]&amp;booksellerid=[% booksellerid %]">Order line [% order.ordernumber %]</a>
                   [% IF (order.parent_ordernumber && (order.parent_ordernumber != order.ordernumber)) %]
                     (<a href="neworderempty.pl?ordernumber=[% order.parent_ordernumber %]&amp;booksellerid=[% booksellerid %]" title="Original order line">[% order.parent_ordernumber %]</a>)
                   [% END %]
@@ -424,14 +476,24 @@
                     (<a href="/cgi-bin/koha/suggestion/suggestion.pl?suggestionid=[% order.suggestionid %]&amp;op=show">suggestion #[% order.suggestionid %]</a>)
                 [% END %]
                 </td>
-                <td><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% order.biblionumber %]" class="previewData">MARC</a> | <a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&amp;id=[% order.biblionumber %]" class="previewData">Card</a></td>
+                <td>
+                    <div class="dropup">
+                        <a class="btn btn-mini dropdown-toggle" id="viewreceived[% loop_order.biblionumber %]" role="button" data-toggle="dropdown" href="#">
+                           View <b class="caret"></b>
+                        </a>
+                        <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="viewreceived[% loop_order.biblionumber %]">
+                            <li><a href="/cgi-bin/koha/catalogue/showmarc.pl?id=[% order.biblionumber %]" class="previewData">MARC</a></li>
+                            <li><a href="/cgi-bin/koha/catalogue/showmarc.pl?viewas=card&amp;id=[% order.biblionumber %]" class="previewData">Card</a></li>
+                        </ul>
+                    </div>
+                </td>
                 <td>[% order.quantityreceived %]</td>
                 <td>[% order.budget.budget_name %]</td>
                 <td>[% order.ecost | $Price %]</td>
                 <td>[% order.unitprice | $Price %]</td>
                 <td>[% order.total | $Price %]</td>
-                <td>
-                    [% IF loop_receive.cannot_cancel or ( Koha.Preference("AcqCreateItem") == "receiving" and loop_receive.holds > 0 ) %]
+                [% IF loop_receive.cannot_cancel or ( Koha.Preference("AcqCreateItem") == "receiving" and loop_receive.holds > 0 ) %]
+                    <td>
                       [% IF loop_receive.cannot_cancel %]
                         [% span_title = BLOCK %]
                             Cannot cancel receipt of this order line because it
@@ -444,16 +506,18 @@
                         [%# FIXME Here we block the cancellation if holds exist. Actually it could be possible if items will be exist after the deletion %]
                         [%# Some additional checks should be added in the pl file %]
                         [% span_title = BLOCK %]
-                          Cannot cancel receipt of this order line because at least one reservation exists on the records.
+                          Cannot cancel receipt of this order line because at least one hold exists on the records.
                         [% END %]
                       [% END %]
                       <span title="[% span_title | collapse %]">
                           Can't cancel receipt
                       </span>
-                    [% ELSE %]
-                        <a href="/cgi-bin/koha/acqui/parcel.pl?invoiceid=[% invoiceid %]&op=cancelreceipt&ordernumber=[% order.ordernumber %]">Cancel receipt</a>
-                    [% END %]
-                </td>
+                    </td>
+                [% ELSE %]
+                    <td class="actions">
+                        <a class="btn btn-mini" href="/cgi-bin/koha/acqui/parcel.pl?invoiceid=[% invoiceid %]&op=cancelreceipt&ordernumber=[% order.ordernumber %]"><i class="fa fa-remove"></i> Cancel receipt</a>
+                    </td>
+                [% END %]
             </tr>
 	    [% END %]
 	</tbody>
@@ -463,7 +527,7 @@
 	[% ELSE %]There are no received orders.[% END %]
 </div>
 
-<div id="dataPreview" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="dataPreviewLabel" aria-hidden="true">
+<div id="dataPreview" class="modal hide" tabindex="-1" role="dialog" aria-labelledby="dataPreviewLabel" aria-hidden="true">
     <div class="modal-header">
         <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
         <h3 id="dataPreviewLabel">MARC preview</h3>
-- 
2.1.4