Current File : /home/escuelai/public_html/it/templates/components/itilobject/fields_panel.html.twig
{#
 # ---------------------------------------------------------------------
 #
 # GLPI - Gestionnaire Libre de Parc Informatique
 #
 # http://glpi-project.org
 #
 # @copyright 2015-2022 Teclib' and contributors.
 # @copyright 2003-2014 by the INDEPNET Development Team.
 # @licence   https://www.gnu.org/licenses/gpl-3.0.html
 #
 # ---------------------------------------------------------------------
 #
 # LICENSE
 #
 # This file is part of GLPI.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 #
 # ---------------------------------------------------------------------
 #}

{% import 'components/form/fields_macros.html.twig' as fields %}
{% set field_options = {
   'full_width': true,
   'fields_template': itiltemplate,
   'disabled': (not canupdate),
   'add_field_class': (is_expanded ? 'col-sm-6' : ''),
} %}

{% set itil_layout    = user_pref('itil_layout', true) %}
{% set headers_states = itil_layout['items'] %}

<div class="accordion open accordion-flush" id="itil-data">
   {% set main_show = headers_states['item-main'] is not defined or headers_states['item-main'] == "true" ? true : false %}
   <div class="accordion-item">
      <h2 class="accordion-header" id="heading-main-item">
         <button class="accordion-button {{ main_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#item-main" aria-expanded="true" aria-controls="ticket-main">
            <i class="ti ti-alert-circle me-1 item-icon"></i>
            <span class='status-recall'>
                {{ item.getStatusIcon(item.fields['status'])|raw }}
            </span>
            <span class="item-title">
                {{ item.getTypeName(1) }}
            </span>
         </button>
      </h2>
      <div id="item-main" class="accordion-collapse collapse {{ main_show ? "show" : "" }}" aria-labelledby="heading-main-item">
         <div class="accordion-body row m-0 mt-n2">

            {{ call_plugin_hook('pre_item_form', {"item": item, 'options': params}) }}

            {% if is_multi_entities_mode() %}
               {% if item.isNewItem() %}
                  {{ fields.dropdownField(
                     'Entity',
                     'entities_id',
                     item.fields['entities_id'],
                     _n('Entity', 'Entities', 1),
                     field_options|merge({
                        'entity': userentities,
                        'on_change': 'this.form.submit()',
                     })
                  ) }}
               {% else %}
                  {% set entity_html %}
                     {{ call('Entity::badgeCompletename', [
                        get_item_name('Entity', item.fields['entities_id'])
                     ])|raw }}
                  {% endset %}

                  {{ fields.field(
                     '',
                     entity_html,
                     _n('Entity', 'Entities', 1),
                     field_options|merge({
                        'add_field_class': 'd-flex align-items-center',
                     })
                  ) }}
               {% endif %}

               {% if item.isField('is_recursive') %}
                  {{ fields.dropdownYesNo(
                     'is_recursive',
                     item.fields['is_recursive'],
                     __('Child entities'),
                     field_options
                  ) }}
               {% endif %}
            {% endif %}

            {{ fields.datetimeField(
               'date',
               item.fields['date'],
               __('Opening date'),
               field_options
            ) }}

            {% if item.getType() != 'Ticket' %}
               {{ fields.datetimeField(
                  'time_to_resolve',
                  item.fields['time_to_resolve'],
                  __('Time to resolve'),
                  field_options
               ) }}
            {% endif %}

            {% if item.isSolved(true) %}
               {{ fields.datetimeField(
               'solvedate',
               item.fields['solvedate'],
               __('Resolution date'),
               field_options
            ) }}
            {% endif %}

            {% if item.isClosed() %}
               {{ fields.datetimeField(
               'closedate',
               item.fields['closedate'],
               __('Close date'),
               field_options
            ) }}
            {% endif %}

            {% if item.getType() == 'Ticket' %}
               {% set type_params = {
                  'value': item.fields['type'],
                  'width': '100%',
                  'display': false
               }|merge(field_options) %}
               {% if item.isNewItem() %}
                  {% set type_params = type_params|merge({'on_change': 'this.form.submit()',}) %}
               {% else %}
                  {% set type_params = type_params|merge({'on_change': 'reloadCategory()',}) %}
               {% endif %}
               {{ fields.field(
                  'type',
                  item.dropdownType('type', type_params),
                  _n('Type', 'Types', 1),
                  field_options
               ) }}
            {% endif %}

            {% set cat_params = field_options|merge({
               'entity': item.fields['entities_id'],
               'disabled': (not (canupdate or can_requester)),
            }) %}
            {% if item.isNewItem() %}
               {% set cat_params = cat_params|merge({
                  'on_change': 'this.form.submit()',
               }) %}
            {% endif %}
            {% if not item.isNewItem() and itiltemplate.isMandatoryField('itilcategories_id') and item.fields['itilcategories_id'] > 0 %}
               {% set cat_params = cat_params|merge({
                  'display_emptychoice': false
               }) %}
            {% endif %}
            {% if item.getType() == 'Ticket' %}
               {% if item.fields['type'] == constant('Ticket::INCIDENT_TYPE') %}
                  {% set cat_params = cat_params|merge({'condition': {'is_incident': 1}}) %}
               {% elseif item.fields['type'] == constant('Ticket::DEMAND_TYPE') %}
                  {% set cat_params = cat_params|merge({'condition': {'is_request': 1}}) %}
               {% endif %}
            {% elseif item.getType() == 'Problem' %}
               {% set cat_params = cat_params|merge({'condition': {'is_problem': 1}}) %}
            {% elseif item.getType() == 'Change' %}
               {% set cat_params = cat_params|merge({'condition': {'is_change': 1}}) %}
            {% endif %}
            <span id="category_block_{{ rand }}">
            {{ fields.dropdownField(
               'ITILCategory',
               'itilcategories_id',
               item.fields['itilcategories_id'],
               _n('Category', 'Categories', 1),
               cat_params
            ) }}
            </span>

            {{ include('components/itilobject/fields/status.html.twig') }}

            {% if item.isField('requesttypes_id') %}
               {{ fields.dropdownField(
                  'RequestType',
                  'requesttypes_id',
                  item.fields['requesttypes_id'],
                  'RequestType'|itemtype_name,
                  field_options|merge({
                     'condition': {
                        'is_active': 1,
                        'is_ticketheader': 1
                     }
                  })
               ) }}
            {% endif %}

            {{ include('components/itilobject/fields/priority_matrix.html.twig') }}

            {% if item.isField('locations_id') %}
               {{ fields.dropdownField(
                  'Location',
                  'locations_id',
                  item.fields['locations_id'],
                  'Location'|itemtype_name,
                  field_options|merge({
                     'hide_if_no_elements': true
                  })
               ) }}
            {% endif %}

            {% if item.isNewItem() and item.getType() == 'Ticket' %}
               {{ fields.dropdownField(
                  'Contract',
                  '_contracts_id',
                  params['_contracts_id']|default(0),
                  'Contract'|itemtype_name,
                  field_options|merge({
                     'entity': item.fields['entities_id'],
                     'width': '100%',
                     'hide_if_no_elements': true
                  })
               ) }}
            {% endif %}

            {% if item.getType() != 'Ticket' or item.isNewItem() %}
               {{ fields.dropdownTimestampField(
                  'actiontime',
                  item.fields['actiontime'],
                  __('Total duration'),
                  field_options
               ) }}
            {% endif %}

            {{ include('components/itilobject/fields/global_validation.html.twig') }}

            {{ call_plugin_hook('post_item_form', {"item": item, 'options': params}) }}
         </div>
      </div>
   </div>

   {% set actors_show = headers_states['actors'] is not defined or headers_states['actors'] == "true" ? true : false %}
   <div class="accordion-item">
      <h2 class="accordion-header" id="heading-actor" title="{{ __('Actors') }}" data-bs-toggle="tooltip">
         <button class="accordion-button {{ actors_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#actors" aria-expanded="true" aria-controls="actors">
            <i class="ti ti-users me-1"></i>
            <span class="item-title">
                {{ __('Actors') }}
            </span>
            <span class="badge bg-secondary ms-2">
               {{ item.countActors() }}
            </span>
         </button>
      </h2>
      <div id="actors" class="accordion-collapse collapse {{ actors_show ? "show" : "" }}" aria-labelledby="heading-actor">
         <div class="accordion-body accordion-actors row m-0 mt-n2">
            {{ include('components/itilobject/actors/main.html.twig') }}
         </div>
      </div>
   </div>

   {% if item_ticket is defined and item_ticket is not null %}
      {% set items_show = headers_states['items'] is not defined or headers_states['items'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="items-heading" title="{{ _n('Item', 'Items', get_plural_number()) }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ items_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#items" aria-expanded="true" aria-controls="items">
               <i class="ti ti-package me-1"></i>
               <span class="item-title">
                    {{ _n('Item', 'Items', get_plural_number()) }}
                </span>
               <span class="item-counter badge bg-secondary ms-2"></span>
               {% if itiltemplate.isMandatoryField('items_id') %}
                  <span class="required">*</span>
               {% endif %}
            </button>
         </h2>
         <div id="items" class="accordion-collapse collapse {{ items_show ? "show" : "" }}" aria-labelledby="items-heading">
            <div class="accordion-body accordion-items row m-0 mt-n2">
               {{ item_ticket.itemAddForm(item, params|default({})) }}
            </div>
         </div>
      </div>
   {% endif %}

   {% if item.getType() == 'Ticket' %}
      {% set nb_la = (item.fields['slas_id_tto'] > 0 ? 1 : 0) + (item.fields['slas_id_ttr'] > 0 ? 1 : 0) + (item.fields['olas_id_tto'] > 0 ? 1 : 0) + (item.fields['olas_id_ttr'] > 0 ? 1 : 0) %}
      {% set servicelevels_show = headers_states['service-levels'] is defined and headers_states['service-levels'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="service-levels-heading" title="{{ _n('Service level', 'Service levels', get_plural_number()) }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ servicelevels_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#service-levels" aria-expanded="true" aria-controls="service-levels">
               <i class="ti ti-alarm me-1"></i>
               <span class="item-title">
                    {{ _n('Service level', 'Service levels', get_plural_number()) }}
               </span>
               {% if nb_la > 0 %}
                  <span class="badge bg-secondary ms-2">{{ nb_la }}</span>
               {% endif %}
            </button>
         </h2>
         <div id="service-levels" class="accordion-collapse collapse {{ servicelevels_show ? "show" : "" }}" aria-labelledby="service-levels-heading">
            <div class="accordion-body row m-0 mt-n2">
               {{ include('components/itilobject/service_levels.html.twig') }}
            </div>
         </div>
      </div>
   {% endif %}

   {% if item.getType() in ['Problem', 'Change'] %}
      {% set analysis_fields = {
         'impactcontent': __('Impacts'),
         'causecontent': __('Causes'),
         'symptomcontent': __('Symptoms'),
         'controlistcontent': __('Control list'),
      } %}

      {% set nb_analysis = 0 %}
      {% for analysis_field, label in analysis_fields %}
         {% if item.isField(analysis_field) and item.fields[analysis_field]|trim|length > 0 %}
            {% set nb_analysis = nb_analysis + 1 %}
         {% endif %}
      {% endfor %}
      {% set analysis_show = headers_states['analysis'] is defined and headers_states['analysis'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="analysis-heading" title="{{ __("Analysis") }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ analysis_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#analysis" aria-expanded="true" aria-controls="analysis">
               <i class="ti ti-eyeglass me-1"></i>
               <span class="item-title">
                    {{ __("Analysis") }}
               </span>
               {% if nb_analysis > 0 %}
                  <span class="badge bg-secondary ms-2">{{ nb_analysis }}</span>
               {% endif %}
            </button>
         </h2>
         <div id="analysis" class="accordion-collapse collapse {{ analysis_show ? "show" : "" }}" aria-labelledby="analysis-heading">
            <div class="accordion-body row m-0 mt-n2">
               {% for analysis_field, label in analysis_fields %}
                  {% if item.isField(analysis_field) %}
                     {{ fields.textareaField(
                        analysis_field,
                        item.fields[analysis_field],
                        label,
                        field_options|merge({
                           'enable_richtext': true,
                           'is_horizontal': false,
                        })
                     ) }}
                  {% endif %}
               {% endfor %}
            </div>
         </div>
      </div>
   {% endif %}

   {% if item.getType() == 'Change' %}
      {% set plans_fields = {
         'rolloutplancontent': __('Deployment plan'),
         'backoutplancontent': __('Backup plan'),
         'checklistcontent': __('Checklist'),
      } %}

      {% set nb_plans = 0 %}
      {% for plans_field, label in plans_fields %}
         {% if item.isField(plans_field) and item.fields[plans_field]|trim|length > 0 %}
            {% set nb_plans = nb_plans + 1 %}
         {% endif %}
      {% endfor %}

      {% set plans_show = headers_states['plans'] is defined and headers_states['plans'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="plans-heading" title="{{ __("Plans") }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ plans_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#plans" aria-expanded="true" aria-controls="plans">
               <i class="ti ti-checkup-list me-1"></i>
               <span class="item-title">
                    {{ __("Plans") }}
               </span>
               {% if nb_plans > 0 %}
                  <span class="badge bg-secondary ms-2">{{ nb_plans }}</span>
               {% endif %}
            </button>
         </h2>
         <div id="plans" class="accordion-collapse collapse {{ plans_show ? "show" : "" }}" aria-labelledby="plans-heading">
            <div class="accordion-body row m-0 mt-n2">
               {% for plans_field, label in plans_fields %}
                  {% if item.isField(plans_field) %}
                     {{ fields.textareaField(
                        plans_field,
                        item.fields[plans_field],
                        label,
                        field_options|merge({
                           'enable_richtext': true,
                           'is_horizontal': false,
                        })
                     ) }}
                  {% endif %}
               {% endfor %}
            </div>
         </div>
      </div>
   {% endif %}

   {% if ticket_ticket %}
      {% set linked_tickets_show = headers_states['linked_tickets'] is defined and headers_states['linked_tickets'] == "true" ? true : false %}
      <div class="accordion-item">
         <h2 class="accordion-header" id="linked_tickets-heading" title="{{ 'Ticket_Ticket'|itemtype_name(nb_linked_tickets) }}" data-bs-toggle="tooltip">
            <button class="accordion-button {{ linked_tickets_show ? "" : "collapsed" }}" type="button" data-bs-toggle="collapse" data-bs-target="#linked_tickets" aria-expanded="true" aria-controls="linked_tickets">
               <i class="ti ti-link me-1"></i>
               {% set linked_tickets = ticket_ticket.getLinkedTicketsTo(item.fields['id']) %}
               {% set nb_linked_tickets = linked_tickets|length %}
               {% if item.isNewItem() and params['_link']['tickets_id_2'] > 0 %}
                  {% set nb_linked_tickets = 1 %}
               {% endif %}
               <span class="item-title">
                    {{ 'Ticket_Ticket'|itemtype_name(nb_linked_tickets) }}
               </span>
               {% if nb_linked_tickets > 0 %}
                  <span class="badge bg-secondary ms-2">{{ nb_linked_tickets }}</span>
               {% endif %}
            </button>
         </h2>
         <div id="linked_tickets" class="accordion-collapse collapse {{ linked_tickets_show ? "show" : "" }}" aria-labelledby="linked_tickets-heading">
            <div class="accordion-body">
               {{ include('components/itilobject/linked_tickets.html.twig') }}
            </div>
         </div>
      </div>
   {% endif %}

    <span class="d-none d-md-block">
        <button type="button" class="switch-panel-width btn btn-sm btn-square btn-icon btn-ghost-secondary position-absolute bottom-0 start-0 mb-2">
            <i class="fas fa-caret-left"></i>
        </button>
    </span>
</div>

<script type="text/javascript">
$(function() {
   if ($(window).width() < 768) { // medium breakpoint (Todo check if it's possible to get bootstrap breakpoints withint javascript)
      $('#itil-data .accordion-collapse').each(function() {
         $(this).removeClass('show');
      })
   }
});

var reloadCategory = function() {
    var type = $('[name=type]').val();

    $('#category_block_{{ rand }} .field-container').load(
        '{{ path("ajax/dropdownTicketCategories.php") }}',
        {
            'type': type,
            'entity_restrict': {{ item.fields['entities_id'] }},
            'value': {{ item.fields['itilcategories_id'] }},
        }
    );
};
</script>