ultimatepos/Modules/Superadmin/Entities/Subscription.php

181 lines
5.3 KiB
PHP

<?php
namespace Modules\Superadmin\Entities;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Facades\DB;
class Subscription extends Model
{
use SoftDeletes;
protected $guarded = ['id'];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'start_date' => 'datetime',
'end_date' => 'datetime',
'package_details' => 'array', ];
/**
* Scope a query to only include approved subscriptions.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeApproved($query)
{
return $query->where('status', 'approved');
}
public function scopeWaiting($query)
{
return $query->where('status', 'waiting');
}
public function scopeDeclined($query)
{
return $query->where('status', 'declined');
}
/**
* Get the package that belongs to the subscription.
*/
public function package()
{
return $this->belongsTo('\Modules\Superadmin\Entities\Package')
->withTrashed();
}
/**
* Returns the active subscription details for a business
*
* @param $business_id int
* @return Response
*/
public static function active_subscription($business_id)
{
// Skip subscription check for superadmin users - return a fake unlimited subscription
if (auth()->check()) {
try {
if (auth()->user()->can('superadmin')) {
// Return a fake subscription object for superadmin
$fake_subscription = new \stdClass();
$fake_subscription->id = 0;
$fake_subscription->business_id = $business_id;
$fake_subscription->package_id = 0;
$fake_subscription->start_date = \Carbon\Carbon::now();
$fake_subscription->end_date = \Carbon\Carbon::now()->addYears(100);
$fake_subscription->status = 'approved';
$fake_subscription->package_details = [
'name' => 'Superadmin Package',
'location_count' => 0, // unlimited
'user_count' => 0, // unlimited
'product_count' => 0, // unlimited
'invoice_count' => 0, // unlimited
];
return $fake_subscription;
}
} catch (\Exception $e) {
// If permission check fails, continue with normal check
}
}
$date_today = \Carbon::today()->toDateString();
$subscription = Subscription::where('business_id', $business_id)
->whereDate('start_date', '<=', $date_today)
->whereDate('end_date', '>=', $date_today)
->approved()
->first();
return $subscription;
}
/**
* Returns the upcoming subscription details for a business
*
* @param $business_id int
* @return Response
*/
public static function upcoming_subscriptions($business_id)
{
$date_today = \Carbon::today();
$subscription = Subscription::where('business_id', $business_id)
->whereDate('start_date', '>', $date_today)
->approved()
->get();
return $subscription;
}
/**
* Returns the subscriptions waiting for approval for superadmin
*
* @param $business_id int
* @return Response
*/
public static function waiting_approval($business_id)
{
$subscriptions = Subscription::where('business_id', $business_id)
->whereNull('start_date')
->waiting()
->get();
return $subscriptions;
}
public static function end_date($business_id)
{
$date_today = \Carbon::today();
$subscription = Subscription::where('business_id', $business_id)
->approved()
->select(DB::raw('MAX(end_date) as end_date'))
->first();
if (empty($subscription->end_date)) {
return $date_today;
} else {
$end_date = $subscription->end_date->addDay();
if ($date_today->lte($end_date)) {
return $end_date;
} else {
return $date_today;
}
}
}
/**
* Returns the list of packages status
*
* @return array
*/
public static function package_subscription_status()
{
return ['approved' => trans('superadmin::lang.approved'), 'declined' => trans('superadmin::lang.declined'), 'waiting' => trans('superadmin::lang.waiting')];
}
/**
* Get the created_by.
*/
public function created_user()
{
return $this->belongsTo(\App\User::class, 'created_id');
}
/**
* Get the subscription business relationship.
*/
public function business()
{
return $this->belongsTo(\App\Business::class, 'business_id');
}
}