'integer', 'billing_amount'=>'float', 'paid_amount'=>'float', 'quantity'=>'integer', 'user_id'=>'integer', 'restaurant_id'=>'integer', ]; protected $appends = ['is_paused_today']; public function customer() { return $this->belongsTo(User::class, 'user_id'); } public function restaurant() { return $this->belongsTo(Restaurant::class, 'restaurant_id'); } public function logs() { return $this->hasMany(SubscriptionLog::class); } public function log() { return $this->hasOne(SubscriptionLog::class)->latest(); } public function schedules() { return $this->hasMany(SubscriptionSchedule::class); } public function schedule_today() { return $this->hasOne(SubscriptionSchedule::class,'subscription_id')->where(function($query){ $query->where('type', 'weekly')->where('day', (int)now()->format('w')) ->orWhere(function($query){ $query->where('type', 'monthly')->where('day', (int)now()->format('d')); })->orWhere('type', 'daily'); }); } public function schedule() { return $this->hasOne(SubscriptionSchedule::class,'subscription_id')->latest(); } public function order() { return $this->hasOne(Order::class); } public function pause() { return $this->hasMany(SubscriptionPause::class); } public function scopeCheckdate($query, $start_date, $end_date) { $query->where(function($query)use($start_date){ $query->whereDate('start_at','<=', $start_date)->whereDate('end_at', '>=', $start_date); })->orWhere(function($query)use($end_date){ $query->whereDate('start_at','<=', $end_date)->whereDate('end_at', '>=', $end_date); }); } public function scopeExpired($query) { $query->whereDate('end_at', '<', now()->format('Y-m-d'))->where('status','active'); } public function getIsPausedTodayAttribute() { return (bool)$this->pause()->whereDate('from','<=', now()->format('Y-m-d'))->whereDate('to','>=', now()->format('Y-m-d'))->count(); } public function getStatusAttribute($value) { return $this->IsPausedToday ? 'paused' : (now()->today()->gt(Carbon::parse($this->end_at)) ? 'expired' : $value); } }