NETBien.backend/app/Models/SimCard.php
2025-11-14 16:31:15 -06:00

79 lines
1.8 KiB
PHP

<?php namespace App\Models;
/**
* @copyright (c) 2025 Notsoweb Software (https://notsoweb.com) - All Rights Reserved
*/
use App\Enums\SimCardStatus;
use Illuminate\Database\Eloquent\Model;
/**
* Modelo para tarjetas SIM
*
* @author Moisés Cortés C. <moises.cortes@notsoweb.com>
*
* @version 1.0.0
*/
class SimCard extends Model
{
protected $fillable = [
'iccid',
'msisdn',
'status',
];
protected $casts = [
'status' => SimCardStatus::class,
];
// Relación con la tabla pivote
public function packSims()
{
return $this->hasMany(PackSim::class, 'sim_card_id');
}
// Relación muchos a muchos con paquetes
public function packages()
{
return $this->belongsToMany(
Packages::class,
'pack_sims',
'sim_card_id',
'package_id'
)->withPivot('activated_at', 'deactivated_at', 'is_active')
->withTimestamps();
}
// Paquete actualmente activo
public function activePackage()
{
return $this->belongsToMany(
Packages::class,
'pack_sims',
'sim_card_id',
'package_id'
)->wherePivot('is_active', true)
->withPivot('activated_at', 'deactivated_at', 'is_active')
->withTimestamps()
->limit(1);
}
public function clientSims()
{
return $this->hasMany(ClientSim::class, 'sim_card_id');
}
public function activeClient()
{
return $this->belongsToMany(
Client::class,
'client_sims',
'sim_card_id',
'client_id'
)->wherePivot('is_active', true)
->withPivot('assigned_at', 'released_at', 'is_active')
->withTimestamps()
->limit(1);
}
}