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/ticket_subscribers/dashboard.blade.php
@extends('modules.head')
@section('contenido')
<style>
    td {
        white-space: nowrap;
    }

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

    .dataTables_scrollBody {
        max-height: none !important;
    }

    .scroll-ul {
        height: 140px;
        overflow: scroll;
        overflow-x: hidden;
    }
</style>
@php
$page_prefix = "ticket_subscribers";
@endphp
<div class="box-header">
    <a class="btn btn-app btnReportProducts" onclick="clickExportAll()">
        <i class="fa fa-file-excel-o"></i> {{ __('ticket_subscribers.texts.export') }}
    </a>
</div>

<!-- List Data -->
<div class="box">
    <div class="box-header with-border">
        <h3 class="box-title">{{__('ticket_subscribers.texts.ticket_subscribers')}}</h3>
    </div>

    <!-- filters -->
    <div class="box-body">
        <div class="col-12 col-md-12">
            <label for="states">{{ __('ticket_subscribers.labels.seasons') }}</label>
            <select class="form-control select2" multiple="multiple" data-placeholder="{{ __('ticket_subscribers.defaults.placeholder_select') }}" id="seasons" name="seasons" value="" required>
                <option value="">{{ __('ticket_subscribers.defaults.placeholder_select') }}</option>
                @foreach ($seasons as $season)
                <option value="{{ $season->id }}">{{ $season->name }}</option>
                @endforeach
            </select>
        </div>
    </div>
    <!-- filters -->

    <!-- /.box-header -->
    <div class="box-body table-responsive ">
        <table id="{{$page_prefix}}" class="stripe row-border order-column" style="width:100%" role="grid" aria-describedby="{{$page_prefix}}_info"></table>
    </div>
    <!-- /.box-body -->
</div>
@endsection
@section('inline-js')
<script src="{{ asset('js/datetimepicker/moment.min.js') }}"></script>
<script lang="javascript" src="https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js"></script>
<script type="text/javascript">
    const SELECTOR_PREFIX = "{{$page_prefix}}";
    const dataSeats = <?php echo json_encode($dataSeats); ?>;

    $(document).ready(function() {
        $('.select2').select2();

        $("select[name='seasons']").on('change', function() {
            $(`#${SELECTOR_PREFIX}`).dataTable().fnDestroy();
            getData();
        });

        const getData = function() {
            $(`#${SELECTOR_PREFIX}`).DataTable({
                stateSave: true,
                stateSaveCallback: function(settings, data) {
                    localStore(`DataTables_${SELECTOR_PREFIX}`, data)
                },
                stateLoadCallback: function(settings) {
                    return localRetrieve(`DataTables_${SELECTOR_PREFIX}`)
                },
                responsive: true,
                processing: true,
                serverSide: true,
                language: {
                    url: window.DATATABLES_LANGUAGE_URL,
                },
                ajax: {
                    url: '/ticketing_subscribers/dashboard',
                    headers: {
                        "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content")
                    },
                    type: "POST",
                    data: {
                        seasons: $('select[name="seasons"]').val(),
                    },
                    dataSrc: function(json) {
                        var totalRows = json.total;
                        json.recordsTotal = totalRows;
                        json.recordsFiltered = totalRows;
                        return json.data;
                    }
                },
                columns: [{
                        name: 'users.first_name',
                        data: 'users.first_name',
                        title: Lang.get('ticket_subscribers.datatables.columns.first_name'),
                        render: function(data, type, row, meta) {
                            return [
                                row.first_name,
                            ].join('');
                        }
                    },
                    {
                        name: 'users.last_name',
                        data: 'users.last_name',
                        title: Lang.get('ticket_subscribers.datatables.columns.last_name'),
                        render: function(data, type, row, meta) {
                            return [
                                row.last_name,
                            ].join('');
                        }
                    },
                    {
                        name: 'users.email',
                        data: 'users.email',
                        title: Lang.get('ticket_subscribers.datatables.columns.email'),
                        render: function(data, type, row, meta) {
                            return [
                                row.email,
                            ].join('');
                        }
                    },
                    {
                        name: 'users.document',
                        data: 'users.document',
                        title: Lang.get('ticket_subscribers.datatables.columns.document'),
                        render: function(data, type, row, meta) {
                            return [
                                row.document,
                            ].join('');
                        }
                    },
                    {
                        name: 'users.created_at',
                        data: 'users.created_at',
                        title: Lang.get('ticket_subscribers.datatables.columns.created_at'),
                        render: function(data, type, row, meta) {
                            return [
                                moment(row.created_at).format('YYYY-MM-DD HH:mm:ss'),
                            ].join('');
                        }
                    },
                    {
                        name: 'seasons',
                        data: 'seasons.name',
                        title: Lang.get('ticket_subscribers.datatables.columns.seasons'),
                        render: function(data, type, row, meta) {
                            return transactionSeasons(row.seasons).join('');
                        }
                    },
                    {
                        name: 'seats',
                        data: 'tickets.seat_id',
                        title: Lang.get('ticket_subscribers.datatables.columns.seats'),
                        render: function(data, type, row, meta) {
                            return transactionSeats(row.seats).join('');
                        }
                    },
                ]
            })
        };

        const transactionSeasons = function(seasons) {
            if (seasons == undefined) {
                return '';
            }
            let list = seasons.split(',');
            let data = list.map(function(d) {
                return '<li>' + d + '</li>';
            });

            return data;
        }

        const transactionSeats = function(seats) {
            if (seats == undefined) {
                return '';
            }

            let list = seats.split(',');
            let data = list.map(function(d) {
                let seat = dataSeats.find(seat => seat.id == d);
                return '<li>' + (seat ? seat.name : '') + '</li>';
            });

            return data;
        }

        getData();
    });

    const clickExportAll = function() {
        $('#loading').show();
        const table = $(`${SELECTOR_PREFIX}`).DataTable();
        var validateDownloadUrl = document.location.origin + "/ticketing_subscribers/downloadReport";
        var downloadUrl = document.location.origin + "/ticketing_subscribers/export/";

        info = {
            data: table.rows({
                filter: 'applied'
            }).data().toArray()
        }

        $.ajax({
            url: validateDownloadUrl,
            type: "POST",
            contentType: "application/json",
            headers: {
                "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
                "Content-Type": "application/json",
            },
            data: JSON.stringify({
                seasons: $('select[name="seasons"]').val(),
            }),
            success: function(response) {
                const filename = Lang.get('ticket_subscribers.export.file_name') + ".xlsx";
                const rows = response.data;
                const new_rows = rows.map(
                    ({
                        created_at,
                        seasons,
                        seats,
                        ...rest
                    }) => ({
                        ...rest,
                        created_at: moment(created_at).format('YYYY-MM-DD HH:mm:ss'),
                        seasons: seasons,
                        seats: transactionExportSeats(seats),
                    }));
                let headers = Object.keys(new_rows[0]);
                headers = headers.map((header) => Lang.get('ticket_subscribers.export.columns.' + header));
                const worksheet = XLSX.utils.json_to_sheet(new_rows);
                XLSX.utils.sheet_add_aoa(worksheet, [headers], {
                    origin: "A1"
                });
                const workbook = XLSX.utils.book_new();
                XLSX.utils.book_append_sheet(workbook, worksheet, "Report");
                XLSX.writeFile(workbook, filename, {
                    compression: true
                });
                $('#loading').hide();
            },
            error: function(response) {
                $('#loading').hide();
                swal("Error", response.responseJSON ? response.responseJSON.message :
                    'Hubo un error en el servidor, espere unos segundos e intente de nuevo',
                    "error");
            }
        });
    }

    const transactionExportSeats = function(seats) {
        if (seats == undefined) {
            return '';
        }

        let list = seats.split(',');
        let data = list.map(function(d) {
            let seat = dataSeats.find(seat => seat.id == d);
            return seat ? seat.name : '';
        });

        return data.join(',');
    }
</script>
@endsection