|User wherePreDeletedAt($value) * @property-read \Illuminate\Database\Eloquent\Collection $userBusiness * @property-read int|null $user_business_count * @mixin \Eloquent */ class User extends Authenticatable { use Notifiable, HasApiTokens; use SoftDeletes; protected $dates = ['deleted_at']; protected $table = 'users'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'email', 'password', 'token', ]; protected $casts = [ 'settings' => 'array', 'payment_methods' => 'array', 'pre_deleted_at' => 'datetime', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', 'token', ]; private $userSalesVolume = false; public function account() { return $this->belongsTo('App\Models\UserAccount', 'account_id'); } public function user_level() { return $this->belongsTo('App\Models\UserLevel', 'm_level'); } public function user_sponsor() { return $this->belongsTo('App\User', 'm_sponsor'); } public function user_pre_sponsor() { return $this->belongsTo('App\User', 'pre_sponsor'); } public function payment_order_product() { return $this->belongsTo('App\Models\Product', 'payment_order_id'); } public function files() { return $this->hasMany('App\Models\File', 'user_id', ''); } public function shopping_orders() { return $this->hasMany('App\Models\ShoppingOrder', 'auth_user_id', ''); } public function user_histories() { return $this->hasMany('App\Models\UserHistory', 'user_id', ''); } public function shop() { return $this->hasOne('App\Models\UserShop', 'user_id', 'id'); } public function user_update_email() { return $this->hasMany('App\Models\UserUpdateEmail', 'user_id', 'id'); } public function member_shopping_orders() { return $this->hasMany('App\Models\ShoppingOrder', 'member_id', 'id'); } public function member_shopping_users() { return $this->hasMany('App\Models\ShoppingUser', 'member_id', 'id'); } public function userBusiness() { return $this->hasMany('App\Models\UserBusiness', 'user_id', 'id'); } public function getLocale() { return $this->lang ? $this->lang : \App::getLocale(); } public function getMUserSponsor() { if ($this->user_sponsor && $this->user_sponsor->account) { return $this->user_sponsor->account->first_name . " " . $this->user_sponsor->account->last_name . " | " . $this->user_sponsor->email; } } public function getFullName($email = true) { $ret = ""; if ($this->account) { $ret = $this->account->first_name . " " . $this->account->last_name; } if ($email && $this->id > 1) { $ret .= " | " . $this->email; } return $ret; } /** * @return bool */ public function isPasswort() { if ($this->password == env('APP_KEY')) { return false; } return true; } /** * @return bool */ public function isVIP() { if ($this->admin >= 1) { return true; } return false; } /** * @return bool */ public function isAdmin() { if ($this->admin >= 2) { return true; } return false; } /** * @return bool */ public function isSuperAdmin() { if ($this->admin >= 3) { return true; } return false; } /** * @return bool */ public function isSySAdmin() { if ($this->admin >= 4) { return true; } return false; } public function isUserHasApi() { if ($this->id === 3) { return true; } return false; } /** * @return bool */ public function isApiUser() { if ($this->admin >= 5) { return true; } return false; } /** * @return bool */ public function isTestMode() { return $this->test_mode ? true : false; } /** * @return bool */ public function showSideNav() { if ($this->active == 1 && $this->blocked == 0 && $this->wizard >= 10) { return true; } return false; } public function isAboOption() { return false; // Abo Option deaktiviert ($this->abo_options && $this->account && $this->account->payment_data) ? true : false; } public function isActive() { return ($this->active == 1 && $this->blocked == 0) ? true : false; } public function isActiveAccount() { return $this->payment_account ? Carbon::parse($this->payment_account)->gt(Carbon::now()) : false; } public function isActiveShop() { return $this->payment_shop ? Carbon::parse($this->payment_shop)->gt(Carbon::now()) : false; } public function isRenewalAccount() { if ($this->payment_account) { return Carbon::parse($this->payment_account)->modify('-' . (config('mivita.renewal_days') + 1) . ' days')->lt(Carbon::now()); } return false; } public function nextRenewalAccount() { return $this->payment_account ? Carbon::parse($this->payment_account)->modify('-' . config('mivita.renewal_days') . ' days')->format(\Util::formatDateTimeDB()) : false; } public function daysActiveAccount() { return Carbon::now()->diffInDays(Carbon::parse($this->payment_account), false); } public function modifyActiveAccount($add = "1 year") { return Carbon::parse($this->payment_account)->modify($add)->format(\Util::formatDateTimeDB()); } public function daysHumansActiveAccount() { return Carbon::now()->diffForHumans(Carbon::parse($this->payment_account)); } public function daysActiveShop() { return Carbon::now()->diffInDays(Carbon::parse($this->payment_shop), false); } public function modifyActiveShop($add = "1 year") { return Carbon::parse($this->payment_shop)->modify($add)->format(\Util::formatDateTimeDB()); } public function daysHumansActiveShop() { return Carbon::now()->diffForHumans(Carbon::parse($this->payment_shop)); } public function isAcountAboPayDate() { if ($this->isAboOption()) { $pay_days = Carbon::parse($this->payment_account)->modify('- ' . config('mivita.abo_booking_days') . ' days'); $diff_days = Carbon::now()->diffInDays($pay_days, false); if ($diff_days <= 0) { return true; } } return false; } /** * @return string */ public function getConfirmationDateFormat() { if (!$this->attributes['confirmation_date']) { return ""; } return Carbon::parse($this->attributes['confirmation_date'])->format(\Util::formatDateTimeDB()); } /** * @return string */ public function getActiveDateFormat($time = true) { if (!$this->attributes['active_date']) { return ""; } if (!$time) { return Carbon::parse($this->attributes['active_date'])->format(\Util::formatDateDB()); } return Carbon::parse($this->attributes['active_date'])->format(\Util::formatDateTimeDB()); } /** * @return string */ public function getAgreementFormat() { if (!$this->attributes['agreement']) { return ""; } return Carbon::parse($this->attributes['agreement'])->format(\Util::formatDateTimeDB()); } public function getPaymentAccountDateFormat($time = true) { if (!$this->attributes['payment_account']) { return ""; } if (!$time) { return Carbon::parse($this->attributes['payment_account'])->format(\Util::formatDateDB()); } return Carbon::parse($this->attributes['payment_account'])->format(\Util::formatDateTimeDB()); } public function getPaymentShopDateFormat($time = true) { if (!$this->attributes['payment_shop']) { return ""; } if (!$time) { return Carbon::parse($this->attributes['payment_shop'])->format(\Util::formatDateDB()); } return Carbon::parse($this->attributes['payment_shop'])->format(\Util::formatDateTimeDB()); } public function getReleaseAccountFormat($time = true) { if (!$this->attributes['release_account']) { return ""; } if (!$time) { return Carbon::parse($this->attributes['release_account'])->format(\Util::formatDateDB()); } return Carbon::parse($this->attributes['release_account'])->format(\Util::formatDateTimeDB()); } public function setSetting(array $revisions, bool $save = true) { if (!$this->settings) { $this->settings = []; } $this->settings = array_merge($this->settings, $revisions); if ($save) { $this->save(); } return $this; } public function getSetting($key, $default = null) { return isset($this->settings[$key]) ? $this->settings[$key] : $default; } public function getPaymentMethodsShort() { $ret = ""; if ($this->payment_methods !== null) { foreach ($this->payment_methods as $payment_method) { if ($find = PaymentMethod::find($payment_method)) { $ret .= $find->short . " | "; } } $ret = rtrim($ret, " | "); } return $ret; } /** * @return string */ public function getLandByCountry() { if ($this->account && $this->account->country_id) { $code = $this->account->country->code; if ($code == "FR") { return 'fr'; } if ($code == "CH") { return 'de'; } if ($code == "NL") { return 'nl'; } if ($code == "DE") { return 'de'; } } return "de"; } /** * Send the password reset notification. * * @param string $token * @return void */ public function sendPasswordResetNotification($token) { //$bcc[] = "kevin.adametz@me.com"; //config('app.checkout_mail'); //Mail::to($this->email)->bcc($bcc)->locale(\App::getLocale())->send(new MailResetPassword($token, $this)); Mail::to($this->email)->locale(\App::getLocale())->send(new MailResetPassword($token, $this)); //$this->notify(new ResetPasswordNotification($token)); } public function getUserSalesVolumeBy($month, $year, $key) { //NOTE check ist, cant change month year ! if ($this->userSalesVolume === false) { $this->userSalesVolume = $this->getUserSalesVolume($month, $year, 'first'); } if ($this->userSalesVolume) { switch ($key) { case 'sales_volume_KP_points': return $this->userSalesVolume->month_KP_points; break; case 'sales_volume_TP_points': return $this->userSalesVolume->month_TP_points; break; case 'sales_volume_points_shop': return $this->userSalesVolume->month_shop_points; break; case 'sales_volume_points_KP_sum': return $this->userSalesVolume->getPointsKPSum(); break; case 'sales_volume_points_TP_sum': return $this->userSalesVolume->getPointsTPSum(); break; //price net case 'sales_volume_total': return $this->userSalesVolume->month_total_net; break; case 'sales_volume_total_shop': return $this->userSalesVolume->month_shop_total_net; break; case 'sales_volume_total_sum': return $this->userSalesVolume->getTotalNetSum(); break; } } return 0; } //with = ['shopping_order.shopping_user'] <- optional wenn es noch weitere relations gibt public function getUserSalesVolume($month, $year, $record = 'get', $with = []) { $relations = array_merge(['shopping_order'], $with); $query = UserSalesVolume::with($relations)->where('user_id', $this->id)->where('month', $month)->where('year', $year)->orderBy('id', 'DESC'); switch ($record) { case 'get': return $query->get(); break; case 'first': return $query->first(); break; } } }