Bug 24157: New permission - merge_invoices
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Tue, 21 Jul 2020 09:03:07 +0000 (11:03 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 30 Jul 2020 15:30:23 +0000 (17:30 +0200)
Add a new permission to merge invoices

Test plan:
- Remove the new permission "merge_invoices" for a given patron,
use it to log in into Koha
- Create 2 invoices, try to merge them
=> There is no way to merge it
- Add the permission
=> Now you can merge the invoices

Sponsored-by: Galway-Mayo Institute of Technology
Signed-off-by: Alex Arnaud <alex.arnaud@biblibre.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

acqui/invoice.pl
installer/data/mysql/atomicupdate/bug_24157.perl
installer/data/mysql/userpermissions.sql
koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc
koha-tmpl/intranet-tmpl/prog/en/modules/acqui/invoices.tt

index a65b6d8..00f5ff2 100755 (executable)
@@ -103,6 +103,10 @@ elsif ( $op && $op eq 'mod' ) {
     } elsif ($input->param('close')) {
         CloseInvoice($invoiceid);
     } elsif ($input->param('merge')) {
+
+        output_and_exit( $input, $cookie, $template, 'insufficient_permission' )
+            unless $logged_in_patron->has_permission( { acquisition => 'merge_invoices' } );
+
         my @sources = $input->multi_param('merge');
         MergeInvoices($invoiceid, \@sources);
         defined($invoice_files) && $invoice_files->MergeFileRecIds(@sources);
index e7908dd..7a7bad0 100644 (file)
@@ -20,6 +20,11 @@ if( CheckVersion( $DBversion ) ) {
         (11, 'delete_invoices', 'Delete invoices')
     |);
 
+    $dbh->do(q|
+        INSERT IGNORE INTO permissions (module_bit, code, description) VALUES
+        (11, 'merge_invoices', 'Merge invoices')
+    |);
+
     SetVersion( $DBversion );
-    print "Upgrade to $DBversion done (Bug 24157: Add new permissions reopen_closed_invoices, edit_invoices, delete_invoices, delete_baskets)\n";
+    print "Upgrade to $DBversion done (Bug 24157: Add new permissions reopen_closed_invoices, edit_invoices, delete_invoices, merge_invoices, delete_baskets)\n";
 }
index 636b245..0224a56 100644 (file)
@@ -68,6 +68,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    (11, 'reopen_closed_invoices', 'Reopen closed invoices'),
    (11, 'edit_invoices', 'Edit invoices'),
    (11, 'delete_invoices', 'Delete invoices'),
+   (11, 'merge_invoices', 'Merge invoices'),
    (11, 'delete_baskets', 'Delete baskets'),
    (12, 'suggestions_manage', 'Manage purchase suggestions'),
    (13, 'edit_news', 'Write news for the OPAC and staff interfaces'),
index 42dd9ca..79b6560 100644 (file)
             Delete invoices
         </span>
         <span class="permissioncode">([% name | html %])</span>
+    [%- CASE 'merge_invoices' -%]
+        <span class="sub_permission merge_invoices_subpermission">
+            Merge invoices
+        </span>
+        <span class="permissioncode">([% name | html %])</span>
     [%- CASE 'delete_baskets' -%]
         <span class="sub_permission delete_baskets_subpermission">
             Delete baskets
index 06d9745..57aeb27 100644 (file)
@@ -30,7 +30,9 @@
           <table id="resultst">
             <thead>
               <tr>
-                <th>&nbsp;</th>
+                [% IF CAN_user_acquisition_merge_invoices %]
+                  <th>&nbsp;</th>
+                [% END %]
                 <th>&nbsp;</th>
                 <th>Invoice no.</th>
                 <th>Vendor</th>
@@ -45,7 +47,9 @@
             <tbody>
               [% FOREACH invoice IN invoices %]
                 <tr data-invoiceid="[% invoice.invoiceid | html %]" data-booksellerid="[% invoice.booksellerid | html %]" data-shipmentdate="[% invoice.shipmentdate | $KohaDates %]" data-billingdate="[% invoice.billingdate | $KohaDates %]" data-shipmentcost="[% invoice.shipmentcost | html %]" data-shipment_budgetid="[% invoice.shipmentcost_budgetid | html %]" data-closedate="[% invoice.closedate | $KohaDates %]">
-                  <td>[% invoice.is_linked_to_subscriptions | html %]</td>
+                  [% IF CAN_user_acquisition_merge_invoices %]
+                      <td>[% invoice.is_linked_to_subscriptions | html %]</td>
+                  [% END %]
                   <td><input type="checkbox" class="select-invoice" value="[% invoice.invoiceid | html %]" /></td>
                   <td><a href="/cgi-bin/koha/acqui/invoice.pl?invoiceid=[% invoice.invoiceid | uri %]">[% invoice.invoicenumber | html %]</a></td>
                   <td><a href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% invoice.booksellerid | uri %]">[% invoice.suppliername | html %]</a></td>
               [% END %]
             </tbody>
           </table>
-          <a class="submit" id="merge" href="#merge_invoices">Merge selected invoices</a>
-            <div id="merge_invoices">
-                <form id="merge_invoice_form" action="/cgi-bin/koha/acqui/invoice.pl" method="post">
-                <fieldset class="rows">
-                    <ol>
-                    <li><h2>Merge invoices</h2></li>
-                    <li><table id="merge_table">
-                        <thead><tr><th>Invoice no.</th><th>Shipment date</th><th>Billing date</th><th>Shipment cost</th></tr></thead>
-                        <tbody>
-                        </tbody>
-                    </table></li>
-                    <li><label for="merge_invoicenumber" class="required">Invoice number:</label>
-                            <input type="text" size="10" id="merge_invoicenumber" name="invoicenumber" value="" class="required" required="required" />
-                            <span class="required">Required</span>
-                            </li>
-                    <li><label for="merge_shipmentdate">Shipment date:</label>
-                            <input type="text" size="10" id="merge_shipmentdate" name="shipmentdate" value="" class="datepicker" /></li>
+          [% IF CAN_user_acquisition_merge_invoices %]
+              <a class="submit" id="merge" href="#merge_invoices">Merge selected invoices</a>
+              <div id="merge_invoices">
+                  <form id="merge_invoice_form" action="/cgi-bin/koha/acqui/invoice.pl" method="post">
+                  <fieldset class="rows">
+                      <ol>
+                      <li><h2>Merge invoices</h2></li>
+                      <li><table id="merge_table">
+                          <thead><tr><th>Invoice no.</th><th>Shipment date</th><th>Billing date</th><th>Shipment cost</th></tr></thead>
+                          <tbody>
+                          </tbody>
+                      </table></li>
+                      <li><label for="merge_invoicenumber" class="required">Invoice number:</label>
+                              <input type="text" size="10" id="merge_invoicenumber" name="invoicenumber" value="" class="required" required="required" />
+                              <span class="required">Required</span>
+                              </li>
+                      <li><label for="merge_shipmentdate">Shipment date:</label>
+                              <input type="text" size="10" id="merge_shipmentdate" name="shipmentdate" value="" class="datepicker" /></li>
 
-                    <li><label for="merge_billingdate">Billing date:</label>
-                            <input type="text" size="10" id="merge_billingdate" name="billingdate" value="" class="datepicker" /></li>
+                      <li><label for="merge_billingdate">Billing date:</label>
+                              <input type="text" size="10" id="merge_billingdate" name="billingdate" value="" class="datepicker" /></li>
 
-                    <li><label for="merge_shipmentcost">Shipment cost:</label>
-                            <input type="text" size="10" id="merge_shipmentcost" name="shipmentcost" value="" /></li>
-                    <li><label for="merge_shipment_budgetid">Fund:</label>
-                            <select id="merge_shipment_budgetid" name="shipment_budget_id">
-                                <option value="">No fund</option>
-                              [% FOREACH budget IN budgets_loop %]
-                                  <option value="[% budget.budget_id | html %]">[% budget.budget_name | html %]
-                                  </option>
-                              [% END %]
-                            </select></li>
+                      <li><label for="merge_shipmentcost">Shipment cost:</label>
+                              <input type="text" size="10" id="merge_shipmentcost" name="shipmentcost" value="" /></li>
+                      <li><label for="merge_shipment_budgetid">Fund:</label>
+                              <select id="merge_shipment_budgetid" name="shipment_budget_id">
+                                  <option value="">No fund</option>
+                                [% FOREACH budget IN budgets_loop %]
+                                    <option value="[% budget.budget_id | html %]">[% budget.budget_name | html %]
+                                    </option>
+                                [% END %]
+                              </select></li>
 
-                    <li><span class="label">Status:</span> <span id="merge_status"></span></li>
-                    <li><input type="submit" value="Merge" /></li>
-                    </ol>
-                    <input type="hidden" name="op" value="mod" />
-                    <input type="hidden" id="merge_invoiceid" name="invoiceid" value="" />
-                </fieldset>
-                </form>
-            </div>
+                      <li><span class="label">Status:</span> <span id="merge_status"></span></li>
+                      <li><input type="submit" value="Merge" /></li>
+                      </ol>
+                      <input type="hidden" name="op" value="mod" />
+                      <input type="hidden" id="merge_invoiceid" name="invoiceid" value="" />
+                  </fieldset>
+                  </form>
+              </div>
+          [% END %]
         [% ELSE %]
           <p>Sorry, but there are no results for your search.</p>
           <p>Search was: