250 lines
13 KiB
PHP
250 lines
13 KiB
PHP
@extends('layouts.layout-2')
|
|
|
|
@section('content')
|
|
<div class="card">
|
|
<h5 class="card-header">
|
|
Business Points
|
|
|
|
<div class="float-right">
|
|
<div class="d-flex">
|
|
<form action="{{ route('admin_business_points_recalculate') }}" method="POST" style="display: none;" id="recalculate-form" onsubmit="return confirmRecalculate();" class="inline-block">
|
|
@csrf
|
|
<input type="hidden" name="points_filter_member_id" id="recalc_member_id" value="">
|
|
<input type="hidden" name="points_filter_month" id="recalc_month" value="">
|
|
<input type="hidden" name="points_filter_year" id="recalc_year" value="">
|
|
<button type="submit" class="btn btn-sm btn-warning">
|
|
<span class="fa fa-refresh"></span> Punkte neu berechnen
|
|
</button>
|
|
</form>
|
|
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-load-content"
|
|
data-id="new"
|
|
data-action="add_user_sales_volume"
|
|
data-back="{{url()->current()}}"
|
|
data-route="{{ route('modal_load') }}"><span class="fa fa-plus-circle"></span> Points hinzufügen
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</h5>
|
|
|
|
@if(isset($add_points_error) && $add_points_error)
|
|
<div class="col-sm-12">
|
|
<div class="alert alert-danger p-2 mt-2">
|
|
<ul>
|
|
<li>{{ $add_points_error }}</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
@endif
|
|
<div class="card-body p-0">
|
|
|
|
{!! Form::open(['action' => route('admin_business_points'), 'class' => 'form-horizontal', 'id'=>'form_admin_business_points']) !!}
|
|
|
|
<div class="form-row align-items-center px-4 pb-2 pt-3">
|
|
<div class="col-12 col-sm-12 col-md-3 col-lg-3 mb-1">
|
|
<select class="selectpicker on_change_select" data-style="btn-default" name="points_filter_member_id" id="points_filter_member_id" data-live-search="true">
|
|
<option value="">Filter Berater aus</option>
|
|
@foreach($filter_members as $member)
|
|
<option value="{{$member->id}}" @if(session('points_filter_member_id') == $member->id) selected @endif>{{$member->first_name}} {{$member->last_name}} | {{$member->email}}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-12 col-sm-12 col-md-3 col-lg-3 mb-1">
|
|
<select class="selectpicker on_change_select" data-style="btn-default" name="points_filter_status_type_id" id="points_filter_status_type_id" data-live-search="true">
|
|
<option value="">Filter Typ aus</option>
|
|
@foreach($filter_status_types as $key=>$value)
|
|
<option value="{{$key}}" @if(session('points_filter_status_type_id') == $key) selected @endif>{{$value}}</option>
|
|
@endforeach
|
|
|
|
</select>
|
|
</div>
|
|
|
|
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
|
|
<select class="custom-select on_change_select" name="points_filter_month">
|
|
@foreach($filter_months as $key=>$value)
|
|
<option value="{{$key}}" @if(session('points_filter_month') == $key) selected @endif>{{$value}}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
<div class="col-6 col-sm-6 col-md-3 col-lg-3 mb-1">
|
|
<select class="custom-select on_change_select" name="points_filter_year">
|
|
@foreach($filter_years as $key=>$value)
|
|
<option value="{{$value}}" @if(session('points_filter_year') == $value) selected @endif>{{$value}}</option>
|
|
@endforeach
|
|
</select>
|
|
</div>
|
|
</div>
|
|
{!! Form::close() !!}
|
|
|
|
<!-- Summen-Anzeige -->
|
|
<div id="points-summary" style="display: none;" class="alert alert-info mx-4 mb-3">
|
|
<h6 class="mb-3"><strong>Monatssummen für ausgewählten Berater</strong></h6>
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<strong>KP-Punkte (Eigene):</strong> <span id="sum-kp-points">0</span><br>
|
|
<small class="text-muted">Eigenumsatz: <span id="sum-kp-net">0</span> €</small>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<strong>TP-Punkte (Team):</strong> <span id="sum-tp-points">0</span><br>
|
|
<small class="text-muted">Shop: <span id="sum-shop-points">0</span> Punkte</small>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<strong>Gesamtumsatz:</strong> <span id="sum-total-net">0</span> €<br>
|
|
<small class="text-muted">Shop-Umsatz: <span id="sum-shop-net">0</span> €</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card-datatable table-responsive pt-0">
|
|
<table class="datatables-style table table-striped table-bordered" id="datatable-invoice">
|
|
<thead>
|
|
<tr>
|
|
<th>#</th>
|
|
<th>{{__('Datum') }}</th>
|
|
<th>{{__('tables.points')}}</th>
|
|
<th>{{__('Umsatz netto')}}</th>
|
|
<th>{{__('VE')}}</th>
|
|
<th>{{__('Typ')}}</th>
|
|
<th>{{__('für')}}</th>
|
|
<th>{{__('Bestellung')}}</th>
|
|
<th>{{__('tables.adviser_no')}}</th>
|
|
<th>{{__('First name')}}</th>
|
|
<th>{{__('Last name') }}</th>
|
|
<th>{{__('E-Mail') }}</th>
|
|
<th>{{__('Info') }}</th>
|
|
<th>{{__('Notiz') }}</th>
|
|
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function toggleRecalculateButton() {
|
|
var memberId = $('select[name=points_filter_member_id]').val();
|
|
var month = $('select[name=points_filter_month]').val();
|
|
var year = $('select[name=points_filter_year]').val();
|
|
|
|
if (memberId && month && year) {
|
|
$('#recalc_member_id').val(memberId);
|
|
$('#recalc_month').val(month);
|
|
$('#recalc_year').val(year);
|
|
$('#recalculate-form').show();
|
|
loadSummary();
|
|
} else {
|
|
$('#recalculate-form').hide();
|
|
$('#points-summary').hide();
|
|
}
|
|
}
|
|
|
|
function loadSummary() {
|
|
var memberId = $('select[name=points_filter_member_id]').val();
|
|
var month = $('select[name=points_filter_month]').val();
|
|
var year = $('select[name=points_filter_year]').val();
|
|
|
|
if (!memberId || !month || !year) {
|
|
$('#points-summary').hide();
|
|
return;
|
|
}
|
|
|
|
$.ajax({
|
|
url: '{!! route('admin_business_points_summary') !!}',
|
|
type: 'GET',
|
|
data: {
|
|
points_filter_member_id: memberId,
|
|
points_filter_month: month,
|
|
points_filter_year: year
|
|
},
|
|
success: function(response) {
|
|
if (response.success && response.data) {
|
|
var data = response.data;
|
|
$('#sum-kp-points').text(data.total_KP_points.toLocaleString('de-DE'));
|
|
$('#sum-tp-points').text(data.total_TP_points.toLocaleString('de-DE'));
|
|
$('#sum-shop-points').text(data.month_shop_points.toLocaleString('de-DE'));
|
|
$('#sum-kp-net').text(data.month_total_net.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
|
|
$('#sum-shop-net').text(data.month_shop_total_net.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
|
|
$('#sum-total-net').text(data.total_net.toLocaleString('de-DE', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
|
|
$('#points-summary').show();
|
|
} else {
|
|
$('#points-summary').hide();
|
|
}
|
|
},
|
|
error: function() {
|
|
$('#points-summary').hide();
|
|
}
|
|
});
|
|
}
|
|
|
|
function confirmRecalculate() {
|
|
var month = $('#recalc_month').val();
|
|
var year = $('#recalc_year').val();
|
|
var monthPadded = month.toString().padStart(2, '0');
|
|
return confirm('Möchten Sie die Punkte für den ausgewählten Berater im Monat ' + monthPadded + '/' + year + ' wirklich neu berechnen?');
|
|
}
|
|
|
|
$( document ).ready(function() {
|
|
var oTable = $('#datatable-invoice').DataTable({
|
|
"processing": true,
|
|
"serverSide": true,
|
|
"stateSave": true,
|
|
"searching": true,
|
|
ajax: {
|
|
url: '{!! route('admin_business_points_datatable') !!}',
|
|
data: function(d) {
|
|
d.points_filter_member_id = $('select[name=points_filter_member_id]').val();
|
|
d.points_filter_status_type_id = $('select[name=points_filter_status_type_id]').val();
|
|
d.points_filter_month = $('select[name=points_filter_month]').val();
|
|
d.points_filter_year = $('select[name=points_filter_year]').val();
|
|
}
|
|
},
|
|
"order": [[0, "desc" ]],
|
|
"columns": [
|
|
{ data: 'id', orderable: true, searchable: false },
|
|
{ data: 'date', name: 'date', orderable: true, searchable: false },
|
|
{ data: 'points', name: 'points', orderable: true, searchable: false },
|
|
{ data: 'total_net', name: 'total_net', orderable: true, searchable: false },
|
|
{ data: 'status_turnover', name: 'status_turnover', orderable: false, searchable: false },
|
|
{ data: 'status', name: 'status', orderable: true, searchable: false },
|
|
{ data: 'status_points', name: 'status_points', orderable: true, searchable: false },
|
|
{ data: 'order', name: 'order', orderable: false , searchable: false },
|
|
{ data: 'm_account', name: 'm_account', orderable: true , searchable: true },
|
|
{ data: 'first_name', name: 'first_name', orderable: true , searchable: true },
|
|
{ data: 'last_name', name: 'last_name', orderable: true , searchable: true },
|
|
{ data: 'email', name: 'email', orderable: true, searchable: true },
|
|
{ data: 'message', name: 'message', orderable: false, searchable: false },
|
|
{ data: 'info', name: 'info', orderable: false, searchable: false },
|
|
],
|
|
"bLengthChange": false,
|
|
"iDisplayLength": 100,
|
|
"language": {
|
|
"url": "/js/datatables-{{ \App::getLocale() }}.json"
|
|
}
|
|
});
|
|
|
|
// Toggle button on filter change
|
|
$('select.on_change_select').on('change', function(){
|
|
toggleRecalculateButton();
|
|
oTable.draw();
|
|
});
|
|
|
|
$('input.on_keyup_input').on('keyup', function(){
|
|
oTable.draw();
|
|
});
|
|
|
|
// Initial toggle on page load
|
|
toggleRecalculateButton();
|
|
|
|
// Reload summary after table draw completes
|
|
oTable.on('draw', function() {
|
|
var memberId = $('select[name=points_filter_member_id]').val();
|
|
if (memberId) {
|
|
loadSummary();
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
@endsection
|