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

Open in your IDE?
  1. {% extends 'role/user/ticket/index.html.twig' %}
  2. {% block title %}Ticket - Ricerca{% endblock %}
  3. {% block pageTitleH1 %}Ticket - Ricerca{% 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)">Ricerca</a></li>
  7. {% endblock %}
  8. {% block subMenuLeft %}
  9.     <li class="nav-item"><a class="nav-link" href="{{ path ('user_tickets') }}">Ticket</a></li>
  10. {% endblock %}
  11. {% block content %}
  12.     {% set first = true %}
  13.     {% set filterStatusString = '' %}
  14.     {% for ts in ticketStatuses %}
  15.         {% if ts.id in filters.status %}
  16.             {% if first %}{% set first = false %}{% else %}{% set filterStatusString = filterStatusString ~ ', ' %}{% endif %}
  17.             {% set filterStatusString = filterStatusString ~ ts.value %}
  18.         {% endif %}
  19.     {% endfor %}
  20.     <section class="m_tb_50p p_lr_30p">
  21.         <div class="row">
  22.             <div class="col-12">
  23.                 <h3 class="form_title">Ricerca tra i ticket ({{ ticketsCount }})
  24.                     <a href="{{ path ('user_ticket_search_filter_export') }}" class="button button-3d button-mini button-pr f_right m_b_none"><i class="icon-file-excel d-block d-lg-none m_r_none" data-bs-toggle="tooltip" title="Esporta filtrati"></i><span class="d-none d-lg-block">Esporta filtrati</span></a>
  25.                 </h3>
  26.                 <hr class="m_t_none">
  27.             </div>
  28.             <div class="col-12 overflow_a">
  29.                 <table class="table table-bordered table-hover font_12">
  30.                     <thead>
  31.                         <tr>
  32.                             <form method="get" action="{{ path ('user_ticket_search') }}" id="formFilter">
  33.                                 <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>
  34.                                 <td class="td_w_80p">
  35.                                     <input type="text" id="input_status_filter" class="form-control font_12" style="height: 38px" value="{{ filterStatusString }}" readonly onClick="filterStatusModalOpen()"/>
  36.                                     <input type="hidden" id="input_status" name="status" value="{{ filters.status }}">
  37.                                 </td>
  38.                                 <td><input type="text" class="form-control" inputmode="search" name="number" value="{{ filters.number|default() }}"/></td>
  39.                                 <td><input type="text" class="form-control" inputmode="search" name="termid" value="{{ filters.termid|default() }}"/></td>
  40.                                 <td><input type="text" class="form-control" inputmode="search" name="client" value="{{ filters.client|default() }}"/></td>
  41.                                 <td><input type="text" class="form-control" id="filter_operation_value_1" readonly onClick="filterOperations1()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_operation_id_1" name="operation" value="{{ filters.operation|default() }}"/></td>
  42.                                 <td><input type="text" class="form-control" id="filter_supplier_value_1" readonly onClick="filterSuppliers1()" data-bs-toggle="tooltip"/><input type="hidden" id="filter_supplier_id_1" name="supplier" value="{{ filters.supplier|default() }}"/></td>
  43.                                 <td><input type="text" class="form-control" inputmode="search" name="tariff" value="{{ filters.tariff|default() }}"/></td>
  44.                                 <td><input type="text" class="form-control" inputmode="search" name="city" value="{{ filters.city|default() }}"/></td>
  45.                                 <td><input type="text" class="form-control" inputmode="search" name="province" value="{{ filters.province|default() }}"/></td>
  46.                                 {% if app.user.accountTypology != 'technician' %}<td><input type="text" class="form-control" inputmode="search" name="technician" value="{{ filters.technician|default() }}"/></td>{% endif %}
  47.                                 <td><input type="text" class="form-control daterange font_12" inputmode="search" id="daterange1" autocomplete="off" name="datetimeStart" style="height: 38px" date-filter="range"/></td>
  48.                                 <td><input type="text" class="form-control daterange font_12" inputmode="search" id="daterange2" autocomplete="off" name="datetimeEnd" style="height: 38px" date-filter="range"/></td>
  49.                                 <td><input type="text" class="form-control daterange font_12" inputmode="search" id="daterange3" autocomplete="off" name="datetimeExpiration" style="height: 38px" date-filter="range"/></td>
  50.                                 <td class="td_w_90p"><input type="text" class="form-control" inputmode="search" name="waybill" value="{{ filters.waybill|default() }}"/></td>
  51.                                 <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>
  52.                                 <input id="sort_field" type="hidden" name="sortField" value="{{ filters.sortField|default() }}"/>
  53.                                 <input id="sort_order" type="hidden" name="sortOrder" value="{{ filters.sortOrder|default() }}"/>                                
  54.                             </form>
  55.                         </tr>
  56.                         <tr class="bg_pr color_w">
  57.                             <th></th>
  58.                             <th class="td_w_120p">Stato<button type="button" onClick="setOrderBy1('ts.value')" data-orderField="ts.value" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  59.                             <th class="td_w_120p">N°<button type="button" onClick="setOrderBy1('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>
  60.                             <th class="td_w_120p">Termid<button type="button" onClick="setOrderBy1('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>
  61.                             <th class="td_w_150p">Cliente<button type="button" onClick="setOrderBy1('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>
  62.                             <th class="td_w_150p">Operazione <i style="font-weight:400">(Dettagli)</i><button type="button" onClick="setOrderBy1('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>
  63.                             <th class="td_w_150p">Fornitore <i style="font-weight:400">(SLOT)</i><button type="button" onClick="setOrderBy1('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>
  64.                             <th class="td_w_150p">Tariffa<button type="button" onClick="setOrderBy1('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>
  65.                             <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>
  66.                             <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>
  67.                             {% if app.user.accountTypology != 'technician' %}<th class="td_w_150p">Tecnico<button type="button" onClick="setOrderBy1('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>{% endif %}
  68.                             <th class="td_w_140p txt_a_c">Data/Ora ricezione<button type="button" onClick="setOrderBy1('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>
  69.                             <th class="td_w_140p txt_a_c">Data/Ora chiusura<button type="button" onClick="setOrderBy1('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>
  70.                             <th class="td_w_140p txt_a_c">Data/Ora scadenza<button type="button" onClick="setOrderBy1('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>
  71.                             <th class="txt_a_c" colspan="2">Lettera di vettura<button type="button" onClick="setOrderBy1('t.waybill')" data-orderField="t.waybill" class="f_right filter_arrow"><img width="18" data-bs-toggle="tooltip" title="Ordina in ordine alfabetico"></button></th>
  72.                         </tr>
  73.                     </thead>
  74.                     <tbody>
  75.                         {% if tickets|length > 0 %}
  76.                             {% for ticket in tickets %} 
  77.                                 <tr>
  78.                                     <td><a href="{{ path ('user_ticket_sheet', {'ticketId':ticket.id}) }}"><img class="icon_action icon_pr" data-bs-toggle="tooltip" title="Scheda" src="{{ asset(icon_sheet) }}"></a></td>
  79.                                     <td>{{ ticket.displayStatus('string')|raw }}</td>
  80.                                     <td>{{ ticket.number }}</td>
  81.                                     <td>{{ ticket.termid }}</td>
  82.                                     <td>{{ ticket.client }}</td>
  83.                                     <td>{{ 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 %}</td>
  84.                                     <td>{{ ticket.supplier }}{% if ticket.displayJsonValueByColumn('SLOT') != null %}<br><i>({{ ticket.displayJsonValueByColumn('SLOT') }})</i>{% endif %}</td>
  85.                                     <td>{{ ticket.operationTariffAmount.value|default() }}</td>
  86.                                     <td>{% if ticket.idCity != null %}{{ ticket.idCity|translate_city_only }}<br><i>{{ ticket.address }}</i>{% endif %}</td>
  87.                                     <td class="txt_a_c">{% if ticket.idCity != null %}{{ ticket.idCity|translate_province_sign_from_city }}{% endif %}</td>
  88.                                     {% if app.user.accountTypology != 'technician' %}<td>{{ ticket.technician }}</td>{% endif %}
  89.                                     <td class="txt_a_c">{{ ticket.datetimeStart|date('d-m-Y H:i') }}</td>
  90.                                     <td class="txt_a_c">{% if ticket.datetimeEnd != null %}{{ ticket.datetimeEnd|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  91.                                     <td class="txt_a_c">{% if ticket.datetimeExpiration != null %}{{ ticket.datetimeExpiration|date('d-m-Y H:i') }}{% else %}---{% endif %}</td>
  92.                                     <td class="txt_a_c" colspan="2">{{ ticket.waybill }}</td>
  93.                                 </tr>
  94.                             {% endfor %}
  95.                         {% else %}
  96.                             {% include 'components/twig/notice_filter_no_match.html.twig' %}
  97.                         {% endif %}
  98.                     </tbody>
  99.                 </table>
  100.             </div>
  101.             <div class="col-12 navigation txt_a_r">
  102.                 {{ knp_pagination_render(tickets) }}
  103.             </div>
  104.         </div>
  105.     </section>
  106.         
  107.     <div id="filterStatusModal" class="modal fade" tabindex="-1" role="dialog">
  108.         <div class="modal-dialog" role="document">
  109.             <div class="modal-content">
  110.                 <div class="modal-header"><h3 class="modal-title">Seleziona stati da visualizzare</h3></div>
  111.                 <div class="modal-body">
  112.                     <table class="table table_no_padding m_b_none b_none">
  113.                         {% for ts in ticketStatuses %}
  114.                             <tr>
  115.                                 <td class="td_w_40p"><input class="switch-toggle switch-flat-mini switch-toggle-flat" type="checkbox" id="switch_{{ ts.id }}"><label class="m_auto" for="switch_{{ ts.id }}"></label></td>
  116.                                 <td><label class="m_b_none l_s_none f_w_500" id="label_{{ ts.id }}">{{ ts.value }}</label></td>
  117.                             </tr>
  118.                         {% endfor %}
  119.                     </table>
  120.                 </div>
  121.                 <div class="modal-footer txt_a_c">
  122.                     <a href="javascript:void(0)" class="button button-3d button-mini button-red f_left" data-bs-dismiss="modal">Annulla</a>
  123.                     <a href="javascript:filterStatusUpdate()" class="button button-3d button-mini button-green f_right">Conferma</a>
  124.                 </div>
  125.             </div>
  126.         </div>
  127.     </div>
  128.     {% include 'components/modals/filter_supplier.html.twig' with {'number':1, 'suppliers':suppliers} %}
  129.     {% include 'components/modals/filter_operation.html.twig' with {'number':1, 'operations':operations} %}
  130. {% endblock %}
  131. {% block javascripts %}
  132. {{ parent() }}
  133. {% include 'components/js/sort_js.html.twig' with {'number':1, 'actualSortField':filters.sortField, 'actualSortOrder':filters.sortOrder, 'sort_field':'sort_field', 'sort_order':'sort_order', 'formName':'formFilter', 'arrowClass':'filter_arrow'} %}
  134. {% include 'components/js/filter_supplier_js.html.twig' with {'number':1, 'suppliers':suppliers, 'filterSupplier':filters.supplier} %}
  135. {% include 'components/js/filter_operation_group_js.html.twig' with {'number':1, 'operations':operations, 'filterOperation':filters.operation} %}
  136. {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange1', 'format':'DD-MM-YYYY HH:mm'} %}
  137. {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange2', 'format':'DD-MM-YYYY HH:mm'} %}
  138. {% include 'components/js/daterangepicker_js.html.twig' with {'id':'daterange3', 'format':'DD-MM-YYYY HH:mm'} %}
  139. <script>
  140.     $(document).ready(function(){
  141.         {% if filters.datetimeStart != null %}
  142.             document.getElementById('daterange1').value = "{{ filters.datetimeStart }}";
  143.         {% else %}
  144.             document.getElementById('daterange1').value = null;
  145.         {% endif %}
  146.         {% if filters.datetimeEnd != null %}
  147.             document.getElementById('daterange2').value = "{{ filters.datetimeEnd }}";
  148.         {% else %}
  149.             document.getElementById('daterange2').value = null;
  150.         {% endif %}
  151.         {% if filters.datetimeExpiration != null %}
  152.             document.getElementById('daterange3').value = "{{ filters.datetimeExpiration }}";
  153.         {% else %}
  154.             document.getElementById('daterange3').value = null;
  155.         {% endif %}
  156.     });
  157.     function filterStatusModalOpen(){
  158.         if(document.getElementById('input_status').value != ''){
  159.             var ids = document.getElementById('input_status').value.split('-');
  160.             for(var i=0; i<ids.length; i++){
  161.                 document.getElementById('switch_' + ids[i]).checked = true;
  162.             }
  163.         }
  164.         $('#filterStatusModal').modal({backdrop: 'static', keyboard: false}).modal("show");
  165.     }
  166.     
  167.     function filterStatusUpdate(){
  168.         var ids = '';
  169.         var string = '';
  170.         var first = true;
  171.         {% for ts in ticketStatuses %}
  172.             if(document.getElementById('switch_{{ ts.id }}').checked){
  173.                 if(first)
  174.                     first = false;
  175.                 else{
  176.                     ids += '-';
  177.                     string += ', ';
  178.                 }
  179.                 ids += '{{ ts.id }}';
  180.                 string += '{{ ts.value }}';
  181.             }
  182.         {% endfor %}
  183.         document.getElementById('input_status').value = ids;
  184.         document.getElementById('input_status_filter').value = string;
  185.         $('#filterStatusModal').modal("hide");
  186.     }
  187. </script>
  188. {% endblock %}