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

@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