middleware('admin'); } public function index() { $this->setFilterVars(); $data = [ 'filter_months' => HTMLHelper::getTransMonths(), 'filter_years' => HTMLHelper::getYearRange(2022), 'user_credit_items' => $this->makeUserCreditItems(), ]; return view('admin.payment.credit', $data); } public function store() { $data = Request::all(); if (isset($data['action']) && $data['action'] === 'add-user-credit') { if (!isset($data['member_id']) || !$user = User::find($data['member_id'])) { \Session()->flash('alert-error', 'Vertriebspartner nicht gefunden'); return back(); } if (!isset($data['credit'])) { \Session()->flash('alert-error', 'Bitte Betrag eingeben'); return back(); } if (!isset($data['message'])) { \Session()->flash('alert-error', 'Bitte Betreff eingeben'); return back(); } $credit = Util::reFormatNumber($data['credit']); $credit = number_format($credit, 2, '.', ''); Payment::addUserCreditMargin($user, $credit, 3, $data['message']); \Session()->flash('alert-success', "Guthaben hinzugefügt"); } return redirect(route('admin_payments_credit')); } public function create() { $data = Request::all(); if (isset($data['action'])) { if ($data['action'] === 'create_credit') { if (!isset($data['userid'])) { abort(404); } $user = User::findOrFail($data['userid']); $credit_repo = new CreditRepository($user); $credit_repo->create($data); \Session()->flash('alert-success', "Gutschrift erstellt"); return redirect($data['back']); } if ($data['action'] === 'user-credit-status') { $UserCredit = UserCredit::findOrFail($data['id']); $UserCredit->status = $data['status']; $UserCredit->save(); \Session()->flash('alert-success', "Status gespeichert"); return back(); } } } private function setFilterVars() { if (!session('credit_filter_month')) { session(['credit_filter_month' => intval(date('m'))]); } if (!session('credit_filter_year')) { session(['credit_filter_year' => intval(date('Y'))]); } if (Request::get('credit_filter_name')) { session(['credit_filter_name' => Request::get('credit_filter_name')]); } else { session(['credit_filter_name' => '']); } if (Request::get('credit_filter_month')) { session(['credit_filter_month' => Request::get('credit_filter_month')]); } if (Request::get('credit_filter_year')) { session(['credit_filter_year' => Request::get('credit_filter_year')]); } } private function makeUserCreditItems() { $ret = []; $UserCreditItems = UserCreditItem::wherePaid(false)->get(); foreach ($UserCreditItems as $userCreditItem) { if (isset($ret[$userCreditItem->user_id])) { $ret[$userCreditItem->user_id]['sum'] += $userCreditItem->credit; $ret[$userCreditItem->user_id]['entries'][$userCreditItem->id] = $userCreditItem; } else { if (!isset($userCreditItem->user)) { /* gelöschte User nicht anzeigen $user = User::withTrashed()->with(['account' => fn($q) => $q->withTrashed()])->where('id', $userCreditItem->user_id)->first(); $ret[$userCreditItem->user_id] = [ 'user_id' => $userCreditItem->user_id, 'm_account' => $user ? $user->account->m_account : "gelöscht", 'first_name' => $user ? $user->account->first_name : "gelöscht", 'last_name' => $user ? $user->account->last_name : "gelöscht", 'email' => $user ? $user->email : "gelöscht", 'sum' => $userCreditItem->credit, 'entries' => [$userCreditItem->id => $userCreditItem], ]; */ } else { $ret[$userCreditItem->user_id] = [ 'user_id' => $userCreditItem->user_id, 'm_account' => $userCreditItem->user->account->m_account, 'first_name' => $userCreditItem->user->account->first_name, 'last_name' => $userCreditItem->user->account->last_name, 'email' => $userCreditItem->user->email, 'sum' => $userCreditItem->credit, 'entries' => [$userCreditItem->id => $userCreditItem], ]; } } } return $ret; } public function delete($id, $del) { if ($del === 'user_credit_item') { $UserCreditItem = UserCreditItem::findOrFail($id); if ($deleteTime = $UserCreditItem->deleteTime()) { $UserCreditItem->delete(); \Session()->flash('alert-success', "Guthaben ist gelöscht"); } else { \Session()->flash('alert-error', "Guthaben kann nicht gelöscht werden"); } } return redirect(route('admin_payments_credit')); } private function initSearch($archive = false, $request = true) { $this->setFilterVars(); $date_start = Carbon::parse('01.' . Request::get('credit_filter_month') . '.' . Request::get('credit_filter_year'))->format('Y-m-d'); $date_end = Carbon::parse('01.' . Request::get('credit_filter_month') . '.' . Request::get('credit_filter_year'))->endOfMonth()->format('Y-m-d'); $query = UserCredit::with('user', 'user.account')->select('user_credits.*') ->whereBetween('date', [$date_start, $date_end]); if (Request::get('credit_filter_name')) { $query->whereHas('user.account', function ($query) { return $query->where('first_name', 'LIKE', '%' . Request::get('credit_filter_name') . '%') ->orWhere('last_name', 'LIKE', '%' . Request::get('credit_filter_name') . '%'); }); } return $query; } public function datatable() { $query = $this->initSearch(); return \DataTables::eloquent($query) ->addColumn('user.account.first_name', function (UserCredit $UserCredit) { return isset($UserCredit->user->account) ? $UserCredit->user->account->first_name : "gelöscht"; }) ->addColumn('user.account.last_name', function (UserCredit $UserCredit) { return isset($UserCredit->user->account) ? $UserCredit->user->account->last_name : "gelöscht"; }) ->addColumn('user.email', function (UserCredit $UserCredit) { return isset($UserCredit->user) ? $UserCredit->user->email : "gelöscht"; }) ->addColumn('view', function (UserCredit $UserCredit) { $ret = ""; if ($UserCredit->isCredit()) { $ret .= ' '; $ret .= '
'; $ret .= ' '; $ret .= ' '; } else { $ret = "-"; } return $ret; }) ->addColumn('total', function (UserCredit $UserCredit) { return '' . $UserCredit->getFormattedTotal() . " €"; }) ->addColumn('credits', function (UserCredit $UserCredit) { $ret = ""; if ($UserCredit->user_credit_items) { foreach ($UserCredit->user_credit_items as $user_credit_item) { $ret .= nl2br($user_credit_item->getTransMessage()) . " / " . $user_credit_item->created_at->format('d.m.Y') . "
"; } } return $ret; }) ->addColumn('status', function (UserCredit $UserCredit) { return ' ' . $UserCredit->getStatusType() . ' '; }) ->filterColumn('user.account.first_name', function ($query, $keyword) { if ($keyword != "") { $query->whereHas('user.account', function ($query) use ($keyword) { return $query->where('first_name', 'LIKE', '%' . $keyword . '%'); }); } }) ->filterColumn('user.account.last_name', function ($query, $keyword) { if ($keyword != "") { $query->whereHas('user.account', function ($query) use ($keyword) { return $query->where('last_name', 'LIKE', '%' . $keyword . '%'); }); } }) ->filterColumn('user.email', function ($query, $keyword) { if ($keyword != "") { $query->whereHas('user', function ($query) use ($keyword) { return $query->where('email', 'LIKE', '%' . $keyword . '%'); }); } }) ->orderColumn('id', 'id $1') ->orderColumn('status', 'status $1') ->orderColumn('total', 'total $1') ->rawColumns(['total', 'credits', 'status', 'view']) ->make(true); } }