File: /var/www/vhost/disk-apps/alq-cali.bikenow.co/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">×</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">×</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">×</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">×</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 src="{{ asset('js/util.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;
let fixedColumns = false;
let isMobileDevice = /Android|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
if (!isMobileDevice) {
fixedColumns = {
left: 1,
right: 2
};
}
_table = $('#example2').DataTable({
responsive: true,
processing: true,
serverSide: true,
order: [
[sort_col, 'desc']
],
language: {
url: window.DATATABLES_LANGUAGE_URL,
},
scrollX: true,
scrollCollapse: true,
paging: true,
fixedColumns: fixedColumns,
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 formatCurrency(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 formatCurrency(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 formatCurrency(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