o
    [h#                     @   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 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mZmZ d dlmZ d dlmZ dd ZG dd deZ G dd deZ!G dd deZ"G dd deZ#G dd deZ$G dd deZ%dS )    )APIView)Responsestatus)swagger_auto_schema)openapi)Q)IsAuthenticated)get_object_or_404)
parse_date)UserPlan)FemaleReward)UserSerializerFemalrequestSerializerPlanSerializer)IsActiveAdmin)FemaleRewardSerializerc                 C   s6   t  }|D ]}|t di | d|iO }q| |S )N__icontains )r   filter)querysetsearch_termfieldsqfieldr   r   W/var/www/vedio/testing/chatpythonscript.ninositsolution.com/user/views/user_to_admin.pyapply_search   s   
r   c                   @      e Zd ZeegZedejdej	dej
ddejdej	dejdejd	ej	d
ejdejdej	dejdgdeddiddd ZdS )UserByGenderViewzwRetrieve users based on gender (1 for male, 2 for female), with optional search, date filters, and admin_status=1 only.gender1 (Male), 2 (Female)Tdescriptiontyperequiredsearch0Search by real_name, display_name, email, mobiler#   r$   
start_dateStart date in YYYY-MM-DDend_dateEnd date in YYYY-MM-DD   manyoperation_descriptionmanual_parameters	responsesc                 C   s   |j d}|stdditjdS zt|}|dvrtW n ty/   tdditjd Y S w tj	t
|dt
dd	gd
@ }t|j dd}t|j dd}|rZ|j	|d}|rb|j	|d}|j d}|rrt||g d}t|dd}t|jtjdS )Nr    error+Gender is required as query param (1 or 2).r         Gender must be 1 or 2.r    r7      admin_status__inr)    r+   created_at__date__gtecreated_at__date__lter&   display_name	real_nameemailmobileTr.   )query_paramsgetr   r   HTTP_400_BAD_REQUESTint
ValueErrorr   objectsr   r   r   r   r   dataHTTP_200_OK)selfrequestr    usersr)   r+   r&   
serializerr   r   r   rI      s.    zUserByGenderView.getN__name__
__module____qualname__r	   r   permission_classesr   r   	ParameterIN_QUERYTYPE_INTEGERTYPE_STRINGr   rI   r   r   r   r   r          
r   c                   @   s   e Zd ZeegZedejdej	dej
dejdej	dej
dejdej	dej
dejd	ej	d
ej
dgdeddiddd ZdS )FemaleUnverifiedUserViewzFGet female users (gender=2), filter by admin_status, search, and date.r&   zSearch keywordr(   admin_statusz'Comma-separated admin_status (e.g. 1,2)r)   zStart date (YYYY-MM-DD)r+   zEnd date (YYYY-MM-DD)r-   Tr.   r0   c           	      C   s   t jjdd}|jd}|r3zdd |dD }|j|d}W n ty2   tdd	id
d Y S w t|jdd}t|jdd}|rM|j|d}|rU|j|d}|jd}|ret	||g d}t
|dd}t|jtjdS )Nr8   r:   r_   c                 S   s$   g | ]}|   rt|  qS r   )stripisdigitrK   ).0xr   r   r   
<listcomp>X   s   $ z0FemaleUnverifiedUserView.get.<locals>.<listcomp>,r<   r4   z0Invalid admin_status value(s). Must be integers.i  r   r)   r>   r+   r?   rA   r&   rC   Tr.   )r   rM   r   rH   rI   splitrL   r   r   r   r   rN   r   rO   )	rP   rQ   rR   admin_status_paramadmin_status_listr)   r+   r&   rS   r   r   r   rI   G   s(   zFemaleUnverifiedUserView.getN)rU   rV   rW   r	   r   rX   r   r   rY   rZ   r\   r   rI   r   r   r   r   r^   D   s    
r^   c                   @   r   )UserDeleteViewznRetrieve soft-deleted users based on gender (1 for male, 2 for female), with optional search and date filters.r    r!   Tr"   r&   r'   r(   r)   r*   r+   r,   r-   r.   r0   c           
      C   s&  |j d}|stdditjdS zt|}|dvrtW n ty/   tdditjd Y S w tjj	|dd}t
|j d	d
}t
|j dd
}|rR|j	|d}|rZ|j	|d}|j d}|rjt||g d}g }|D ]}t|j}	|j|	d< t|dr|jnd |	d< ||	 qnt|tjdS )Nr    r4   r5   r   r6   r9   F)r    deleted_at__isnullr)   r>   r+   r?   rA   r&   rC   
deleted_atdelete_reason)rH   rI   r   r   rJ   rK   rL   r   rM   r   r   r   r   rN   rk   hasattrrl   appendrO   )
rP   rQ   r    rR   r)   r+   r&   resultuser	user_datar   r   r   rI   p   s>   

zUserDeleteView.getNrT   r   r   r   r   ri   m   r]   ri   c                   @   0   e Zd ZegZeddeddiddd ZdS )	OfferPlanListViewz8Retrieve all active offer plans (type=1 and status=true)r-   Tr.   r1   r3   c                 C   4   t jjddd}t|dd}tdd|jdtjdS )	Nr7   Tr$   r   r.   successz"Offer plans retrieved successfullyr   messagerN   r   r   rM   r   r   r   rN   r   rO   rP   rQ   plansrS   r   r   r   rI         zOfferPlanListView.getNrU   rV   rW   r	   rX   r   r   rI   r   r   r   r   rs          rs   c                   @   rr   )	NormalPlanListViewz9Retrieve all active normal plans (type=2 and status=true)r-   Tr.   rt   c                 C   ru   )	Nr8   Trv   r.   rw   z#Normal plans retrieved successfullyrx   r   rz   r{   r   r   r   rI      r}   zNormalPlanListView.getNr~   r   r   r   r   r      r   r   c                   @   rr   )	FemaleRewardListViewz+Get all active female rewards (status=true)r-   Tr.   rt   c                 C   s2   t jjdd}t|dd}tdd|jdtjdS )NTr   r.   rw   z#Active rewards fetched successfullyrx   )r   rM   r   r   r   rN   r   rO   )rP   rQ   rewardsrS   r   r   r   rI      s   zFemaleRewardListView.getN)rU   rV   rW   r	   rX   r   r   rI   r   r   r   r   r      r   r   N)&rest_framework.viewsr   rest_framework.responser   rest_frameworkr   drf_yasg.utilsr   drf_yasgr   django.db.modelsr   rest_framework.permissionsr	   django.shortcutsr
   django.utils.dateparser   user.modelsr   r   master.modelsr   user.serializersr   r   r   master.authenticationr   master.serializersr   r   r   r^   ri   rs   r   r   r   r   r   r   <module>   s*    ,)3