HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/comfama.sports-crowd.com/resources/views/products/products.blade.php
@extends('modules.head') @section('contenido')
<style>
  /* Ensure that the demo table scrolls */
  /* th, */
  td {
    white-space: nowrap;
  }

  div.dataTables_wrapper {
    height: fit-content;
    margin: 0px 10px 0px 10px;
  }

  .dataTables_scrollBody {
    max-height: none !important;
  }
</style>
<div class="box-header">
  <a class="btn btn-app btnReportProducts" data-toggle="modal" data-target="#modal_import_products">
    <i class="fa fa-cloud-upload"></i> {{ Lang::get('messages.screen_products_tag41')}}
  </a>
  <a class="btn btn-app btnReportProducts" href="{{url('/products/export')}}">
    <i class="fa fa-cloud-download"></i> {{ Lang::get('messages.screen_products_tag42')}}
  </a>
  <a class="btn btn-app btnReportProducts" href="{{url('/products/exportCategories')}}">
    <i class="fa fa-cloud-download"></i> {{ Lang::get('messages.screen_products_tag57')}}
  </a>
  <a class="btn btn-app btnReportProducts" data-toggle="modal" data-target="#modal_import_categories">
    <i class="fa fa-cloud-upload"></i> {{ Lang::get('messages.screen_products_tag47')}}
  </a>
  <a class="btn btn-app btnReportProducts" data-toggle="modal" data-target="#modal_import_photos">
    <i class="fa fa-photo"></i> {{ Lang::get('messages.screen_products_tag52')}}
  </a>
  @if ($parameter->sync_shopify)
  <a class="btn btn-app btnReportProducts" id="sync_shopify">
    <i class="fa fa-refresh"></i>{{ Lang::get('messages.screen_products_tag63')}}
  </a>
  <a class="btn btn-app btnReportProducts hide" id="sync_shopify_spin">
    <i class="fa fa-refresh fa-spin"></i>{{ Lang::get('messages.screen_products_tag63')}}
  </a>
  @endif
  @if ($parameter->sync_woocommerce)
  <a class="btn btn-app btnReportProducts" id="sync_woocommerce">
    <i class="fa fa-refresh"></i>{{ Lang::get('messages.screen_products_tag64')}}
  </a>
  <a class="btn btn-app btnReportProducts hide" id="sync_woocommerce_spin">
    <i class="fa fa-refresh fa-spin"></i>{{ Lang::get('messages.screen_products_tag64')}}
  </a>
  @endif
  @if ($external_template)
  <a class="btn btn-app btnReportProducts" data-toggle="modal" data-target="#modal_import_products_external">
    <i class="fa fa-cloud-upload"></i> {{ Lang::get('messages.screen_products_tag56')}}
  </a>
  @endif
  @if ($parameter->show_create_product_button)
  <a class="auxiliar-black" href="{{url('/products/' . $storeType . '/add')}}">
    <button class="btn btnAdd pull-right">
      <i style="margin-right:5px;" class="fa fa-plus"></i>{{ Lang::get('messages.screen_products_tag2')}}
    </button></a>
</div>
@endif

<!-- List Data -->
<div class="box">
  <div class="box-header with-border">
    <div class="row">
      <div class="col-xs-2">
        <h3 class="box-title">{{ Lang::get('messages.screen_products_tag1')}}</h3>
      </div>
      <div class="col-xs-4">
        <select class="form-control" name="service_city" id="service_city" required>
          @foreach($services as $service)
          @if($db_name == $service->name_database)
          <option value="{{$service->name_database}}" selected="selected">{{$service->name}}</option>
          @else
          <option value="{{$service->name_database}}">{{$service->name}}</option>
          @endif
          @endforeach
        </select>
      </div>
      @if ($sucursal_products)
      <div class="col-xs-4 displayFlex">
        <div class="col-xs-2">
          <label for="change_sucursal_id">{{ Lang::get('messages.screen_products_tag55')}} </label>
        </div>
        <select class="form-control marginLeft35" name="change_sucursal_id" id="change_sucursal_id" required>
          @foreach($sucursals as $sucursal)
          @if($sucursal->id == 1)
          <option value="{{$sucursal->id}}" selected="selected">{{$sucursal->name}}</option>
          @else
          <option value="{{$sucursal->id}}">{{$sucursal->name}}</option>
          @endif
          @endforeach
        </select>
      </div>
      @endif
    </div>
  </div>

  <!-- /.box-header -->
  <div class="box-body table-responsive ">
    <table id="example2" class="stripe row-border order-column" style="width:100%" role="grid" aria-describedby="example2_info">
      <thead>
        <tr role="row">
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag4')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag3')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag5')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag6')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag7')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag14')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag15')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag16')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag17')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag18')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag19')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag20')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag21')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag22')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag31')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag23')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag13')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag11')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag12')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.max_unit_by_product')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag65')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag71')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag72')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Browser: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag70')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Engine version: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag8')}}</th>
          <th class="sorting" tabindex="0" aria-controls="example2" rowspan="1" colspan="1" aria-label="Engine version: activate to sort column ascending">{{ Lang::get('messages.screen_products_tag9')}}</th>
        </tr>
      </thead>
    </table>
  </div>
  <!-- /.box-body -->
</div>

<div class="modal fade" id="modal_import_products">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">{{ Lang::get('messages.screen_products_tag43')}}</h4>
      </div>
      <div class="modal-body">
        @if ($sucursal_products)
        <div class="row">
          <div class="col-xs-6">
            <div class="form-group">
              <label for="sucursal_id">{{ Lang::get('messages.screen_products_tag54')}} </label>
              <select class="form-control select2" name="sucursal_id" id="sucursal_id" required>
                <option disabled selected="selected"> Seleccionar </option>
                @foreach($sucursals as $sucursal)
                <option value="{{$sucursal->id}}">{{$sucursal->name}}</option>
                @endforeach
              </select>
            </div>
          </div>
        </div>
        @endif
        <div class="row">
          <div class="col-xs-12">
            <div class="form-group">
              <label for="importProducts">{{ Lang::get('messages.screen_products_tag44')}} </label>
              <input type="file" name="importProducts" id="importProducts" required>
            </div>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default pull-left" data-dismiss="modal">{{ Lang::get('messages.screen_products_tag38')}}</button>
          <button type="button" id="button-import-product" onclick="importFileProduct()" class="btn btn-primary">{{ Lang::get('messages.screen_products_tag41')}}</button>
          <button type="button" class="btn btn-primary displayNone" id="spinnerButtonProduct">
            <i class="fa fa-spinner fa-spin"></i>
          </button>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modal_import_products_external">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">{{ Lang::get('messages.screen_products_tag43')}}</h4>
      </div>
      <div class="modal-body">
        <div class="row hide">
          <div class="col-xs-12">
            <div class="form-group">
              <input type="number" name="statusSucursalProducts" id="statusSucursalProducts" value="{{$sucursal_products}}">
            </div>
          </div>
        </div>
        <div class="row">
          <div class="col-xs-12">
            <div class="form-group">
              <label for="importProductsExternal">{{ Lang::get('messages.screen_products_tag44')}} </label>
              <input type="file" name="importProductsExternal" id="importProductsExternal" required>
            </div>
          </div>
        </div>

        <div class="modal-footer">
          <button type="button" class="btn btn-default pull-left" data-dismiss="modal">{{ Lang::get('messages.screen_products_tag38')}}</button>
          <button type="button" id="button-import-product-external" onclick="importFileProductsExternal()" class="btn btn-primary">{{ Lang::get('messages.screen_products_tag41')}}</button>
          <button type="button" class="btn btn-primary displayNone" id="spinnerButtonProductExternal">
            <i class="fa fa-spinner fa-spin"></i>
          </button>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modal_import_categories">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">{{ Lang::get('messages.screen_products_tag48')}}</h4>
      </div>
      <div class="modal-body">
        @if ($sucursal_products)
        <div class="row">
          <div class="col-xs-6">
            <div class="form-group">
              <label for="categories_sucursal_id">{{ Lang::get('messages.screen_products_tag54')}} </label>
              <select class="form-control select2" name="categories_sucursal_id" id="categories_sucursal_id" required>
                <option disabled selected="selected"> Seleccionar </option>
                @foreach($sucursals as $sucursal)
                <option value="{{$sucursal->id}}">{{$sucursal->name}}</option>
                @endforeach
              </select>
            </div>
          </div>
        </div>
        @endif
        <div class="row">
          <div class="col-xs-12">
            <div class="form-group">
              <label for="importCategories">{{ Lang::get('messages.screen_products_tag44')}} </label>
              <input type="file" name="importCategories" id="importCategories" required>
            </div>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default pull-left" data-dismiss="modal">{{ Lang::get('messages.screen_products_tag38')}}</button>
          <button type="button" id="button-import-category" onclick="importFileCategories()" class="btn btn-primary">{{ Lang::get('messages.screen_products_tag41')}}</button>
          <button type="button" class="btn btn-primary displayNone" id="spinnerButtonCategory">
            <i class="fa fa-spinner fa-spin"></i>
          </button>
        </div>
      </div>
    </div>
  </div>
</div>

<div class="modal fade" id="modal_import_photos">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title">{{ Lang::get('messages.screen_products_tag53')}}</h4>
      </div>
      <div class="modal-body">
        <div class="row">
          <div class="col-xs-12">
            <div class="form-group">
              <form action="/products/upload/photo" class="dropzone">
                @csrf
                <div class="fallback">
                  <input name="file" type="file" multiple />
                </div>
              </form>
            </div>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default pull-left" data-dismiss="modal">{{ Lang::get('messages.screen_products_tag38')}}</button>
          {{-- <button type="button" id="button-import-category" onclick="importFileCategories()" class="btn btn-primary">{{ Lang::get('messages.screen_products_tag41')}}</button> --}}
          <button type="button" class="btn btn-primary displayNone" id="spinnerButtonCategory">
            <i class="fa fa-spinner fa-spin"></i>
          </button>
        </div>
      </div>
    </div>
  </div>
</div>

@include('products.scraper')
<script src="{{ asset('js/jQuery/jquery-2.2.3.min.js') }}"></script>
<script src="{{ asset('js/products.js') . '?v=' . time() }}"></script>
<script src="{{ asset('js/bootstrap/js/bootstrap.min.js') }}"></script>
<script src="{{ asset('js/dropzone/dropzone.js') . '?v=' . time() }}"></script>
<script type="text/javascript">
  $(document).ready(function() {
    var storeType = <?php echo json_encode($storeType); ?>;
    localStorage.setItem("storeType", storeType);
    getProducts(storeType);
    $("#service_city").change(function() {
      getProducts(storeType);
    });
    $("#change_sucursal_id").change(function() {
      getProducts(storeType);
    });

    var info = '<i class="fa  fa-info-circle"  id="btn-info-busqueda"></i><div class="dropdown-menu" id="menuBusqueda" style="left: 50%; padding: 5px; background-color: #f9fb8f;"><p data-toggle="modal">Busqueda por Nombre, Orden y Link</p></div>';
    $('#example2_filter').append(info);
    $('#btn-info-busqueda').on('click', function() {
      $('#menuBusqueda').toggle();
    });

  });

  function getProducts(storeType) {
    var service_city = $("#service_city").val();
    var change_sucursal_id = $("#change_sucursal_id").val();
    if (change_sucursal_id) {
      var url = '/products/filter/' + service_city + '/' + change_sucursal_id + '/' + storeType;
    } else {
      var url = '/products/filter/' + service_city + '/false/' + storeType;
    }
    $("#example2").dataTable().fnDestroy();
    var sort_col = $('#example2').find("th:contains("+ Lang.get('messages.screen_products_tag70')+")")[0].cellIndex;
    _table = $('#example2').DataTable({
      responsive: true,
      processing: true,
      serverSide: true,
      order: [
        [sort_col, 'desc']
      ],
      "language": {
        url: 'https://cdn.datatables.net/plug-ins/1.10.19/i18n/Spanish.json'
      },
      scrollX: true,
      scrollCollapse: true,
      paging: true,
      fixedColumns: {
        left: 1,
        right: 2
      },
      ajax: url,
      columns: [{
          data: 'name',
          name: 'name'
        },
        {
          data: 'image',
          name: 'image'
        },
        {
          data: 'plu',
          name: 'plu'
        },
        {
          data: 'bar_code',
          name: 'bar_code'
        },
        {
          data: 'price',
          render: function(data, type, row) {
            return new Intl.NumberFormat('en-US', {
              style: 'currency',
              currency: 'USD'
            }).format(row.price);
          },
          name: 'price'
        },
        {
          data: 'percentage_discount',
          render: function(data, type, row) {
            return (row.percentage_discount ?? 0) + '%';
          },
          name: 'percentage_discount'
        },
        {
          data: 'start_discount',
          name: 'start_discount'
        },
        {
          data: 'limit_discount',
          name: 'limit_discount'
        },
        {
          data: 'limit_hour_discount',
          name: 'limit_hour_discount'
        },
        {
          data: 'flash_price',
          render: function(data, type, row) {
            return new Intl.NumberFormat('en-US', {
              style: 'currency',
              currency: 'USD'
            }).format(row.flash_price);
          },
          name: 'flash_price'
        },
        {
          data: 'start_flash_discount',
          name: 'start_flash_discount'
        },
        {
          data: 'limit_flash_discount',
          name: 'limit_flash_discount'
        },
        {
          data: 'limit_hour_flash_discount',
          name: 'limit_hour_flash_discount'
        },
        {
          data: 'nameBrands',
          name: 'brands.name'
        },
        {
          data: 'nameCategories',
          render: function(data, type, row) {
            let categories = '';
            if (row.nameCategories) {
              let list = row.nameCategories.split(',');
              let data = list.map(function(d) {
                return '<li>' + d + '</li>';
              });
              categories = data.join('');
            }
            return categories;
          },
          name: 'subcategories.name'
        },
        {
          data: 'order',
          name: 'order'
        },
        {
          data: 'validate_age',
          render: function(data, type, row) {
            return row.validate_age ? 'SI' : 'NO';
          },
          name: 'validate_age'
        },
        {
          data: 'available_units',
          name: 'available_units'
        },
        {
          data: 'max_units_per_order',
          name: 'max_units_per_order'
        },
        {
          data: 'max_units_per_product',
          name: 'max_units_per_product'
        },
        {
          data: 'product_link',
          name: 'product_link'
        },
        {
          data: 'nameTags',
          render: function(data, type, row) {
            let tags = '';
            if (row.nameTags) {
              let list = row.nameTags.split(',');
              let data = list.map(function(d) {
                return '<li>' + d + '</li>';
              });
              tags = data.join('');
            }
            return tags;
          },
          name: 'tags.name'
        },
        {
          data: 'special_price',
          render: function(data, type, row) {
            return new Intl.NumberFormat('en-US', {
              style: 'currency',
              currency: 'USD'
            }).format(row.special_price);
          },
          name: 'product_tags.special_price'
        },
        {
          data: 'created_at',
          name: 'created_at'
        },
        {
          data: 'active',
          name: 'active'
        },
        {
          data: 'actions',
          name: 'actions'
        },
      ]
    });

    $('#example2').on('page.dt', function() {
      window.actualPage = $('#example2').DataTable().page();
      localStorage.setItem("setPaginaActual", $('#example2').DataTable().page());
    });

    $('#example2').on('init.dt', function() {
      if (localStorage.getItem("setPaginaActual")) {
        let paginationCurrent = Number(localStorage.getItem("setPaginaActual", $('#example2').DataTable().page()));
        if (parseInt(localStorage.getItem("setPaginaActual")) != paginationCurrent)
          $('#example2').DataTable().page(paginationCurrent).draw('page');
      }
    });
  }

  var URLactual = window.location.href;
  document.addEventListener('click', function(e) {
    if (e.target.closest('a')) {
      var href = e.target.closest('a').href || '';
      href = href.split('#')[0];
      if (URLactual != href) {
        localStorage.setItem("setPaginaActual", 0);
      }
    }
  }, false);
</script>
@endsection