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 669-676 No patron matched <span class="ex">[% message %]</span> Link Here
669
669
670
<!-- SUMMARY : TODAY & PREVIOUS ISSUES -->
670
<!-- SUMMARY : TODAY & PREVIOUS ISSUES -->
671
<div id="checkouts">
671
<div id="checkouts">
672
[% IF ( issuecount ) %]
672
    [% IF ( issuecount ) %]
673
    <form name="issues" action="/cgi-bin/koha/tools/export.pl" method="post" class="checkboxed">
674
        <table id="issues-table">
673
        <table id="issues-table">
675
            <thead>
674
            <thead>
676
                <tr>
675
                <tr>
Lines 690-753 No patron matched <span class="ex">[% message %]</span> Link Here
690
            [% INCLUDE 'checkouts-table-footer.inc' %]
689
            [% INCLUDE 'checkouts-table-footer.inc' %]
691
        </table>
690
        </table>
692
691
693
        [% IF ( issuecount ) %]
692
        <fieldset class="action">
694
            <fieldset class="action">
693
            [% IF ( CAN_user_circulate_override_renewals ) %]
695
                [% IF ( CAN_user_circulate_override_renewals ) %]
694
                [% IF ( AllowRenewalLimitOverride ) %]
696
                    [% IF ( AllowRenewalLimitOverride ) %]
695
                    <label for="override_limit">Override renewal limit:</label>
697
                        <label for="override_limit">Override renewal limit:</label>
696
                    <input type="checkbox" name="override_limit" id="override_limit" value="1" />
698
                        <input type="checkbox" name="override_limit" id="override_limit" value="1" />
699
                    [% END %]
700
                [% END %]
697
                [% END %]
701
                <button class="btn" id="RenewCheckinChecked"><i class="icon-check"></i> Renew or return checked items</button>
702
                <button class="btn" id="RenewAll"><i class="icon-book"></i> Renew all</button>
703
            </fieldset>
704
705
            [% IF ( exports_enabled ) %]
706
                <fieldset>
707
                    <label for="export_formats"><b>Export checkouts using format:</b></label>
708
                    <select name="export_formats" id="export_formats">
709
                        <option value="iso2709_995">ISO2709 with items</option>
710
                        <option value="iso2709">ISO2709 without items</option>
711
                        [% IF ( export_with_csv_profile ) %]
712
                            <option value="csv">CSV</option>
713
                        [% END %]
714
                    </select>
715
716
                   <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" />
717
                    <input type="hidden" name="op" value="export" />
718
                    <input type="hidden" id="export_format" name="format" value="iso2709" />
719
                    <input type="hidden" id="dont_export_item" name="dont_export_item" value="0" />
720
                    <input type="hidden" id="record_type" name="record_type" value="bibs" />
721
                    <button class="btn btn-small" id="export_submit"><i class="icon-download-alt"></i> Export</button>
722
                </fieldset>
723
            [% END %]
698
            [% END %]
724
        [% END %]
699
            <button class="btn" id="RenewCheckinChecked"><i class="icon-check"></i> Renew or return checked items</button>
725
    </form>
700
            <button class="btn" id="RenewAll"><i class="icon-book"></i> Renew all</button>
726
[% ELSE %]
701
        </fieldset>
727
    <p>Patron has nothing checked out.</p>
702
    [% ELSE %]
728
[% END %]
703
        <p>Patron has nothing checked out.</p>
729
704
    [% END %]
730
</div>
705
</div>
731
706
732
733
[% IF ( relatives_issues_count ) %]
707
[% IF ( relatives_issues_count ) %]
734
<div id="relatives-issues">
708
    <div id="relatives-issues">
735
    <table id="relatives-issues-table">
709
        <table id="relatives-issues-table">
736
        <thead>
710
            <thead>
737
            <tr>
711
                <tr>
738
                <th scope="col">Due date</th>
712
                    <th scope="col">Due date</th>
739
                <th scope="col">Title</th>
713
                    <th scope="col">Title</th>
740
                <th scope="col">Item type</th>
714
                    <th scope="col">Item type</th>
741
                <th scope="col">Checked out on</th>
715
                    <th scope="col">Checked out on</th>
742
                <th scope="col">Checked out from</th>
716
                    <th scope="col">Checked out from</th>
743
                <th scope="col">Call no</th>
717
                    <th scope="col">Call no</th>
744
                <th scope="col">Charge</th>
718
                    <th scope="col">Charge</th>
745
                <th scope="col">Price</th>
719
                    <th scope="col">Price</th>
746
                <th scope="col">Patron</th>
720
                    <th scope="col">Patron</th>
747
            </tr>
721
                </tr>
748
        </thead>
722
            </thead>
749
    </table>
723
        </table>
750
</div>
724
    </div>
751
[% END %]
725
[% END %]
752
726
753
[% INCLUDE borrower_debarments.inc %]
727
[% INCLUDE borrower_debarments.inc %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (-225 / +98 lines)
Lines 12-21 Link Here
12
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
12
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/datatables.css" />
13
[% INCLUDE 'datatables.inc' %]
13
[% INCLUDE 'datatables.inc' %]
14
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
14
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery.checkboxes.min.js"></script>
15
<script type="text/javascript" src="[% interface %]/lib/jquery/plugins/jquery-ui-timepicker-addon.min.js"></script>
15
<script type="text/javascript" src="[% themelang %]/lib/jquery/plugins/jquery-ui-timepicker-addon.js"></script>
16
[% INCLUDE 'timepicker.inc' %]
16
[% INCLUDE 'timepicker.inc' %]
17
<script type="text/javascript" src="[% themelang %]/js/checkouts.js"></script>
17
<script type="text/JavaScript">
18
<script type="text/JavaScript">
18
//<![CDATA[
19
//<![CDATA[
20
/* Set some variable needed in circulation.js */
21
var interface = "[% interface %]";
22
var theme = "[% theme %]";
23
var borrowernumber = "[% borrowernumber %]";
24
var branchcode = "[% branch %]";
25
var exports_enabled = "[% exports_enabled %]";
26
var AllowRenewalLimitOverride = [% CAN_user_circulate_override_renewals && AllowRenewalLimitOverride %];
27
var relatives_borrowernumbers = new Array();
28
[% FOREACH b IN relatives_borrowernumbers %]
29
    relatives_borrowernumbers.push("[% b %]");
30
[% END %]
31
19
$(document).ready(function() {
32
$(document).ready(function() {
20
    $('#finesholdsissues').tabs({
33
    $('#finesholdsissues').tabs({
21
        // Correct table sizing for tables hidden in tabs
34
        // Correct table sizing for tables hidden in tabs
Lines 27-49 $(document).ready(function() { Link Here
27
            }
40
            }
28
        }
41
        }
29
    } );
42
    } );
30
    $("#issuest").dataTable($.extend(true, {}, dataTablesDefaults, {
31
        "sDom": 't',
32
        "aoColumnDefs": [
33
            { "aTargets": [ -1,-2 ], "bSortable": false, "bSearchable": false }
34
        ],
35
        "aoColumns": [
36
            { "sType": "title-string" },{ "sType": "anti-the" },null,{ "sType": "title-string" },null,null,null,null,null,null
37
        ],
38
        "bPaginate": false
39
    }));
40
    $("#relissuest").dataTable($.extend(true, {}, dataTablesDefaults, {
41
        "sDom": 't',
42
        "aoColumns": [
43
            { "sType": "title-string" },{ "sType": "anti-the" },null,{ "sType": "title-string" },null,null,null,null,null
44
        ],
45
        "bPaginate": false
46
    }));
47
    $("#holdst").dataTable($.extend(true, {}, dataTablesDefaults, {
43
    $("#holdst").dataTable($.extend(true, {}, dataTablesDefaults, {
48
        "sDom": 't',
44
        "sDom": 't',
49
        "aoColumnDefs": [
45
        "aoColumnDefs": [
Lines 66-107 $(document).ready(function() { Link Here
66
        }
62
        }
67
        return confirm(_("Are you sure you want to replace the current patron image? This cannot be undone."));
63
        return confirm(_("Are you sure you want to replace the current patron image? This cannot be undone."));
68
	});[% END %]
64
	});[% END %]
69
	$("#renew_all"      ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); });
65
70
	$("#CheckAllitems"  ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
71
    $("#CheckNoitems"   ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
72
	$("#CheckAllreturns").click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=barcodes]"); $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
73
    $("#CheckNoreturns" ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
74
75
    $("#relrenew_all"      ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); });
76
    $("#relCheckAllitems"  ).click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=items]"   ); $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
77
    $("#relCheckNoitems"   ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
78
    $("#relCheckAllreturns").click(function(){ $(".checkboxed").checkCheckboxes(":input[name*=barcodes]"); $(".checkboxed").unCheckCheckboxes(":input[name*=items]"); return false; });
79
    $("#relCheckNoreturns" ).click(function(){ $(".checkboxed").unCheckCheckboxes(":input[name*=barcodes]"); return false; });
80
81
82
    [% IF ( CAN_user_circulate_override_renewals ) %]
83
    [% IF ( AllowRenewalLimitOverride ) %]
84
    $( '#override_limit' ).click( function () {
85
        if ( this.checked ) {
86
           $( '.renewals-allowed' ).show(); $( '.renewals-disabled' ).hide();
87
        } else {
88
           $( '.renewals-allowed' ).hide(); $( '.renewals-disabled' ).show();
89
        }
90
    } ).attr( 'checked', false );
91
    [% END %]
92
    [% END %]
93
	$("td").click(function(e){
94
		if(e.target.tagName.toLowerCase() == 'td'){
95
           $(this).find("input:checkbox").each( function() {
96
               $(this).attr('checked', !$(this).attr('checked'));
97
			   if($(this).attr('checked')){
98
                    $(this).parent().siblings().find("input:checkbox").each(function(){
99
                       if($(this).attr('checked')){ $(this).removeAttr('checked'); }
100
                   });
101
			   }
102
           });
103
		}
104
	});
105
    $("#suspend_until").datepicker({ minDate: 1 }); // require that hold suspended until date is after today
66
    $("#suspend_until").datepicker({ minDate: 1 }); // require that hold suspended until date is after today
106
    $("#newduedate").datetimepicker({
67
    $("#newduedate").datetimepicker({
107
        minDate: 1, // require that renewal date is after today
68
        minDate: 1, // require that renewal date is after today
Lines 424-611 function validate1(date) { Link Here
424
385
425
<div id="finesholdsissues" class="toptabs">
386
<div id="finesholdsissues" class="toptabs">
426
    <ul>
387
    <ul>
427
        <li><a href="#checkedout">[% issueloop.size %] Checkout(s)</a></li>
388
        <li><a href="#checkouts">[% issueloop.size %] Checkout(s)</a></li>
428
    [% IF relissueloop.size %]
389
        [% IF relatives_issues_count %]
429
        <li><a href="#relissues">Relatives' Checkouts</a></li>
390
            <li><a href="#relatives-issues" id="relatives-issues-tab">Relatives' checkouts</a></li>
430
    [% END %]
391
        [% END %]
431
        <li><a href="#finesandcharges">Fines &amp; Charges</a></li>
392
        <li><a href="#finesandcharges">Fines &amp; Charges</a></li>
432
        <li>[% IF ( countreserv ) %]
393
        <li>
433
            <a href="#onhold">[% countreserv %] Hold(s)</a>    [% ELSE %]
394
            [% IF ( countreserv ) %]
434
            <a href="#onhold">0 Holds</a>
395
                <a href="#onhold">[% countreserv %] Hold(s)</a>
435
    [% END %]</li>
396
            [% ELSE %]
397
                <a href="#onhold">0 Holds</a>
398
            [% END %]
399
        </li>
436
        <li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li>
400
        <li><a id="debarments-tab-link" href="#reldebarments">[% debarments.size %] Restrictions</a></li>
437
    </ul>
401
    </ul>
438
402
439
    <form action="/cgi-bin/koha/reserve/renewscript.pl" method="post" class="checkboxed">
403
    <div id="checkouts">
440
    <input type="hidden" name="borrowernumber" value="[% borrowernumber %]" />
404
        [% IF ( issuecount ) %]
441
    <input type="hidden" name="branch" value="[% branch %]" />
405
            <form name="issues" action="/cgi-bin/koha/tools/export.pl" method="post" class="checkboxed">
442
<div id="checkedout">
406
                <table id="issues-table" style="width: 100% !Important;">
443
    [% IF ( issueloop ) %]
407
                    <thead>
444
    <table id="issuest">
408
                        <tr>
445
    <thead>
409
                            <th scope="col">Due date</th>
446
        <tr>
410
                            <th scope="col">Title</th>
447
            <th scope="col">Due date</th>
411
                            <th scope="col">Item type</th>
448
            <th scope="col">Title</th>
412
                            <th scope="col">Checked out on</th>
449
            <th scope="col">Item type</th>
413
                            <th scope="col">Checked out from</th>
450
            <th scope="col">Checked out on</th> 
414
                            <th scope="col">Call no</th>
451
            <th scope="col">Checked out from</th> 
415
                            <th scope="col">Charge</th>
452
            <th scope="col">Call no.</th>
416
                            <th scope="col">Price</th>
453
            <th scope="col">Charge</th>
417
                            <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllRenewals">select all</a> | <a href="#" id="UncheckAllRenewals">none</a></p></th>
454
            <th scope="col">Price</th>
418
                            <th scope="col">Check in <p class="column-tool"><a href="#" id="CheckAllCheckins">select all</a> | <a href="#" id="UncheckAllCheckins">none</a></p></th>
455
            <th scope="col">Renew <p class="column-tool"><a href="#" id="CheckAllitems">select all</a> | <a href="#" id="CheckNoitems">none</a></p></th>
419
                            <th scope="col">Export <p class="column-tool"><a href="#" id="CheckAllExports">select all</a> | <a href="#" id="UncheckAllExports">none</a></p></th>
456
            <th scope="col">Check in <p class="column-tool"><a href="#" id="CheckAllreturns">select all</a> | <a href="#" id="CheckNoreturns">none</a></p></th>
420
                        </tr>
457
        </tr></thead>
421
                    </thead>
458
        [% INCLUDE 'checkouts-table-footer.inc' %]
422
                    [% INCLUDE 'checkouts-table-footer.inc' %]
459
       <tbody>
423
                </table>
460
       [% FOREACH issueloo IN issueloop %]
424
461
425
                [% IF ( issuecount ) %]
462
          [% IF ( issueloo.overdue ) %]
426
                    <fieldset class="action">
463
          <tr class="problem">
427
                        [% IF ( CAN_user_circulate_override_renewals ) %]
464
          [% ELSE %]
428
                            [% IF ( AllowRenewalLimitOverride ) %]
465
          <tr>
429
                                <label for="override_limit">Override renewal limit:</label>
466
          [% END %]
430
                                <input type="checkbox" name="override_limit" id="override_limit" value="1" />
467
          [% IF ( issueloo.red ) %]
431
                            [% END %]
468
              <td class="od">
432
                        [% END %]
469
          [% ELSE %]
433
                        <button class="btn" id="RenewCheckinChecked"><i class="icon-check"></i> Renew or return checked items</button>
470
            <td>
434
                        <button class="btn" id="RenewAll"><i class="icon-book"></i> Renew all</button>
471
          [% END %]
435
                    </fieldset>
472
                <span title="[% issueloo.date_due %]">[% issueloo.date_due | $KohaDates %]</span>
436
473
                [% IF ( issueloo.itemlost ) %]
437
                    [% IF ( exports_enabled ) %]
474
                                        <span class="lost">[% issueloo.itemlost %]</span>
438
                        <fieldset>
439
                            <label for="export_formats"><b>Export checkouts using format:</b></label>
440
                            <select name="export_formats" id="export_formats">
441
                                <option value="iso2709_995">ISO2709 with items</option>
442
                                <option value="iso2709">ISO2709 without items</option>
443
                                [% IF ( export_with_csv_profile ) %]
444
                                    <option value="csv">CSV</option>
445
                                [% END %]
446
                            </select>
447
448
                           <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" />
449
                            <input type="hidden" name="op" value="export" />
450
                            <input type="hidden" id="export_format" name="format" value="iso2709" />
451
                            <input type="hidden" id="dont_export_item" name="dont_export_item" value="0" />
452
                            <input type="hidden" id="record_type" name="record_type" value="bibs" />
453
                            <button class="btn btn-small" id="export_submit"><i class="icon-download-alt"></i> Export</button>
454
                        </fieldset>
475
                    [% END %]
455
                    [% END %]
476
                [% IF ( issueloo.damaged ) %]
477
                                        <span class="dmg">[% issueloo.itemdamaged %]</span>
478
                [% END %]
456
                [% END %]
479
</td>
457
            </form>
480
            <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>
481
<td>[% UNLESS ( noItemTypeImages ) %] [% IF ( issueloo.itemtype_image ) %]<img src="[% issueloo.itemtype_image %]" alt="" />[% END %][% END %][% issueloo.itemtype_description %]</td>
482
            <td><span title="[% issueloo.issuedate %]">[% issueloo.issuedate | $KohaDates%]</span></td>
483
            <td>[% issueloo.issuingbranchname %]</td>
484
            <td>[% issueloo.itemcallnumber %]</td>
485
            <td>[% issueloo.charge %]</td>
486
            <td>[% issueloo.replacementprice %]</td>
487
      [% IF ( issueloo.renew_failed ) %]
488
            <td class="problem">Renewal Failed</td>
489
      [% ELSE %]
490
            <td><span style="padding: 0 1em;">[% IF ( issueloo.renewals ) %][% issueloo.renewals %][% ELSE %]0[% END %]</span>
491
            [% IF ( issueloo.norenew ) %]
492
                [% IF ( issueloo.can_confirm ) %]<span class="renewals-allowed" style="display: none">
493
                    <input type="checkbox" name="all_items[]" value="[% issueloo.itemnumber %]" checked="checked" style="display: none;" />
494
                    [% IF ( issueloo.od ) %]
495
                        <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" checked="checked" />
496
                    [% ELSE %]
497
                        <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" />
498
                    [% END %]
499
                    </span>
500
                    [% IF issueloo.renewsallowed && issueloo.renewsleft %]
501
                        <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
502
                    [% END %]
503
                    <span class="renewals-disabled">
504
                [% END %]
505
                [% IF ( issueloo.norenew_reason_on_reserve ) %]
506
                <a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On Hold</a>
507
                [% END %]
508
                    [% IF ( issueloo.norenew_reason_too_many ) %]
509
                        Not renewable
510
                    [% END %]
511
                [% IF ( issueloo.can_confirm ) %]
512
                    </span>
513
                [% END %]
514
            [% ELSE %]
515
            <input type="checkbox" name="all_items[]" value="[% issueloo.itemnumber %]" checked="checked" style="display: none;" />
516
            [% IF ( issueloo.red ) %]
517
            <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" checked="checked" onclick="uncheck_sibling(this);" />
518
            [% ELSE %]
519
            <input type="checkbox" name="items[]" value="[% issueloo.itemnumber %]" onclick="uncheck_sibling(this);" />
520
            [% END %]
521
                [% IF issueloo.renewsallowed && issueloo.renewsleft %]
522
                    <span class="renewals">([% issueloo.renewsleft %] of [% issueloo.renewsallowed %] renewals remaining)</span>
523
                [% END %]
524
            [% END %]
525
            </td>
526
      [% END %]
527
      [% IF ( issueloo.return_failed ) %]
528
            <td class="problem">Check-in failed</td>
529
      [% ELSE %]
530
        [% IF ( issueloo.norenew_reason_on_reserve ) %]
531
            <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% issueloo.biblionumber %]">On hold</a></td>
532
        [% ELSE %]
458
        [% ELSE %]
533
            <td><input type="checkbox" name="barcodes[]"  value="[% issueloo.barcode %]" onclick="uncheck_sibling(this);" />
459
            <p>Patron has nothing checked out.</p>
534
                <input type="checkbox" name="all_barcodes[]" value="[% issueloo.barcode %]" checked="checked" style="display: none;" />
535
            </td>
536
        [% END %]
537
      [% END %]
538
        </tr>
539
  [% END %]
540
        </tbody>
541
        </table>
542
        <fieldset class="action">
543
        [% IF ( CAN_user_circulate_override_renewals ) %]
544
        [% IF ( AllowRenewalLimitOverride ) %]
545
        <label for="override_limit">Override renewal limit:</label>
546
        <input type="checkbox" name="override_limit" id="override_limit" value="1" />
547
        [% END %]
548
        [% END %]
460
        [% END %]
549
        <input type="submit" name="renew_checked" value="Renew or return checked items" />
461
    </div>
550
        <input type="submit" id="renew_all" name="renew_all" value="Renew all" />
551
        </fieldset>
552
    [% ELSE %]<p>Patron has nothing checked out.</p>
553
[% END %]
554
</div>
555
556
462
557
[% IF relissueloop %]
463
[% IF ( relatives_issues_count ) %]
558
<div id="relissues">
464
    <div id="relatives-issues">
559
 <table id="relissuest">
465
        <table id="relatives-issues-table" style="width: 100% !Important;">
560
    <thead>
466
            <thead>
561
    <tr>
467
                <tr>
562
            <th scope="col">Due date</th>
468
                    <th scope="col">Due date</th>
563
            <th scope="col">Title</th>
469
                    <th scope="col">Title</th>
564
            <th scope="col">Item type</th>
470
                    <th scope="col">Item type</th>
565
            <th scope="col">Checked out on</th> 
471
                    <th scope="col">Checked out on</th>
566
            <th scope="col">Checked out from</th>
472
                    <th scope="col">Checked out from</th>
567
            <th scope="col">Call no.</th>
473
                    <th scope="col">Call no</th>
568
            <th scope="col">Charge</th>
474
                    <th scope="col">Charge</th>
569
            <th scope="col">Price</th>
475
                    <th scope="col">Price</th>
570
            <th scope="col">Patron</th>
476
                    <th scope="col">Patron</th>
571
        </tr>
477
                </tr>
572
    </thead>
478
            </thead>
573
       <tbody>
479
        </table>
574
       [% FOREACH relissueloo IN relissueloop %]
575
576
          [% IF ( relissueloo.overdue ) %]
577
          <tr class="problem">
578
          [% ELSE %]
579
          <tr>
580
          [% END %]
581
          [% IF ( relissueloo.red ) %]
582
            <td class="od">
583
          [% ELSE %]
584
            <td>
585
          [% END %]
586
                <span title="[% relissueloo.date_due %]">[% relissueloo.date_due | $KohaDates %]</span>
587
                [% IF ( relissueloo.itemlost ) %]
588
                                        <span class="lost">[% relissueloo.itemlost %]</span>
589
                    [% END %]
590
                [% IF ( relissueloo.damaged ) %]
591
                                        <span class="dmg">[% relissueloo.itemdamaged %]</span>
592
                [% END %]
593
</td>
594
            <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>
595
<td>[% UNLESS ( noItemTypeImages ) %] [% IF ( relissueloo.itemtype_image ) %]<img src="[% relissueloo.itemtype_image %]" alt="" />[% END %][% END %][% relissueloo.itemtype_description %]</td>
596
            <td><span title="[% relissueloo.issuedate %]">[% relissueloo.issuedate | $KohaDates %]</span></td>
597
            <td>[% relissueloo.issuingbranchname %]</td>
598
        <td>[% relissueloo.itemcallnumber %]</td>
599
        <td>[% relissueloo.charge %]</td>
600
        <td>[% relissueloo.replacementprice %]</td>
601
        <td><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% relissueloo.borrowernumber %]">[% relissueloo.firstname %] [% relissueloo.surname %] ([% relissueloo.cardnumber %])</a></td>
602
        </tr>
603
  [% END %]
604
        </tbody>
605
       </table>
606
    </div>
480
    </div>
607
[% END %]
481
[% END %]
608
    </form>
609
482
610
<div id="finesandcharges">
483
<div id="finesandcharges">
611
    [% IF ( totaldue_raw ) %]
484
    [% 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 $roadtype = C4::Koha::GetAuthorisedValueByCode( 'ROADTYPE', $data->{streettype} );
238
my $roadtype = C4::Koha::GetAuthorisedValueByCode( 'ROADTYPE', $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