ManagementSystem/BACKEND/app/Models/Discount.php

70 lines
1.9 KiB
PHP
Executable File

<?php
namespace App\Models;
use App\Traits\HasCacheModel;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Str;
class Discount extends Model
{
use HasFactory;
use HasCacheModel;
public function __construct()
{
$this->table = 'discount';
$this->guarded = [];
$this->appends = [
'discount_type',
'discount_unit',
];
$this->casts = [
'active_date' => 'datetime',
'expiry' => 'datetime',
'date_used' => 'datetime',
];
}
// custom display get{field_name}Attribute
public function getDiscountTypeAttribute()
{
return DiscountType::getByCache()
->where('id', $this->discount_type_id)
->value('name');
}
// custom display get{field_name}Attribute
public function getDiscountUnitAttribute()
{
return DiscountType::getByCache()
->where('id', $this->discount_type_id)
->value('unit');
}
/**
* Check active and get by code
*
* @param string $code
* @return TValue|TFirstDefault
*/
public static function firstActiveByCode(string|null $code = '')
{
return static::getByCache()
->where('code', $code)
->where('status', 1)
->whereNull('date_used')
->filter(function($discount) {
// The active_date can be not null, and greater than or equal with now
return $discount['active_date'] && now()->greaterThanOrEqualTo($discount['active_date']);
})
->filter(function($discount) {
// The expiry can be null, or less than or equal with now
return !$discount['expiry'] || now()->lessThanOrEqualTo($discount['expiry']);
})
->first();
}
}