Files
aso/app/Models/Benefit.php
2022-11-03 09:51:22 +07:00

172 lines
5.7 KiB
PHP
Executable File

<?php
namespace App\Models;
use App\Traits\Blameable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Benefit extends Model
{
use HasFactory, SoftDeletes, Blameable;
protected $fillable = [
'corporate_id',
'service_code',
'plan_code',
'benefit_code',
'code',
'description',
'budget',
'budget_conditions',
'budget_code',
'primary_benefit_code',
'benefit_mode',
'room_class_coverage',
'max_bed_coverage',
'tolerance_parameter',
'max_room_class',
'limit_amount',
'area_limit',
'shared_benefit',
'shared_benefit_type',
'msc',
'genders',
'min_age',
'max_age',
'max_frequency_period',
'daily_frequency',
'weekly_frequency',
'monthly_frequency',
'yearly_frequency',
'custom_frequency_days',
'custom_duration_value',
'allowed_transaction_types',
'high_plan_factor',
'pre_post_treatment',
'pre_treatment_days',
'post_treatment_days',
'layer_type_1',
'layer_value_1',
'layer_type_2',
'layer_value_2',
'cashless_percentage',
'reimbursement_percentage',
'digital_percentage',
'co_share_m_percentage',
'co_share_s_percentage',
'co_share_c_percentage',
'cashless_deductible',
'reimbursement_deductible',
'digital_deductible',
'co_share_m_deductible',
'co_share_s_deductible',
'co_share_c_deductible',
'prorate_type',
'prorate_lookup',
'max_days_for_disability',
'max_period_for_disability',
'currency',
'show_benefit_item',
'show_benefit_value',
];
public static $doc_headers_to_field_map = [
"Service" => 'service_code',
"Plan" => 'plan_code',
"Benefit Code" => 'benefit_code',
"Customer Benefit Code" => 'code',
"Detail Benefit" => 'description',
"ASO/Budget" => 'budget',
"Budget Condition" => 'budget_conditions',
"Budget Code" => 'budget_code',
"Primary benefit" => 'primary_benefit_code',
"Benefit Mode" => 'benefit_mode',
"Room Class" => 'room_class_coverage',
"Max Bed" => 'max_bed_coverage',
"Tolerance Paramater" => 'tolerance_parameter',
"Max. Room Class" => 'max_room_class',
"Limit Value" => 'limit_amount',
"Area" => 'area_limit',
"Shared Benefit With" => 'shared_benefit',
"Shared Benefit Type" => 'shared_benefit_type',
"MSC" => 'msc',
"Gender" => 'genders',
"Min Age" => 'min_age',
"Max Age" => 'max_age',
"Freq. Period" => 'max_frequency_period',
"Daily Frequency" => 'daily_frequency',
"Weekly Frequency" => 'weekly_frequency',
"Monthly Frequency" => 'monthly_frequency',
"Yearly Frequency" => 'yearly_frequency',
"Custom Duration" => 'custom_frequency_days',
"Custom Duration Value" => 'custom_duration_value',
"Cashless, Reimbursement" => 'allowed_transaction_types',
"High Plan Factor" => 'high_plan_factor',
"Pre Post Treatment" => 'pre_post_treatment',
"Pre Treatment" => 'pre_treatment_days',
"Post Treatment" => 'post_treatment_days',
"Layer Type 1" => 'layer_type_1',
"Layer Value 1" => 'layer_value_1',
"Layer Type 2" => 'layer_type_2',
"Layer Value 2" => 'layer_value_2',
"Cashless (%)" => 'cashless_percentage',
"Reimburse (%)" => 'reimbursement_percentage',
"Digital (%)" => 'digital_percentage',
"CoShareM (%)" => 'co_share_m_percentage',
"CoShareS (%)" => 'co_share_s_percentage',
"CoShareC (%)" => 'co_share_c_percentage',
"Cashless Deductible" => 'cashless_deductible',
"Reimbursement Deductible" => 'reimbursement_deductible',
"Digital Deductible" => 'digital_deductible',
"DeductibleM" => 'co_share_m_deductible',
"DeductibleS" => 'co_share_s_deductible',
"DeductibleC" => 'co_share_c_deductible',
"Prorate Type" => 'prorate_type',
"Prorate Lookup" => 'prorate_lookup',
"Max Days for Disability" => 'max_days_for_disability',
"Max Periode of Disability" => 'max_period_for_disability',
"Currency" => 'currency',
"Show Benefit Item" => 'show_benefit_item',
"Show Benefit Value" => 'show_benefit_value',
];
public function setAreaLimitAttribute($value)
{
$this->attributes['area_limit'] = empty($value) ? null : $value;
}
public function setPrePostTreatmentAttribute($value)
{
$this->attributes['pre_post_treatment'] = empty($value) ? null : ($value == 'Y');
}
public function getPrePostTreatmentAttribute($value)
{
return empty($value) ? null : ($value ? 'Y' : 'N');
}
public function scopeFilter($query, array $filters)
{
$query->when($filters['search'] ?? false, function ($query, $search) {
return $query
->where('service_code', 'like', "%" . $search . "%")
->orWhere('code', 'like', "%" . $search . "%")
->orWhereHas('plan', function ($query) use ($search) {
$query->where('code', 'like', "%" . $search . "%");
});
});
}
public function benefit()
{
return $this->belongsTo(Benefit::class, 'benefit_code', 'code');
}
public function plan()
{
return $this->belongsTo(Plan::class, 'plan_code', 'code');
}
}