date = new stdClass(); $date = Carbon::parse($year.'-'.$month.'-1'); $this->date->month = $month; $this->date->year = $year; $this->date->start_date = $date->format('Y-m-d H:i:s'); $this->date->end_date = $date->endOfMonth()->format('Y-m-d H:i:s'); $this->init_from = $init_from; } public function initStructureAdmin($check = true, $forceLiveCalculation = false) { //check is month is saved. if($check && $UserBusinessStructure = self::isFromStored($this->date->month, $this->date->year)){ $this->readStoredRootUsers($UserBusinessStructure); $this->readStoredParentsUsers($UserBusinessStructure); $this->readStoredParentlessUser($UserBusinessStructure); }else{ $this->readRootUsers(); $this->readParentsUsers(); $this->readParentlessUser(); } } public function initStructureUser($user_id) { $BusinessUserItem = new BusinessUserItem($this->date); $BusinessUserItem->makeUser($user_id); $BusinessUserItem->addUserID(); $this->business_users[] = $BusinessUserItem; //check is month is saved. if($UserBusinessStructure = self::isFromStored($this->date->month, $this->date->year)){ $this->readStoredParentsUsers($UserBusinessStructure); if(isset($this->business_users[0]) && $this->business_users[0]->sponsor){ $this->readStoredSponsorUser($this->business_users[0]->sponsor->user_id); } }else{ $this->readParentsUsers(); $this->readSponsorUser($user_id); } } public function initBusinesslUserDetail($user) { $this->business_user = new BusinessUserItem($this->date); $this->business_user->makeUser($user->id); $this->business_user->checkSponsor($user); if(!$this->business_user->isSave()){ //Aufbau der Struktur für den User in die unendliche Tiefe. $this->business_user->readParentsBusinessUsers(); //calculate Points in Lines if(count($this->business_user->businessUserItems) > 0){ $this->calcUserPoints($this->business_user->businessUserItems, 1); } //qualifikation nach qual_kp (KundenPoints) und qual_pp (PaylinePoints) $this->business_user->calcQualPP(); } } /*public function storeBusinesslUser() { $this->business_user->storeUser(); }*/ public static function isFromStored($month, $year){ //when is stored an completed $UserBusinessStructure = UserBusinessStructure::where('year', $year)->where('month', $month)->first(); if($UserBusinessStructure && $UserBusinessStructure->completed){ return $UserBusinessStructure; } return false; } private function calcUserPoints($businessUserItems, $line){ if(!isset($this->business_user->business_lines[$line])){ $obj = new stdClass(); $obj->points = 0; $this->business_user->addBusinessLineToUser($line, $obj); } foreach($businessUserItems as $business_user_item){ if(count($business_user_item->businessUserItems) > 0){ $this->calcUserPoints($business_user_item->businessUserItems, $line+1); } //business_lines points nach line $this->business_user->addBusinessLinePoints($line, $business_user_item->sales_volume_points_TP_sum); //TP + Shop Points //total_pp gesamte Punkte $this->business_user->addTotalTP($business_user_item->sales_volume_points_TP_sum); //TP + Shop Points } } public function getGrowthBonus(){ if(count($this->business_user->business_lines) > 6){ $b_lines = $this->business_user->business_lines->toArray(); return array_slice($b_lines, 6); } return []; } public function getKeybyLine($line, $key){ if($this->business_user->business_lines){ $b_lines = $this->business_user->business_lines; if(isset($b_lines[$line])){ if($b_lines[$line] instanceof stdClass){ if(isset($b_lines[$line]->{$key})){ return $b_lines[$line]->{$key}; } }else{ if(isset($b_lines[$line][$key])){ return $b_lines[$line][$key]; } } } } return 0; } //* reading from current*// private function readRootUsers(){ $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', "=", null) ->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->business_users[] = $BusinessUserItem; } } } private function readParentsUsers(){ foreach($this->business_users as $business_user){ $business_user->readParentsBusinessUsers(); } } private function readParentlessUser(){ $users = User::with('account')->select('users.*') ->where('users.deleted_at', '=', null) ->where('users.id', '!=', 1) ->where('users.admin', "<", 4) ->where('users.payment_account', "!=", null) ->where('users.active_date', "<=", $this->date->end_date) ->get(); foreach($users as $user){ if(!isset(self::$userIDs[$user->id])){ $BusinessUserItem = new BusinessUserItem($this->date); $BusinessUserItem->makeUser($user->id); $this->parentless[] = $BusinessUserItem; } } } //* reading from stored*// private function readStoredRootUsers(UserBusinessStructure $userBusinessStructure){ //first level is root if($userBusinessStructure->structure){ foreach($userBusinessStructure->structure as $obj){ $BusinessUserItem = new BusinessUserItem($this->date); $BusinessUserItem->makeUser($obj->user_id); $BusinessUserItem->addUserID(); $this->business_users[] = $BusinessUserItem; } } } private function readStoredParentsUsers(UserBusinessStructure $userBusinessStructure){ foreach($this->business_users as $business_user){ $business_user->readStoredParentsBusinessUsers($userBusinessStructure->structure); } } private function readStoredParentlessUser(UserBusinessStructure $userBusinessStructure){ if($userBusinessStructure->parentless){ foreach($userBusinessStructure->parentless as $obj){ if(!isset(self::$userIDs[$obj->user_id])){ $BusinessUserItem = new BusinessUserItem($this->date); $BusinessUserItem->makeUser($obj->user_id); $this->parentless[] = $BusinessUserItem; } } } } public function readSponsorUser($user_id){ $user = User::find($user_id); $userSponsor = User::find($user->m_sponsor); if($userSponsor){ $this->sponsor = new BusinessUserItem($this->date); $this->sponsor->makeUser($userSponsor->id); } } public function readStoredSponsorUser($user_id){ $this->sponsor = new BusinessUserItem($this->date); $this->sponsor->makeUser($user_id); } public function getItems(){ return $this->business_users; } public function makeHtmlTree(){ $deep = 0; $ret = '