{% import 'components/form/fields_macros.html.twig' as fields %}
{# --- Conexão --- #}

{{ __('Conexão com o Redmine', 'redmine') }}

{{ fields.textField('redmine_url', redmine_url, __('URL do Redmine', 'redmine'), { 'helper': 'https://redmine.exemplo.com.br' }) }} {{ fields.passwordField('api_key', '', __('Chave de API (Admin)', 'redmine'), { 'helper': has_key ? __('Deixe em branco para manter a chave atual', 'redmine') : __('Chave de API de um usuário administrador do Redmine', 'redmine') }) }}
{# --- Valores padrão da issue --- #}

{{ __('Valores padrão da tarefa (issue) Redmine', 'redmine') }}

{% if not has_metadata %}
{{ __('Salve a URL e a chave e clique em "Sincronizar Metadados" para carregar as opções.', 'redmine') }}
{% endif %}
{{ fields.dropdownArrayField('default_tracker_id', default_tracker_id, tracker_options, __('Tipo (Tracker) padrão', 'redmine'), {'display_emptychoice': true}) }} {{ fields.dropdownArrayField('default_priority_id', default_priority_id, priority_options, __('Prioridade padrão', 'redmine'), {'display_emptychoice': true}) }} {{ fields.dropdownArrayField('default_activity_id', default_activity_id, activity_options, __('Atividade padrão (lançamento de tempo)', 'redmine'), {'display_emptychoice': true}) }}
{# --- Autores e observadores --- #}

{{ __('Autores e observadores', 'redmine') }}

{{ __('O autor (técnico atribuído) é adicionado automaticamente como membro do projeto Redmine com o papel abaixo, para permitir a impersonation.', 'redmine') }}
{{ fields.dropdownArrayField('default_role_id', default_role_id, role_options, __('Papel padrão para membros (auto-membership)', 'redmine'), {'display_emptychoice': true}) }} {{ fields.dropdownArrayField('default_watcher_ids', '', redmine_user_options, __('Observadores padrão', 'redmine'), { 'multiple': true, 'values': default_watcher_ids }) }}
{# --- Mapa de status --- #}

{{ __('Mapa de status: Chamado GLPI → Issue Redmine', 'redmine') }}

{% for sid, slabel in glpi_ticket_statuses %} {{ fields.dropdownArrayField('status_map[' ~ sid ~ ']', attribute(status_map, sid)|default(''), status_options, slabel, {'display_emptychoice': true}) }} {% endfor %}
{# --- Mapeamento de usuários (overrides) — fora do form principal --- #}

{{ __('Mapeamento de usuários (GLPI → Redmine)', 'redmine') }}

{% if user_cache_count|default(0) == 0 %}
{{ __('Cache de usuários Redmine VAZIO — os lançamentos sairão como admin. Clique em "Sincronizar Metadados".', 'redmine') }}
{% endif %}
{{ __('Usuários com o mesmo e-mail nos dois sistemas são associados automaticamente. Use a tabela abaixo apenas para exceções (e-mails diferentes).', 'redmine') }}
{{ __('Usuários Redmine em cache:', 'redmine') }} {{ user_cache_count|default(0) }}
{% for m in usermap %} {% else %} {% endfor %}
{{ __('Usuário GLPI', 'redmine') }} {{ __('Usuário Redmine', 'redmine') }} {{ _x('button', 'Delete') }}
{{ m.glpi_name }} {{ m.redmine_name }}
{{ __('Nenhum override cadastrado.', 'redmine') }}
{{ fields.dropdownField('User', 'override_users_id', 0, __('Usuário GLPI', 'redmine'), {'display_emptychoice': true}) }} {{ fields.dropdownArrayField('override_redmine_user_id', '', redmine_user_options, __('Usuário Redmine', 'redmine'), {'display_emptychoice': true}) }}
{# ==================================================================== Templates de Payload (motor 2.0) — editor linha-a-linha + paleta ==================================================================== #}

{{ __('Templates de Payload (avançado)', 'redmine') }}

{{ __('Personalize o JSON enviado ao Redmine em cada operação. Sem template ativo, o plugin usa o comportamento padrão. "Gerar template" cria o ponto de partida equivalente ao padrão + campos obrigatórios descobertos no seu Redmine.', 'redmine') }}
{# ---- Paleta ---- #}
{{ __('Variáveis do GLPI — o "DE"', 'redmine') }}
{{ __('Clique para copiar a tag. Os campos que o Redmine espera (o "PARA") estão em cada operação, à direita.', 'redmine') }}
{% set lastgroup = '' %} {% for v in palette_vars %} {% if v.group != lastgroup %} {% set lastgroup = v.group %}
{{ v.group }}
{% endif %}
{{ v.tag }}
{% endfor %}
{# ---- Editores por operação ---- #}
{% for op, t in templates %}
{{ t.label }} {{ op }} {% if t.is_active %} {{ __('ativo', 'redmine') }} {% else %} {{ __('inativo (usa o padrão)', 'redmine') }} {% endif %}
{% if field_dicts[op] is defined and field_dicts[op] is not empty %}
{{ __('Campos que o Redmine espera — o "PARA" (clique num campo para adicioná-lo)', 'redmine') }}
{% for f in field_dicts[op] %} {% endfor %}
{{ f.path }} {% if f.required %}{{ __('obrigatório', 'redmine') }}{% endif %} {{ f.desc }} {% if f.values is not empty %}
{{ f.values|join(' · ') }}
{% endif %}
{% endif %}
{% endfor %}
{% verbatim %} {% endverbatim %}