middleware('auth'); $this->startYear = 2021; $this->endYear = date('Y'); $this->rangeYears = range($this->startYear, $this->endYear); $this->activeYear = $this->endYear; } public function index() { abort(403, "in progress"); $data = $this->makeData(); return view('admin.payment.credit.index', $data); } public function store(){ $data = Request::all(); if(isset($data['action']) && $data['action'] === 'add-user-credit'){ $add_credit_error = false; if(!isset($data['member_id']) || !$user = User::find($data['member_id'])){ $add_credit_error = 'Vertriebspartner nicht gefunden'; } if(!isset($data['credit'])){ $add_credit_error = 'Bitte Betrag eingeben'; } if(!isset($data['message'])){ $add_credit_error = 'Bitte Mitteilung eingeben'; } if($add_credit_error){ $data = $this->makeData(); $data['add_credit_error'] = $add_credit_error; return view('admin.payment.credit.index', $data); } $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']); $invoice_repo = new CreditRepository($user); $invoice_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 makeData(){ $this->setActiveYears(); //$date1 = Carbon::parse('01.01.'.$this->activeYear." 00:00:00")->format('Y-m-d H:i:s'); //$date2 = Carbon::parse('31.12.'.$this->activeYear." 23:59:59")->toDateString(); $ShoppingOrderMargins = ShoppingOrderMargin::join('users', 'm_sponsor_id', '=', 'users.id') ->groupBy('m_sponsor_id') ->join('user_accounts', 'account_id', '=', 'user_accounts.id') ->select('users.id as user_id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name') ->wherePaid(true) ->whereCancellation(false) ->wherePartnerCommissionPaid(false) ->where('partner_commission_pending_to', '<', Carbon::now()) ->get(); $ShoppingOrderMarginPendings = ShoppingOrderMargin::join('users', 'm_sponsor_id', '=', 'users.id') ->groupBy('m_sponsor_id') ->join('user_accounts', 'account_id', '=', 'user_accounts.id') ->select('users.id as user_id', 'users.email', 'user_accounts.first_name', 'user_accounts.last_name') ->wherePaid(true) ->whereCancellation(false) ->wherePartnerCommissionPaid(false) ->where('partner_commission_pending_to', '>=', Carbon::now()) ->get(); $UserCreditMargins = UserCreditMargin::wherePaid(false)->get(); $ShoppingOrderMarginUserIds = ShoppingOrderMargin::select('m_sponsor_id')->groupBy('m_sponsor_id') ->wherePaid(true) ->whereCancellation(false) ->wherePartnerCommissionPaid(false) ->where('partner_commission_pending_to', '<', Carbon::now()) ->get()->pluck('m_sponsor_id')->toArray(); $onlyUserCreditMargins = []; foreach($UserCreditMargins as $key => $UserCreditMargin){ if(!in_array($UserCreditMargin->user_id, $ShoppingOrderMarginUserIds)){ if(isset($onlyUserCreditMargins[$UserCreditMargin->user_id])){ $onlyUserCreditMargins[$UserCreditMargin->user_id]['sum'] += $UserCreditMargin->credit; $onlyUserCreditMargins[$UserCreditMargin->user_id]['entries'][$UserCreditMargin->id] = $UserCreditMargin; }else{ $onlyUserCreditMargins[$UserCreditMargin->user_id] = [ 'user_id' => $UserCreditMargin->user->id, 'first_name' => $UserCreditMargin->user->account->first_name, 'last_name' => $UserCreditMargin->user->account->last_name, 'email' => $UserCreditMargin->user->email, 'sum' => $UserCreditMargin->credit, 'entries' => [$UserCreditMargin->id => $UserCreditMargin], ]; } } } $data = [ 'years' => $this->rangeYears, 'active_year' => $this->activeYear, 'ShoppingOrderMargins' => $ShoppingOrderMargins, 'ShoppingOrderMarginPendings' => $ShoppingOrderMarginPendings, 'onlyUserCreditMargins' => $onlyUserCreditMargins, ]; return $data; } private function setActiveYears(){ if(Request::get('filter_sales_year')){ $this->activeYear = Request::get('filter_sales_year'); } } public function delete($id, $del){ if($del === 'user_credit_margin'){ $UserCreditMargin = UserCreditMargin::findOrFail($id); if($deleteTime = $UserCreditMargin->deleteTime()){ $UserCreditMargin->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')); } public function datatable(){ $this->setActiveYears(); $date1 = Carbon::parse('01.01.'.$this->activeYear)->format('Y-m-d'); $date2 = Carbon::parse('31.12.'.$this->activeYear)->format('Y-m-d'); $query = UserCredit::with('user', 'user.account')->select('user_credits.*') //::with('shopping_user', )->select('shopping_orders.*') //->where('paid', '=', 1) ->whereBetween('date', [$date1, $date2]); //->orderBy('created_at', 'DESC'); return \DataTables::eloquent($query) ->addColumn('total', function (UserCredit $UserCredit) { return $UserCredit->getFormattedTotal()." €"; }) ->addColumn('user_margins', function (UserCredit $UserCredit) { $ret = ""; if($UserCredit->user_margins){ foreach($UserCredit->user_margins as $user_margin){ $ret .= $user_margin->firstname."/".$user_margin->lastname."/".$user_margin->reference."/".$user_margin->created_at."
"; } } if($UserCredit->user_credits){ foreach($UserCredit->user_credits as $user_credit){ $ret .= nl2br($user_credit->message)." / ".$user_credit->created_at."
"; } } return $ret; }) /* ->addColumn('txaction', function (ShoppingOrder $ShoppingOrder) { return Payment::getShoppingOrderBadge($ShoppingOrder); })*/ ->addColumn('credit', function (UserCredit $UserCredit) { $ret = ""; if(Credit::isCredit($UserCredit)){ $ret .= ' '; $ret .= ''; }else{ $ret = "-"; } return $ret; }) ->addColumn('status', function (UserCredit $UserCredit) { return ' '.$UserCredit->getStatusType().' '; }) ->orderColumn('id', 'id $1') ->orderColumn('status', 'status $1') ->orderColumn('total', 'total $1') ->rawColumns(['shipping_order', 'total', 'credit', 'status', 'user_margins']) ->make(true); } }