| Lines 2485-2495
          
      
      
        Link Here | 
        
          | 2485 |  | 2485 |  | 
        
          | 2486 |             }); | 2486 |             }); | 
        
          | 2487 |         [% END %] | 2487 |         [% END %] | 
          
            
              | 2488 |         const can_edit_items_from = [% To.json(can_edit_items_from) | $raw %]; | 2488 |         const can_edit_items_from = [% To.json(can_edit_items_from || {}) | $raw %]; | 
        
          | 2489 |         const item_type_image_locations = [% To.json(item_type_image_locations) | $raw %]; | 2489 |         const item_type_image_locations = [% To.json(item_type_image_locations) | $raw %]; | 
        
          | 2490 |         const av_loc = new Map([% To.json(AuthorisedValues.Get('LOC')) | $raw %].map( av => [av.authorised_value, av.lib])); | 2490 |         const av_loc = new Map([% To.json(AuthorisedValues.Get('LOC')) | $raw %].map( av => [av.authorised_value, av.lib])); | 
            
              |  |  | 2491 |         const av_lost = new Map([% To.json(AuthorisedValues.GetDescriptionsByKohaField({ kohafield => 'items.itemlost' })) | $raw %].map( av => [av.authorised_value, av.lib])); | 
            
              | 2492 |         const av_withdrawn = new Map([% To.json(AuthorisedValues.GetDescriptionsByKohaField({ kohafield => 'items.withdrawn' })) | $raw %].map( av => [av.authorised_value, av.lib])); | 
            
              | 2493 |         const av_damaged = new Map([% To.json(AuthorisedValues.GetDescriptionsByKohaField({ kohafield => 'items.damaged' })) | $raw %].map( av => [av.authorised_value, av.lib])); | 
            
              | 2494 |         const av_not_for_loan= new Map([% To.json(AuthorisedValues.GetDescriptionsByKohaField({ kohafield => 'items.notforloan' })) | $raw %].map( av => [av.authorised_value, av.lib])); | 
            
              | 2495 |         const av_restricted = new Map([% To.json(AuthorisedValues.GetDescriptionsByKohaField({ kohafield => 'items.restricted' })) | $raw %].map( av => [av.authorised_value, av.lib])); | 
        
          | 2491 |         let table_url = "/api/v1/biblios/[% biblio.biblionumber | uri %]/items?"; | 2496 |         let table_url = "/api/v1/biblios/[% biblio.biblionumber | uri %]/items?"; | 
          
            
              | 2492 |         let embed = ["+strings"]; | 2497 |         let embed = ["+strings,checkout,checkout.patron,transfer,first_hold,first_hold.patron,item_type"]; | 
        
          | 2493 |         [% IF Koha.Preference('LocalCoverImages') %] | 2498 |         [% IF Koha.Preference('LocalCoverImages') %] | 
        
          | 2494 |             embed.push('cover_image_ids'); | 2499 |             embed.push('cover_image_ids'); | 
        
          | 2495 |         [% END %] | 2500 |         [% END %] | 
  
    | Lines 2499-2504
          
      
      
        Link Here | 
        
          | 2499 |         [% IF biblio.serial %] | 2504 |         [% IF biblio.serial %] | 
        
          | 2500 |             embed.push('serialitem.serial'); | 2505 |             embed.push('serialitem.serial'); | 
        
          | 2501 |         [% END %] | 2506 |         [% END %] | 
            
              |  |  | 2507 |         [% IF Koha.Preference('UseRecalls') %] | 
            
              | 2508 |             embed.push('recall', 'recall.patron') | 
            
              | 2509 |         [% END %] | 
            
              | 2510 |         embed.push('in_bundle', 'bundle_host'); | 
        
          | 2502 |         let table_settings = [% TablesSettings.GetTableSettings('catalogue', 'detail','holdings_table','json') | $raw %]; | 2511 |         let table_settings = [% TablesSettings.GetTableSettings('catalogue', 'detail','holdings_table','json') | $raw %]; | 
        
          | 2503 |         var items_table = $("#table_items").kohaTable({ | 2512 |         var items_table = $("#table_items").kohaTable({ | 
        
          | 2504 |             ajax: { url: table_url }, | 2513 |             ajax: { url: table_url }, | 
  
    | Lines 2659-2670
          
      
      
        Link Here | 
        
          | 2659 |                 } | 2668 |                 } | 
        
          | 2660 |             }, | 2669 |             }, | 
        
          | 2661 |             { | 2670 |             { | 
          
            
              | 2662 |                 data: "", | 2671 |                 data: "me.lost_status", | 
        
          | 2663 |                 className: "status", | 2672 |                 className: "status", | 
          
            
              | 2664 |                 searchable: false, // FIXME | 2673 |                 searchable: false, // FIXME We are losing the ability to search on the status | 
            
              | 2665 |                 orderable: true, | 2674 |                 orderable: false, | 
        
          | 2666 |                 render: function (data, type, row, meta) { | 2675 |                 render: function (data, type, row, meta) { | 
          
            
              | 2667 |                     return "status"; // FIXME Display status | 2676 |                     let nodes = ""; | 
            
              |  |  | 2677 |                     if ( row.checkout ) { | 
            
              | 2678 |                         nodes += '<span>'; | 
            
              | 2679 |                         if ( row.checkout.onsite_checkout ) { | 
            
              | 2680 |                             if ( can_edit_items_from[row.holding_library_id] ){ | 
            
              | 2681 |                                 let patron_to_html = $patron_to_html(row.checkout.patron); [%# FIXME What about hide_patron_infos_if_needed?? %] | 
            
              | 2682 |                                 nodes += _("Currently in local use by %s").format(patron_to_html); | 
            
              | 2683 |                             } else { | 
            
              | 2684 |                                 nodes += _("Currently in local use"); | 
            
              | 2685 |                             } | 
            
              | 2686 |                         } else { | 
            
              | 2687 |                             nodes += '<span class="datedue">'; | 
            
              | 2688 |                             if ( can_edit_items_from[row.holding_library_id] ){ | 
            
              | 2689 |                                 let patron_to_html = $patron_to_html(row.checkout.patron); [%# FIXME What about hide_patron_infos_if_needed?? %] | 
            
              | 2690 |                                 nodes += _("Checked out to %s").format(patron_to_html); | 
            
              | 2691 |                             } else { | 
            
              | 2692 |                                 nodes += _("Checked out"); | 
            
              | 2693 |                             } | 
            
              | 2694 |                         } | 
            
              | 2695 |                         nodes += ': '; | 
            
              | 2696 |                         nodes += _("due %s").format($date(row.checkout.due_date)); [%# FIXME Missing due date formatting here, $date do not have as_due_date option %] | 
            
              | 2697 |                         nodes += "</span>" | 
            
              | 2698 |                     } else if ( row.transfer ) { | 
            
              | 2699 |                         if ( row.transfer.datesent ) { | 
            
              | 2700 |                             nodes += '<span class="intransit">%s</span>'.format(_("In transit from %s to %s since %s").format(row.transfer.frombranch, row.transfer.tobranch, $date(row.transfer.datesent))); [%# FIXME display library names, not codes, do we use _strings here? %] | 
            
              | 2701 |                         } else { | 
            
              | 2702 |                             nodes += '<span class="transitrequested">%s</span>'.format(_("Transit pending from %s to %s since %s").format(row.transfer.frombranch, row.transfer.tobranch, $date(row.transfer.daterequested))); [%# FIXME See above %] | 
            
              | 2703 |                         } | 
            
              | 2704 |                     } | 
            
              | 2705 |  | 
            
              | 2706 |                     if ( row.lost_status ) { | 
            
              | 2707 |                         let lost_lib = av_lost.get(row.lost_status.toString()) || _("Unavailable (lost or missing"); | 
            
              | 2708 |                         nodes += '<span class="lost">%s</span>'.format(lost_lib); | 
            
              | 2709 |                     } | 
            
              | 2710 |  | 
            
              | 2711 |                     if ( row.withdrawn ) { | 
            
              | 2712 |                         let withdrawn_lib = av_withdrawn.get(row.withdrawn.toString()) || _("Withdrawn"); | 
            
              | 2713 |                         nodes += '<span class="wdn">%s</span>'.format(withdrawn_lib); | 
            
              | 2714 |                     } | 
            
              | 2715 |  | 
            
              | 2716 |                     if ( row.damaged ) { | 
            
              | 2717 |                         let damaged_lib = av_damaged.get(row.damaged.toString()) || _("Damaged"); | 
            
              | 2718 |                         nodes += '<span class="dmg">%s</span>'.format(damaged_lib); | 
            
              | 2719 |                     } | 
            
              | 2720 |  | 
            
              | 2721 |                     if ( row.not_for_loan_status || row.item_type.notforloan ) { | 
            
              | 2722 |                         let not_for_loan_lib = av_not_for_loan.get(row.not_for_loan_status.toString()); | 
            
              | 2723 |                         nodes += '<span class="notforloan">%s'.format(_("Not for loan")) + ( not_for_loan_lib ? '<span class="reason"> (%s)</span>'.format(not_for_loan_lib) : '' ) + '</span>'; | 
            
              | 2724 |                     } | 
            
              | 2725 |  | 
            
              | 2726 |                     if ( row.first_hold ) { | 
            
              | 2727 |                         if ( row.first_hold.waiting_date ) { | 
            
              | 2728 |                             [%# FIXME Display library names instead of codes %] | 
            
              | 2729 |                             [%# FIXME We lost the desk name, we need an additional embed %] | 
            
              | 2730 |                             nodes += '<span class="waitingat">%s</span>'.format(_("Waiting at %s since %s.".format(row.first_hold.pickup_library_id, $date(row.first_hold.waiting_date)))); | 
            
              | 2731 |                             [% IF Koha.Preference('canreservefromotherbranches') %] | 
            
              | 2732 |                                 if ( row.first_hold.waiting_date || row.first_hold.priority == 1 ) { | 
            
              | 2733 |                                     let patron_to_html = $patron_to_html(row.first_hold.patron); [%# FIXME What about hide_patron_infos_if_needed?? %] | 
            
              | 2734 |                                     nodes += ' <span class="heldfor">%s</span>'.format(_("Hold for: %s").format(patron_to_html)); | 
            
              | 2735 |                                 } | 
            
              | 2736 |                             [% END %] | 
            
              | 2737 |                         } else { | 
            
              | 2738 |                             nodes += '<span class="holdonitem">%s</span>'.format(_("There is an item level hold on this item (priority = %s).").format(row.first_hold.priority)); | 
            
              | 2739 |                         } | 
            
              | 2740 |                     } | 
            
              | 2741 |  | 
            
              | 2742 |                     [% IF Koha.Preference('UseRecalls') %] | 
            
              | 2743 |                         if ( row.recall ) { | 
            
              | 2744 |                             if ( row.recall.waiting_date ) { | 
            
              | 2745 |                                 nodes += '<span>%s</span>'.format(_("Waiting at %s since %s").format(row.recall.pickup_library_id, $date(row.recall.waiting_date))); # FIXME Display library names instead of codes | 
            
              | 2746 |                             } else { | 
            
              | 2747 |                                 let patron_to_html = $patron_to_html(row.recall.patron); | 
            
              | 2748 |                                 nodes += '<span>%s</span>'.format(_("recalled by %s on %s").format(patron_to_html, row.recall.created_date)); | 
            
              | 2749 |                             } | 
            
              | 2750 |                         } | 
            
              | 2751 |                     [% END %] | 
            
              | 2752 |  | 
            
              | 2753 |                     if ( ! ( row.not_for_loan_status || row.item_type.notforloan || row.checked_out_date || row.lost_status || row.withdrawn || row.damaged || row.transfer || row.first_hold || row.recall ) ) { | 
            
              | 2754 |                         nodes += ' <span>%s</span>'.format(_("Available")) | 
            
              | 2755 |                     } | 
            
              | 2756 |  | 
            
              | 2757 |                     if ( row.restricted_status ) { | 
            
              | 2758 |                         nodes += '<span class="restricted">(%s)</span>'.format(av_restricted.get(row.restricted_status.toString())); | 
            
              | 2759 |                     } | 
            
              | 2760 |  | 
            
              | 2761 |                     if ( row.in_bundle ) { | 
            
              | 2762 |                         nodes += '<span class="bundled">%s</span>'.format(_("In bundle: %s").format($biblio_to_html(row.bundle_host.biblio, { link: true }))); | 
            
              | 2763 |                     } | 
            
              | 2764 |                     return nodes; | 
        
          | 2668 |                 } | 2765 |                 } | 
        
          | 2669 |             }, | 2766 |             }, | 
        
          | 2670 |             { | 2767 |             { | 
            
              | 2671 | -  |  |  |