date = $date; return $this; } public function makeUser(User $user){ $this->user_level_active = $user->user_level ? $user->user_level : null; $this->b_user = new UserBusiness(); $fill = [ 'user_id' => $user->id, 'month' => $this->date->month, 'year' => $this->date->year, 'm_level' => $user->m_level, 'm_sponsor' => $user->m_sponsor, 'user_level_name' => $user->user_level ? $user->user_level->name : '', 'active_account' => $user->payment_account ? Carbon::parse($user->payment_account)->gt(Carbon::parse($this->date->start_date)) : false, 'payment_account_date' => $user->payment_account ? $user->getPaymentAccountDateFormat(false) : NULL, 'active_date' => $user->active_date ? $user->active_date : NULL, 'm_account' => $user->account->m_account, 'email' => $user->email, 'first_name' => $user->account->first_name, 'last_name' => $user->account->last_name, 'sales_volume_points' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points'), 'sales_volume_points_shop' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points_shop'), 'sales_volume_points_sum' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_points_sum'), 'sales_volume_total' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total'), 'sales_volume_total_shop' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total_shop'), 'sales_volume_total_sum' => $user->getUserSalesVolumeBy($this->date->month, $this->date->year, 'sales_volume_total_sum'), 'margin' => $user->user_level_active ? $user->user_level_active->margin : 0, 'margin_shop' => $user->user_level_active ? $user->user_level_active->margin_shop : 0, 'qual_kp' => $user->user_level_active ? $user->user_level_active->qual_kp : 0, 'qual_tp' => $user->user_level_active ? $user->user_level_active->qual_tp : 0, ]; $this->b_user->fill($fill); } public function addUserID(){ TreeCalcBot::addUserID($this->user_id); } public function isQualKP(){ return ($this->sales_volume_points_sum >= $this->qual_kp) ? true : false; } public function getRestQualKP(){ return $this->sales_volume_points_sum - $this->qual_kp; } public function checkSponsor(){ if($this->m_sponsor === null){ $this->m_sponsor_name = 'Keinen Sponsor zugewiesen'; return; } $user = User::find($this->m_sponsor); if($user){ if($user->account){ $this->m_sponsor_name = substr('Sponsor: '.$user->account->first_name.' '.$user->account->last_name.' | '.$user->email.' | '.$user->account->m_account, 0, 190); }else{ $this->m_sponsor_name = 'Sponsor: '.$user->email; } return; } $this->m_sponsor_name = 'Sponsor wurde gelöscht.'; return; } /* 'total_tp' => , 'total_qual_tp' => , 'commission_total' => , 'lines', 'items', 'qual_user_level_id' */ public function readParentsUser(){ $users = User::with('account')->select('users.*') ->where('users.deleted_at', '=', null) ->where('users.id', '!=', 1) ->where('users.admin', "<", 4) ->where('users.m_level', "!=", null) ->where('users.m_sponsor', "=", $this->user_id) //<- need the id for parents / sponsors ->where('users.payment_account', "!=", null) ->where('users.active_date', "<=", $this->date->end_date) ->get(); dd($users); if($users){ foreach($users as $user){ $TreeUserItem = new TreeUserItem($this->date); $TreeUserItem->makeUser($user); $TreeUserItem->addUserID(); $this->items[] = $TreeUserItem; } } foreach($this->items as $item){ $item->readParentsUser(); } } public function calcUserTP($line){ if(!isset($this->lines[$line])){ $this->lines[$line] = new stdClass(); $this->lines[$line]->points = 0; } foreach($this->items as $item){ if(count($item->items) > 0){ $this->calcUserTP($line+1); } $this->lines[$line]->points += $item->sales_volume_points_sum; $this->total_tp += $item->sales_volume_points_sum; } } public function calcQualTP(){ if($this->isQualKP()){ $this->total_qual_tp = $this->total_tp + $this->getRestQualKP(); $this->qual_user_level = UserLevel::where('qual_tp', '<=', $this->total_qual_tp)->where('pos', '<=', $this->user->user_level->pos)->orderBy('qual_tp', 'desc')->first(); $this->commission_total = 0; if($this->qual_user_level){ foreach($this->lines as $line => $values){ $values->margin = $this->qual_user_level->{'pr_line_'.$line}; if($line > 6){ //wachstumsbonus $values->margin = $this->qual_user_level->growth_bonus; } $values->commission = round($values->points / 100 * $values->margin, 2); $this->commission_total += $values->commission; $this->lines[$line] = $values; } } } } public function __get($property) { if (property_exists($this->b_user, $property)) { return $this->b_user->$property; } if (isset($this->b_user->{$property})) { return $this->b_user->{$property}; } } }