date = $date; return $this; } public function makeUser($user_id){ //check for user an load $this->b_user = UserBusiness::where('user_id', $user_id)->where('month', $this->date->month)->where('year', $this->date->year)->first(); if($this->b_user !== null){ return; } //read User here, can delete in stored data. $user = User::find($user_id); $user_level_active = $user->user_level ? $user->user_level : null; $this->user_level_active_pos = $user_level_active ? $user_level_active->pos : 0; $this->b_user = new UserBusiness(); $fill = [ 'user_id' => $user->id, 'month' => $this->date->month, 'year' => $this->date->year, 'm_level_id' => $user->m_level, 'user_level_name' => $user_level_active ? $user_level_active->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_level_active ? $user_level_active->margin : 0, 'margin_shop' => $user_level_active ? $user_level_active->margin_shop : 0, 'qual_kp' => $user_level_active ? $user_level_active->qual_kp : 0, 'qual_tp' => $user_level_active ? $user_level_active->qual_tp : 0, 'commission_team_total' => 0, 'commission_shop_sales' => 0, ]; $this->b_user->fill($fill); $this->b_user->business_lines = []; $this->b_user->user_items = []; $this->b_user->commission_shop_sales = round($this->b_user->sales_volume_total_shop / 100 * $this->b_user->margin_shop, 2); } public function addUserID(){ TreeCalcBot::addUserID($this->b_user->user_id); } public function getBUser(){ return $this->b_user; } public function addBusinessLineToUser($line, $obj){ $this->b_user->business_lines[$line] = $obj; } public function addBusinessLinePoints($line, $points){ $obj = $this->business_lines[$line]; $obj->points += $points; $this->b_user->business_lines[$line] = $obj; } public function addTotalTP($points){ $this->b_user->total_tp += $points; } 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 getCommissionTotal(){ return round($this->commission_shop_sales + $this->commission_team_total, 2); } public function calcQualTP(){ if($this->isQualKP()){ $this->b_user->total_qual_tp = $this->total_tp + $this->getRestQualKP(); $commission_total = 0; $qualUserLevel = UserLevel::where('qual_tp', '<=', $this->total_qual_tp)->where('pos', '<=', $this->user_level_active_pos)->orderBy('qual_tp', 'desc')->first(); if($qualUserLevel){ $this->b_user->qual_user_level = $qualUserLevel->toArray(); foreach($this->business_lines as $line => $object){ //growth_bonus = ab ebene 6 wachstumsbonus $object->margin = ($line <= 6) ? $this->qual_user_level['pr_line_'.$line] : $this->qual_user_level['growth_bonus']; $object->commission = round($object->points / 100 * $object->margin, 2); $commission_total += $object->commission; $this->b_user->business_lines[$line] = $object; } } $this->b_user->commission_team_total = $commission_total; } } /*public function storeUser(){ $this->b_user->user_items = $this->storeUserItems($this->businessUserItems, 1); $this->b_user->save(); } private function storeUserItems($userItems, $line){ $ret = []; foreach($userItems as $userItem){ $temp = null; if(count($userItem->businessUserItems) > 0){ $temp = $this->storeUserItems($userItem->businessUserItems, $line+1); } $obj = new stdClass(); $obj->user_id = $userItem->user_id; $obj->line = $line; $obj->points = $userItem->sales_volume_points_sum; $obj->parents = $temp; $ret[] = $obj; } return $ret; }*/ public function readParentsBusinessUsers(){ $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->b_user->user_id) //<- need the id for parents / sponsors ->where('users.payment_account', "!=", null) ->where('users.active_date', "<=", $this->date->end_date) ->get(); if($users){ foreach($users as $user){ $BusinessUserItem = new BusinessUserItem($this->date); $BusinessUserItem->makeUser($user->id); $BusinessUserItem->addUserID(); $this->businessUserItems[] = $BusinessUserItem; } } foreach($this->businessUserItems as $businessUserItem){ $businessUserItem->readParentsBusinessUsers(); } } public function readStoredParentsBusinessUsers($structure){ $parents = $this->findParentsBusinessOnStored($this->b_user->user_id, $structure); if($parents){ foreach($parents as $obj){ $BusinessUserItem = new BusinessUserItem($this->date); $BusinessUserItem->makeUser($obj->user_id); $BusinessUserItem->addUserID(); $this->businessUserItems[] = $BusinessUserItem; } foreach($this->businessUserItems as $businessUserItem){ $businessUserItem->readStoredParentsBusinessUsers($parents); } } } private function findParentsBusinessOnStored($user_id, $structures){ if($structures){ foreach($structures as $obj){ if($user_id === $obj->user_id){ return $obj->parents; } if($obj->parents){ if($ret = $this->findParentsBusinessOnStored($user_id, $obj->parents)){ return $ret; } } } } return null; } public function checkSponsor($user){ //check is store? has ID if($this->b_user->isSave()){ return; } $sponsor = new stdClass(); $sponsor->is_sponsor = false; $sponsor->user_id = false; $sponsor->first_name = ''; $sponsor->last_name = ''; $sponsor->email = ''; $sponsor->m_account = ''; $sponsor->full_name = 'Keinen Sponsor zugewiesen'; if($user->m_sponsor){ if($user->user_sponsor){ $sponsor->is_sponsor = true; $sponsor->user_id = $user->user_sponsor->id; if($user->user_sponsor->account){ $sponsor->full_name = substr('Sponsor: '.$user->user_sponsor->account->first_name.' '.$user->user_sponsor->account->last_name.' | '.$user->user_sponsor->email.' | '.$user->user_sponsor->account->m_account, 0, 250); $sponsor->first_name = $user->user_sponsor->account->last_name; $sponsor->last_name = $user->user_sponsor->account->first_name; $sponsor->m_account = $user->user_sponsor->account->m_account; }else{ $sponsor->full_name = 'Sponsor: '.$user->user_sponsor->email; } $sponsor->email = $user->user_sponsor->email; }else{ $sponsor->full_name = 'Sponsor wurde gelöscht.'; } } $this->b_user->sponsor = $sponsor; return; } public function isSave(){ return $this->b_user->isSave(); } 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}; } } }