templates/role/user/ticket/sheet.html.twig line 1

Open in your IDE?
  1. {% extends 'role/user/index.html.twig' %}
  2. {% block title %}Ticket - Scheda{% endblock %}
  3. {% block pageTitleH1 %}Ticket - Scheda{% endblock %}
  4. {% block pageTitleBreadcrumb %}
  5.     <li class="breadcrumb-item"><a href="{{ path ('user_tickets') }}">Ticket</a></li>
  6.     <li class="breadcrumb-item"><a href="{{ path ('user_ticket_list') }}">Lista</a></li>
  7.     <li class="breadcrumb-item"><a href="javascript:void(0)">Scheda</a></li>
  8. {% endblock %}
  9. {% block subMenuLeft %}
  10.     <li class="nav-item"><a class="nav-link" href="{{ path ('user_ticket_list') }}">Lista ticket</a></li>
  11.     {% if ticket.client != null and app.user.canRead('anagraphic_client') %}
  12.         <li class="nav-item"><a class="nav-link" href="{{ path('user_anagraphic_client_sheet', {'clientId':ticket.client.id}) }}">Scheda cliente</a></li>
  13.     {% endif %}
  14. {% endblock %}
  15. {% block subMenuRight %}
  16.     {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  17.         {% if ticket.canMakeActionByStatus('to_assign,assigned,taken_charge,suspension_request,suspended,wrong,closed') %}
  18.             <li class="nav-item"><a class="nav-link" href="javascript: ticketCancel()">Annulla ticket</a></li>
  19.         {% endif %}
  20.         {% if ticket.canMakeActionByStatus('wrong') and ticket.canDelete('activities') %}
  21.             <li class="nav-item"><a class="nav-link" href="javascript: ticketDelete()">Elimina ticket</a></li>
  22.         {% endif %}
  23.         {% if ticket.canMakeActionByStatus('assigned,taken_charge,suspension_request,suspended') %}
  24.             <li class="nav-item"><a class="nav-link" href="javascript: ticketClose()">Completa ticket</a></li>
  25.         {% endif %}
  26.         {% if ticket.systemError %}
  27.             <li class="nav-item"><a class="nav-link" href="javascript: ticketWrong()">Ticket errato</a></li>
  28.         {% endif %}
  29.         {% if ticket.canMakeActionByStatus('canceled') %}
  30.             <li class="nav-item"><a class="nav-link" href="javascript: ticketRestore()">Ripristina ticket</a></li>
  31.         {% endif %}
  32.         {% if ticket.canMakeActionByStatus('closed') and not ticket.closedOnPortal %}
  33.             <li class="nav-item"><a class="nav-link" href="javascript: ticketClosedPortalConfirm({{ ticket.id }})">Ticket chiuso su portale fornitore</a></li>
  34.         {% endif %}
  35.         {% if ticket.canMakeActionByStatus('closed_portal') %}
  36.             <li class="nav-item"><a class="nav-link" href="javascript: ticketClosedConfirm({{ ticket.id }})">Torna a stato chiuso</a></li>
  37.         {% endif %}
  38.     {% endif %}
  39.     {% if ticket.canMakeActionByStatus('assigned,taken_charge,suspended,canceled,closed,closed_portal') %}
  40.         <li class="nav-item"><a class="nav-link" href="{{ path ('user_ticket_report_print_single', {'ticketId':ticket.id}) }}">Stampa verbale</a></li>
  41.     {% endif %}
  42. {% endblock %}
  43. {% block content %}
  44.     {% set canTicketEditabile = false %}
  45.     {% if app.user.canMakeTicketActions('agency_warehouse', null) and ticket.canMakeActionByStatus('to_assign,assigned,taken_charge,suspension_request,suspended,canceled,wrong') %}
  46.         {% set canTicketEditabile = true %}
  47.     {% endif %}
  48.     <section class="container m_tb_40p">
  49.         <div class="row">
  50.             <div class="col-12 {% if not ticket.systemError %}col-lg-7{% else %}col-lg-6{% endif %}">
  51.                 <h3 class="form_title">Ticket: {{ ticket.number }}</h3>
  52.                 <hr class="m_t_none">
  53.                 <table class="table table-sm responsive_font_size">
  54.                     <tr>
  55.                         <th class="td_w_150p">Numero</th>
  56.                         <td colspan="2">{{ ticket.number }}</td>
  57.                     </tr>
  58.                     <tr>
  59.                         <th>Termid</th>
  60.                         <td colspan="2">{% if ticket.termid != null %}{{ ticket.termid }}{% else %}---{% endif %}</td>
  61.                     </tr>
  62.                     <tr>
  63.                         <th>Stato {{ ticket.supplier }}</th>
  64.                         <td colspan="2">{% if ticket.closedOnPortal %}<i class="icon-circle cursor_p color_gr_dark"></i> Intervento chiuso{% else %}<i class="icon-circle cursor_p color_r"></i> Intervento aperto{% endif %}</td>
  65.                     </tr>
  66.                     <tr>
  67.                         <th>Stato EPOSM</th>
  68.                         <td colspan="2">{{ ticket.displayStatus('string')|raw }}</td>
  69.                     </tr>
  70.                     <tr>
  71.                         <th>Fatturabile</th>
  72.                         <td {% if not app.user.canMakeTicketActions('agency_warehouse', null) %}colspan="2"{% endif %}>{% if ticket.billable %}Sì{% else %}No{% endif %}</td>
  73.                         {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  74.                             <td class="td_action"><a href="javascript: ticketBillable()" data-bs-toggle="tooltip" title="Cambia fatturabile" class="f_right"><img class="icon_action icon_pr" src="{{ asset(icon_exchange) }}"></a></td>
  75.                         {% endif %}
  76.                     </tr>
  77.                     <tr>
  78.                         <th>Indirizzo</th>
  79.                         {% if ticket.canMakeActionByStatus('to_assign,assigned,taken_charge,suspended,closed') %}
  80.                             <td>{% include 'components/twig/display_address.html.twig' with {'type':'ticket', 'obj':ticket} %}</td>
  81.                             <td class="td_action"><a href="javascript: ticketAddressEdit()" data-bs-toggle="tooltip" title="Modifica indirizzo" class="f_right"><img class="icon_action icon_amber" src="{{ asset(icon_edit) }}"></a></td>
  82.                         {% else %}
  83.                             <td colspan="2">{% include 'components/twig/display_address.html.twig' with {'type':'ticket', 'obj':ticket} %}</td>
  84.                         {% endif %}
  85.                     </tr>
  86.                     <tr>
  87.                         <th>Cliente</th>
  88.                         <td colspan="2">{% if ticket.client != null %}<a href="{{ path('user_anagraphic_client_sheet', {'clientId':ticket.client.id}) }}"><u>{{ ticket.client }}</u></a>{% else %}---{% endif %}</td>
  89.                     </tr>
  90.                     <tr>
  91.                         <th>Cliente - Indirizzo</th>
  92.                         <td colspan="2">{% if ticket.client != null %}{% include 'components/twig/display_address.html.twig' with {'type':'client', 'obj':ticket.client} %}{% else %}---{% endif %}</td>
  93.                     </tr>
  94.                     {% if ticket.displayJsonValueByColumn('Prefisso') is not null and ticket.displayJsonValueByColumn('Prefisso') != "" and ticket.displayJsonValueByColumn('Prefisso') != "---" %}
  95.                         <tr>
  96.                             <th>Cliente - Prefisso</th>
  97.                             <td colspan="2">{{ ticket.displayJsonValueByColumn('Prefisso') }}</td>
  98.                         </tr>
  99.                     {% endif %}
  100.                     <tr>
  101.                         <th>Cliente - Telefoni</th>
  102.                         <td>{% if ticket.client != null %}{{ ticket.client.displayPhones|raw }}{% else %}---{% endif %}</td>
  103.                         <td class="td_action"><a href="javascript: clientPhoneCall()" data-bs-toggle="tooltip" title="Chiama" class="f_right"><img class="icon_action icon_green" src="{{ asset(icon_telephone_gr) }}"></a></td>
  104.                     </tr>
  105.                     <tr>
  106.                         <th>Cliente - Orari apertura</th>
  107.                         <td>{% if ticket.client != null %}{{ ticket.client.openings }}{% else %}---{% endif %}</td>
  108.                         <td class="td_action"><a href="javascript: clientEdit()" data-bs-toggle="tooltip" title="Modifica dati" class="f_right"><img class="icon_action icon_amber" src="{{ asset(icon_edit) }}"></a></td>
  109.                     </tr>
  110.                     <tr>
  111.                         <th>Cliente - Chiusure</th>
  112.                         <td>{% if ticket.client != null %}{{ ticket.client.closures }}{% else %}---{% endif %}</td>
  113.                         <td class="td_action"><a href="javascript: clientEdit()" data-bs-toggle="tooltip" title="Modifica dati" class="f_right"><img class="icon_action icon_amber" src="{{ asset(icon_edit) }}"></a></td>
  114.                     </tr>
  115.                     <tr>
  116.                         <th>Cliente - Note</th>
  117.                         <td>{% if ticket.client != null %}{{ ticket.client.notes }}{% else %}---{% endif %}</td>
  118.                         <td class="td_action"><a href="javascript: clientEdit()" data-bs-toggle="tooltip" title="Modifica dati" class="f_right"><img class="icon_action icon_amber" src="{{ asset(icon_edit) }}"></a></td>
  119.                     </tr>
  120.                     <tr>
  121.                         <th>Tecnico</th>
  122.                         {% if ticket.technician != null %}
  123.                             <td colspan="2">{{ ticket.technician }}</td>
  124.                         {% else %}
  125.                             <td colspan="2">---</td>
  126.                         {% endif %}
  127.                     </tr>
  128.                     <tr>
  129.                         <th>Operazione</th>
  130.                         <td {% if not canTicketEditabile %}colspan="2"{% endif %}>{% if ticket.operation != null %}{{ ticket.operation }} {% if ticket.operation.getKeyValueByValue('Dettagli operazione') and ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli operazione')) != null %}<i>({{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli operazione')) }})</i>{% endif %}{% else %}---{% endif %}</td>
  131.                         {% if canTicketEditabile %}
  132.                             <td class="td_action"><a href="javascript: operationEdit()" data-bs-toggle="tooltip" title="Modifica operazione" class="f_right"><img class="icon_action icon_amber" src="{{ asset(icon_edit) }}"></a></td>
  133.                         {% endif %}
  134.                     </tr>
  135.                     {% if ticket.operation.getKeyValueByValue('Dettagli intervento') and ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli intervento')) != null %}
  136.                         <tr>
  137.                             <th>Dettagli intervento</th>
  138.                             <td colspan="2">{{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli intervento')) }}</td>
  139.                         </tr>
  140.                     {% endif %}
  141.                     {% if ticket.operation.getKeyValueByValue('Cluster') and ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Cluster')) != null %}
  142.                         <tr>
  143.                             <th>Cluster</th>
  144.                             <td colspan="2">{{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Cluster')) }}</td>
  145.                         </tr>
  146.                     {% endif %}
  147.                     <tr>
  148.                         <th>Fornitore</th>
  149.                         <td colspan="2">{{ ticket.supplier }}</td>
  150.                     </tr>
  151.                     {% if ticket.displayJsonValueByColumn('SLOT') != null %}
  152.                         <tr>
  153.                             <th>SLOT</th>
  154.                             <td colspan="2">{{ ticket.displayJsonValueByColumn('SLOT') }}</td>
  155.                         </tr>
  156.                     {% endif %}
  157.                     <tr>
  158.                         <th>Ricezione (data/ora)</th>
  159.                         <td colspan="2">{% if ticket.datetimeStart != null %}{{ ticket.datetimeStart|date('d-m-Y --- H:i') }}{% else %}---{% endif %}</td>
  160.                     </tr>
  161.                     <tr>
  162.                         <th>Scadenza (data/ora)</th>
  163.                         <td {% if not canTicketEditabile %}colspan="2"{% endif %}>{% if ticket.datetimeExpiration != null %}{{ ticket.datetimeExpiration|date('d-m-Y --- H:i') }}{% else %}---{% endif %}</td>
  164.                         {% if canTicketEditabile %}
  165.                             <td class="td_action"><a href="javascript: expirationDatetimeEdit()" data-bs-toggle="tooltip" title="Modifica data scadenza" class="f_right"><img class="icon_action icon_amber" src="{{ asset(icon_edit) }}"></a></td>
  166.                         {% endif %}
  167.                     </tr>
  168.                     {% if ticket.canMakeActionByStatus('closed,closed_portal') %}
  169.                         <tr>
  170.                             <th>Chiusura (data/ora)</th>
  171.                             <td colspan="2">{{ ticket.datetimeEnd|date('d-m-Y --- H:i') }}</td>
  172.                         </tr>
  173.                         <tr>
  174.                             <th>Matricole intervento completato</th>
  175.                             <td colspan="2">
  176.                                 {% if ticket.getInterventionCompleted is not null %}
  177.                                     <table class="table table-sm b_none">
  178.                                         {% for act in ticket.getInterventionCompleted.activities %}
  179.                                             <tr>
  180.                                                 {% if act.producerWithdraw != null or act.supplierWithdraw != null %}<td><b>Ritirato</b> --- Produttore: {{ act.productWithdraw.codeProducer|default('') }} {% if act.supplierWithdraw != null %} Fornitore: {{ act.productWithdraw.codeSupplier }}{% endif %}</td>{% endif %}
  181.                                                 {% if act.producerActual != null or act.supplierActual != null %}<td><b>Attuale</b> --- Produttore: {{ act.productActual.codeProducer|default('') }} {% if act.supplierActual != null %} Fornitore: {{ act.productActual.codeSupplier }}{% endif %}</td>{% endif %}
  182.                                                 {% if act.producerInstallation != null or act.supplierInstallation != null %}<td><b>Installato</b> --- Produttore: {{ act.productInstallation.codeProducer|default('') }} {% if act.supplierInstallation != null %} Fornitore: {{ act.productInstallation.codeSupplier }}{% endif %}</td>{% endif %}
  183.                                             </tr>
  184.                                         {% endfor %}
  185.                                     </table>
  186.                                 {% else %}
  187.                                     Nessuna attività di chiusura intervento inserita
  188.                                 {% endif %}
  189.                             </td>
  190.                         </tr>
  191.                     {% endif %}
  192.                     <tr>
  193.                         <th>Lettera di vettura</th>
  194.                         <td {% if not canTicketEditabile %}colspan="2"{% endif %}>{{ ticket.waybill|default('---') }}</td>
  195.                         {% if canTicketEditabile %}
  196.                             <td class="td_action"><a href="javascript: waybillEdit()" data-bs-toggle="tooltip" title="Modifica lettera di vettura" class="f_right"><img class="icon_action icon_amber" src="{{ asset(icon_edit) }}"></a></td>
  197.                         {% endif %}
  198.                     </tr>
  199.                     {% if ticket.systemError %}
  200.                         <tr>
  201.                             <th>Errori registrazione</th>
  202.                             <td colspan="2">{{ ticket.systemErrorDetails }}</td>
  203.                         </tr>
  204.                     {% endif %}
  205.                     {{ displayJsonReport|raw }}
  206.                     <tr>
  207.                         <th>OTP</th>
  208.                         <td colspan="2">{% if ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('OTP')) %}{{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('OTP')) }} {% if ticket.operation.getKeyByValue('OTP').displayMappingExtraValue('display_qr') == 1 %}<a href="javascript:showOtp()" class="button button-3d button-mini button-pr">QR code</a>{% endif %}{% else %}---{% endif %}</td>
  209.                     </tr>
  210.                     <tr>
  211.                         <th>Dati JSON completi</th>
  212.                         <td colspan="2">
  213.                             {% if ticket.json != '[{}]' %}
  214.                                 <a href="javascript:jsonData()" class="button button-3d button-mini button-pr">Visualizza</a>
  215.                             {% else %}
  216.                                 <i class="icon-warning-sign"></i> Ticket importato manualmente, nessun dato ulteriore presente.
  217.                             {% endif %}
  218.                         </td>
  219.                     </tr>
  220.                 </table>
  221.             </div>
  222.             <div class="col-12 {% if not ticket.systemError %}col-lg-5{% else %}col-lg-6{% endif %}">
  223.                 {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  224.                     {# AGENZIA #}
  225.                     <div class="row m_b_30p">
  226.                         <div class="col-12">
  227.                             {% if ticket.systemError %}
  228.                                 {# Errori importazione ticket #}
  229.                                 <h3 class="form_title">Errore rilevato</h3>
  230.                                 <hr class="m_t_none">
  231.                                 <p>{{ ticket.systemErrorDetails|raw }}</p>
  232.                                 {% if ticket.systemErrorSlug == 'supplier' %} {# Errore - Fornitore non identificato Meps/Monetica #}
  233.                                     {{ form_start(formErrorSupplier, {'attr': {'novalidate': 'novalidate'}}) }} 
  234.                                         <div class="form-group">
  235.                                             <label class="form_label">Scegli il fornitore</label>
  236.                                             <div {{ form_errors(formErrorSupplier.supplier) }}>
  237.                                                 {{ form_widget(formErrorSupplier.supplier, {'attr':{'class':'form-control form-select'}}) }}
  238.                                             </div>
  239.                                         </div>
  240.                                         <div class="txt_a_c">
  241.                                             <button type="submit" class="button button-3d button-small button-green">Salva</button>
  242.                                         </div>
  243.                                     {{ form_end(formErrorSupplier) }}
  244.                                 {% elseif ticket.systemErrorSlug == 'operation' %} {# Errore - Operazione non identificata #}
  245.                                     {{ form_start(formErrorOperation, {'attr': {'novalidate': 'novalidate'}}) }} 
  246.                                         <div class="form-group">
  247.                                             <label class="form_label">Scegli l'operazione</label>
  248.                                             <div {{ form_errors(formErrorOperation.operation) }}>
  249.                                                 {{ form_widget(formErrorOperation.operation, {'attr':{'class':'form-control form-select'}}) }}
  250.                                             </div>
  251.                                         </div>
  252.                                         <div class="txt_a_c">
  253.                                             <button type="submit" class="button button-3d button-small button-green">Salva</button>
  254.                                         </div>
  255.                                     {{ form_end(formErrorOperation) }}
  256.                                 {% elseif ticket.systemErrorSlug == 'client' %} {# Errore - Non presente chiave per identificare cliente #}
  257.                                     <a href="{{ path ('user_ticket_redirect_supplier_operation', {'ticketId':ticket.id}) }}" class="button button-3d button-small button-pr f_left">Vai alla scheda operazione</a>
  258.                                     <a href="{{ path ('user_ticket_sheet_update_data', {'ticketId':ticket.id}) }}" class="button button-3d button-small button-pr f_right">Aggiorna dati</a>
  259.                                 {% elseif ticket.systemErrorSlug == 'province_alias' %} {# Errore - Provincia non trovata #}
  260.                                     {{ form_start(formErrorProvince, {'attr': {'novalidate': 'novalidate'}}) }}
  261.                                         <div class="form-group">
  262.                                             <label class="form_label">Provincia*</label>
  263.                                             <div {{ form_errors(formErrorProvince.idProvince) }}>
  264.                                                 {{ form_widget(formErrorProvince.idProvince, {'attr':{'class':'form-control form-select'}}) }}
  265.                                             </div>
  266.                                         </div>
  267.                                         <div class="txt_a_c">
  268.                                             <button type="submit" class="button button-3d button-small button-green">Salva</button>
  269.                                         </div>
  270.                                     {{ form_end(formErrorProvince) }}
  271.                                 {% elseif ticket.systemErrorSlug == 'city_alias' %} {# Errore - Città non trovata #}
  272.                                     <a href="{{ path ('user_ticket_redirect_alias_city', {'ticketId':ticket.id}) }}" class="button button-3d button-small button-pr f_left">Vai ad alias città</a>
  273.                                     <a href="{{ path ('user_ticket_sheet_update_data', {'ticketId':ticket.id}) }}" class="button button-3d button-small button-pr f_right">Aggiorna dati</a>
  274.                                 {% elseif ticket.systemErrorSlug == 'city' %} {# Errore - Provincia non coperta dall'agenzia #}
  275.                                     {{ form_start(formErrorAddress, {'attr': {'novalidate': 'novalidate'}}) }}
  276.                                         <div class="form-group">
  277.                                             <label class="form_label">Indirizzo</label>
  278.                                             <div {{ form_errors(formErrorAddress.address) }}>
  279.                                                 {{ form_widget(formErrorAddress.address) }}
  280.                                             </div>
  281.                                         </div>
  282.                                         <div class="row">
  283.                                             <div class="col-12 col-md-8 form-group">
  284.                                                 <label class="form_label">Città*</label>
  285.                                                 <div {{ form_errors(formErrorAddress.cityId) }}>
  286.                                                     {{ form_widget(formErrorAddress.cityName, {'attr':{'onClick':'javascript: cityModal1()', 'readonly':true}}) }}
  287.                                                     {{ form_widget(formErrorAddress.cityId, {'attr':{'class':'display_n'}}) }}
  288.                                                 </div>
  289.                                             </div>
  290.                                             <div class="col-12 col-md-4 form-group">
  291.                                                 <label class="form_label">CAP*</label>
  292.                                                 <div {{ form_errors(formErrorAddress.zip) }}>
  293.                                                     <select id="form_error_address_select_zips" class="form-control form-select" readonly onChange="javascript: zipSet1()"><option value=""></option></select>
  294.                                                     {{ form_widget(formErrorAddress.zip, {'attr':{'class':'display_n'}}) }}
  295.                                                 </div>
  296.                                             </div>
  297.                                         </div>
  298.                                         <div class="txt_a_c">
  299.                                             <button type="submit" class="button button-3d button-small button-green">Salva</button>
  300.                                         </div>
  301.                                     {{ form_end(formErrorAddress) }}
  302.                                 {% elseif ticket.systemErrorSlug == 'key_mapping' %} {# Errore - Chiavi mappatura non trovata #}
  303.                                     {{ form_start(formErrorKeyMapping, {'attr': {'novalidate': 'novalidate'}}) }}
  304.                                         <label class="form_label">Chiavi mappatura</label>
  305.                                         <table class="table table-sm b_none" id="collector">
  306.                                             <tr>
  307.                                                 <th><label class="form_label m_b_none">Obb</label></th>
  308.                                                 <th><label class="form_label m_b_none">Campo ticket</label></th>
  309.                                                 <th><label class="form_label m_b_none">Chiave mappatura</label></th>
  310.                                                 <th><label class="form_label m_b_none">Extra</label></th>
  311.                                             </tr>
  312.                                             {% for km in formErrorKeyMapping.keyMappings %}
  313.                                                 <tr>
  314.                                                     <td class="txt_a_c">{% if km.keyRequired.vars.value %}Sì{% else %}No{% endif %}</td>
  315.                                                     <td>{{ km.ticketColumn.vars.value }}</td>
  316.                                                     <td><div {{ form_errors(km.mappingValue) }}>{{ form_widget(km.mappingValue) }}</div></td>
  317.                                                     <td><div {{ form_errors(km.mappingExtra) }}>{{ form_widget(km.mappingExtra) }}</div></td>
  318.                                                 </tr>
  319.                                                 {{ form_widget(km.keyRequired, {'attr':{'class':'display_n'}}) }}
  320.                                                 {{ form_widget(km.ticketColumn, {'attr':{'class':'display_n'}}) }}
  321.                                             {% endfor %}
  322.                                         </table>
  323.                                         <div class="txt_a_c">
  324.                                             <button type="submit" class="button button-3d button-small button-green">Salva</button>
  325.                                         </div>
  326.                                     {{ form_end(formErrorKeyMapping) }}
  327.                                 {% elseif ticket.systemErrorSlug == 'tariff' %} {# Errore - Tariffa operazione di quella provincia/citta/cap non trovata #}
  328.                                     <a href="{{ path ('user_ticket_redirect_supplier_operation', {'ticketId':ticket.id}) }}" class="button button-3d button-small button-pr f_left">Vai alla scheda operazione</a>
  329.                                     <a href="{{ path ('user_ticket_sheet_update_data', {'ticketId':ticket.id}) }}" class="button button-3d button-small button-pr f_right">Aggiorna dati</a>
  330.                                 {% elseif ticket.systemErrorSlug == 'tariff-uav' %} {# Errore - Tariffa UAV fornitore non trovata #}
  331.                                     <a href="{{ path ('user_anagraphic_supplier_sheet', {'supplierId':ticket.supplier.id}) }}" class="button button-3d button-small button-pr f_left">Vai alla scheda fornitore</a>
  332.                                     <a href="{{ path ('user_ticket_sheet_update_data', {'ticketId':ticket.id}) }}" class="button button-3d button-small button-pr f_right">Aggiorna dati</a>
  333.                                 {% endif %}
  334.                             {% else %}
  335.                                 <div class="row">
  336.                                     <div class="col-12 m_b_20p">
  337.                                         <h3 class="form_title">Tariffa applicata
  338.                                             {% if ticket.canMakeActionByStatus('assigned,taken_charge,closed') %}
  339.                                                 <a href="javascript: operationTariffAmountChange()" class="button button-3d button-mini button-amber f_right m_b_none">Modifica tariffa</a>
  340.                                             {% endif %}
  341.                                         </h3>
  342.                                         <hr class="m_t_none">
  343.                                         <table class="table table-sm b_none m_b_none font_14">
  344.                                             <tr>
  345.                                                 <th class="td_w_150p">Operazione</th>
  346.                                                 <td>{% if ticket.operationTariffAmount != null %}{{ ticket.operationTariffAmount.tariff.operation }}{% endif %}</td>
  347.                                             </tr>
  348.                                             <tr>
  349.                                                 <th>Area</th>
  350.                                                 <td>{% if ticket.operationTariffAmount != null %}{{ ticket.operationTariffAmount.tariff.idProvince|translate_province }} - {% if ticket.operationTariffAmount.tariff.allZip %}Tutti i CAP{% else %}{{ ticket.operationTariffAmount.tariff.displayFirstThreeZips }}{% endif %}{% endif %}</td>
  351.                                             </tr>
  352.                                             <tr>
  353.                                                 <th>Tariffa</th>
  354.                                                 <td>{% if ticket.operationTariffAmount != null %}{{ ticket.operationTariffAmount.value }}{% endif %}</td>
  355.                                             </tr>
  356.                                             {% if ticket.technician != null %}
  357.                                                 <tr>
  358.                                                     <th>Tecnico</th>
  359.                                                     <td>{{ ticket.technician }}</td>
  360.                                                 </tr>
  361.                                             {% endif %}
  362.                                         </table>
  363.                                     </div>
  364.                                     <div class="col-12">
  365.                                         <h3 class="form_title">Azioni</h4>
  366.                                         <hr class="m_t_none">
  367.                                         {# Azioni in base allo stato #}
  368.                                         {% if ticket.canMakeActionByStatus('to_assign') %}
  369.                                             {# ASSEGNA TECNICO #}
  370.                                             <h4 class="form_title">Assegna tecnico</h4>
  371.                                             {% if technicians|length > 0 %}
  372.                                                 <table class="table table-sm table-hover m_b_none responsive_font_size">
  373.                                                     <thead>
  374.                                                         <tr>
  375.                                                             <th>Tecnico</th>
  376.                                                             <th class="txt_a_c">Del fornitore</th>
  377.                                                             <th class="txt_a_c">In copertura</th>
  378.                                                             <th class="txt_a_c">In corso/Sospesi</th>
  379.                                                             <th></th>
  380.                                                         </tr>
  381.                                                     </thead>
  382.                                                     <tbody>
  383.                                                         {% for t in technicians|sort((a, b) => a[0].profile.surname <=> b[0].profile.surname) %}
  384.                                                             <tr>
  385.                                                                 <td>{{ t[0] }}</td>
  386.                                                                 <td class="txt_a_c">{% if t[1] %}<i class="icon-circle color_gr" data-bs-toggle="tooltip" title="Sì"></i>{% else %}<i class="icon-circle color_r" data-bs-toggle="tooltip" title="No"></i>{% endif %}</td>
  387.                                                                 <td class="txt_a_c">{% if t[2] %}<i class="icon-circle color_gr" data-bs-toggle="tooltip" title="Sì"></i>{% else %}<i class="icon-circle color_r" data-bs-toggle="tooltip" title="No"></i>{% endif %}</td>
  388.                                                                 <td class="txt_a_c">{{ t[0].countTicketsUnderManagement('actual') }} / {{ t[0].countTicketsUnderManagement('suspension') }}</td>
  389.                                                                 <td class="td_action"><a href="javascript: technicianAssign({{ t[0].id }})"><img class="icon_green" data-bs-toggle="tooltip" title="Assegna" src="{{ asset(icon_read) }}"></a></td>
  390.                                                             </tr>
  391.                                                         {% endfor %}
  392.                                                     </tbody>
  393.                                                 </table>
  394.                                             {% else %}
  395.                                                 <div class="style-msg alertmsg m_b_none"><div class="sb-msg"><i class="icon-warning-sign"></i><strong>Attenzione:</strong> L'elenco dei tecnici assegnabili Ã¨ vuoto, verifica che il ticket abbia un CAP di copertura e, in caso negativo, modifica l'indirizzo. Potrebbe essere sufficiente anche cliccare sul pulsante modifica e subito su conferma se Ã¨ già impostata la città corretta.</div></div>
  396.                                             {% endif %}
  397.                                         {% elseif ticket.canMakeActionByStatus('assigned,taken_charge') %}
  398.                                             {% set interventionId = null %}
  399.                                             {% for int in ticket.interventions %}
  400.                                                 {% if int.outcome is null %}
  401.                                                     {% set interventionId = int.id %}
  402.                                                 {% endif %}
  403.                                             {% endfor %}
  404.                                             <div id="btn_technician_change" class="col-md-4 txt_a_c">
  405.                                                 {% if interventionId == null %}
  406.                                                     <a href="javascript: technicianChangeShow()"><img src="{{ asset(icon_exchange) }}" class="sheet_img b_c_amber"/></a><br>
  407.                                                 {% else %}
  408.                                                     <a href="javascript: void(0)" data-bs-toggle="tooltip" title="Impossibile cambiare tecnico con un intervento incompleto!"><img src="{{ asset(icon_exchange) }}" class="sheet_img b_c_grey"/></a><br>
  409.                                                 {% endif %}
  410.                                                 <label class="l_s_none">Cambia tecnico</label>
  411.                                             </div>
  412.                                             <div class="row" id="row_technician_change" style="display: none">
  413.                                                 <div class="col-12">
  414.                                                     <h4 class="form_title">Cambia tecnico</h4>
  415.                                                     <table class="table table-sm table-hover m_b_none responsive_font_size">
  416.                                                         <thead>
  417.                                                             <tr>
  418.                                                                 <th>Tecnico</th>
  419.                                                                 <th class="txt_a_c">Del fornitore</th>
  420.                                                                 <th class="txt_a_c">In copertura</th>
  421.                                                                 <th class="txt_a_c">In corso/Sospesi</th>
  422.                                                                 <th></th>
  423.                                                             </tr>
  424.                                                         </thead>
  425.                                                         <tbody>
  426.                                                             {% for t in technicians|sort((a, b) => a[0].profile.surname <=> b[0].profile.surname) %}
  427.                                                                 {% if ticket.technician is not null and ticket.technician.id != t[0].id %}
  428.                                                                     <tr>
  429.                                                                         <td>{{ t[0] }}</td>
  430.                                                                         <td class="txt_a_c">{% if t[1] %}<i class="icon-circle color_gr" data-bs-toggle="tooltip" title="Sì"></i>{% else %}<i class="icon-circle color_r" data-bs-toggle="tooltip" title="No"></i>{% endif %}</td>
  431.                                                                         <td class="txt_a_c">{% if t[2] %}<i class="icon-circle color_gr" data-bs-toggle="tooltip" title="Sì"></i>{% else %}<i class="icon-circle color_r" data-bs-toggle="tooltip" title="No"></i>{% endif %}</td>
  432.                                                                         <td class="txt_a_c">{{ t[0].countTicketsUnderManagement('actual') }} / {{ t[0].countTicketsUnderManagement('suspension') }}</td>
  433.                                                                         <td class="td_action"><a href="javascript: technicianAssign({{ t[0].id }})"><img class="icon_green" data-bs-toggle="tooltip" title="Assegna" src="{{ asset(icon_read) }}"></a></td>
  434.                                                                     </tr>
  435.                                                                 {% endif %}
  436.                                                             {% endfor %}
  437.                                                         </tbody>
  438.                                                     </table>
  439.                                                 </div>
  440.                                             </div>
  441.                                             <input type="hidden" id="row_technician_change_val" value="0">
  442.                                         {% elseif ticket.canMakeActionByStatus('suspension_request') %}
  443.                                             {% if not ticket.getActualSuspension.managed %}
  444.                                                 <h4 class="form_title">Richiesta sospensione</h4>
  445.                                                 {{ ticket.getActualSuspension.displaySuspensionTable|raw }}
  446.                                                 <div class="row m_t_20p txt_a_c">
  447.                                                     <div class="col-md-6">
  448.                                                         <a href="javascript: ticketSuspensionApprove({{ ticket.getActualSuspension.id }}, 1)"><img src="{{ asset(icon_thumb_up) }}" class="sheet_img b_c_green"/></a><br>
  449.                                                         <label class="l_s_none">Approva</label>
  450.                                                     </div>
  451.                                                     <div class="col-md-6">
  452.                                                         <a href="javascript: ticketSuspensionApprove({{ ticket.getActualSuspension.id }}, 0)"><img src="{{ asset(icon_thumb_down) }}" class="sheet_img b_c_red"/></a><br>
  453.                                                         <label class="l_s_none">Non approvare</label>
  454.                                                     </div>
  455.                                                 </div>
  456.                                             {% else %}
  457.                                                 <h4 class="form_title">Richiesta sospensione - Non approvata</h4>
  458.                                                 <label class="l_s_none m_b_none">Motivazione</label>
  459.                                                 <p class="m_b_none">{{ ticket.getActualSuspension.refuseMotivation }}</p>
  460.                                             {% endif %}
  461.                                         {% elseif ticket.canMakeActionByStatus('suspended') %}
  462.                                             {# SOSPESO #}
  463.                                             <h4 class="form_title">Ticket sospeso</h4>
  464.                                             {{ ticket.getActualSuspension.displaySuspensionTable|raw }}
  465.                                             <div class="row m_t_20p">
  466.                                                 <div class="col-12 col-md-6 txt_a_c">
  467.                                                     <a href="javascript: ticketSuspensionEdit({{ ticket.getActualSuspension.id }})" class="button button-3d button-mini button-amber">Modifica data/ora</a>
  468.                                                 </div>
  469.                                                 <div class="col-12 col-md-6 txt_a_c">
  470.                                                     <a href="javascript: ticketSuspensionUnlock({{ ticket.getActualSuspension.id }})" class="button button-3d button-mini button-green">Sblocca sospensione</a>
  471.                                                 </div>
  472.                                             </div>
  473.                                             <input type="hidden" id="suspension_date_from" value="{{ ticket.getActualSuspension.datetimeFrom|date('d-m-Y') }}">
  474.                                             <input type="hidden" id="suspension_time_from_hour" value="{{ ticket.getActualSuspension.datetimeFrom|date('H') }}">
  475.                                             <input type="hidden" id="suspension_time_from_minute" value="{{ ticket.getActualSuspension.datetimeFrom|date('i') }}">
  476.                                             <input type="hidden" id="suspension_date_to" value="{% if ticket.getActualSuspension.datetimeTo != null %}{{ ticket.getActualSuspension.datetimeTo|date('d-m-Y') }}{% endif %}">
  477.                                             <input type="hidden" id="suspension_time_to_hour" value="{% if ticket.getActualSuspension.datetimeTo != null %}{{ ticket.getActualSuspension.datetimeTo|date('H') }}{% endif %}">
  478.                                             <input type="hidden" id="suspension_time_to_minute" value="{% if ticket.getActualSuspension.datetimeTo != null %}{{ ticket.getActualSuspension.datetimeTo|date('i') }}{% endif %}">
  479.                                         {% else %}
  480.                                             <div class="style-msg infomsg m_b_none"><div class="sb-msg"><i class="icon-info-sign"></i><strong>Info:</strong> Nessuna azione disponibile in questa fase</div></div>
  481.                                         {% endif %}
  482.                                     </div>
  483.                                 </div>
  484.                             {% endif %}
  485.                         </div>
  486.                     </div>
  487.                 {% endif %}
  488.                 {% if app.user.canMakeTicketActions('technician', settingBackOffice) %}
  489.                     {# TECNICO INTERNO / TECNICO P. IVA / AGENZIA CON SETTING BACKOFFICE_MANAGE = 1 #}
  490.                     <h3 class="form_title">Azioni {% if app.user.canMakeTicketActions('only_backoffice', settingBackOffice) %}(Tecnico/Backoffice){% endif %}</h4>
  491.                     <hr class="m_t_none">
  492.                     {% if ticket.operationTariffAmount == null %}
  493.                         {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  494.                             <h4 class="form_title">Errore rilevato - Seleziona tariffa</h4>
  495.                             <div class="style-msg errormsg">
  496.                                 <div class="sb-msg responsive_font_size"><i class="icon-remove"></i><strong>Attenzione!</strong> Prima di poter completare il ticket inserendo gli interventi Ã¨ necessario selezionare la tariffa da applicare. Inseriscila tramite il bottone "modifica tariffa" in alto nella sezione "tariffa applicata".</div>
  497.                             </div>
  498.                         {% else %}
  499.                             <h4 class="form_title">Errore rilevato</h4>
  500.                             <div class="style-msg errormsg">
  501.                                 <div class="sb-msg responsive_font_size"><i class="icon-remove"></i><strong>Attenzione!</strong> Impossibile completare il ticket. Riporta l'errore alla sede centrale.</div>
  502.                             </div>
  503.                         {% endif %}
  504.                     {% else %}
  505.                         {% if ticket.canMakeActionByStatus('assigned') %}
  506.                             <div class="row txt_a_c">
  507.                                 {% if ticket.getActualSuspension != null and ticket.getActualSuspension.managed and ticket.getActualSuspension.refuseMotivation != null %}
  508.                                     <h4 class="form_title">Richiesta sospensione - Non approvata</h4>
  509.                                     <label class="l_s_none">Motivazione</label>
  510.                                     <p>{{ ticket.getActualSuspension.refuseMotivation }}</p>
  511.                                 {% endif %}
  512.                                 <div class="col-md-4">
  513.                                     <a href="{{ path ('user_ticket_take_charge_single', {'ticketId':ticket.id}) }}"><img src="{{ asset(icon_ticket_completed) }}" class="sheet_img b_c_green"/></a><br>
  514.                                     <label class="l_s_none">Prendi in carico</label>
  515.                                 </div>
  516.                             </div>
  517.                         {% elseif ticket.canMakeActionByStatus('taken_charge') %}
  518.                             {% set interventionId = null %}
  519.                             {% for int in ticket.interventions %}
  520.                                 {% if int.outcome is null %}
  521.                                     {% set interventionId = int.id %}
  522.                                 {% endif %}
  523.                             {% endfor %}
  524.                             {% if interventionId is null %}
  525.                                 <h4 class="form_title">Inserisci intervento</h4>
  526.                                 <div class="row txt_a_c">
  527.                                     <div class="col-4">
  528.                                         <a href="javascript: ticketStatus('completed')"><img src="{{ asset(icon_ticket_completed) }}" class="sheet_img b_c_green"/></a><br>
  529.                                         <label class="l_s_none">Chiudi ticket</label>
  530.                                     </div>
  531.                                     <div class="col-4">
  532.                                         <a href="javascript: ticketStatus('suspended')"><img src="{{ asset(icon_ticket_suspended) }}" class="sheet_img b_c_amber"/></a><br>
  533.                                         <label class="l_s_none">Sospendi ticket</label>
  534.                                     </div>
  535.                                     <div class="col-4">
  536.                                         <a href="javascript: ticketStatus('empty')"><img src="{{ asset(icon_ticket_empty) }}" class="sheet_img b_c_red"/></a><br>
  537.                                         <label class="l_s_none">Inserisci UAV</label>
  538.                                     </div>
  539.                                 </div>
  540.                             {% else %}
  541.                                 <h4 class="form_title">Intervento incompleto</h4>
  542.                                 <div class="row txt_a_c">
  543.                                     <div class="col-md-4 txt_a_c">
  544.                                         <a href="{{ path ('user_ticket_intervention_edit', {'interventionId':interventionId}) }}"><img src="{{ asset(icon_correction) }}" class="sheet_img b_c_green"/></a><br>
  545.                                         <label class="l_s_none">Riprendi</label>
  546.                                     </div>
  547.                                     <div class="col-md-4 txt_a_c">
  548.                                         <a href="javascript: interventionDelete({{ interventionId }})"><img src="{{ asset(icon_delete) }}" class="sheet_img b_c_red"/></a><br>
  549.                                         <label class="l_s_none">Elimina</label>
  550.                                     </div>
  551.                                 </div>
  552.                             {% endif %}
  553.                         {% elseif ticket.canMakeActionByStatus('suspension_request') %}
  554.                             {% if not ticket.getActualSuspension.managed %}
  555.                                 <h4 class="form_title">Richiesta sospensione - In attesa di approvazione</h4>
  556.                                 {{ ticket.getActualSuspension.displaySuspensionTable|raw }}
  557.                             {% endif %}
  558.                         {% elseif ticket.canMakeActionByStatus('suspended') %}
  559.                             <h4 class="form_title">Ticket sospeso</h4>
  560.                             {% if ticket.getActualSuspension.unlockCausal != null %}
  561.                                 <label class="l_s_none m_b_none">Causale</label>
  562.                                 <p class="m_b_none">{{ ticket.getActualSuspension.unlockCausal }}</p>
  563.                             {% endif %}
  564.                             {{ ticket.getActualSuspension.displaySuspensionTable|raw }}
  565.                             {% if settingTechUnlockSuspension.value %}
  566.                                 <div class="row m_t_20p">
  567.                                     <div class="col-12 txt_a_c">
  568.                                         <a href="javascript: ticketSuspensionUnlock({{ ticket.getActualSuspension.id }})" class="button button-3d button-mini button-green">Sblocca sospensione</a>
  569.                                     </div>
  570.                                 </div>
  571.                             {% endif %}
  572.                         {% else %}
  573.                             <div class="style-msg infomsg m_b_none"><div class="sb-msg"><i class="icon-info-sign"></i><strong>Info:</strong> Nessuna azione disponibile in questa fase</div></div>
  574.                         {% endif %}
  575.                     {% endif %}
  576.                 {% endif %}
  577.             </div>
  578.             {# Interventi #}
  579.             {% if ticket.interventions|length > 0 %}
  580.                 <div class="col-12 m_t_20p">
  581.                     <h3 class="form_title">Interventi{% if not ticket.billable %} <i class="icon-warning-sign font_20 color_r" data-bs-toggle="tooltip" title="Ticket non fatturabile"></i>{% endif %}</h3>
  582.                     <hr class="m_t_none">
  583.                 </div>
  584.                 <div class="col-12 overflow_a">
  585.                     <table class="table table-sm responsive_font_size">
  586.                         <thead>
  587.                             <tr>
  588.                                 <th class="td_w_40p"></th>
  589.                                 <th class="td_w_150p">Data/ora chiusura</th>
  590.                                 <th class="td_w_300p">Esito</th>
  591.                                 <th class="td_w_150p">Tecnico</th>
  592.                                 <th class="td_w_150p">Operatore</th>
  593.                                 <th class="td_w_60p txt_a_c">Fatturabile</th>
  594.                                 <th class="td_w_100p txt_a_c">Mese fatt</th>
  595.                                 <th class="td_w_100p txt_a_c">% fuori SLA</th>
  596.                                 <th colspan="100%"></th>
  597.                             </tr>
  598.                         </thead>
  599.                         <tbody>
  600.                             {% for intervention in ticket.interventions|sort((a, b) => b.datetime <=> a.datetime) %}
  601.                                 <input type="hidden" id="ticket_sla_{{ intervention.id }}" value="{{ intervention.slaOutboundPercentage }}">
  602.                                 <input type="hidden" id="ticket_date_billing_{{ intervention.id }}" value="{% if intervention.datetimeBilling != null %}{{ intervention.datetimeBilling|date('m-Y') }}{% endif %}">
  603.                                 <input type="hidden" id="intervention_billable_{{ intervention.id }}" value="{{ intervention.billable }}">
  604.                                 <input type="hidden" id="int_motivation_{{ intervention.id }}" value="{{ intervention.motivation }}">
  605.                                 {% if intervention.suspension != null and intervention.suspension.approved and intervention.suspension.unlocked %}
  606.                                     <tr class="bg_lg">
  607.                                         <td></td>
  608.                                         <td>{{ intervention.suspension.datetimeTo|date('d-m-Y H:i') }}</td>
  609.                                         <td colspan="100">Sbloccato - {{ intervention.suspension.unlockCausal }}</td>
  610.                                     </tr>
  611.                                 {% endif %}
  612.                                 <tr 
  613.                                     {% if intervention.suspension != null %}
  614.                                         {% if not intervention.suspension.managed %}
  615.                                             class="bg_r_m" data-bs-toggle="tooltip" title="Sospensione non gestita"
  616.                                         {% elseif not intervention.suspension.approved %}
  617.                                             class="bg_r_h" data-bs-toggle="tooltip" title="Sospensione non approvata"
  618.                                         {% endif %}
  619.                                     {% endif %}
  620.                                     {% if intervention.outcomeType.slug == 'completed' and intervention.outcome != null and intervention.activities|length == 0 %}
  621.                                         class="bg_r_h" data-bs-toggle="tooltip" title="Intervento senza attività"
  622.                                     {% endif %}
  623.                                     >
  624.                                     <td><a href="javascript: interventionSheet({{ intervention.id }})"><img src="{{ asset (icon_sheet) }}" class="icon_action icon_pr" data-bs-toggle="tooltip" title="Scheda"></a></td>
  625.                                     <td id="int_date_{{ intervention.id }}">{{ intervention.datetime|date('d-m-Y H:i') }}</td>
  626.                                     <td id="int_outcome_{{ intervention.id }}">{% if intervention.outcome != null %}{{ intervention.outcomeType.value }} - {{ intervention.outcome }}{% else %}Intervento non completato{% endif %}</td>
  627.                                     <td id="int_technician_{{ intervention.id }}">{{ intervention.technician|default('---') }}</td>
  628.                                     <td id="int_operator_{{ intervention.id }}">{{ intervention.operator|default('---') }}</td>
  629.                                     <td id="int_billable_{{ intervention.id }}" class="txt_a_c">{% if intervention.billable %}Sì{% else %}No{% endif %}</td>
  630.                                     <td id="int_datetime_billing_{{ intervention.id }}" class="txt_a_c">{% if intervention.datetimeBilling != null %}{{ intervention.datetimeBilling|date('m-Y') }}{% endif %}</td>
  631.                                     <td id="int_sla_{{ intervention.id }}" class="txt_a_c">{% if intervention.slaOutboundPercentage != null %}{{ intervention.slaOutboundPercentage }} %{% else %}---{% endif %}</td>
  632.                                     {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  633.                                         {% if ticket.canMakeActionByStatus('closed') %}
  634.                                             <td class="td_w_40p txt_a_c"><a href="javascript: interventionSla({{ intervention.id }})"><img src="{{ asset (icon_percentage) }}" class="icon_action icon_amber" data-bs-toggle="tooltip" title="Cambia % SLA e mese di fatturazione"></a></td>
  635.                                         {% endif %}
  636.                                         <td class="td_w_40p txt_a_c"><a href="javascript: interventionNotBillable({{ intervention.id }})"><img src="{{ asset (icon_exchange) }}" class="icon_action icon_pr" data-bs-toggle="tooltip" title="Cambia fatturabile"></a></td>
  637.                                     {% endif %}
  638.                                     {% if app.user.canMakeTicketActions('technician', settingBackOffice) and ticket.canMakeActionByStatus('taken_charge,suspended,closed') and intervention.outcomeType.slug == "completed" %}
  639.                                         <td class="td_w_40p txt_a_c">
  640.                                             <a href="{{ path ('user_ticket_intervention_edit', {'interventionId':intervention.id}) }}">
  641.                                                 {% if intervention.outcome is null %}
  642.                                                     <img src="{{ asset (icon_correction) }}" class="icon_action icon_green" data-bs-toggle="tooltip" title="Riprendi">
  643.                                                 {% else %}
  644.                                                     <img src="{{ asset (icon_edit) }}" class="icon_action icon_amber" data-bs-toggle="tooltip" title="Modifica">
  645.                                                 {% endif %}
  646.                                             </a>
  647.                                         </td>
  648.                                     {% endif %}
  649.                                     {% if intervention.outcome is null or (intervention.outcome.type.slug == "completed" and intervention.activities|length == 0) %}
  650.                                         <td class="td_w_40p txt_a_c"><a href="javascript: interventionDelete({{ intervention.id }})"><img src="{{ asset (icon_delete) }}" class="icon_action icon_red" data-bs-toggle="tooltip" title="Elimina"></a></td>
  651.                                     {% endif %}
  652.                                 </tr>
  653.                             {% endfor %}
  654.                         </tbody>
  655.                     </table>
  656.                     {# PER CREAZIONE SCHEDA #}
  657.                     {% for intervention in ticket.interventions|sort((a, b) => b.datetime <=> a.datetime) %}
  658.                         <div id="int_activities_{{ intervention.id }}" class="display_n">
  659.                             {% if intervention.outcome != null %}
  660.                                 {% if intervention.outcomeType.slug != 'completed' %}
  661.                                     <h4 class="form_title m_b_none">Dettagli esito</h4>
  662.                                     <hr class="m_t_none">
  663.                                     <table class="table table-sm font_12 m_b_none">
  664.                                         {% if intervention.suspension is not null and intervention.suspension.managed %}
  665.                                             <tr>
  666.                                                 <th>Sospensione</th>
  667.                                                 <td>{% if intervention.suspension.approved %}Approvata{% else %}Non approvata{% endif %}</td>
  668.                                             </tr>
  669.                                             {% if intervention.suspension.approved %}
  670.                                                 <tr>
  671.                                                     <th>Durata</th>
  672.                                                     <td>Dal {{ intervention.suspension.datetimeFrom|date('d-m-Y H:i') }} {% if intervention.suspension.datetimeTo != null %}al {{ intervention.suspension.datetimeTo|date('d-m-Y H:i') }}{% else %}a data da destinarsi{% endif %}</td>
  673.                                                 </tr>
  674.                                                 {% if intervention.suspension.unlocked %}
  675.                                                     <tr>
  676.                                                         <th>Causale di sblocco</th>
  677.                                                         <td>{{ intervention.suspension.unlockCausal }}</td>
  678.                                                     </tr>
  679.                                                 {% endif %}
  680.                                             {% else %}
  681.                                                 <tr>
  682.                                                     <th>Motivo approvazione respinta</th>
  683.                                                     <td>{{ intervention.suspension.refuseMotivation }}</td>
  684.                                                 </tr>
  685.                                             {% endif %}
  686.                                         {% endif %}
  687.                                         {% if intervention.outcome.referentRequired %}
  688.                                             <tr>
  689.                                                 <th class="td_w_150p">Referente</th>
  690.                                                 <td>{{ intervention.referent }}</td>
  691.                                             </tr>
  692.                                         {% endif %}
  693.                                         {% if intervention.outcome.phoneRequired %}
  694.                                             <tr>
  695.                                                 <th class="td_w_150p">Telefono</th>
  696.                                                 <td>{{ intervention.phone }}</td>
  697.                                             </tr>
  698.                                         {% endif %}
  699.                                         {% if intervention.outcome.photoRequired %}
  700.                                             {% set photoPath = 'companies/' ~ company.directoryPath ~ '/tickets/' ~ ticket.directoryPath ~ '/' ~ intervention.photoPath %}
  701.                                             <tr>
  702.                                                 <th class="td_w_150p">Foto</th>
  703.                                                 <td><img src="{{ asset (photoPath) }}"/></td>
  704.                                             </tr>
  705.                                         {% endif %}
  706.                                     </table>
  707.                                 {% else %}
  708.                                     <h4 class="form_title m_b_none">Attività eseguite</h4>
  709.                                     <hr class="m_t_none">
  710.                                     <table class="table table-sm font_12 m_b_none">
  711.                                         {% for activity in intervention.activities %}
  712.                                             {% if loop.index > 1 %}
  713.                                                 <tr><th colspan="2" style="padding: 0px; padding-top: 5px; border-bottom-width: 1px;border-top-width: 1px;"></th></tr>
  714.                                             {% endif %}
  715.                                             <tr>
  716.                                                 <th style="border-bottom: 0px">Attività</th>
  717.                                                 <td style="border-bottom: 0px">{{ activity.type.value }}</td>
  718.                                             </tr>
  719.                                             <tr>
  720.                                                 <th style="border-bottom: 0px">Prodotto</tH>
  721.                                                 <td style="border-bottom: 0px">
  722.                                                     {% if activity.productWithdraw != null %}Ritiro: {{ activity.productWithdraw.model.name }}<br>{% endif %}
  723.                                                     {% if activity.productActual != null %}Attuale: {{ activity.productActual.model.name }}<br>{% endif %}
  724.                                                     {% if activity.productInstallation != null %}Installazione: {{ activity.productInstallation.model.name }}{% endif %}
  725.                                                 </td>
  726.                                             </tr>
  727.                                             <tr>
  728.                                                 <th style="border-bottom: 0px">Matricole</th>
  729.                                                 <td style="border-bottom: 0px">                                                
  730.                                                     {% if activity.producerWithdraw != null %}Matricola produttore - Ritiro: {% if activity.productWithdraw is null %}{{ activity.producerWithdraw }}{% else %}{% if activity.producerWithdraw != activity.productWithdraw.codeProducer %}<span class="color_r line_t">{{ activity.producerWithdraw }}</span> | {% endif %}<a href="{{ path ('user_product_sheet', {'productId':activity.productWithdraw.id}) }}" class="underline">{{ activity.productWithdraw.codeProducer }}</a>{% endif %}<br>{% endif %}
  731.                                                     {% if activity.supplierWithdraw != null %}Matricola fornitore - Ritiro: {% if activity.productWithdraw is null %}{{ activity.supplierWithdraw }}{% else %}{% if activity.supplierWithdraw != activity.productWithdraw.codeSupplier %}<span class="color_r line_t">{{ activity.supplierWithdraw }}</span> | {% endif %}<a href="{{ path ('user_product_sheet', {'productId':activity.productWithdraw.id}) }}" class="underline">{{ activity.productWithdraw.codeSupplier }}</a>{% endif %}<br>{% endif %}
  732.                                                     {% if activity.producerActual != null %}Matricola produttore - Attuale: {% if activity.productActual is null %}{{ activity.producerActual }}{% else %}{% if activity.producerActual != activity.productActual.codeProducer %}<span class="color_r line_t">{{ activity.producerActual }}</span> | {% endif %}<a href="{{ path ('user_product_sheet', {'productId':activity.productActual.id}) }}" class="underline">{{ activity.productActual.codeProducer }}</a>{% endif %}<br>{% endif %}
  733.                                                     {% if activity.supplierActual != null %}Matricola fornitore - Attuale: {% if activity.productActual is null %}{{ activity.supplierActual }}{% else %}{% if activity.supplierActual != activity.productActual.codeSupplier %}<span class="color_r line_t">{{ activity.supplierActual }}</span> | {% endif %}<a href="{{ path ('user_product_sheet', {'productId':activity.productActual.id}) }}" class="underline">{{ activity.productActual.codeSupplier }}</a>{% endif %}<br>{% endif %}
  734.                                                     {% if activity.producerInstallation != null %}Matricola produttore - Installazione: {% if activity.productInstallation is null %}{{ activity.producerInstallation }}{% else %}{% if activity.producerInstallation != activity.productInstallation.codeProducer %}<span class="color_r line_t">{{ activity.producerInstallation }}</span> | {% endif %}<a href="{{ path ('user_product_sheet', {'productId':activity.productInstallation.id}) }}" class="underline">{{ activity.productInstallation.codeProducer }}</a>{% endif %}<br>{% endif %}
  735.                                                     {% if activity.supplierInstallation != null %}Matricola fornitore - Installazione: {% if activity.productInstallation is null %}{{ activity.supplierInstallation }}{% else %}{% if activity.supplierInstallation != activity.productInstallation.codeSupplier %}<span class="color_r line_t">{{ activity.supplierInstallation }}</span> | {% endif %}<a href="{{ path ('user_product_sheet', {'productId':activity.productInstallation.id}) }}" class="underline">{{ activity.productInstallation.codeSupplier }}</a>{% endif %}<br>{% endif %}
  736.                                                 </td>
  737.                                             </tr>
  738.                                         {% endfor %}
  739.                                     </table>
  740.                                 {% endif %}
  741.                             {% endif %}
  742.                         </div>
  743.                     {% endfor %}
  744.                 </div>
  745.             {% endif %}
  746.             {# Extra #}
  747.             {% if ticket.interventions|length > 0 %}
  748.                 <div class="col-12 m_t_20p">
  749.                     <h3 class="form_title">Extra
  750.                         {% if app.user.canMakeTicketActions('technician', settingBackOffice) and ticket.canMakeActionByStatus('taken_charge,suspension_request,suspended,closed') %}
  751.                             <a href="javascript: interventionExtraNew()" class="f_right" data-bs-toggle="tooltip" title="Nuovo"><img class="icon_action icon_green" src="{{ asset (icon_add) }}"></a>
  752.                         {% endif %}
  753.                     </h3>
  754.                     <hr class="m_t_none">
  755.                 </div>
  756.                 <div class="col-12 overflow_a">
  757.                     {% set extraCount = 0 %}
  758.                     {% for i in ticket.interventions %}
  759.                         {% for extra in i.extras %}
  760.                             {% set extraCount = extraCount + 1 %}
  761.                         {% endfor %}
  762.                     {% endfor %}
  763.                     {% if extraCount > 0 %}
  764.                         <table class="table table-sm responsive_font_size m_b_none">
  765.                             <thead>
  766.                                 <tr>
  767.                                     <th class="td_w_40p"></th>
  768.                                     <th class="td_w_500p">Intervento</th>
  769.                                     <th class="td_w_100p">Tipo</th>
  770.                                     <th class="td_w_80p txt_a_c">Ore</th>
  771.                                     <th class="td_w_100p txt_a_c">Costo [€]</th>
  772.                                     <th class="td_w_100p txt_a_c">Approvato</th>
  773.                                     {% if app.user.canMakeTicketActions('technician', settingBackOffice) %}
  774.                                         <th class="td_w_40p"></th>
  775.                                         <th class="td_w_40p"></th>
  776.                                     {% endif %}
  777.                                 </tr>
  778.                             </thead>
  779.                             <tbody>
  780.                                 {% for i in ticket.interventions|sort((a, b) => b.datetime <=> a.datetime) %}
  781.                                     {% for extra in i.extras %}
  782.                                         {% set imgSource = '' %}
  783.                                         {% if extra.filePath != null %}
  784.                                             {% set imgSource = 'companies/' ~ company.directoryPath ~ '/tickets/' ~ ticket.directoryPath ~ '/' ~ extra.filePath %}
  785.                                         {% endif %}
  786.                                         <input type="hidden" id="intervention_extra_intervention_{{ extra.id }}" value="{{ extra.intervention.id }}">
  787.                                         <input type="hidden" id="intervention_extra_intervention_display_{{ extra.id }}" value="{{ extra.intervention }}">
  788.                                         <input type="hidden" id="intervention_extra_type_{{ extra.id }}" value="{{ extra.type }}">
  789.                                         <input type="hidden" id="intervention_extra_type_display_{{ extra.id }}" value="{{ extra.displayType }}">
  790.                                         <input type="hidden" id="intervention_extra_hours_{{ extra.id }}" value="{{ extra.hours }}">
  791.                                         <input type="hidden" id="intervention_extra_cost_{{ extra.id }}" value="{{ extra.cost }}">
  792.                                         <input type="hidden" id="intervention_extra_filePath_{{ extra.id }}" value="{{ extra.filePath }}">
  793.                                         <input type="hidden" id="intervention_extra_notes_{{ extra.id }}" value="{{ extra.notes }}">
  794.                                         <input type="hidden" id="intervention_extra_imgSource_{{ extra.id }}" value="{{ asset (imgSource) }}">
  795.                                         <input type="hidden" id="intervention_extra_managed_{{ extra.id }}" value="{{ extra.managed }}">
  796.                                         <tr class="{% if not extra.isManaged %}bg_r_m{% else %}{% if not extra.isApproved %}bg_r_h{% endif %}{% endif %}">
  797.                                             <td><a href="javascript: interventionExtraSheet({{ extra.id }})"><img src="{{ asset (icon_sheet) }}" class="icon_action icon_pr" data-bs-toggle="tooltip" title="Scheda"></a></td>
  798.                                             <td>{{ extra.intervention }}</td>
  799.                                             <td>{{ extra.displayType }}</td>
  800.                                             <td class="txt_a_c">{% if extra.hours != null %}{{ extra.hours }} ore{% else %}---{% endif %}</td>
  801.                                             <td class="txt_a_c">{% if extra.cost != null and extra.cost != '0.00' %}{{ extra.cost }} â‚¬{% else %}---{% endif %}</td>
  802.                                             <td class="txt_a_c">{% if extra.managed %}{% if extra.approved %}Sì{% else %}No{% endif %}{% else %}In attesa{% endif %}</td>
  803.                                             {% if app.user.canMakeTicketActions('technician', settingBackOffice) %}
  804.                                                 {% if app.user.accountTypology == "agency" or extra.managed == false %}
  805.                                                     <td class="txt_a_c"><a href="javascript: interventionExtraEdit({{ extra.id }})"><img src="{{ asset (icon_edit) }}" class="icon_action icon_amber" data-bs-toggle="tooltip" title="Modifica"></a></td>
  806.                                                     <td class="txt_a_c"><a href="javascript: interventionExtraDelete({{ extra.id }})"><img src="{{ asset (icon_delete) }}" class="icon_action icon_red" data-bs-toggle="tooltip" title="Elimina"></a></td>
  807.                                                 {% else %}
  808.                                                     <td colspan="2"></td>
  809.                                                 {% endif %}
  810.                                             {% endif %}
  811.                                         </tr>
  812.                                     {% endfor %}
  813.                                 {% endfor %}
  814.                             </tbody>
  815.                         </table>
  816.                     {% else %}
  817.                         {% include 'components/twig/notice_no_values.html.twig' with {'message':'Nessun extra inserito'} %}
  818.                     {% endif %}
  819.                 </div>
  820.             {% endif %}
  821.             
  822.             {# Reminder #}
  823.             <div class="col-12 m_t_20p">
  824.                 <h3 class="form_title">Promemoria
  825.                     {% if app.user.canMakeTicketActions('technician', settingBackOffice) and ticket.canMakeActionByStatus('to_assign,assigned,taken_charge,suspension_request,suspended,closed') and ticket.systemError == false %}
  826.                         <a href="javascript: reminderNew()" class="f_right" data-bs-toggle="tooltip" title="Nuovo"><img class="icon_action icon_green" src="{{ asset (icon_add) }}"></a>
  827.                     {% endif %}
  828.                 </h3>
  829.                 <hr class="m_t_none">
  830.             </div>
  831.             <div class="col-12 overflow_a">
  832.                 {% if ticket.reminders|length > 0 %}
  833.                     <table class="table table-sm responsive_font_size m_b_none">
  834.                         <thead>
  835.                             <tr>
  836.                                 <th class="td_w_150p">Data/Ora</th>
  837.                                 {% if app.user.accountTypology != 'technician' %}<th class="td_w_150p">Utente</th>{% endif %}
  838.                                 <th>Dettagli</th>
  839.                                 <th class="td_w_50p"></th>
  840.                                 <th class="td_w_50p"></th>
  841.                             </tr>
  842.                         </thead>
  843.                         <tbody>
  844.                             {% for r in ticket.reminders|sort((a, b) => a.datetime <=> b.datetime) %}
  845.                                 {% set show = false %}
  846.                                 {% if app.user.accountTypology == 'technician' and app.user.id == r.technician.id %}
  847.                                     {% set show = true %}
  848.                                 {% endif %}
  849.                                 {% if app.user.accountTypology == 'agency' or app.user.accountTypology == 'warehouse' %}
  850.                                     {% set show = true %}
  851.                                 {% endif %}
  852.                                 {% if show %}
  853.                                     <input type="hidden" id="reminder_details_{{ r.id }}" value="{{ r.details }}">
  854.                                     <input type="hidden" id="reminder_date_{{ r.id }}" value="{{ r.datetime|date('d-m-Y') }}">
  855.                                     <input type="hidden" id="reminder_hour_{{ r.id }}" value="{{ r.datetime|date('H') }}">
  856.                                     <input type="hidden" id="reminder_minute_{{ r.id }}" value="{{ r.datetime|date('i') }}">
  857.                                     <tr {% if r.datetime|date('YmdHi') < "now"|date('YmdHi') %}class="bg_r_h"{% endif %}>
  858.                                         <td>{{ r.datetime|date('d-m-Y H:i') }}</td>
  859.                                         {% if app.user.accountTypology != 'technician' %}
  860.                                             <td>{{ r.technician }}</td>
  861.                                         {% endif %}
  862.                                         <td>{{ r.details }}</td>
  863.                                         {% if app.user.canMakeTicketActions('technician', settingBackOffice) and ticket.canMakeActionByStatus('to_assign,assigned,taken_charge,suspension_request,suspended,closed') %}
  864.                                             <td class="td_action"><a href="javascript: reminderEdit({{ r.id }})"><img src="{{ asset (icon_edit) }}" class="icon_amber" data-bs-toggle="tooltip" title="Modifica"></a></td>
  865.                                             <td class="td_action"><a href="javascript: reminderDelete({{ r.id }})"><img src="{{ asset (icon_delete) }}" class="icon_red" data-bs-toggle="tooltip" title="Elimina"></a></td>
  866.                                         {% else %}
  867.                                             <td colspan="2"></td>
  868.                                         {% endif %}
  869.                                     </tr>
  870.                                 {% endif %}
  871.                             {% endfor %}
  872.                         </tbody>
  873.                     </table>
  874.                 {% else %}
  875.                     {% include 'components/twig/notice_no_values.html.twig' with {'message':'Nessun promemoria inserito'} %}
  876.                 {% endif %}
  877.             </div>
  878.         </div>
  879.     </section>
  880.     {# Dati completi JSON #}
  881.     {% if ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('OTP')) %}
  882.         <div id="showOtpModal" class="modal fade" tabindex="-1" role="dialog">
  883.             <div class="modal-dialog" role="document">
  884.                 <div class="modal-content">
  885.                     <div class="modal-header"><h3 class="modal-title">QR code</h3></div>
  886.                     <div class="modal-body txt_a_c">
  887.                         <img src="data:image/png;base64,{{ barcode({code: ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('OTP')), type: 'qrcode', format: 'png', width: 10, height: 10, color: [0, 0, 0]}) }}" />
  888.                     </div>
  889.                     <div class="modal-footer txt_a_c">
  890.                         <a href="javascript:void(0)" class="button button-3d button-mini button-pr" data-bs-dismiss="modal">Esci</a>
  891.                     </div>
  892.                 </div>
  893.             </div>
  894.         </div>
  895.     {% endif %}
  896.     
  897.     <div id="jsonDataModal" class="modal fade" tabindex="-1" role="dialog">
  898.         <div class="modal-dialog modal-lg" role="document">
  899.             <div class="modal-content">
  900.                 <div class="modal-header"><h3 class="modal-title">Dati JSON completo</h3></div>
  901.                 <div class="modal-body">
  902.                     {{ ticket.displayTableJson|raw }}
  903.                 </div>
  904.                 <div class="modal-footer txt_a_c">
  905.                     <a href="javascript:void(0)" class="button button-3d button-mini button-pr" data-bs-dismiss="modal">Esci</a>
  906.                 </div>
  907.             </div>
  908.         </div>
  909.     </div>
  910.     
  911.     <div id="ticketBillableModal" class="modal fade" tabindex="-1" role="dialog">
  912.         <div class="modal-dialog" role="document">
  913.             <div class="modal-content">
  914.                 <form action="{{ path ('user_ticket_billable') }}" method="post">
  915.                     <div class="modal-header"><h3 class="modal-title">Ticket - Cambia fatturabile</h3></div>
  916.                     <div class="modal-body">
  917.                         <input type="hidden" name="ticketId" value="{{ ticket.id }}"/>
  918.                         <div class="row">
  919.                             <div class="col-12 txt_a_c">
  920.                                 <label class="modal_subtitle">Attenzione!</label>
  921.                                 <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> dichiarerai il ticket <span id="modal_ticket_billable_text"></span>.<br>Si Ã¨ sicuri di voler proseguire?</p>
  922.                             </div>
  923.                         </div>
  924.                     </div>
  925.                     <div class="modal-footer txt_a_c">
  926.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  927.                         <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  928.                     </div>
  929.                 </form>
  930.             </div>
  931.         </div>
  932.     </div>
  933.     
  934.     <div id="interventionSheetModal" class="modal fade" tabindex="-1" role="dialog">
  935.         <div class="modal-dialog" role="document">
  936.             <div class="modal-content">
  937.                 <div class="modal-header"><h3 class="modal-title">Intervento - Scheda</h3></div>
  938.                 <div class="modal-body">
  939.                     <div class="row">
  940.                         <div class="col-12">
  941.                             <table class="table table-sm font_12 m_b_20p">
  942.                                 <tr>
  943.                                     <th class="td_w_150p">Data/ora</th>
  944.                                     <td id="intervention_sheet_date"></td>
  945.                                 </tr>
  946.                                 <tr>
  947.                                     <th>Esito</th>
  948.                                     <td id="intervention_sheet_outcome"></td>
  949.                                 </tr>
  950.                                 <tr>
  951.                                     <th>Tecnico</th>
  952.                                     <td id="intervention_sheet_technician"></td>
  953.                                 </tr>
  954.                                 <tr>
  955.                                     <th>Operatore</th>
  956.                                     <td id="intervention_sheet_operator"></td>
  957.                                 </tr>
  958.                                 <tr>
  959.                                     <th>Fatturabile</th>
  960.                                     <td id="intervention_sheet_billable"></td>
  961.                                 </tr>
  962.                                 <tr>
  963.                                     <th>Percentuale fuori SLA</th>
  964.                                     <td id="intervention_sheet_sla"></td>
  965.                                 </tr>
  966.                                 <tr>
  967.                                     <th>Mese fatturazione</th>
  968.                                     <td id="intervention_sheet_datetime_billing"></td>
  969.                                 </tr>
  970.                                 <tr>
  971.                                     <th>Motivazione</th>
  972.                                     <td id="intervention_sheet_motivation"></td>
  973.                                 </tr>
  974.                             </table>
  975.                         </div>
  976.                         <div class="col-12" id="intervention_sheet_activities">
  977.                         </div>
  978.                     </div>
  979.                 </div>
  980.                 <div class="modal-footer txt_a_c">
  981.                     <a href="javascript:void(0)" class="button button-3d button-mini button-pr" data-bs-dismiss="modal">Chiudi</a>
  982.                 </div>
  983.             </div>
  984.         </div>
  985.     </div>
  986.     
  987.     <div id="interventionNotBillableModal" class="modal fade" tabindex="-1" role="dialog">
  988.         <div class="modal-dialog" role="document">
  989.             <div class="modal-content">
  990.                 <form action="{{ path ('user_ticket_intervention_not_billable') }}" method="post">
  991.                     <div class="modal-header"><h3 class="modal-title">Intervento - <span id="modal_billable_title" class="color_w"></span></h3></div>
  992.                     <div class="modal-body">
  993.                         <input type="hidden" name=""/>
  994.                         <input type="hidden" id="notBillableId" name="interventionId"/>
  995.                         <div class="row">
  996.                             <div class="col-12 txt_a_c">
  997.                                 <label class="modal_subtitle">Attenzione!</label>
  998.                                 <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> dichiarerai l'intervento come <span id="modal_billable_text"></span>.<br>Si Ã¨ sicuri di voler proseguire?</p>
  999.                             </div>
  1000.                         </div>
  1001.                     </div>
  1002.                     <div class="modal-footer txt_a_c">
  1003.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1004.                         <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1005.                     </div>
  1006.                 </form>
  1007.             </div>
  1008.         </div>
  1009.     </div>
  1010.     
  1011.     <div id="interventionExtraSheetModal" class="modal fade" tabindex="-1" role="dialog">
  1012.         <div class="modal-dialog" role="document">
  1013.             <div class="modal-content">
  1014.                 <div class="modal-header"><h3 class="modal-title">Extra intervento - Scheda</h3></div>
  1015.                 <div class="modal-body">
  1016.                     <div class="row">
  1017.                         <div class="col-12">
  1018.                             <table class="table table-sm m_b_10p">
  1019.                                 <tr>
  1020.                                     <th class="td_w_150p">Intervento</th>
  1021.                                     <td id="intervention_extra_sheet_intervention"></td>
  1022.                                 </tr>
  1023.                                 <tr>
  1024.                                     <th>Tipologia</th>
  1025.                                     <td id="intervention_extra_sheet_type"></td>
  1026.                                 </tr>
  1027.                                 <tr id="intervention_extra_sheet_hours_tr">
  1028.                                     <th>Ore</th>
  1029.                                     <td id="intervention_extra_sheet_hours"></td>
  1030.                                 </tr>
  1031.                                 <tr>
  1032.                                     <th>Costo totale [€]</th>
  1033.                                     <td id="intervention_extra_sheet_cost"></td>
  1034.                                 </tr>
  1035.                                 <tr>
  1036.                                     <th>Note</th>
  1037.                                     <td id="intervention_extra_sheet_notes"></td>
  1038.                                 </tr>
  1039.                             </table>
  1040.                         </div>
  1041.                         <div class="col-12 txt_a_c">
  1042.                             <a id="intervention_extra_sheet_a" class="button button-3d button-mini button-pr" target="_blank">Apri allegato</a>
  1043.                         </div>
  1044.                         {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  1045.                             <div class="col-12 col-md-6 m_t_20p">
  1046.                                 <a id="button_approve" class="button button-3d button-mini button-green width_100 txt_a_c">Approva</a>
  1047.                             </div>
  1048.                             <div class="col-12 col-md-6 m_t_20p">
  1049.                                 <a id="button_not_approve" class="button button-3d button-mini button-red width_100 txt_a_c">Non approvare</a>
  1050.                             </div>
  1051.                         {% endif %}
  1052.                     </div>
  1053.                 </div>
  1054.                 <div class="modal-footer txt_a_c">
  1055.                     <a href="javascript:void(0)" class="button button-3d button-mini button-pr" data-bs-dismiss="modal">Chiudi</a>
  1056.                 </div>
  1057.             </div>
  1058.         </div>
  1059.     </div>
  1060.     
  1061.     <div id="reminderNewModal" class="modal fade" tabindex="-1" role="dialog">
  1062.         <div class="modal-dialog" role="document">
  1063.             <div class="modal-content">
  1064.                 {{ form_start(formReminderNew, {'attr': {'novalidate': 'novalidate'}}) }} 
  1065.                     <div class="modal-header"><h3 class="modal-title">Promemoria - Nuovo</h3></div>
  1066.                     <div class="modal-body">
  1067.                         {{ form_widget(formReminderNew.id) }}
  1068.                         <div class="row">
  1069.                             <div class="col-12 col-md-6 form-group">
  1070.                                 <label class="form_label">Data*</label>
  1071.                                 <div {{ form_errors(formReminderNew.date) }}>
  1072.                                     {{ form_widget(formReminderNew.date, {'attr':{'class':'form-control'}}) }}
  1073.                                 </div>
  1074.                             </div>
  1075.                             <div class="col-12 col-md-3 form-group">
  1076.                                 <label class="form_label">Ora*</label>
  1077.                                 <div {{ form_errors(formReminderNew.hour) }}>
  1078.                                     {{ form_widget(formReminderNew.hour) }}
  1079.                                 </div>
  1080.                             </div>
  1081.                             <div class="col-12 col-md-3 form-group">
  1082.                                 <label class="form_label">Minuto*</label>
  1083.                                 <div {{ form_errors(formReminderNew.minute) }}>
  1084.                                     {{ form_widget(formReminderNew.minute) }}
  1085.                                 </div>
  1086.                             </div>
  1087.                             <div class="col-12 form-group">
  1088.                                 <label class="form_label">Dettagli*</label>
  1089.                                 <div {{ form_errors(formReminderNew.details) }}>
  1090.                                     {{ form_widget(formReminderNew.details) }}
  1091.                                 </div>
  1092.                             </div>
  1093.                         </div>
  1094.                     </div>
  1095.                     <div class="modal-footer">
  1096.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1097.                         <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1098.                     </div>
  1099.                 {{ form_end(formReminderNew) }}
  1100.             </div>
  1101.         </div>
  1102.     </div>
  1103.     <div id="reminderEditModal" class="modal fade" tabindex="-1" role="dialog">
  1104.         <div class="modal-dialog" role="document">
  1105.             <div class="modal-content">
  1106.                 {{ form_start(formReminderEdit, {'attr': {'novalidate': 'novalidate'}}) }} 
  1107.                     <div class="modal-header"><h3 class="modal-title">Promemoria - Modifica</h3></div>
  1108.                     <div class="modal-body">
  1109.                         {{ form_widget(formReminderEdit.id) }}
  1110.                         <div class="row">
  1111.                             <div class="col-12 col-md-6 form-group">
  1112.                                 <label class="form_label">Data*</label>
  1113.                                 <div {{ form_errors(formReminderEdit.date) }}>
  1114.                                     {{ form_widget(formReminderEdit.date, {'attr':{'class':'form-control'}}) }}
  1115.                                 </div>
  1116.                             </div>
  1117.                             <div class="col-12 col-md-3 form-group">
  1118.                                 <label class="form_label">Ora*</label>
  1119.                                 <div {{ form_errors(formReminderEdit.hour) }}>
  1120.                                     {{ form_widget(formReminderEdit.hour) }}
  1121.                                 </div>
  1122.                             </div>
  1123.                             <div class="col-12 col-md-3 form-group">
  1124.                                 <label class="form_label">Minuto*</label>
  1125.                                 <div {{ form_errors(formReminderEdit.minute) }}>
  1126.                                     {{ form_widget(formReminderEdit.minute) }}
  1127.                                 </div>
  1128.                             </div>
  1129.                             <div class="col-12 form-group">
  1130.                                 <label class="form_label">Dettagli*</label>
  1131.                                 <div {{ form_errors(formReminderEdit.details) }}>
  1132.                                     {{ form_widget(formReminderEdit.details) }}
  1133.                                 </div>
  1134.                             </div>
  1135.                         </div>
  1136.                     </div>
  1137.                     <div class="modal-footer">
  1138.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1139.                         <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1140.                     </div>
  1141.                 {{ form_end(formReminderEdit) }}
  1142.             </div>
  1143.         </div>
  1144.     </div>
  1145.     {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  1146.         {# TICKET - MODIFICA DATA SCADENZA #}
  1147.         <div id="ticketExpirationDatetimeModal" class="modal fade" tabindex="-1" role="dialog">
  1148.             <div class="modal-dialog" role="document">
  1149.                 <div class="modal-content">
  1150.                     {{ form_start(formExpirationDatetimeEdit, {'attr': {'novalidate': 'novalidate'}}) }} 
  1151.                         <div class="modal-header"><h3 class="modal-title">Modifica data e ora scadenza</h3></div>
  1152.                         <div class="modal-body">
  1153.                             <div class="row">
  1154.                                 <div class="col-12 form-group">
  1155.                                     <label class="form_label">Data*</label>
  1156.                                     <div {{ form_errors(formExpirationDatetimeEdit.date) }}>
  1157.                                         {{ form_widget(formExpirationDatetimeEdit.date, {'attr':{'class':'form-control'}}) }}
  1158.                                     </div>
  1159.                                 </div>
  1160.                                 <div class="col-12 col-md-6 form-group">
  1161.                                     <label class="form_label">Ora*</label>
  1162.                                     <div {{ form_errors(formExpirationDatetimeEdit.timeHour) }}>
  1163.                                         {{ form_widget(formExpirationDatetimeEdit.timeHour) }}
  1164.                                     </div>
  1165.                                 </div>
  1166.                                 <div class="col-12 col-md-6 form-group">
  1167.                                     <label class="form_label">Minuto*</label>
  1168.                                     <div {{ form_errors(formExpirationDatetimeEdit.timeMinute) }}>
  1169.                                         {{ form_widget(formExpirationDatetimeEdit.timeMinute) }}
  1170.                                     </div>
  1171.                                 </div>
  1172.                             </div>
  1173.                         </div>
  1174.                         <div class="modal-footer">
  1175.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1176.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1177.                         </div>
  1178.                     {{ form_end(formExpirationDatetimeEdit) }}
  1179.                 </div>
  1180.             </div>
  1181.         </div>
  1182.         
  1183.         {# TICKET - MODIFICA LETTERA DI VETTURA #}
  1184.         <div id="ticketWaybillModal" class="modal fade" tabindex="-1" role="dialog">
  1185.             <div class="modal-dialog" role="document">
  1186.                 <div class="modal-content">
  1187.                     {{ form_start(formWaybillEdit, {'attr': {'novalidate': 'novalidate'}}) }} 
  1188.                         <div class="modal-header"><h3 class="modal-title">Modifica lettera di vettura</h3></div>
  1189.                         <div class="modal-body">
  1190.                             <div class="row">
  1191.                                 <div class="col-12 form-group">
  1192.                                     <label class="form_label">Lettera di vettura</label>
  1193.                                     <div {{ form_errors(formWaybillEdit.waybill) }}>
  1194.                                         {{ form_widget(formWaybillEdit.waybill) }}
  1195.                                     </div>
  1196.                                 </div>
  1197.                             </div>
  1198.                         </div>
  1199.                         <div class="modal-footer">
  1200.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1201.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1202.                         </div>
  1203.                     {{ form_end(formWaybillEdit) }}
  1204.                 </div>
  1205.             </div>
  1206.         </div>
  1207.         {# SOSPENSIONE - MODIFICA #}
  1208.         <div id="ticketSuspensionEditModal" class="modal fade" tabindex="-1" role="dialog">
  1209.             <div class="modal-dialog" role="document">
  1210.                 <div class="modal-content">
  1211.                     {{ form_start(formSusEdit, {'attr': {'novalidate': 'novalidate'}}) }} 
  1212.                         <div class="modal-header"><h3 class="modal-title">Modifica sospensione</h3></div>
  1213.                         <div class="modal-body">
  1214.                             {{ form_widget(formSusEdit.id) }}
  1215.                             <div class="row">
  1216.                                 <div class="col-12 form-group">
  1217.                                     <label class="form_label">Sospensione da - Data*</label>
  1218.                                     <div {{ form_errors(formSusEdit.dateFrom) }}>
  1219.                                         {{ form_widget(formSusEdit.dateFrom, {'attr':{'class':'form-control'}}) }}
  1220.                                     </div>
  1221.                                 </div>
  1222.                                 <div class="col-12 col-md-6 form-group">
  1223.                                     <label class="form_label">Sospensione da - Ora*</label>
  1224.                                     <div {{ form_errors(formSusEdit.timeFromHour) }}>
  1225.                                         {{ form_widget(formSusEdit.timeFromHour) }}
  1226.                                     </div>
  1227.                                 </div>
  1228.                                 <div class="col-12 col-md-6 form-group">
  1229.                                     <label class="form_label">Sospensione da - Minuto*</label>
  1230.                                     <div {{ form_errors(formSusEdit.timeFromMinute) }}>
  1231.                                         {{ form_widget(formSusEdit.timeFromMinute) }}
  1232.                                     </div>
  1233.                                 </div>
  1234.                                 <div class="col-12 form-group">
  1235.                                     <label class="form_label">Sospensione a - Data*</label>
  1236.                                     <div {{ form_errors(formSusEdit.dateTo) }}>
  1237.                                         {{ form_widget(formSusEdit.dateTo, {'attr':{'class':'form-control'}}) }}
  1238.                                     </div>
  1239.                                 </div>
  1240.                                 <div class="col-12 col-md-6 form-group">
  1241.                                     <label class="form_label">Sospensione a - Ora*</label>
  1242.                                     <div {{ form_errors(formSusEdit.timeToHour) }}>
  1243.                                         {{ form_widget(formSusEdit.timeToHour) }}
  1244.                                     </div>
  1245.                                 </div>
  1246.                                 <div class="col-12 col-md-6 form-group">
  1247.                                     <label class="form_label">Sospensione a - Ora*</label>
  1248.                                     <div {{ form_errors(formSusEdit.timeToMinute) }}>
  1249.                                         {{ form_widget(formSusEdit.timeToMinute) }}
  1250.                                     </div>
  1251.                                 </div>
  1252.                             </div>
  1253.                         </div>
  1254.                         <div class="modal-footer">
  1255.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1256.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1257.                         </div>
  1258.                     {{ form_end(formSusEdit) }}
  1259.                 </div>
  1260.             </div>
  1261.         </div>
  1262.         
  1263.         {# INTERVENTO - MODIFICA PERCENTUALE SLA E MESE DI FATTURAZIONE #}
  1264.         <div id="interventionSlaModal" class="modal fade" tabindex="-1" role="dialog">
  1265.             <div class="modal-dialog" role="document">
  1266.                 <div class="modal-content">
  1267.                     {{ form_start(formInterventionSla, {'attr': {'novalidate': 'novalidate'}}) }} 
  1268.                         <div class="modal-header"><h3 class="modal-title">Modifica % SLA e mese di fatturazione</h3></div>                        
  1269.                         <div class="modal-body">
  1270.                             {{ form_widget(formInterventionSla.id, {'attr':{'class':'display_n'}}) }}
  1271.                             <div class="row">
  1272.                                 <div class="col-12 form-group">
  1273.                                     <label class="form_label">Percentuale fuori SLA [%]*</label>
  1274.                                     <div {{ form_errors(formInterventionSla.slaOutboundPercentage) }}>
  1275.                                         {{ form_widget(formInterventionSla.slaOutboundPercentage) }}
  1276.                                     </div>
  1277.                                 </div>
  1278.                                 <div class="col-12">
  1279.                                     <label class="form_label">Mese di fatturazione*</label>
  1280.                                     <div {{ form_errors(formInterventionSla.dateBilling) }}>
  1281.                                         {{ form_widget(formInterventionSla.dateBilling, {'attr':{'class':'form-control'}}) }}
  1282.                                     </div>
  1283.                                 </div>
  1284.                             </div>
  1285.                         </div>
  1286.                         <div class="modal-footer">
  1287.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1288.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1289.                         </div>
  1290.                     {{ form_end(formInterventionSla) }}
  1291.                 </div>
  1292.             </div>
  1293.         </div>
  1294.     {% endif %}
  1295. {% endblock %}
  1296. {% block modals %}
  1297.     {# STATO - CHIUSO #}
  1298.     {% include 'components/modals/confirm.html.twig' with {'type':'ticketClosed', 'action':'user_ticket_close', 'text':'Riporta a stato chiuso', 'description':'lo stato del ticket verrà impostato a "Completato"'} %}
  1299.     {% include 'components/modals/confirm.html.twig' with {'type':'ticketClosedPortal', 'action':'user_ticket_closed_on_portal', 'text':'Chiudi su portale fornitore', 'description':'lo stato del ticket verrà impostato a "Completato su portale fornitore"'} %}
  1300.     
  1301.     {# INDIRIZZO - MODIFICA #}
  1302.     <div id="ticketAddressEditModal" class="modal fade" tabindex="-1" role="dialog">
  1303.         <div class="modal-dialog" role="document">
  1304.             <div class="modal-content">
  1305.                 {{ form_start(formAddressEdit, {'attr': {'novalidate': 'novalidate', 'id':'formAddressEdit'}}) }}
  1306.                     <div class="modal-header"><h3 class="modal-title">Modifica indirizzo</h3></div>
  1307.                     <div class="modal-body">
  1308.                         <div class="row">
  1309.                             <div class="col-12 form-group">
  1310.                                 <label class="form_label">Indirizzo</label>
  1311.                                 <div {{ form_errors(formAddressEdit.address) }}>
  1312.                                     {{ form_widget(formAddressEdit.address) }}
  1313.                                 </div>
  1314.                             </div>
  1315.                             <div class="col-12 form-group">
  1316.                                 <label class="form_label">Frazione/Località</label>
  1317.                                 <div {{ form_errors(formAddressEdit.locality) }}>
  1318.                                     {{ form_widget(formAddressEdit.locality) }}
  1319.                                 </div>
  1320.                             </div>
  1321.                             <div class="col-12 form-group">
  1322.                                 <label class="form_label">Città*</label>
  1323.                                 <div {{ form_errors(formAddressEdit.cityId) }}>
  1324.                                     {{ form_widget(formAddressEdit.cityName, {'attr':{'onClick':'javascript: cityModal2()', 'readonly':true}}) }}
  1325.                                     {{ form_widget(formAddressEdit.cityId, {'attr':{'class':'display_n'}}) }}
  1326.                                 </div>
  1327.                             </div>
  1328.                             <div class="col-12 form-group">
  1329.                                 <label class="form_label">CAP*</label>
  1330.                                 <div {{ form_errors(formAddressEdit.zip) }}>
  1331.                                     <select id="form_address_select_zips" class="form-control form-select" readonly onChange="javascript: zipSet2()"><option value=""></option></select>
  1332.                                     {{ form_widget(formAddressEdit.zip, {'attr':{'class':'display_n'}}) }}
  1333.                                     <input type="text" class="form-control display_n" id="other_zip" name="other_zip"/>
  1334.                                 </div>
  1335.                             </div>
  1336.                         </div>
  1337.                         {{ form_widget(formAddressEdit.otherCity, {'attr':{'class':'display_n'}}) }}
  1338.                         {{ form_widget(formAddressEdit.updateClient) }}
  1339.                     </div>
  1340.                     <div class="modal-footer">
  1341.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1342.                         <a href="javascript:ticketAddressEditUpdateClient()" class="button button-3d button-mini button-green f_right">Conferma</a>
  1343.                     </div>
  1344.                 {{ form_end(formAddressEdit) }}
  1345.             </div>
  1346.         </div>
  1347.     </div>
  1348.     {% include 'components/modals/city.html.twig' with {'number':2, 'cities':cities, 'hasOtherCity':true} %}
  1349.     {% include 'components/js/city_js.html.twig' with {'number':1, 'modalToClose':'', 'formName':'form_error_address', 'sessionModalOpen':'', 'zipManage':true, 'hasOtherCity':false} %}
  1350.     <div id="ticketAddressEditUpdateClientModal" class="modal fade" tabindex="-1" role="dialog">
  1351.         <div class="modal-dialog" role="document">
  1352.             <div class="modal-content">
  1353.                 <div class="modal-header"><h3 class="modal-title">Aggiorna indirizzo cliente</h3></div>
  1354.                 <div class="modal-body">
  1355.                     <div class="row">
  1356.                         <div class="col-12 txt_a_c">
  1357.                             <label class="modal_subtitle">Attenzione!</label>
  1358.                             <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>aggiorna</a> aggiornerai l'indirizzo anche al cliente oltre che al ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1359.                         </div>
  1360.                     </div>
  1361.                 </div>
  1362.                 <div class="modal-footer">
  1363.                     <a href="javascript:ticketAddressEditSend(0)" class="button button-3d button-mini button-amber f_left">Non aggiornare</a>
  1364.                     <a href="javascript:ticketAddressEditSend(1)" class="button button-3d button-mini button-green f_right">Aggiorna</a>
  1365.                 </div>
  1366.             </div>
  1367.         </div>
  1368.     </div>
  1369.     {% if ticket.client != null %}
  1370.         {% set editClientModalBody %}
  1371.             {% set phone1 = '' %}
  1372.             {% set phone2 = '' %}
  1373.             {% set phone3 = '' %}
  1374.             {% for p in ticket.client.phones %}
  1375.                 {% if p.name == 'Telefono 1' %} {% set phone1 = p.number %} {% endif %}
  1376.                 {% if p.name == 'Telefono 2' %} {% set phone2 = p.number %} {% endif %}
  1377.                 {% if p.name == 'Telefono cellulare' %} {% set phone3 = p.number %} {% endif %}
  1378.             {% endfor %}
  1379.             <input type="hidden" id="clientEditId" name="clientEditId"/>
  1380.             <div class="col-12 form-group">
  1381.                 <label class="form_label">Orari apertura</label>
  1382.                 <div {{ form_errors(formClientEdit.openings) }}>
  1383.                     {{ form_widget(formClientEdit.openings, {'attr':{'value':ticket.client.openings}}) }}
  1384.                 </div>
  1385.             </div>
  1386.             <div class="col-12 form-group">
  1387.                 <label class="form_label">Chiusure</label>
  1388.                 <div {{ form_errors(formClientEdit.closures) }}>
  1389.                     {{ form_widget(formClientEdit.closures, {'attr':{'value':ticket.client.closures}}) }}
  1390.                 </div>
  1391.             </div>
  1392.             {% if formClientEdit.phone1 is defined %}
  1393.                 <div class="col-12 form-group">
  1394.                     <label class="form_label">Telefono 1</label>
  1395.                     <div {{ form_errors(formClientEdit.phone1) }}>
  1396.                         {{ form_widget(formClientEdit.phone1, {'attr':{'value':phone1}}) }}
  1397.                     </div>
  1398.                 </div>
  1399.             {% endif %}
  1400.             {% if formClientEdit.phone2 is defined %}
  1401.                 <div class="col-12 form-group">
  1402.                     <label class="form_label">Telefono 2</label>
  1403.                     <div {{ form_errors(formClientEdit.phone2) }}>
  1404.                         {{ form_widget(formClientEdit.phone2, {'attr':{'value':phone2}}) }}
  1405.                     </div>
  1406.                 </div>
  1407.             {% endif %}
  1408.             {% if formClientEdit.phone3 is defined %}
  1409.                 <div class="col-12 form-group">
  1410.                     <label class="form_label">Telefono cellulare</label>
  1411.                     <div {{ form_errors(formClientEdit.phone3) }}>
  1412.                         {{ form_widget(formClientEdit.phone3, {'attr':{'value':phone3}}) }}
  1413.                     </div>
  1414.                 </div>
  1415.             {% endif %}
  1416.             <div class="col-12 form-group">
  1417.                 <label class="form_label">Note</label>
  1418.                 <div {{ form_errors(formClientEdit.notes) }}>
  1419.                     {{ form_widget(formClientEdit.notes, {'attr':{'style':'min-height:300px!important', 'value':ticket.client.notes}}) }}
  1420.                 </div>
  1421.             </div>
  1422.         {% endset %}
  1423.         {% set editClientScriptBody %}{% endset %}
  1424.         {% include 'components/modals/edit.html.twig' with {'type':'client', 'form':formClientEdit, 'text':'Dati cliente', 'modalBody':editClientModalBody, 'scriptBody':editClientScriptBody, 'openModal':'openEditModal', 'id':'openEditModalId', 'modalDimension':'modal-md'} %}
  1425.         <div id="clientPhoneCallModal" class="modal fade" tabindex="-1" role="dialog">
  1426.             <div class="modal-dialog" role="document">
  1427.                 <div class="modal-content">
  1428.                     <div class="modal-header"><h3 class="modal-title">Chiama cliente</h3></div>
  1429.                     <div class="modal-body">
  1430.                         <div class="row">
  1431.                             <div class="col-12 txt_a_c">
  1432.                                 <label class="form_label font_18">Clicca sul numero che vuoi chiamare:</label>
  1433.                                 {% if ticket.client.getPhoneByName('Telefono 1') != '' %}
  1434.                                     {% set phone1 = ticket.client.getPhoneByName('Telefono 1') %}
  1435.                                     <a href="tel:{{ phone1 }}" class="button button-3d button-small button-green font_20 f_w_400 width_60 txt_a_c">{{ phone1 }}</a><br>
  1436.                                 {% endif %}
  1437.                                 {% if ticket.client.getPhoneByName('Telefono 2') != '' %}
  1438.                                     {% set phone2 = ticket.client.getPhoneByName('Telefono 2') %}
  1439.                                     <a href="tel:{{ phone2 }}" class="button button-3d button-small button-green font_20 f_w_400 width_60 txt_a_c">{{ phone2 }}</a><br>
  1440.                                 {% endif %}
  1441.                                 {% if ticket.client.getPhoneByName('Telefono cellulare') != '' %}
  1442.                                     {% set phone3 = ticket.client.getPhoneByName('Telefono cellulare') %}
  1443.                                     <a href="tel:{{ phone3 }}" class="button button-3d button-small button-green font_20 f_w_400 width_60 txt_a_c">{{ phone3 }}</a><br>
  1444.                                 {% endif %}
  1445.                                 {% if ticket.displayJsonValueByColumn('Prefisso') is not null and ticket.displayJsonValueByColumn('Prefisso') != "" and ticket.displayJsonValueByColumn('Prefisso') != "---" %}
  1446.                                     {% if ticket.client.getPhoneByName('Telefono 1') != '' %}
  1447.                                         {% set number1Prefix = ticket.displayJsonValueByColumn('Prefisso') ~ ticket.client.getPhoneByName('Telefono 1') %}
  1448.                                         <a href="tel:{{ number1Prefix }}" class="button button-3d button-small button-green font_20 f_w_400 width_60 txt_a_c">{{ number1Prefix }}</a><br>
  1449.                                     {% endif %}
  1450.                                 {% endif %}
  1451.                             </div>
  1452.                         </div>
  1453.                     </div>
  1454.                     <div class="modal-footer txt_a_c">
  1455.                         <a href="javascript:void(0)" class="button button-3d button-small button-red" data-bs-dismiss="modal">Chiudi</a>
  1456.                     </div>
  1457.                 </div>
  1458.             </div>
  1459.         </div>
  1460.     {% endif %}
  1461.     
  1462.     {# SOSPENSIONE - SBLOCCA #}
  1463.     <div id="ticketSuspensionUnlockModal" class="modal fade" tabindex="-1" role="dialog">
  1464.         <div class="modal-dialog" role="document">
  1465.             <div class="modal-content">
  1466.                 {{ form_start(formSusUnlock, {'attr': {'novalidate': 'novalidate'}}) }} 
  1467.                     <div class="modal-header"><h3 class="modal-title">Sblocca sospensione</h3></div>
  1468.                     <div class="modal-body">
  1469.                         {{ form_widget(formSusUnlock.id) }}
  1470.                         <div class="row">
  1471.                             <div class="col-12 txt_a_c">
  1472.                                 <label class="modal_subtitle">Attenzione!</label>
  1473.                                 <p class="modal_paragraph">Inserendo la motivazione di sblocco e cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> revocherai la sospensione al ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1474.                             </div>
  1475.                             <div class="col-12 m_t_30p">
  1476.                                 <label class="form_label">Motivazione di sblocco*</label>
  1477.                                 <div {{ form_errors(formSusUnlock.unlockCausal) }}>
  1478.                                     {{ form_widget(formSusUnlock.unlockCausal, {'attr':{'class':'form-control'}}) }}
  1479.                                 </div>
  1480.                             </div>
  1481.                         </div>
  1482.                     </div>
  1483.                     <div class="modal-footer">
  1484.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1485.                         <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1486.                     </div>
  1487.                 {{ form_end(formSusUnlock) }}
  1488.             </div>
  1489.         </div>
  1490.     </div>
  1491.     {% if app.user.canMakeTicketActions('agency_warehouse', null) %} {# AGENZIA #}
  1492.         {# TICKET - ANNULLA #}
  1493.         <div id="ticketCancelModal" class="modal fade" tabindex="-1" role="dialog">
  1494.             <div class="modal-dialog" role="document">
  1495.                 <div class="modal-content">
  1496.                     <form action="{{ path ('user_ticket_cancel') }}" method="post">
  1497.                         <div class="modal-header"><h3 class="modal-title">Annulla ticket</h3></div>
  1498.                         <div class="modal-body">
  1499.                             <input type="hidden" name="ticketId" value="{{ ticket.id }}"/>
  1500.                             <div class="row">
  1501.                                 <div class="col-12 txt_a_c">
  1502.                                     <label class="modal_subtitle">Attenzione!</label>
  1503.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-red' href='javascript:void(0)'>conferma</a> annullerai il ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1504.                                 </div>
  1505.                             </div>
  1506.                         </div>
  1507.                         <div class="modal-footer">
  1508.                             <a href="javascript:void(0)" class="button button-3d button-mini button-green f_left" data-bs-dismiss="modal">Annulla</a>
  1509.                             <button type="submit" class="button button-3d button-mini button-red f_right">Conferma</button>
  1510.                         </div>
  1511.                     </form>
  1512.                 </div>
  1513.             </div>
  1514.         </div>
  1515.         {# TICKET - RIPRISTINA #}
  1516.         <div id="ticketRestoreModal" class="modal fade" tabindex="-1" role="dialog">
  1517.             <div class="modal-dialog" role="document">
  1518.                 <div class="modal-content">
  1519.                     <form action="{{ path ('user_ticket_restore') }}" method="post">
  1520.                         <div class="modal-header"><h3 class="modal-title">Ripristina ticket</h3></div>
  1521.                         <div class="modal-body">
  1522.                             <input type="hidden" name="ticketId" value="{{ ticket.id }}"/>
  1523.                             <div class="row">
  1524.                                 <div class="col-12 txt_a_c">
  1525.                                     <label class="modal_subtitle">Attenzione!</label>
  1526.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> ripristinerai il ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1527.                                 </div>
  1528.                             </div>
  1529.                         </div>
  1530.                         <div class="modal-footer">
  1531.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1532.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1533.                         </div>
  1534.                     </form>
  1535.                 </div>
  1536.             </div>
  1537.         </div>
  1538.         {# TICKET - CHIUDI #}
  1539.         <div id="ticketCloseModal" class="modal fade" tabindex="-1" role="dialog">
  1540.             <div class="modal-dialog" role="document">
  1541.                 <div class="modal-content">
  1542.                     <form action="{{ path ('user_ticket_close') }}" method="post">
  1543.                         <div class="modal-header"><h3 class="modal-title">Chiudi ticket</h3></div>
  1544.                         <div class="modal-body">
  1545.                             <input type="hidden" name="ticketId" value="{{ ticket.id }}"/>
  1546.                             <div class="row">
  1547.                                 <div class="col-12 txt_a_c">
  1548.                                     <label class="modal_subtitle">Attenzione!</label>
  1549.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> chiuderai il ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1550.                                 </div>
  1551.                             </div>
  1552.                         </div>
  1553.                         <div class="modal-footer">
  1554.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1555.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1556.                         </div>
  1557.                     </form>
  1558.                 </div>
  1559.             </div>
  1560.         </div>
  1561.         
  1562.         {# TICKET - ERRATO #}
  1563.         <div id="ticketWrongModal" class="modal fade" tabindex="-1" role="dialog">
  1564.             <div class="modal-dialog" role="document">
  1565.                 <div class="modal-content">
  1566.                     <form action="{{ path ('user_ticket_wrong') }}" method="post">
  1567.                         <div class="modal-header"><h3 class="modal-title">Ticket errato</h3></div>
  1568.                         <div class="modal-body">
  1569.                             <input type="hidden" name="ticketId" value="{{ ticket.id }}"/>
  1570.                             <div class="row">
  1571.                                 <div class="col-12 txt_a_c">
  1572.                                     <label class="modal_subtitle">Attenzione!</label>
  1573.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-red' href='javascript:void(0)'>conferma</a> renderai errato il ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1574.                                 </div>
  1575.                             </div>
  1576.                         </div>
  1577.                         <div class="modal-footer">
  1578.                             <a href="javascript:void(0)" class="button button-3d button-mini button-green f_left" data-bs-dismiss="modal">Annulla</a>
  1579.                             <button type="submit" class="button button-3d button-mini button-red f_right">Conferma</button>
  1580.                         </div>
  1581.                     </form>
  1582.                 </div>
  1583.             </div>
  1584.         </div>
  1585.         
  1586.         {# TICKET - ELIMINA #}
  1587.         <div id="ticketDeleteModal" class="modal fade" tabindex="-1" role="dialog">
  1588.             <div class="modal-dialog" role="document">
  1589.                 <div class="modal-content">
  1590.                     {{ form_start(formDelete, {'attr': {'novalidate': 'novalidate'}}) }}
  1591.                         <div class="modal-header"><h3 class="modal-title">Elimina ticket</h3></div>
  1592.                         <div class="modal-body">
  1593.                             <div class="row">
  1594.                                 <div class="col-12 txt_a_c">
  1595.                                     <label class="modal_subtitle">Attenzione!</label>
  1596.                                     <p class="modal_paragraph">Inserendo la password e cliccando sul bottone <a class='button button-3d button-mini button-red' href='javascript:void(0)'>conferma</a> eliminerai in maniera definitiva il ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1597.                                 </div>
  1598.                                 <div class="col-12 form-group">
  1599.                                     <label class="form_label">Password* <a class="icon_info f_none" href="javascript:divHelp('password_for_delete')"><img src="{{ asset(icon_info) }}" /></a></label>
  1600.                                     <div {{ form_errors(formDelete.password) }}>
  1601.                                         {{ form_widget(formDelete.password, {'attr':{'class':'form-control'}}) }}
  1602.                                     </div>
  1603.                                 </div>
  1604.                             </div>
  1605.                         </div>
  1606.                         <div class="modal-footer">
  1607.                             <a href="javascript:void(0)" class="button button-3d button-mini button-green f_left" data-bs-dismiss="modal">Annulla</a>
  1608.                             <button type="submit" class="button button-3d button-mini button-red f_right">Conferma</button>
  1609.                         </div>
  1610.                     {{ form_end(formDelete) }}
  1611.                 </div>
  1612.             </div>
  1613.         </div>
  1614.                 
  1615.         {# TICKET - MODIFICA OPERAZIONE #}
  1616.         <div id="ticketOperationEditModal" class="modal fade" tabindex="-1" role="dialog">
  1617.             <div class="modal-dialog" role="document">
  1618.                 <div class="modal-content">
  1619.                     {{ form_start(formOperationEdit, {'attr': {'novalidate': 'novalidate'}}) }} 
  1620.                         <div class="modal-header"><h3 class="modal-title">Modifica operazione</h3></div>                        
  1621.                         <div class="modal-body">
  1622.                             <div class="row">
  1623.                                 <div class="col-12 form-group">
  1624.                                     <label class="form_label">Operazione*</label>
  1625.                                     <div {{ form_errors(formOperationEdit.operation) }}>
  1626.                                         {{ form_widget(formOperationEdit.operation, {'attr':{'class':'form-control form-select'}}) }}
  1627.                                     </div>
  1628.                                 </div>
  1629.                             </div>
  1630.                         </div>
  1631.                         <div class="modal-footer">
  1632.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1633.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1634.                         </div>
  1635.                     {{ form_end(formOperationEdit) }}
  1636.                 </div>
  1637.             </div>
  1638.         </div>
  1639.         
  1640.         {# TICKET - MODIFICA TARIFFA OPERAZIONE #}
  1641.         <div id="ticketOperationTariffAmountModal" class="modal fade" tabindex="-1" role="dialog">
  1642.             <div class="modal-dialog" role="document">
  1643.                 <div class="modal-content">
  1644.                     {{ form_start(formOperationTariffAmount, {'attr': {'novalidate': 'novalidate'}}) }} 
  1645.                         <div class="modal-header"><h3 class="modal-title">Modifica tariffa</h3></div>                        
  1646.                         <div class="modal-body">
  1647.                             <div class="row">
  1648.                                 <div class="col-12 form-group">
  1649.                                     <label class="form_label">Tariffa*</label>
  1650.                                     <div {{ form_errors(formOperationTariffAmount.operationTariffAmount) }}>
  1651.                                         {{ form_widget(formOperationTariffAmount.operationTariffAmount, {'attr':{'class':'form-control form-select'}}) }}
  1652.                                     </div>
  1653.                                 </div>
  1654.                             </div>
  1655.                         </div>
  1656.                         <div class="modal-footer">
  1657.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1658.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1659.                         </div>
  1660.                     {{ form_end(formOperationTariffAmount) }}
  1661.                 </div>
  1662.             </div>
  1663.         </div>
  1664.         
  1665.         {# TECNICO - ASSEGNA #}
  1666.         <div id="technicianAssignModal" class="modal fade" tabindex="-1" role="dialog">
  1667.             <div class="modal-dialog" role="document">
  1668.                 <div class="modal-content">
  1669.                     <form action="{{ path ('user_ticket_technician_assign') }}" method="post">
  1670.                         <div class="modal-header"><h3 class="modal-title">Assegna tecnico</h3></div>                        
  1671.                         <div class="modal-body">
  1672.                             <input type="hidden" id="technicianAssignId" name="technicianId"/>
  1673.                             <input type="hidden" name="ticketId" value="{{ ticket.id }}"/>
  1674.                             <div class="row">
  1675.                                 <div class="col-12 txt_a_c">
  1676.                                     <label class="modal_subtitle">Attenzione!</label>
  1677.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> assegnerai il ticket a questo tecnico.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1678.                                 </div>
  1679.                             </div>
  1680.                         </div>
  1681.                         <div class="modal-footer">
  1682.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1683.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1684.                         </div>
  1685.                     </form>
  1686.                 </div>
  1687.             </div>
  1688.         </div>
  1689.         {# SOSPENSIONE - APPROVA/NON APPROVARE #}
  1690.         <div id="ticketSuspensionApproveModal" class="modal fade" tabindex="-1" role="dialog">
  1691.             <div class="modal-dialog" role="document">
  1692.                 <div class="modal-content">
  1693.                     {{ form_start(formSusApprove, {'attr': {'novalidate': 'novalidate'}}) }} 
  1694.                         <div class="modal-header"><h3 class="modal-title"><span id="sus_approve_title" class="color_w"></span> sospensione</h3></div>
  1695.                         <div class="modal-body">
  1696.                             {{ form_widget(formSusApprove.id) }}
  1697.                             {{ form_widget(formSusApprove.isApproved) }}
  1698.                             <div class="row">
  1699.                                 <div class="col-12">
  1700.                                     <div class="txt_a_c">
  1701.                                         <label class="modal_subtitle">Attenzione!</label>
  1702.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a><span id="sus_approve_text"></span> la sospensione a questo ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1703.                                     </div>
  1704.                                 </div>
  1705.                                 <div class="col-12 form-group" id="sus_approve_motivation" style="display: none">
  1706.                                     <label class="form_label">Motivazione*</label>
  1707.                                     <div {{ form_errors(formSusApprove.refuseMotivation) }}>
  1708.                                         {{ form_widget(formSusApprove.refuseMotivation, {'attr':{'class':'form-control'}}) }}
  1709.                                     </div>
  1710.                                 </div>
  1711.                             </div>
  1712.                         </div>
  1713.                         <div class="modal-footer">
  1714.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1715.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1716.                         </div>
  1717.                     {{ form_end(formSusApprove) }}
  1718.                 </div>
  1719.             </div>
  1720.         </div>
  1721.         
  1722.         {# ERRORE - CITTA FUORI COPERTURA #}
  1723.         {% include 'components/modals/city.html.twig' with {'number':1, 'cities':cities, 'hasOtherCity':false} %}
  1724.         
  1725.         <div id="interventionExtraSendApproveModal" class="modal fade" tabindex="-1" role="dialog">
  1726.             <div class="modal-dialog" role="document">
  1727.                 <div class="modal-content">
  1728.                     <form action="{{ path ('user_ticket_intervention_extra_send_approve') }}" method="post">
  1729.                         <div class="modal-header"><h3 class="modal-title"><span id="intervention_extra_send_approve_title" class="color_w"></span> extra</h3></div>
  1730.                         <div class="modal-body">
  1731.                             <input type="hidden" id="intervention_extra_approve_id" name="interventionExtraId"/>
  1732.                             <input type="hidden" id="intervention_extra_approve_status" name="interventionExtraStatus"/>
  1733.                             <div class="row">
  1734.                                 <div class="col-12 txt_a_c">
  1735.                                     <label class="modal_subtitle">Attenzione!</label>
  1736.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a><span id="intervention_extra_send_approve_text"></span> approverai l'extra del ticket.<br>Si Ã¨ sicuri di voler proseguire?</p>
  1737.                                 </div>
  1738.                             </div>
  1739.                         </div>
  1740.                         <div class="modal-footer">
  1741.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1742.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1743.                         </div>
  1744.                     </form>
  1745.                 </div>
  1746.             </div>
  1747.         </div>
  1748.     {% endif %}
  1749.     {% if app.user.canMakeTicketActions('technician', settingBackOffice) %}
  1750.         {# SE TECNICO INTERNO O TECNICO P. IVA O (AGENZIA E SETTING BACKOFFICE_MANAGE = 1) #}
  1751.         {# AZIONI TICKET #}
  1752.         <form id="formTicketAction" action="{{ path ('user_ticket_intervention_select') }}" method="post">
  1753.             <input type="hidden" id="intervention_outcome_type_slug" name="interventionOutcomeTypeSlug">
  1754.             <input type="hidden" id="intervention_warehouse" name="interventionWarehouseId">
  1755.             <input type="hidden" name="ticketId" value="{{ ticket.id }}"/>
  1756.         </form>
  1757.         
  1758.         {% if ticket.technician is not null %}
  1759.             <div id="modalTicketSelectWarehouse" class="modal fade" tabindex="-1" role="dialog">
  1760.                 <div class="modal-dialog" role="document">
  1761.                     <div class="modal-content">
  1762.                         <div class="modal-header"><h3 class="modal-title">Seleziona magazzino</h3></div>
  1763.                         <div class="modal-body">
  1764.                             <div class="row">
  1765.                                 <div class="col-12">
  1766.                                     <label class="form_label">Seleziona magazzino tecnico per l'intervento</label>
  1767.                                     <select id="select_warehouse" class="form-control form-select" onChange="updateSelectWarehouseButton()">
  1768.                                         <option value="0"></option>
  1769.                                         {% for jt in ticket.technician.warehouses %}
  1770.                                             {% if jt.permission == 'RW' %}
  1771.                                                 <option value="{{ jt.warehouse.id }}" {% if jt.main %}selected{% endif %}>{{ jt.warehouse }}</option>
  1772.                                             {% endif %}
  1773.                                         {% endfor %}
  1774.                                     </select>
  1775.                                 </div>
  1776.                             </div>
  1777.                         </div>
  1778.                         <div class="modal-footer">
  1779.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1780.                             <a id="modal_select_warehouse_button" href="javascript:void(0)" class="button button-3d button-mini button-grey f_right">Seleziona</a>
  1781.                         </div>
  1782.                     </div>
  1783.                 </div>
  1784.             </div>
  1785.         {% endif %}
  1786.                 
  1787.         {# INTERVENTION EXTRA #}
  1788.         {% set interventionExtraNewModalBody %}
  1789.             <div class="row">
  1790.                 <div class="col-12 form-group">
  1791.                     <label class="form_label">Intervento*</label>
  1792.                     <div {{ form_errors(formExtraNew.intervention) }}>
  1793.                         {{ form_widget(formExtraNew.intervention, {'attr':{'class':'form-control form-select'}}) }}
  1794.                     </div>
  1795.                 </div>
  1796.                 <div class="col-12 form-group">
  1797.                     <label class="form_label">Tipo*</label>
  1798.                     <div {{ form_errors(formExtraNew.type) }}>
  1799.                         {{ form_widget(formExtraNew.type, {'attr':{'class':'form-control form-select', 'onChange':'updateExtraVisual("new")'}}) }}
  1800.                     </div>
  1801.                 </div>
  1802.                 <div class="col-12 form-group" id="new_intervention_extra_hours" style="display: none">
  1803.                     <label class="form_label">Ore*</label>
  1804.                     <div {{ form_errors(formExtraNew.hours) }}>
  1805.                         {{ form_widget(formExtraNew.hours) }}
  1806.                     </div>
  1807.                 </div>
  1808.                 <div class="col-12 form-group" id="new_intervention_extra_cost" style="display: none">
  1809.                     <label class="form_label">Costo {% if app.user.accountTypology == 'agency' or app.user.accountTypology == 'warehouse' %}totale [€]* <a id="new_info_hour_cost" class="icon_info f_none"><img src="{{ asset(icon_info) }}"  data-bs-toggle="tooltip" title="Moltiplicare il costo fornitore ora extra ({{ ticket.supplier.amountTicketExtraHour|default('0.00') }} â‚¬) per il numero di ore"/></a>{% else %}[€]* <a id="new_info_hour_cost" class="display_n"></a>{% endif %}</label>
  1810.                     <div {{ form_errors(formExtraNew.cost) }}>
  1811.                         {{ form_widget(formExtraNew.cost) }}
  1812.                     </div>
  1813.                 </div>
  1814.                 <div class="col-12 form-group" id="new_intervention_extra_file" style="display: none">
  1815.                     <label class="form_label">File*</label>
  1816.                     <div {{ form_errors(formExtraNew.filePath) }}>
  1817.                         {{ form_widget(formExtraNew.filePath, {'attr': {'class':'display_n'}}) }}
  1818.                         {{ form_widget(formExtraNew.file, {'attr': {'class':'display_n'}}) }}
  1819.                         <div class="input-group">
  1820.                             <span class="input-group-btn"><button id="selectFile1" class="button button-3d button-small button-rounded button-pr button_input_group" type="button">Seleziona</button></span>
  1821.                             <input id="filename1" type="text" class="form-control" readonly>
  1822.                         </div>
  1823.                     </div>
  1824.                 </div>
  1825.                 <div class="col-12 form-group">
  1826.                     <label class="form_label">Note</label>
  1827.                     <div {{ form_errors(formExtraNew.notes) }}>
  1828.                         {{ form_widget(formExtraNew.notes) }}
  1829.                     </div>
  1830.                 </div>
  1831.             </div>
  1832.         {% endset %}
  1833.         {% set interventionExtraNewScriptBody %}
  1834.             updateExtraVisual("new");
  1835.         {% endset %}
  1836.         {% include 'components/modals/new.html.twig' with {'type':'interventionExtra', 'form':formExtraNew, 'text':'Extra intervento', 'modalBody':interventionExtraNewModalBody, 'scriptBody':interventionExtraNewScriptBody, 'openModal':'openModalExtraNew'} %}
  1837.         {% include 'components/js/upload_file_js.html.twig' with {'number':'1', 'file':'form_intervention_extra_new_file', 'path':'form_intervention_extra_new_filePath'} %}
  1838.         {% set interventionExtraEditModalBody %}
  1839.             <input type="hidden" id="interventionExtraEditId" name="extraEditId"/>
  1840.             <div class="row">
  1841.                 <div class="col-12 form-group">
  1842.                     <label class="form_label">Intervento*</label>
  1843.                     <div {{ form_errors(formExtraEdit.intervention) }}>
  1844.                         {{ form_widget(formExtraEdit.intervention, {'attr':{'class':'form-control form-select'}}) }}
  1845.                     </div>
  1846.                 </div>
  1847.                 <div class="col-12 form-group">
  1848.                     <label class="form_label">Tipo*</label>
  1849.                     <div {{ form_errors(formExtraEdit.type) }}>
  1850.                         {{ form_widget(formExtraEdit.type, {'attr':{'class':'form-control form-select', 'onChange':'updateExtraVisual("edit")'}}) }}
  1851.                     </div>
  1852.                 </div>
  1853.                 <div class="col-12 form-group" id="edit_intervention_extra_hours" style="display: none">
  1854.                     <label class="form_label">Ore*</label>
  1855.                     <div {{ form_errors(formExtraEdit.hours) }}>
  1856.                         {{ form_widget(formExtraEdit.hours) }}
  1857.                     </div>
  1858.                 </div>
  1859.                 <div class="col-12 form-group" id="edit_intervention_extra_cost" style="display: none">
  1860.                     <label class="form_label">Costo {% if app.user.accountTypology == 'agency' or app.user.accountTypology == 'warehouse' %}totale [€]* <a id="edit_info_hour_cost" class="icon_info f_none"><img src="{{ asset(icon_info) }}" data-bs-toggle="tooltip" title="Moltiplicare il costo fornitore ora extra ({{ ticket.supplier.amountTicketExtraHour|default('0.00') }} â‚¬) per il numero di ore"/></a>{% else %}[€]* <a id="edit_info_hour_cost" class="display_n"></a>{% endif %}</label>
  1861.                     <div {{ form_errors(formExtraEdit.cost) }}>
  1862.                         {{ form_widget(formExtraEdit.cost) }}
  1863.                     </div>
  1864.                 </div>
  1865.                 <div class="col-12 form-group" id="edit_intervention_extra_file" style="display: none">
  1866.                     <label class="form_label">File</label>
  1867.                     <div {{ form_errors(formExtraEdit.filePath) }}>
  1868.                         {{ form_widget(formExtraEdit.filePath, {'attr': {'class':'display_n'}}) }}
  1869.                         {{ form_widget(formExtraEdit.file, {'attr': {'class':'display_n'}}) }}
  1870.                         <div class="input-group">
  1871.                             <span class="input-group-btn"><button id="selectFile2" class="button button-3d button-small button-rounded button-pr button_input_group" type="button">Seleziona</button></span>
  1872.                             <input id="filename2" type="text" class="form-control" readonly>
  1873.                         </div>
  1874.                     </div>
  1875.                 </div>
  1876.                 <div class="col-12 form-group">
  1877.                     <label class="form_label">Note</label>
  1878.                     <div {{ form_errors(formExtraEdit.notes) }}>
  1879.                         {{ form_widget(formExtraEdit.notes) }}
  1880.                     </div>
  1881.                 </div>
  1882.             </div>
  1883.         {% endset %}
  1884.         {% set interventionExtraEditScriptBody %}
  1885.             document.getElementById("interventionExtraEditId").value = id;
  1886.             document.getElementById("form_intervention_extra_edit_intervention").value = document.getElementById("intervention_extra_intervention_" + id).value;
  1887.             document.getElementById("form_intervention_extra_edit_type").value = document.getElementById("intervention_extra_type_" + id).value;
  1888.             document.getElementById("form_intervention_extra_edit_hours").value = document.getElementById("intervention_extra_hours_" + id).value;
  1889.             document.getElementById("form_intervention_extra_edit_cost").value = document.getElementById("intervention_extra_cost_" + id).value;
  1890.             document.getElementById("form_intervention_extra_edit_notes").value = document.getElementById("intervention_extra_notes_" + id).value;
  1891.             updateExtraVisual("edit");
  1892.         {% endset %}
  1893.         {% include 'components/modals/edit.html.twig' with {'type':'interventionExtra', 'form':formExtraEdit, 'text':'Extra intervento', 'modalBody':interventionExtraEditModalBody, 'scriptBody':interventionExtraEditScriptBody, 'openModal':'openModalExtraEdit', 'id':'openModalExtraEditId'} %}
  1894.         {% include 'components/js/upload_file_js.html.twig' with {'number':'2', 'file':'form_intervention_extra_edit_file', 'path':'form_intervention_extra_edit_filePath'} %}
  1895.         
  1896.         {% include 'components/modals/delete.html.twig' with {'type':'interventionExtra', 'action':'user_ticket_intervention_extra_delete' , 'text':'Extra intervento'} %}
  1897.     {% endif %}
  1898.     {# INTERVENTO - ELIMINA #}
  1899.     {% include 'components/modals/delete.html.twig' with {'type':'intervention', 'action':'user_ticket_intervention_delete', 'text':'Intervento'} %}
  1900.     
  1901.     {# REMINDER - ELIMINA #}
  1902.     {% include 'components/modals/delete.html.twig' with {'type':'reminder', 'action':'user_ticket_reminder_delete' , 'text':'Promemoria'} %}
  1903. {% endblock %}
  1904. {% block javascripts %}
  1905. {{ parent() }}
  1906. <script>
  1907.     function ticketBillable(){
  1908.         {% if ticket.billable %}
  1909.             document.getElementById('modal_ticket_billable_text').innerHTML = "non fatturabile";
  1910.         {% else %}
  1911.             document.getElementById('modal_ticket_billable_text').innerHTML = "fatturabile";
  1912.         {% endif %}
  1913.         $('#ticketBillableModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1914.     }
  1915.     function ticketAddressEdit(){
  1916.         $('#ticketAddressEditModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1917.     }
  1918.     function ticketAddressEditUpdateClient(){
  1919.         $('#ticketAddressEditModal').modal("hide");
  1920.         $('#ticketAddressEditUpdateClientModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1921.     }
  1922.     function ticketAddressEditSend(val){
  1923.         document.getElementById('form_address_updateClient').value = val;
  1924.         triggerLoading();
  1925.         $('#formAddressEdit').submit();
  1926.     }
  1927.     function clientPhoneCall(){
  1928.         $('#clientPhoneCallModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1929.     }
  1930.     function ticketSuspensionUnlock(id){
  1931.         document.getElementById("form_suspension_unlock_id").value = id;
  1932.         $('#ticketSuspensionUnlockModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1933.     }
  1934.     {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  1935.         {# AGENZIA #}
  1936.         $(document).ready(function(){
  1937.             {% if ticket.otherCity != null %}
  1938.                 document.getElementById('form_address_cityId').value = '';
  1939.                 document.getElementById('form_address_cityName').value = '{{ ticket.otherCity }}';
  1940.                 document.getElementById('other_city_2').value = '{{ ticket.otherCity }}';
  1941.                 document.getElementById('other_zip').value = '{{ ticket.zip }}';
  1942.                 document.getElementById('form_address_select_zips').style.display = 'none';
  1943.                 document.getElementById('other_zip').style.display = 'block';
  1944.             {% else %}
  1945.                 document.getElementById('form_address_cityId').value = '{{ ticket.idCity }}';
  1946.                 document.getElementById('form_address_cityName').value = '{{ ticket.idCity|translate_city_only }}';
  1947.                 zipUpdateSelect2(true);
  1948.             {% endif %}
  1949.             {% if app.session.get('openModalTariff') %}
  1950.                 operationTariffAmountChange();
  1951.                 "{{ app.session.remove('openModalTariff') }}"
  1952.             {% endif %}
  1953.             
  1954.             {% if app.session.get('openModalSuspensionApprove') %}
  1955.                 ticketSuspensionApprove("{{ app.session.remove('openModalSuspensionApproveId') }}", "{{ app.session.remove('openModalSuspensionApproveIs') }}");
  1956.                 "{{ app.session.remove('openModalSuspensionApprove') }}"
  1957.                 "{{ app.session.remove('openModalSuspensionApproveId') }}"
  1958.                 "{{ app.session.remove('openModalSuspensionApproveIs') }}"
  1959.             {% endif %}
  1960.             {% if app.session.get('openModalSuspensionUnlock') %}
  1961.                 ticketSuspensionUnlock("{{ app.session.get('openModalSuspensionUnlockId') }}");
  1962.                 "{{ app.session.remove('openModalSuspensionUnlock') }}"
  1963.                 "{{ app.session.remove('openModalSuspensionUnlockId') }}"
  1964.             {% endif %}
  1965.             
  1966.             {% if app.session.get('openDeleteModal') %}
  1967.                 ticketDelete();
  1968.                 "{{ app.session.remove('openDeleteModal') }}"
  1969.             {% endif %}
  1970.         });
  1971.         
  1972.         $('#form_expiration_edit_date').datepicker({ autoclose: true, todayHighlight: true, format: "dd-mm-yyyy", startDate: "today" });
  1973.         $('#form_suspension_edit_dateFrom').datepicker({ autoclose: true, todayHighlight: true, format: "dd-mm-yyyy", startDate: "today"});
  1974.         $('#form_suspension_edit_dateTo').datepicker({ autoclose: true, todayHighlight: true, format: "dd-mm-yyyy", startDate: "today" });
  1975.         
  1976.         function ticketCancel(){
  1977.             $('#ticketCancelModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1978.         }
  1979.         function ticketRestore(){
  1980.             $('#ticketRestoreModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1981.         }
  1982.         function ticketClose(){
  1983.             $('#ticketCloseModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1984.         }
  1985.         
  1986.         function ticketWrong(){
  1987.             $('#ticketWrongModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1988.         }
  1989.         function ticketDelete(){
  1990.             $('#ticketDeleteModal').modal({backdrop: 'static', keyboard: false}).modal("show");            
  1991.         }
  1992.         function operationEdit(){
  1993.             $('#ticketOperationEditModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1994.         }
  1995.         
  1996.         function operationTariffAmountChange(){
  1997.             {% if ticket.operationTariffAmount != null %}
  1998.                 document.getElementById('form_operation_tariff_amount_operationTariffAmount').value = "{{ ticket.operationTariffAmount.id }}";
  1999.             {% endif %}
  2000.             $('#ticketOperationTariffAmountModal').modal({backdrop: 'static', keyboard: false}).modal("show");            
  2001.         }
  2002.         function technicianAssign(id){
  2003.             document.getElementById("technicianAssignId").value = id;
  2004.             $('#technicianAssignModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2005.         }
  2006.         
  2007.         function technicianChangeShow(){
  2008.             var btn = document.getElementById('btn_technician_change');
  2009.             var row = document.getElementById('row_technician_change');
  2010.             var rowVal = document.getElementById('row_technician_change_val');
  2011.             btn.style.display = "none";
  2012.             rowVal.value = 1;
  2013.             row.style.display = 'block';
  2014.         }
  2015.         function expirationDatetimeEdit(){
  2016.             document.getElementById('form_expiration_edit_date').value = "{{ ticket.datetimeExpiration|date('d-m-Y') }}";
  2017.             document.getElementById('form_expiration_edit_timeHour').value = "{{ ticket.datetimeExpiration|date('H') }}";
  2018.             document.getElementById('form_expiration_edit_timeMinute').value = "{{ ticket.datetimeExpiration|date('i') }}";
  2019.             $('#ticketExpirationDatetimeModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2020.         }
  2021.         
  2022.         function waybillEdit(){
  2023.             document.getElementById('form_waybill_edit_waybill').value = "{{ ticket.waybill }}";
  2024.             $('#ticketWaybillModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2025.         }
  2026.         function ticketSuspensionApprove(id, action){
  2027.             document.getElementById("form_suspension_approve_id").value = id;
  2028.             document.getElementById("form_suspension_approve_isApproved").value = action;
  2029.             if(action == 1){
  2030.                 document.getElementById('sus_approve_title').innerHTML = 'Approva';
  2031.                 document.getElementById('sus_approve_text').innerHTML = 'approverai';
  2032.                 document.getElementById('sus_approve_motivation').style.display = 'none';
  2033.             }
  2034.             else{
  2035.                 document.getElementById('sus_approve_title').innerHTML = 'Non approvare';
  2036.                 document.getElementById('sus_approve_text').innerHTML = 'non approverai';
  2037.                 document.getElementById('sus_approve_motivation').style.display = 'block';
  2038.             }
  2039.             $('#ticketSuspensionApproveModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2040.         }
  2041.         function ticketSuspensionEdit(id){
  2042.             document.getElementById("form_suspension_edit_id").value = id;
  2043.             document.getElementById("form_suspension_edit_dateFrom").value = document.getElementById('suspension_date_from').value;
  2044.             document.getElementById("form_suspension_edit_timeFromHour").value = document.getElementById('suspension_time_from_hour').value;
  2045.             document.getElementById("form_suspension_edit_timeFromMinute").value = document.getElementById('suspension_time_from_minute').value;
  2046.             document.getElementById("form_suspension_edit_dateTo").value = document.getElementById('suspension_date_to').value;
  2047.             document.getElementById("form_suspension_edit_timeToHour").value = document.getElementById('suspension_time_to_hour').value;
  2048.             document.getElementById("form_suspension_edit_timeToMinute").value = document.getElementById('suspension_time_to_minute').value;
  2049.             $('#ticketSuspensionEditModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2050.         }
  2051.         
  2052.         $('#form_intervention_sla_dateBilling').datepicker({ autoclose: true, minViewMode: 1, format: "mm-yyyy" });
  2053.         
  2054.         function interventionSla(id){
  2055.             document.getElementById("form_intervention_sla_id").value = id;
  2056.             document.getElementById("form_intervention_sla_slaOutboundPercentage").value = document.getElementById('ticket_sla_' + id).value;
  2057.             document.getElementById("form_intervention_sla_dateBilling").value = document.getElementById('ticket_date_billing_' + id).value;
  2058.             $('#interventionSlaModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2059.         }
  2060.         function interventionNotBillable(id){
  2061.             document.getElementById("notBillableId").value = id;
  2062.             if(document.getElementById('intervention_billable_' + id).value){
  2063.                 document.getElementById('modal_billable_title').innerHTML = 'Non fatturabile';
  2064.                 document.getElementById('modal_billable_text').innerHTML = 'non fatturabile';
  2065.             }
  2066.             else{
  2067.                 document.getElementById('modal_billable_title').innerHTML = 'Da fatturare';
  2068.                 document.getElementById('modal_billable_text').innerHTML = 'da fatturare';
  2069.             }
  2070.             $('#interventionNotBillableModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2071.         }
  2072.     {% endif %}
  2073.     {% if app.user.canMakeTicketActions('technician', settingBackOffice) %}
  2074.         {# TECNICO INTERNO / TECNICO P. IVA --- AZIONI TICKET #}
  2075.         function ticketStatus(outcomeType){
  2076.             document.getElementById('intervention_outcome_type_slug').value = outcomeType;
  2077.             if(outcomeType != 'completed'){
  2078.                 triggerLoading();
  2079.                 $('#formTicketAction').submit();
  2080.             }
  2081.             else{
  2082.                 {% if ticket.technician is not null and ticket.technician.warehouses|length == 1 %}
  2083.                     document.getElementById('intervention_warehouse').value = '{{ ticket.technician.warehouses[0].warehouse.id }}';
  2084.                     triggerLoading();
  2085.                     $('#formTicketAction').submit();
  2086.                 {% else %}
  2087.                     updateSelectWarehouseButton();
  2088.                     $('#modalTicketSelectWarehouse').modal({backdrop: 'static', keyboard: false}).modal("show");
  2089.                 {% endif %}
  2090.             }
  2091.         }
  2092.         function updateSelectWarehouseButton(){
  2093.             var aConfirm = document.getElementById('modal_select_warehouse_button');
  2094.             if(document.getElementById('select_warehouse').value != '0'){
  2095.                 aConfirm.className = 'button button-3d button-mini button-green f_right';
  2096.                 aConfirm.href = 'javascript: warehouseConfirm()';
  2097.             }
  2098.             else{
  2099.                 aConfirm.className = 'button button-3d button-mini button-grey f_right';                
  2100.                 aConfirm.href = 'javascript: void(0)';
  2101.             }
  2102.         }
  2103.         function warehouseConfirm(){
  2104.             document.getElementById('intervention_warehouse').value = document.getElementById('select_warehouse').value;
  2105.             triggerLoading();
  2106.             $('#formTicketAction').submit();
  2107.         }
  2108.     {% endif %}
  2109.     
  2110.     function interventionSheet(id){
  2111.         document.getElementById('intervention_sheet_date').innerHTML = document.getElementById('int_date_' + id).innerHTML;
  2112.         document.getElementById('intervention_sheet_technician').innerHTML = document.getElementById('int_technician_' + id).innerHTML;
  2113.         document.getElementById('intervention_sheet_operator').innerHTML = document.getElementById('int_operator_' + id).innerHTML;
  2114.         document.getElementById('intervention_sheet_outcome').innerHTML = document.getElementById('int_outcome_' + id).innerHTML;
  2115.         document.getElementById('intervention_sheet_billable').innerHTML = document.getElementById('int_billable_' + id).innerHTML;
  2116.         document.getElementById('intervention_sheet_sla').innerHTML = document.getElementById('int_sla_' + id).innerHTML;
  2117.         document.getElementById('intervention_sheet_datetime_billing').innerHTML = document.getElementById('int_datetime_billing_' + id).innerHTML;
  2118.         document.getElementById('intervention_sheet_motivation').innerHTML = document.getElementById('int_motivation_' + id).value;
  2119.         document.getElementById('intervention_sheet_activities').innerHTML = document.getElementById('int_activities_' + id).innerHTML;
  2120.         $('#interventionSheetModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2121.     }
  2122.     function updateExtraVisual(type){
  2123.         switch(document.getElementById('form_intervention_extra_' + type + '_type').value){
  2124.             case 'hours':
  2125.                 document.getElementById(type + '_intervention_extra_hours').style.display = 'block';
  2126.                 document.getElementById(type + '_intervention_extra_cost').style.display = {% if app.user.getAccountTypology == 'agency' %}'block'{% else %}'none'{% endif %};
  2127.                 document.getElementById(type + '_intervention_extra_file').style.display = 'none';
  2128.                 document.getElementById(type + '_info_hour_cost').style.display = 'contents';
  2129.                 break;
  2130.             case 'cost':
  2131.                 document.getElementById(type + '_intervention_extra_hours').style.display = 'none';
  2132.                 document.getElementById(type + '_intervention_extra_cost').style.display = 'block';
  2133.                 document.getElementById(type + '_intervention_extra_file').style.display = 'block';
  2134.                 document.getElementById(type + '_info_hour_cost').style.display = 'none';
  2135.                 break;
  2136.             case 'tariff_extra':
  2137.                 document.getElementById(type + '_intervention_extra_hours').style.display = 'none';
  2138.                 document.getElementById(type + '_intervention_extra_cost').style.display = 'block';
  2139.                 document.getElementById(type + '_intervention_extra_file').style.display = 'none';
  2140.                 document.getElementById(type + '_info_hour_cost').style.display = 'none';
  2141.                 break;
  2142.             case 'tariff_out':
  2143.                 document.getElementById(type + '_intervention_extra_hours').style.display = 'none';
  2144.                 document.getElementById(type + '_intervention_extra_cost').style.display = 'block';
  2145.                 document.getElementById(type + '_intervention_extra_file').style.display = 'none';
  2146.                 document.getElementById(type + '_info_hour_cost').style.display = 'none';
  2147.                 break;
  2148.             default:
  2149.                 document.getElementById(type + '_intervention_extra_hours').style.display = 'none';
  2150.                 document.getElementById(type + '_intervention_extra_cost').style.display = 'none';
  2151.                 document.getElementById(type + '_intervention_extra_file').style.display = 'none';
  2152.                 document.getElementById(type + '_info_hour_cost').style.display = 'none';
  2153.                 break;
  2154.         }
  2155.     }
  2156.     function interventionExtraSheet(id){
  2157.         document.getElementById('intervention_extra_sheet_intervention').innerHTML = document.getElementById('intervention_extra_intervention_display_' + id).value;
  2158.         document.getElementById('intervention_extra_sheet_type').innerHTML = document.getElementById('intervention_extra_type_display_' + id).value;
  2159.         document.getElementById('intervention_extra_sheet_hours').innerHTML = document.getElementById('intervention_extra_hours_' + id).value;
  2160.         document.getElementById('intervention_extra_sheet_cost').innerHTML = document.getElementById('intervention_extra_cost_' + id).value;
  2161.         document.getElementById('intervention_extra_sheet_notes').innerHTML = document.getElementById('intervention_extra_notes_' + id).value;
  2162.         switch(document.getElementById('intervention_extra_type_' + id).value){
  2163.             case 'cost':
  2164.                 document.getElementById('intervention_extra_sheet_hours_tr').style.display = 'none';
  2165.                 document.getElementById('intervention_extra_sheet_a').href = document.getElementById('intervention_extra_imgSource_' + id).value;
  2166.                 document.getElementById('intervention_extra_sheet_a').style.display = 'block';
  2167.                 break;
  2168.             default: 
  2169.                 document.getElementById('intervention_extra_sheet_hours_tr').style.display = 'table-row';
  2170.                 document.getElementById('intervention_extra_sheet_a').style.display = 'none';
  2171.                 break;
  2172.         }
  2173.         {% if app.user.canMakeTicketActions('agency_warehouse', null) %}
  2174.             document.getElementById('button_approve').href = "javascript: interventionExtraSendApprove(" + id + ", 'approve')";
  2175.             document.getElementById('button_not_approve').href = "javascript: interventionExtraSendApprove(" + id + ", 'not_approve')";
  2176.         {% endif %}
  2177.         $('#interventionExtraSheetModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2178.     }
  2179.     function interventionExtraSendApprove(id, status){
  2180.         document.getElementById('intervention_extra_approve_id').value = id;
  2181.         document.getElementById('intervention_extra_approve_status').value = status;
  2182.         if(status == 'approve'){
  2183.             document.getElementById('intervention_extra_send_approve_title').innerHTML = 'Approva';
  2184.             document.getElementById('intervention_extra_send_approve_text').innerHTML = '';
  2185.         }
  2186.         else{
  2187.             document.getElementById('intervention_extra_send_approve_title').innerHTML = 'Non approvare';
  2188.             document.getElementById('intervention_extra_send_approve_text').innerHTML = ' non';
  2189.         }
  2190.         $('#interventionExtraSheetModal').modal("hide");
  2191.         $('#interventionExtraSendApproveModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2192.     }
  2193.     
  2194.     function showOtp(){
  2195.         $('#showOtpModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2196.     }
  2197.     function jsonData(){
  2198.         $('#jsonDataModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2199.     }
  2200.     // REMINDER
  2201.     $('#form_reminder_new_date').datepicker({ autoclose: true, todayHighlight: true, format: "dd-mm-yyyy", startDate: "today" });
  2202.     $('#form_reminder_edit_date').datepicker({ autoclose: true, todayHighlight: true, format: "dd-mm-yyyy", startDate: "today" });
  2203.     $(document).ready(function(){
  2204.         {% if app.session.get('openModalReminderNew') %}
  2205.             reminderNew();
  2206.             {{ app.session.remove('openModalReminderNew') }}
  2207.         {% endif %}
  2208.         
  2209.         {% if app.session.get('openModalReminderEdit') %}
  2210.             reminderEdit("{{ app.session.get('openModalReminderEditId') }}");
  2211.             {{ app.session.remove('openModalReminderEdit') }}
  2212.             {{ app.session.remove('openModalReminderEditId') }}
  2213.         {% endif %}
  2214.     });
  2215.     function reminderNew(){
  2216.         $('#reminderNewModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2217.     }
  2218.     function reminderEdit(id){
  2219.         document.getElementById("form_reminder_edit_id").value = id;
  2220.         document.getElementById("form_reminder_edit_date").value = document.getElementById("reminder_date_" + id).value;
  2221.         document.getElementById("form_reminder_edit_hour").value = document.getElementById("reminder_hour_" + id).value;
  2222.         document.getElementById("form_reminder_edit_minute").value = document.getElementById("reminder_minute_" + id).value;
  2223.         document.getElementById("form_reminder_edit_details").value = document.getElementById("reminder_details_" + id).value;
  2224.         $('#reminderEditModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  2225.     }
  2226. </script>
  2227. {% include 'components/js/city_js.html.twig' with {'number':2, 'modalToClose':'ticketAddressEditModal', 'formName':'form_address', 'sessionModalOpen':'', 'zipManage':true, 'hasOtherCity':true} %}
  2228. {% endblock %}