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