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 649-670 Link Here
649
                var borrowernumber = $(this).data("borrowernumber");
648
                var borrowernumber = $(this).data("borrowernumber");
650
                var firstname = $(this).data("firstname");
649
                var firstname = $(this).data("firstname");
651
                var surname = $(this).data("surname");
650
                var surname = $(this).data("surname");
652
                add_user( borrowernumber, firstname + " " + surname );
651
                modal_add_user( borrowernumber, firstname + " " + surname );
653
            });
652
            });
654
655
            $("body").on("click",".select_user",function(e){
653
            $("body").on("click",".select_user",function(e){
656
                e.preventDefault();
654
                e.preventDefault();
657
                var borrowernumber = $(this).data("borrowernumber");
655
                var borrowernumber = $(this).data("borrowernumber");
658
                var borrower_data = $("#borrower_data"+borrowernumber).val();
656
                var borrower_data = $("#borrower_data"+borrowernumber).val();
659
                select_user( borrowernumber, JSON.parse(borrower_data) );
657
                modal_select_user( borrowernumber, JSON.parse(borrower_data) );
658
                $(this).closest(".modal").modal('hide');
660
            });
659
            });
661
660
662
            $("body").on("click",".patron_preview", function( e ){
661
            $("body").on("click",".patron_preview", function( e ){
663
                e.preventDefault();
662
                e.preventDefault();
664
                var borrowernumber = $(this).data("borrowernumber");
663
                var borrowernumber = $(this).data("borrowernumber");
665
                var page = "/cgi-bin/koha/members/moremember.pl?print=brief&borrowernumber=" + borrowernumber;
664
                var page = "/cgi-bin/koha/members/moremember.pl?print=brief&borrowernumber=" + borrowernumber;
666
                $("#patronPreview .modal-body").load( page + " div.container-fluid" );
665
                $("#patron_preview_modal").load( page + " div.container-fluid", function(){
667
                $('#patronPreview').modal({show:true});
666
                    $("#patron_preview_modal").find(".close").on("click", function(){
667
                        $('#patron_preview_modal').html(_("Loading...")).removeClass("show");
668
                    });
669
                });
670
                $("#patron_preview_modal").addClass("show");
668
            });
671
            });
669
672
670
            $("#patronPreview").on('hidden.bs.modal', function (e) {
673
            $("#patronPreview").on('hidden.bs.modal', function (e) {
Lines 826-865 Link Here
826
        }
829
        }
827
830
828
        // modify parent window owner element
831
        // modify parent window owner element
829
        function add_user(borrowernumber, borrowername) {
832
        function modal_add_user(borrowernumber, borrowername) {
830
            var p = window.opener;
833
            [%# Note that add_user could sent data instead of borrowername too %]
831
            // In one place (serials/routing.tt), the page is reload on every add
834
            $("#info").hide();
832
            // We have to wait for the page to be there
835
            $("#error").hide();
833
            function wait_for_opener () {
836
            if ( add_user(borrowernumber, borrowername) < 0 ) {
834
                if ( ! $(opener.document).find('body').size() ) {
837
                $("#error").html(_("Patron '%s' is already in the list.").format(borrowername));
835
                    setTimeout(wait_for_opener, 500);
838
                $("#error").show();
836
                } else {
839
            } else {
837
                    [%# Note that add_user could sent data instead of borrowername too %]
840
                $("#info").html(_("Patron '%s' added.").format(borrowername));
838
                    $("#info").hide();
841
                $("#info").show();
839
                    $("#error").hide();
840
                    if ( p.add_user(borrowernumber, borrowername) < 0 ) {
841
                        $("#error").html(_("Patron '%s' is already in the list.").format(borrowername));
842
                        $("#error").show();
843
                    } else {
844
                        $("#info").html(_("Patron '%s' added.").format(borrowername));
845
                        $("#info").show();
846
                    }
847
                }
848
            }
842
            }
849
            wait_for_opener();
850
        }
843
        }
851
        function select_user(borrowernumber, data) {
844
        function modal_select_user(borrowernumber, data) {
852
            var p = window.opener;
845
            if ( document.getElementById("selected_patron_id") ) {
853
            if ( p.document.getElementById("selected_patron_id") ) {
846
                document.getElementById("selected_patron_id").value = borrowernumber;
854
                p.document.getElementById("selected_patron_id").value = borrowernumber;
855
            } else {
847
            } else {
856
                [%  IF callback %]
848
                [% IF callback %]
857
                    p.[% callback | html %](borrowernumber, data);
849
                    [% callback | html %](borrowernumber, data);
858
                [%  ELSE %]
850
                [% ELSE %]
859
                    p.select_user(borrowernumber, data);
851
                    select_user(borrowernumber, data);
860
                [% END %]
852
                [% END %]
861
            }
853
            }
862
            window.close();
863
        }
854
        }
864
    </script>
855
    </script>
865
[% END %]
856
[% END %]
857
858
859
[% BLOCK patron_search_modal %]
860
    [% UNLESS patron_search_modal_id %]
861
        [% patron_search_modal_id = "patron_search_modal" %]
862
    [% END %]
863
    <div id="[% patron_search_modal_id | html %]" class="modal modal-full" tabindex="-1" role="dialog" aria-labelledby="patronSearchLabel" aria-hidden="true" data-backdrop="">
864
        <div class="modal-dialog" role="document">
865
            <div class="modal-content">
866
                <div class="modal-header">
867
                    <button type="button" class="closebtn" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
868
                    <h4 class="modal-title" id="patronSearchLabel">[% modal_title | html %]</h4>
869
                </div>
870
                <div class="modal-body">
871
                    [% PROCESS patron_search_filters filters => ['branch','category','sort1','sort2'] %]
872
873
                    <div id="searchresults">
874
                        [% IF columns.grep('checkbox').size %]
875
                            <div class="searchheader fh-fixedHeader" id="searchheader" style="display:none;">
876
                                <div>
877
                                    <a href="#" class="btn btn-link" id="select_all"><i class="fa fa-check"></i> Select all</a>
878
                                    |
879
                                    <a href="#" class="btn btn-link" id="clear_all"><i class="fa fa-remove"></i> Clear all</a>
880
                                    [% IF selection_type == 'add' %]
881
                                    <button id="add-selected" class="btn btn-sm btn-default" type="submit">Add selected patrons</button>
882
                                    [% END %]
883
                                </div>
884
                            </div>
885
                        [% END %]
886
                        [% PROCESS patron_search_table table_id => 'memberresultst' columns => columns %]
887
                    </div>
888
                </div>
889
                <div class="modal-footer">
890
                    <a href="#" class="btn btn-default cancel" data-dismiss="modal" aria-hidden="true">Close</a>
891
                </div>
892
            </div>
893
        </div>
894
    </div>
895
    <div id="patron_preview_modal" class="basicModal"></div>
896
[% 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