44aeb58e77
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>
25 lines
940 B
TypeScript
25 lines
940 B
TypeScript
import type { Prisma, TipoServicio } from "@prisma/client";
|
|
|
|
/**
|
|
* Regla única de qué trabajos ofrece un jefe mecánico.
|
|
*
|
|
* Los jefes cargan sus propios trabajos desde `/jefe/servicios` (`jefeMecanicoId` = su id),
|
|
* y el admin puede cargar trabajos globales del taller (`jefeMecanicoId` = null) que ofrece
|
|
* cualquiera. El cliente elige primero el mecánico y después el trabajo, así que la lista
|
|
* siempre es: los del jefe + los globales.
|
|
*/
|
|
export function whereTrabajosDeJefe(jefeMecanicoId: string): Prisma.TipoServicioWhereInput {
|
|
return {
|
|
activo: true,
|
|
OR: [{ jefeMecanicoId }, { jefeMecanicoId: null }],
|
|
};
|
|
}
|
|
|
|
/** Un trabajo propio de otro jefe no se puede reservar con este. Los globales sí. */
|
|
export function trabajoEsDeJefe(
|
|
servicio: Pick<TipoServicio, "jefeMecanicoId">,
|
|
jefeMecanicoId: string
|
|
): boolean {
|
|
return servicio.jefeMecanicoId === null || servicio.jefeMecanicoId === jefeMecanicoId;
|
|
}
|