middleware('admin'); } public function index() { $this->setFilterVars(); $data = [ 'filter_months' => HTMLHelper::$months, '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')]); } 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{ $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').'%'); })->get(); $query->whereHas('user', function ($query) { return $query->where('email', 'LIKE', '%'.Request::get('credit_filter_name').'%'); })->get(); } return $query; } public function datatable(){ $query = $this->initSearch(); return \DataTables::eloquent($query) ->addColumn('view', function (UserCredit $UserCredit) { $ret = ""; if($UserCredit->isCredit()){ $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->message)." / ".$user_credit_item->created_at->format('d.m.Y')."
"; } } return $ret; }) ->addColumn('status', function (UserCredit $UserCredit) { return ' '.$UserCredit->getStatusType().' '; }) ->orderColumn('id', 'id $1') ->orderColumn('status', 'status $1') ->orderColumn('total', 'total $1') ->rawColumns(['total', 'credits', 'status', 'view']) ->make(true); } }