23-01-2026

This commit is contained in:
Kevin Adametz 2026-01-23 17:35:23 +01:00
parent a939cd51ef
commit a8b395e20d
248 changed files with 29342 additions and 4805 deletions

View file

@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use Carbon;
use Request;
use App\Services\Payment;
@ -20,12 +21,12 @@ class BusinessPointsController extends Controller
public function index()
{
$filter_members = UserSalesVolume::join('users', 'user_id', '=', 'users.id')
->groupBy('user_id')->join('user_accounts', 'account_id', '=', 'user_accounts.id')
->select('users.id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name')->get();
$filter_members = UserSalesVolume::join('users', 'user_id', '=', 'users.id')
->groupBy('user_id')->join('user_accounts', 'account_id', '=', 'user_accounts.id')
->select('users.id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name')->get();
$this->setFilterVars();
$data = [
'filter_months' => HTMLHelper::getTransMonths(),
@ -38,52 +39,79 @@ class BusinessPointsController extends Controller
return view('admin.business.points', $data);
}
public function store(){
public function store()
{
$data = Request::all();
if(!isset($data['action'])){
if (!isset($data['action'])) {
return back();
}
if(!isset($data['change_member_key']) || $data['change_member_key'] !== config('mivita.edit_data_pass')){
if (!isset($data['change_member_key']) || $data['change_member_key'] !== config('mivita.edit_data_pass')) {
\Session()->flash('alert-error', 'Das Passwort ist falsch.');
return back();
return back();
}
if(!isset($data['is_checked_action'])){
if (!isset($data['is_checked_action'])) {
\Session()->flash('alert-error', 'Änderung nicht bestätigt');
return back();
return back();
}
if($data['action'] === 'add_user_sales_volume'){
if ($data['action'] === 'add_user_sales_volume') {
SalesPointsVolume::addSalesPointsVolume($data);
return back(); }
if($data['action'] === 'edit_user_sales_volume'){
SalesPointsVolume::editSalesPointsVolume($data);
return back();
return back();
}
dd($data);
if ($data['action'] === 'edit_user_sales_volume') {
SalesPointsVolume::editSalesPointsVolume($data);
return back();
}
return redirect(route('admin_business_points'));
}
public function recalculate()
{
$user_id = Request::get('points_filter_member_id');
$month = Request::get('points_filter_month');
$year = Request::get('points_filter_year');
private function setFilterVars(){
if (!$user_id) {
\Session()->flash('alert-error', 'Kein Berater ausgewählt.');
return back();
}
if(!session('points_filter_month')){
if (!$month || !$year) {
\Session()->flash('alert-error', 'Monat und Jahr müssen angegeben sein.');
return back();
}
try {
SalesPointsVolume::reCalculateSalesPointsVolume($user_id, $month, $year);
\Session()->flash('alert-success', 'Punkte für den ausgewählten Berater im Monat ' . str_pad($month, 2, "0", STR_PAD_LEFT) . '/' . $year . ' wurden erfolgreich neu berechnet.');
} catch (\Exception $e) {
\Session()->flash('alert-error', 'Fehler bei der Neuberechnung: ' . $e->getMessage());
}
return back();
}
private function setFilterVars()
{
if (!session('points_filter_month')) {
session(['points_filter_month' => intval(date('m'))]);
}
if(!session('points_filter_year')){
if (!session('points_filter_year')) {
session(['points_filter_year' => intval(date('Y'))]);
}
session(['points_filter_member_id' => Request::get('points_filter_member_id')]);
session(['points_filter_status_type_id' => Request::get('points_filter_status_type_id')]);
if(Request::get('points_filter_month')){
if (Request::get('points_filter_month')) {
session(['points_filter_month' => Request::get('points_filter_month')]);
}
if(Request::get('points_filter_year')){
if (Request::get('points_filter_year')) {
session(['points_filter_year' => Request::get('points_filter_year')]);
}
}
@ -94,83 +122,129 @@ class BusinessPointsController extends Controller
//$query = UserSalesVolume::with('user', 'user.account')->with('shopping_order')->select('user_sales_volumes.*')
$query = UserSalesVolume::join('users', 'user_id', '=', 'users.id')->join('user_accounts', 'account_id', '=', 'user_accounts.id')
->select('user_sales_volumes.*', 'users.email', 'user_accounts.m_account', 'user_accounts.first_name', 'user_accounts.last_name')
->where('user_sales_volumes.month', '=', Request::get('points_filter_month'))
->where('user_sales_volumes.year', '=', Request::get('points_filter_year'));
->select('user_sales_volumes.*', 'users.email', 'user_accounts.m_account', 'user_accounts.first_name', 'user_accounts.last_name')
->where('user_sales_volumes.month', '=', Request::get('points_filter_month'))
->where('user_sales_volumes.year', '=', Request::get('points_filter_year'));
if(Request::get('points_filter_member_id')){
if (Request::get('points_filter_member_id')) {
$query->where('user_sales_volumes.user_id', '=', Request::get('points_filter_member_id'));
}
if(Request::get('points_filter_status_type_id')){
if (Request::get('points_filter_status_type_id')) {
$query->where('user_sales_volumes.status', '=', Request::get('points_filter_status_type_id'));
}
return $query;
}
public function datatable(){
public function getSummary()
{
$user_id = Request::get('points_filter_member_id');
$month = Request::get('points_filter_month');
$year = Request::get('points_filter_year');
if (!$user_id || !$month || !$year) {
return response()->json([
'success' => false,
'data' => null
]);
}
// Hole den letzten Eintrag für den User im Monat, da dort die akkumulierten Summen stehen
$lastEntry = UserSalesVolume::where('user_id', $user_id)
->where('month', $month)
->where('year', $year)
->orderBy('id', 'DESC')
->first();
if (!$lastEntry) {
return response()->json([
'success' => false,
'data' => null
]);
}
return response()->json([
'success' => true,
'data' => [
'month_KP_points' => $lastEntry->month_KP_points ?? 0,
'month_TP_points' => $lastEntry->month_TP_points ?? 0,
'month_shop_points' => $lastEntry->month_shop_points ?? 0,
'month_total_net' => $lastEntry->month_total_net ?? 0,
'month_shop_total_net' => $lastEntry->month_shop_total_net ?? 0,
'total_KP_points' => ($lastEntry->month_KP_points ?? 0) + ($lastEntry->month_shop_points ?? 0),
'total_TP_points' => ($lastEntry->month_TP_points ?? 0) + ($lastEntry->month_shop_points ?? 0),
'total_net' => ($lastEntry->month_total_net ?? 0) + ($lastEntry->month_shop_total_net ?? 0),
]
]);
}
public function datatable()
{
$query = $this->initSearch();
return \DataTables::eloquent($query)
->addColumn('id', function (UserSalesVolume $UserSalesVolume) {
return '<button type="button" class="btn btn-xs btn-secondary" data-toggle="modal" data-target="#modals-load-content"
data-id="'.$UserSalesVolume->id.'"
data-id="' . $UserSalesVolume->id . '"
data-action="edit_user_sales_volume"
data-back=""
data-modal="modal-xl"
data-init_from="user"
data-route="'.route('modal_load').'"><span class="fa fa-eye"></span></button>';
data-route="' . route('modal_load') . '"><span class="fa fa-eye"></span></button>';
})
->addColumn('order', function (UserSalesVolume $UserSalesVolume) {
if($UserSalesVolume->shopping_order){
if($UserSalesVolume->status === 1){
return '<a href="' . route('admin_sales_users_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-primary">'.$UserSalesVolume->shopping_order->id.'</a>';
if ($UserSalesVolume->shopping_order) {
if ($UserSalesVolume->status === 1) {
return '<a href="' . route('admin_sales_users_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-primary">' . $UserSalesVolume->shopping_order->id . '</a>';
}
if($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3){
return '<a href="' . route('admin_sales_customers_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-secondary">'.$UserSalesVolume->shopping_order->id.'</a>';
if ($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3) {
return '<a href="' . route('admin_sales_customers_detail', [$UserSalesVolume->shopping_order->id]) . '" class="btn btn-xs btn-secondary">' . $UserSalesVolume->shopping_order->id . '</a>';
}
}
return '';
})
->addColumn('points', function (UserSalesVolume $UserSalesVolume) {
return formatNumber($UserSalesVolume->points);
})
->addColumn('total_net', function (UserSalesVolume $UserSalesVolume) {
return formatNumber($UserSalesVolume->total_net).' &euro;';
return formatNumber($UserSalesVolume->total_net) . ' &euro;';
})
->addColumn('status_turnover', function (UserSalesVolume $UserSalesVolume) {
return '<span class="badge badge-pill badge-'.$UserSalesVolume->getStatusTurnoverColor().'">'.$UserSalesVolume->getStatusTurnoverType().'</span>';
return '<span class="badge badge-pill badge-' . $UserSalesVolume->getStatusTurnoverColor() . '">' . $UserSalesVolume->getStatusTurnoverType() . '</span>';
})
->addColumn('status', function (UserSalesVolume $UserSalesVolume) {
return '<span class="badge badge-pill badge-'.$UserSalesVolume->getStatusColor().'">'.$UserSalesVolume->getStatusType().'</span>';
return '<span class="badge badge-pill badge-' . $UserSalesVolume->getStatusColor() . '">' . $UserSalesVolume->getStatusType() . '</span>';
})
->addColumn('status_points', function (UserSalesVolume $UserSalesVolume) {
return '<span class="badge badge-pill badge-'.$UserSalesVolume->getStatusPointsColor().'">'.$UserSalesVolume->getStatusPointsType().'</span>';
return '<span class="badge badge-pill badge-' . $UserSalesVolume->getStatusPointsColor() . '">' . $UserSalesVolume->getStatusPointsType() . '</span>';
})
->addColumn('message', function (UserSalesVolume $UserSalesVolume) {
return '<span class="no-line-break">'.$UserSalesVolume->message.'</span>';
return '<span class="no-line-break">' . $UserSalesVolume->message . '</span>';
})
->addColumn('info', function (UserSalesVolume $UserSalesVolume) {
return '<span class="no-line-break">'.$UserSalesVolume->info.'</span>';
return '<span class="no-line-break">' . $UserSalesVolume->info . '</span>';
})
->filterColumn('m_account', function($query, $keyword) {
if($keyword != ""){
$query->whereRaw("m_account LIKE ?", '%'.$keyword.'%');
}
})
->filterColumn('first_name', function($query, $keyword) {
if($keyword != ""){
$query->whereRaw("first_name LIKE ?", '%'.$keyword.'%');
->filterColumn('m_account', function ($query, $keyword) {
if ($keyword != "") {
$query->whereRaw("m_account LIKE ?", '%' . $keyword . '%');
}
})
->filterColumn('last_name', function($query, $keyword) {
if($keyword != ""){
$query->whereRaw("last_name LIKE ?", '%'.$keyword.'%');
->filterColumn('first_name', function ($query, $keyword) {
if ($keyword != "") {
$query->whereRaw("first_name LIKE ?", '%' . $keyword . '%');
}
})
->filterColumn('email', function($query, $keyword) {
if($keyword != ""){
$query->whereRaw("email LIKE ?", '%'.$keyword.'%');
->filterColumn('last_name', function ($query, $keyword) {
if ($keyword != "") {
$query->whereRaw("last_name LIKE ?", '%' . $keyword . '%');
}
})
->filterColumn('email', function ($query, $keyword) {
if ($keyword != "") {
$query->whereRaw("email LIKE ?", '%' . $keyword . '%');
}
})
->orderColumn('id', 'id $1')
->orderColumn('order', 'order $1')
->orderColumn('status', 'status $1')
@ -184,4 +258,4 @@ class BusinessPointsController extends Controller
->rawColumns(['id', 'order', 'status_turnover', 'status', 'status_points', 'message', 'info', 'total_net'])
->make(true);
}
}
}