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

(-)a/koha-tmpl/intranet-tmpl/prog/en/js/checkouts.js (+123 lines)
Lines 1-4 Link Here
1
$(document).ready(function() {
1
$(document).ready(function() {
2
    // Handle the select all/none links for checkouts table columns
3
    $("#CheckAllRenewals").on("click",function(){
4
        $("#UncheckAllCheckins").click();
5
        $(".renew:visible").attr("checked", "checked" );
6
        return false;
7
    });
8
    $("#UncheckAllRenewals").on("click",function(){
9
        $(".renew:visible").removeAttr("checked");
10
        return false;
11
    });
12
13
    $("#CheckAllCheckins").on("click",function(){
14
        $("#UncheckAllRenewals").click();
15
        $(".checkin:visible").attr("checked", "checked" );
16
        return false;
17
    });
18
    $("#UncheckAllCheckins").on("click",function(){
19
        $(".checkin:visible").removeAttr("checked");
20
        return false;
21
    });
22
23
    // Don't allow both return and renew checkboxes to be checked
24
    $(document).on("change", '.renew', function(){
25
        if ( $(this).is(":checked") ) {
26
            $( "#checkin_" + $(this).val() ).removeAttr("checked");
27
        }
28
    });
29
    $(document).on("change", '.checkin', function(){
30
        if ( $(this).is(":checked") ) {
31
            $( "#renew_" + $(this).val() ).removeAttr("checked");
32
        }
33
    });
34
35
    // Clicking the table cell checks the checkbox inside it
36
    $(document).on("click", 'td', function(e){
37
        if(e.target.tagName.toLowerCase() == 'td'){
38
          $(this).find("input:checkbox:visible").each( function() {
39
            $(this).click();
40
          });
41
        }
42
    });
43
44
    // Handle renewals
45
    $("#RenewCheckinChecked").on("click",function(){
46
        $(".checkin:checked:visible").each(function() {
47
            itemnumber = $(this).val();
48
49
            $(this).replaceWith("<img id='checkin_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");       
50
51
            params = { 
52
                itemnumber:     itemnumber, 
53
                borrowernumber: borrowernumber,
54
                branchcode:     branchcode,
55
                exempt_fine:    $("#exemptfine").is(':checked')
56
            };
57
58
            $.post( "/cgi-bin/koha/api/checkin.pl", params, function( data ) {
59
                id = "#checkin_" + data.itemnumber;
60
61
                content = "";
62
                if ( data.returned ) {
63
                    content = _("Returned");
64
                } else {
65
                    content = _("Unable to return");
66
                }
67
                    
68
                $(id).replaceWith( content );
69
            }, "json")
70
        });
71
72
        $(".renew:checked:visible").each(function() {
73
            var override_limit = $("#override_limit").is(':checked') ? 1 : 0;
74
75
            var itemnumber = $(this).val();
76
77
            $(this).replaceWith("<img id='renew_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");       
78
79
            var params = { 
80
                itemnumber:     itemnumber, 
81
                borrowernumber: borrowernumber,
82
                branchcode:     branchcode,
83
                override_limit: override_limit,
84
                date_due:       $("#newduedate").val()
85
            };
86
87
            $.post( "/cgi-bin/koha/api/renew.pl", params, function( data ) {
88
                var id = "#renew_" + data.itemnumber;
89
90
                var content = "";
91
                if ( data.renew_okay ) {
92
                    content = _("Renewed, due: ") + data.date_due;
93
                } else {
94
                    content = _("Renew failed: ");
95
                    if ( data.error == "no_checkout" ) {
96
                        content += _("not checked out");
97
                    } else if ( data.error == "too_many" ) {
98
                        content += _("too many renewals");
99
                    } else if ( data.error == "on_reserve" ) {
100
                        content += _("on reserve");
101
                    } else if ( data.error ) {
102
                        content += data.error;
103
                    } else {
104
                        content += _("reason unknown");
105
                    }
106
                }
107
                    
108
                $(id).replaceWith( content );
109
            }, "json")
110
        });
111
112
        // Prevent form submit
113
        return false;
114
    });
115
116
    $("#RenewAll").on("click",function(){
117
        $("#CheckAllRenewals").click();
118
        $("#UncheckAllCheckins").click();
119
        $("#RenewCheckinChecked").click();
120
121
        // Prevent form submit
122
        return false;
123
    });
124
2
    var ymd = $.datepicker.formatDate('yy-mm-dd', new Date());
125
    var ymd = $.datepicker.formatDate('yy-mm-dd', new Date());
3
126
4
    $("#issues-table").dataTable({
127
    $("#issues-table").dataTable({
(-)a/koha-tmpl/intranet-tmpl/prog/en/js/pages/circulation.js (-129 lines)
Lines 1-25 Link Here
1
$(document).ready(function() {
1
$(document).ready(function() {
2
    // Handle the select all/none links for checkouts table columns
3
    $("#CheckAllRenewals").on("click",function(){
4
        $("#UncheckAllCheckins").click();
5
        $(".renew:visible").attr("checked", "checked" );
6
        return false;
7
    });
8
    $("#UncheckAllRenewals").on("click",function(){
9
        $(".renew:visible").removeAttr("checked");
10
        return false;
11
    });
12
13
    $("#CheckAllCheckins").on("click",function(){
14
        $("#UncheckAllRenewals").click();
15
        $(".checkin:visible").attr("checked", "checked" );
16
        return false;
17
    });
18
    $("#UncheckAllCheckins").on("click",function(){
19
        $(".checkin:visible").removeAttr("checked");
20
        return false;
21
    });
22
23
    $("#CheckAllExports").on("click",function(){
2
    $("#CheckAllExports").on("click",function(){
24
        $(".export:visible").attr("checked", "checked" );
3
        $(".export:visible").attr("checked", "checked" );
25
        return false;
4
        return false;
Lines 29-127 $(document).ready(function() { Link Here
29
        return false;
8
        return false;
30
    });
9
    });
31
10
32
    // Don't allow both return and renew checkboxes to be checked
33
    $(document).on("change", '.renew', function(){
34
        if ( $(this).is(":checked") ) {
35
            $( "#checkin_" + $(this).val() ).removeAttr("checked");
36
        }
37
    });
38
    $(document).on("change", '.checkin', function(){
39
        if ( $(this).is(":checked") ) {
40
            $( "#renew_" + $(this).val() ).removeAttr("checked");
41
        }
42
    });
43
44
    // Handle renewals
45
    $("#RenewCheckinChecked").on("click",function(){
46
        $(".checkin:checked:visible").each(function() {
47
            itemnumber = $(this).val();
48
49
            $(this).replaceWith("<img id='checkin_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");       
50
51
            params = { 
52
                itemnumber:     itemnumber, 
53
                borrowernumber: borrowernumber,
54
                branchcode:     branchcode,
55
                exempt_fine:    $("#exemptfine").is(':checked')
56
            };
57
58
            $.post( "/cgi-bin/koha/api/checkin.pl", params, function( data ) {
59
                id = "#checkin_" + data.itemnumber;
60
61
                content = "";
62
                if ( data.returned ) {
63
                    content = _("Returned");
64
                } else {
65
                    content = _("Unable to return");
66
                }
67
                    
68
                $(id).replaceWith( content );
69
            }, "json")
70
        });
71
72
        $(".renew:checked:visible").each(function() {
73
            var override_limit = $("#override_limit").is(':checked') ? 1 : 0;
74
75
            var itemnumber = $(this).val();
76
77
            $(this).replaceWith("<img id='renew_" + itemnumber + "' src='" + interface + "/" + theme + "/img/loading-small.gif' />");       
78
79
            var params = { 
80
                itemnumber:     itemnumber, 
81
                borrowernumber: borrowernumber,
82
                branchcode:     branchcode,
83
                override_limit: override_limit,
84
                date_due:       $("#newduedate").val()
85
            };
86
87
            $.post( "/cgi-bin/koha/api/renew.pl", params, function( data ) {
88
                var id = "#renew_" + data.itemnumber;
89
90
                var content = "";
91
                if ( data.renew_okay ) {
92
                    content = _("Renewed, due: ") + data.date_due;
93
                } else {
94
                    content = _("Renew failed: ");
95
                    if ( data.error == "no_checkout" ) {
96
                        content += _("not checked out");
97
                    } else if ( data.error == "too_many" ) {
98
                        content += _("too many renewals");
99
                    } else if ( data.error == "on_reserve" ) {
100
                        content += _("on reserve");
101
                    } else if ( data.error ) {
102
                        content += data.error;
103
                    } else {
104
                        content += _("reason unknown");
105
                    }
106
                }
107
                    
108
                $(id).replaceWith( content );
109
            }, "json")
110
        });
111
112
        // Prevent form submit
113
        return false;
114
    });
115
116
    $("#RenewAll").on("click",function(){
117
        $("#CheckAllRenewals").click();
118
        $("#UncheckAllCheckins").click();
119
        $("#RenewCheckinChecked").click();
120
121
        // Prevent form submit
122
        return false;
123
    });
124
125
    $('#patronlists').tabs();
11
    $('#patronlists').tabs();
126
12
127
    $("#messages ul").after("<a href=\"#\" id=\"addmessage\">"+MSG_ADD_MESSAGE+"</a>");
13
    $("#messages ul").after("<a href=\"#\" id=\"addmessage\">"+MSG_ADD_MESSAGE+"</a>");
Lines 156-169 $(document).ready(function() { Link Here
156
        return false;
42
        return false;
157
    });
43
    });
158
44
159
    // Clicking the table cell checks the checkbox inside it
160
    $(document).on("click", 'td', function(e){
161
        if(e.target.tagName.toLowerCase() == 'td'){
162
          $(this).find("input:checkbox:visible").each( function() {
163
            $(this).click();
164
          });
165
        }
166
    });
167
});
45
});
168
46
169
function export_checkouts(format) {
47
function export_checkouts(format) {
Lines 200-209 function validate1(date) { Link Here
200
        return false;
78
        return false;
201
     }
79
     }
202
}
80
}
203
204
// prevent adjacent checkboxes from being checked simultaneously
205
function radioCheckBox(box){
206
    box.parents("td").siblings().find("input:checkbox.radio").each(function(){
207
        $(this).removeAttr("checked");
208
    });
209
 }
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (-55 / +29 lines)
Lines 668-675 No patron matched <span class="ex">[% message %]</span> Link Here
668
668
669
<!-- SUMMARY : TODAY & PREVIOUS ISSUES -->
669
<!-- SUMMARY : TODAY & PREVIOUS ISSUES -->
670
<div id="checkouts">
670
<div id="checkouts">
671
[% IF ( issuecount ) %]
671
    [% IF ( issuecount ) %]
672
    <form name="issues" action="/cgi-bin/koha/tools/export.pl" method="post" class="checkboxed">
673
        <table id="issues-table">
672
        <table id="issues-table">
674
            <thead>
673
            <thead>
675
                <tr>
674
                <tr>
Lines 689-752 No patron matched <span class="ex">[% message %]</span> Link Here
689
            [% INCLUDE 'checkouts-table-footer.inc' %]
688
            [% INCLUDE 'checkouts-table-footer.inc' %]
690
        </table>
689
        </table>
691
690
692
        [% IF ( issuecount ) %]
691
        <fieldset class="action">
693
            <fieldset class="action">
692
            [% IF ( CAN_user_circulate_override_renewals ) %]
694
                [% IF ( CAN_user_circulate_override_renewals ) %]
693
                [% IF ( AllowRenewalLimitOverride ) %]
695
                    [% IF ( AllowRenewalLimitOverride ) %]
694
                    <label for="override_limit">Override renewal limit:</label>
696
                        <label for="override_limit">Override renewal limit:</label>
695
                    <input type="checkbox" name="override_limit" id="override_limit" value="1" />
697
                        <input type="checkbox" name="override_limit" id="override_limit" value="1" />
698
                    [% END %]
699
                [% END %]
696
                [% END %]
700
                <button class="btn" id="RenewCheckinChecked"><i class="icon-check"></i> Renew or return checked items</button>
701
                <button class="btn" id="RenewAll"><i class="icon-book"></i> Renew all</button>
702
            </fieldset>
703
704
            [% IF ( exports_enabled ) %]
705
                <fieldset>
706
                    <label for="export_formats"><b>Export checkouts using format:</b></label>
707
                    <select name="export_formats" id="export_formats">
708
                        <option value="iso2709_995">ISO2709 with items</option>
709
                        <option value="iso2709">ISO2709 without items</option>
710
                        [% IF ( export_with_csv_profile ) %]
711
                            <option value="csv">CSV</option>
712
                        [% END %]
713
                    </select>
714
715
                   <label for="export_remove_fields">Don't export fields:</label> <input type="text" id="export_remove_fields" name="export_remove_fields" value="[% export_remove_fields %]" title="Use for iso2709 exports" />
716
                    <input type="hidden" name="op" value="export" />
717
                    <input type="hidden" id="export_format" name="format" value="iso2709" />
718
                    <input type="hidden" id="dont_export_item" name="dont_export_item" value="0" />
719
                    <input type="hidden" id="record_type" name="record_type" value="bibs" />
720
                    <button class="btn btn-small" id="export_submit"><i class="icon-download-alt"></i> Export</button>
721
                </fieldset>
722
            [% END %]
697
            [% END %]
723
        [% END %]
698
            <button class="btn" id="RenewCheckinChecked"><i class="icon-check"></i> Renew or return checked items</button>
724
    </form>
699
            <button class="btn" id="RenewAll"><i class="icon-book"></i> Renew all</button>
725
[% ELSE %]
700
        </fieldset>
726
    <p>Patron has nothing checked out.</p>
701
    [% ELSE %]
727
[% END %]
702
        <p>Patron has nothing checked out.</p>
728
703
    [% END %]
729
</div>
704
</div>
730
705
731
732
[% IF ( relatives_issues_count ) %]
706
[% IF ( relatives_issues_count ) %]
733
<div id="relatives-issues">
707
    <div id="relatives-issues">
734
    <table id="relatives-issues-table">
708
        <table id="relatives-issues-table">
735
        <thead>
709
            <thead>
736
            <tr>
710
                <tr>
737
                <th scope="col">Due date</th>
711
                    <th scope="col">Due date</th>
738
                <th scope="col">Title</th>
712
                    <th scope="col">Title</th>
739
                <th scope="col">Item type</th>
713
                    <th scope="col">Item type</th>
740
                <th scope="col">Checked out on</th>
714
                    <th scope="col">Checked out on</th>
741
                <th scope="col">Checked out from</th>
715
                    <th scope="col">Checked out from</th>
742
                <th scope="col">Call no</th>
716
                    <th scope="col">Call no</th>
743
                <th scope="col">Charge</th>
717
                    <th scope="col">Charge</th>
744
                <th scope="col">Price</th>
718
                    <th scope="col">Price</th>
745
                <th scope="col">Patron</th>
719
                    <th scope="col">Patron</th>
746
            </tr>
720
                </tr>
747
        </thead>
721
            </thead>
748
    </table>
722
        </table>
749
</div>
723
    </div>
750
[% END %]
724
[% END %]
751
725
752
[% INCLUDE borrower_debarments.inc %]
726
[% INCLUDE borrower_debarments.inc %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (-224 / +97 lines)
Lines 15-22 Link Here
15
<script type="text/javascript" src="[% interface %]/[% theme %]/en/js/datatables.js"></script>
15
<script type="text/javascript" src="[% interface %]/[% theme %]/en/js/datatables.js"></script>
16
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
16
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
17
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery-ui-timepicker-addon.js"></script>
17
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery-ui-timepicker-addon.js"></script>
18
<script type="text/javascript" src="[% themelang %]/js/checkouts.js"></script>
18
<script type="text/JavaScript">
19
<script type="text/JavaScript">
19
//<![CDATA[
20
//<![CDATA[
21
/* Set some variable needed in circulation.js */
22
var interface = "[% interface %]";
23
var theme = "[% theme %]";
24
var borrowernumber = "[% borrowernumber %]";
25
var branchcode = "[% branch %]";
26
var exports_enabled = "[% exports_enabled %]";
27
var AllowRenewalLimitOverride = [% CAN_user_circulate_override_renewals && AllowRenewalLimitOverride %]; 
28
var relatives_borrowernumbers = new Array();
29
[% FOREACH b IN relatives_borrowernumbers %]
30
    relatives_borrowernumbers.push("[% b %]");
31
[% END %]
32
20
$(document).ready(function() {
33
$(document).ready(function() {
21
    $('#finesholdsissues').tabs({
34
    $('#finesholdsissues').tabs({
22
        // Correct table sizing for tables hidden in tabs
35
        // Correct table sizing for tables hidden in tabs
Lines 28-50 $(document).ready(function() { Link Here
28
            }
41
            }
29
        }
42
        }
30
    } );
43
    } );
31
    $("#issuest").dataTable($.extend(true, {}, dataTablesDefaults, {
32
        "sDom": 't',
33
        "aoColumnDefs": [
34
            { "aTargets": [ -1,-2 ], "bSortable": false, "bSearchable": false }
35
        ],
36
        "aoColumns": [
37
            { "sType": "title-string" },null,null,{ "sType": "title-string" },null,null,null,null,null,null
38
        ],
39
        "bPaginate": false
40
    }));
41
    $("#relissuest").dataTable($.extend(true, {}, dataTablesDefaults, {
42
        "sDom": 't',
43
        "aoColumns": [
44
            { "sType": "title-string" },null,null,{ "sType": "title-string" },null,null,null,null,null
45
        ],
46
        "bPaginate": false
47
    }));
48
    $("#holdst").dataTable($.extend(true, {}, dataTablesDefaults, {
44
    $("#holdst").dataTable($.extend(true, {}, dataTablesDefaults, {
49
        "sDom": 't',
45
        "sDom": 't',
50
        "aoColumnDefs": [
46
        "aoColumnDefs": [
Lines 67-108 $(document).ready(function() { Link Here
67
        }
63
        }
68
        return confirm(_("Are you sure you want to replace the current patron image? This cannot be undone."));
64
        return confirm(_("Are you sure you want to replace the current patron image? This cannot be undone."));
69
	});[% END %]
65
	});[% END %]
70
	$("#renew_all"      ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); });
66
71
	$("#CheckAllitems"  ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
72
    $("#CheckNoitems"   ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
73
	$("#CheckAllreturns").click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=barcodes]"); $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
74
    $("#CheckNoreturns" ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
75
76
    $("#relrenew_all"      ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); });
77
    $("#relCheckAllitems"  ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
78
    $("#relCheckNoitems"   ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
79
    $("#relCheckAllreturns").click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=barcodes]"); $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
80
    $("#relCheckNoreturns" ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
81
82
83
    [% IF ( CAN_user_circulate_override_renewals ) %]
84
    [% IF ( AllowRenewalLimitOverride ) %]
85
    $( '#override_limit' ).click( function () {
86
        if ( this.checked ) {
87
           $( '.renewals-allowed' ).show(); $( '.renewals-disabled' ).hide();
88
        } else {
89
           $( '.renewals-allowed' ).hide(); $( '.renewals-disabled' ).show();
90
        }
91
    } ).attr( 'checked', false );
92
    [% END %]
93
    [% END %]
94
	$("td").click(function(e){
95
		if(e.target.tagName.toLowerCase() == 'td'){
96
           $(this).find("input:checkbox").each( function() {
97
               $(this).attr('checked', !$(this).attr('checked'));
98
			   if($(this).attr('checked')){
99
                    $(this).parent().siblings().find("input:checkbox").each(function(){
100
                       if($(this).attr('checked')){ $(this).removeAttr('checked'); }
101
                   });
102
			   }
103
           });
104
		}
105
	});
106
    $("#suspend_until").datepicker({ minDate: 1 }); // require that hold suspended until date is after today
67
    $("#suspend_until").datepicker({ minDate: 1 }); // require that hold suspended until date is after today
107
    $("#newduedate").datetimepicker({
68
    $("#newduedate").datetimepicker({
108
        minDate: 1, // require that renewal date is after today
69
        minDate: 1, // require that renewal date is after today
Lines 427-614 function validate1(date) { Link Here
427
388
428
<div id="finesholdsissues" class="toptabs">
389
<div id="finesholdsissues" class="toptabs">
429
    <ul>
390
    <ul>
430
        <li><a href="#checkedout">[% issueloop.size %] Checkout(s)</a></li>
391
        <li><a href="#checkouts">[% issueloop.size %] Checkout(s)</a></li>
431
    [% IF relissueloop.size %]
392
        [% IF relatives_issues_count %]
432
        <li><a href="#relissues">Relatives' Checkouts</a></li>
393
            <li><a href="#relatives-issues" id="relatives-issues-tab">Relatives' checkouts</a></li>
433
    [% END %]
394
        [% END %]
434
        <li><a href="#finesandcharges">Fines &amp; Charges</a></li>
395
        <li><a href="#finesandcharges">Fines &amp; Charges</a></li>
435
        <li>[% IF ( countreserv ) %]
396
        <li>
436
            <a href="#onhold">[% countreserv %] Hold(s)</a>    [% ELSE %]
397
            [% IF ( countreserv ) %]
437
            <a href="#onhold">0 Holds</a>
398
                <a href="#onhold">[% countreserv %] Hold(s)</a>
438
    [% END %]</li>
399
            [% ELSE %]
400
                <a href="#onhold">0 Holds</a>
401
            [% END %]
402
        </li>
439
        <li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li>
403
        <li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li>
440
    </ul>
404
    </ul>
441
405
442
    <form action="/cgi-bin/koha/reserve/renewscript.pl" method="post" class="checkboxed">
406
    <div id="checkouts">
443
    <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
407
        [% IF ( issuecount ) %]
444
    <input type="hidden" name="branch" value="[% branch %]" />
408
            <form name="issues" action="/cgi-bin/koha/tools/export.pl" method="post" class="checkboxed">
445
<div id="checkedout">
409
                <table id="issues-table" style="width: 100% !Important;">
446
    [% IF ( issueloop ) %]
410
                    <thead>
447
    <table id="issuest">
411
                        <tr>
448
    <thead>
412
                            <th scope="col">Due date</th>
449
        <tr>
413
                            <th scope="col">Title</th>
450
            <th scope="col">Due date</th>
414
                            <th scope="col">Item type</th>
451
            <th scope="col">Title</th>
415
                            <th scope="col">Checked out on</th>
452
            <th scope="col">Item type</th>
416
                            <th scope="col">Checked out from</th>
453
            <th scope="col">Checked out on</th> 
417
                            <th scope="col">Call no</th>
454
            <th scope="col">Checked out from</th> 
418
                            <th scope="col">Charge</th>
455
            <th scope="col">Call no.</th>
419
                            <th scope="col">Price</th>
456
            <th scope="col">Charge</th>
420
                            <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllRenewals">select all</a> | <a href="#" id="UncheckAllRenewals">none</a></p></th>
457
            <th scope="col">Price</th>
421
                            <th scope="col">Check in <p class="column-tool"><a href="#" id="CheckAllCheckins">select all</a> | <a href="#" id="UncheckAllCheckins">none</a></p></th>
458
            <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllitems">select all</a> | <a href="#" id="CheckNoitems">none</a></p></th>
422
                            <th scope="col">Export <p class="column-tool"><a href="#" id="CheckAllExports">select all</a> | <a href="#" id="UncheckAllExports">none</a></p></th>
459
            <th scope="col">Check in <p class="column-tool"><a href="#" id="CheckAllreturns">select all</a> | <a href="#" id="CheckNoreturns">none</a></p></th>
423
                        </tr>
460
        </tr></thead>
424
                    </thead>
461
        [% INCLUDE 'checkouts-table-footer.inc' %]
425
                    [% INCLUDE 'checkouts-table-footer.inc' %]
462
       <tbody>
426
                </table>
463
       [% FOREACH issueloo IN issueloop %]
427
464
428
                [% IF ( issuecount ) %]
465
          [% IF ( issueloo.overdue ) %]
429
                    <fieldset class="action">
466
          <tr class="problem">
430
                        [% IF ( CAN_user_circulate_override_renewals ) %]
467
          [% ELSE %]
431
                            [% IF ( AllowRenewalLimitOverride ) %]
468
          <tr>
432
                                <label for="override_limit">Override renewal limit:</label>
469
          [% END %]
433
                                <input type="checkbox" name="override_limit" id="override_limit" value="1" />
470
          [% IF ( issueloo.red ) %]
434
                            [% END %]
471
              <td class="od">
435
                        [% END %]
472
          [% ELSE %]
436
                        <button class="btn" id="RenewCheckinChecked"><i class="icon-check"></i> Renew or return checked items</button>
473
            <td>
437
                        <button class="btn" id="RenewAll"><i class="icon-book"></i> Renew all</button>
474
          [% END %]
438
                    </fieldset>
475
                <span title="[% issueloo.date_due %]">[% issueloo.date_due | $KohaDates %]</span>
439
476
                [% IF ( issueloo.itemlost ) %]
440
                    [% IF ( exports_enabled ) %]
477
                                        <span class="lost">[% issueloo.itemlost %]</span>
441
                        <fieldset>
442
                            <label for="export_formats"><b>Export checkouts using format:</b></label>
443
                            <select name="export_formats" id="export_formats">
444
                                <option value="iso2709_995">ISO2709 with items</option>
445
                                <option value="iso2709">ISO2709 without items</option>
446
                                [% IF ( export_with_csv_profile ) %]
447
                                    <option value="csv">CSV</option>
448
                                [% END %]
449
                            </select>
450
451
                           <label for="export_remove_fields">Don't export fields:</label> <input type="text" id="export_remove_fields" name="export_remove_fields" value="[% export_remove_fields %]" title="Use for iso2709 exports" />
452
                            <input type="hidden" name="op" value="export" />
453
                            <input type="hidden" id="export_format" name="format" value="iso2709" />
454
                            <input type="hidden" id="dont_export_item" name="dont_export_item" value="0" />
455
                            <input type="hidden" id="record_type" name="record_type" value="bibs" />
456
                            <button class="btn btn-small" id="export_submit"><i class="icon-download-alt"></i> Export</button>
457
                        </fieldset>
478
                    [% END %]
458
                    [% END %]
479
                [% IF ( issueloo.damaged ) %]
480
                                        <span class="dmg">[% issueloo.itemdamaged %]</span>
481
                [% END %]
459
                [% END %]
482
</td>
460
            </form>
483
            <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% issueloo.biblionumber %]"><strong>[% issueloo.title |html %][% FOREACH subtitl IN issueloo.subtitle %] [% subtitl.subfield %][% END %]</strong></a>[% IF ( issueloo.author ) %], by [% issueloo.author %][% END %] [% IF ( issueloo.publishercode ) %]; [% issueloo.publishercode %] [% END %] [% IF ( issueloo.publicationyear ) %], [% issueloo.publicationyear %][% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% issueloo.biblionumber %]&amp;itemnumber=[% issueloo.itemnumber %]#item[% issueloo.itemnumber %]">[% issueloo.barcode %]</a></td>
484
<td>[% UNLESS ( noItemTypeImages ) %] [% IF ( issueloo.itemtype_image ) %]<img src="[% issueloo.itemtype_image %]" alt="" />[% END %][% END %][% issueloo.itemtype_description %]</td>
485
            <td><span title="[% issueloo.issuedate %]">[% issueloo.issuedate | $KohaDates%]</span></td>
486
            <td>[% issueloo.issuingbranchname %]</td>
487
            <td>[% issueloo.itemcallnumber %]</td>
488
            <td>[% issueloo.charge %]</td>
489
            <td>[% issueloo.replacementprice %]</td>
490
      [% IF ( issueloo.renew_failed ) %]
491
            <td class="problem">Renewal Failed</td>
492
      [% ELSE %]
493
            <td><span style="padding: 0 1em;">[% IF ( issueloo.renewals ) %][% issueloo.renewals %][% ELSE %]0[% END %]</span>
494
            [% IF ( issueloo.norenew ) %]
495
                [% IF ( issueloo.can_confirm ) %]<span class="renewals-allowed" style="display: none">
496
                    <input type="checkbox" name="all_items[]" value="[% issueloo.itemnumber %]" checked="checked" style="display: none;" />
497
                    [% IF ( issueloo.od ) %]
498
                        <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" checked="checked" />
499
                    [% ELSE %]
500
                        <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" />
501
                    [% END %]
502
                    </span>
503
                    [% IF issueloo.renewsallowed && issueloo.renewsleft %]
504
                        <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
505
                    [% END %]
506
                    <span class="renewals-disabled">
507
                [% END %]
508
                [% IF ( issueloo.norenew_reason_on_reserve ) %]
509
                <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On Hold</a>
510
                [% END %]
511
                    [% IF ( issueloo.norenew_reason_too_many ) %]
512
                        Not renewable
513
                    [% END %]
514
                [% IF ( issueloo.can_confirm ) %]
515
                    </span>
516
                [% END %]
517
            [% ELSE %]
518
            <input type="checkbox" name="all_items[]" value="[% issueloo.itemnumber %]" checked="checked" style="display: none;" />
519
            [% IF ( issueloo.red ) %]
520
            <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" checked="checked" onclick="uncheck_sibling(this);" />
521
            [% ELSE %]
522
            <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" onclick="uncheck_sibling(this);" />
523
            [% END %]
524
                [% IF issueloo.renewsallowed && issueloo.renewsleft %]
525
                    <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
526
                [% END %]
527
            [% END %]
528
            </td>
529
      [% END %]
530
      [% IF ( issueloo.return_failed ) %]
531
            <td class="problem">Check-in failed</td>
532
      [% ELSE %]
533
        [% IF ( issueloo.norenew_reason_on_reserve ) %]
534
            <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On hold</a></td>
535
        [% ELSE %]
461
        [% ELSE %]
536
            <td><input type="checkbox" name="barcodes[]"  value="[% issueloo.barcode %]" onclick="uncheck_sibling(this);" />
462
            <p>Patron has nothing checked out.</p>
537
                <input type="checkbox" name="all_barcodes[]" value="[% issueloo.barcode %]" checked="checked" style="display: none;" />
538
            </td>
539
        [% END %]
540
      [% END %]
541
        </tr>
542
  [% END %]
543
        </tbody>
544
        </table>
545
        <fieldset class="action">
546
        [% IF ( CAN_user_circulate_override_renewals ) %]
547
        [% IF ( AllowRenewalLimitOverride ) %]
548
        <label for="override_limit">Override renewal limit:</label>
549
        <input type="checkbox" name="override_limit" id="override_limit" value="1" />
550
        [% END %]
551
        [% END %]
463
        [% END %]
552
        <input type="submit" name="renew_checked" value="Renew or return checked items" />
464
    </div>
553
        <input type="submit" id="renew_all" name="renew_all" value="Renew all" />
554
        </fieldset>
555
    [% ELSE %]<p>Patron has nothing checked out.</p>
556
[% END %]
557
</div>
558
559
465
560
[% IF relissueloop %]
466
[% IF ( relatives_issues_count ) %]
561
<div id="relissues">
467
    <div id="relatives-issues">
562
 <table id="relissuest">
468
        <table id="relatives-issues-table" style="width: 100% !Important;">
563
    <thead>
469
            <thead>
564
    <tr>
470
                <tr>
565
            <th scope="col">Due date</th>
471
                    <th scope="col">Due date</th>
566
            <th scope="col">Title</th>
472
                    <th scope="col">Title</th>
567
            <th scope="col">Item type</th>
473
                    <th scope="col">Item type</th>
568
            <th scope="col">Checked out on</th> 
474
                    <th scope="col">Checked out on</th>
569
            <th scope="col">Checked out from</th>
475
                    <th scope="col">Checked out from</th>
570
            <th scope="col">Call no.</th>
476
                    <th scope="col">Call no</th>
571
            <th scope="col">Charge</th>
477
                    <th scope="col">Charge</th>
572
            <th scope="col">Price</th>
478
                    <th scope="col">Price</th>
573
            <th scope="col">Patron</th>
479
                    <th scope="col">Patron</th>
574
        </tr>
480
                </tr>
575
    </thead>
481
            </thead>
576
       <tbody>
482
        </table>
577
       [% FOREACH relissueloo IN relissueloop %]
578
579
          [% IF ( relissueloo.overdue ) %]
580
          <tr class="problem">
581
          [% ELSE %]
582
          <tr>
583
          [% END %]
584
          [% IF ( relissueloo.red ) %]
585
            <td class="od">
586
          [% ELSE %]
587
            <td>
588
          [% END %]
589
                <span title="[% relissueloo.date_due %]">[% relissueloo.date_due | $KohaDates %]</span>
590
                [% IF ( relissueloo.itemlost ) %]
591
                                        <span class="lost">[% relissueloo.itemlost %]</span>
592
                    [% END %]
593
                [% IF ( relissueloo.damaged ) %]
594
                                        <span class="dmg">[% relissueloo.itemdamaged %]</span>
595
                [% END %]
596
</td>
597
            <td><a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% relissueloo.biblionumber %]"><strong>[% relissueloo.title |html %][% FOREACH subtitl IN relissueloo.subtitle %] [% subtitl.subfield %][% END %]</strong></a>[% IF relissueloo.author %], by [% relissueloo.author %][% END %] [% IF relissueloo.publishercode %]; [% relissueloo.publishercode %] [% END %] [% IF relissueloo.publicationyear %], [% relissueloo.publicationyear %][% END %] <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% relissueloo.biblionumber %]&amp;itemnumber=[% relissueloo.itemnumber %]#item[% relissueloo.itemnumber %]">[% relissueloo.barcode %]</a></td>
598
<td>[% UNLESS ( noItemTypeImages ) %] [% IF ( relissueloo.itemtype_image ) %]<img src="[% relissueloo.itemtype_image %]" alt="" />[% END %][% END %][% relissueloo.itemtype_description %]</td>
599
            <td><span title="[% relissueloo.issuedate %]">[% relissueloo.issuedate | $KohaDates %]</span></td>
600
            <td>[% relissueloo.issuingbranchname %]</td>
601
        <td>[% relissueloo.itemcallnumber %]</td>
602
        <td>[% relissueloo.charge %]</td>
603
        <td>[% relissueloo.replacementprice %]</td>
604
        <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% relissueloo.borrowernumber %]">[% relissueloo.firstname %] [% relissueloo.surname %] ([% relissueloo.cardnumber %])</a></td>
605
        </tr>
606
  [% END %]
607
        </tbody>
608
       </table>
609
    </div>
483
    </div>
610
[% END %]
484
[% END %]
611
    </form>
612
485
613
<div id="finesandcharges">
486
<div id="finesandcharges">
614
    [% IF ( totaldue_raw ) %]
487
    [% IF ( totaldue_raw ) %]
(-)a/members/moremember.pl (-117 / +13 lines)
Lines 2-7 Link Here
2
2
3
# Copyright 2000-2002 Katipo Communications
3
# Copyright 2000-2002 Katipo Communications
4
# Copyright 2010 BibLibre
4
# Copyright 2010 BibLibre
5
# Copyright 2014 ByWater Solutions
5
#
6
#
6
# This file is part of Koha.
7
# This file is part of Koha.
7
#
8
#
Lines 52-61 use C4::Form::MessagingPreferences; Link Here
52
use List::MoreUtils qw/uniq/;
53
use List::MoreUtils qw/uniq/;
53
use C4::Members::Attributes qw(GetBorrowerAttributes);
54
use C4::Members::Attributes qw(GetBorrowerAttributes);
54
use Koha::Borrower::Debarments qw(GetDebarments);
55
use Koha::Borrower::Debarments qw(GetDebarments);
55
#use Smart::Comments;
56
#use Data::Dumper;
57
use DateTime;
56
use DateTime;
58
use Koha::DateUtils;
57
use Koha::DateUtils;
58
use Koha::Database;
59
59
60
use vars qw($debug);
60
use vars qw($debug);
61
61
Lines 68-81 my $dbh = C4::Context->dbh; Link Here
68
my $input = CGI->new;
68
my $input = CGI->new;
69
$debug or $debug = $input->param('debug') || 0;
69
$debug or $debug = $input->param('debug') || 0;
70
my $print = $input->param('print');
70
my $print = $input->param('print');
71
my $override_limit = $input->param("override_limit") || 0;
72
my @failedrenews = $input->param('failedrenew');
73
my @failedreturns = $input->param('failedreturn');
74
my $error = $input->param('error');
75
my %renew_failed;
76
for my $renew (@failedrenews) { $renew_failed{$renew} = 1; }
77
my %return_failed;
78
for my $failedret (@failedreturns) { $return_failed{$failedret} = 1; }
79
71
80
my $template_name;
72
my $template_name;
81
my $quickslip = 0;
73
my $quickslip = 0;
Lines 115-122 my ( $template, $loggedinuser, $cookie ) = get_template_and_user( Link Here
115
);
107
);
116
my $borrowernumber = $input->param('borrowernumber');
108
my $borrowernumber = $input->param('borrowernumber');
117
109
118
#start the page and read in includes
110
my ( $od, $issue, $fines ) = GetMemberIssuesAndFines($borrowernumber);
119
my $data           = GetMember( 'borrowernumber' => $borrowernumber );
111
$template->param( issuecount => $issue );
112
113
my $data = GetMember( 'borrowernumber' => $borrowernumber );
120
114
121
if ( not defined $data ) {
115
if ( not defined $data ) {
122
    $template->param (unknowuser => 1);
116
    $template->param (unknowuser => 1);
Lines 126-133 if ( not defined $data ) { Link Here
126
120
127
my $category_type = $data->{'category_type'};
121
my $category_type = $data->{'category_type'};
128
122
129
### $category_type
130
131
$debug and printf STDERR "dates (enrolled,expiry,birthdate) raw: (%s, %s, %s)\n", map {$data->{$_}} qw(dateenrolled dateexpiry dateofbirth);
123
$debug and printf STDERR "dates (enrolled,expiry,birthdate) raw: (%s, %s, %s)\n", map {$data->{$_}} qw(dateenrolled dateexpiry dateofbirth);
132
foreach (qw(dateenrolled dateexpiry dateofbirth)) {
124
foreach (qw(dateenrolled dateexpiry dateofbirth)) {
133
		my $userdate = $data->{$_};
125
		my $userdate = $data->{$_};
Lines 238-251 if ( C4::Context->preference('OPACPrivacy') ) { Link Here
238
    $template->param( "privacy".$data->{'privacy'} => 1);
230
    $template->param( "privacy".$data->{'privacy'} => 1);
239
}
231
}
240
232
241
# current issues
233
my @relatives = GetMemberRelatives($borrowernumber);
242
#
234
my $relatives_issues_count =
243
my @borrowernumbers = GetMemberRelatives($borrowernumber);
235
  Koha::Database->new()->schema()->resultset('Issue')
244
my $issue       = GetPendingIssues($borrowernumber);
236
  ->count( { borrowernumber => \@relatives } );
245
my $relissue    = [];
237
246
if ( @borrowernumbers ) {
247
    $relissue    = GetPendingIssues(@borrowernumbers);
248
}
249
my $roaddetails = &GetRoadTypeDetails( $data->{'streettype'} );
238
my $roaddetails = &GetRoadTypeDetails( $data->{'streettype'} );
250
my $today       = DateTime->now( time_zone => C4::Context->tz);
239
my $today       = DateTime->now( time_zone => C4::Context->tz);
251
$today->truncate(to => 'day');
240
$today->truncate(to => 'day');
Lines 253-262 my @borrowers_with_issues; Link Here
253
my $overdues_exist = 0;
242
my $overdues_exist = 0;
254
my $totalprice = 0;
243
my $totalprice = 0;
255
244
256
my @issuedata = build_issue_data($issue);
257
my @relissuedata = build_issue_data($relissue);
258
259
260
### ###############################################################################
245
### ###############################################################################
261
# BUILD HTML
246
# BUILD HTML
262
# show all reserves of this borrower, and the position of the reservation ....
247
# show all reserves of this borrower, and the position of the reservation ....
Lines 422-434 $template->param( Link Here
422
    totalprice      => sprintf("%.2f", $totalprice),
407
    totalprice      => sprintf("%.2f", $totalprice),
423
    totaldue        => sprintf("%.2f", $total),
408
    totaldue        => sprintf("%.2f", $total),
424
    totaldue_raw    => $total,
409
    totaldue_raw    => $total,
425
    issueloop       => @issuedata,
426
    relissueloop    => @relissuedata,
427
    overdues_exist  => $overdues_exist,
410
    overdues_exist  => $overdues_exist,
428
    error           => $error,
429
    StaffMember     => ($category_type eq 'S'),
411
    StaffMember     => ($category_type eq 'S'),
430
    is_child        => ($category_type eq 'C'),
412
    is_child        => ($category_type eq 'C'),
431
#   reserveloop     => \@reservedata,
432
    samebranch     => $samebranch,
413
    samebranch     => $samebranch,
433
    quickslip		  => $quickslip,
414
    quickslip		  => $quickslip,
434
    activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
415
    activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
Lines 436-527 $template->param( Link Here
436
    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
417
    SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'),
437
    RoutingSerials => C4::Context->preference('RoutingSerials'),
418
    RoutingSerials => C4::Context->preference('RoutingSerials'),
438
    debarments => GetDebarments({ borrowernumber => $borrowernumber }),
419
    debarments => GetDebarments({ borrowernumber => $borrowernumber }),
420
    relatives_issues_count => $relatives_issues_count,
421
    relatives_borrowernumbers => \@relatives,
439
);
422
);
440
$template->param( $error => 1 ) if $error;
441
423
442
output_html_with_http_headers $input, $cookie, $template->output;
424
output_html_with_http_headers $input, $cookie, $template->output;
443
444
sub build_issue_data {
445
    my $issues = shift;
446
447
    my $localissue;
448
449
    foreach my $issue ( @{$issues} ) {
450
451
        # Getting borrower details
452
        my $memberdetails = GetMemberDetails( $issue->{borrowernumber} );
453
        $issue->{borrowername} =
454
          $memberdetails->{firstname} . ' ' . $memberdetails->{surname};
455
        $issue->{cardnumber} = $memberdetails->{cardnumber};
456
        my $issuedate;
457
        if ($issue->{issuedate} ) {
458
           $issuedate = $issue->{issuedate}->clone();
459
        }
460
        $issue->{subtitle} = GetRecordValue('subtitle', GetMarcBiblio($issue->{biblionumber}), GetFrameworkCode($issue->{biblionumber}));
461
        $issue->{issuingbranchname} = GetBranchName($issue->{branchcode});
462
        my %row          = %{$issue};
463
        $totalprice += $issue->{replacementprice};
464
465
        # item lost, damaged loops
466
        if ( $row{'itemlost'} ) {
467
            my $fw       = GetFrameworkCode( $issue->{biblionumber} );
468
            my $category = GetAuthValCode( 'items.itemlost', $fw );
469
            my $lostdbh  = C4::Context->dbh;
470
            my $sth      = $lostdbh->prepare(
471
"select lib from authorised_values where category=? and authorised_value =? "
472
            );
473
            $sth->execute( $category, $row{'itemlost'} );
474
            my $loststat = $sth->fetchrow;
475
            if ($loststat) {
476
                $row{'itemlost'} = $loststat;
477
            }
478
        }
479
        if ( $row{'damaged'} ) {
480
            my $fw         = GetFrameworkCode( $issue->{biblionumber} );
481
            my $category   = GetAuthValCode( 'items.damaged', $fw );
482
            my $damageddbh = C4::Context->dbh;
483
            my $sth        = $damageddbh->prepare(
484
"select lib from authorised_values where category=? and authorised_value =? "
485
            );
486
            $sth->execute( $category, $row{'damaged'} );
487
            my $damagedstat = $sth->fetchrow;
488
            if ($damagedstat) {
489
                $row{'itemdamaged'} = $damagedstat;
490
            }
491
        }
492
493
        # end lost, damaged
494
        if ( $issue->{overdue} ) {
495
            $overdues_exist = 1;
496
            $row{red} = 1;
497
        }
498
        if ($issuedate) {
499
            $issuedate->truncate( to => 'day' );
500
            if ( DateTime->compare( $issuedate, $today ) == 0 ) {
501
                $row{today} = 1;
502
            }
503
        }
504
505
        #find the charge for an item
506
        my ( $charge, $itemtype ) =
507
          GetIssuingCharges( $issue->{itemnumber}, $borrowernumber );
508
509
        my $itemtypeinfo = getitemtypeinfo($itemtype);
510
        $row{'itemtype_description'} = $itemtypeinfo->{description};
511
        $row{'itemtype_image'}       = $itemtypeinfo->{imageurl};
512
513
        $row{'charge'} = sprintf( "%.2f", $charge );
514
515
        my ( $renewokay, $renewerror ) =
516
          CanBookBeRenewed( $borrowernumber, $issue->{itemnumber},
517
            $override_limit );
518
        $row{'norenew'} = !$renewokay;
519
        $row{'can_confirm'} = ( !$renewokay && $renewerror ne 'on_reserve' );
520
        $row{"norenew_reason_$renewerror"} = 1 if $renewerror;
521
        $row{renew_failed}  = $renew_failed{ $issue->{itemnumber} };
522
        $row{return_failed} = $return_failed{ $issue->{barcode} };
523
        ($row{'renewcount'},$row{'renewsallowed'},$row{'renewsleft'}) = C4::Circulation::GetRenewCount($issue->{'borrowernumber'},$issue->{'itemnumber'}); #Add renewal count to item data display
524
        push( @{$localissue}, \%row );
525
    }
526
    return $localissue;
527
}
528
- 

Return to bug 11703