a
     ld4                     @   s<  d dl m Z mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
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mZmZ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"m#Z# d dl$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZKmLZLmMZMmNZNmOZO d dlPmQZQmRZRmSZSmTZT d dlUmVZVmWZW d d lXmYZY e ZZeNeOeKeJgZ[ed!e+e[d"d#G d$d% d%e3Z\G d&d' d'e3e<e=e>e?Z]dS )(    )datetime	timedelta)	strtobool)BytesIO)IterableListOrderedDictN)settings)get_user_model)EmailMultiAlternatives)BooleanFieldCaseCountFQValueWhen)HttpResponse)timezone)method_decorator)ResetPasswordTokenclear_expiredget_password_reset_lookup_field$get_password_reset_token_expiry_time)reset_password_token_created)HTTP_IP_ADDRESS_HEADERHTTP_USER_AGENT_HEADER_unicode_ci_compare)swagger_auto_schema)action)IsAdminUser)Response)ModelViewSet)
celery_app)DEFAULT_FROM_EMAIL)CompanyExportExcelSerializerCompanyUpdateSerializer)BaseCompanyHistoryViewSetBaseCompanyListViewSetBaseCompanyRetrieveMixinBaseCompanyViewSet)ExportUserIntoExcelTask)CompanySubscription)ReviewSource)UserResultsSetPagination)assign_paramcompany_paramend_date_paramstart_date_param
user_paramusername_param)AdminUpdateProfileSerializerAdminUpdateUserSerializerCreateUserSerializerUserSerializer)SealWidget)export_company_tasklist)manual_parameters)name	decoratorc                       s   e Zd ZeZejd Z	e
gZeZ fddZedeegdedgdddd	d
 Z fddZ fddZ fddZ  ZS )AdminUserViewSetprofilec           	         s  t   }| jdkr| jj}|tjd }|rDt|d}|	|}|t
jd }tt|tjd}|tjd }|r|du r|rtddt|dt|dB t|dB @ t|d	B }ntddt|d	B }|	|jtttd
|tddtdt dddd}|S |r>|s>|s>|	t|dt|dB }|du r|s|r~tddt|dt|dB t|dB @ }n
tdd}|	|d}|S | }|dS |dS )Nr=   idfalseT)Zcompanies__isnull)Zusername__icontains)Zname__icontains)Zemail__icontains)companies__idrD   )Zcompanies__user_idrF   thenF)defaultoutput_field)is_ownerz	-is_ownerz-id)superget_querysetr   requestquery_paramsgetr4   r?   r   filterr1   boolr   r0   r5   annotater   r   r   r   r   order_bydistinct)	selfquerysetrN   Zuser_filterZ
user_queryZcompany_filterZassign_filtername_filterfilter_	__class__ D/var/www/html/Ranjet/backend/verify_trusted/users/api/views/admin.pyrL   V   sx    


	



zAdminUserViewSet.get_querysetGET)methodr>   FZ	dashboard)methodsdetailurl_pathc                 C   s  | j j}|tjd d }|tjd d }t|d}|d urLt|dnt }t	dt
| | dd}t	dt
d| ||gdd}t	dt
d	| ||gdd}t	d
t
||gdd}tj }	|	j|||d}	tjj|t	d
d}
|	d |	d |	d |
d |
d d}t|S )Nz	 00:00:00z	 23:59:59z%Y-%m-%d %H:%M:%S
company_id)Zdue_date__ltdue_date__gte)rP   T)Zpayment__isnullrc   Zcreate_date__rangeFrD   )Zdate_joined__range)count_user_non_payingcount_user_trialcount_user_paid)count_user_signed_up_setcount_total_userrd   re   rf   rg   rh   )rd   re   rf   rg   rh   )rM   rN   rO   r3   r?   r2   r   strptimenowr   r   dater-   objectsall	aggregateUserr!   )rU   rM   rN   start_date_filterend_date_filterrd   re   rf   rg   datauserresponse_datar[   r[   r\   admin_dashboard   sh    
z AdminUserViewSet.admin_dashboardc                    s4   | j dkrtS | j dv rtS | j dkr*tS t  S )Ncreate)updatepartial_updateZupdate_profile)r   r8   r7   r6   rK   get_serializer_classrU   rY   r[   r\   ry      s    


z%AdminUserViewSet.get_serializer_classc                    s(   t jj|djdd d t | d S )N)rs   F)is_verifiedrs   )r,   rl   rP   rw   rK   perform_destroyrU   instancerY   r[   r\   r|      s    z AdminUserViewSet.perform_destroyc           	         s   t  j|g|R i |}tjjf i dt |jd i }t	 }t
 t|d }t| | rt|jt|t r|j  dkr|j d }n&tjj||jtd|jtdd}tj| j| |d |S )Nz
{}__iexactemail)hoursr    )rs   
user_agent
ip_address)senderr~   reset_password_token)rK   rv   ro   rl   rP   formatr   rr   firstr   r   rj   r   r   eligible_for_resetr   r   getattrpassword_reset_tokensrm   countr   METArO   r   r   r   sendrZ   )	rU   rM   argskwargscreate_userrs   Z$password_reset_token_validation_timeZnow_minus_expiry_timetokenrY   r[   r\   rv      s6    


zAdminUserViewSet.create)__name__
__module____qualname__r9   serializer_classro   rl   prefetch_relatedrm   rV   r    permission_classesr/   pagination_classrL   r   r3   r2   r   ru   ry   r|   rv   __classcell__r[   r[   rY   r\   rA   L   s   C;	rA   c                       sb   e Zd ZegZ fddZeddgddd Zdd	 Ze	g d
eddgdddd Z
  ZS )AdminCompanyViewSetc                    s   | j dkrtS t  S )Nrw   )r   r&   rK   ry   rz   rY   r[   r\   ry     s    
z(AdminCompanyViewSet.get_serializer_classTPATCH)r`   r_   c                 O   s(   |   }d |_d|_|  tddiS )NFsuccess)
get_objectrs   r{   saver!   )rU   rM   r   r   r~   r[   r[   r\   remove_user  s
    zAdminCompanyViewSet.remove_userc                 C   sT   t jj|jd  tjj|jd  tjj|jd  tjj|jd  d S )N)rb   rC   )r;   rl   rP   rD   deleter:   r.   r,   r}   r[   r[   r\   r|     s    z#AdminCompanyViewSet.perform_destroy)paginator_inspectorsFr]   zexport-excel)r`   r_   ra   c                 O   s$   | j j}t|}|  tddS )N   )status)rM   rN   r<   sapply_asyncr!   )rU   rM   r   r   rN   taskr[   r[   r\   export_excela  s    
z AdminCompanyViewSet.export_excel)r   r   r   r    r   ry   r   r   r|   r   r   r   r[   r[   rY   r\   r     s   
Fr   )^r   r   Zdistutils.utilr   ior   typingr   r   r   Z
xlsxwriterdjango.confr	   django.contrib.authr
   django.core.mailr   django.db.modelsr   r   r   r   r   r   r   django.httpr   django.utilsr   django.utils.decoratorsr    django_rest_passwordreset.modelsr   r   r   r   !django_rest_passwordreset.signalsr   Zdjango_rest_passwordreset.viewsr   r   r   drf_yasg.utilsr   rest_framework.decoratorsr   rest_framework.permissionsr    rest_framework.responser!   rest_framework.viewsetsr"   configr#   Zconfig.settings.baser$   (verify_trusted.companies.api.serializersr%   r&   Z%verify_trusted.companies.api.viewsetsr'   r(   r)   r*   Zverify_trusted.companies.exportr+   verify_trusted.companies.modelsr,   r-   verify_trusted.reviews.modelsr.   $verify_trusted.users.api.paginationsr/   verify_trusted.users.api.paramsr0   r1   r2   r3   r4   r5   $verify_trusted.users.api.serializersr6   r7   r8   r9   Zverify_trusted.widgets.modelsr:   r;   Zverify_trusted.companies.tasksr<   ro   search_paramsrA   r   r[   r[   r[   r\   <module>   sd   $  6
