o
    i.                     @   s   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
 d dlmZ d dlmZ d dlmZmZ d	d
lmZmZmZmZmZ G dd dejZdS )    )statusviewsets)action)Response)swagger_auto_schema)openapi)timezone)workflow)ColumnWorkflowOportunidadDeVenta   )WorkflowSerializerCreateWorkflowSerializerEditWorkflowSerializerWorkflowWithColumnsSerializerColumnWorkflowSerializerc                   @   sL  e Zd Zedddideddgddd	d
 Zedeejdej	ej
ej	ejdej	ejdej	ej
ddddejdej	ej
ej	ejdej	ej
ddddddeddgdddd Zedeejdej	ej
ej	ejddej	ejddej	ej
dddddejdej	ej
ej	ejdej	ej
ddddejdej	ej
d ej	ejdiddd!deddgd"dd#d$ Zed%ej	ej
d&gd&ej	ejd'did(ejd)ej	ej
d*ej	ejddiddejdej	ej
d ej	ejdiddejdej	ej
d ej	ejdiddd!deddgd+dd,d- Zd.S )/WorkflowViewSetzGLista todos los workflows activos con sus columnas y la primera columna   zLista de workflows con columnas)operation_description	responsesFgetlist_workflow)detailmethodsurl_pathc                 C   s&   t jjjdd}t|dd}t|jS )NT)deleted_at__isnullmany)r	   Workflowobjectsfilterr   r   data)selfrequest	workflows
serializer r&   +/var/www/html/crm_dreinet/workflow/views.pylistar   s   
zWorkflowViewSet.listarz#Crea un nuevo workflow con columnasWorkflow creado correctamente)typemensajeiddatos)r*   
properties)descriptionschemaz!Error en los datos proporcionadoserrordetalles)     )r   request_bodyr   postcreate_workflowc           	      C   s  t |jd}| std|jdtjdS tjj	j
|jd t t d}|jdg }|jdd }d	}|rItj	j
|j||t d
 |d	7 }|D ]}||krbtj	j
|j||t d
 |d	7 }qKt|j}ttj	j|jddddj|d< ||d< td|j|dtjdS )Nr!      Datos inválidosr2   r   nombre)r=   
created_at
updated_atcolumnasinicioColumnar   )workflow_idr=   ordenr>   )rB   rC   Tr   r)   r+   )r   r!   is_validr   errorsr   HTTP_400_BAD_REQUESTr	   r   r   createvalidated_datar   nowr   r
   r-   r   r   r    order_byHTTP_201_CREATED)	r"   r#   r%   nuevo_workflowr@   inicio_columnarC   col_nameworkflow_datar&   r&   r'   crear   s^   

zWorkflowViewSet.crearux   Edita un workflow existente mediante método POST. Solo es necesario incluir el ID y los campos que se desean modificar."Workflow actualizado correctamenteu   Mensaje de éxito)r*   r0   zID del workflow actualizadozDatos actualizados del workflowWorkflow no encontrador3   )r   r6   i  edit_workflowc                 C   s  t |jd}| std|jdtjdS |jd }ztj	j
j|dd}W n tj	jy=   tdd	| d
itjd Y S w d|jv rI|jd |_t |_|  d|jv r|jd }|jd}ttj
j|jdd}g }|rv|| |D ]}	|	|kr||	 qxt|ddD ]=\}
}	d }|D ]}|j|	kr|} nq|r|j|
kr|
|_t |_|  || qtj
j|j|	|
t t d q|D ]}t |_|  qtd|jt|jdS )Nr:   r;   r2   r<   r-   Tr-   r   r3   zWorkflow con ID z no encontrador=   r@   rA   )rB   r   r   )start)rB   r=   rC   r>   r?   rQ   r+   )r   r!   rD   r   rE   r   rF   rH   r	   r   r   r   DoesNotExistHTTP_404_NOT_FOUNDr=   r   rI   r?   savelistr
   r    r-   append	enumeraterC   removerG   
deleted_atr   )r"   r#   r%   rB   workflow_objcolumnas_namesinicio_columna_namecurrent_columnsfinal_order_namesnameindex	found_colcolr&   r&   r'   editarl   sh   &









	

zWorkflowViewSet.editarz7Elimina un workflow (soft delete). Solo requiere el ID.r-   zID del workflow a eliminar)r*   requiredr/    Workflow eliminado correctamenter,   delete_workflowc                 C   s   |j d}|stdditjdS z0tjjj|dd}tjj	|dd
 r/tdditjdW S t |_|jd	gd
 tddiW S  tjjyU   tdditjd Y S w )Nr-   r3   zFalta el ID del workflowr<   TrT   )column_workflow__workflow_idr   zNo se puede eliminar el workflow porque tiene oportunidades vinculadas. Por favor mueva las oportunidades a otro workflow antes de eliminar.r]   )update_fieldsr,   ri   rR   )r!   r   r   r   rF   r	   r   r   r   r    existsHTTP_200_OKr   rI   r]   rX   rV   rW   )r"   r#   rB   r^   r&   r&   r'   eliminar   s"   )
zWorkflowViewSet.eliminarN)__name__
__module____qualname__r   r   r(   r   r   r   SchemaTYPE_OBJECTTYPE_STRINGTYPE_INTEGERrP   r   rg   ro   r&   r&   r&   r'   r      s    8
$M		'r   N)rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.responser   drf_yasg.utilsr   drf_yasgr   django.utilsr   Modelsr	   !Models.oportunidad_de_venta_modelr
   r   serializersr   r   r   r   r   ViewSetr   r&   r&   r&   r'   <module>   s    