Bug 28450: Make Account summary print tables configurable
authorOwen Leonard <oleonard@myacpl.org>
Tue, 12 Oct 2021 10:32:05 +0000 (10:32 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 3 Nov 2021 14:40:52 +0000 (15:40 +0100)
This patch adds table settings for the three tables which appear on the
patron's "Print summary" view. This will allow the administrator to
set a default configuration for columns on the print summary page.

To test, apply the patch and restart-all to load the revised columns
settings YAML. Rebuild the staff interface SCSS
(https://wiki.koha-community.org/wiki/Working_with_SCSS_in_the_OPAC_and_staff_client).

- Go to Administration -> Table settings -> Circulation.
- Under the "Circulation tables" heading you should see a "Jump to" link
  to "print_summary."
- In the settings for the print_summary page you should see three
  tables: print-summary-checkouts, print-summary-fines, and
  print-summary-holds.
- Locate a patron account which has checkouts, fines, and holds.
  - From the patron detail view click "Print -> Print summary."
  - A new window should open with the print summary view. All tables
    should display correctly.
  - Test that the "Columns" buttons work correctly to show and hide
    columns.
- Make changes to the default settings for these tables to confirm that
  they work on the print summary page.

Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
admin/columns_settings.yml
koha-tmpl/intranet-tmpl/prog/css/print.css
koha-tmpl/intranet-tmpl/prog/css/src/_tables.scss
koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss
koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember-print.tt

index 7ae9402..18f4ce0 100644 (file)
@@ -1343,6 +1343,56 @@ modules:
             -
               columnname: non-public_note
 
+    print_summary:
+        print-summary-checkouts:
+            columns:
+                -
+                    columnname: title
+                -
+                    columnname: author
+                -
+                    columnname: call_number
+                -
+                    columnname: item_type
+                -
+                    columnname: date_due
+                -
+                    columnname: barcode
+                -
+                    columnname: inventory_number
+                -
+                    columnname: charge
+                -
+                    columnname: price
+                -
+                    columnname: status
+
+        print-summary-holds:
+            columns:
+                -
+                    columnname: title
+                -
+                    columnname: author
+                -
+                    columnname: placed_on
+                -
+                    columnname: expires_on
+                -
+                    columnname: pick up_location
+
+        print-summary-fines:
+            columns:
+                -
+                    columnname: date
+                -
+                    columnname: description_of_charges
+                -
+                    columnname: note
+                -
+                    columnname: amount
+                -
+                    columnname: outstanding
+
   opac:
     biblio-detail:
       holdingst:
index aa01299..71915fc 100644 (file)
@@ -213,6 +213,7 @@ tfoot td, tfoot td:last-child {
 }
 
 td.credit, td.debit, td.sum {
+    color: #000;
        font-family : "Courier New", Courier, monospace;
        text-align : right;
 }
@@ -307,7 +308,8 @@ fieldset.action,
 .print,
 .ui-tabs-nav,
 .browse-controls,
-.cart-controls {
+.cart-controls,
+button.dt-button {
     display: none;
 }
 
index 44e2b32..1387649 100644 (file)
@@ -26,6 +26,33 @@ table {
                 margin: 0 .5em 0 0;
             }
         }
+
+        button {
+            &.dt-button {
+                background: transparent none;
+                border: 0;
+                color: #595959;
+                font-size: 60%;
+                margin: 0 .5em;
+
+                &:hover:not(.disabled):active:not(.disabled) {
+                    background: transparent none;
+                    border: 0;
+                    box-shadow: none;
+                    color: #000;
+                }
+
+                &:hover:not(.disabled) {
+                    background: transparent none;
+                    border: 0;
+                    color: #000;
+                }
+            }
+        }
+
+        div.dt-button-collection {
+            font-size: 70%;
+        }
     }
 
     &.invis {
index c2d2ff0..a10fb9e 100644 (file)
@@ -2279,6 +2279,16 @@ td {
         min-height: unset;
         padding: 0;
     }
+
+    &.credit,
+    &.debit,
+    &.total {
+        text-align: right;
+
+        tfoot & {
+            color: #000;
+        }
+    }
 }
 
 .cover-image {
index 5de1493..874df51 100644 (file)
@@ -3,6 +3,7 @@
 [% USE KohaDates %]
 [% USE Price %]
 [% USE ItemTypes %]
+[% USE TablesSettings %]
 [% PROCESS 'member-display-address-style.inc' %]
 [% SET footerjs = 1 %]
 
         </ul>
 
         [% IF ( issues ) %]
-            <table>
+            <table id="print-summary-checkouts">
                 <caption>Items checked out</caption>
-                <tr>
-                    <th>Title</th>
-                    <th>Author</th>
-                    <th>Call number</th>
-                    <th>Item type</th>
-                    <th>Date due</th>
-                    <th>Barcode</th>
-                    <th>Inventory number</th>
-                    <th>Charge</th>
-                    <th>Price</th>
-                    <th>Status</th>
-                </tr>
-
-                [% FOREACH issue IN issues %]
-                    [% IF ( issue.overdue ) %]<tr class="overdue">[% ELSE %]<tr>[% END %]
-                        <td>
-                            [% issue.title | html %]
-                            <a href="/cgi-bin/koha/catalogue/detail.pl?item=[% issue.itemnumber | uri %]&amp;biblionumber=[% issue.biblionumber | uri %]&amp;bi=[% issue.biblioitemnumber | uri %]"></a>
+                <thead>
+                    <tr>
+                        <th>Title</th>
+                        <th>Author</th>
+                        <th>Call number</th>
+                        <th>Item type</th>
+                        <th>Date due</th>
+                        <th>Barcode</th>
+                        <th>Inventory number</th>
+                        <th>Charge</th>
+                        <th>Price</th>
+                        <th>Status</th>
+                    </tr>
+                </thead>
+                <tbody>
+                    [% FOREACH issue IN issues %]
+                        <tr>
+                            <td>
+                                [% INCLUDE 'biblio-title.inc' biblio=issue link = 0 %]
+                            </td>
+                            <td>[% issue.author | html %]</td>
+                            <td>[% issue.itemcallnumber | html %]</td>
+                            <td>[% ItemTypes.GetDescription( issue.itype ) | html %]</td>
+                            <td>[% issue.date_due | $KohaDates  as_due_date => 1 %]</td>
+                            <td>[% issue.barcode | html %]</td>
+                            <td>[% issue.stocknumber | html %]</td>
+                            [% IF ( issue.charge <= 0 ) %]
+                                <td class="credit">
+                            [% ELSE %]
+                                <td class="debit">
+                            [% END %]
+                                [% issue.charge | $Price %]
+                            </td>
+                            [% IF ( issue.replacementprice <= 0 ) %]
+                                <td class="credit">
+                            [% ELSE %]
+                                <td class="debit">
+                            [% END %]
+                                [% issue.replacementprice | $Price %]
+                            </td>
+                            <td>[% IF ( issue.overdue ) %]Overdue![% ELSE %]&nbsp;[% END %]</td>
+                        </tr>
+                    [% END %]
+                </tbody>
+                 <tfoot>
+                    <tr>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td></td>
+                        <td style="text-align: right; font-weight:bold;">Totals:</td>
+                        [% IF ( totaldue <= 0 ) %]
+                            <td class="credit">
+                        [% ELSE %]
+                            <td class="debit">
+                        [% END %]
+                            [% totaldue | $Price %]
+                        </td>
+                        [% IF ( totalprice <= 0 ) %]
+                            <td class="credit">
+                        [% ELSE %]
+                            <td class="debit">
+                        [% END %]
+                            [% totalprice | $Price %]
                         </td>
-                        <td>[% issue.author | html %]</td>
-                        <td>[% issue.itemcallnumber | html %]</td>
-                        <td>[% ItemTypes.GetDescription( issue.itype ) | html %]</td>
-                        <td>[% issue.date_due | $KohaDates  as_due_date => 1 %]</td>
-                        <td>[% issue.barcode | html %]</td>
-                        <td>[% issue.stocknumber | html %]</td>
-                        <td>[% issue.charge | $Price %]</td>
-                        <td>[% issue.replacementprice | $Price %]</td>
-                        <td>[% IF ( issue.overdue ) %]Overdue![% ELSE %]&nbsp;[% END %]</td>
+                        <td></td>
                     </tr>
-                [% END %]
-
-            <tr>
-                <td colspan="7" style="text-align: right; font-weight:bold;">Totals:</td>
-                <td>[% totaldue | $Price %]</td>
-                <td>[% totalprice | $Price %]</td>
-                <td colspan="3">&nbsp;</td>
-            </tr>
-        </table>
-    [% END %]
+                </tfoot>
+            </table>
+        [% END %]
 
     [% IF ( reserves ) %]
-        <table>
+        <table id="print-summary-holds">
             <caption>Pending holds</caption>
-            <tr>
-                <th>Title</th>
-                <th>Author</th>
-                <th>Placed on</th>
-                <th>Expires on</th>
-                <th>Pick up location</th>
-            </tr>
-
-            [% FOREACH reserve IN reserves %]
+            <thead>
                 <tr>
-                    <td>[% reserve.title | html %]</td>
-                    <td>[% reserve.author | html %]</td>
-                    <td>[% reserve.reservedate | $KohaDates %]</td>
-                    <td>[% reserve.expirationdate | $KohaDates %]</td>
-                    <td>[% reserve.waiting_at | html %]</td>
+                    <th>Title</th>
+                    <th>Author</th>
+                    <th>Placed on</th>
+                    <th>Expires on</th>
+                    <th>Pick up location</th>
                 </tr>
-            [% END %]
+            </thead>
+            <tbody>
+                [% FOREACH reserve IN reserves %]
+                    <tr>
+                        <td>[% reserve.title | html %]</td>
+                        <td>[% reserve.author | html %]</td>
+                        <td>[% reserve.reservedate | $KohaDates %]</td>
+                        <td>[% reserve.expirationdate | $KohaDates %]</td>
+                        <td>[% reserve.waiting_at | html %]</td>
+                    </tr>
+                [% END %]
+            </tbody>
         </table>
     [% END %]
     [% IF accounts && totaldue != 0 %]
-        <table id="table_account_fines">
+        <table id="print-summary-fines">
             <caption>Account fines and payments</caption>
             <thead>
               <tr>
                   <th>Outstanding</th>
                 </tr>
             </thead>
-
-            [% FOREACH account IN accounts %]
-               <tr>
-                  <td>[% account.date | $KohaDates %]</td>
-                  <td>
-                      [% PROCESS account_type_description account=account %]
-                      [%- IF account.payment_type %]
-                          , [% AuthorisedValues.GetByCode('PAYMENT_TYPE', account.payment_type) | html %]
-                      [% END %]
-                      [%- IF account.description %]
-                          , [% account.description | html %]
-                      [% END %]
-                      &nbsp;
-                      [% IF ( account.itemnumber AND account.debit_type_code != 'OVERDUE' ) %]
-                          <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% account.item.biblionumber | uri %]&amp;itemnumber=[% account.itemnumber | uri %]">[% account.item.biblio.title | html %]</a>
-                      [% END %]
-                  </td>
-                  <td>
-                      [% account.note | html_line_break %]
-                  </td>
-                  [% IF ( account.amount < 0 ) %]
-                      <td class="credit" style="text-align: right;">
-                  [% ELSE %]
-                      <td class="debit" style="text-align: right;">
-                  [% END %][% account.amount | $Price %]
-                      </td>
-                  [% IF ( account.amountoutstanding < 0 ) %]
-                      <td class="credit" style="text-align: right;">
-                  [% ELSE %]
-                      <td class="debit" style="text-align: right;">
-                  [% END %]
-                          [% account.amountoutstanding | $Price %]
-                      </td>
-                </tr>
-            [% END %]
-
+            <tbody>
+                [% FOREACH account IN accounts %]
+                    <tr>
+                        <td>[% account.date | $KohaDates %]</td>
+                        <td>
+                            [% PROCESS account_type_description account=account %]
+                            [%- IF account.payment_type %]
+                                , [% AuthorisedValues.GetByCode('PAYMENT_TYPE', account.payment_type) | html %]
+                            [% END %]
+                            [%- IF account.description %]
+                                , [% account.description | html %]
+                            [% END %]
+                            &nbsp;
+                            [% IF ( account.itemnumber AND account.debit_type_code != 'OVERDUE' ) %]
+                                <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% account.item.biblionumber | uri %]&amp;itemnumber=[% account.itemnumber | uri %]">[% account.item.biblio.title | html %]</a>
+                            [% END %]
+                        </td>
+                        <td>
+                            [% account.note | html_line_break %]
+                        </td>
+                        [% IF ( account.amount <= 0 ) %]
+                            <td class="credit">
+                        [% ELSE %]
+                            <td class="debit">
+                        [% END %]
+                            [% account.amount | $Price %]
+                        </td>
+                        [% IF ( account.amountoutstanding <= 0 ) %]
+                            <td class="credit">
+                        [% ELSE %]
+                            <td class="debit">
+                        [% END %]
+                            [% account.amountoutstanding | $Price %]
+                        </td>
+                    </tr>
+                [% END %]
+            </tbody>
             <tfoot>
                 <tr>
-                    <td colspan="4">Total due</td>
-                    <td colspan="2" style="text-align:right;">[% totaldue | $Price %]</td>
+                    <td></td>
+                    <td></td>
+                    <td ></td>
+                    [% IF ( totaldue < 0 ) %]
+                        <td class="credit">
+                    [% ELSE %]
+                        <td class="debit">
+                    [% END %]
+                        Total due:
+                    </td>
+                    [% IF ( totaldue < 0 ) %]
+                        <td class="credit">
+                    [% ELSE %]
+                        <td class="debit">
+                    [% END %]
+                        [% totaldue | $Price %]
+                    </td>
                 </tr>
             </tfoot>
         </table>
 
 [% MACRO jsinclude BLOCK %]
     [% INCLUDE 'slip-print.inc' #printThenClose %]
+    [% INCLUDE 'datatables.inc' %]
+    [% INCLUDE 'columns_settings.inc' %]
+    <script>
+        var checkouts_columns = [% TablesSettings.GetColumns( 'circ', 'print_summary', 'print-summary-checkouts', 'json' ) | $raw %];
+        var holds_columns = [% TablesSettings.GetColumns( 'circ', 'print_summary', 'print-summary-holds', 'json' ) | $raw %];
+        var fines_columns = [% TablesSettings.GetColumns( 'circ', 'print_summary', 'print-summary-fines', 'json' ) | $raw %];
+
+        function moveColumnsButton( tableId ){
+            /* Hide the export button */
+            $("#" + tableId + "_wrapper").find("button.export_controls").remove();
+            /* We don't show the table controls toolbar here, so the columns settings button looks better as part of the caption */
+            $("#" + tableId).find("caption").append( $("#" + tableId + "_wrapper").find("button.columns_controls") );
+        }
+
+        $(document).ready(function() {
+
+            KohaTable("print-summary-checkouts", {
+                "dom": "Bt",
+                "paging": "false",
+                initComplete: function( settings) {
+                    moveColumnsButton( settings.nTable.id );
+                }
+            }, checkouts_columns);
+
+            KohaTable("print-summary-holds", {
+                "dom": "Bt",
+                "paging": "false",
+                initComplete: function( settings) {
+                    moveColumnsButton( settings.nTable.id );
+                }
+            }, holds_columns);
+
+            KohaTable("print-summary-fines", {
+                "dom": "Bt",
+                "paging": "false",
+                initComplete: function( settings) {
+                    moveColumnsButton( settings.nTable.id );
+                }
+            }, fines_columns);
+
+        });
+    </script>
 [% END %]
 
 [% INCLUDE 'intranet-bottom.inc' %]