$products * @property-read int|null $products_count * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation newQuery() * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation query() * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereClassPackageUnitId($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereMaterialInstallmentsMax($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereMaterialInstallmentsMin($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereMaterialValue($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation wherePackageInstallmentsMax($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation wherePackageInstallmentsMin($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation wherePackageValue($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereRegisterInstallmentsMax($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereRegisterInstallmentsMin($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereRegisterValue($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|ClassPackageUnitVariation whereUpdatedAt($value) * @mixin \Eloquent */ class ClassPackageUnitVariation extends Model { use HasFactory; public const TYPE_PAVAO = 'pavao'; public const TYPE_IRRECUSAVEL = 'irrecusavel'; public const TYPE_CUSTOM = 'custom'; public const TYPES = [ self::TYPE_PAVAO, self::TYPE_IRRECUSAVEL, ]; protected $table = 'class_package_unit_variations'; protected $guarded = [ 'id', ]; protected $casts = [ 'register_value' => 'float', 'register_installments_min' => 'integer', 'register_installments_max' => 'integer', 'package_value' => 'float', 'package_installments_min' => 'integer', 'package_installments_max' => 'integer', 'discount_value' => 'float', 'material_value' => 'float', 'material_installments_min' => 'integer', 'material_installments_max' => 'integer', 'created_at' => 'datetime', 'updated_at' => 'datetime', ]; // Relationships public function classPackageUnit(): BelongsTo { return $this->belongsTo(ClassPackageUnit::class); } public function products(): HasMany { return $this->hasMany(ClassPackageUnitVariationProduct::class); } // Business Logic Methods public function totalValue(): float { return round( $this->register_value + $this->package_value + $this->material_value, 2, ); } }