Initial commit: Sistema de comisiones y gastos personales

This commit is contained in:
2026-04-19 09:59:57 -06:00
commit dc964d6bce
103 changed files with 15859 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
@extends('layouts.app')
@section('title', 'Crear Mes')
@section('content')
<div class="row">
<div class="col-12">
<h2 class="mb-4">Crear Nuevo Mes</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<form method="POST" action="{{ route('months.store') }}">
@csrf
<div class="mb-3">
<label for="name" class="form-label">Nombre del Mes</label>
<select class="form-select" id="name" name="name" required>
<option value="">Selecciona un mes</option>
<option value="Enero">Enero</option>
<option value="Febrero">Febrero</option>
<option value="Marzo">Marzo</option>
<option value="Abril">Abril</option>
<option value="Mayo">Mayo</option>
<option value="Junio">Junio</option>
<option value="Julio">Julio</option>
<option value="Agosto">Agosto</option>
<option value="Septiembre">Septiembre</option>
<option value="Octubre">Octubre</option>
<option value="Noviembre">Noviembre</option>
<option value="Diciembre">Diciembre</option>
</select>
</div>
<div class="mb-3">
<label for="year" class="form-label">Año</label>
<input type="number" class="form-control" id="year" name="year"
value="{{ old('year', now()->year) }}" min="2020" max="2100" required>
</div>
<div class="d-flex gap-2">
<button type="submit" class="btn btn-success">Crear Mes</button>
<a href="{{ route('months.index') }}" class="btn btn-secondary">Cancelar</a>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,53 @@
@extends('layouts.app')
@section('title', 'Editar Mes')
@section('content')
<div class="row">
<div class="col-12">
<h2 class="mb-4">Editar Mes</h2>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-body">
<form method="POST" action="{{ route('months.update', $month->id) }}">
@csrf
@method('PUT')
<div class="mb-3">
<label for="name" class="form-label">Nombre del Mes</label>
<select class="form-select" id="name" name="name" required>
@foreach(['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'] as $m)
<option value="{{ $m }}" {{ $month->name == $m ? 'selected' : '' }}>{{ $m }}</option>
@endforeach
</select>
</div>
<div class="mb-3">
<label for="year" class="form-label">Año</label>
<input type="number" class="form-control" id="year" name="year"
value="{{ old('year', $month->year) }}" min="2020" max="2100" required>
</div>
<div class="mb-3">
<label for="status" class="form-label">Estado</label>
<select class="form-select" id="status" name="status" required>
<option value="open" {{ $month->status == 'open' ? 'selected' : '' }}>Abierto</option>
<option value="closed" {{ $month->status == 'closed' ? 'selected' : '' }}>Cerrado</option>
<option value="paid" {{ $month->status == 'paid' ? 'selected' : '' }}>Pagado</option>
</select>
</div>
<div class="d-flex gap-2">
<button type="submit" class="btn btn-primary">Actualizar</button>
<a href="{{ route('months.show', $month->id) }}" class="btn btn-secondary">Cancelar</a>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,58 @@
@extends('layouts.app')
@section('title', 'Meses')
@section('content')
<div class="row">
<div class="col-12">
<h2 class="mb-4">Meses de Trabajo</h2>
</div>
</div>
<div class="row mb-4">
<div class="col-md-6">
<a href="{{ route('months.create') }}" class="btn btn-primary">
<i class="bi bi-plus-circle"></i> Crear Nuevo Mes
</a>
</div>
</div>
<!-- Lista de meses -->
<div class="row">
@forelse($months as $month)
<div class="col-md-4 col-lg-3 mb-4">
<div class="card h-100">
<div class="card-header">
<h5 class="mb-0">{{ $month->name }} {{ $month->year }}</h5>
</div>
<div class="card-body">
<p class="mb-1">
<strong>Estado:</strong>
@if($month->status === 'open')
<span class="badge bg-success">Abierto</span>
@elseif($month->status === 'closed')
<span class="badge bg-warning">Cerrado</span>
@else
<span class="badge bg-info">Pagado</span>
@endif
</p>
<p class="mb-1"><small class="text-muted">Ventas: ${{ number_format($month->dailySales()->sum('user_sales'), 2) }}</small></p>
<p class="mb-0"><small class="text-muted">Gastos: ${{ number_format($month->expenses()->sum('amount'), 2) }}</small></p>
</div>
<div class="card-footer bg-transparent">
<a href="{{ route('months.show', $month->id) }}" class="btn btn-sm btn-primary">Ver Detalles</a>
</div>
</div>
</div>
@empty
<div class="col-12">
<div class="alert alert-info">
No hay meses registrados.
<a href="{{ route('months.create') }}">Crea tu primer mes</a>
</div>
</div>
@endforelse
</div>
{{ $months->links() }}
@endsection

View File

@@ -0,0 +1,142 @@
@extends('layouts.app')
@section('title', 'Detalles del Mes')
@section('content')
<div class="row">
<div class="col-12">
<h2 class="mb-4">
{{ $month->name }} {{ $month->year }}
@if($month->status === 'open')
<span class="badge bg-success">Abierto</span>
@elseif($month->status === 'closed')
<span class="badge bg-warning">Cerrado</span>
@else
<span class="badge bg-info">Pagado</span>
@endif
</h2>
</div>
</div>
<!-- Resumen -->
<div class="row mb-4">
<div class="col-md-3">
<div class="card stat-card primary">
<div class="card-body">
<h6>Ventas Usuario</h6>
<h4>${{ number_format($month->dailySales()->sum('user_sales'), 2) }}</h4>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card stat-card success">
<div class="card-body">
<h6>Ventas Sistema</h6>
<h4>${{ number_format($month->dailySales()->sum('system_sales'), 2) }}</h4>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card stat-card warning">
<div class="card-body">
<h6>Total Gastos</h6>
<h4>${{ number_format($month->expenses()->sum('amount'), 2) }}</h4>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card stat-card danger">
<div class="card-body">
<h6>Días Registrados</h6>
<h4>{{ $month->dailySales()->count() }}</h4>
</div>
</div>
</div>
</div>
<!-- Acciones -->
<div class="row mb-4">
<div class="col-md-12">
<a href="{{ route('sales.create', ['month_id' => $month->id]) }}" class="btn btn-success">
<i class="bi bi-plus-circle"></i> Agregar Venta
</a>
<a href="{{ route('expenses.create', ['month_id' => $month->id]) }}" class="btn btn-warning">
<i class="bi bi-plus-circle"></i> Agregar Gasto
</a>
<a href="{{ route('reports.monthly', ['month_id' => $month->id]) }}" class="btn btn-info">
<i class="bi bi-graph-up"></i> Ver Reporte
</a>
@if($month->status === 'open')
<form method="POST" action="{{ route('months.close', $month->id) }}" class="d-inline">
@csrf
<button type="submit" class="btn btn-outline-danger" onclick="return confirm('¿Cerrar este mes?')">
<i class="bi bi-lock"></i> Cerrar Mes
</button>
</form>
@endif
</div>
</div>
<!-- Últimas ventas -->
<div class="card mb-4">
<div class="card-header">
<h5 class="mb-0">Últimas Ventas</h5>
</div>
<div class="card-body">
<table class="table table-sm">
<thead>
<tr>
<th>Fecha</th>
<th>Venta Usuario</th>
<th>Venta Sistema</th>
</tr>
</thead>
<tbody>
@forelse($month->dailySales()->latest()->limit(10)->get() as $sale)
<tr>
<td>{{ $sale->date->format('d/m/Y') }}</td>
<td>${{ number_format($sale->user_sales, 2) }}</td>
<td>${{ number_format($sale->system_sales, 2) }}</td>
</tr>
@empty
<tr><td colspan="3" class="text-center">No hay ventas</td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
<!-- Últimos gastos -->
<div class="card">
<div class="card-header">
<h5 class="mb-0">Últimos Gastos</h5>
</div>
<div class="card-body">
<table class="table table-sm">
<thead>
<tr>
<th>Fecha</th>
<th>Descripción</th>
<th>Monto</th>
</tr>
</thead>
<tbody>
@forelse($month->expenses()->latest()->limit(10)->get() as $expense)
<tr>
<td>{{ $expense->date->format('d/m/Y') }}</td>
<td>{{ $expense->description }}</td>
<td class="text-danger">${{ number_format($expense->amount, 2) }}</td>
</tr>
@empty
<tr><td colspan="3" class="text-center">No hay gastos</td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
<div class="mt-3">
<a href="{{ route('months.index') }}" class="btn btn-secondary">Volver a Meses</a>
</div>
@endsection