o
    i                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ G d
d de	jZdS )    )swagger_auto_schema)action)Response)openapi)viewsetsstatus)Workflow)ColumnWorkflow)OportunidadDeVenta)OportunidadDeVentaSerializerc                   @   s   e Zd ZdZeddeddidgdeddgd	d
d#ddZedej	ddddddddddddddddgdgdidej	ddddgdeddgd d
d!d" Z
dS )$WorkflowViewSetz7
    ViewSet para manejar operaciones de workflows
    zAObtener todas las oportunidades de venta de un workflow completas   Tmanytablero)operation_description	responsestagsgetopportunities)detailmethodsurl_pathNc              
   C   s   z=t jj|ddjddd}|stdg dtjdW S tjj|dddd	d
d	d}t
|dd}td|jdtjdW S  ty^ } ztddt| dtjdW  Y d}~S d}~ww )z
        Endpoint que retorna todas las oportunidades asociadas a las columnas de este workflow.
        Evita hacer N peticiones por columna.
        T)workflow_iddeleted_at__isnullid)flatsuccessdatar   )column_workflow_id__inr   empresausuario_responsableestado_oportunidadcolumn_workflowz-fecha_creacionr   Fz-Error al obtener oportunidades del workflow: r   messageN)r	   objectsfiltervalues_listr   r   HTTP_200_OKr
   select_relatedorder_byr   r   	ExceptionstrHTTP_500_INTERNAL_SERVER_ERROR)selfrequestpkcolumnasoportunidades
serializere r8   */var/www/html/crm_dreinet/tablero/views.pyr      sN   zWorkflowViewSet.opportunitieszCObtener listado de workflows disponibles con sus columnas ordenadasz5Lista de workflows con columnas obtenida exitosamentezapplication/json   zWorkflow de VentaszProceso automatizado de ventasz2025-10-14T10:30:00Z	Prospecto)r   nombreorden   
Contactado)r   r<   descripcionactivofecha_creacionr4   r   )descriptionexampleszError interno del servidor)rC   )r   i  Flistadoc                 C   sJ  zt jjdd}dd |D }tjj|ddd}i }|D ]%}|j|vr*g ||j< ||j |j|j|j	t
|ddt
|d	dd
 qg }|D ]-}||jg }	||j|jt
|ddt
|ddt
|d|jt
|d|j|	t|	d qHtd|t|dtjdW S  ty }
 ztddt|
 dtjdW  Y d}
~
S d}
~
ww )zc
        Endpoint para obtener el listado completo de workflows con sus columnas ordenadas
        T)r   c                 S   s   g | ]}|j qS r8   )r   ).0wr8   r8   r9   
<listcomp>k   s    z5WorkflowViewSet.obtener_workflows.<locals>.<listcomp>)workflow_id__inr   r=   r@    color)r   r<   r=   r@   rK   rA   rB   fecha_actualizacion)r   r<   r@   rA   rB   rL   r4   total_columnas)r   r   totalr    FzError al obtener workflows: r&   N)r   r(   r)   r	   r-   r   appendr   r<   r=   getattrr   
created_at
updated_atlenr   r   r+   r.   r/   r0   )r1   r2   	workflowsworkflow_idsall_columnscolumns_by_workflowcolworkflows_dataworkflow_objcolumnas_datar7   r8   r8   r9   obtener_workflows>   sb   )








z!WorkflowViewSet.obtener_workflows)N)__name__
__module____qualname____doc__r   r   r   r   r   r   r\   r8   r8   r8   r9   r      sP    '
 $r   N)drf_yasg.utilsr   rest_framework.decoratorsr   rest_framework.responser   drf_yasgr   rest_frameworkr   r   Models.workflowr   !Models.oportunidad_de_venta_modelr	   r
    oportunidad_de_venta.serializersr   ViewSetr   r8   r8   r8   r9   <module>   s    