Cotizaciones
Cotizaciones arma el documento de una venta: líneas, totales, consecutivo y un PDF con los datos de tu empresa. Su clave es cotizaciones y viene en todos los planes. Lo usas cuando el precio hay que proponerlo por escrito antes de cobrar.
Qué hace
Sección titulada «Qué hace»- Flujo de estados: borrador → confirmada → enviada → aceptada o rechazada. El consecutivo
COT-AAAA-####solo se asigna al confirmar. - El PDF sale al vuelo en
GET /api/quotes/{quote}/pdfy no se almacena: una confirmada es inmutable, así que siempre se puede derivar de la fila. Guardarlo crearía un segundo origen de verdad que puede desincronizarse. - Un borrador también se imprime, marcado
BORRADOR, para revisarlo antes de confirmar. - Las líneas pueden apuntar a un producto del catálogo. Eso rellena la descripción y deja constancia de cuál es; el precio sigue siendo manual, porque el catálogo no tiene precios.
- Duplicar conserva el enlace a los productos, y convertir a pedido crea la orden de compra.
- El chat de la ficha propone cambios de líneas y de vigencia, solo en borradores, y una persona los aprueba.
De qué depende
Sección titulada «De qué depende»- El módulo
cotizaciones. - Los datos de tu empresa para el membrete: razón social, NIT, dirección, teléfono, correo, color de marca y logo, en
PATCH /api/sites/{sitio}/business. Los edita el cliente, no el staff. - El catálogo es opcional: una línea libre vale para servicios y fletes.
- Convertir a pedido exige además el módulo
pedidos. - En el chat, Cóndor valida cada línea propuesta: una línea por debajo de su coste bloquea la propuesta entera.
Qué pasa cuando se apaga
Sección titulada «Qué pasa cuando se apaga»- Todo el ciclo y el PDF responden 403 con
{"module": "cotizaciones"}. - El listado se filtra por sitios que tienen el módulo, así que la bandeja sale vacía en vez de dar error: el panel puede pintar la compuerta.
- Lo emitido no se pierde: la fila y su número siguen en la base, pero no se consultan ni se imprimen.
- Convertir sigue necesitando
pedidospor su lado.
Límites y trampas
Sección titulada «Límites y trampas»- dompdf no es un navegador. La plantilla
resources/views/pdf/quote.blade.phpva con tablas yfloat: no hay flexbox ni grid. “Modernizarla” no da error, sale apilada. - El logo se incrusta como
data:leyéndolo del disco. Si el registro sobrevive y el archivo no, el membrete cae a texto en vez de romper el documento. - Sin razón social el documento cae al nombre del sitio; el color de marca vacío usa tinta neutra. El documento es del cliente, así que el acento se configura por sitio.
- Un producto de otro sitio se descarta en el modelo, no en la validación: en el alta el sitio llega en el cuerpo y en la edición sale de la cotización, así que la guarda vive donde se conoce el
site_id. - El PDF no pasa por un Resource, así que no está en el archivo de contrato: nada avisa si el documento sale vacío o sin membrete.
- La IA no confirma ni envía. El mensaje para el cliente se redacta y no se manda solo; enviar es una acción humana.
- Una propuesta del chat lleva una huella de la cotización: si alguien la edita antes de aprobarla, la propuesta falla en vez de pisar lo que hizo la persona.