View | Details | Raw Unified | Return to bug 29983
Collapse All | Expand All

(-)a/circ/overdue.pl (-1 / +11 lines)
Lines 250-261 if ($noreport) { Link Here
250
        items.replacementprice,
250
        items.replacementprice,
251
        items.enumchron,
251
        items.enumchron,
252
        items.itemnotes_nonpublic,
252
        items.itemnotes_nonpublic,
253
        items.itype
253
        items.itype,
254
        return_claims.created_on AS return_claim_created_on,
255
        return_claims.id AS return_claim_id
254
      FROM issues
256
      FROM issues
255
    LEFT JOIN borrowers   ON (issues.borrowernumber=borrowers.borrowernumber )
257
    LEFT JOIN borrowers   ON (issues.borrowernumber=borrowers.borrowernumber )
256
    LEFT JOIN items       ON (issues.itemnumber=items.itemnumber)
258
    LEFT JOIN items       ON (issues.itemnumber=items.itemnumber)
257
    LEFT JOIN biblioitems ON (biblioitems.biblioitemnumber=items.biblioitemnumber)
259
    LEFT JOIN biblioitems ON (biblioitems.biblioitemnumber=items.biblioitemnumber)
258
    LEFT JOIN biblio      ON (biblio.biblionumber=items.biblionumber )
260
    LEFT JOIN biblio      ON (biblio.biblionumber=items.biblionumber )
261
    LEFT JOIN return_claims ON (return_claims.borrowernumber=borrowers.borrowernumber AND return_claims.itemnumber=items.itemnumber)
259
    WHERE 1=1 "; # placeholder, since it is possible that none of the additional
262
    WHERE 1=1 "; # placeholder, since it is possible that none of the additional
260
                 # conditions will be selected by user
263
                 # conditions will be selected by user
261
    $strsth.=" AND date_due               < '" . $todaysdate     . "' " unless ($showall);
264
    $strsth.=" AND date_due               < '" . $todaysdate     . "' " unless ($showall);
Lines 303-308 if ($noreport) { Link Here
303
        my $pattrs = $borrowernumber_to_attributes{$data->{borrowernumber}} || {};  # patron attrs for this borrower
306
        my $pattrs = $borrowernumber_to_attributes{$data->{borrowernumber}} || {};  # patron attrs for this borrower
304
        # $pattrs is a hash { attrcode => [  [value,displayvalue], [value,displayvalue]... ] }
307
        # $pattrs is a hash { attrcode => [  [value,displayvalue], [value,displayvalue]... ] }
305
308
309
        my $return_claim_created_on = $data->{return_claim_created_on};
310
        if ( defined $return_claim_created_on ) {
311
            $return_claim_created_on = output_pref({ dt => dt_from_string($return_claim_created_on ) });
312
        }
313
306
        my @patron_attr_value_loop;   # template array [ {value=>v1}, {value=>v2} ... } ]
314
        my @patron_attr_value_loop;   # template array [ {value=>v1}, {value=>v2} ... } ]
307
        for my $pattr_filter (grep { ! $_->{isclone} } @patron_attr_filter_loop) {
315
        for my $pattr_filter (grep { ! $_->{isclone} } @patron_attr_filter_loop) {
308
            my @displayvalues = map { $_->[1] } @{ $pattrs->{$pattr_filter->{code}} };   # grab second value from each subarray
316
            my @displayvalues = map { $_->[1] } @{ $pattrs->{$pattr_filter->{code}} };   # grab second value from each subarray
Lines 339-344 if ($noreport) { Link Here
339
            itemcallnumber         => $data->{itemcallnumber},
347
            itemcallnumber         => $data->{itemcallnumber},
340
            replacementprice       => $data->{replacementprice},
348
            replacementprice       => $data->{replacementprice},
341
            itemnotes_nonpublic    => $data->{itemnotes_nonpublic},
349
            itemnotes_nonpublic    => $data->{itemnotes_nonpublic},
350
            return_claim_created_on => $return_claim_created_on,
351
            return_claim_id        => $data->{return_claim_id},
342
            enumchron              => $data->{enumchron},
352
            enumchron              => $data->{enumchron},
343
            itemtype               => $data->{itype},
353
            itemtype               => $data->{itype},
344
            patron_attr_value_loop => \@patron_attr_value_loop,
354
            patron_attr_value_loop => \@patron_attr_value_loop,
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/checkouts-table.inc (+3 lines)
Lines 1-4 Link Here
1
[% USE Koha %]
1
[% USE Koha %]
2
[% PROCESS 'modal-claims.inc' %]
2
<div id="checkouts">
3
<div id="checkouts">
3
    [% IF ( issuecount ) %]
4
    [% IF ( issuecount ) %]
4
        <div id="issues-table-loading-message">
5
        <div id="issues-table-loading-message">
Lines 92-97 Link Here
92
</div>
93
</div>
93
94
94
<!-- Claims Returned Modal -->
95
<!-- Claims Returned Modal -->
96
97
[% PROCESS 'modal-claims-display' %]
95
<div class="modal fade" id="claims-returned-modal" tabindex="-1" role="dialog" aria-labelledby="claims-returned-modal-label">
98
<div class="modal fade" id="claims-returned-modal" tabindex="-1" role="dialog" aria-labelledby="claims-returned-modal-label">
96
  <div class="modal-dialog" role="document">
99
  <div class="modal-dialog" role="document">
97
    <div class="modal-content">
100
    <div class="modal-content">
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/js-date-format.inc (-1 / +1 lines)
Lines 57-63 Link Here
57
57
58
        window.$time = function(value, options) {
58
        window.$time = function(value, options) {
59
            if(!value) return '';
59
            if(!value) return '';
60
            var tz = (opitons&&options.tz)||def_tz;
60
            var tz = (options&&options.tz)||def_tz;
61
            var m = moment(value);
61
            var m = moment(value);
62
            if(tz) m.tz(tz);
62
            if(tz) m.tz(tz);
63
63
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/modal-claims.inc (+104 lines)
Line 0 Link Here
1
2
[% USE Koha %]
3
<!-- modal-claims.inc -->
4
5
[% BLOCK 'modal-claims-display' %]
6
    <!-- Claims Returned Modal -->
7
    <div class="modal fade" id="claims-returned-modal" tabindex="-1" role="dialog" aria-labelledby="claims-returned-modal-label">
8
        <div class="modal-dialog" role="document">
9
            <div class="modal-content">
10
                <div class="modal-header">
11
                    <h4 class="modal-title" id="claims-returned-modal-label">Claim returned</h4>
12
                </div>
13
                <div class="modal-body">
14
15
                    <div class="form-group">
16
                        <label for="claims-returned-notes" class="control-label">Notes</label>
17
                        <div>
18
                        <textarea id="claims-returned-notes" class="form-control" rows="3"></textarea>
19
                        </div>
20
                    </div>
21
22
                    [% IF Koha.Preference('ClaimReturnedChargeFee') == 'ask' %]
23
                        <div class="form-group">
24
                        <div class="checkbox">
25
                            <label for="claims-returned-charge-lost-fee">
26
                            <input id="claims-returned-charge-lost-fee" type="checkbox" value="1">
27
                            Charge lost fee
28
                            </label>
29
                        </div>
30
                        </div>
31
                    [% END %]
32
33
                    <input type="hidden" id="claims-returned-itemnumber" />
34
                </div>
35
                <div class="modal-footer">
36
                    <button id="claims-returned-modal-btn-submit" type="button" class="btn btn-primary"><i class="fa fa-exclamation-circle"></i> Make claim</button>
37
                    <button class="btn btn-default deny cancel" href="#" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times"></i> Cancel</button>
38
                </div>
39
            </div>
40
        </div>
41
    </div>
42
[% END %]
43
44
[% BLOCK 'modal-claims-js' %]
45
<script>
46
47
    // Verify if the syspref is defined
48
    var ClaimReturnedLostValue = "[% Koha.Preference('ClaimReturnedLostValue') | html %]";
49
50
    var logged_in_user_borrowernumber = "[% logged_in_user.borrowernumber | html %]";
51
    var interface = "[% interface | html %]";
52
    var theme = "[% theme | html %]";
53
54
    // Handle return claims
55
    $(document).on("click", '.claim-returned-btn', function(e){
56
        e.preventDefault();
57
        itemnumber = $(this).data('itemnumber');
58
59
        $('#claims-returned-itemnumber').val(itemnumber);
60
        $('#claims-returned-notes').val("");
61
        $('#claims-returned-charge-lost-fee').attr('checked', false);
62
        $('#claims-returned-modal').modal();
63
    });
64
    $(document).on("click", '#claims-returned-modal-btn-submit', function(e){
65
        let itemnumber = $('#claims-returned-itemnumber').val();
66
        let notes = $('#claims-returned-notes').val();
67
        let fee = $('#claims-returned-charge-lost-fee').attr('checked') ? true : false;
68
69
        $('#claims-returned-modal').modal('hide');
70
71
        const button = $('.claim-returned-btn[data-itemnumber="' + itemnumber + '"]');
72
        const img = '<img id="return_claim_spinner_' + itemnumber + '" src="' + interface + '/' + theme + '/img/spinner-small.gif" />';
73
        button.replaceWith(img);
74
75
        params = {
76
            item_id: itemnumber,
77
            notes: notes,
78
            charge_lost_fee: fee,
79
            created_by: logged_in_user_borrowernumber,
80
        };
81
82
        $.post( '/api/v1/return_claims', JSON.stringify(params), function( data ) {
83
84
            id = "#return_claim_spinner_" + data.item_id;
85
86
            let created_on = new Date(data.created_on);
87
            let formated_date = $datetime(created_on);
88
89
            let content = "";
90
            if ( data.claim_id ) {
91
                content = '<span class="badge">' + formated_date + '</span>';
92
                $(id).parent().parent().addClass('ok');
93
            } else {
94
                content = __("Unable to claim as returned");
95
                $(id).parent().parent().addClass('warn');
96
            }
97
98
            $(id).replaceWith( content );
99
100
            $('body').trigger('refreshClaimModal');
101
        }, "json")
102
    });
103
</script>
104
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (+2 lines)
Lines 955-960 Link Here
955
    [% INCLUDE 'select2.inc' %]
955
    [% INCLUDE 'select2.inc' %]
956
    [% Asset.js("lib/jquery/plugins/rowGroup/dataTables.rowGroup.min.js") | $raw %]
956
    [% Asset.js("lib/jquery/plugins/rowGroup/dataTables.rowGroup.min.js") | $raw %]
957
    [% INCLUDE 'js-date-format.inc' %]
957
    [% INCLUDE 'js-date-format.inc' %]
958
    [% PROCESS 'modal-claims-js' %]
959
958
    <script>
960
    <script>
959
        /* Set some variable needed in circulation.js */
961
        /* Set some variable needed in circulation.js */
960
        var logged_in_user_borrowernumber = "[% logged_in_user.borrowernumber | html %]";
962
        var logged_in_user_borrowernumber = "[% logged_in_user.borrowernumber | html %]";
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/overdue.tt (+21 lines)
Lines 2-7 Link Here
2
[% USE Asset %]
2
[% USE Asset %]
3
[% USE AuthorisedValues %]
3
[% USE AuthorisedValues %]
4
[% USE KohaDates %]
4
[% USE KohaDates %]
5
[% USE Koha %]
5
[%- USE Branches -%]
6
[%- USE Branches -%]
6
[%- USE Price -%]
7
[%- USE Price -%]
7
[%- USE ItemTypes -%]
8
[%- USE ItemTypes -%]
Lines 9-14 Link Here
9
[%- USE TablesSettings -%]
10
[%- USE TablesSettings -%]
10
[% SET footerjs = 1 %]
11
[% SET footerjs = 1 %]
11
[% INCLUDE 'doc-head-open.inc' %]
12
[% INCLUDE 'doc-head-open.inc' %]
13
[% PROCESS 'modal-claims.inc' %]
12
<title>Items overdue as of [% todaysdate | html %] &rsaquo; Circulation &rsaquo; Koha</title>
14
<title>Items overdue as of [% todaysdate | html %] &rsaquo; Circulation &rsaquo; Koha</title>
13
[% INCLUDE 'doc-head-close.inc' %]
15
[% INCLUDE 'doc-head-close.inc' %]
14
[% FILTER collapse %]
16
[% FILTER collapse %]
Lines 92-97 Link Here
92
          <th>Item type</th>
94
          <th>Item type</th>
93
          <th>Price</th>
95
          <th>Price</th>
94
          <th>Non-public note</th>
96
          <th>Non-public note</th>
97
          <th>Return claims</th>
95
        </tr>
98
        </tr>
96
      </thead>
99
      </thead>
97
      [%- BLOCK subject -%]Overdue:[%- END -%]
100
      [%- BLOCK subject -%]Overdue:[%- END -%]
Lines 117-128 Link Here
117
            <td>[% ItemTypes.GetDescription( overdueloo.itemtype ) | html %]</td>
120
            <td>[% ItemTypes.GetDescription( overdueloo.itemtype ) | html %]</td>
118
          <td>[% overdueloo.replacementprice | $Price %]</td>
121
          <td>[% overdueloo.replacementprice | $Price %]</td>
119
          <td>[% overdueloo.itemnotes_nonpublic | html %]</td>
122
          <td>[% overdueloo.itemnotes_nonpublic | html %]</td>
123
          <td>
124
            [% IF ( overdueloo.return_claim_created_on ) %]
125
                <span class="badge">[% overdueloo.return_claim_created_on %]</span>
126
            [% ELSIF Koha.Preference('ClaimReturnedLostValue') %]
127
                <a class="btn btn-default btn-xs claim-returned-btn" data-itemnumber=[% overdueloo.itemnum | html %]>
128
                    <i class="fa fa-exclamation-circle"></i> Claim returned
129
                </a>
130
            [% ELSE %]
131
                <a class="btn btn-default btn-xs" disabled="disabled" title="ClaimReturnedLostValue is not set, this feature is disabled">
132
                    <i class="fa fa-exclamation-circle"></i> Claim returned
133
                </a>
134
            [% END %]
135
          </td>
120
        </tr>
136
        </tr>
121
      [% END %]
137
      [% END %]
122
      </tbody>
138
      </tbody>
123
    </table>
139
    </table>
124
  </div>
140
  </div>
125
141
142
 <!-- Claims Returned Modal -->
143
 [% PROCESS 'modal-claims-display' %]
144
126
[% ELSE %]
145
[% ELSE %]
127
146
128
  <h2>Overdue report</h2>
147
  <h2>Overdue report</h2>
Lines 266-271 Link Here
266
    [% INCLUDE 'datatables.inc' %]
285
    [% INCLUDE 'datatables.inc' %]
267
    [% INCLUDE 'columns_settings.inc' %]
286
    [% INCLUDE 'columns_settings.inc' %]
268
    [% INCLUDE 'select2.inc' %]
287
    [% INCLUDE 'select2.inc' %]
288
    [% INCLUDE 'js-date-format.inc' %]
289
    [% PROCESS 'modal-claims-js' %]
269
    <script>
290
    <script>
270
        function clone_input( node, original_id ) {
291
        function clone_input( node, original_id ) {
271
            var original = node;
292
            var original = node;
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (+1 lines)
Lines 861-866 Link Here
861
    [% INCLUDE 'timepicker.inc' %]
861
    [% INCLUDE 'timepicker.inc' %]
862
    [% INCLUDE 'select2.inc' %]
862
    [% INCLUDE 'select2.inc' %]
863
    [% INCLUDE 'js-date-format.inc' %]
863
    [% INCLUDE 'js-date-format.inc' %]
864
    [% PROCESS 'modal-claims-js' %]
864
    <script>
865
    <script>
865
        /* Set some variable needed in circulation.js */
866
        /* Set some variable needed in circulation.js */
866
        var logged_in_user_borrowernumber = "[% logged_in_user.borrowernumber | html %]";
867
        var logged_in_user_borrowernumber = "[% logged_in_user.borrowernumber | html %]";
(-)a/koha-tmpl/intranet-tmpl/prog/js/checkouts.js (-49 / +4 lines)
Lines 888-943 $(document).ready(function() { Link Here
888
        } ).prop('checked', false);
888
        } ).prop('checked', false);
889
    }
889
    }
890
890
891
    // Handle return claims
891
    // Refresh after return claim
892
    $(document).on("click", '.claim-returned-btn', function(e){
892
    $('body').on('refreshClaimModal', function () {
893
        e.preventDefault();
893
        refreshReturnClaimsTable();
894
        itemnumber = $(this).data('itemnumber');
894
        issuesTable.api().ajax.reload();
895
896
        $('#claims-returned-itemnumber').val(itemnumber);
897
        $('#claims-returned-notes').val("");
898
        $('#claims-returned-charge-lost-fee').attr('checked', false)
899
        $('#claims-returned-modal').modal()
900
    });
901
    $(document).on("click", '#claims-returned-modal-btn-submit', function(e){
902
        let itemnumber = $('#claims-returned-itemnumber').val();
903
        let notes = $('#claims-returned-notes').val();
904
        let fee = $('#claims-returned-charge-lost-fee').attr('checked') ? true : false;
905
906
        $('#claims-returned-modal').modal('hide')
907
908
        $('.claim-returned-btn[data-itemnumber="' + itemnumber + '"]').replaceWith('<img id="return_claim_spinner_' + itemnumber + ' src=' + interface + '/' + theme + '/img/spinner-small.gif />');
909
910
        params = {
911
            item_id: itemnumber,
912
            notes: notes,
913
            charge_lost_fee: fee,
914
            created_by: logged_in_user_borrowernumber,
915
        };
916
917
        $.post( '/api/v1/return_claims', JSON.stringify(params), function( data ) {
918
919
            id = "#return_claim_spinner_" + data.item_id;
920
921
            let created_on = new Date(data.created_on);
922
923
            let content = "";
924
            if ( data.claim_id ) {
925
                content = '<span class="badge">' + created_on.toLocaleDateString() + '</span>';
926
                $(id).parent().parent().addClass('ok');
927
            } else {
928
                content = __("Unable to claim as returned");
929
                $(id).parent().parent().addClass('warn');
930
            }
931
932
            $(id).replaceWith( content );
933
934
            refreshReturnClaimsTable();
935
            issuesTable.api().ajax.reload();
936
        }, "json")
937
938
    });
895
    });
939
896
940
941
    // Don't load return claims table unless it is clicked on
897
    // Don't load return claims table unless it is clicked on
942
    var returnClaimsTable;
898
    var returnClaimsTable;
943
    $("#return-claims-tab").click( function() {
899
    $("#return-claims-tab").click( function() {
944
- 

Return to bug 29983