Creados un monton de componentes para reutilizar en las paginas, modificadas vistas, faltan agregar mas cosas
This commit is contained in:
+165
@@ -0,0 +1,165 @@
|
||||
¡Perfecto\! Tus respuestas aclaran muchísimo el panorama. Al ser un sistema **Intranet (Local)** con un **Admin** y **Empleados** (visores/operadores), y con procesos manuales en el taller, podemos simplificar la arquitectura para lanzar un MVP (Producto Mínimo Viable) rápido y robusto, pero preparado para crecer.
|
||||
|
||||
Aquí tienes la **Guía Maestra de Desarrollo para Lauck Systems**.
|
||||
|
||||
-----
|
||||
|
||||
### 1\. Arquitectura de Base de Datos (El Cimiento)
|
||||
|
||||
Antes de escribir código, definamos las tablas. Laravel hace esto fácil con migraciones.
|
||||
|
||||
#### Tablas Principales:
|
||||
|
||||
1. **`users`** (Ya viene en Laravel)
|
||||
|
||||
* Agregamos campo: `role` (enum: 'admin', 'employee').
|
||||
* *Lógica:* El Admin crea, edita y borra. El Empleado solo ve y registra ventas/turnos (según definas).
|
||||
|
||||
2. **`clients`** (Clientes)
|
||||
|
||||
* `name`, `phone` (clave para WhatsApp), `email`, `address`.
|
||||
* *Nota:* Fundamental para agendar turnos y registrar garantías.
|
||||
|
||||
3. **`products`** (Inventario Mixto)
|
||||
|
||||
* `name`, `sku` (código único), `description`.
|
||||
* `price` (precio venta), `cost` (costo, solo visible para admin).
|
||||
* `stock_quantity` (entero).
|
||||
* `min_stock_alert` (entero, para la alerta que pediste).
|
||||
* `type` (enum: 'bike', 'accessory', 'service').
|
||||
* `serial_number` (nullable, solo para bicicletas).
|
||||
|
||||
4. **`appointments`** (Turnos / Taller)
|
||||
|
||||
* `client_id` (relación).
|
||||
* `scheduled_at` (datetime - fecha y hora del turno).
|
||||
* `bike_model` (texto libre, ej: "Venzo Loki 29").
|
||||
* `problem_description` (motivo de la consulta).
|
||||
* `status` (enum: 'pending', 'confirmed', 'in\_progress', 'ready', 'delivered').
|
||||
* `notes` (uso interno del mecánico).
|
||||
|
||||
5. **`sales`** (Ventas Internas / Historial)
|
||||
|
||||
* `user_id` (quién vendió).
|
||||
* `client_id` (opcional, si es consumidor final anónimo).
|
||||
* `total_amount`.
|
||||
* `payment_method` (efectivo, tarjeta, transferencia).
|
||||
* `created_at` (fecha de venta).
|
||||
|
||||
6. **`sale_items`** (Detalle de venta)
|
||||
|
||||
* `sale_id`, `product_id`, `quantity`, `unit_price`.
|
||||
|
||||
-----
|
||||
|
||||
### 2\. Estructura de Rutas y Controladores (Backend)
|
||||
|
||||
En Laravel, organizaremos esto por "Dominios".
|
||||
|
||||
* **Autenticación:** (Ya lo tienes con Breeze/Jetstream).
|
||||
* **DashboardController:**
|
||||
* `index()`: Muestra las tarjetas, alertas de stock bajo (query simple `Product::whereColumn('stock', '<=', 'min_stock')->get()`) y turnos de hoy.
|
||||
* **ProductController:**
|
||||
* CRUD completo (Crear, Leer, Actualizar, Borrar).
|
||||
* Función extra `search()`: Para el buscador de precios de los empleados.
|
||||
* **ClientController:**
|
||||
* CRUD simple.
|
||||
* **AppointmentController (Gestión de Taller):**
|
||||
* `calendar()`: Vista de calendario o lista cronológica.
|
||||
* `statusUpdate()`: Para mover el turno de "Pendiente" a "Listo".
|
||||
* **SaleController:**
|
||||
* `create()`: Formulario para registrar una salida de mercadería.
|
||||
* `store()`: Resta el stock y guarda la venta.
|
||||
|
||||
-----
|
||||
|
||||
### 3\. Componentes de UI (Frontend - Blade + Tailwind)
|
||||
|
||||
Para mantener el estilo "Lauck" que ya definimos, necesitaremos crear estos componentes reutilizables (además de los que ya tienes):
|
||||
|
||||
1. **`x-ui.status-badge`**:
|
||||
* Una etiqueta pequeña redondeada que cambia de color según el estado (Verde para 'Stock Alto', Rojo para 'Sin Stock' o 'Turno Atrasado', Amarillo para 'En Reparación').
|
||||
2. **`x-ui.table`**:
|
||||
* Una tabla estilizada con el modo oscuro, filas alternadas y cabeceras fijas. Vital para listas de precios y clientes.
|
||||
3. **`x-forms.input` / `x-forms.select`**:
|
||||
* Inputs con el estilo oscuro y borde neón al hacer foco, para no repetir las clases de Tailwind en cada formulario.
|
||||
4. **`x-ui.alert`**:
|
||||
* Para mostrar mensajes de éxito ("Producto guardado") o alertas ("¡Quedan solo 2 cámaras rodado 29\!").
|
||||
|
||||
-----
|
||||
|
||||
### 4\. Funcionalidades Específicas a Implementar
|
||||
|
||||
Aquí está la lógica para los requerimientos que mencionaste:
|
||||
|
||||
#### A. Alertas de Stock ⚠️
|
||||
|
||||
* **Lógica:** No necesitas un sistema complejo de notificaciones en tiempo real todavía.
|
||||
* **Implementación:** En el `DashboardController`, pasas una variable `$lowStockProducts` a la vista.
|
||||
* **Vista:** En el Dashboard, si esa lista no está vacía, muestras una tarjeta roja o amarilla avisando "X productos con stock crítico".
|
||||
|
||||
#### B. Consulta de Precios (Modo Solo Lectura) 🔍
|
||||
|
||||
* **Requerimiento:** Empleados consultan, no editan.
|
||||
* **Implementación:**
|
||||
* Crear una vista `products.checker`.
|
||||
* Un input de búsqueda grande en el centro.
|
||||
* Al escribir (AJAX o Livewire sería ideal aquí, pero un form simple con botón "Buscar" funciona), muestra una tarjeta gigante con el Nombre y el Precio.
|
||||
* *Seguridad:* Usar **Laravel Gates** o **Policies**.
|
||||
```php
|
||||
// En AuthServiceProvider
|
||||
Gate::define('edit-products', function ($user) {
|
||||
return $user->role === 'admin';
|
||||
});
|
||||
```
|
||||
En Blade: `@can('edit-products') <button>Editar</button> @endcan`. Así el empleado ve el producto pero no el botón de editar.
|
||||
|
||||
#### C. Agenda de Turnos 📅
|
||||
|
||||
* **Lógica:** "Consulta -\> Cita".
|
||||
* **Implementación:**
|
||||
* No te compliques con un calendario visual complejo (tipo Google Calendar) al principio.
|
||||
* Usa una **Lista Agrupada por Días**.
|
||||
* *Ejemplo visual:*
|
||||
* **HOY:**
|
||||
* 09:00 - Jose (Pincharura) [Ver]
|
||||
* 10:30 - Maria (Service General) [Ver]
|
||||
* **MAÑANA:**
|
||||
* ...
|
||||
|
||||
-----
|
||||
|
||||
### 5\. Roadmap Sugerido (Paso a Paso)
|
||||
|
||||
Este es el orden lógico para programar sin perderse:
|
||||
|
||||
1. **Semana 1: Cimientos y Stock (Lo más urgente)**
|
||||
|
||||
* Configurar Migraciones (`products`, `clients`).
|
||||
* Crear Modelos y Seeders (datos falsos para probar).
|
||||
* Hacer el CRUD de Productos (Alta, Baja y Modificación).
|
||||
* *Hito:* Poder cargar una bicicleta y verla en la lista.
|
||||
|
||||
2. **Semana 2: Seguridad y Consultas**
|
||||
|
||||
* Agregar campo `role` a Users.
|
||||
* Crear la vista "Consulta de Precios" (solo lectura).
|
||||
* Proteger las rutas de edición para que solo el Admin entre.
|
||||
* *Hito:* El empleado puede loguearse y buscar un precio, pero no borrar nada.
|
||||
|
||||
3. **Semana 3: El Taller (Turnos)**
|
||||
|
||||
* Crear migración `appointments`.
|
||||
* Crear formulario para "Nuevo Turno" (Seleccionar Cliente + Fecha + Motivo).
|
||||
* Crear vista de "Lista de Turnos" en el Dashboard.
|
||||
* *Hito:* Dejar de usar el cuaderno de papel para los turnos.
|
||||
|
||||
4. **Semana 4: Refinamiento**
|
||||
|
||||
* Alertas de stock visuales.
|
||||
* Mejoras estéticas (Dark Mode en tablas).
|
||||
* Pruebas finales en el servidor local.
|
||||
|
||||
### ¿Cómo seguimos?
|
||||
|
||||
¿Te gustaría que generemos el código para la **Migración de Productos** y el **Modelo**, o prefieres que diseñemos primero el componente visual de la **Tabla de Stock**?
|
||||
Reference in New Issue
Block a user