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	 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mZmZ d dlmZ G dd dejZdS )    )render)timezone)viewsets)action)Response)statuspermissions)swagger_auto_schema)openapi)Contacto   )ContactoSerializerContactoUpdateSerializerContactoDeleteSerializer)AuditHelperc                   @   s(  e Zd Zeddgddeddgdddd Zedeedd	d
eddgdddd Zedej	ej
dgej	ejddej	ejddej	ejddej	ejddej	ejddej	ejddddedddd
eddgdddd Zed eed!dddd
eddgd"dd#d$ Zd%S )&ContactoViewSetFgetlist_contact)detailmethodsurl_pathc                 C   sR   t jjdd}|jd}|r| r|dd t| }t|dd}t	|j
S )NT)deleted_at__isnulllimitz-fecha_creacion)many)r   objectsfilterquery_paramsr   isdigitorder_byintr   r   data)selfrequest	contactosr   
serializer r%   +/var/www/html/crm_dreinet/contacto/views.pyr      s   
zContactoViewSet.list_contactzCrea un nuevo contacto.zSolicitud incorrecta)     )operation_descriptionrequest_body	responsespostcreate_contactc              
   C   s   |j  }|d}|rtjj|dd rtdditj	dS t
 |d< t|d}| rj| }ztjd d	||j d
|j |d W n ty_ } ztdt|  W Y d }~nd }~ww tt|j tjdS t|jtj	dS )NtelefonoTr.   r   erroru8   Ya existe un contacto con el mismo número de teléfono.r   fecha_creacion)r    CREATEu   Creación de contacto: )userr   instance
data_afterdescriptionr"   u"   Error al registrar la auditoría: )r    copyr   r   r   r   existsr   r   HTTP_400_BAD_REQUESTr   nowr   is_validsaver   
log_actionnombre	ExceptionprintstrHTTP_201_CREATEDerrors)r!   r"   r    r.   r$   contactoer%   r%   r&   r-      s6   





zContactoViewSet.create_contactzMModifica un contacto existente por ID. Solo se modifican los campos enviados.idzID del contacto)typer7   zNombre del contactozEmail del contactou   Teléfono del contactozID de la empresa del contactozCargo del contacto)rG   r?   emailr.   
empresa_idcargo)rH   required
propertiesContacto no encontrado)   r(   i  patchupdate_contactc                 C   s  |j d}|stdditjdS z	tjj|d}W n tjy-   tdditjd Y S w i }dD ]}||j v r@|j | ||< q2|sLtdditjdS |d	}|rjtjj	|d
dj
|d rjtdditjdS t||d
d}| r| }tt|j tjdS t|jtjdS )NrG   r0   Se requiere el id del contactor1   rG   rN   )r?   rI   r.   rJ   rK   z$No se enviaron campos para modificarr.   Tr/   u:   Ya existe otro contacto con el mismo número de teléfono.)r    partial)r    r   r   r   r:   r   r   DoesNotExistHTTP_404_NOT_FOUNDr   excluder9   r   r<   r=   r   HTTP_200_OKrD   )r!   r"   contacto_idrE   update_fieldsfieldr.   r$   r%   r%   r&   rQ   H   s6   

zContactoViewSet.update_contactzHElimina (soft delete) un contacto por ID. Actualiza el campo deleted_at.zContacto eliminadodelete_contactc                 C   s   |j d}|stdditjdS z	tjj|d}W n tjy-   tdditjd Y S w t	
 |_|  td|dtjdS )	NrG   r0   rR   r1   rS   rN   z Contacto eliminado correctamente)mensajerG   )r    r   r   r   r:   r   r   rU   rV   r   r;   
deleted_atr=   rX   )r!   r"   rY   rE   r%   r%   r&   r\      s   
zContactoViewSet.delete_contactN)__name__
__module____qualname__r   r   r	   r   r-   r
   SchemaTYPE_OBJECTTYPE_INTEGERTYPE_STRINGrQ   r   r   r\   r%   r%   r%   r&   r      sV    #+	r   N)django.shortcutsr   django.utilsr   rest_frameworkr   rest_framework.decoratorsr   rest_framework.responser   r   r   drf_yasg.utilsr	   drf_yasgr
   Models.contacto_modelr   serializersr   r   r   audit.helpersr   ViewSetr   r%   r%   r%   r&   <module>   s    