ClassPackageUnitVariation.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  6. use Illuminate\Database\Eloquent\Relations\HasMany;
  7. /**
  8. * @property int $id
  9. * @property int $class_package_unit_id
  10. * @property string $type
  11. * @property float $register_value
  12. * @property int $register_installments_min
  13. * @property int $register_installments_max
  14. * @property float $package_value
  15. * @property int $package_installments_min
  16. * @property int $package_installments_max
  17. * @property float $material_value
  18. * @property int $material_installments_min
  19. * @property int $material_installments_max
  20. * @property \Illuminate\Support\Carbon|null $created_at
  21. * @property \Illuminate\Support\Carbon|null $updated_at
  22. * @property float|null $discount_value
  23. * @property-read \App\Models\ClassPackageUnit $classPackageUnit
  24. * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\ClassPackageUnitVariationProduct> $products
  25. * @property-read int|null $products_count
  26. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation newModelQuery()
  27. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation newQuery()
  28. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation query()
  29. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereClassPackageUnitId($value)
  30. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereCreatedAt($value)
  31. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereDiscountValue($value)
  32. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereId($value)
  33. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereMaterialInstallmentsMax($value)
  34. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereMaterialInstallmentsMin($value)
  35. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereMaterialValue($value)
  36. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation wherePackageInstallmentsMax($value)
  37. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation wherePackageInstallmentsMin($value)
  38. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation wherePackageValue($value)
  39. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereRegisterInstallmentsMax($value)
  40. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereRegisterInstallmentsMin($value)
  41. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereRegisterValue($value)
  42. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereType($value)
  43. * @method static \Illuminate\Database\Eloquent\Builder<static>|ClassPackageUnitVariation whereUpdatedAt($value)
  44. * @mixin \Eloquent
  45. */
  46. class ClassPackageUnitVariation extends Model
  47. {
  48. use HasFactory;
  49. public const TYPE_PAVAO = 'pavao';
  50. public const TYPE_IRRECUSAVEL = 'irrecusavel';
  51. public const TYPE_CUSTOM = 'custom';
  52. public const TYPES = [
  53. self::TYPE_PAVAO,
  54. self::TYPE_IRRECUSAVEL,
  55. ];
  56. protected $table = 'class_package_unit_variations';
  57. protected $guarded = [
  58. 'id',
  59. ];
  60. protected $casts = [
  61. 'register_value' => 'float',
  62. 'register_installments_min' => 'integer',
  63. 'register_installments_max' => 'integer',
  64. 'package_value' => 'float',
  65. 'package_installments_min' => 'integer',
  66. 'package_installments_max' => 'integer',
  67. 'discount_value' => 'float',
  68. 'material_value' => 'float',
  69. 'material_installments_min' => 'integer',
  70. 'material_installments_max' => 'integer',
  71. 'created_at' => 'datetime',
  72. 'updated_at' => 'datetime',
  73. ];
  74. // Relationships
  75. public function classPackageUnit(): BelongsTo
  76. {
  77. return $this->belongsTo(ClassPackageUnit::class);
  78. }
  79. public function products(): HasMany
  80. {
  81. return $this->hasMany(ClassPackageUnitVariationProduct::class);
  82. }
  83. // Business Logic Methods
  84. public function totalValue(): float
  85. {
  86. return round(
  87. $this->register_value + $this->package_value + $this->material_value,
  88. 2,
  89. );
  90. }
  91. }