feat(crm): costo estimado por servicio adicional, folios visibles y sidebar por flujo
- Solicitud: al marcar un servicio adicional se habilita su costo estimado (columna JSON additional_service_costs). Al cotizar, cada servicio marcado se siembra como concepto de la cotización con ese costo de partida (costo=venta). - Folios visibles: se muestran en la tarjeta de Oportunidad del kanban y se aclara en el formulario que el folio se asigna al guardar (las listas ya lo mostraban). - Sidebar CRM reordenado por flujo comercial (captación → embudo → solicitud → cotización → catálogos de apoyo). - Migración c2d3e4f5a6b7 aditiva y reversible. Suite backend en verde (102). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
"""Costo estimado por servicio adicional en la solicitud de servicio
|
||||
|
||||
Revision ID: c2d3e4f5a6b7
|
||||
Revises: b1c2d3e4f5a6
|
||||
Create Date: 2026-08-04 00:00:00.000000
|
||||
|
||||
Agrega crm.service_requests.additional_service_costs (JSON: {codigo_servicio: costo})
|
||||
para capturar el costo estimado de cada servicio adicional marcado; ese costo se
|
||||
usa como punto de partida al sembrar los conceptos de la cotización.
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
revision: str = "c2d3e4f5a6b7"
|
||||
down_revision: Union[str, None] = "b1c2d3e4f5a6"
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
SCHEMA = "crm"
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
op.add_column(
|
||||
"service_requests",
|
||||
sa.Column("additional_service_costs", sa.JSON(), nullable=True),
|
||||
schema=SCHEMA,
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
op.drop_column("service_requests", "additional_service_costs", schema=SCHEMA)
|
||||
Reference in New Issue
Block a user