Files
nomina_ventas/app/Models/Month.php
nickpons666 e8aac6eaa5 Feat: Implementado cálculo de ISR en nóminas
- Agregado campo isr_table_id en tabla months para seleccionar tabla ISR por mes
- Creado servicio IsrCalculator para calcular ISR mensual y quincenal
- Modificado CommissionCalculator para descontar ISR del total a pagar
- Agregado selector de tabla ISR en formulario de crear/editar mes
- Actualizada vista de meses para mostrar tabla ISR asignada
- Actualizados reportes mensual y quincenal para mostrar ISR descontado
2026-04-21 13:45:39 -06:00

106 lines
2.1 KiB
PHP
Executable File

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
#[Fillable(['user_id', 'name', 'year', 'status', 'isr_table_id'])]
class Month extends Model
{
use HasFactory;
protected $table = 'months';
/**
* Los atributos que son asignables en masa.
*
* @var array<int, string>
*/
protected $fillable = [
'user_id',
'name',
'year',
'status',
'isr_table_id',
];
/**
* Los atributos que deben ser convertidos.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'year' => 'integer',
];
}
/**
* Relación con usuario
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
/**
* Relación con ventas diarias
*/
public function dailySales(): HasMany
{
return $this->hasMany(DailySale::class);
}
/**
* Relación con gastos
*/
public function expenses(): HasMany
{
return $this->hasMany(Expense::class);
}
/**
* Relación con tabla ISR
*/
public function isrTable(): BelongsTo
{
return $this->belongsTo(IsrTable::class);
}
/**
* Obtener el nombre del mes con formato
*/
public function getDisplayNameAttribute(): string
{
return $this->name . ' ' . $this->year;
}
/**
* Calcular ventas totales del mes
*/
public function getTotalUserSalesAttribute(): float
{
return $this->dailySales()->sum('user_sales');
}
/**
* Calcular ventas del sistema
*/
public function getTotalSystemSalesAttribute(): float
{
return $this->dailySales()->sum('system_sales');
}
/**
* Calcular gastos totales del mes
*/
public function getTotalExpensesAttribute(): float
{
return $this->expenses()->sum('amount');
}
}