o
    i                     @   s   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 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 G dd dejZdS )    )render)viewsetsstatus)action)Response)swagger_auto_schema)openapi)Empresa)Contacto)OportunidadDeVenta)datetime	timedelta)CountQc                   @   s   e Zd ZdZeddedideddgdd	d
d Zeddedideddgdd	dd Z	eddedideddgdd	dd Z
dS )MetricsViewSetu>   
    ViewSet para métricas y estadísticas del dashboard
    u)   Devuelve métricas generales del sistema.   u   Métricas generales)operation_description	responsesFgetgeneral)detailmethodsurl_pathc                 C   s   t   }t |j|jd }tjjddd }tjjdd|d }tjjddd }tjjdd|d }tjjdddd }t	jjdd }	t	jjd|d }
t
||d	|||d
|	|
d	dS )u$  
        Devuelve métricas generales del sistema como:
        - Total empresas tipo 1
        - Datos nuevos (último mes)
        - Total empresas tipo 2
        - Clientes nuevos (último mes)
        - Total de oportunidades de venta
        - Oportunidades nuevas (último mes)
           T)deleted_at__isnulltipo_empresa)r   r   fecha_creacion__gte   )r   r   estado_empresa_idr   )r   r   )totalnuevas_este_mes)r    nuevos_este_mesactivos)DatosClientesOportunidades_de_venta)r   nowdateyearmonthr	   objectsfiltercountr   r   )selfrequesttodayfirst_day_of_monthtotal_datosnuevos_datostotal_clientesnuevos_clientesclientes_activostotal_oportunidadesnuevas_oportunidades r9   4/var/www/html/crm_dreinet/dashboard/metrics/views.pygeneral_metrics   sX   zMetricsViewSet.general_metricsu!   Devuelve métricas por provincia.u   Métricas por provinciazby-provincec                 C   s6   t jjdddjtddd}tdt|iS )z@
        Devuelve la cantidad de empresas por provincia
        Tr   provincia__nombreid)r    z-totalempresas_por_provincia)	r	   r+   r,   valuesannotater   order_byr   list)r.   r/   r>   r9   r9   r:   metrics_by_provinceZ   s   z"MetricsViewSet.metrics_by_provinceu)   Devuelve métricas de actividad reciente.u   Métricas de actividadactivityc           	         s   t   }|tdd   fddtdD }i }|D ]}t |d }tjjd|d	 }|||< qi }|D ]}t |d }t
jjd|d	 }|||< q9t|||d	S )
u   
        Devuelve métricas de actividad:
        - Empresas creadas por día (últimos 7 días)
        - Contactos creados por día (últimos 7 días)
           daysc                    s    g | ]} t |d  dqS )rF   %Y-%m-%d)r   strftime).0i
days_ago_7r9   r:   
<listcomp>   s     z3MetricsViewSet.activity_metrics.<locals>.<listcomp>   rH   T)r   fecha_creacion__date)fechasempresas_por_diacontactos_por_dia)r   r'   r(   r   rangestrptimer	   r+   r,   r-   r
   r   )	r.   r/   r0   rG   rR   daydate_objr-   rS   r9   rL   r:   activity_metricsp   s8   

zMetricsViewSet.activity_metricsN)__name__
__module____qualname____doc__r   r   r   r   r;   rC   rX   r9   r9   r9   r:   r      s.    
>

r   N)django.shortcutsr   rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.responser   drf_yasg.utilsr   drf_yasgr   Models.Empresar	   Models.contacto_modelr
   !Models.oportunidad_de_venta_modelr   r   r   django.db.modelsr   r   ViewSetr   r9   r9   r9   r:   <module>   s    