Saltearse al contenido

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.

  • 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}/pdf y 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.
  • 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.
  • 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 pedidos por su lado.
  • dompdf no es un navegador. La plantilla resources/views/pdf/quote.blade.php va con tablas y float: 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.