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

(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt (-248 / +297 lines)
Lines 507-576 Link Here
507
                <div class="dialog alert hide holdalert">
507
                <div class="dialog alert hide holdalert">
508
                </div>
508
                </div>
509
509
510
                <fieldset class="rows">
510
                [% UNLESS ( multi_hold ) %]
511
                    <legend>Hold details</legend>
512
                    <form action="placerequest.pl" method="post" name="form" id="hold-request-form">
511
                    <form action="placerequest.pl" method="post" name="form" id="hold-request-form">
512
                        <fieldset class="rows">
513
                            <legend>Hold details</legend>
513
514
514
                        <input type="hidden" name="borrowernumber" value="[% patron.borrowernumber | html %]" />
515
                            <input type="hidden" name="borrowernumber" value="[% patron.borrowernumber | html %]" />
515
                        [% FOREACH biblionumber IN biblionumbers %]
516
                            [% FOREACH biblionumber IN biblionumbers %]
516
                            <input type="hidden" name="biblionumber" value="[% biblionumber | html %]"/>
517
                                <input type="hidden" name="biblionumber" value="[% biblionumber | html %]"/>
517
                        [% END %]
518
                        [% IF ( multi_hold ) %]
519
                            <input type="hidden" name="multi_holds" id="multi_holds" value="1" />
520
                            <input type="hidden" name="request" value="any"/>
521
                            [% FOREACH biblioloo IN biblioloop %]
522
                                [% UNLESS biblioloo.none_avail %]
523
                                    <input type="hidden" name="holdable_bibs" id="holdable_bibs" value="[% biblioloo.biblionumber | html %]"/>
524
                                    <input type="hidden" name="title_[% biblioloo.biblionumber | html %]" value="[% biblioloo.title | html %]"/>
525
                                    <input type="hidden" name="rank_[% biblioloo.biblionumber | html %]" value="[% biblioloo.rank | html %]"/>
526
                                [% END %]
527
                            [% END %]
518
                            [% END %]
528
                        [% ELSE %]
519
                                <input type="hidden" name="holdable_bibs" id="holdable_bibs" value="[% biblio.biblionumber | html %]"/>
529
                            <input type="hidden" name="holdable_bibs" id="holdable_bibs" value="[% biblio.biblionumber | html %]"/>
520
                                <input type="hidden" name="title" value="[% biblio.title | html %]" />
530
                            <input type="hidden" name="title" value="[% biblio.title | html %]" />
521
                                <input type="hidden" name="rank-request" value="[% fixedRank | html %]" />
531
                            <input type="hidden" name="rank-request" value="[% fixedRank | html %]" />
532
                        [% END # /IF multi_hold %]
533
522
534
                        <ol>
523
                            <ol>
535
                            <li>
524
                                <li>
536
                                <span class="label">Patron:</span>
525
                                    <span class="label">Patron:</span>
537
                                [% IF ( patron.borrowernumber ) %]
526
                                    [% IF ( patron.borrowernumber ) %]
538
                                    [% INCLUDE 'patron-title.inc' patron => patron no_title => 1 no_cardnumber => 1 hide_patron_infos_if_needed => 1 %]
527
                                        [% INCLUDE 'patron-title.inc' patron => patron no_title => 1 no_cardnumber => 1 hide_patron_infos_if_needed => 1 %]
539
                                [% ELSE %]
528
                                    [% ELSE %]
540
                                    Not defined yet
529
                                        Not defined yet
541
                                [% END %]
530
                                    [% END %]
542
                            </li>
531
                                </li>
543
532
544
                            [% UNLESS ( multi_hold ) %]
545
                                <li>
533
                                <li>
546
                                    <span class="label">Estimated priority:</span>
534
                                    <span class="label">Estimated priority:</span>
547
                                    <strong>[% fixedRank | html %]</strong>
535
                                    <strong>[% fixedRank | html %]</strong>
548
                                </li>
536
                                </li>
549
                            [% END %]
550
537
551
                            <li>
538
                                <li>
552
                                <label for="holdnotes">Notes:</label>
539
                                    <label for="holdnotes">Notes:</label>
553
                                <textarea id="holdnotes" name="notes" cols="30" rows="1"></textarea>
540
                                    <textarea id="holdnotes" name="notes" cols="30" rows="1"></textarea>
554
                            </li>
541
                                </li>
555
                            <li>
556
                                <label for="pickup">Pickup at:</label>
557
                            [% UNLESS ( multi_hold ) %]
558
                                <select name="pickup" id="pickup"
559
                                        data-biblio-id="[% biblio.biblionumber | html %]"
560
                                        data-patron-id="[% patron.borrowernumber | html %]"
561
                                        data-pickup-location-source="biblio">
562
                                    [% PROCESS options_for_libraries libraries => Branches.pickup_locations({ search_params => { biblio => biblionumber, patron => patron }, selected => pickup }) %]
563
                            [% ELSE %]
564
                                <select name="pickup" id="pickup_multi" data-patron-id="[% patron.borrowernumber | html %]">
565
                                    <option value="" selected="selected"></option>
566
                                [% FOREACH pickup_location IN multi_pickup_locations %]
567
                                    <option value="[% pickup_location.branchcode | html %]">[% pickup_location.branchname | html %]</option>
568
                                [% END %]
569
                            [% END %]
570
                                </select>
571
                            </li>
572
542
573
                            [% UNLESS ( multi_hold ) %]
574
                                [% IF Koha.Preference('AllowHoldItemTypeSelection') %]
543
                                [% IF Koha.Preference('AllowHoldItemTypeSelection') %]
575
                                    <li>
544
                                    <li>
576
                                        <label for="itemtype">Request specific item type:</label>
545
                                        <label for="itemtype">Request specific item type:</label>
Lines 582-588 Link Here
582
                                        </select>
551
                                        </select>
583
                                    </li>
552
                                    </li>
584
                                [% END %]
553
                                [% END %]
585
                            [% END # /UNLESS multi_hold %]
586
554
587
                            [% IF ( Koha.Preference('AllowHoldDateInFuture') ) %]
555
                            [% IF ( Koha.Preference('AllowHoldDateInFuture') ) %]
588
                                <li>
556
                                <li>
Lines 596-646 Link Here
596
                                <input id="expiration_date" name="expiration_date" id="to" size="10" type="text" class="flatpickr" data-flatpickr-futuredate="true" />
564
                                <input id="expiration_date" name="expiration_date" id="to" size="10" type="text" class="flatpickr" data-flatpickr-futuredate="true" />
597
                            </li>
565
                            </li>
598
566
599
                            [% UNLESS ( multi_hold ) %]
567
                                <li id="non_priority_list_item">
568
                                    <label for="non_priority">Non priority hold:</label>
569
                                    <input name="non_priority" id="non_priority" type="checkbox" />
570
                                    <span class="hint">A non priority hold doesn't prevent a current checkout from renewing</span>
571
                                </li>
600
                                <li>
572
                                <li>
601
                                    <label for="requestany">Hold next available item </label>
573
                                    <label for="holdnotes">Notes:</label>
602
                                    [% IF force_hold_level == 'item' || force_hold_level == 'item_group'  %]
574
                                    <textarea id="holdnotes" name="notes" cols="30" rows="1"></textarea>
603
                                        <input type="checkbox" id="requestany" name="request" disabled="true" />
575
                                </li>
576
                            </ol>
577
                            </fieldset>
578
                            <fieldset class="rows">
579
                                <legend>
580
                                    <label for="requestany" class="inline">
581
                                        Hold next available item
582
                                    </label>
583
                                    [% IF force_hold_level == 'item' || force_hold_level == 'item_group' %]
584
                                        <input type="radio" id="requestany" name="request" disabled="true" />
604
                                    [% ELSIF force_hold_level == 'record' %]
585
                                    [% ELSIF force_hold_level == 'record' %]
605
                                        <input type="checkbox" id="requestany" checked="checked" value="Any" disabled="true"/>
586
                                        <input type="radio" id="requestany" checked="checked" value="Any" disabled="true"/>
606
                                        <input type="hidden" name="request" value="Any"/>
587
                                        <input type="hidden" name="request" value="Any"/>
607
                                    [% ELSE %]
588
                                    [% ELSE %]
608
                                        <input type="checkbox" id="requestany" name="request" checked="checked" value="Any" />
589
                                        <input type="radio" id="requestany" name="request" checked="checked" value="Any" />
609
                                    [% END %]
590
                                    [% END %]
610
                                    <input type="hidden" name="alreadyreserved" value="[% alreadyreserved | html %]" />
591
                                </legend>
611
                                </li>
592
                                <input type="hidden" name="alreadyreserved" value="[% alreadyreserved | html %]" />
593
                                <ol>
612
594
613
                                [% IF remaining_holds_for_record > 1 %]
614
                                    <li>
595
                                    <li>
615
                                        <label for="holds_to_place_count">Holds to place (count)</label>
596
                                        <label for="pickup">Pickup at:</label>
616
                                        <input type="text" inputmode="numeric" pattern="[0-9]*" id="holds_to_place_count" name="holds_to_place_count" maxlength="[% remaining_holds_for_record | html %]" value="1" />
597
                                        <select name="pickup" id="pickup-next-avail"
598
                                                data-biblio-id="[% biblio.biblionumber | html %]"
599
                                                data-patron-id="[% patron.borrowernumber | html %]"
600
                                                data-pickup-location-source="biblio">
601
                                            [% PROCESS options_for_libraries libraries => Branches.pickup_locations({ search_params => { biblio => biblionumber, patron => patron }, selected => pickup }) %]
602
                                        </select>
617
                                    </li>
603
                                    </li>
618
                                [% ELSE %]
619
                                    <input type="hidden" name="holds_to_place_count" value="1" />
620
                                [% END %]
621
                            [% END # /UNLESS multi_hold %]
622
604
623
                            <li id="non_priority_list_item">
605
                                    [% IF Koha.Preference('AllowHoldItemTypeSelection') %]
624
                                <label for="non_priority">Non priority hold:</label>
606
                                        <li>
625
                                <input name="non_priority" id="non_priority" type="checkbox" />
607
                                            <label for="itemtype">Request specific item type:</label>
626
                                <span class="hint">A non priority hold doesn't prevent a current checkout from renewing</span>
608
                                            <select name="itemtype" id="itemtype">
627
                            </li>
609
                                                <option value="">Any item type</option>
628
                        </ol>
610
                                                [%- FOREACH itemtype IN available_itemtypes %]
611
                                                    <option value="[% itemtype | html %]">[% ItemTypes.GetDescription( itemtype ) | html %]</option>
612
                                                [%- END %]
613
                                            </select>
614
                                        </li>
615
                                    [% END %]
616
                                    [% IF remaining_holds_for_record > 1 %]
617
                                        <li>
618
                                            <label for="holds_to_place_count">Holds to place (count)</label>
619
                                            <input type="text" inputmode="numeric" pattern="[0-9]*" id="holds_to_place_count" name="holds_to_place_count" maxlength="[% remaining_holds_for_record | html %]" value="1" />
620
                                        </li>
621
                                    [% ELSE %]
622
                                        <input type="hidden" name="holds_to_place_count" value="1" />
623
                                    [% END %]
624
                                </ol>
625
629
626
630
                        [% UNLESS ( multi_hold ) %]
631
                            <fieldset class="action">
627
                            <fieldset class="action">
632
                                [% IF ( patron.borrowernumber ) %]
628
                                [% IF ( patron.borrowernumber ) %]
633
                                    [% IF ( override_required ) %]
629
                                    [% IF ( override_required ) %]
634
                                        <button type="submit" class="btn btn-primary warning"><i class="fa fa-exclamation-triangle "></i> Place hold</button>
630
                                        <button type="submit" id="hold_any_btn" class="btn btn-primary warning"><i class="fa fa-exclamation-triangle "></i> Place hold</button>
635
                                    [% ELSIF ( none_available ) %]
631
                                    [% ELSIF ( none_available ) %]
636
                                        <button type="submit" disabled="disabled" class="btn btn-primary btn-disabled">Place hold</button>
632
                                        <button type="submit" id="hold_any_btn" disabled="disabled" class="btn btn-primary btn-disabled">Place hold</button>
637
                                    [% ELSE %]
633
                                    [% ELSE %]
638
                                        <button type="submit" class="btn btn-primary">Place hold</button>
634
                                        <button type="submit" id="hold_any_btn" class="btn btn-primary">Place hold</button>
639
                                    [% END %]
635
                                    [% END %]
640
                                [% END %]
636
                                [% END %]
641
                            </fieldset>
637
                            </fieldset>
638
                        </fieldset>
639
640
                        <hr/>
641
642
                        [% biblio = biblioloop.0 %]
643
                        <!-- ItemGroup level holds -->
644
                        [% IF Koha.Preference('EnableItemGroupHolds') && biblio.object.item_groups.count %]
645
                        <fieldset class="rows">
646
                            <legend>
647
                                <label for="requestgrp" class="inline">
648
                                    Hold next available item from an item group
649
                                </label>
650
                                [% IF force_hold_level == 'item_group' %]
651
                                    <input type="radio" class="requestgrp" id="requestgrp" name="request" checked="checked" disabled="true" />
652
                                    <span class="error"><i>(Required)</i></span>
653
                                [% ELSIF force_hold_level == 'item' || force_hold_level == 'record' %]
654
                                    <input type="radio" class="requestgrp" id="requestgrp" name="request" disabled="true" />
655
                                [% ELSE %]
656
                                    <input type="radio" class="requestgrp" id="requestgrp" name="request" />
657
                                [% END %]
658
                            </legend>
659
660
                            [% IF force_hold_level == 'record' # Patron has placed a record level hold previously for this record %]
661
                                <span class="error">
662
                                    <i class="fa fa-times fa-lg" title="Cannot be put on hold"></i>
663
                                    Hold must be record level
664
                                </span>
665
                            [% ELSIF force_hold_level == 'item' # Patron has placed an item level hold previously for this record %]
666
                                <span class="error">
667
                                    <i class="fa fa-times fa-lg" title="Cannot be put on hold"></i>
668
                                    Hold must be item level
669
                                </span>
670
                            [% ELSE %]
671
                                <ul>
672
                                    <li>
673
                                        <label for="pickup">Pickup at:</label>
674
                                        <select name="pickup" id="pickup-item-group"
675
                                                data-biblio-id="[% biblio.biblionumber | html %]"
676
                                                data-patron-id="[% patron.borrowernumber | html %]"
677
                                                data-pickup-location-source="biblio">
678
                                            [% PROCESS options_for_libraries libraries => Branches.pickup_locations({ search_params => { biblio => biblionumber, patron => patron }, selected => pickup }) %]
679
                                        </select>
680
                                    </li>
681
                                    <li>
682
                                        <table>
683
                                            <thead>
684
                                                <tr>
685
                                                    <th>Hold</th>
686
                                                    <th>Item group</th>
687
                                                </tr>
688
                                            </thead>
689
                                            <tbody>
690
                                                [% FOREACH g IN biblio.object.item_groups.search({}, { order_by => ['display_order'] }) %]
691
                                                    [% IF g.items %]
692
                                                        <tr>
693
                                                            <td>
694
                                                                <input id="item_group_id_[% g.id | html %]" class="requestgrp" type="radio" name="item_group_id" value="[% g.id | html %]" />
695
                                                            </td>
696
                                                            <td>
697
                                                                <label for="item_group_id_[% g.id | html %]">[% g.description | html %]</label>
698
                                                            </td>
699
                                                        </tr>
700
                                                    [% END %]
701
                                                [% END %]
702
                                            </tbody>
703
                                        </table>
704
                                    </li>
705
                                </ul>
706
                            [% END %]
707
                            <button type="submit" id="hold_grp_btn" class="btn btn-primary warning">Place hold</button>
708
                        </fieldset>
709
                        [% END %]
710
                        <!-- /ItemGroup level holds -->
642
711
643
                            [% biblio = biblioloop.0 %]
712
713
                        <fieldset class="rows">
714
                            <legend>
715
                                <label class="inline">
716
                                    Place a hold on a specific item
717
                                </label>
718
                                [% IF force_hold_level == 'item' %]
719
                                     <input type="radio" name="request" class="requestspecific" checked="checked" disabled='disabled'/>
720
                                     <span class="error"><em>(Required)</em></span>
721
                                [% ELSIF force_hold_level == 'record' || force_hold_level == 'item_group' %]
722
                                     <input type="radio" name="request" class="requestspecific" disabled='disabled'/>
723
                                [% ELSE %]
724
                                     <input type="radio" name="request" class="requestspecific"/>
725
                                [% END %]
726
                            </legend>
644
727
645
                            <ol>
728
                            <ol>
646
                                [% UNLESS Koha.Preference('item-level_itypes') %]
729
                                [% UNLESS Koha.Preference('item-level_itypes') %]
Lines 658-716 Link Here
658
                                [% END %]
741
                                [% END %]
659
                            </ol>
742
                            </ol>
660
743
661
                            <!-- ItemGroup level holds -->
662
                            [% IF Koha.Preference('EnableItemGroupHolds') && biblio.object.item_groups.count %]
663
                                <h2 style="padding: 0 1em;">
664
                                    Hold next available item from an item group
665
                                    [% IF force_hold_level == 'item_group' %]
666
                                        <span class="error"><i>(Required)</i></span>
667
                                    [% END %]
668
                                </h2>
669
670
                                [% IF force_hold_level == 'record' # Patron has placed a record level hold previously for this record %]
671
                                    <span class="error">
672
                                        <i class="fa fa-times fa-lg" title="Cannot be put on hold"></i>
673
                                        Hold must be record level
674
                                    </span>
675
                                [% ELSIF force_hold_level == 'item' # Patron has placed an item level hold previously for this record %]
676
                                    <span class="error">
677
                                        <i class="fa fa-times fa-lg" title="Cannot be put on hold"></i>
678
                                        Hold must be item level
679
                                    </span>
680
                                [% ELSE %]
681
                                    <table>
682
                                        <thead>
683
                                            <tr>
684
                                                <th>Hold</th>
685
                                                <th>Item group</th>
686
                                            </tr>
687
                                        </thead>
688
                                        <tbody>
689
                                            [% FOREACH g IN biblio.object.item_groups.search({}, { order_by => ['display_order'] }) %]
690
                                                [% IF g.items %]
691
                                                    <tr>
692
                                                        <td>
693
                                                            <input id="item_group_id_[% g.id | html %]" type="radio" name="item_group_id" value="[% g.id | html %]" />
694
                                                        </td>
695
                                                        <td>
696
                                                            <label for="item_group_id_[% g.id | html %]">[% g.description | html %]</label>
697
                                                        </td>
698
                                                    </tr>
699
                                                [% END %]
700
                                            [% END %]
701
                                        </tbody>
702
                                    </table>
703
                                [% END %]
704
                            [% END %]
705
                            <!-- /ItemGroup level holds -->
706
707
                            <h2 style="padding: 0 1em;">
708
                                Place a hold on a specific item
709
                                [% IF force_hold_level == 'item' %]
710
                                     <span class="error"><em>(Required)</em></span>
711
                                [% END %]
712
                            </h2>
713
714
                            <table id="requestspecific">
744
                            <table id="requestspecific">
715
                                <thead>
745
                                <thead>
716
                                    <tr>
746
                                    <tr>
Lines 753-761 Link Here
753
                                                            Hold must be item group level
783
                                                            Hold must be item group level
754
                                                        </span>
784
                                                        </span>
755
                                                    [% ELSIF ( itemloo.available ) %]
785
                                                    [% ELSIF ( itemloo.available ) %]
756
                                                        <input type="radio" name="checkitem" value="[% itemloo.itemnumber | html %]" />
786
                                                        <input type="radio" name="checkitem" class="requestspecific" value="[% itemloo.itemnumber | html %]" />
757
                                                    [% ELSIF ( itemloo.override ) %]
787
                                                    [% ELSIF ( itemloo.override ) %]
758
                                                        <input type="radio" name="checkitem" class="needsoverride" value="[% itemloo.itemnumber | html %]" />
788
                                                        <input type="radio" name="checkitem" class="needsoverride requestspecific" value="[% itemloo.itemnumber | html %]" />
759
                                                        <i class="fa fa-exclamation-triangle fa-lg" style="color:gold" title="Requires override of hold policy"/></i>
789
                                                        <i class="fa fa-exclamation-triangle fa-lg" style="color:gold" title="Requires override of hold policy"/></i>
760
                                                    [% ELSE %]
790
                                                    [% ELSE %]
761
                                                        <span class="error">
791
                                                        <span class="error">
Lines 800-806 Link Here
800
                                                </td>
830
                                                </td>
801
                                                <td>
831
                                                <td>
802
                                                [% IF (itemloo.pickup_locations_count > 0) %]
832
                                                [% IF (itemloo.pickup_locations_count > 0) %]
803
                                                    <select name="item_pickup_[% itemloo.itemnumber | html %]" class="pickup_locations" style="width:100%;"
833
                                                    <select name="item_pickup_[% itemloo.itemnumber | html %]" class="pickup_locations requestspecific" style="width:100%;"
804
                                                            data-item-id="[% itemloo.itemnumber | html %]"
834
                                                            data-item-id="[% itemloo.itemnumber | html %]"
805
                                                            data-patron-id="[% patron.borrowernumber | html %]"
835
                                                            data-patron-id="[% patron.borrowernumber | html %]"
806
                                                            data-pickup-location-source="item">
836
                                                            data-pickup-location-source="item">
Lines 919-1023 Link Here
919
                            </table> <!-- /#requestspecific -->
949
                            </table> <!-- /#requestspecific -->
920
950
921
                            [% IF hiddencount %]
951
                            [% IF hiddencount %]
922
                                <form>
952
                                <p class="hiddencount">
923
                                    <p class="hiddencount">
953
                                    <a href="request.pl?biblionumber=[% biblio.biblionumber | uri %]&amp;borrowernumber=[% borrowernumber | uri %]&amp;showallitems=1">Show all items ([% hiddencount | html %] hidden)</a>
924
                                        <a href="request.pl?biblionumber=[% biblio.biblionumber | uri %]&amp;borrowernumber=[% borrowernumber | uri %]&amp;showallitems=1">Show all items ([% hiddencount | html %] hidden)</a>
954
                                </p>
925
                                    </p>
926
                                </form>
927
                            [% END # /IF hiddencount %]
955
                            [% END # /IF hiddencount %]
928
956
929
                        [% ELSE # /UNLESS multi_hold %]
957
                        [% ELSE # /UNLESS multi_hold %]
930
958
                            <fieldset class="rows">
931
                            <table id="requesttitles">
959
                                <legend>Hold details</legend>
932
                                <tr>
960
                                <form action="placerequest.pl" method="post" name="form" id="hold-request-form">
933
                                    <th>&nbsp;</th>
961
                                        <input type="hidden" name="multi_holds" id="multi_holds" value="1" />
934
                                    <th>Pickup location</th>
962
                                        <input type="hidden" name="request" value="any"/>
935
                                    <th>Title</th>
963
                                    <input type="hidden" name="borrowernumber" value="[% patron.borrowernumber | html %]" />
936
                                    [% UNLESS Koha.Preference('item-level_itypes') %]
964
                                        [% FOREACH biblioloo IN biblioloop %]
937
                                        <th>Item type</th>
965
                                            <input type="hidden" name="biblionumber" id="biblionumber" value="[% biblioloo.biblionumber | html %]"/>
938
                                    [% END %]
966
                                            [% UNLESS biblioloo.none_avail %]
939
                                    <th>Priority</th>
967
                                                <input type="hidden" name="holdable_bibs" id="holdable_bibs" value="[% biblioloo.biblionumber | html %]"/>
940
                                    <th>Information</th>
968
                                                <input type="hidden" name="title_[% biblioloo.biblionumber | html %]" value="[% biblioloo.title | html %]"/>
941
                                </tr>
969
                                                <input type="hidden" name="rank_[% biblioloo.biblionumber | html %]" value="[% biblioloo.rank | html %]"/>
942
                                [% FOREACH biblioloo IN biblioloop %]
943
                                    [% IF ( biblioloo.warn ) %]
944
                                        <tr class="onissue">
945
                                    [% ELSE %]
946
                                        <tr>
947
                                    [% END %]
948
                                        <td>
949
                                            [% UNLESS ( biblioloo.warn ) %]
950
                                                <input class="multi_hold_item_checkbox" type="checkbox" checked="checked" title="[% biblioloo.biblionumber | html %]"/>
951
                                            [% END %]
952
                                        </td>
953
                                        <td>
954
                                            [% UNLESS ( biblioloo.none_avail || biblioloo.noitems ) %]
955
                                                <select name="pickup_[% biblioloo.biblionumber | html %]"
956
                                                        class="multi_pickup_select"
957
                                                        data-biblio-id="[% biblioloo.biblionumber | html %]"
958
                                                        data-patron-id="[% patron.borrowernumber | html %]"
959
                                                        data-pickup-locations='[% biblioloo.pickup_locations_codes.json | $raw %]'>
960
                                                    <option value=""></option>
961
                                                    [% FOREACH pickup_location IN biblioloo.pickup_locations %]
962
                                                        <option value="[% pickup_location.branchcode | html %]">[% pickup_location.branchname | html %]</option>
963
                                                    [% END %]
964
                                                </select>
965
                                            [% END %]
970
                                            [% END %]
966
                                        </td>
971
                                        [% END %]
967
                                        <td>
972
968
                                            <ul>
973
                                <table id="requesttitles">
969
                                                <li>
974
                                    <tr>
970
                                                    <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblioloo.biblionumber | uri %]">[% biblioloo.title | html %]</a>
975
                                        <th>&nbsp;</th>
971
                                                    [% IF biblioloo.author %] by [% biblioloo.author | html %][% END %]
976
                                        <th>Pickup location</th>
972
                                                </li>
977
                                        <th>Title</th>
973
                                                [% IF ( biblioloo.publicationyear ) %]
978
                                        [% UNLESS Koha.Preference('item-level_itypes') %]
979
                                            <th>Item type</th>
980
                                        [% END %]
981
                                        <th>Priority</th>
982
                                        <th>Information</th>
983
                                    </tr>
984
                                    [% FOREACH biblioloo IN biblioloop %]
985
                                        [% IF ( biblioloo.warn ) %]
986
                                            <tr class="onissue">
987
                                        [% ELSE %]
988
                                            <tr>
989
                                        [% END %]
990
                                            <td>
991
                                                [% UNLESS ( biblioloo.warn ) %]
992
                                                    <input class="multi_hold_item_checkbox" type="checkbox" checked="checked" title="[% biblioloo.biblionumber | html %]"/>
993
                                                [% END %]
994
                                            </td>
995
                                            <td>
996
                                                [% UNLESS ( biblioloo.none_avail || biblioloo.noitems ) %]
997
                                                    <select name="pickup_[% biblioloo.biblionumber | html %]"
998
                                                            class="multi_pickup_select"
999
                                                            data-biblio-id="[% biblioloo.biblionumber | html %]"
1000
                                                            data-patron-id="[% patron.borrowernumber | html %]"
1001
                                                            data-pickup-locations='[% biblioloo.pickup_locations_codes.json | $raw %]'>
1002
                                                        <option value=""></option>
1003
                                                        [% FOREACH pickup_location IN biblioloo.pickup_locations %]
1004
                                                            <option value="[% pickup_location.branchcode | html %]">[% pickup_location.branchname | html %]</option>
1005
                                                        [% END %]
1006
                                                    </select>
1007
                                                [% END %]
1008
                                            </td>
1009
                                            <td>
1010
                                                <ul>
974
                                                    <li>
1011
                                                    <li>
975
                                                        <span class="label">Publication year:</span> [% biblioloo.publicationyear | html %]
1012
                                                        <a href="/cgi-bin/koha/catalogue/detail.pl?biblionumber=[% biblioloo.biblionumber | uri %]">[% biblioloo.title | html %]</a>
1013
                                                        [% IF biblioloo.author %] by [% biblioloo.author | html %][% END %]
976
                                                    </li>
1014
                                                    </li>
1015
                                                    [% IF ( biblioloo.publicationyear ) %]
1016
                                                        <li>
1017
                                                            <span class="label">Publication year:</span> [% biblioloo.publicationyear | html %]
1018
                                                        </li>
1019
                                                    [% END %]
1020
                                                </ul>
1021
                                                [% IF ( biblioloo.warn ) %]
1022
                                                    <span class="not_holdable" title="[% biblioloo.biblionumber | html %]"></span>
977
                                                [% END %]
1023
                                                [% END %]
978
                                            </ul>
979
                                            [% IF ( biblioloo.warn ) %]
980
                                                <span class="not_holdable" title="[% biblioloo.biblionumber | html %]"></span>
981
                                            [% END %]
982
                                        </td>
983
                                        [% UNLESS Koha.Preference('item-level_itypes') %]
984
                                            <td>
985
                                                <img src="[% biblioloo.itemtype.image_location | html %]" alt="[% biblioloo.itemtype.translated_description | html %]" title="[% biblioloo.itemtype.translated_description | html %]" />
986
                                            </td>
1024
                                            </td>
987
                                        [% END %]
1025
                                            [% UNLESS Koha.Preference('item-level_itypes') %]
988
                                        <td>[% biblioloo.rank | html %]</td>
1026
                                                <td>
989
                                        <td>
1027
                                                    <img src="[% biblioloo.itemtype.image_location | html %]" alt="[% biblioloo.itemtype.translated_description | html %]" title="[% biblioloo.itemtype.translated_description | html %]" />
990
                                            [% IF ( biblioloo.checked_previously ) %]
1028
                                                </td>
991
                                                <span>Patron has previously checked out this title</span><br/>
992
                                            [% END %]
1029
                                            [% END %]
993
                                            [% IF ( biblioloo.alreadyres ) %]
1030
                                            <td>[% biblioloo.rank | html %]</td>
994
                                                <ul>
1031
                                            <td>
995
                                            [% ELSE %]
1032
                                                [% IF ( biblioloo.checked_previously ) %]
996
                                                [% IF ( biblioloo.none_avail || biblioloo.noitems ) %]
1033
                                                    <span>Patron has previously checked out this title</span><br/>
1034
                                                [% END %]
1035
                                                [% IF ( biblioloo.alreadyres ) %]
997
                                                    <ul>
1036
                                                    <ul>
1037
                                                [% ELSE %]
1038
                                                    [% IF ( biblioloo.none_avail || biblioloo.noitems ) %]
1039
                                                        <ul>
1040
                                                    [% END %]
998
                                                [% END %]
1041
                                                [% END %]
999
                                            [% END %]
1000
1042
1001
                                            [% IF ( biblioloo.alreadyres ) %]
1043
                                                [% IF ( biblioloo.alreadyres ) %]
1002
                                            <li>
1044
                                                <li>
1003
                                                [% INCLUDE 'patron-title.inc' patron => patron no_title => 1 no_cardnumber => 1 hide_patron_infos_if_needed => 1 %] <strong>already has a hold</strong> on this item
1045
                                                    [% INCLUDE 'patron-title.inc' patron => patron no_title => 1 no_cardnumber => 1 hide_patron_infos_if_needed => 1 %] <strong>already has a hold</strong> on this item
1004
                                            </li>
1046
                                                </li>
1005
                                            [% END %]
1047
                                                [% END %]
1006
                                            [% IF ( biblioloo.none_avail || biblioloo.noitems ) %]
1007
                                                <li> <strong>No items are available</strong> to be placed on hold</li>
1008
                                            [% END %]
1009
1010
                                            [% IF ( biblioloo.alreadyres ) %]
1011
                                                </ul>
1012
                                            [% ELSE %]
1013
                                                [% IF ( biblioloo.none_avail || biblioloo.noitems ) %]
1048
                                                [% IF ( biblioloo.none_avail || biblioloo.noitems ) %]
1049
                                                    <li> <strong>No items are available</strong> to be placed on hold</li>
1050
                                                [% END %]
1051
1052
                                                [% IF ( biblioloo.alreadyres ) %]
1014
                                                    </ul>
1053
                                                    </ul>
1054
                                                [% ELSE %]
1055
                                                    [% IF ( biblioloo.none_avail || biblioloo.noitems ) %]
1056
                                                        </ul>
1057
                                                    [% END %]
1015
                                                [% END %]
1058
                                                [% END %]
1016
                                            [% END %]
1059
                                            </td>
1017
                                        </td>
1060
                                        </tr>
1018
                                    </tr>
1061
                                    [% END # /FOREACH biblioloo %]
1019
                                [% END # /FOREACH biblioloo %]
1062
                                </table> <!-- /#requesttitles -->
1020
                            </table> <!-- /#requesttitles -->
1063
                            </fieldset>
1021
1064
1022
                        [% END # /UNLESS multi_hold %]
1065
                        [% END # /UNLESS multi_hold %]
1023
1066
Lines 1025-1051 Link Here
1025
                            [% IF ( patron AND patron.borrowernumber ) %]
1068
                            [% IF ( patron AND patron.borrowernumber ) %]
1026
                                [% IF ( multi_hold ) %]
1069
                                [% IF ( multi_hold ) %]
1027
                                    [% IF ( override_required ) %]
1070
                                    [% IF ( override_required ) %]
1028
                                        <button type="submit" class="btn btn-primary warning"><i class="fa fa-exclamation-triangle "></i> Place holds</button>
1071
                                        <button type="submit" id="hold_multi_btn" class="btn btn-primary warning"><i class="fa fa-exclamation-triangle "></i> Place holds</button>
1029
                                    [% ELSIF ( no_bibs_available ) %]
1072
                                    [% ELSIF ( no_bibs_available ) %]
1030
                                        <button type="submit" class="btn btn-primary btn-disabled" disabled="disabled">Place holds</button>
1073
                                        <button type="submit" id="hold_multi_btn" class="btn btn-primary btn-disabled" disabled="disabled">Place holds</button>
1031
                                    [% ELSIF ( none_available ) %]
1074
                                    [% ELSIF ( none_available ) %]
1032
                                        <button type="submit" class="btn btn-primary">Place holds</button>
1075
                                        <button type="submit" id="hold_multi_btn" class="btn btn-primary">Place holds</button>
1033
                                    [% ELSE %]
1076
                                    [% ELSE %]
1034
                                        <button type="submit" class="btn btn-primary" id="multi_hold_submit">Place holds</button>
1077
                                        <button type="submit" id="hold_multi_btn" class="btn btn-primary" id="multi_hold_submit">Place holds</button>
1035
                                    [% END %]
1078
                                    [% END %]
1036
                                [% ELSE %]
1079
                                [% ELSE %]
1037
                                    [% IF ( override_required ) %]
1080
                                    [% IF ( override_required ) %]
1038
                                        <button type="submit" class="btn btn-primary warning"><i class="fa fa-exclamation-triangle "></i> Place hold</button>
1081
                                        <button type="submit" id="hold_item_btn" class="btn btn-primary warning"><i class="fa fa-exclamation-triangle "></i> Place hold</button>
1039
                                    [% ELSIF ( none_available ) %]
1082
                                    [% ELSIF ( none_available ) %]
1040
                                        <button type="submit" class="btn btn-primary btn-disabled" disabled="disabled">Place hold</button>
1083
                                        <button type="submit" id="hold_item_btn" class="btn btn-primary btn-disabled" disabled="disabled">Place hold</button>
1041
                                    [% ELSE %]
1084
                                    [% ELSE %]
1042
                                        <button type="submit" class="btn btn-primary">Place hold</button>
1085
                                        <button type="submit" id="hold_item_btn" class="btn btn-primary">Place hold</button>
1043
                                    [% END %]
1086
                                    [% END %]
1044
                                [% END %]
1087
                                [% END %]
1045
                            [% END # /IF patron %]
1088
                            [% END # /IF patron %]
1046
                        </fieldset> <!-- /.action -->
1089
                        </fieldset> <!-- /.action -->
1047
                    </form> <!-- /#hold-request-form -->
1090
                    </fieldset> <!-- /.rows -->
1048
                </fieldset> <!-- /.rows -->
1091
                </form> <!-- /#hold-request-form -->
1049
            [% END %]
1092
            [% END %]
1050
1093
1051
            [% UNLESS ( patron ) %]
1094
            [% UNLESS ( patron ) %]
Lines 1363-1383 Link Here
1363
            }
1406
            }
1364
1407
1365
1408
1366
            function ToggleHoldsToPlace() {
1367
                if ( $("#requestany").prop('checked') ) {
1368
                    $("#holds_to_place_count").prop('disabled', false);
1369
                } else {
1370
                    $("#holds_to_place_count").prop('disabled', true);
1371
                }
1372
            }
1373
            ToggleHoldsToPlace();
1409
            ToggleHoldsToPlace();
1374
            $("#requestany").on('change', function(){
1410
            $("#requestany,.requestspecific[name='request'],.requestgrp").on('change', function(){
1375
                ToggleHoldsToPlace();
1411
                ToggleHoldsToPlace();
1376
            });
1412
            });
1377
1413
1378
            [% IF Koha.Preference('UseBranchTransferLimits') %]
1414
            [% IF Koha.Preference('UseBranchTransferLimits') %]
1379
                $("#pickup").on('change', function(){
1415
                $("#pickup,#pickup-next-avail,#pickup-item-group").on('change', function(){
1380
                    var pickup = $("#pickup").val();
1416
                    var pickup = $(this).val();
1381
                    var url = "?pickup=" + pickup;
1417
                    var url = "?pickup=" + pickup;
1382
                    url += "&borrowernumber=" + borrowernumber;
1418
                    url += "&borrowernumber=" + borrowernumber;
1383
                    url += "&biblionumber=" + biblionumbers[0];
1419
                    url += "&biblionumber=" + biblionumbers[0];
Lines 1390-1401 Link Here
1390
                "sDom": '<"top pager"ilf>t',
1426
                "sDom": '<"top pager"ilf>t',
1391
            }));
1427
            }));
1392
1428
1393
            //Override fieldset styling for dataTables search box
1394
            $("div.top.pager").css("margin-left","1em");
1395
            $(".dataTables_filter label").css({
1396
                "width":"auto",
1397
                "margin-right":"0em"
1398
            });
1399
1429
1400
            $("#club-request-form").on("submit", function() {
1430
            $("#club-request-form").on("submit", function() {
1401
                let $t = $(this);
1431
                let $t = $(this);
Lines 1488-1494 Link Here
1488
                }
1518
                }
1489
            });
1519
            });
1490
1520
1491
            $("#pickup").each( function () {
1521
            $("#pickup,#pickup-item-group,#pickup-next-avail").each( function () {
1492
                $(this).pickup_locations_dropdown();
1522
                $(this).pickup_locations_dropdown();
1493
            });
1523
            });
1494
1524
Lines 1497-1502 Link Here
1497
            });
1527
            });
1498
        });
1528
        });
1499
1529
1530
        function ToggleHoldsToPlace() {
1531
            if ( $("#requestany").prop('checked') ) {
1532
                $("#holds_to_place_count, #pickup-next-avail, #itemtype, #hold_any_btn").prop('disabled', false);
1533
                $(".requestspecific,.requestgrp").prop('checked', false);
1534
                $("#hold_item_btn, #hold_grp_btn, #pickup-item-group").prop("disabled", true );
1535
                $("#hold_any_btn").prop("disabled", false );
1536
            } else if( $(".requestspecific").prop('checked') ) {
1537
                $("#holds_to_place_count, #pickup-item-group, #pickup-next-avail #itemtype, #hold_any_btn").prop('disabled', true);
1538
                $("#hold_item_btn").prop("disabled", false );
1539
                $("#hold_any_btn,#hold_grp_btn").prop("disabled", true );
1540
                $("#requestany,.requestgrp").prop('checked', false);
1541
            } else {
1542
                $("#holds_to_place_count, #pickup-next-avail, #itemtype, #hold_any_btn").prop('disabled', true);
1543
                $("#hold_grp_btn, #pickup-item-group").prop("disabled", false );
1544
                $("#hold_any_btn,#hold_item_btn").prop("disabled", true );
1545
                $("#requestany,.requestspecific").prop('checked', false);
1546
            }
1547
        }
1548
1500
        function check( e, table ) {
1549
        function check( e, table ) {
1501
1550
1502
            var msg = "";
1551
            var msg = "";
Lines 1606-1615 Link Here
1606
                });
1655
                });
1607
                if(onechecked == 1){
1656
                if(onechecked == 1){
1608
                    $("#requestany").prop("checked", false);
1657
                    $("#requestany").prop("checked", false);
1609
                    $("#holds_to_place_count").prop('disabled', true);
1658
                    $("#holds_to_place_count,#pickup,#itemtype").prop('disabled', true);
1610
                } else {
1659
                } else {
1611
                    $("#requestany").prop("checked",true);
1660
                    $("#requestany").prop("checked",true);
1612
                    $("#holds_to_place_count").prop('disabled', false);
1661
                    $("#holds_to_place_count,#pickup,#itemtype").prop('disabled', false);
1613
                }
1662
                }
1614
            });
1663
            });
1615
            var prev_rank_request;
1664
            var prev_rank_request;
(-)a/reserve/placerequest.pl (-2 / +2 lines)
Lines 49-54 my $item_group_id = $input->param('item_group_id'); Link Here
49
my $expirationdate = $input->param('expiration_date');
49
my $expirationdate = $input->param('expiration_date');
50
my $itemtype       = $input->param('itemtype') || undef;
50
my $itemtype       = $input->param('itemtype') || undef;
51
my $non_priority   = $input->param('non_priority');
51
my $non_priority   = $input->param('non_priority');
52
my $multi_holds    = $input->param('multi_holds');
52
53
53
my $patron = Koha::Patrons->find( $borrowernumber );
54
my $patron = Koha::Patrons->find( $borrowernumber );
54
55
Lines 103-109 if ( $patron ) { Link Here
103
                }
104
                }
104
            }
105
            }
105
106
106
        } elsif (@biblionumbers > 1) {
107
        } elsif (@biblionumbers > 1 || $multi_holds) {
107
            my $bibinfo = $bibinfos{$biblionumber};
108
            my $bibinfo = $bibinfos{$biblionumber};
108
            if ( $can_override || CanBookBeReserved($patron->borrowernumber, $biblionumber)->{status} eq 'OK' ) {
109
            if ( $can_override || CanBookBeReserved($patron->borrowernumber, $biblionumber)->{status} eq 'OK' ) {
109
                AddReserve(
110
                AddReserve(
110
- 

Return to bug 30579