%PDF- %PDF-
Direktori : /var/www/projetos/suporte.iigd.com.br/templates/pages/tools/ |
Current File : //var/www/projetos/suporte.iigd.com.br/templates/pages/tools/project_task.html.twig |
{# # --------------------------------------------------------------------- # # GLPI - Gestionnaire Libre de Parc Informatique # # http://glpi-project.org # # @copyright 2015-2024 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/>. # # --------------------------------------------------------------------- #} {% extends "generic_show_form.html.twig" %} {% import 'components/form/fields_macros.html.twig' as fields %} {% set form_id = 'project_task_' ~ rand %} {% set content_field_id = 'content_' ~ rand %} {% set params = { 'formoptions': 'id="' ~ form_id ~ '"' } %} {% block form_fields %} {{ fields.dropdownField( 'ProjectTaskTemplate', 'projecttasktemplates_id', item.fields.projecttasktemplates_id, 'ProjectTaskTemplate'|itemtype_name, { 'entity': item.getEntityID(), 'on_change': 'projecttasktemplate_update(this.value)' } ) }} <script> const form = $('#{{ form_id }}'); function projecttasktemplate_update(value) { $.ajax({ url: CFG_GLPI.root_doc + "/ajax/projecttask.php", type: "POST", data: { projecttasktemplates_id: value } }).done(function(data) { // Set simple inputs form.find('input[name=name]').val(data.name); form.find('textarea[name=comment]').val(data.comments); // Set flatpickr dates form.find('input[name=plan_start_date]').parent()[0]._flatpickr.setDate(data.plan_start_date); form.find('input[name=plan_end_date]').parent()[0]._flatpickr.setDate(data.plan_end_date); form.find('input[name=real_start_date]').parent()[0]._flatpickr.setDate(data.real_start_date); form.find('input[name=real_end_date]').parent()[0]._flatpickr.setDate(data.real_end_date); // Set content setRichTextEditorContent("{{ content_field_id }}", data.description); // Set dropdowns and dates form.find('select[name=projecttasks_id]').trigger("setValue", data.projecttasks_id); form.find('select[name=projectstates_id]').trigger("setValue", data.projectstates_id); form.find('select[name=projecttasktypes_id]').trigger("setValue", data.projecttasktypes_id); form.find('select[name=percent_done]').trigger("setValue", data.percent_done); form.find('select[name=is_milestone]').trigger("setValue", data.is_milestone); form.find('select[name=effective_duration]').trigger("setValue", data.effective_duration); form.find('select[name=planned_duration]').trigger("setValue", data.planned_duration); }); } </script> {{ fields.nullField() }} {% set project_link %} <span class="col-form-label d-inline-flex">{{ parent.getLink()|raw }}</span> {% endset %} {{ fields.field( '_project', project_link|raw, parent.getTypeName(), ) }} {% if item.isNewID(id) %} <input type='hidden' name='projects_id' value='{{ projects_id }}'> <input type='hidden' name='is_recursive' value='{{ recursive }}'> {% endif %} {{ fields.dropdownField( 'ProjectTask', 'projecttasks_id', projecttasks_id, __('As child of'), { 'entity': item.getEntityID(), 'condition': {'glpi_projecttasks.projects_id': projects_id}, 'used': [item.getID()], } ) }} {{ fields.textField( 'name', item.fields.name, __('Name'), ) }} {{ fields.nullField() }} {{ fields.dropdownField( 'ProjectState', 'projectstates_id', item.fields.projectstates_id, _x('item', 'State'), ) }} {{ fields.dropdownField( 'ProjectTaskType', 'projecttasktypes_id', item.fields.projecttasktypes_id, _n('Type', 'Types', 1), ) }} {{ fields.dropdownNumberField( 'percent_done', item.fields.percent_done, __('Percent done'), { 'value': item.fields.percent_done, 'min': 0, 'max': 100, 'step': 5, 'unit': '%', }|merge(item.fields.auto_percent_done ? {'specific_tags': {'disabled': 'disabled'}} : {}) ) }} {% set tooltip %} {% do call('Html::showToolTip', [ __('When automatic computation is active, percentage is computed based on the average of all child task percent done.') ]) %} {% endset %} {{ fields.checkboxField( 'auto_percent_done', item.fields.auto_percent_done, __('Automatically calculate'), { 'add_field_html': tooltip, } ) }} <script> form.find("input[name=auto_percent_done]").on('change', function() { $("select[name='percent_done']").prop('disabled', $("input[name='auto_percent_done']").eq(1).prop('checked')); }); </script> {{ fields.dropdownYesNo( 'is_milestone', item.fields.is_milestone, __('Milestone'), ) }} <script> form.find('select[name=is_milestone]').on('change', function() { $('.is_milestone').toggleClass('d-none', Boolean(Number(this.value))); }); </script> {{ fields.nullField() }} <div class="hr-text"> <i class="ti ti-calendar-event"></i> <span>{{ __('Planning') }}</span> </div> {{ fields.datetimeField( 'plan_start_date', item.fields.plan_start_date, __('Planned start date'), ) }} {{ fields.datetimeField( 'real_start_date', item.fields.real_start_date, __('Real start date'), ) }} {{ fields.datetimeField( 'plan_end_date', item.fields.plan_end_date, __('Planned end date'), { 'field_class': 'col-12 col-sm-6 is_milestone ' ~ (item.fields.is_milestone ? 'd-none' : ''), } ) }} {{ fields.datetimeField( 'real_end_date', item.fields.real_end_date, __('Real end date'), { 'field_class': 'col-12 col-sm-6 is_milestone ' ~ (item.fields.is_milestone ? 'd-none' : ''), } ) }} {{ fields.dropdownTimestampField( 'planned_duration', item.fields.planned_duration, __('Planned duration'), { 'min': 0, 'max': 8 * constant('HOUR_TIMESTAMP'), 'addfirstminutes': true, 'inhours': true, 'toadd': duration_dropdown_to_add, 'field_class': 'col-12 col-sm-6 is_milestone ' ~ (item.fields.is_milestone ? 'd-none' : ''), }, ) }} {{ fields.dropdownTimestampField( 'effective_duration', item.fields.effective_duration, __('Effective duration'), { 'min': 0, 'max': 8 * constant('HOUR_TIMESTAMP'), 'addfirstminutes': true, 'inhours': true, 'toadd': duration_dropdown_to_add, 'field_class': 'col-12 col-sm-6 is_milestone ' ~ (item.fields.is_milestone ? 'd-none' : ''), }, ) }} {% if id %} {% set ticket_duration %} <span class="fw-normal col-form-label d-inline-flex ">{{ duration|formatted_duration(false) }}</span> {% endset %} {{ fields.field( '_ticket_duration', ticket_duration, __("Tickets duration"), ) }} {% set total_duration %} <span class="fw-normal col-form-label d-inline-flex ">{{ (duration + item.fields.effective_duration)|formatted_duration(false) }}</span> {% endset %} {{ fields.field( '_total_duration', total_duration, __("Total duration"), ) }} {% endif %} <div class="hr-text"> <i class="ti ti-file-description"></i> <span>{{ __('Details') }}</span> </div> {{ fields.textareaField( 'content', item.fields.content, __("Description"), { 'name': 'content', 'enable_richtext': true, 'id': content_field_id, 'label_class': "col-xxl-2", 'input_class': "col-xxl-10", 'field_class' : "col-12", } ) }} {{ fields.textareaField( 'comment', item.fields.comment, __("Comments"), { 'label_class': "col-xxl-2", 'input_class': "col-xxl-10", 'field_class' : "col-12", } ) }} {% endblock %}