You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							445 lines
						
					
					
						
							19 KiB
						
					
					
				
			
		
		
	
	
							445 lines
						
					
					
						
							19 KiB
						
					
					
				@extends('layouts.admin.app')
 | 
						|
 | 
						|
@section('title',translate('messages.customer_loyalty_point').' '.translate('messages.report'))
 | 
						|
 | 
						|
@push('css_or_js')
 | 
						|
 | 
						|
@endpush
 | 
						|
 | 
						|
@section('content')
 | 
						|
    <div class="content container-fluid">
 | 
						|
        <!-- Page Header -->
 | 
						|
        <div class="page-header">
 | 
						|
            <h1 class="page-header-title text-capitalize">
 | 
						|
                <div class="card-header-icon d-inline-flex mr-2 img">
 | 
						|
                    <img src="{{asset('/public/assets/admin/img/payment.png')}}" alt="public">
 | 
						|
                </div>
 | 
						|
                <span>
 | 
						|
                    {{translate('messages.customer_loyalty_point')}} {{translate('messages.report')}}
 | 
						|
                </span>
 | 
						|
            </h1>
 | 
						|
        </div>
 | 
						|
        <!-- End Page Header -->
 | 
						|
 | 
						|
        <div class="card mb-3">
 | 
						|
            <div class="card-header text-capitalize">
 | 
						|
                <h5 class="card-title">
 | 
						|
                    <span class="card-header-icon">
 | 
						|
                        <i class="tio-filter-outlined"></i>
 | 
						|
                    </span>
 | 
						|
                    <span>{{translate('messages.filter')}} {{translate('messages.options')}}</span>
 | 
						|
                </h5>
 | 
						|
            </div>
 | 
						|
            <div class="card-body">
 | 
						|
                <div class="row">
 | 
						|
                    <div class="col-lg-12 pt-3">
 | 
						|
                        <form action="{{route('admin.customer.loyalty-point.report')}}" method="get">
 | 
						|
                            <div class="row">
 | 
						|
                                <div class="col-sm-6 col-12">
 | 
						|
                                    <div class="mb-3">
 | 
						|
                                        <input type="date" name="from" id="from_date" value="{{request()->get('from')}}" class="form-control h--45px" title="{{translate('messages.from')}} {{translate('messages.date')}}">
 | 
						|
                                    </div>
 | 
						|
                                </div>
 | 
						|
                                <div class="col-sm-6 col-12">
 | 
						|
                                    <div class="mb-3">
 | 
						|
                                        <input type="date" name="to" id="to_date" value="{{request()->get('to')}}" class="form-control h--45px" title="{{ucfirst(translate('messages.to'))}} {{translate('messages.date')}}">
 | 
						|
                                    </div>
 | 
						|
                                </div>
 | 
						|
                                <div class="col-sm-6 col-12">
 | 
						|
                                    <div class="mb-3">
 | 
						|
                                        @php
 | 
						|
                                        $transaction_status=request()->get('transaction_type');
 | 
						|
                                        @endphp
 | 
						|
                                        <select name="transaction_type" id="" class="form-control h--45px" title="{{translate('messages.select')}} {{translate('messages.transaction_type')}}">
 | 
						|
                                            <option value="">{{translate('messages.all')}}</option>
 | 
						|
                                            <option value="point_to_wallet" {{isset($transaction_status) && $transaction_status=='point_to_wallet'?'selected':''}}>{{translate('messages.point_to_wallet')}}</option>
 | 
						|
                                            <option value="order_place" {{isset($transaction_status) && $transaction_status=='order_place'?'selected':''}}>{{translate('messages.order_place')}}</option>
 | 
						|
                                        </select>
 | 
						|
                                    </div>
 | 
						|
                                </div>
 | 
						|
                                <div class="col-sm-6 col-12">
 | 
						|
                                    <div class="mb-3">
 | 
						|
                                        <select id='customer' name="customer_id" data-placeholder="{{translate('messages.select_customer')}}" class="js-data-example-ajax form-control h--45px" title="{{translate('messages.select_customer')}}">
 | 
						|
                                            @if (request()->get('customer_id') && $customer_info = \App\Models\User::find(request()->get('customer_id')))
 | 
						|
                                                <option value="{{$customer_info->id}}" selected>{{$customer_info->f_name.' '.$customer_info->l_name}}({{$customer_info->phone}})</option>
 | 
						|
                                            @endif
 | 
						|
 | 
						|
                                        </select>
 | 
						|
                                    </div>
 | 
						|
                                </div>
 | 
						|
                            </div>
 | 
						|
                            <div class="btn--container justify-content-end">
 | 
						|
 | 
						|
                                <button type="reset" id="reset_btn" class="btn btn--reset">{{translate('messages.reset')}}</button>
 | 
						|
 | 
						|
                                <button type="submit" class="btn btn--primary"><i class="tio-filter-list mr-1"></i>{{translate('messages.filter')}}</button>
 | 
						|
                            </div>
 | 
						|
                        </form>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
 | 
						|
        </div>
 | 
						|
        <div class="row g-3">
 | 
						|
            @php
 | 
						|
                $credit = $data[0]->total_credit??0;
 | 
						|
                $debit = $data[0]->total_debit??0;
 | 
						|
                $balance = $credit - $debit;
 | 
						|
            @endphp
 | 
						|
            <!--Debit earned-->
 | 
						|
            <div class="col-sm-4">
 | 
						|
                <div class="resturant-card dashboard--card bg--2">
 | 
						|
                    <h4 class="title">{{translate('messages.debit')}}</h4>
 | 
						|
                    <span class="subtitle">
 | 
						|
                        {{$debit}}
 | 
						|
                    </span>
 | 
						|
                    <img class="resturant-icon" src="{{asset('/public/assets/admin/img/dashboard/3.png')}}" alt="dashboard">
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
            <!--Debit earned End-->
 | 
						|
            <!--credit earned-->
 | 
						|
            <div class="col-sm-4">
 | 
						|
                <div class="resturant-card dashboard--card bg--3">
 | 
						|
                    <h4 class="title">{{translate('messages.credit')}}</h4>
 | 
						|
                    <span class="subtitle">
 | 
						|
                        {{$credit}}
 | 
						|
                    </span>
 | 
						|
                    <img class="resturant-icon" src="{{asset('/public/assets/admin/img/dashboard/4.png')}}" alt="dashboard">
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
            <!--credit earned end-->
 | 
						|
            <!--balance earned-->
 | 
						|
            <div class="col-sm-4">
 | 
						|
                <div class="resturant-card dashboard--card bg--1">
 | 
						|
                    <h4 class="title">{{translate('messages.balance')}}</h4>
 | 
						|
                    <span class="subtitle">
 | 
						|
                        {{$balance}}
 | 
						|
                    </span>
 | 
						|
                    <img class="resturant-icon" src="{{asset('/public/assets/admin/img/dashboard/1.png')}}" alt="dashboard">
 | 
						|
                </div>
 | 
						|
            </div>
 | 
						|
            <!--balance earned end-->
 | 
						|
        </div>
 | 
						|
        <!-- End Stats -->
 | 
						|
        <!-- Card -->
 | 
						|
        <div class="card mt-3">
 | 
						|
            <!-- Header -->
 | 
						|
            <div class="card-header text-capitalize border-0">
 | 
						|
                <h4 class="card-title">
 | 
						|
                    <span class="card-header-icon"><i class="tio-money"></i></span>
 | 
						|
                    <span>{{translate('messages.transactions')}}</span>
 | 
						|
                </h4>
 | 
						|
            </div>
 | 
						|
            <!-- End Header -->
 | 
						|
 | 
						|
            <!-- Body -->
 | 
						|
            <div class="card-body p-0">
 | 
						|
                <div class="table-responsive">
 | 
						|
                    <table id="datatable"
 | 
						|
                        class="table table-thead-bordered table-align-middle card-table table-nowrap">
 | 
						|
                        <thead class="thead-light">
 | 
						|
                            <tr>
 | 
						|
                                <th>{{ translate('messages.sl') }}</th>
 | 
						|
                                <th>{{translate('messages.transaction')}} {{translate('messages.id')}}</th>
 | 
						|
                                <th>{{translate('messages.Customer')}}</th>
 | 
						|
                                <th>{{translate('messages.credit')}}</th>
 | 
						|
                                <th>{{translate('messages.debit')}}</th>
 | 
						|
                                <th>{{translate('messages.balance')}}</th>
 | 
						|
                                <th>{{translate('messages.transaction_type')}}</th>
 | 
						|
                                <th>{{translate('messages.reference')}}</th>
 | 
						|
                                <th>{{translate('messages.created_at')}}</th>
 | 
						|
                            </tr>
 | 
						|
                        </thead>
 | 
						|
                        <tbody>
 | 
						|
                        @foreach($transactions as $k=>$wt)
 | 
						|
                            <tr scope="row">
 | 
						|
                                <td >{{$k+$transactions->firstItem()}}</td>
 | 
						|
                                <td>{{$wt->transaction_id}}</td>
 | 
						|
                                <td><a href="{{route('admin.customer.view',['user_id'=>$wt->user_id])}}">{{Str::limit($wt->user?$wt->user->f_name.' '.$wt->user->l_name:translate('messages.not_found'),20,'...')}}</a></td>
 | 
						|
                                <td>{{$wt->credit}}</td>
 | 
						|
                                <td>{{$wt->debit}}</td>
 | 
						|
                                <td>{{$wt->balance}}</td>
 | 
						|
                                <td>
 | 
						|
                                    <span class="badge badge-soft-{{$wt->transaction_type=='point_to_wallet'?'success':'dark'}}">
 | 
						|
                                        {{translate('messages.'.$wt->transaction_type)}}
 | 
						|
                                    </span>
 | 
						|
                                </td>
 | 
						|
                                <td>{{$wt->reference}}</td>
 | 
						|
                                <td>{{date('Y/m/d '.config('timeformat'), strtotime($wt->created_at))}}</td>
 | 
						|
                            </tr>
 | 
						|
                        @endforeach
 | 
						|
                        </tbody>
 | 
						|
                    </table>
 | 
						|
                    @if(!$transactions)
 | 
						|
                    <div class="empty--data">
 | 
						|
                        <img src="{{asset('/public/assets/admin/img/empty.png')}}" alt="public">
 | 
						|
                        <h5>
 | 
						|
                            {{translate('no_data_found')}}
 | 
						|
                        </h5>
 | 
						|
                    </div>
 | 
						|
                    @endif
 | 
						|
                </div>
 | 
						|
                <!-- Pagination -->
 | 
						|
                <div class="page-area px-4 pb-3">
 | 
						|
                    <div class="d-flex align-items-center justify-content-end">
 | 
						|
                        {{-- <div>
 | 
						|
                            1-15 of 380
 | 
						|
                        </div> --}}
 | 
						|
                        <div>
 | 
						|
                            {!! $transactions->links() !!}
 | 
						|
                        </div>
 | 
						|
                    </div>
 | 
						|
                </div>
 | 
						|
                <!-- Pagination -->
 | 
						|
            </div>
 | 
						|
            <!-- End Body -->
 | 
						|
 | 
						|
        </div>
 | 
						|
        <!-- End Card -->
 | 
						|
    </div>
 | 
						|
@endsection
 | 
						|
 | 
						|
@push('script')
 | 
						|
 | 
						|
@endpush
 | 
						|
 | 
						|
@push('script_2')
 | 
						|
 | 
						|
    <script src="{{asset('public/assets/admin')}}/vendor/chart.js/dist/Chart.min.js"></script>
 | 
						|
    <script
 | 
						|
        src="{{asset('public/assets/admin')}}/vendor/chartjs-chart-matrix/dist/chartjs-chart-matrix.min.js"></script>
 | 
						|
    <script src="{{asset('public/assets/admin')}}/js/hs.chartjs-matrix.js"></script>
 | 
						|
 | 
						|
    <script>
 | 
						|
        $(document).on('ready', function () {
 | 
						|
            $('.js-data-example-ajax').select2({
 | 
						|
                ajax: {
 | 
						|
                    url: '{{route('admin.customer.select-list')}}',
 | 
						|
                    data: function (params) {
 | 
						|
                        return {
 | 
						|
                            q: params.term, // search term
 | 
						|
                            all: true,
 | 
						|
                            page: params.page
 | 
						|
                        };
 | 
						|
                    },
 | 
						|
                    processResults: function (data) {
 | 
						|
                        return {
 | 
						|
                        results: data
 | 
						|
                        };
 | 
						|
                    },
 | 
						|
                    __port: function (params, success, failure) {
 | 
						|
                        var $request = $.ajax(params);
 | 
						|
 | 
						|
                        $request.then(success);
 | 
						|
                        $request.fail(failure);
 | 
						|
 | 
						|
                        return $request;
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            });
 | 
						|
 | 
						|
            // INITIALIZATION OF FLATPICKR
 | 
						|
            // =======================================================
 | 
						|
            $('.js-flatpickr').each(function () {
 | 
						|
                $.HSCore.components.HSFlatpickr.init($(this));
 | 
						|
            });
 | 
						|
 | 
						|
 | 
						|
            // INITIALIZATION OF NAV SCROLLER
 | 
						|
            // =======================================================
 | 
						|
            $('.js-nav-scroller').each(function () {
 | 
						|
                new HsNavScroller($(this)).init()
 | 
						|
            });
 | 
						|
 | 
						|
 | 
						|
            // INITIALIZATION OF DATERANGEPICKER
 | 
						|
            // =======================================================
 | 
						|
            $('.js-daterangepicker').daterangepicker();
 | 
						|
 | 
						|
            $('.js-daterangepicker-times').daterangepicker({
 | 
						|
                timePicker: true,
 | 
						|
                startDate: moment().startOf('hour'),
 | 
						|
                endDate: moment().startOf('hour').add(32, 'hour'),
 | 
						|
                locale: {
 | 
						|
                    format: 'M/DD hh:mm A'
 | 
						|
                }
 | 
						|
            });
 | 
						|
 | 
						|
            var start = moment();
 | 
						|
            var end = moment();
 | 
						|
 | 
						|
            function cb(start, end) {
 | 
						|
                $('#js-daterangepicker-predefined .js-daterangepicker-predefined-preview').html(start.format('MMM D') + ' - ' + end.format('MMM D, YYYY'));
 | 
						|
            }
 | 
						|
 | 
						|
            $('#js-daterangepicker-predefined').daterangepicker({
 | 
						|
                startDate: start,
 | 
						|
                endDate: end,
 | 
						|
                ranges: {
 | 
						|
                    'Today': [moment(), moment()],
 | 
						|
                    'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
 | 
						|
                    'Last 7 Days': [moment().subtract(6, 'days'), moment()],
 | 
						|
                    'Last 30 Days': [moment().subtract(29, 'days'), moment()],
 | 
						|
                    'This Month': [moment().startOf('month'), moment().endOf('month')],
 | 
						|
                    'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
 | 
						|
                }
 | 
						|
            }, cb);
 | 
						|
 | 
						|
            cb(start, end);
 | 
						|
 | 
						|
 | 
						|
            // INITIALIZATION OF CHARTJS
 | 
						|
            // =======================================================
 | 
						|
            $('.js-chart').each(function () {
 | 
						|
                $.HSCore.components.HSChartJS.init($(this));
 | 
						|
            });
 | 
						|
 | 
						|
            var updatingChart = $.HSCore.components.HSChartJS.init($('#updatingData'));
 | 
						|
 | 
						|
            // Call when tab is clicked
 | 
						|
            $('[data-toggle="chart"]').click(function (e) {
 | 
						|
                let keyDataset = $(e.currentTarget).attr('data-datasets')
 | 
						|
 | 
						|
                // Update datasets for chart
 | 
						|
                updatingChart.data.datasets.forEach(function (dataset, key) {
 | 
						|
                    dataset.data = updatingChartDatasets[keyDataset][key];
 | 
						|
                });
 | 
						|
                updatingChart.update();
 | 
						|
            })
 | 
						|
 | 
						|
 | 
						|
            // INITIALIZATION OF MATRIX CHARTJS WITH CHARTJS MATRIX PLUGIN
 | 
						|
            // =======================================================
 | 
						|
            function generateHoursData() {
 | 
						|
                var data = [];
 | 
						|
                var dt = moment().subtract(365, 'days').startOf('day');
 | 
						|
                var end = moment().startOf('day');
 | 
						|
                while (dt <= end) {
 | 
						|
                    data.push({
 | 
						|
                        x: dt.format('YYYY-MM-DD'),
 | 
						|
                        y: dt.format('e'),
 | 
						|
                        d: dt.format('YYYY-MM-DD'),
 | 
						|
                        v: Math.random() * 24
 | 
						|
                    });
 | 
						|
                    dt = dt.add(1, 'day');
 | 
						|
                }
 | 
						|
                return data;
 | 
						|
            }
 | 
						|
 | 
						|
            $.HSCore.components.HSChartMatrixJS.init($('.js-chart-matrix'), {
 | 
						|
                data: {
 | 
						|
                    datasets: [{
 | 
						|
                        label: 'Commits',
 | 
						|
                        data: generateHoursData(),
 | 
						|
                        width: function (ctx) {
 | 
						|
                            var a = ctx.chart.chartArea;
 | 
						|
                            return (a.right - a.left) / 70;
 | 
						|
                        },
 | 
						|
                        height: function (ctx) {
 | 
						|
                            var a = ctx.chart.chartArea;
 | 
						|
                            return (a.bottom - a.top) / 10;
 | 
						|
                        }
 | 
						|
                    }]
 | 
						|
                },
 | 
						|
                options: {
 | 
						|
                    tooltips: {
 | 
						|
                        callbacks: {
 | 
						|
                            title: function () {
 | 
						|
                                return '';
 | 
						|
                            },
 | 
						|
                            label: function (item, data) {
 | 
						|
                                var v = data.datasets[item.datasetIndex].data[item.index];
 | 
						|
 | 
						|
                                if (v.v.toFixed() > 0) {
 | 
						|
                                    return '<span class="font-weight-bold">' + v.v.toFixed() + ' hours</span> on ' + v.d;
 | 
						|
                                } else {
 | 
						|
                                    return '<span class="font-weight-bold">No time</span> on ' + v.d;
 | 
						|
                                }
 | 
						|
                            }
 | 
						|
                        }
 | 
						|
                    },
 | 
						|
                    scales: {
 | 
						|
                        xAxes: [{
 | 
						|
                            position: 'bottom',
 | 
						|
                            type: 'time',
 | 
						|
                            offset: true,
 | 
						|
                            time: {
 | 
						|
                                unit: 'week',
 | 
						|
                                round: 'week',
 | 
						|
                                displayFormats: {
 | 
						|
                                    week: 'MMM'
 | 
						|
                                }
 | 
						|
                            },
 | 
						|
                            ticks: {
 | 
						|
                                "labelOffset": 20,
 | 
						|
                                "maxRotation": 0,
 | 
						|
                                "minRotation": 0,
 | 
						|
                                "fontSize": 12,
 | 
						|
                                "fontColor": "rgba(22, 52, 90, 0.5)",
 | 
						|
                                "maxTicksLimit": 12,
 | 
						|
                            },
 | 
						|
                            gridLines: {
 | 
						|
                                display: false
 | 
						|
                            }
 | 
						|
                        }],
 | 
						|
                        yAxes: [{
 | 
						|
                            type: 'time',
 | 
						|
                            offset: true,
 | 
						|
                            time: {
 | 
						|
                                unit: 'day',
 | 
						|
                                parser: 'e',
 | 
						|
                                displayFormats: {
 | 
						|
                                    day: 'ddd'
 | 
						|
                                }
 | 
						|
                            },
 | 
						|
                            ticks: {
 | 
						|
                                "fontSize": 12,
 | 
						|
                                "fontColor": "rgba(22, 52, 90, 0.5)",
 | 
						|
                                "maxTicksLimit": 2,
 | 
						|
                            },
 | 
						|
                            gridLines: {
 | 
						|
                                display: false
 | 
						|
                            }
 | 
						|
                        }]
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            });
 | 
						|
 | 
						|
 | 
						|
            // INITIALIZATION OF CLIPBOARD
 | 
						|
            // =======================================================
 | 
						|
            $('.js-clipboard').each(function () {
 | 
						|
                var clipboard = $.HSCore.components.HSClipboard.init(this);
 | 
						|
            });
 | 
						|
 | 
						|
 | 
						|
            // INITIALIZATION OF CIRCLES
 | 
						|
            // =======================================================
 | 
						|
            $('.js-circle').each(function () {
 | 
						|
                var circle = $.HSCore.components.HSCircles.init($(this));
 | 
						|
            });
 | 
						|
        });
 | 
						|
    </script>
 | 
						|
 | 
						|
    <script>
 | 
						|
        $('#from_date,#to_date').change(function () {
 | 
						|
            let fr = $('#from_date').val();
 | 
						|
            let to = $('#to_date').val();
 | 
						|
            if (fr != '' && to != '') {
 | 
						|
                if (fr > to) {
 | 
						|
                    $('#from_date').val('');
 | 
						|
                    $('#to_date').val('');
 | 
						|
                    toastr.error('Invalid date range!', Error, {
 | 
						|
                        CloseButton: true,
 | 
						|
                        ProgressBar: true
 | 
						|
                    });
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        });
 | 
						|
 | 
						|
        $('#reset_btn').click(function(){
 | 
						|
            $('#customer').val(null).trigger('change');
 | 
						|
        })
 | 
						|
    </script>
 | 
						|
@endpush
 | 
						|
 |