- 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
205 lines
8.8 KiB
PHP
Executable File
205 lines
8.8 KiB
PHP
Executable File
@extends('layouts.app')
|
|
|
|
@section('title', 'Reporte Mensual')
|
|
|
|
@section('content')
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<h2 class="mb-4">Reporte Mensual</h2>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Selector -->
|
|
<div class="row mb-4">
|
|
<div class="col-md-6">
|
|
<form method="GET" class="d-flex gap-2">
|
|
<select name="month_id" class="form-select" onchange="this.form.submit()">
|
|
@foreach($months as $m)
|
|
<option value="{{ $m->id }}" {{ $month->id == $m->id ? 'selected' : '' }}>
|
|
{{ $m->name }} {{ $m->year }}
|
|
</option>
|
|
@endforeach
|
|
</select>
|
|
<a href="{{ route('reports.biweekly', ['month_id' => $month->id, 'biweekly' => 1]) }}" class="btn btn-outline-primary">Quincenal</a>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
@if($report)
|
|
<!-- Resumen General -->
|
|
<div class="row mb-4">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-header bg-primary text-white">
|
|
<h5 class="mb-0">{{ $report['month_name'] }}</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<h6 class="text-muted">Ventas del Usuario</h6>
|
|
<h4>${{ number_format($report['total_user_sales'], 2) }}</h4>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<h6 class="text-muted">Ventas del Sistema</h6>
|
|
<h4>${{ number_format($report['total_system_sales'], 2) }}</h4>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<h6 class="text-muted">Comisión ({{ $report['commission_percentage'] }}%)</h6>
|
|
<h4 class="text-success">${{ number_format($report['commission_amount'], 2) }}</h4>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<h6 class="text-muted">Total a Recibir</h6>
|
|
<h4 class="text-primary">${{ number_format($report['total_earning'], 2) }}</h4>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Detalles -->
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Desglose</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<table class="table">
|
|
<tr>
|
|
<td>Salario Mensual</td>
|
|
<td class="text-end">${{ number_format($report['monthly_salary'], 2) }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Comisión ({{ $report['commission_percentage'] }}%)</td>
|
|
<td class="text-end text-success">+${{ number_format($report['commission_amount'], 2) }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Gastos del Mes</td>
|
|
<td class="text-end text-danger">-${{ number_format($report['total_expenses'], 2) }}</td>
|
|
</tr>
|
|
@if(isset($report['isr_amount']) && $report['isr_amount'] > 0)
|
|
<tr>
|
|
<td>ISR ({{ $report['isr_details']['effective_rate'] ?? 0 }}%)</td>
|
|
<td class="text-end text-danger">-${{ number_format($report['isr_amount'], 2) }}</td>
|
|
</tr>
|
|
@endif
|
|
<tr class="table-light">
|
|
<td><strong>Total a Recibir</strong></td>
|
|
<td class="text-end"><strong>${{ number_format($report['total_earning'], 2) }}</strong></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6">
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Diferencia de Ventas</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
@if($report['has_difference'])
|
|
<div class="alert alert-{{ $report['sales_difference'] > 0 ? 'warning' : 'danger' }}">
|
|
<strong>Diferencia:</strong> ${{ number_format($report['sales_difference'], 2) }}
|
|
<br>
|
|
<small>
|
|
{{ $report['sales_difference'] > 0 ? 'Ventas del usuario mayores que sistema' : 'Ventas del sistema mayores que usuario' }}
|
|
</small>
|
|
</div>
|
|
@else
|
|
<div class="alert alert-success">
|
|
<i class="bi bi-check-circle"></i> Ventas conciliadas (sin diferencia)
|
|
</div>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Ventas Diarias -->
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Ventas Diarias</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<table class="table table-sm table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>Fecha</th>
|
|
<th class="text-end">Venta Usuario</th>
|
|
<th class="text-end">Venta Sistema</th>
|
|
<th class="text-end">Diferencia</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($dailySales as $sale)
|
|
<tr>
|
|
<td>{{ $sale->date->format('d/m/Y') }}</td>
|
|
<td class="text-end">${{ number_format($sale->user_sales, 2) }}</td>
|
|
<td class="text-end">${{ number_format($sale->system_sales, 2) }}</td>
|
|
<td class="text-end">
|
|
@php $diff = $sale->user_sales - $sale->system_sales; @endphp
|
|
@if($diff != 0)
|
|
<span class="text-{{ $diff > 0 ? 'warning' : 'danger' }}">
|
|
${{ number_format($diff, 2) }}
|
|
</span>
|
|
@else
|
|
<span class="text-success">-</span>
|
|
@endif
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="4" class="text-center">No hay ventas</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
<tfoot>
|
|
<tr class="table-light">
|
|
<th>Total</th>
|
|
<th class="text-end">${{ number_format($dailySales->sum('user_sales'), 2) }}</th>
|
|
<th class="text-end">${{ number_format($dailySales->sum('system_sales'), 2) }}</th>
|
|
<th class="text-end">${{ number_format($dailySales->sum('user_sales') - $dailySales->sum('system_sales'), 2) }}</th>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Gastos -->
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Gastos del Mes</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<table class="table table-sm table-striped">
|
|
<thead>
|
|
<tr>
|
|
<th>Fecha</th>
|
|
<th>Descripción</th>
|
|
<th class="text-end">Monto</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
@forelse($expenses as $expense)
|
|
<tr>
|
|
<td>{{ $expense->date->format('d/m/Y') }}</td>
|
|
<td>{{ $expense->description }}</td>
|
|
<td class="text-end text-danger">${{ number_format($expense->amount, 2) }}</td>
|
|
</tr>
|
|
@empty
|
|
<tr><td colspan="3" class="text-center">No hay gastos</td></tr>
|
|
@endforelse
|
|
</tbody>
|
|
<tfoot>
|
|
<tr class="table-light">
|
|
<th colspan="2">Total Gastos</th>
|
|
<th class="text-end">${{ number_format($expenses->sum('amount'), 2) }}</th>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
@else
|
|
<div class="alert alert-warning">No hay datos disponibles para este mes.</div>
|
|
@endif
|
|
@endsection |