diff --git a/resources/a.md b/resources/a.md deleted file mode 100644 index ad025d6..0000000 --- a/resources/a.md +++ /dev/null @@ -1,165 +0,0 @@ -¡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') @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**? \ No newline at end of file