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 = '
    '; foreach ($this->business_users as $business_user) { $ret .= $this->addItem($business_user, $deep); } $ret .= '
'; return $ret; } private function addItem($item, $deep) { $button = ''; if (($this->init_from === 'admin' && \Auth::user()->isAdmin()) || ($this->init_from === 'member')) { // && \Auth::user()->id === $item->user_id $button = ' | '; } return '
  • ' . '
    ' . (($deep > 0) ? '
    ' . $deep . '
    ' : '') . '
    ' . $this->addParentItem($item, $deep) . '
  • '; } private function addParentItem($item, $deep) { if ($item->businessUserItems) { $ret = '
      '; foreach ($item->businessUserItems as $parent) { $ret .= $this->addItem($parent, $deep + 1); } $ret .= '
    '; return $ret; } return; } public function isParentless() { return $this->parentless ? true : false; } public function makeParentlessHtml() { $ret = ""; foreach ($this->parentless as $item) { $ret .= '
  • ' . '
    ' . '
  • '; } return $ret; } public function makeSponsorHtml() { if ($this->sponsor) { //' | ' $ret = '
  • ' . '
  • '; return $ret; } return __('team.no_sponsor_assigned'); } }