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

(-)a/koha-tmpl/intranet-tmpl/prog/css/src/staff-global.scss (+32 lines)
Lines 2341-2346 td.bundle { Link Here
2341
    &.modal-wide {
2341
    &.modal-wide {
2342
        width: 80%;
2342
        width: 80%;
2343
    }
2343
    }
2344
2345
}
2346
2347
.modal-full {
2348
    top: -5px;
2349
2350
    .modal-dialog {
2351
        width: 95%;
2352
    }
2353
}
2354
2355
.basicModal {
2356
    background: #FFF;
2357
    left: 50%;
2358
    margin-left: -300px;
2359
    max-height: 100%;
2360
    max-width: 600px;
2361
    min-height: 350px;
2362
    min-width: 575px;
2363
    opacity: 0;
2364
    padding: 1em;
2365
    pointer-events: none;
2366
    position: fixed;
2367
    top: 25%;
2368
    transition: all .1s ease-out;
2369
    z-index: 1100;
2370
}
2371
2372
.basicModal.show {
2373
    box-shadow: 0 5px 15px rgba( 0, 0, 0, .5 );
2374
    opacity: 1;
2375
    pointer-events: auto;
2344
}
2376
}
2345
2377
2346
#cartDetails {
2378
#cartDetails {
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-search.inc (-43 / +74 lines)
Lines 2-7 Link Here
2
[% USE I18N %]
2
[% USE I18N %]
3
[% USE Branches %]
3
[% USE Branches %]
4
[% USE ExtendedAttributeTypes %]
4
[% USE ExtendedAttributeTypes %]
5
[% USE Categories %]
5
[% USE raw %]
6
[% USE raw %]
6
[% USE Asset %]
7
[% USE Asset %]
7
[% USE To %]
8
[% USE To %]
Lines 55-61 Link Here
55
                            <label for="categorycode_filter">Category:</label>
56
                            <label for="categorycode_filter">Category:</label>
56
                            <select id="categorycode_filter">
57
                            <select id="categorycode_filter">
57
                                <option value="">Any</option>
58
                                <option value="">Any</option>
58
                                [% FOREACH category IN categories %]
59
                                [% FOREACH category IN Categories.limited.unblessed %]
59
                                    <option value="[% category.categorycode | html %]">[% category.description | html %]</option>
60
                                    <option value="[% category.categorycode | html %]">[% category.description | html %]</option>
60
                                [% END %]
61
                                [% END %]
61
                            </select>
62
                            </select>
Lines 109-114 Link Here
109
[%# columns: See patron_search_js %]
110
[%# columns: See patron_search_js %]
110
[% BLOCK patron_search_table %]
111
[% BLOCK patron_search_table %]
111
112
113
    [% UNLESS table_id %]
114
        [% SET table_id = "memberresultst" %]
115
    [% END %]
116
112
    [% IF filter == 'suggestions_managers' %]
117
    [% IF filter == 'suggestions_managers' %]
113
        <div class="hint">Only staff with superlibrarian or suggestions_manage permissions are returned in the search results</div>
118
        <div class="hint">Only staff with superlibrarian or suggestions_manage permissions are returned in the search results</div>
114
    [% ELSIF filter == 'orders_managers' %]
119
    [% ELSIF filter == 'orders_managers' %]
Lines 130-136 Link Here
130
        [% END %]
135
        [% END %]
131
    </div>
136
    </div>
132
137
133
134
    <h3 style="display: none;">Patrons found for: <span id="searchpattern"></span></h3>
138
    <h3 style="display: none;">Patrons found for: <span id="searchpattern"></span></h3>
135
139
136
    <div id="[% table_id | html %]_search_results" style="display:none;">
140
    <div id="[% table_id | html %]_search_results" style="display:none;">
Lines 175-192 Link Here
175
<div class="modal" id="patronPreview" tabindex="-1" role="dialog" aria-labelledby="patronPreviewLabel">
179
<div class="modal" id="patronPreview" tabindex="-1" role="dialog" aria-labelledby="patronPreviewLabel">
176
    <div class="modal-dialog" role="document">
180
    <div class="modal-dialog" role="document">
177
        <div class="modal-content">
181
        <div class="modal-content">
178
            <div class="modal-header">
179
                <button type="button" class="closebtn" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
180
                <h4 class="modal-title" id="patronPreviewLabel"></h4>
181
            </div>
182
            <div class="modal-body">
182
            <div class="modal-body">
183
                <div id="loading">
183
                <div id="loading">
184
                    <img src="[% interface | html %]/[% theme | html %]/img/spinner-small.gif" alt="" /> Loading
184
                    <img src="[% interface | html %]/[% theme | html %]/img/spinner-small.gif" alt="" /> Loading
185
                </div>
185
                </div>
186
            </div>
186
            </div>
187
            <div class="modal-footer">
188
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
189
            </div>
190
        </div>
187
        </div>
191
    </div>
188
    </div>
192
</div>
189
</div>
Lines 213-218 Link Here
213
    [% END %]
210
    [% END %]
214
211
215
    <script>
212
    <script>
213
        [% SET libraries = Branches.all %]
214
        [% SET categories = Categories.limited.unblessed %]
216
        let categories = [% To.json(categories) | $raw %].map(e => {
215
        let categories = [% To.json(categories) | $raw %].map(e => {
217
            e['_id'] = e.categorycode.toLowerCase();
216
            e['_id'] = e.categorycode.toLowerCase();
218
            e['_str'] = e.description;
217
            e['_str'] = e.description;
Lines 650-671 Link Here
650
                e.preventDefault();
649
                e.preventDefault();
651
                var borrowernumber = $(this).data("borrowernumber");
650
                var borrowernumber = $(this).data("borrowernumber");
652
                var borrower_data = JSON.parse($("#borrower_data"+borrowernumber).val());
651
                var borrower_data = JSON.parse($("#borrower_data"+borrowernumber).val());
653
                add_user( borrowernumber, borrower_data.firstname + " " + borrower_data.surname );
652
                modal_add_user( borrowernumber, borrower_data.firstname + " " + borrower_data.surname );
654
            });
653
            });
655
656
            $("body").on("click",".select_user",function(e){
654
            $("body").on("click",".select_user",function(e){
657
                e.preventDefault();
655
                e.preventDefault();
658
                var borrowernumber = $(this).data("borrowernumber");
656
                var borrowernumber = $(this).data("borrowernumber");
659
                var borrower_data = JSON.parse($("#borrower_data"+borrowernumber).val());
657
                var borrower_data = JSON.parse($("#borrower_data"+borrowernumber).val());
660
                select_user( borrowernumber, borrower_data );
658
                modal_select_user( borrowernumber, borrower_data );
659
                $(this).closest(".modal").modal('hide');
661
            });
660
            });
662
661
663
            $("body").on("click",".patron_preview", function( e ){
662
            $("body").on("click",".patron_preview", function( e ){
664
                e.preventDefault();
663
                e.preventDefault();
665
                var borrowernumber = $(this).data("borrowernumber");
664
                var borrowernumber = $(this).data("borrowernumber");
666
                var page = "/cgi-bin/koha/members/moremember.pl?print=brief&borrowernumber=" + borrowernumber;
665
                var page = "/cgi-bin/koha/members/moremember.pl?print=brief&borrowernumber=" + borrowernumber;
667
                $("#patronPreview .modal-body").load( page + " div.container-fluid" );
666
                $("#patron_preview_modal").load( page + " div.container-fluid", function(){
668
                $('#patronPreview').modal({show:true});
667
                    $("#patron_preview_modal").find(".close").on("click", function(){
668
                        $('#patron_preview_modal').html(_("Loading...")).removeClass("show");
669
                    });
670
                });
671
                $("#patron_preview_modal").addClass("show");
669
            });
672
            });
670
673
671
            $("#patronPreview").on('hidden.bs.modal', function (e) {
674
            $("#patronPreview").on('hidden.bs.modal', function (e) {
Lines 827-866 Link Here
827
        }
830
        }
828
831
829
        // modify parent window owner element
832
        // modify parent window owner element
830
        function add_user(borrowernumber, borrowername) {
833
        function modal_add_user(borrowernumber, borrowername) {
831
            var p = window.opener;
834
            [%# Note that add_user could sent data instead of borrowername too %]
832
            // In one place (serials/routing.tt), the page is reload on every add
835
            $("#info").hide();
833
            // We have to wait for the page to be there
836
            $("#error").hide();
834
            function wait_for_opener () {
837
            if ( add_user(borrowernumber, borrowername) < 0 ) {
835
                if ( ! $(opener.document).find('body').size() ) {
838
                $("#error").html(_("Patron '%s' is already in the list.").format(borrowername));
836
                    setTimeout(wait_for_opener, 500);
839
                $("#error").show();
837
                } else {
840
            } else {
838
                    [%# Note that add_user could sent data instead of borrowername too %]
841
                $("#info").html(_("Patron '%s' added.").format(borrowername));
839
                    $("#info").hide();
842
                $("#info").show();
840
                    $("#error").hide();
841
                    if ( p.add_user(borrowernumber, borrowername) < 0 ) {
842
                        $("#error").html(_("Patron '%s' is already in the list.").format(borrowername));
843
                        $("#error").show();
844
                    } else {
845
                        $("#info").html(_("Patron '%s' added.").format(borrowername));
846
                        $("#info").show();
847
                    }
848
                }
849
            }
843
            }
850
            wait_for_opener();
851
        }
844
        }
852
        function select_user(borrowernumber, data) {
845
        function modal_select_user(borrowernumber, data) {
853
            var p = window.opener;
846
            if ( document.getElementById("selected_patron_id") ) {
854
            if ( p.document.getElementById("selected_patron_id") ) {
847
                document.getElementById("selected_patron_id").value = borrowernumber;
855
                p.document.getElementById("selected_patron_id").value = borrowernumber;
856
            } else {
848
            } else {
857
                [%  IF callback %]
849
                [% IF callback %]
858
                    p.[% callback | html %](borrowernumber, data);
850
                    [% callback | html %](borrowernumber, data);
859
                [%  ELSE %]
851
                [% ELSE %]
860
                    p.select_user(borrowernumber, data);
852
                    select_user(borrowernumber, data);
861
                [% END %]
853
                [% END %]
862
            }
854
            }
863
            window.close();
864
        }
855
        }
865
    </script>
856
    </script>
866
[% END %]
857
[% END %]
858
859
860
[% BLOCK patron_search_modal %]
861
    [% UNLESS patron_search_modal_id %]
862
        [% patron_search_modal_id = "patron_search_modal" %]
863
    [% END %]
864
    <div id="[% patron_search_modal_id | html %]" class="modal modal-full" tabindex="-1" role="dialog" aria-labelledby="patronSearchLabel" aria-hidden="true" data-backdrop="">
865
        <div class="modal-dialog" role="document">
866
            <div class="modal-content">
867
                <div class="modal-header">
868
                    <button type="button" class="closebtn" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
869
                    <h4 class="modal-title" id="patronSearchLabel">[% modal_title | html %]</h4>
870
                </div>
871
                <div class="modal-body">
872
                    [% PROCESS patron_search_filters filters => ['branch','category','sort1','sort2'] %]
873
874
                    <div id="searchresults">
875
                        [% IF columns.grep('checkbox').size %]
876
                            <div class="searchheader fh-fixedHeader" id="searchheader" style="display:none;">
877
                                <div>
878
                                    <a href="#" class="btn btn-link" id="select_all"><i class="fa fa-check"></i> Select all</a>
879
                                    |
880
                                    <a href="#" class="btn btn-link" id="clear_all"><i class="fa fa-remove"></i> Clear all</a>
881
                                    [% IF selection_type == 'add' %]
882
                                    <button id="add-selected" class="btn btn-sm btn-default" type="submit">Add selected patrons</button>
883
                                    [% END %]
884
                                </div>
885
                            </div>
886
                        [% END %]
887
                        [% PROCESS patron_search_table table_id => 'memberresultst' columns => columns %]
888
                    </div>
889
                </div>
890
                <div class="modal-footer">
891
                    <a href="#" class="btn btn-default cancel" data-dismiss="modal" aria-hidden="true">Close</a>
892
                </div>
893
            </div>
894
        </div>
895
    </div>
896
    <div id="patron_preview_modal" class="basicModal"></div>
897
[% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt (-2 / +7 lines)
Lines 10-15 Link Here
10
[% PROCESS 'restriction-types.inc' %]
10
[% PROCESS 'restriction-types.inc' %]
11
[% PROCESS 'i18n.inc' %]
11
[% PROCESS 'i18n.inc' %]
12
[% SET footerjs = 1 %]
12
[% SET footerjs = 1 %]
13
[% PROCESS 'patron-search.inc' %]
13
[% INCLUDE 'doc-head-open.inc' %]
14
[% INCLUDE 'doc-head-open.inc' %]
14
<title>[% FILTER collapse %]
15
<title>[% FILTER collapse %]
15
        [% UNLESS blocking_error %]
16
        [% UNLESS blocking_error %]
Lines 587-593 legend:hover { Link Here
587
                                                <input name="guarantor_firstname" id="guarantor_firstname" type="hidden" />
588
                                                <input name="guarantor_firstname" id="guarantor_firstname" type="hidden" />
588
589
589
                                                <li>
590
                                                <li>
590
                                                    <a href="#" id="guarantor_search" class="btn btn-default"><i class="fa fa-plus"></i> Add guarantor</a>
591
                                                    <a href="#patron_search_modal" class="btn btn-default" data-toggle="modal"><i class="fa fa-plus"></i> Add guarantor</a>
591
                                                </li>
592
                                                </li>
592
593
593
                                                [% IF Koha.Preference('AllowStaffToSetCheckoutsVisibilityForGuarantor') %]
594
                                                [% IF Koha.Preference('AllowStaffToSetCheckoutsVisibilityForGuarantor') %]
Lines 1674-1680 legend:hover { Link Here
1674
                </div> <!-- /.col-sm-2.col-sm-pull-10 -->
1675
                </div> <!-- /.col-sm-2.col-sm-pull-10 -->
1675
            [% END %]
1676
            [% END %]
1676
        </div> <!-- /.row -->
1677
        </div> <!-- /.row -->
1677
1678
[% MACRO jsinclude BLOCK %]
1678
[% MACRO jsinclude BLOCK %]
1679
    [% Asset.js("lib/hc-sticky.js") | $raw %]
1679
    [% Asset.js("lib/hc-sticky.js") | $raw %]
1680
    [% INCLUDE 'calendar.inc' %]
1680
    [% INCLUDE 'calendar.inc' %]
Lines 1972-1977 legend:hover { Link Here
1972
    [% Asset.js("js/members.js") | $raw %]
1972
    [% Asset.js("js/members.js") | $raw %]
1973
    [% Asset.js("js/messaging-preference-form.js") | $raw %]
1973
    [% Asset.js("js/messaging-preference-form.js") | $raw %]
1974
    [% PROCESS 'password_check.inc' new_password => 'password', category_selector => '#categorycode_entry', minPasswordLength => patron.category.effective_min_password_length, RequireStrongPassword => patron.category.effective_require_strong_password %]
1974
    [% PROCESS 'password_check.inc' new_password => 'password', category_selector => '#categorycode_entry', minPasswordLength => patron.category.effective_min_password_length, RequireStrongPassword => patron.category.effective_require_strong_password %]
1975
1976
    [% INCLUDE 'select2.inc' %]
1977
    [% SET columns = ['cardnumber','name','category','branch','dateofbirth','address-library','action'] %]
1978
    [% PROCESS patron_search_modal columns => columns, modal_title => t("Add guarantor") %]
1979
    [% PROCESS patron_search_js columns => columns, actions => ["select"], preview_on_name_click => 1 %]
1975
[% END %]
1980
[% END %]
1976
1981
1977
[% INCLUDE 'intranet-bottom.inc' %]
1982
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/js/members.js (-6 lines)
Lines 199-209 $(document).ready(function(){ Link Here
199
199
200
    $("fieldset.rows input, fieldset.rows select").addClass("noEnterSubmit");
200
    $("fieldset.rows input, fieldset.rows select").addClass("noEnterSubmit");
201
201
202
    $('body').on('click', '#guarantor_search', function(e) {
203
        e.preventDefault();
204
        var newin = window.open('/cgi-bin/koha/members/search.pl?columns=cardnumber,name,category,branch,dateofbirth,address-library,action','popup','width=1024,height=768,resizable=no,toolbar=false,scrollbars=yes,top');
205
    });
206
207
    $('#guarantor_relationships').on('click', '.guarantor_cancel', function(e) {
202
    $('#guarantor_relationships').on('click', '.guarantor_cancel', function(e) {
208
        e.preventDefault();
203
        e.preventDefault();
209
        $(this).parents('fieldset').first().remove();
204
        $(this).parents('fieldset').first().remove();
210
- 

Return to bug 35329