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

Open in your IDE?
  1. {% extends 'role/user/ticket/index.html.twig' %}
  2. {% block title %}Ticket - Lista{% endblock %}
  3. {% block pageTitleH1 %}Ticket - Lista{% endblock %}
  4. {% block pageTitleBreadcrumb %}
  5.     <li class="breadcrumb-item"><a href="{{ path ('user_tickets') }}">Ticket</a></li>
  6.     <li class="breadcrumb-item"><a href="javascript:void(0)">Lista</a></li>
  7. {% endblock %}
  8. {% block subMenuLeft %}
  9.     <li class="nav-item"><a class="nav-link" href="{{ path ('user_index') }}">Scrivania</a></li>
  10. {% endblock %}
  11. {% block subMenuRight %}
  12.     {% if app.user.getAccountTypology == 'agency' %}
  13.         <li class="nav-item"><a class="nav-link" href="{{ path('user_ticket_download_email') }}">Scarica da email</a></li>
  14.         {% if TICKET_DOWNLOAD_FROM_OTHER %}<li class="nav-item"><a class="nav-link" href="{{ path('user_ticket_download_email_other') }}">Scarica da email "Altro"</a></li>{% endif %}
  15.     {% endif %}
  16. {% endblock %}
  17. {% block content %}
  18.     <section class="m_tb_50p p_lr_30p">
  19.         <div class="row">
  20.             <div class="col-12">
  21.                 <h3 class="form_title">Ticket</h3>
  22.                 <hr class="m_t_none">
  23.             </div>
  24.             {% if app.user.getAccountTypology == 'agency' %}
  25.                 {# Agenzia #}
  26.                 <div class="col-12">
  27.                     <div class="tabs clearfix">
  28.                         <ul class="tab-nav clearfix">
  29.                             <li>
  30.                                 <a id="btn_tab_error" href="#error" class="tab_session" data-filterTab="error">
  31.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Con errori"><i class="icon-warning-sign font_20"></i>{{ errorTickets.getTotalItemCount }}</span>
  32.                                     <span class="d-none d-lg-block">Con errori ({{ errorTickets.getTotalItemCount }})</span>
  33.                                 </a>
  34.                             </li>
  35.                             <li>
  36.                                 <a id="btn_tab_to_assign" href="#toAssign" class="tab_session" data-filterTab="to_assign">
  37.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Da assegnare"><i class="icon-pencil-alt font_20"></i>{{ toAssignTickets.getTotalItemCount }}</span>
  38.                                     <span class="d-none d-lg-block">Da assegnare ({{ toAssignTickets.getTotalItemCount }})</span>
  39.                                 </a>
  40.                             </li>
  41.                             <li>
  42.                                 <a id="btn_tab_assigned" href="#assigned" class="tab_session" data-filterTab="assigned">
  43.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Assegnati"><i class="icon-tag font_20"></i>{{ assignedTickets.getTotalItemCount }}</span>
  44.                                     <span class="d-none d-lg-block">Assegnati ({{ assignedTickets.getTotalItemCount }})</span>
  45.                                 </a>
  46.                             </li>
  47.                             <li>
  48.                                 <a id="btn_tab_taken_charge" href="#takenCharge" class="tab_session" data-filterTab="taken_charge">
  49.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Presi in carico"><i class="icon-cog font_20"></i>{{ takenChargeTickets.getTotalItemCount }}</span>
  50.                                     <span class="d-none d-lg-block">Presi in carico ({{ takenChargeTickets.getTotalItemCount }})</span>
  51.                                 </a>
  52.                             </li>
  53.                             <li>
  54.                                 <a id="btn_tab_suspension_request" href="#suspensionRequest" class="tab_session" data-filterTab="suspension_request">
  55.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Richiesta sospensione"><i class="icon-clock font_20"></i>{{ suspensionRequestTickets.getTotalItemCount }}</span>
  56.                                     <span class="d-none d-lg-block">Richiesta sospensione ({{ suspensionRequestTickets.getTotalItemCount }})</span>
  57.                                 </a>
  58.                             </li>
  59.                             <li>
  60.                                 <a id="btn_tab_suspended" href="#suspended" class="tab_session" data-filterTab="suspended">
  61.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Sospesi"><i class="icon-clock font_20"></i>{{ suspendedTickets.getTotalItemCount }}</span>
  62.                                     <span class="d-none d-lg-block">Sospesi ({{ suspendedTickets.getTotalItemCount }})</span>
  63.                                 </a>
  64.                             </li>
  65.                             <li>
  66.                                 <a id="btn_tab_closed" href="#closed" class="tab_session" data-filterTab="closed">
  67.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Chiusi"><i class="icon-check font_20"></i>{{ closedTickets.getTotalItemCount }}</span>
  68.                                     <span class="d-none d-lg-block">Chiusi ({{ closedTickets.getTotalItemCount }})</span>
  69.                                 </a>
  70.                             </li>
  71.                             <li>
  72.                                 <a id="btn_tab_closed_on_portal" href="#closedPortal" class="tab_session" data-filterTab="closed_on_portal">
  73.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Chiusi su fornitore"><i class="icon-checkmark font_20"></i>{{ closedPortalTickets.getTotalItemCount }}</span>
  74.                                     <span class="d-none d-lg-block">Chiusi su fornitore ({{ closedPortalTickets.getTotalItemCount }})</span>
  75.                                 </a>
  76.                             </li>
  77.                             <li>
  78.                                 <a id="btn_tab_canceled" href="#canceled" class="tab_session" data-filterTab="canceled">
  79.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Annullati"><i class="icon-minus-sign font_20"></i>{{ canceledTickets.getTotalItemCount }}</span>
  80.                                     <span class="d-none d-lg-block">Annullati ({{ canceledTickets.getTotalItemCount }})</span>
  81.                                 </a>
  82.                             </li>
  83.                             <li>
  84.                                 <a id="btn_tab_wrong" href="#wrong" class="tab_session" data-filterTab="wrong">
  85.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Errati"><i class="icon-remove-sign font_20"></i>{{ wrongTickets.getTotalItemCount }}</span>
  86.                                     <span class="d-none d-lg-block">Errati ({{ wrongTickets.getTotalItemCount }})</span>
  87.                                 </a>
  88.                             </li>
  89.                         </ul>
  90.                         <div class="tab-container">
  91.                             {# Con errori #}
  92.                             <div class="tab-content clearfix" id="error">
  93.                                 <div class="row">
  94.                                     <div class="col-12">
  95.                                         <a id="button_0_wrong" href="javascript: void()" class="button button-3d button-mini button-grey f_right m_b_10p">Errato</a>
  96.                                     </div>
  97.                                     <div class="col-12 overflow_a">
  98.                                         <table class="table table-bordered table-hover font_12">
  99.                                             <thead>
  100.                                                 <tr>
  101.                                                     <form method="get" action="{{ path ('user_ticket_list') }}" id="formFilter_0">
  102.                                                         <td class="td_action"><a href="{{ path ('remove_filter', {'route':app.request.attributes.get('_route'), 'route_params':app.request.attributes.get('_route_params') }) }}" class="f_right" data-bs-toggle="tooltip" title="Escludi filtro"><img class="icon_red" src="{{ asset (icon_delete) }}"></a></td>
  103.                                                         <td><input type="text" class="form-control" inputmode="search" name="number" value="{{ filters.number|default() }}" id="input_number_0" data-bs-toggle="tooltip" title="Puoi effettuare ricerche multiple inserendo valori separati da virgola [Es. 1234,5678,901]"/></td>
  104.                                                         <td><input type="text" class="form-control" inputmode="search" name="termid" value="{{ filters.termid|default() }}" id="input_termid_0" data-bs-toggle="tooltip" title="Puoi effettuare ricerche multiple inserendo valori separati da virgola [Es. 1234,5678,901]"/></td>
  105.                                                         {% if global_company.actualCompany.tagTicketActive %}<td><input type="text" class="form-control" id="filter_tag_value_0" readonly onClick="filterTags0()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_tag_id_0" name="tag" value="{{ filters.tag|default() }}"/></td>{% endif %}
  106.                                                         <td><input type="text" class="form-control" inputmode="search" name="client" value="{{ filters.client|default() }}"/></td>
  107.                                                         <td><input type="text" class="form-control" id="filter_operation_value_0" readonly onClick="filterOperations0()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_operation_id_0" name="operation" value="{{ filters.operation|default() }}"/></td>
  108.                                                         <td><input type="text" class="form-control" id="filter_supplier_value_0" readonly onClick="filterSuppliers0()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_supplier_id_0" name="supplier" value="{{ filters.supplier|default() }}"/></td>
  109.                                                         <td><input type="text" class="form-control" inputmode="search" name="tariff" value="{{ filters.tariff|default() }}"/></td>
  110.                                                         <td><input type="text" class="form-control" inputmode="search" name="city" value="{{ filters.city|default() }}"/></td>
  111.                                                         <td><input type="text" class="form-control" inputmode="search" name="province" value="{{ filters.province|default() }}"/></td>
  112.                                                         <td><input type="text" class="form-control daterange font_12" id="daterange_0" inputmode="search" autocomplete="off" name="datetimeStart" style="height: 38px" date-filter="range"/></td>
  113.                                                         <td colspan="2"><button type="submit" class="btn bg_w f_left p_0p" data-bs-toggle="tooltip" title="Filtra"><img class="icon_action icon_green" src="{{ asset (icon_search) }}"></button></td>
  114.                                                         <input id="sort_field_0" type="hidden" name="sortField" value="{{ filters.sortField|default() }}"/>
  115.                                                         <input id="sort_order_0" type="hidden" name="sortOrder" value="{{ filters.sortOrder|default() }}"/>
  116.                                                     </form>
  117.                                                 </tr>
  118.                                                 <tr class="bg_pr color_w">
  119.                                                     <th class="td_action txt_a_c">
  120.                                                         <div class="switch" data-bs-toggle="tooltip" title="Seleziona tutti">
  121.                                                             <input id="ticket_0_all_checkboxes" class="switch-toggle switch-flat-mini switch-toggle-flat" type="checkbox" onChange="javascript: selectAll(0)">
  122.                                                             <label for="ticket_0_all_checkboxes" class="m_b_none"></label>
  123.                                                         </div>
  124.                                                     </th>
  125.                                                     <th class="td_w_120p">N°<button type="button" onClick="setOrderBy0('t.number')" data-orderField="t.number" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  126.                                                     <th class="td_w_120p">Termid<button type="button" onClick="setOrderBy0('tt.code')" data-orderField="tt.code" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  127.                                                     {% if global_company.actualCompany.tagTicketActive %}<th class="td_w_100p">Tag</th>{% endif %}
  128.                                                     <th class="td_w_200p">Cliente<button type="button" onClick="setOrderBy0('c.nickname')" data-orderField="c.nickname" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  129.                                                     <th class="td_w_150p">Operazione <i style="font-weight:400">(Dettagli)</i><button type="button" onClick="setOrderBy0('o.value')" data-orderField="o.value" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  130.                                                     <th class="td_w_130p">Fornitore <i style="font-weight:400">(SLOT)</i><button type="button" onClick="setOrderBy0('s.name')" data-orderField="s.name" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  131.                                                     <th class="td_w_130p">Tariffa<button type="button" onClick="setOrderBy0('ot.value')" data-orderField="ot.value" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  132.                                                     <th class="td_w_130p">Città<button type="button" onClick="setOrderBy1('t.idCity')" data-orderField="t.idCity" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  133.                                                     <th class="td_w_70p txt_a_c">Prov<button type="button" onClick="setOrderBy1('t.idProvince')" data-orderField="t.idProvince" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  134.                                                     <th class="td_w_140p">Data/Ora ricezione<button type="button" onClick="setOrderBy0('t.datetimeStart')" data-orderField="t.datetimeStart" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  135.                                                     <th>Descrizione errore</th>
  136.                                                     <th></th>
  137.                                                 </tr>
  138.                                             </thead>
  139.                                             <tbody>
  140.                                                 {% if errorTickets|length > 0 %}
  141.                                                     {% for ticket in errorTickets %}
  142.                                                         <tr>
  143.                                                             <td class="td_w_30p">
  144.                                                                 <div class="switch">
  145.                                                                     <input id="ticket_checkbox_{{ ticket.id }}" class="switch-toggle switch-flat-mini switch-toggle-flat ticket_0_checkbox" type="checkbox" value="{{ ticket.id }}" onChange="javascript: updateButtons(0)">
  146.                                                                     <label for="ticket_checkbox_{{ ticket.id }}" class="m_b_none"></label>
  147.                                                                 </div>
  148.                                                             </td>
  149.                                                             <td id="ticket_number_{{ ticket.id }}">{{ ticket.number }}</td>
  150.                                                             <td id="ticket_termid_{{ ticket.id }}">{{ ticket.termid }}</td>
  151.                                                             {% if global_company.actualCompany.tagTicketActive %}<td id="ticket_tags_{{ ticket.id }}">{{ ticket.displayTags('icon')|raw }}</td>{% endif %}
  152.                                                             <td id="ticket_client_{{ ticket.id }}">{{ ticket.client }}</td>
  153.                                                             <td id="ticket_operation_{{ ticket.id }}">
  154.                                                                 {% if ticket.operation is not null %}
  155.                                                                     {{ ticket.operation.value }}
  156.                                                                     {% if ticket.operation.getKeyValueByValue('Dettagli operazione') and ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli operazione')) != null %}
  157.                                                                         <br><i>({{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli operazione')) }} 
  158.                                                                             {% if ticket.operation.getKeyValueByValue('Cluster') and ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Cluster')) != null %}
  159.                                                                                 Cluster {{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Cluster'))}}
  160.                                                                             {% endif %}
  161.                                                                         )</i>
  162.                                                                     {% endif %}
  163.                                                                 {% else %}
  164.                                                                     Operazione non riconosciuta
  165.                                                                 {% endif %}
  166.                                                             </td>
  167.                                                             <td id="ticket_supplier_{{ ticket.id }}">
  168.                                                                 {% if ticket.operation is not null %}
  169.                                                                     {{ ticket.operation.supplier }}{% if ticket.displayJsonValueByColumn('SLOT') != null %}<br><i>({{ ticket.displayJsonValueByColumn('SLOT') }})</i>{% endif %}
  170.                                                                 {% else %}
  171.                                                                     Fornitore non riconosciuto
  172.                                                                 {% endif %}
  173.                                                             </td>
  174.                                                             <td>{% if ticket.operationTariffAmount != null %}{{ ticket.operationTariffAmount.value|default() }}{% endif %}</td>
  175.                                                             <td>{% if ticket.idCity != null %}{{ ticket.idCity|translate_city_only }}{% endif %}</td>
  176.                                                             <td class="txt_a_c">{% if ticket.idProvince != null %}{{ ticket.idProvince|translate_province_sign }}{% endif %}</td>
  177.                                                             <td>{% if ticket.datetimeStart != null %}{{ ticket.datetimeStart|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  178.                                                             <td>{{ ticket.systemErrorDetails|raw }}</td>
  179.                                                             <td class="td_action"><a href="{{ path ('user_ticket_sheet', {'ticketId':ticket.id}) }}"><img class="icon_pr" data-bs-toggle="tooltip" title="Scheda" src="{{ asset(icon_sheet) }}"></a></td>
  180.                                                         </tr>
  181.                                                     {% endfor %}
  182.                                                 {% else %}
  183.                                                     {% include 'components/twig/notice_filter_no_match.html.twig' %}
  184.                                                 {% endif %}
  185.                                             </tbody>
  186.                                         </table>
  187.                                     </div>
  188.                                 </div>
  189.                             </div>
  190.                             {# To assign #}
  191.                             <div class="tab-content clearfix" id="toAssign">
  192.                                 {% set tickets = toAssignTickets %}
  193.                                 {% set number = 1 %}
  194.                                 {% set multipleSelection = [true, 1, ['print', 'assign', 'suspend', 'cancel', 'export']] %}
  195.                                 {% set hasEmailTakeCharge = false %}
  196.                                 {% set tabOpenValue = 'to_assign' %}
  197.                                 {% set tab = 'toAssign' %}
  198.                                 {% block ticketsTab %}
  199.                                     <div class="row">
  200.                                         <div class="col-12">
  201.                                             {% if multipleSelection[0] %}
  202.                                                 {% if 'assign' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_assign" href="javascript: void()" class="button button-3d button-mini button-grey f_right m_b_10p">Assegna a tecnico</a>{% endif %}
  203.                                                 {% if 'change' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_change" href="javascript: void()" class="button button-3d button-mini button-grey f_right m_b_10p">Cambia tecnico</a>{% endif %}
  204.                                                 {% if 'print' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_print" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Stampa</a>{% endif %}
  205.                                                 {% if 'suspend' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_suspend" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Sospendi</a>{% endif %}
  206.                                                 {% if 'suspend_end' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_suspend_end" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Sblocca sospensione</a>{% endif %}
  207.                                                 {% if 'approve' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_approve" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Approva sospensione</a>{% endif %}
  208.                                                 {% if 'cancel' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_cancel" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Annulla</a>{% endif %}
  209.                                                 {% if 'closed_portal' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_closed_portal" href="javascript: void()" class="button button-3d button-mini button-grey f_right m_b_10p">Chiuso su portale</a>{% endif %}
  210.                                                 {% if 'wrong' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_wrong" href="javascript: void()" class="button button-3d button-mini button-grey f_right m_b_10p">Errato</a>{% endif %}
  211.                                                 {% if 'delete' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_delete" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Elimina definitivamente</a>{% endif %}
  212.                                                 {% if 'urge' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_urge" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Sollecita</a>{% endif %}
  213.                                                 {% if 'export' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_export" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Esporta</a>{% endif %}
  214.                                             {% endif %}
  215.                                             {% if hasEmailTakeCharge %}<a href="javascript: sendEmailTakeCharge()" class="button button-3d button-mini button-green f_left m_b_10p">Invia email prendi in carico a tutti</a>{% endif %}
  216.                                         </div>
  217.                                         <div class="col-12 overflow_a">
  218.                                             <table class="table table-bordered table-hover font_12">
  219.                                                 <thead>
  220.                                                     <tr>
  221.                                                         <form method="get" action="{{ path ('user_ticket_list') }}" id="formFilter_{{ multipleSelection[1] }}">
  222.                                                             <td class="td_action" {% if multipleSelection[0] %}colspan="2"{% endif %}><a href="{{ path ('remove_filter', {'route':app.request.attributes.get('_route'), 'route_params':app.request.attributes.get('_route_params') }) }}" class="f_right" data-bs-toggle="tooltip" title="Escludi filtro"><img class="icon_red" src="{{ asset (icon_delete) }}"></a></td>
  223.                                                             <td><input type="text" class="form-control" id="input_number_{{ multipleSelection[1] }}" inputmode="search" name="number" value="{{ filters.number|default() }}" data-bs-toggle="tooltip" title="Puoi effettuare ricerche multiple inserendo valori separati da virgola [Es. 1234,5678,901]"/></td>
  224.                                                             <td><input type="text" class="form-control" id="input_termid_{{ multipleSelection[1] }}" inputmode="search" name="termid" value="{{ filters.termid|default() }}" data-bs-toggle="tooltip" title="Puoi effettuare ricerche multiple inserendo valori separati da virgola [Es. 1234,5678,901]"/></td>
  225.                                                             {% if global_company.actualCompany.tagTicketActive %}<td><input type="text" class="form-control" id="filter_tag_value_{{ number }}" readonly onClick="filterTags{{ number }}()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_tag_id_{{ number }}" name="tag" value="{{ filters.tag|default() }}"/></td>{% endif %}
  226.                                                             <td><input type="text" class="form-control" inputmode="search" name="client" value="{{ filters.client|default() }}"/></td>
  227.                                                             <td><input type="text" class="form-control" id="filter_operation_value_{{ number }}" readonly onClick="filterOperations{{ number }}()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_operation_id_{{ number }}" name="operation" value="{{ filters.operation|default() }}"/></td>
  228.                                                             <td><input type="text" class="form-control" id="filter_supplier_value_{{ number }}" readonly onClick="filterSuppliers{{ number }}()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_supplier_id_{{ number }}" name="supplier" value="{{ filters.supplier|default() }}"/></td>
  229.                                                             <td><input type="text" class="form-control" inputmode="search" name="tariff" value="{{ filters.tariff|default() }}"/></td>
  230.                                                             <td><input type="text" class="form-control" inputmode="search" name="city" value="{{ filters.city|default() }}"/></td>
  231.                                                             <td><input type="text" class="form-control" inputmode="search" name="province" value="{{ filters.province|default() }}"/></td>
  232.                                                             {% if tab != 'toAssign' %}
  233.                                                                 <td><input type="text" class="form-control" inputmode="search" name="technician" value="{{ filters.technician|default() }}"/></td>
  234.                                                             {% endif %}
  235.                                                             <td><input type="text" class="form-control daterange daterange1 font_12" id="daterange_{{ number }}_1" autocomplete="off" inputmode="search" name="datetimeStart" style="height: 38px" date-filter="range"/></td>
  236.                                                             {% if tab != 'closed' and tab != 'closedPortal' %}
  237.                                                                 <td><input type="text" class="form-control daterange daterange2 font_12" id="daterange_{{ number }}_2" autocomplete="off" inputmode="search" name="datetimeExpiration" style="height: 38px" date-filter="range"/></td>
  238.                                                             {% else %}
  239.                                                                 <td><input type="text" class="form-control daterange daterange3 font_12" id="daterange_{{ number }}_3" inputmode="search" autocomplete="off" name="datetimeEnd" style="height: 38px" date-filter="range"/></td>
  240.                                                             {% endif %}
  241.                                                             <td colspan="4" class="td_action"><button type="submit" class="btn bg_w f_left p_0p" data-bs-toggle="tooltip" title="Filtra"><img class="icon_green" src="{{ asset (icon_search) }}"></button></td>
  242.                                                             <input type="hidden" name="filter_tab" value="{{ tabOpenValue }}">
  243.                                                             <input id="sort_field_{{ multipleSelection[1] }}" type="hidden" name="sortField" value="{{ filters.sortField|default() }}"/>
  244.                                                             <input id="sort_order_{{ multipleSelection[1] }}" type="hidden" name="sortOrder" value="{{ filters.sortOrder|default() }}"/>
  245.                                                         </form>
  246.                                                     </tr>
  247.                                                     <tr class="bg_pr color_w">
  248.                                                         {% if multipleSelection[0] %}
  249.                                                             <th class="td_action txt_a_c">
  250.                                                                 <div class="switch" data-bs-toggle="tooltip" title="Seleziona tutti">
  251.                                                                     <input id="ticket_{{ multipleSelection[1] }}_all_checkboxes" class="switch-toggle switch-flat-mini switch-toggle-flat" type="checkbox" onChange="javascript: selectAll({{ multipleSelection[1] }})">
  252.                                                                     <label for="ticket_{{ multipleSelection[1] }}_all_checkboxes" class="m_b_none"></label>
  253.                                                                 </div>
  254.                                                             </th>
  255.                                                         {% endif %}
  256.                                                         <th class="td_w_40p txt_a_c">Stato</th>
  257.                                                         <th class="td_w_120p">N°<button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('t.number')" data-orderField="t.number" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  258.                                                         <th class="td_w_100p">Termid<button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('tt.code')" data-orderField="tt.code" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  259.                                                         {% if global_company.actualCompany.tagTicketActive %}<th class="td_w_100p">Tag</th>{% endif %}
  260.                                                         <th class="td_w_150p">Cliente<button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('c.nickname')" data-orderField="c.nickname" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  261.                                                         <th class="td_w_150p">Operazione <i style="font-weight:400">(Dettagli)</i><button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('o.value')" data-orderField="o.value" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  262.                                                         <th class="td_w_120p">Fornitore <i style="font-weight:400">(SLOT)</i><button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('s.name')" data-orderField="s.name" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  263.                                                         <th class="td_w_120p">Tariffa<button type="button" onClick="setOrderBy0('ot.value')" data-orderField="ot.value" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  264.                                                         <th class="td_w_180p">Città <i style="font-weight:400">(Indirizzo)</i><button type="button" onClick="setOrderBy1('t.idCity')" data-orderField="t.idCity" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  265.                                                         <th class="td_w_70p txt_a_c">Prov<button type="button" onClick="setOrderBy1('t.idProvince')" data-orderField="t.idProvince" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  266.                                                         {% if tab != 'toAssign' %}
  267.                                                             <th class="td_w_150p">Tecnico<button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('p.surname')" data-orderField="p.surname" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  268.                                                         {% endif %}
  269.                                                         <th class="td_w_130p txt_a_c">Data/Ora ricezione<button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('t.datetimeStart')" data-orderField="t.datetimeStart" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  270.                                                         {% if tab != 'closed' and tab != 'closedPortal' %}
  271.                                                             <th class="td_w_130p txt_a_c">Data/Ora scadenza<button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('t.datetimeExpiration')" data-orderField="t.datetimeExpiration" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>                                    
  272.                                                         {% else %}
  273.                                                             <th class="td_w_130p txt_a_c">Data/Ora chiusura<button type="button" onClick="setOrderBy{{ multipleSelection[1] }}('t.datetimeEnd')" data-orderField="t.datetimeEnd" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  274.                                                         {% endif %}
  275.                                                         <th class="td_w_50p txt_a_c">Note</th>
  276.                                                         <th></th>
  277.                                                     </tr>
  278.                                                 </thead>
  279.                                                 <tbody>
  280.                                                     {% if tickets|length > 0 %}
  281.                                                         {% for ticket in tickets %}
  282.                                                             <tr>
  283.                                                                 {% if multipleSelection[0] %}
  284.                                                                     <td class="td_w_30p">
  285.                                                                         <div class="switch">
  286.                                                                             <input id="ticket_checkbox_{{ ticket.id }}" class="switch-toggle switch-flat-mini switch-toggle-flat ticket_{{ multipleSelection[1] }}_checkbox" type="checkbox" value="{{ ticket.id }}" onChange="javascript: updateButtons({{ multipleSelection[1] }})">
  287.                                                                             <label for="ticket_checkbox_{{ ticket.id }}" class="m_b_none"></label>
  288.                                                                         </div>
  289.                                                                     </td>
  290.                                                                 {% endif %}
  291.                                                                 <td class="txt_a_c">{{ ticket.displayStatus('icon', settingProcessedActive)|raw }}</td>
  292.                                                                 <td id="ticket_number_{{ ticket.id }}">{{ ticket.number }}</td>
  293.                                                                 <td id="ticket_termid_{{ ticket.id }}">{{ ticket.termid }}</td>
  294.                                                                 {% if global_company.actualCompany.tagTicketActive %}<td id="ticket_tags_{{ ticket.id }}">{{ ticket.displayTags('icon')|raw }}</td>{% endif %}
  295.                                                                 <td id="ticket_client_{{ ticket.id }}">{{ ticket.client }}</td>
  296.                                                                 <td id="ticket_operation_{{ ticket.id }}">
  297.                                                                     {% if ticket.operation is not null %}
  298.                                                                         {{ ticket.operation.value }}{% if ticket.operation.getKeyValueByValue('Dettagli operazione') and ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli operazione')) != null %}<br><i>({{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Dettagli operazione')) }})</i>{% endif %}
  299.                                                                     {% else %}
  300.                                                                         Operazione non riconosciuta
  301.                                                                     {% endif %}
  302.                                                                 </td>
  303.                                                                 <td id="ticket_supplier_{{ ticket.id }}">
  304.                                                                     {% if ticket.supplier is not null %}
  305.                                                                         {{ ticket.supplier }}
  306.                                                                         {% if ticket.displayJsonValueByColumn('SLOT') != null %}<br><i>({{ ticket.displayJsonValueByColumn('SLOT') }})</i>{% endif %}
  307.                                                                     {% else %}
  308.                                                                         Fornitore non riconosciuto
  309.                                                                     {% endif %}
  310.                                                                 </td>
  311.                                                                 <td>{% if ticket.operationTariffAmount != null %}{{ ticket.operationTariffAmount.value|default() }}{% endif %}</td>
  312.                                                                 <td>{% if ticket.idCity != null %}{{ ticket.idCity|translate_city_only }}<br><i>({{ ticket.address }})</i>{% endif %}</td>
  313.                                                                 <td class="txt_a_c">{% if ticket.idProvince != null %}{{ ticket.idProvince|translate_province_sign }}{% endif %}</td>
  314.                                                                 {% if tab != 'toAssign' %}
  315.                                                                     <td>{{ ticket.technician }}</td>
  316.                                                                 {% endif %}
  317.                                                                 <td class="txt_a_c">{% if ticket.datetimeStart != null %}{{ ticket.datetimeStart|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  318.                                                                 {% if tab != 'closed' and tab != 'closedPortal' %}
  319.                                                                     <td class="txt_a_c">{% if ticket.datetimeExpiration != null %}{{ ticket.datetimeExpiration|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  320.                                                                 {% else %}
  321.                                                                     <td class="txt_a_c">{% if ticket.datetimeEnd != null %}{{ ticket.datetimeEnd|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  322.                                                                 {% endif %}
  323.                                                                 <td class="td_action"><a href="javascript: showNotes({{ ticket.id }})"><img class="icon_pr" data-bs-toggle="tooltip" title="Mostra note" src="{{ asset(icon_notes) }}"></a></td>
  324.                                                                 <td class="td_action"><a href="{{ path ('user_ticket_sheet', {'ticketId':ticket.id}) }}"><img class="icon_pr" data-bs-toggle="tooltip" title="Scheda" src="{{ asset(icon_sheet) }}"></a></td>
  325.                                                             </tr>
  326.                                                             <input type="hidden" id="ticket_anomaly_{{ ticket.id }}" value="{{ ticket.displayJsonReportValueByColumn('Anomalia') }}">
  327.                                                             <input type="hidden" id="ticket_client_notes_{{ ticket.id }}" value="{% if ticket.client != null %}{{ ticket.client.notes }}{% endif %}">
  328.                                                             <input type="hidden" id="ticket_client_time_{{ ticket.id }}" value="{% if ticket.client != null %}Orari apertura: {{ ticket.client.openings }} / Chiusure: {{ ticket.client.closures }}{% endif %}">
  329.                                                         {% endfor %}
  330.                                                     {% else %}
  331.                                                         {% include 'components/twig/notice_filter_no_match.html.twig' %}
  332.                                                     {% endif %}
  333.                                                 </tbody>
  334.                                             </table>
  335.                                         </div>
  336.                                         <div class="col-12 navigation txt_a_r">
  337.                                             {{ knp_pagination_render(tickets) }}
  338.                                         </div>
  339.                                     </div>
  340.                                 {% endblock %}
  341.                             </div>
  342.                             {# Assigned #}
  343.                             <div class="tab-content clearfix" id="assigned">
  344.                                 {% set tickets = assignedTickets %}
  345.                                 {% set number = 2 %}
  346.                                 {% set multipleSelection = [true, 2, ['print', 'suspend', 'cancel', 'change', 'urge', 'export']] %}
  347.                                 {% set hasEmailTakeCharge = true %}
  348.                                 {% set tabOpenValue = 'assigned' %}
  349.                                 {% set tab = 'assigned' %}
  350.                                 {{ block('ticketsTab') }}
  351.                             </div>
  352.                             {# Taken charge #}
  353.                             <div class="tab-content clearfix" id="takenCharge">
  354.                                 {% set tickets = takenChargeTickets %}
  355.                                 {% set number = 3 %}
  356.                                 {% if settingBackOffice %} {# SE ACCOUNT AGENZIA E BACKOFFICE GESTISCE TICKET #}
  357.                                     {% set multipleSelection = [true, 3, ['print', 'suspend', 'cancel', 'change', 'urge', 'export']] %}
  358.                                 {% else %}
  359.                                     {% set multipleSelection = [true, 3, ['suspend', 'cancel', 'change', 'urge', 'export']] %}
  360.                                 {% endif %}
  361.                                 {% set hasEmailTakeCharge = false %}
  362.                                 {% set tabOpenValue = 'taken_charge' %}
  363.                                 {% set tab = 'takenCharge' %}
  364.                                 {{ block('ticketsTab') }}
  365.                             </div>
  366.                             {# Suspension request #}
  367.                             <div class="tab-content clearfix" id="suspensionRequest">
  368.                                 {% set tickets = suspensionRequestTickets %}
  369.                                 {% set number = 4 %}
  370.                                 {% set multipleSelection = [true, 4, ['cancel', 'approve', 'export']] %}
  371.                                 {% set hasEmailTakeCharge = false %}
  372.                                 {% set tabOpenValue = 'suspension_request' %}
  373.                                 {% set tab = 'suspensionRequest' %}
  374.                                 {{ block('ticketsTab') }}
  375.                             </div>
  376.                             {# Suspended #}
  377.                             <div class="tab-content clearfix" id="suspended">
  378.                                 {% set tickets = suspendedTickets %}
  379.                                 {% set number = 5 %}
  380.                                 {% set multipleSelection = [true, 5, ['print', 'suspend_end', 'cancel', 'export']] %}
  381.                                 {% set hasEmailTakeCharge = false %}
  382.                                 {% set tabOpenValue = 'suspended' %}
  383.                                 {% set tab = 'suspended' %}
  384.                                 {{ block('ticketsTab') }}
  385.                             </div>
  386.                             {# Closed #}
  387.                             <div class="tab-content clearfix" id="closed">
  388.                                 {% set tickets = closedTickets %}
  389.                                 {% set number = 6 %}
  390.                                 {% set multipleSelection = [true, 6, ['closed_portal', 'export']] %}
  391.                                 {% set hasEmailTakeCharge = false %}
  392.                                 {% set tabOpenValue = 'closed' %}
  393.                                 {% set tab = 'closed' %}
  394.                                 {{ block('ticketsTab') }}
  395.                             </div>
  396.                             {# Closed on portal #}
  397.                             <div class="tab-content clearfix" id="closedPortal">
  398.                                 {% set tickets = closedPortalTickets %}
  399.                                 {% set number = 7 %}
  400.                                 {% set multipleSelection = [false, 7, ['export']] %}
  401.                                 {% set hasEmailTakeCharge = false %}
  402.                                 {% set tabOpenValue = 'closed_on_portal' %}
  403.                                 {% set tab = 'closedPortal' %}
  404.                                 {{ block('ticketsTab') }}
  405.                             </div>
  406.                             {# Canceled #}
  407.                             <div class="tab-content clearfix" id="canceled">
  408.                                 {% set tickets = canceledTickets %}
  409.                                 {% set number = 8 %}
  410.                                 {% set multipleSelection = [true, 8, ['wrong', 'export']] %}
  411.                                 {% set hasEmailTakeCharge = false %}
  412.                                 {% set tabOpenValue = 'canceled' %}
  413.                                 {% set tab = 'canceled' %}
  414.                                 {{ block('ticketsTab') }}
  415.                             </div>
  416.                             {# Wrong #}
  417.                             <div class="tab-content clearfix" id="wrong">
  418.                                 {% set tickets = wrongTickets %}
  419.                                 {% set number = 9 %}
  420.                                 {% set multipleSelection = [true, 9, ['delete', 'export']] %}
  421.                                 {% set hasEmailTakeCharge = false %}
  422.                                 {% set tabOpenValue = 'wrong' %}
  423.                                 {% set tab = 'wrong' %}
  424.                                 {{ block('ticketsTab') }}
  425.                             </div>
  426.                         </div>
  427.                     </div>
  428.                 </div>
  429.             {% elseif app.user.getAccountTypology == 'warehouse' %}
  430.                 {# Magazzino #}
  431.                 <div class="col-12">
  432.                     <div class="tabs clearfix">
  433.                         <ul class="tab-nav clearfix">
  434.                             <li>
  435.                                 <a id="btn_tab_to_assign" href="#toAssign" class="tab_session" data-filterTab="to_assign">
  436.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Da assegnare"><i class="icon-pencil-alt font_20"></i>{{ toAssignTickets.getTotalItemCount }}</span>
  437.                                     <span class="d-none d-lg-block">Da assegnare ({{ toAssignTickets.getTotalItemCount }})</span>
  438.                                 </a>
  439.                             </li>
  440.                             <li>
  441.                                 <a id="btn_tab_assigned" href="#assigned" class="tab_session" data-filterTab="assigned">
  442.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Assegnati"><i class="icon-tag font_20"></i>{{ assignedTickets.getTotalItemCount }}</span>
  443.                                     <span class="d-none d-lg-block">Assegnati ({{ assignedTickets.getTotalItemCount }})</span>
  444.                                 </a>
  445.                             </li>
  446.                             <li>
  447.                                 <a id="btn_tab_taken_charge" href="#takenCharge" class="tab_session" data-filterTab="taken_charge">
  448.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Presi in carico"><i class="icon-cog font_20"></i>{{ takenChargeTickets.getTotalItemCount }}</span>
  449.                                     <span class="d-none d-lg-block">Presi in carico ({{ takenChargeTickets.getTotalItemCount }})</span>
  450.                                 </a>
  451.                             </li>
  452.                             <li>
  453.                                 <a id="btn_tab_suspension_request" href="#suspensionRequest" class="tab_session" data-filterTab="suspension_request">
  454.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Richiesta sospensione"><i class="icon-clock font_20"></i>{{ suspensionRequestTickets.getTotalItemCount }}</span>
  455.                                     <span class="d-none d-lg-block">Richiesta sospensione ({{ suspensionRequestTickets.getTotalItemCount }})</span>
  456.                                 </a>
  457.                             </li>
  458.                             <li>
  459.                                 <a id="btn_tab_suspended" href="#suspended" class="tab_session" data-filterTab="suspended">
  460.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Sospesi"><i class="icon-clock font_20"></i>{{ suspendedTickets.getTotalItemCount }}</span>
  461.                                     <span class="d-none d-lg-block">Sospesi ({{ suspendedTickets.getTotalItemCount }})</span>
  462.                                 </a>
  463.                             </li>
  464.                             <li>
  465.                                 <a id="btn_tab_closed" href="#closed" class="tab_session" data-filterTab="closed">
  466.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Chiusi"><i class="icon-check font_20"></i>{{ closedTickets.getTotalItemCount }}</span>
  467.                                     <span class="d-none d-lg-block">Chiusi ({{ closedTickets.getTotalItemCount }})</span>
  468.                                 </a>
  469.                             </li>
  470.                             <li>
  471.                                 <a id="btn_tab_closed_on_portal" href="#closedPortal" class="tab_session" data-filterTab="closed_on_portal">
  472.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Chiusi su fornitore"><i class="icon-checkmark font_20"></i>{{ closedPortalTickets.getTotalItemCount }}</span>
  473.                                     <span class="d-none d-lg-block">Chiusi su fornitore ({{ closedPortalTickets.getTotalItemCount }})</span>
  474.                                 </a>
  475.                             </li>
  476.                             <li>
  477.                                 <a id="btn_tab_canceled" href="#canceled" class="tab_session" data-filterTab="canceled">
  478.                                     <span class="font_16 d-block d-lg-none" data-bs-toggle="tooltip" title="Annullati"><i class="icon-minus-sign font_20"></i>{{ canceledTickets.getTotalItemCount }}</span>
  479.                                     <span class="d-none d-lg-block">Annullati ({{ canceledTickets.getTotalItemCount }})</span>
  480.                                 </a>
  481.                             </li>
  482.                             <li>
  483.                                 <a id="btn_tab_wrong" href="#wrong" class="tab_session" data-filterTab="wrong">
  484.                                     <span class="font_16 d-block d-lg-none"data-bs-toggle="tooltip" title="Errati"><i class="icon-remove-sign font_20" ></i>{{ wrongTickets.getTotalItemCount }}</span>
  485.                                     <span class="d-none d-lg-block">Errati ({{ wrongTickets.getTotalItemCount }})</span>
  486.                                 </a>
  487.                             </li>
  488.                         </ul>
  489.                         <div class="tab-container">
  490.                             {# To assign #}
  491.                             <div class="tab-content clearfix" id="toAssign">
  492.                                 {% set tickets = toAssignTickets %}
  493.                                 {% set number = 1 %}
  494.                                 {% set tabOpenValue = 'to_assign' %}
  495.                                 {% set tab = 'toAssign' %}
  496.                                 {% block ticketsTabW %}
  497.                                     <div class="row">
  498.                                         <div class="col-12 overflow_a">
  499.                                             <table class="table table-bordered table-hover font_12">
  500.                                                 <thead>
  501.                                                     <tr>
  502.                                                         <form method="get" action="{{ path ('user_ticket_list') }}">
  503.                                                             <td class="td_action"><a href="{{ path ('remove_filter', {'route':app.request.attributes.get('_route'), 'route_params':app.request.attributes.get('_route_params') }) }}" class="f_right" data-bs-toggle="tooltip" title="Escludi filtro"><img class="icon_red" src="{{ asset (icon_delete) }}"></a></td>
  504.                                                             <td><input type="text" class="form-control" inputmode="search" name="number" value="{{ filters.number|default() }}"/></td>
  505.                                                             <td><input type="text" class="form-control" inputmode="search" name="termid" value="{{ filters.termid|default() }}"/></td>
  506.                                                             {% if global_company.actualCompany.tagTicketActive %}<td><input type="text" class="form-control" id="filter_tag_value_{{ number }}" readonly onClick="filterTags{{ number }}()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_tag_id_{{ number }}" name="tag" value="{{ filters.tag|default() }}"/></td>{% endif %}
  507.                                                             <td><input type="text" class="form-control" inputmode="search" name="client" value="{{ filters.client|default() }}"/></td>
  508.                                                             <td><input type="text" class="form-control" inputmode="search" name="operation" value="{{ filters.operation|default() }}"/></td>
  509.                                                             <td><input type="text" class="form-control" id="filter_supplier_value_{{ number }}" readonly onClick="filterSuppliers{{ number }}()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_supplier_id_{{ number }}" name="supplier" value="{{ filters.supplier|default() }}"/></td>
  510.                                                             <td><input type="text" class="form-control" inputmode="search" name="tariff" value="{{ filters.tariff|default() }}"/></td>
  511.                                                             <td><input type="text" class="form-control" inputmode="search" name="city" value="{{ filters.city|default() }}"/></td>
  512.                                                             <td><input type="text" class="form-control" inputmode="search" name="province" value="{{ filters.province|default() }}"/></td>
  513.                                                             {% if tab != 'toAssign' %}
  514.                                                                 <td><input type="text" class="form-control" inputmode="search" name="technician" value="{{ filters.technician|default() }}"/></td>
  515.                                                             {% endif %}
  516.                                                             <td><input type="text" class="form-control daterange daterange1 font_12" inputmode="search" autocomplete="off" name="datetimeStart" style="height: 38px" date-filter="range"/></td>
  517.                                                             {% if tab != 'closed' and tab != 'closedPortal' %}
  518.                                                                 <td><input type="text" class="form-control daterange daterange2 font_12" inputmode="search" autocomplete="off" name="datetimeExpiration" style="height: 38px" date-filter="range"/></td>
  519.                                                             {% else %}
  520.                                                                 <td><input type="text" class="form-control daterange daterange3 font_12" inputmode="search" autocomplete="off" name="datetimeEnd" style="height: 38px" date-filter="range"/></td>
  521.                                                             {% endif %}
  522.                                                             <td class="td_action"><button type="submit" class="btn bg_w f_left p_0p" data-bs-toggle="tooltip" title="Filtra"><img class="icon_green" src="{{ asset (icon_search) }}"></button></td>
  523.                                                             <input type="hidden" name="filter_tab" value="{{ tabOpenValue }}">
  524.                                                         </form>
  525.                                                     </tr>
  526.                                                     <tr class="bg_pr color_w">
  527.                                                         <th class="td_w_40p txt_a_c">Stato</th>
  528.                                                         <th class="td_w_120p">N°</th>
  529.                                                         <th class="td_w_120p">Termid</th>
  530.                                                         {% if global_company.actualCompany.tagTicketActive %}<th class="td_w_100p">Tag</th>{% endif %}
  531.                                                         <th class="td_w_150p">Cliente</th>
  532.                                                         <th class="td_w_150p">Operazione</th>
  533.                                                         <th class="td_w_150p">Fornitore</th>
  534.                                                         <th class="td_w_130p">Tariffa</th>
  535.                                                         <th class="td_w_130p">Città</th>
  536.                                                         <th class="td_w_70p txt_a_c">Prov</th>
  537.                                                         {% if tab != 'toAssign' %}
  538.                                                             <th class="td_w_150p">Tecnico</th>
  539.                                                         {% endif %}
  540.                                                         <th class="td_w_130p txt_a_c">Data/Ora ricezione</th>
  541.                                                         {% if tab != 'closed' and tab != 'closedPortal' %}
  542.                                                             <th class="td_w_130p txt_a_c">Data/Ora scadenza</th>
  543.                                                         {% else %}
  544.                                                             <th class="td_w_130p txt_a_c">Data/Ora chiusura</th>
  545.                                                         {% endif %}
  546.                                                         <th class="td_w_50p txt_a_c">Note</th>
  547.                                                         <th></th>
  548.                                                     </tr>
  549.                                                 </thead>
  550.                                                 <tbody>
  551.                                                     {% if tickets|length > 0 %}
  552.                                                         {% for ticket in tickets %}
  553.                                                             <tr>
  554.                                                                 <td class="txt_a_c">{{ ticket.displayStatus('icon', settingProcessedActive)|raw }}</td>
  555.                                                                 <td id="ticket_number_{{ ticket.id }}">{{ ticket.number }}</td>
  556.                                                                 <td id="ticket_termid_{{ ticket.id }}">{{ ticket.termid }}</td>
  557.                                                                 {% if global_company.actualCompany.tagTicketActive %}<td id="ticket_tags_{{ ticket.id }}">{{ ticket.displayTags('icon')|raw }}</td>{% endif %}
  558.                                                                 <td id="ticket_client_{{ ticket.id }}">{{ ticket.client }}</td>
  559.                                                                 <td id="ticket_operation_{{ ticket.id }}">{{ ticket.operation.value }}</td>
  560.                                                                 <td id="ticket_supplier_{{ ticket.id }}">{{ ticket.supplier }}</td>
  561.                                                                 <td id="ticket_tariff_{{ ticket.id }}">{{ ticket.operationTariffAmount.value|default() }}</td>
  562.                                                                 <td>{% if ticket.idCity != null %}{{ ticket.idCity|translate_city_only }}{% endif %}</td>
  563.                                                                 <td class="txt_a_c">{% if ticket.idProvince != null %}{{ ticket.idProvince|translate_province_sign }}{% endif %}</td>
  564.                                                                 {% if tab != 'toAssign' %}
  565.                                                                     <td>{{ ticket.technician }}</td>
  566.                                                                 {% endif %}
  567.                                                                 <td class="txt_a_c">{% if ticket.datetimeStart != null %}{{ ticket.datetimeStart|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  568.                                                                 {% if tab != 'closed' and tab != 'closedPortal' %}
  569.                                                                     <td class="txt_a_c">{% if ticket.datetimeExpiration != null %}{{ ticket.datetimeExpiration|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  570.                                                                 {% else %}
  571.                                                                     <td class="txt_a_c">{% if ticket.datetimeEnd != null %}{{ ticket.datetimeEnd|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  572.                                                                 {% endif %}
  573.                                                                 <td class="td_action"><a href="javascript: showNotes({{ ticket.id }})"><img class="icon_pr" data-bs-toggle="tooltip" title="Mostra note" src="{{ asset(icon_notes) }}"></a></td>
  574.                                                                 <td class="td_action"><a href="{{ path ('user_ticket_sheet', {'ticketId':ticket.id}) }}"><img class="icon_pr" data-bs-toggle="tooltip" title="Scheda" src="{{ asset(icon_sheet) }}"></a></td>
  575.                                                             </tr>
  576.                                                             <input type="hidden" id="ticket_anomaly_{{ ticket.id }}" value="{{ ticket.displayJsonReportValueByColumn('Anomalia') }}">
  577.                                                             <input type="hidden" id="ticket_client_notes_{{ ticket.id }}" value="{% if ticket.client != null %}{{ ticket.client.notes }}{% endif %}">
  578.                                                             <input type="hidden" id="ticket_client_time_{{ ticket.id }}" value="{% if ticket.client != null %}Orari apertura: {{ ticket.client.openings }} / Chiusure: {{ ticket.client.closures }}{% endif %}">
  579.                                                         {% endfor %}
  580.                                                     {% else %}
  581.                                                         {% include 'components/twig/notice_filter_no_match.html.twig' with {'colspan':'100%'} %}
  582.                                                     {% endif %}
  583.                                                 </tbody>
  584.                                             </table>
  585.                                         </div>
  586.                                         <div class="col-12 navigation txt_a_r">
  587.                                             {{ knp_pagination_render(tickets) }}
  588.                                         </div>
  589.                                     </div>
  590.                                 {% endblock %}
  591.                             </div>
  592.                             {# Assigned #}
  593.                             <div class="tab-content clearfix" id="assigned">
  594.                                 {% set tickets = assignedTickets %}
  595.                                 {% set number = 2 %}
  596.                                 {% set hasEmailTakeCharge = true %}
  597.                                 {% set tabOpenValue = 'assigned' %}
  598.                                 {% set tab = 'assigned' %}
  599.                                 {{ block('ticketsTabW') }}
  600.                             </div>
  601.                             {# Taken charge #}
  602.                             <div class="tab-content clearfix" id="takenCharge">
  603.                                 {% set tickets = takenChargeTickets %}
  604.                                 {% set number = 3 %}
  605.                                 {% set hasEmailTakeCharge = false %}
  606.                                 {% set tabOpenValue = 'taken_charge' %}
  607.                                 {% set tab = 'takenCharge' %}
  608.                                 {{ block('ticketsTabW') }}
  609.                             </div>
  610.                             {# Suspension request #}
  611.                             <div class="tab-content clearfix" id="suspensionRequest">
  612.                                 {% set tickets = suspensionRequestTickets %}
  613.                                 {% set number = 4 %}
  614.                                 {% set hasEmailTakeCharge = false %}
  615.                                 {% set tabOpenValue = 'suspension_request' %}
  616.                                 {% set tab = 'suspensionRequest' %}
  617.                                 {{ block('ticketsTabW') }}
  618.                             </div>
  619.                             {# Suspended #}
  620.                             <div class="tab-content clearfix" id="suspended">
  621.                                 {% set tickets = suspendedTickets %}
  622.                                 {% set number = 5 %}
  623.                                 {% set hasEmailTakeCharge = false %}
  624.                                 {% set tabOpenValue = 'suspended' %}
  625.                                 {% set tab = 'suspended' %}
  626.                                 {{ block('ticketsTabW') }}
  627.                             </div>
  628.                             {# Closed #}
  629.                             <div class="tab-content clearfix" id="closed">
  630.                                 {% set tickets = closedTickets %}
  631.                                 {% set number = 6 %}
  632.                                 {% set hasEmailTakeCharge = false %}
  633.                                 {% set tabOpenValue = 'closed' %}
  634.                                 {% set tab = 'closed' %}
  635.                                 {{ block('ticketsTabW') }}
  636.                             </div>
  637.                             {# Closed on portal #}
  638.                             <div class="tab-content clearfix" id="closedPortal">
  639.                                 {% set tickets = closedPortalTickets %}
  640.                                 {% set number = 7 %}
  641.                                 {% set hasEmailTakeCharge = false %}
  642.                                 {% set tabOpenValue = 'closed_on_portal' %}
  643.                                 {% set tab = 'closedPortal' %}
  644.                                 {{ block('ticketsTabW') }}
  645.                             </div>
  646.                             {# Canceled #}
  647.                             <div class="tab-content clearfix" id="canceled">
  648.                                 {% set tickets = canceledTickets %}
  649.                                 {% set number = 8 %}
  650.                                 {% set hasEmailTakeCharge = false %}
  651.                                 {% set tabOpenValue = 'canceled' %}
  652.                                 {% set tab = 'canceled' %}
  653.                                 {{ block('ticketsTabW') }}
  654.                             </div>
  655.                             {# Wrong #}
  656.                             <div class="tab-content clearfix" id="wrong">
  657.                                 {% set tickets = wrongTickets %}
  658.                                 {% set number = 9 %}
  659.                                 {% set hasEmailTakeCharge = false %}
  660.                                 {% set tabOpenValue = 'wrong' %}
  661.                                 {% set tab = 'wrong' %}
  662.                                 {{ block('ticketsTabW') }}
  663.                             </div>
  664.                         </div>
  665.                     </div>
  666.                 </div>
  667.             {% elseif app.user.getAccountTypology == 'technician' %}
  668.                 {# Tecnici #}
  669.                 <div class="col-12">
  670.                     <div class="tabs clearfix">
  671.                         <ul class="tab-nav clearfix">
  672.                             <li>
  673.                                 <a id="btn_tab_assigned" href="#assigned" class="tab_session" data-filterTab="assigned">
  674.                                     <span class="d-block d-lg-none"><i class="icon-tag" data-bs-toggle="tooltip" title="Assegnati"></i><span class="font_16">({{ assignedTickets.getTotalItemCount }})</span></span>
  675.                                     <span class="d-none d-lg-block">Assegnati ({{ assignedTickets.getTotalItemCount }})</span>
  676.                                 </a>
  677.                             </li>
  678.                             <li>
  679.                                 <a id="btn_tab_taken_charge" href="#takenCharge" class="tab_session" data-filterTab="taken_charge">
  680.                                     <span class="d-block d-lg-none"><i class="icon-cog" data-bs-toggle="tooltip" title="Presi in carico"></i><span class="font_16">({{ takenChargeTickets.getTotalItemCount }})</span></span>
  681.                                     <span class="d-none d-lg-block">Presi in carico ({{ takenChargeTickets.getTotalItemCount }})</span>
  682.                                 </a>
  683.                             </li>
  684.                             <li>
  685.                                 <a id="btn_tab_suspension_request" href="#suspensionRequest" class="tab_session" data-filterTab="suspension_request">
  686.                                     <span class="d-block d-lg-none"><i class="icon-clock" data-bs-toggle="tooltip" title="Richiesta sospensione"></i><span class="font_16">({{ suspensionRequestTickets.getTotalItemCount }})</span></span>
  687.                                     <span class="d-none d-lg-block">Richiesta sospensione ({{ suspensionRequestTickets.getTotalItemCount }})</span>
  688.                                 </a>
  689.                             </li>
  690.                             <li>
  691.                                 <a id="btn_tab_suspended" href="#suspended" class="tab_session" data-filterTab="suspended">
  692.                                     <span class="d-block d-lg-none"><i class="icon-clock" data-bs-toggle="tooltip" title="Sospesi"></i><span class="font_16">({{ suspendedTickets.getTotalItemCount }})</span></span>
  693.                                     <span class="d-none d-lg-block">Sospesi ({{ suspendedTickets.getTotalItemCount }})</span>
  694.                                 </a>
  695.                             </li>
  696.                             <li>
  697.                                 <a id="btn_tab_closed" href="#closed" class="tab_session" data-filterTab="closed">
  698.                                     <span class="d-block d-lg-none"><i class="icon-check" data-bs-toggle="tooltip" title="Chiusi"></i><span class="font_16">({{ closedTickets.getTotalItemCount }})</span></span>
  699.                                     <span class="d-none d-lg-block">Chiusi ({{ closedTickets.getTotalItemCount }})</span>
  700.                                 </a>
  701.                             </li>
  702.                             <li>
  703.                                 <a id="btn_tab_closed_portal" href="#closedPortal" class="tab_session" data-filterTab="closed_portal">
  704.                                     <span class="d-block d-lg-none"><i class="icon-checkmark" data-bs-toggle="tooltip" title="Chiusi su fornitore"></i><span class="font_16">({{ closedPortalTickets.getTotalItemCount }})</span></span>
  705.                                     <span class="d-none d-lg-block">Chiusi su fornitore ({{ closedPortalTickets.getTotalItemCount }})</span>
  706.                                 </a>
  707.                             </li>
  708.                             <li>
  709.                                 <a id="btn_tab_canceled" href="#canceled" class="tab_session" data-filterTab="canceled">
  710.                                     <span class="d-block d-lg-none"><i class="icon-remove-sign" data-bs-toggle="tooltip" title="Annullati"></i><span class="font_16">({{ canceledTickets.getTotalItemCount }})</span></span>
  711.                                     <span class="d-none d-lg-block">Annullati ({{ canceledTickets.getTotalItemCount }})</span>
  712.                                 </a>
  713.                             </li>
  714.                         </ul>
  715.                         <div class="tab-container">
  716.                             {# Assigned #}
  717.                             <div class="tab-content clearfix" id="assigned">
  718.                                 {% set tickets = assignedTickets %}
  719.                                 {% set multipleSelection = [true, 11, ['print']] %}
  720.                                 {% set hasTakeOnCharge = true %}
  721.                                 {% set tabOpenValue = 'assigned' %}
  722.                                 {% block ticketsTab2 %}
  723.                                     <div class="row">
  724.                                         <div class="col-12">
  725.                                             {% if multipleSelection[0] %}
  726.                                                 {% if 'print' in multipleSelection[2] %}<a id="button_{{ multipleSelection[1] }}_print" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Stampa</a>{% endif %}
  727.                                                 {% if 'suspend_end' in multipleSelection[2] and settingTechUnlockSuspension.value %}<a id="button_{{ multipleSelection[1] }}_suspend_end" href="javascript: void(0)" class="button button-3d button-mini button-grey f_right m_b_10p">Sblocca sospensione</a>{% endif %}
  728.                                             {% endif %}
  729.                                             {% if hasTakeOnCharge %}<a href="javascript: ticketsTakeCharge()" class="button button-3d button-mini button-green f_right m_b_10p">Prendi in carico</a>{% endif %}
  730.                                         </div>
  731.                                         <div class="col-12 overflow_a">
  732.                                             <table class="table table-bordered table-hover">
  733.                                                 <thead>
  734.                                                     <tr>
  735.                                                         <form method="get" action="{{ path ('user_ticket_list') }}">
  736.                                                             <td class="td_action"><a href="{{ path ('remove_filter', {'route':app.request.attributes.get('_route'), 'route_params':app.request.attributes.get('_route_params') }) }}" class="f_right" data-bs-toggle="tooltip" title="Escludi filtro"><img class="icon_red" src="{{ asset (icon_delete) }}"></a></td>
  737.                                                             <td><input type="text" class="form-control" inputmode="search" name="all" value="{{ filters.all|default() }}"/></td>
  738.                                                             <td class="td_action"><button type="submit" class="btn bg_w f_left p_0p" data-bs-toggle="tooltip" title="Filtra"><img class="icon_green" src="{{ asset (icon_search) }}"></button></td>
  739.                                                             <input type="hidden" name="filter_tab" value="{{ tabOpenValue }}">
  740.                                                         </form>
  741.                                                     </tr>
  742.                                                     <tr class="bg_pr color_w">
  743.                                                         {% if multipleSelection[0] %}
  744.                                                             <th>
  745.                                                                 <div class="switch" data-bs-toggle="tooltip" title="Seleziona tutti">
  746.                                                                     <input id="ticket_{{ multipleSelection[1] }}_all_checkboxes" class="switch-toggle switch-flat-mini switch-toggle-flat" type="checkbox" onChange="javascript: selectAll({{ multipleSelection[1] }})">
  747.                                                                     <label for="ticket_{{ multipleSelection[1] }}_all_checkboxes" class="m_b_none"></label>
  748.                                                                 </div>
  749.                                                             </th>
  750.                                                         {% endif %}
  751.                                                         <th colspan="3"></th>
  752.                                                     </tr>
  753.                                                 </thead>
  754.                                                 <tbody>
  755.                                                     {% if tickets|length > 0 %}
  756.                                                         {% for ticket in tickets %}
  757.                                                             {% set ticketBg = "" %}
  758.                                                             {% set ticketTitle = "" %}
  759.                                                             {% if tabOpenValue != 'closed' and tabOpenValue != 'canceled' %}
  760.                                                                 {% if ticket.datetimeExpiration != null %}
  761.                                                                     {% if "now"|date('YmdHi') > ticket.datetimeExpiration|date('YmdHi') %}
  762.                                                                         {% set ticketBg = "bg_r_m_h" %}
  763.                                                                         {% set ticketTitle = "Scaduto" %}
  764.                                                                     {% elseif "now"|date('YmdHi') > ticket.datetimeExpiration|date_modify("-1 day")|date('YmdHi') %}
  765.                                                                         {% set ticketBg = "bg_r_m" %}
  766.                                                                         {% set ticketTitle = "Scade in un giorno" %}
  767.                                                                     {% elseif "now"|date('YmdHi') > ticket.datetimeExpiration|date_modify("-2 day")|date('YmdHi') %}
  768.                                                                         {% set ticketBg = "bg_r_l_m" %}
  769.                                                                         {% set ticketTitle = "Scade in due giorni" %}
  770.                                                                     {% endif %}
  771.                                                                 {% endif %}
  772.                                                             {% endif %}
  773.                                                                 <tr class="{{ ticketBg }}" data-bs-toggle="tooltip" title="{{ ticketTitle }}">
  774.                                                                     {% if multipleSelection[0] %}
  775.                                                                         <td class="td_action">
  776.                                                                             <div class="switch">
  777.                                                                                 <input id="ticket_checkbox_{{ ticket.id }}" class="switch-toggle switch-flat-mini switch-toggle-flat ticket_{{ multipleSelection[1] }}_checkbox" type="checkbox" value="{{ ticket.id }}" onChange="javascript: updateButtons({{ multipleSelection[1] }})">
  778.                                                                                 <label for="ticket_checkbox_{{ ticket.id }}" class="m_b_none"></label>
  779.                                                                             </div>
  780.                                                                         </td>
  781.                                                                     {% endif %}
  782.                                                                     <td colspan="2">
  783.                                                                         <a href="{{ path ('user_ticket_sheet', {'ticketId':ticket.id}) }}">
  784.                                                                             <table class="table table_no_padding m_b_none b_none font_12">
  785.                                                                                 <tr><td><b>Stato</b>: {{ ticket.displayStatus('string', settingProcessedActive)|raw }}</td></tr>
  786.                                                                                 <tr><td><b>N°</b>: <span id="ticket_number_{{ ticket.id }}">{{ ticket.number }}</span></td></tr>
  787.                                                                                 <tr><td><b>Termid</b>: <span id="ticket_termid_{{ ticket.id }}">{{ ticket.termid }}</span></td></tr>
  788.                                                                                 {% if global_company.actualCompany.tagTicketActive %}<tr><td><b>Tag</b>: <span id="ticket_tags_{{ ticket.id }}">{{ ticket.displayTags('icon')|raw }}</span></td></tr>{% endif %}
  789.                                                                                 <tr><td><b>Indirizzo</b>: {% include 'components/twig/display_address.html.twig' with {'type':'ticket', 'obj':ticket} %}</td></tr>
  790.                                                                                 <tr><td><b>Cliente</b>: <span id="ticket_client_{{ ticket.id }}">{{ ticket.client }}</span></td></tr>
  791.                                                                                 <tr><td><b>Cliente - Indirizzo</b>: {% if ticket.client != null %}{% include 'components/twig/display_address.html.twig' with {'type':'client', 'obj':ticket.client} %}{% else %}---{% endif %}</td></tr>
  792.                                                                                 <tr><td><b>Operazione</b>: <span id="ticket_operation_{{ ticket.id }}">{{ 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 %}</span></td></tr>
  793.                                                                                 <tr><td><b>Fornitore</b>: <span id="ticket_supplier_{{ ticket.id }}">{{ ticket.supplier }} {% if ticket.displayJsonValueByColumn('SLOT') != null %}<i>({{ ticket.displayJsonValueByColumn('SLOT') }})</i>{% endif %}</span></td></tr>
  794.                                                                                 <tr><td><b>Scadenza</b>: {% if ticket.datetimeExpiration != null %}{{ ticket.datetimeExpiration|date('d-m-Y H:i') }}{% else %}---{% endif %}</td></tr>
  795.                                                                                 <tr><td><b>ABI</b>: {% if ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('ABI')) %}{{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('ABI')) }}{% else %}---{% endif %}</td></tr>
  796.                                                                                 <tr><td><b>Risorsa</b>: {% if ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Risorsa')) %}{{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Risorsa')) }}{% else %}---{% endif %}</td></tr>
  797.                                                                                 <tr><td><b>Risorsa upgrade</b>: {% if ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Risorsa upgrade')) %}{{ ticket.displayJsonValueByColumn(ticket.operation.getKeyValueByValue('Risorsa upgrade')) }}{% else %}---{% endif %}</td></tr>
  798.                                                                             </table>
  799.                                                                         </a>
  800.                                                                     </td>
  801.                                                                 </tr>
  802.                                                         {% endfor %}
  803.                                                     {% else %}
  804.                                                         {% include 'components/twig/notice_filter_no_match.html.twig' %}
  805.                                                     {% endif %}
  806.                                                 </tbody>
  807.                                             </table>
  808.                                         </div>
  809.                                         <div class="col-12 navigation txt_a_r">
  810.                                             {{ knp_pagination_render(tickets) }}
  811.                                         </div>
  812.                                     </div>
  813.                                 {% endblock %}
  814.                             </div>
  815.                             {# Taken charge #}
  816.                             <div class="tab-content clearfix" id="takenCharge">
  817.                                 {% set tickets = takenChargeTickets %}
  818.                                 {% set multipleSelection = [true, 12, ['print']] %}
  819.                                 {% set hasTakeOnCharge = false %}
  820.                                 {% set tabOpenValue = 'taken_charge' %}
  821.                                 {{ block('ticketsTab2') }}
  822.                             </div>
  823.                             {# Suspension request #}
  824.                             <div class="tab-content clearfix" id="suspensionRequest">
  825.                                 {% set tickets = suspensionRequestTickets %}
  826.                                 {% set multipleSelection = [false, 13, null] %}
  827.                                 {% set hasTakeOnCharge = false %}
  828.                                 {% set tabOpenValue = 'suspension_request' %}
  829.                                 {{ block('ticketsTab2') }}
  830.                             </div>
  831.                             {# Suspended #}
  832.                             <div class="tab-content clearfix" id="suspended">
  833.                                 {% set tickets = suspendedTickets %}
  834.                                 {% set multipleSelection = [true, 14, ['print', 'suspend_end']] %}
  835.                                 {% set hasTakeOnCharge = false %}
  836.                                 {% set tabOpenValue = 'suspended' %}
  837.                                 {{ block('ticketsTab2') }}
  838.                             </div>
  839.                             {# Closed #}
  840.                             <div class="tab-content clearfix" id="closed">
  841.                                 {% set tickets = closedTickets %}
  842.                                 {% set multipleSelection = [false, 15, null] %}
  843.                                 {% set hasTakeOnCharge = false %}
  844.                                 {% set tabOpenValue = 'closed' %}
  845.                                 {{ block('ticketsTab2') }}
  846.                             </div>
  847.                             {# Closed portal #}
  848.                             <div class="tab-content clearfix" id="closedPortal">
  849.                                 {% set tickets = closedPortalTickets %}
  850.                                 {% set multipleSelection = [false, 16, null] %}
  851.                                 {% set hasTakeOnCharge = false %}
  852.                                 {% set tabOpenValue = 'closed_portal' %}
  853.                                 {{ block('ticketsTab2') }}
  854.                             </div>
  855.                             {# Canceled #}
  856.                             <div class="tab-content clearfix" id="canceled">
  857.                                 {% set tickets = canceledTickets %}
  858.                                 {% set multipleSelection = [false, 17, null] %}
  859.                                 {% set hasTakeOnCharge = false %}
  860.                                 {% set tabOpenValue = 'canceled' %}
  861.                                 {{ block('ticketsTab2') }}
  862.                             </div>
  863.                         </div>
  864.                     </div>
  865.                 </div>
  866.             {% endif %}
  867.         </div>
  868.     </section>
  869.     <div id="multipleModal" class="modal fade" tabindex="-1" role="dialog">
  870.         <div class="modal-dialog modal-lg" role="document">
  871.             <div class="modal-content">
  872.                 <form action="{{ path ('user_ticket_multiple_select_action') }}" method="post">
  873.                     <div class="modal-header"><h3 class="modal-title">Ticket - Selezione multipla</h3></div>
  874.                     <div class="modal-body">
  875.                         <div class="row">
  876.                             <div class="col-12 txt_a_c">
  877.                                 <label class="modal_subtitle">Attenzione!</label><br>
  878.                                 <label class="l_s_none m_b_none f_left">Ticket selezionati:</label>
  879.                                 <table class="table table-sm font_12 b_none txt_a_l" id="tableTickets"></table>
  880.                                 <div id="divSuspendEnd" class="display_n">
  881.                                     <label class="l_s_none m_b_none f_left">Motivazione di sblocco:</label>
  882.                                     <textarea id="textareaCausal" class="form-control min_h_150p" name="causal"></textarea>
  883.                                 </div>
  884.                                 <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> <span id="actionLabel"></span> tutti i ticket sovracitati.</p>
  885.                                 <p class="modal_paragraph">Si è sicuri di voler proseguire?</p>
  886.                             </div>
  887.                         </div>
  888.                         <input type="hidden" id="ticketsIds" name="ids">
  889.                         <input type="hidden" id="action" name="action">
  890.                         <input type="hidden" id="multipleTab" name="tab">
  891.                     </div>
  892.                     <div class="modal-footer">
  893.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  894.                         <button type="submit" class="button button-3d button-mini button-green f_right" id="multipleSubmitBtn">Conferma</button>
  895.                     </div>
  896.                 </form>
  897.             </div>
  898.         </div>
  899.     </div>
  900.     <div id="exportModal" class="modal fade" tabindex="-1" role="dialog">
  901.         <div class="modal-dialog modal-lg" role="document">
  902.             <div class="modal-content">
  903.                 <form action="{{ path ('user_ticket_list_export') }}" method="post" id="exportForm">
  904.                     <div class="modal-header"><h3 class="modal-title">Ticket - Selezione multipla</h3></div>
  905.                     <div class="modal-body">
  906.                         <div class="row">
  907.                             <div class="col-12 txt_a_c">
  908.                                 <label class="modal_subtitle">Attenzione!</label><br>
  909.                                 <label class="l_s_none m_b_none f_left">Ticket selezionati:</label>
  910.                                 <table class="table table-sm font_12 b_none txt_a_l" id="exportTableTickets"></table>
  911.                                 <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> esporterai in CSV tutti i ticket sovracitati.</p>
  912.                                 <p class="modal_paragraph">Si è sicuri di voler proseguire?</p>
  913.                             </div>
  914.                         </div>
  915.                         <input type="hidden" id="exportTicketsIds" name="ids">
  916.                     </div>
  917.                     <div class="modal-footer">
  918.                         <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  919.                         <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  920.                     </div>
  921.                 </form>
  922.             </div>
  923.         </div>
  924.     </div>
  925.     <div id="notesModal" class="modal fade" tabindex="-1" role="dialog">
  926.         <div class="modal-dialog modal-md" role="document">
  927.             <div class="modal-content">
  928.                 <div class="modal-header"><h3 class="modal-title">Note ticket: <span class="color_w" id="notes_number"></span></h3></div>
  929.                 <div class="modal-body">
  930.                     <div class="row">
  931.                         <div class="col-12 m_b_20p">
  932.                             <label class="l_s_none m_b_none">Anomalia:</label>
  933.                             <p class="font_14 m_b_none" id="notes_anomaly"></p>
  934.                         </div>
  935.                         <div class="col-12 m_b_20p">
  936.                             <label class="l_s_none m_b_none">Orari cliente:</label>
  937.                             <p class="font_14 m_b_none" id="notes_client_time"></p>
  938.                         </div>
  939.                         <div class="col-12">
  940.                             <label class="l_s_none m_b_none">Note cliente:</label>
  941.                             <p class="font_14 m_b_none" id="notes_client"></p>
  942.                         </div>
  943.                     </div>
  944.                 </div>
  945.                 <div class="modal-footer txt_a_c">
  946.                     <a href="javascript:void(0)" class="button button-3d button-mini button-red" data-bs-dismiss="modal">Esci</a>
  947.                 </div>
  948.             </div>
  949.         </div>
  950.     </div>
  951.     {% if app.user.getAccountTypology == 'agency' %}
  952.         <div id="assignTechnicianModal" class="modal fade" tabindex="-1" role="dialog">
  953.             <div class="modal-dialog" role="document">
  954.                 <div class="modal-content">
  955.                     {{ form_start(formAssignTechnician, {'attr': {'novalidate': 'novalidate'}}) }} 
  956.                         <div class="modal-header"><h3 class="modal-title">Ticket - <span id="tech_span" class="color_w"></span> tecnico</h3></div>
  957.                         <div class="modal-body">
  958.                             <div class="row">
  959.                                 <div class="col-12 form-group">
  960.                                     <label class="form_label">Tecnico (N° ticket: in corso / sospesi)*</label>
  961.                                     <div {{ form_errors(formAssignTechnician.technician) }}>
  962.                                         {{ form_widget(formAssignTechnician.technician, {'attr':{'class':'form-control form-select'}}) }}
  963.                                     </div>
  964.                                 </div>
  965.                             </div>
  966.                             <input type="hidden" id="technicianTicketsIds" name="ids">
  967.                         </div>
  968.                         <div class="modal-footer">
  969.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  970.                             <button type="submit" class="button button-3d button-mini button-green f_right" id="tech_btn"></button>
  971.                         </div>
  972.                     {{ form_end(formAssignTechnician) }}
  973.                 </div>
  974.             </div>
  975.         </div>
  976.         
  977.         <div id="emailTakeChargeModal" class="modal fade" tabindex="-1" role="dialog">
  978.             <div class="modal-dialog" role="document">
  979.                 <div class="modal-content">
  980.                     <form action="{{ path ('user_ticket_send_email_take_charge') }}" method="post">
  981.                         <div class="modal-header"><h3 class="modal-title">Ticket - Email di notifica prendi in carico</h3></div>
  982.                         <div class="modal-body">
  983.                             <div class="row">
  984.                                 <div class="col-12 txt_a_c">
  985.                                     <label class="modal_subtitle">Attenzione!</label>
  986.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> invierai a tutti i tecnici che hanno dei ticket assegnati ma non presi in carico la notifica.<br>Si è sicuri di voler proseguire?</p>
  987.                                 </div>
  988.                             </div>
  989.                         </div>
  990.                         <div class="modal-footer">
  991.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  992.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  993.                         </div>
  994.                     </form>
  995.                 </div>
  996.             </div>
  997.         </div>
  998.         
  999.         <div id="suspendTicketsModal" class="modal fade" tabindex="-1" role="dialog">
  1000.             <div class="modal-dialog modal-lg" role="document">
  1001.                 <div class="modal-content">
  1002.                     {{ form_start(formSuspension, {'attr': {'novalidate': 'novalidate'}}) }} 
  1003.                         <div class="modal-header"><h3 class="modal-title">Ticket - Sospendi massivo</h3></div>
  1004.                         <div class="modal-body">
  1005.                             <input type="hidden" id="suspendTicketsIds" name="ids">
  1006.                             {{ form_widget(formSuspension.date, {'attr':{'class':'display_n'}}) }}
  1007.                             {{ form_widget(formSuspension.timeHour, {'attr':{'class':'display_n'}}) }}
  1008.                             {{ form_widget(formSuspension.timeMinute, {'attr':{'class':'display_n'}}) }}
  1009.                             <div class="row">
  1010.                                 <div class="col-12 form-group">
  1011.                                     <label class="form_label">Esito*</label>
  1012.                                     <div {{ form_errors(formSuspension.outcome) }}>
  1013.                                         {{ form_widget(formSuspension.outcome, {'attr':{'class':'form-control form-select', 'onChange':'updateReferentAndMotivation()'}}) }}
  1014.                                     </div>
  1015.                                 </div>
  1016.                                 <div class="col-12 col-md-6 form-group" id="div_referent" style="display: none">
  1017.                                     <label class="form_label">Referente*</label>
  1018.                                     <div {{ form_errors(formSuspension.referent) }}>
  1019.                                         {{ form_widget(formSuspension.referent) }}
  1020.                                     </div>
  1021.                                 </div>
  1022.                                 <div class="col-12 col-md-6 form-group" id="div_phone" style="display: none">
  1023.                                     <label class="form_label">Telefono*</label>
  1024.                                     <div {{ form_errors(formSuspension.phone) }}>
  1025.                                         {{ form_widget(formSuspension.phone) }}
  1026.                                     </div>
  1027.                                 </div>
  1028.                                 <div class="col-12 form-group" id="div_photo" style="display: none">
  1029.                                     <label class="form_label">Foto*</label>
  1030.                                     <div {{ form_errors(formSuspension.file) }}>
  1031.                                         {{ form_widget(formSuspension.photoPath, {'attr': {'class':'display_n'}}) }}
  1032.                                         {{ form_widget(formSuspension.file, {'attr': {'class':'display_n'}}) }}
  1033.                                         <div class="input-group">
  1034.                                             <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>
  1035.                                             <input id="filename1" type="text" class="form-control" readonly>
  1036.                                         </div>
  1037.                                     </div>
  1038.                                 </div>
  1039.                                 <div class="col-12 form-group">
  1040.                                     <label class="form_label" id="label_motivation">Motivazione</label>
  1041.                                     <div {{ form_errors(formSuspension.motivation) }}>
  1042.                                         {{ form_widget(formSuspension.motivation) }}
  1043.                                     </div>
  1044.                                 </div>
  1045.                                 <div class="col-12 col-md-4 form-group">
  1046.                                     <label class="form_label">Sospeso da - Data*</label>
  1047.                                     <div {{ form_errors(formSuspension.dateFrom) }}>
  1048.                                         {{ form_widget(formSuspension.dateFrom, {'attr':{'class':'form-control'}}) }}
  1049.                                     </div>
  1050.                                 </div>
  1051.                                 <div class="col-6 col-md-4 form-group">
  1052.                                     <label class="form_label">Sospeso da - Ora*</label>
  1053.                                     <div {{ form_errors(formSuspension.timeFromHour) }}>
  1054.                                         {{ form_widget(formSuspension.timeFromHour, {'attr':{'class':'form-control form-select'}}) }}
  1055.                                     </div>
  1056.                                 </div>
  1057.                                 <div class="col-6 col-md-4 form-group">
  1058.                                     <label class="form_label">Sospeso da - Minuto*</label>
  1059.                                     <div {{ form_errors(formSuspension.timeFromMinute) }}>
  1060.                                         {{ form_widget(formSuspension.timeFromMinute, {'attr':{'class':'form-control form-select'}}) }}
  1061.                                     </div>
  1062.                                 </div>
  1063.                                 <div class="col-12 col-md-4 form-group" >
  1064.                                     <label class="form_label" id="label_suspension_to_date">Sospeso fino a - Data</label>
  1065.                                     <div {{ form_errors(formSuspension.dateTo) }}>
  1066.                                         {{ form_widget(formSuspension.dateTo, {'attr':{'class':'form-control'}}) }}
  1067.                                     </div>
  1068.                                 </div>
  1069.                                 <div class="col-6 col-md-4 form-group">
  1070.                                     <label class="form_label" id="label_suspension_to_time">Sospeso fino a - Ora</label>
  1071.                                     <div {{ form_errors(formSuspension.timeToHour) }}>
  1072.                                         {{ form_widget(formSuspension.timeToHour, {'attr':{'class':'form-control form-select'}}) }}
  1073.                                     </div>
  1074.                                 </div>
  1075.                                 <div class="col-6 col-md-4 form-group">
  1076.                                     <label class="form_label" id="label_suspension_to_minute">Sospeso fino a - Minuto</label>
  1077.                                     <div {{ form_errors(formSuspension.timeToMinute) }}>
  1078.                                         {{ form_widget(formSuspension.timeToMinute, {'attr':{'class':'form-control form-select'}}) }}
  1079.                                     </div>
  1080.                                 </div>
  1081.                             </div>
  1082.                         </div>
  1083.                         <div class="modal-footer">
  1084.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1085.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1086.                         </div>
  1087.                     {{ form_end(formSuspension) }}
  1088.                 </div>
  1089.             </div>
  1090.         </div>
  1091.     {% elseif app.user.getAccountTypology == 'technician' %}
  1092.         <div id="takeChargeModal" class="modal fade" tabindex="-1" role="dialog">
  1093.             <div class="modal-dialog" role="document">
  1094.                 <div class="modal-content">
  1095.                     <form action="{{ path ('user_ticket_take_charge') }}" method="post">
  1096.                         <div class="modal-header"><h3 class="modal-title">Ticket - Prendi in carico</h3></div>
  1097.                         <div class="modal-body">
  1098.                             <div class="row">
  1099.                                 <div class="col-12 txt_a_c">
  1100.                                     <label class="modal_subtitle">Attenzione!</label>
  1101.                                     <p class="modal_paragraph">Cliccando sul bottone <a class='button button-3d button-mini button-green' href='javascript:void(0)'>conferma</a> prenderai in carico tutti i ticket che ti sono stati assegnati.<br>Si è sicuri di voler proseguire?</p>
  1102.                                 </div>
  1103.                             </div>
  1104.                         </div>
  1105.                         <div class="modal-footer">
  1106.                             <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  1107.                             <button type="submit" class="button button-3d button-mini button-green f_right">Conferma</button>
  1108.                         </div>
  1109.                     </form>
  1110.                 </div>
  1111.             </div>
  1112.         </div>
  1113.     {% endif %}
  1114.     {% if app.user.getAccountTypology == 'agency' or app.user.getAccountTypology == 'warehouse' %}
  1115.         {% if global_company.actualCompany.tagTicketActive %}
  1116.             {% include 'components/modals/filter_tag.html.twig' with {'number':0, 'tag':tags} %}
  1117.             {% include 'components/modals/filter_tag.html.twig' with {'number':1, 'tag':tags} %}
  1118.             {% include 'components/modals/filter_tag.html.twig' with {'number':2, 'tag':tags} %}
  1119.             {% include 'components/modals/filter_tag.html.twig' with {'number':3, 'tag':tags} %}
  1120.             {% include 'components/modals/filter_tag.html.twig' with {'number':4, 'tag':tags} %}
  1121.             {% include 'components/modals/filter_tag.html.twig' with {'number':5, 'tag':tags} %}
  1122.             {% include 'components/modals/filter_tag.html.twig' with {'number':6, 'tag':tags} %}
  1123.             {% include 'components/modals/filter_tag.html.twig' with {'number':7, 'tag':tags} %}
  1124.             {% include 'components/modals/filter_tag.html.twig' with {'number':8, 'tag':tags} %}
  1125.             {% include 'components/modals/filter_tag.html.twig' with {'number':9, 'tag':tags} %}
  1126.         {% endif %}
  1127.         {% include 'components/modals/filter_supplier.html.twig' with {'number':0, 'suppliers':suppliers} %}
  1128.         {% include 'components/modals/filter_supplier.html.twig' with {'number':1, 'suppliers':suppliers} %}
  1129.         {% include 'components/modals/filter_supplier.html.twig' with {'number':2, 'suppliers':suppliers} %}
  1130.         {% include 'components/modals/filter_supplier.html.twig' with {'number':3, 'suppliers':suppliers} %}
  1131.         {% include 'components/modals/filter_supplier.html.twig' with {'number':4, 'suppliers':suppliers} %}
  1132.         {% include 'components/modals/filter_supplier.html.twig' with {'number':5, 'suppliers':suppliers} %}
  1133.         {% include 'components/modals/filter_supplier.html.twig' with {'number':6, 'suppliers':suppliers} %}
  1134.         {% include 'components/modals/filter_supplier.html.twig' with {'number':7, 'suppliers':suppliers} %}
  1135.         {% include 'components/modals/filter_supplier.html.twig' with {'number':8, 'suppliers':suppliers} %}
  1136.         {% include 'components/modals/filter_supplier.html.twig' with {'number':9, 'suppliers':suppliers} %}
  1137.         {% include 'components/modals/filter_operation.html.twig' with {'number':0, 'operations':operations} %}
  1138.         {% include 'components/modals/filter_operation.html.twig' with {'number':1, 'operations':operations} %}
  1139.         {% include 'components/modals/filter_operation.html.twig' with {'number':2, 'operations':operations} %}
  1140.         {% include 'components/modals/filter_operation.html.twig' with {'number':3, 'operations':operations} %}
  1141.         {% include 'components/modals/filter_operation.html.twig' with {'number':4, 'operations':operations} %}
  1142.         {% include 'components/modals/filter_operation.html.twig' with {'number':5, 'operations':operations} %}
  1143.         {% include 'components/modals/filter_operation.html.twig' with {'number':6, 'operations':operations} %}
  1144.         {% include 'components/modals/filter_operation.html.twig' with {'number':7, 'operations':operations} %}
  1145.         {% include 'components/modals/filter_operation.html.twig' with {'number':8, 'operations':operations} %}
  1146.         {% include 'components/modals/filter_operation.html.twig' with {'number':9, 'operations':operations} %}
  1147.     {% endif %}
  1148. {% endblock %}
  1149. {% block javascripts %}
  1150. {{ parent() }}
  1151. {% if app.user.getAccountTypology == 'agency' or app.user.getAccountTypology == 'warehouse' %}
  1152.     {% include 'components/js/sort_js.html.twig' with {'number':0, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_0', 'sort_order':'sort_order_0', 'formName':'formFilter_0', 'arrowClass':'filter_arrow'} %}
  1153.     {% include 'components/js/sort_js.html.twig' with {'number':1, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_1', 'sort_order':'sort_order_1', 'formName':'formFilter_1', 'arrowClass':'filter_arrow'} %}
  1154.     {% include 'components/js/sort_js.html.twig' with {'number':2, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_2', 'sort_order':'sort_order_2', 'formName':'formFilter_2', 'arrowClass':'filter_arrow'} %}
  1155.     {% include 'components/js/sort_js.html.twig' with {'number':3, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_3', 'sort_order':'sort_order_3', 'formName':'formFilter_3', 'arrowClass':'filter_arrow'} %}
  1156.     {% include 'components/js/sort_js.html.twig' with {'number':4, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_4', 'sort_order':'sort_order_4', 'formName':'formFilter_4', 'arrowClass':'filter_arrow'} %}
  1157.     {% include 'components/js/sort_js.html.twig' with {'number':5, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_5', 'sort_order':'sort_order_5', 'formName':'formFilter_5', 'arrowClass':'filter_arrow'} %}
  1158.     {% include 'components/js/sort_js.html.twig' with {'number':6, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_6', 'sort_order':'sort_order_6', 'formName':'formFilter_6', 'arrowClass':'filter_arrow'} %}
  1159.     {% include 'components/js/sort_js.html.twig' with {'number':7, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_7', 'sort_order':'sort_order_7', 'formName':'formFilter_7', 'arrowClass':'filter_arrow'} %}
  1160.     {% include 'components/js/sort_js.html.twig' with {'number':8, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_8', 'sort_order':'sort_order_8', 'formName':'formFilter_8', 'arrowClass':'filter_arrow'} %}
  1161.     {% include 'components/js/sort_js.html.twig' with {'number':9, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field_9', 'sort_order':'sort_order_9', 'formName':'formFilter_9', 'arrowClass':'filter_arrow'} %}
  1162.     {% if global_company.actualCompany.tagTicketActive %}
  1163.         {% include 'components/js/filter_tag_js.html.twig' with {'number':0, 'tags':tags, 'filterTag':filters.tag} %}
  1164.         {% include 'components/js/filter_tag_js.html.twig' with {'number':1, 'tags':tags, 'filterTag':filters.tag} %}
  1165.         {% include 'components/js/filter_tag_js.html.twig' with {'number':2, 'tags':tags, 'filterTag':filters.tag} %}
  1166.         {% include 'components/js/filter_tag_js.html.twig' with {'number':3, 'tags':tags, 'filterTag':filters.tag} %}
  1167.         {% include 'components/js/filter_tag_js.html.twig' with {'number':4, 'tags':tags, 'filterTag':filters.tag} %}
  1168.         {% include 'components/js/filter_tag_js.html.twig' with {'number':5, 'tags':tags, 'filterTag':filters.tag} %}
  1169.         {% include 'components/js/filter_tag_js.html.twig' with {'number':6, 'tags':tags, 'filterTag':filters.tag} %}
  1170.         {% include 'components/js/filter_tag_js.html.twig' with {'number':7, 'tags':tags, 'filterTag':filters.tag} %}
  1171.         {% include 'components/js/filter_tag_js.html.twig' with {'number':8, 'tags':tags, 'filterTag':filters.tag} %}
  1172.         {% include 'components/js/filter_tag_js.html.twig' with {'number':9, 'tags':tags, 'filterTag':filters.tag} %}
  1173.     {% endif %}
  1174.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':0, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1175.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':1, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1176.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':2, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1177.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':3, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1178.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':4, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1179.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':5, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1180.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':6, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1181.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':7, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1182.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':8, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1183.     {% include 'components/js/filter_supplier_js.html.twig' with {'number':9, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  1184.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':0, 'operations':operations, 'filterOperation':filters.operation} %}
  1185.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':1, 'operations':operations, 'filterOperation':filters.operation} %}
  1186.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':2, 'operations':operations, 'filterOperation':filters.operation} %}
  1187.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':3, 'operations':operations, 'filterOperation':filters.operation} %}
  1188.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':4, 'operations':operations, 'filterOperation':filters.operation} %}
  1189.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':5, 'operations':operations, 'filterOperation':filters.operation} %}
  1190.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':6, 'operations':operations, 'filterOperation':filters.operation} %}
  1191.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':7, 'operations':operations, 'filterOperation':filters.operation} %}
  1192.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':8, 'operations':operations, 'filterOperation':filters.operation} %}
  1193.     {% include 'components/js/filter_operation_group_js.html.twig' with {'number':9, 'operations':operations, 'filterOperation':filters.operation} %}
  1194.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_0', 'format':'DD-MM-YYYY HH:mm'} %}
  1195.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_1_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1196.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_2_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1197.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_3_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1198.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_4_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1199.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_5_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1200.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_6_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1201.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_7_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1202.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_8_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1203.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_9_1', 'format':'DD-MM-YYYY HH:mm'} %}
  1204.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_1_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1205.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_2_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1206.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_3_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1207.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_4_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1208.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_5_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1209.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_6_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1210.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_7_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1211.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_8_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1212.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_9_2', 'format':'DD-MM-YYYY HH:mm'} %}
  1213.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_1_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1214.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_2_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1215.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_3_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1216.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_4_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1217.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_5_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1218.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_6_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1219.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_7_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1220.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_8_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1221.     {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange_9_3', 'format':'DD-MM-YYYY HH:mm'} %}
  1222.     {% include 'components/js/upload_file_js.html.twig' with {'number':'1', 'file':'form_suspension_file', 'path':'form_suspension_photoPath'} %}
  1223.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_0'} %}
  1224.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_0'} %}
  1225.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_1'} %}
  1226.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_1'} %}
  1227.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_2'} %}
  1228.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_2'} %}
  1229.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_3'} %}
  1230.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_3'} %}
  1231.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_4'} %}
  1232.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_4'} %}
  1233.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_5'} %}
  1234.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_5'} %}
  1235.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_6'} %}
  1236.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_6'} %}
  1237.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_7'} %}
  1238.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_7'} %}
  1239.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_8'} %}
  1240.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_8'} %}
  1241.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_number_9'} %}
  1242.     {% include 'components/js/paste_multi_value_js.html.twig' with {'id':'input_termid_9'} %}
  1243. {% endif %}
  1244. <script>
  1245.     $(document).ready(function(){
  1246.         {% if app.session.get('tab_operation_group') != null %}
  1247.             var operationGroupInputs = document.getElementsByClassName('operation_group_input');
  1248.             for(i=0; i<operationGroupInputs.length; i++){
  1249.                 operationGroupInputs.value = "{{ app.session.get('tab_operation_group') }}";
  1250.             }
  1251.             {% do app.session.remove('tab_operation_group') %}
  1252.             {% do app.session.remove('tab_technician') %}
  1253.         {% endif %}
  1254.         {% if app.session.get('ticketsError') != null %}
  1255.             document.getElementById('ticketsIds').value = "{{ app.session.get('ticketsIds') }}";
  1256.             document.getElementById('action').value = "{{ app.session.get('ticketsAction') }}";
  1257.             var ticketsIds = "{{ app.session.get('ticketsIds') }}";
  1258.             var table = document.getElementById('tableTickets');
  1259.             table.innerHTML = '<tr><th>Numero</th><th>Cliente</th><th>Operazione</th><th>Fornitore</th></tr>';
  1260.             for(i=0; i<ticketsIds.length; i++){
  1261.                 var tr = document.createElement('tr');
  1262.                 var td1 = document.createElement('td');
  1263.                 var td2 = document.createElement('td');
  1264.                 var td3 = document.createElement('td');
  1265.                 var td4 = document.createElement('td');
  1266.                 td1.innerHTML = document.getElementById('ticket_number_' + ticketsIds[i]).innerHTML;
  1267.                 td2.innerHTML = document.getElementById('ticket_client_' + ticketsIds[i]).innerHTML;
  1268.                 td3.innerHTML = document.getElementById('ticket_operation_' + ticketsIds[i]).innerHTML;
  1269.                 td4.innerHTML = document.getElementById('ticket_supplier_' + ticketsIds[i]).innerHTML;
  1270.                 tr.appendChild(td1);
  1271.                 tr.appendChild(td2);
  1272.                 tr.appendChild(td3);
  1273.                 tr.appendChild(td4);
  1274.                 table.appendChild(tr);
  1275.             }
  1276.             switch("{{ app.session.get('ticketsAction') }}"){
  1277.                 case 'suspend_end':
  1278.                     document.getElementById('actionLabel').innerHTML = 'sbloccherai la sospensione per';
  1279.                     document.getElementById('divSuspendEnd').style.display = 'block';
  1280.                     document.getElementById('textareaCausal').style = 'border-color: #CB0C0F';
  1281.                     document.getElementById('textareaCausal').setAttribute('data-bs-toggle', 'tooltip');
  1282.                     document.getElementById('textareaCausal').setAttribute('data-bs-original-title', 'Inserisci la motivazione per sbloccare la sospensione');
  1283.                     break;
  1284.                 default: break;
  1285.             }
  1286.             $('#multipleModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1287.             {% do app.session.remove('ticketsError') %}
  1288.         {% endif %}
  1289.         
  1290.         {% if app.user.getAccountTypology == 'agency' or app.user.getAccountTypology == 'warehouse' %}
  1291.             var dateRanges = document.getElementsByClassName('daterange1');
  1292.             for(i=0; i<dateRanges.length; i++){
  1293.                 {% if filters.datetimeStart != null %}
  1294.                     dateRanges[i].value = "{{ filters.datetimeStart }}";
  1295.                 {% else %}
  1296.                     dateRanges[i].value = null;
  1297.                 {% endif %}
  1298.             }
  1299.             
  1300.             var dateRanges2 = document.getElementsByClassName('daterange2');
  1301.             for(i=0; i<dateRanges2.length; i++){
  1302.                 {% if filters.datetimeExpiration != null %}
  1303.                     dateRanges2[i].value = "{{ filters.datetimeExpiration }}";
  1304.                 {% else %}
  1305.                     dateRanges2[i].value = null;
  1306.                 {% endif %}
  1307.             }
  1308.             
  1309.             var dateRanges3 = document.getElementsByClassName('daterange3');
  1310.             for(i=0; i<dateRanges3.length; i++){
  1311.                 {% if filters.datetimeEnd != null %}
  1312.                     dateRanges3[i].value = "{{ filters.datetimeEnd }}";
  1313.                 {% else %}
  1314.                     dateRanges3[i].value = null;
  1315.                 {% endif %}
  1316.             }
  1317.         {% endif %}
  1318.     });
  1319.     {% if app.user.getAccountTypology == 'agency' or app.user.getAccountTypology == 'warehouse' %}
  1320.         function assignTechnician(type, index){
  1321.             var checkboxes = document.getElementsByClassName('ticket_' + index + '_checkbox');
  1322.             const array = [];
  1323.             for(i=0; i<checkboxes.length; i++){
  1324.                 if(checkboxes[i].checked)
  1325.                     array.push(checkboxes[i].value);
  1326.             }
  1327.             
  1328.             document.getElementById('technicianTicketsIds').value = array;
  1329.             switch(type){
  1330.                 case 'assign': document.getElementById('tech_span').innerHTML = 'Assegna'; document.getElementById('tech_btn').innerHTML = 'Assegna'; break;
  1331.                 case 'change': document.getElementById('tech_span').innerHTML = 'Cambia'; document.getElementById('tech_btn').innerHTML = 'Cambia'; break;
  1332.                 default: break;
  1333.             }
  1334.             $('#assignTechnicianModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1335.         }
  1336.         function sendEmailTakeCharge(){
  1337.             $('#emailTakeChargeModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1338.         }
  1339.         
  1340.         function suspendTickets(index){
  1341.             var checkboxes = document.getElementsByClassName('ticket_' + index + '_checkbox');
  1342.             const array = [];
  1343.             for(i=0; i<checkboxes.length; i++){
  1344.                 if(checkboxes[i].checked)
  1345.                     array.push(checkboxes[i].value);
  1346.             }
  1347.             document.getElementById('suspendTicketsIds').value = array;
  1348.             $('#suspendTicketsModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1349.         }
  1350.         $('#form_suspension_dateFrom').datepicker({ autoclose: true, todayHighlight: true, format: "dd-mm-yyyy", endDate: "today" });
  1351.         $('#form_suspension_dateTo').datepicker({ autoclose: true, todayHighlight: true, format: "dd-mm-yyyy" });
  1352.         $(document).ready(function(){
  1353.             updateReferentAndMotivation();
  1354.             {% if app.session.get('openSuspensionModal') %}
  1355.                 document.getElementById('suspendTicketsIds').value = "{{ app.session.get('openSuspensionModalIds') }}";
  1356.                 $('#suspendTicketsModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1357.                 var ids = "{{ app.session.get('openSuspensionModalIds') }}".split(',');
  1358.                 for(i=0; i<ids.length; i++) document.getElementById('ticket_checkbox_' + ids[i]).checked = true;
  1359.                 {% do app.session.remove('openSuspensionModal') %}
  1360.                 {% do app.session.remove('openSuspensionModalIds') %}
  1361.             {% endif %}
  1362.         });
  1363.         function updateReferentAndMotivation(){
  1364.             var outcomeId = document.getElementById('form_suspension_outcome').value;
  1365.             document.getElementById('label_suspension_to_date').innerHTML = 'Sospeso fino a - Data';
  1366.             document.getElementById('label_suspension_to_time').innerHTML = 'Sospeso fino a - Ora';
  1367.             document.getElementById('div_referent').style.display = 'none';
  1368.             document.getElementById('label_motivation').innerHTML = 'Motivazione';
  1369.             document.getElementById('div_phone').style.display = 'none';
  1370.             document.getElementById('div_photo').style.display = 'none';
  1371.             if(outcomeId != ""){
  1372.                 $.post('{{ path ("user_ticket_intervention_outcome_update") }}', {outcomeId: outcomeId}, function(response){ 
  1373.                     if(response.code == 200 && response.success){
  1374.                         if(response.suspensionTo) document.getElementById('label_suspension_to_date').innerHTML = 'Sospeso fino a - Data*';
  1375.                         if(response.suspensionTo) document.getElementById('label_suspension_to_time').innerHTML = 'Sospeso fino a - Ora*';
  1376.                         if(response.referent) document.getElementById('div_referent').style.display = 'block';
  1377.                         if(response.motivation) document.getElementById('label_motivation').innerHTML = 'Motivazione*';
  1378.                         if(response.phone) document.getElementById('div_phone').style.display = 'block';
  1379.                         if(response.photo) document.getElementById('div_photo').style.display = 'block';
  1380.                     }
  1381.                 }, "json");
  1382.             }
  1383.         }
  1384.     {% elseif app.user.getAccountTypology == 'technician' %}
  1385.         function ticketsTakeCharge(){
  1386.             $('#takeChargeModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1387.         }
  1388.     {% endif %}
  1389.     function selectAll(index){
  1390.         var checkboxes = document.getElementsByClassName('ticket_' + index + '_checkbox');
  1391.         var isSelect = document.getElementById("ticket_" + index + "_all_checkboxes").checked;
  1392.         for(i=0; i<checkboxes.length; i++)
  1393.             checkboxes[i].checked = isSelect;
  1394.         updateButtons(index);
  1395.     }
  1396.     function updateButtons(index) {
  1397.         const inputSelectAll = document.getElementById(`ticket_${index}_all_checkboxes`);
  1398.         const checkboxes = document.getElementsByClassName(`ticket_${index}_checkbox`);
  1399.         const GREEN = "button button-3d button-mini button-green f_right m_b_10p";
  1400.         const GREY  = "button button-3d button-mini button-grey f_right m_b_10p";
  1401.         const getBtn = (suffix) => document.getElementById(`button_${index}_${suffix}`);
  1402.         // Mappa pulsanti principali
  1403.         const buttons = {
  1404.             action: {
  1405.                 0: { btn: getBtn('wrong'),          href: () => `javascript: sendAction('wrong', ${index})` },
  1406.                 1: { btn: getBtn('assign'),         href: () => `javascript: assignTechnician('assign', ${index})` },
  1407.                 4: { btn: getBtn('cancel'),         href: () => `javascript: sendAction('cancel', ${index})` },
  1408.                 6: { btn: getBtn('closed_portal'),  href: () => `javascript: sendAction('closed_portal', ${index})` },
  1409.                 8: { btn: getBtn('wrong'),          href: () => `javascript: sendAction('wrong', ${index})` },
  1410.                 9: { btn: getBtn('delete'),         href: () => `javascript: sendAction('delete', ${index})` },
  1411.                 2: { btn: getBtn('print'),          href: () => `javascript: sendAction('print', ${index})` },
  1412.                 3: { btn: getBtn('print'),          href: () => `javascript: sendAction('print', ${index})` },
  1413.                 5: { btn: getBtn('print'),          href: () => `javascript: sendAction('print', ${index})` },
  1414.                 11:{ btn: getBtn('print'),          href: () => `javascript: sendAction('print', ${index})` },
  1415.                 12:{ btn: getBtn('print'),          href: () => `javascript: sendAction('print', ${index})` },
  1416.                 14:{ btn: getBtn('print'),          href: () => `javascript: sendAction('print', ${index})` }
  1417.             },
  1418.             secondary: {
  1419.                 1: { btn: getBtn('cancel'),        href: () => `javascript: sendAction('cancel', ${index})` },
  1420.                 2: { btn: getBtn('cancel'),        href: () => `javascript: sendAction('cancel', ${index})` },
  1421.                 3: { btn: getBtn('suspend'),       href: () => `javascript: suspendTickets(${index})` },
  1422.                 4: { btn: getBtn('approve'),       href: () => `javascript: sendAction('approve', ${index})` },
  1423.                 5: { btn: getBtn('suspend_end'),   href: () => `javascript: sendAction('suspend_end', ${index})` },
  1424.                 14:{ btn: getBtn('suspend_end'),   href: () => `javascript: sendAction('suspend_end', ${index})` }
  1425.             },
  1426.             third: {
  1427.                 1: { btn: getBtn('suspend'),       href: () => `javascript: suspendTickets(${index})` },
  1428.                 2: { btn: getBtn('suspend'),       href: () => `javascript: suspendTickets(${index})` },
  1429.                 3: { btn: getBtn('cancel'),        href: () => `javascript: sendAction('cancel', ${index})` },
  1430.                 5: { btn: getBtn('cancel'),        href: () => `javascript: sendAction('cancel', ${index})` }
  1431.             },
  1432.             extra: {
  1433.                 1: [
  1434.                     { btn: getBtn('print'),  href: () => `javascript: sendAction('print', ${index})` },
  1435.                     { btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }
  1436.                 ],
  1437.                 2: [
  1438.                     { btn: getBtn('change'), href: () => `javascript: assignTechnician('change', ${index})` },
  1439.                     { btn: getBtn('urge'),   href: () => `javascript: sendAction('urge', ${index})` },
  1440.                     { btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }
  1441.                 ],
  1442.                 3: [
  1443.                     { btn: getBtn('change'), href: () => `javascript: assignTechnician('change', ${index})` },
  1444.                     { btn: getBtn('urge'),   href: () => `javascript: sendAction('urge', ${index})` },
  1445.                     { btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }
  1446.                 ],
  1447.                 4: [{ btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }],
  1448.                 5: [{ btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }],
  1449.                 6: [{ btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }],
  1450.                 7: [{ btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }],
  1451.                 8: [{ btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }],
  1452.                 9: [{ btn: getBtn('export'), href: () => `javascript: sendAction('export', ${index})` }]
  1453.             }
  1454.         };
  1455.         // Checkbox logic
  1456.         let selected = [];
  1457.         let allSelected = true;
  1458.         for (let i = 0; i < checkboxes.length; i++) {
  1459.             if (checkboxes[i].checked) {
  1460.                 selected.push(checkboxes[i].value);
  1461.             } else {
  1462.                 allSelected = false;
  1463.             }
  1464.         }
  1465.         if (!allSelected) {
  1466.             inputSelectAll.checked = false;
  1467.         }
  1468.         const enable = selected.length > 0;
  1469.         // Utility per attivare/disattivare pulsanti
  1470.         const toggleButton = (btnObj) => {
  1471.             if (!btnObj || !btnObj.btn) return;
  1472.             btnObj.btn.className = enable ? GREEN : GREY;
  1473.             btnObj.btn.href = enable ? btnObj.href() : 'javascript: void(0)';
  1474.         };
  1475.         // Applica stato pulsanti
  1476.         toggleButton(buttons.action[index]);
  1477.         toggleButton(buttons.secondary[index]);
  1478.         toggleButton(buttons.third[index]);
  1479.         if (buttons.extra[index]) {
  1480.             buttons.extra[index].forEach(toggleButton);
  1481.         }
  1482.     }
  1483.     function sendAction(action, index){
  1484.         var checkboxes = document.getElementsByClassName('ticket_' + index + '_checkbox');
  1485.         const array = [];
  1486.         for(i=0; i<checkboxes.length; i++){
  1487.             if(checkboxes[i].checked)
  1488.                 array.push(checkboxes[i].value);
  1489.         }
  1490.         {% do app.session.set('printIndex', 0) %}
  1491.         document.getElementById('ticketsIds').value = array;
  1492.         document.getElementById('action').value = action;
  1493.         document.getElementById('divSuspendEnd').style.display = 'none';
  1494.         var table = document.getElementById('tableTickets');
  1495.         switch(action){
  1496.             case 'wrong': var label = 'renderai errati'; break;
  1497.             case 'print': var label = 'stamperai'; break;
  1498.             case 'take_charge': var label = 'prenderai in carico'; break;
  1499.             case 'suspend_end': var label = 'sbloccherai la sospensione per'; document.getElementById('divSuspendEnd').style.display = 'block'; break;
  1500.             case 'cancel': var label = 'annullerai'; break;
  1501.             case 'approve': var label = 'approverai le sospensioni di'; break;
  1502.             case 'delete': var label = 'eliminerai definitivamente'; break;
  1503.             case 'urge': var label = 'solleciterai il tecnico a completare'; break;
  1504.             case 'export':
  1505.                 var table = document.getElementById('exportTableTickets');
  1506.                 document.getElementById('exportTicketsIds').value = array;
  1507.                 break;
  1508.         }
  1509.         document.getElementById('actionLabel').innerHTML = label;
  1510.         table.innerHTML = '<tr><th>Numero</th><th>Cliente</th><th>Operazione</th><th>Fornitore</th></tr>';
  1511.         for(i=0; i<array.length; i++){
  1512.             var tr = document.createElement('tr');
  1513.             var td1 = document.createElement('td');
  1514.             var td2 = document.createElement('td');
  1515.             var td3 = document.createElement('td');
  1516.             var td4 = document.createElement('td');
  1517.             td1.innerHTML = document.getElementById('ticket_number_' + array[i]).innerHTML;
  1518.             td2.innerHTML = document.getElementById('ticket_client_' + array[i]).innerHTML;
  1519.             td3.innerHTML = document.getElementById('ticket_operation_' + array[i]).innerHTML;
  1520.             td4.innerHTML = document.getElementById('ticket_supplier_' + array[i]).innerHTML;
  1521.             tr.appendChild(td1);
  1522.             tr.appendChild(td2);
  1523.             tr.appendChild(td3);
  1524.             tr.appendChild(td4);
  1525.             table.appendChild(tr);
  1526.         }
  1527.         switch(index){            
  1528.             case 0: document.getElementById('multipleTab').value = 'error'; break;
  1529.             case 1: document.getElementById('multipleTab').value = 'to_assign'; break;
  1530.             case 2: document.getElementById('multipleTab').value = 'assigned'; break;
  1531.             case 3: document.getElementById('multipleTab').value = 'taken_charge'; break;
  1532.             case 4: document.getElementById('multipleTab').value = 'suspension_request'; break;
  1533.             case 5: document.getElementById('multipleTab').value = 'suspended'; break;
  1534.             case 6: document.getElementById('multipleTab').value = 'closed'; break;
  1535.             case 8: document.getElementById('multipleTab').value = 'canceled'; break;
  1536.             case 9: document.getElementById('multipleTab').value = 'wrong'; break;
  1537.             case 11: document.getElementById('multipleTab').value = 'assigned'; break;
  1538.             case 12: document.getElementById('multipleTab').value = 'taken_charge'; break;
  1539.             case 14: document.getElementById('multipleTab').value = 'suspended'; break;
  1540.             default: break;
  1541.         }
  1542.         switch(action){
  1543.             case 'export': $('#exportModal').modal({backdrop: 'static', keyboard: false}).modal("show"); break;
  1544.             default: $('#multipleModal').modal({backdrop: 'static', keyboard: false}).modal("show"); break;
  1545.         }
  1546.     }
  1547.     function showNotes(id){
  1548.         document.getElementById('notes_number').innerHTML = document.getElementById('ticket_number_' + id).innerHTML;
  1549.         document.getElementById('notes_anomaly').innerHTML = document.getElementById('ticket_anomaly_' + id).value;
  1550.         document.getElementById('notes_client_time').innerHTML = document.getElementById('ticket_client_notes_' + id).value;
  1551.         document.getElementById('notes_client').innerHTML = document.getElementById('ticket_client_time_' + id).value;
  1552.         $('#notesModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  1553.     }
  1554.     document.querySelector('#exportForm').addEventListener('submit', function (e) {
  1555.         e.preventDefault();
  1556.         const form = e.target;
  1557.         const formData = new FormData(form);
  1558.         fetch(form.action, { method: 'POST', body: formData})
  1559.         .then(response => {if (!response.ok) throw new Error('Errore export'); return response.blob(); })
  1560.         .then(blob => {
  1561.             const url = window.URL.createObjectURL(blob);
  1562.             const a = document.createElement('a');
  1563.             a.href = url;
  1564.             a.download = 'Ticket selezionati.csv';
  1565.             document.body.appendChild(a);
  1566.             a.click();
  1567.             a.remove();
  1568.             window.URL.revokeObjectURL(url);
  1569.             $('#exportModal').modal('hide');
  1570.             triggerPage();
  1571.         })
  1572.         .catch(err => {
  1573.             alert('Errore durante l\'esportazione');
  1574.             console.error(err);
  1575.         });
  1576.     });
  1577. </script>
  1578. {% endblock %}