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/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">&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 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