feat(cliente): invertir el flujo web a jefe -> trabajo
Revisión con IA / ai-review (pull_request) Failing after 2m12s
Revisión con IA / ai-review (pull_request) Failing after 2m12s
Los trabajos ahora son por jefe mecanico, asi que el cliente elige primero el mecanico y despues el trabajo, igual que en el bot de WhatsApp. Antes listaba todos los servicios del taller y recien despues pedia el jefe. - src/lib/servicios.ts: regla unica de que trabajos ofrece un jefe = los suyos + los globales del taller (jefeMecanicoId null, los carga el admin). Asi no se rompe lo que ya existe en produccion, donde todos los servicios son globales. - /api/cliente/servicios ahora exige jefeMecanicoId y aplica esa regla. - /api/cliente/slots y crearTurno rechazan un trabajo propio de OTRO jefe (400): antes se podia reservar con el jefe A la duracion del trabajo del B. - whatsapp-bot: usa la misma regla, asi la web y el bot ofrecen lo mismo. - cliente/turnos: pasos invertidos, cabeceras y back acordes, y estado vacio propio cuando el jefe no tiene trabajos. - test-whatsapp-bot: soporte de OR en el Prisma en memoria, trabajo global en el seed y escenario D (globales visibles, trabajo ajeno rechazado). 31 asserts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { prisma } from "./prisma";
|
||||
import { slotEstaDisponible } from "./scheduling";
|
||||
import { trabajoEsDeJefe } from "./servicios";
|
||||
|
||||
export interface CrearTurnoInput {
|
||||
clienteId: string;
|
||||
@@ -30,6 +31,10 @@ export async function crearTurno(input: CrearTurnoInput): Promise<CrearTurnoResu
|
||||
if (!jefe || !jefe.activo)
|
||||
return { ok: false, error: "Jefe mecánico no disponible", status: 404 };
|
||||
|
||||
// Un trabajo propio de otro jefe no se reserva con éste (los globales sí).
|
||||
if (!trabajoEsDeJefe(servicio, jefeMecanicoId))
|
||||
return { ok: false, error: "Ese trabajo no lo hace este mecánico", status: 400 };
|
||||
|
||||
const fin = new Date(fechaInicio.getTime() + servicio.duracionHoras * 60 * 60 * 1000);
|
||||
|
||||
const disponible = await slotEstaDisponible(fechaInicio, fin, jefeMecanicoId);
|
||||
|
||||
Reference in New Issue
Block a user