middleware('admin'); } 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(); $this->setFilterVars(); $data = [ 'filter_months' => HTMLHelper::getTransMonths(), 'filter_years' => HTMLHelper::getYearRange(), 'filter_members' => $filter_members, 'filter_status_types' => UserSalesVolume::getTransStatusType(), ]; return view('admin.business.points', $data); } public function store() { $data = Request::all(); if (! isset($data['action'])) { return back(); } 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(); } if (! isset($data['is_checked_action'])) { \Session()->flash('alert-error', 'Änderung nicht bestätigt'); return back(); } 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 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'); if (! $user_id) { \Session()->flash('alert-error', 'Kein Berater ausgewählt.'); return back(); } 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')) { 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')) { session(['points_filter_month' => Request::get('points_filter_month')]); } if (Request::get('points_filter_year')) { session(['points_filter_year' => Request::get('points_filter_year')]); } } private function initSearch() { $this->setFilterVars(); // $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')); 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')) { $query->where('user_sales_volumes.status', '=', Request::get('points_filter_status_type_id')); } return $query; } 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 ''; }) ->addColumn('order', function (UserSalesVolume $UserSalesVolume) { if ($UserSalesVolume->shopping_order) { // Status 1 = Beraterbestellung if ($UserSalesVolume->status === 1) { return ''.$UserSalesVolume->shopping_order->id.''; } // Status 2/3 = Shop-Bestellung if ($UserSalesVolume->status === 2 || $UserSalesVolume->status === 3) { return ''.$UserSalesVolume->shopping_order->id.''; } // Status 6 = Storno - Link zur ursprünglichen Bestellung mit Storno-Icon if ($UserSalesVolume->status === 6) { // Prüfen ob Berater- oder Shop-Bestellung anhand des payment_for Feldes $route = ($UserSalesVolume->shopping_order->payment_for === 6 || $UserSalesVolume->shopping_order->payment_for === 7) ? route('admin_sales_customers_detail', [$UserSalesVolume->shopping_order->id]) : route('admin_sales_users_detail', [$UserSalesVolume->shopping_order->id]); return ' '.$UserSalesVolume->shopping_order->id.''; } } return ''; }) ->addColumn('points', function (UserSalesVolume $UserSalesVolume) { return formatNumber($UserSalesVolume->points); }) ->addColumn('total_net', function (UserSalesVolume $UserSalesVolume) { return formatNumber($UserSalesVolume->total_net).' €'; }) ->addColumn('status_turnover', function (UserSalesVolume $UserSalesVolume) { return ''.$UserSalesVolume->getStatusTurnoverType().''; }) ->addColumn('status', function (UserSalesVolume $UserSalesVolume) { return ''.$UserSalesVolume->getStatusType().''; }) ->addColumn('status_points', function (UserSalesVolume $UserSalesVolume) { return ''.$UserSalesVolume->getStatusPointsType().''; }) ->addColumn('message', function (UserSalesVolume $UserSalesVolume) { return ''.$UserSalesVolume->message.''; }) ->addColumn('info', function (UserSalesVolume $UserSalesVolume) { return ''.$UserSalesVolume->info.''; }) ->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('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') ->orderColumn('message', 'message $1') ->orderColumn('info', 'info $1') ->orderColumn('total_net', 'total_net $1') ->orderColumn('email', 'email $1') ->orderColumn('m_account', 'm_account $1') ->orderColumn('first_name', 'first_name $1') ->orderColumn('last_name', 'last_name $1') ->rawColumns(['id', 'order', 'status_turnover', 'status', 'status_points', 'message', 'info', 'total_net']) ->make(true); } }