o
    [hE                     @   s  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 d dlmZmZmZmZ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 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%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+G d%d& d&eZ,G d'd( d(eZ-G d)d* d*eZ.d+S ),    )APIView)Response)statuspermissions)openapi)Q)
parse_date)swagger_auto_schema)Enquiry	UserBlockUserFavourite
UserReportUserTransaction)EnquirySerializerUserBlockSerializerUserFavouriteSerializerUserReportSerializerUserEnquirySerializerUserReportbySerializerUserTransactionSerializer)IsActiveAdminc                 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_settings.pyapply_search   s   
r    c                	   @   s\   e Zd ZejgZeddede	ddiddd Z
eed	d
edeiddd ZdS )EnquiryListCreateViewzRetrieve all enquiries   zList of enquiriesTmanyoperation_description	responsesc                 C   s&   t j }t|dd}t|jtjdS )NTr#   r   )r
   objectsallr   r   datar   HTTP_200_OK)selfrequest	enquiries
serializerr   r   r   get   s   
zEnquiryListCreateView.getzCreate a new enquiry   zEnquiry created successfully)request_bodyr&   r'   c                 C   <   t |jd}| r|  t|jtjdS t|jtjdS N)r+   r(   )	r   r+   is_validsaver   r   HTTP_201_CREATEDerrorsHTTP_400_BAD_REQUESTr-   r.   r0   r   r   r   post"   s
   zEnquiryListCreateView.postN)__name__
__module____qualname__r   IsAuthenticatedpermission_classesr	   r   r   r   r1   r   r<   r   r   r   r   r!      s    
r!   c                	   @   s2   e Zd Zeddededdiddd Zd	S )
EnquiryByUserViewzRetrieve enquiries by user IDr"   zUser-specific enquiriesTr#   r%   c                 C   s*   t jj|d}t|dd}t|jtjdS )Nuser_idTr#   r(   )r
   r)   r   r   r   r+   r   r,   )r-   r.   rD   r/   r0   r   r   r   r1   0   s   zEnquiryByUserView.getN)r=   r>   r?   r	   r   r   r   r1   r   r   r   r   rB   /   s    rB   c                   @   s   e Zd ZejgZedejej	ej
ejejejddejejdddgdejejddd	d
dgdddddddd ZdS )EnquiryStatusUpdateViewzPBulk update the status and admin_description of multiple enquiries by their IDs.z
Enquiry ID)typedescriptionz%New status (1 for Open, 2 for Closed)      )rF   rG   enumz&Admin response or note for the enquiry)idr   admin_descriptionrK   r   )rF   
propertiesrequired)rF   itemsz/Statuses and descriptions updated successfully.zInvalid input data.)r"   i  )r&   r3   r'   c           
   
   C   s   |j }t|tstdditjdS g }g }|D ]M}|d}|d}|dd}|r/|dvr9|d|d	d
 qztj	j|d}	||	_||	_
|	  || W q tjyd   |d|dd
 Y qw tdd||dtjdS )NerrorzExpected a list of updates.r(   rK   r   rL    )rH   rI   zMissing or invalid data.)r   rK   messagepkzEnquiry not found.successz.Status and admin description update completed.)r   rR   rU   failed)r+   
isinstancelistr   r   r:   r1   appendr
   r)   rL   r7   DoesNotExistr,   )
r-   r.   updatessuccess_updatesfailed_updatesitem
enquiry_idstatus_valuerL   enquiryr   r   r   r<   =   sJ   


zEnquiryStatusUpdateView.postN)r=   r>   r?   r   r@   rA   r	   r   Schema
TYPE_ARRAYItemsTYPE_OBJECTTYPE_INTEGERTYPE_STRINGr<   r   r   r   r   rE   :   s6    rE   c                
   @   P   e Zd ZejgZedejdej	dej
dgdededdid	d
d ZdS )EnquiryStatusoneViewz'Retrieve all enquiries where status = 1searchSearch keywordrG   rF   r"   zEnquiries with status 1Tr#   r&   manual_parametersr'   c                 C   H   t jjdd}|jd}|rt||dg}t|dd}t|jt	j
dS )NrH   r(   rj   subjectTr#   r
   r)   r   query_paramsr1   r    r   r   r+   r   r,   r-   r.   r/   rj   r0   r   r   r   r1         zEnquiryStatusoneView.getNr=   r>   r?   r   r@   rA   r	   r   	ParameterIN_QUERYrg   r   r   r1   r   r   r   r   ri          ri   c                
   @   rh   )EnquiryStatusTwoListViewz'Retrieve all enquiries where status = 2rj   rk   rl   r"   zEnquiries with status 2Tr#   rm   c                 C   ro   )NrI   r(   rj   rp   Tr#   rq   rs   r   r   r   r1      rt   zEnquiryStatusTwoListView.getNru   r   r   r   r   ry      rx   ry   c                
   @   |   e Zd Ze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 )UserBlockByUserIdViewrD   z,ID of the user to retrieve blocked users forTrG   rF   rN   rj   z7Search by blocked user's display_name, email, or mobilerl   
start_dateStart date in YYYY-MM-DD formatend_dateEnd date in YYYY-MM-DD formatr"   r#   rn   r'   c                 C      t jj|d}t|jdd}t|jdd}|r!|j|d}|r)|j|d}|jd}|rC|t|dt|d	B t|d
B }t|dd}t|j	S )NrC   r}   rQ   r   created_at__date__gtecreated_at__date__lterj   )%blocked_user__display_name__icontains)blocked_user__email__icontains)blocked_user__mobile__icontainsTr#   )
r   r)   r   r   rr   r1   r   r   r   r+   )r-   r.   rD   blocksr}   r   rj   r0   r   r   r   r1      $   
zUserBlockByUserIdView.getN)r=   r>   r?   r	   r   rv   IN_PATHrf   rw   rg   r   r1   r   r   r   r   r{      >    r{   c                   @   &   e Zd ZejgZeeddd ZdS )UserBlockAddViewr3   c                 C   r4   r5   )	r   r+   r6   r7   r   r   r8   r9   r:   r;   r   r   r   r<      
   zUserBlockAddView.postN)	r=   r>   r?   r   r@   rA   r	   r   r<   r   r   r   r   r          r   c                   @   sx   e Zd ZejgZeejdej	dej
ddgedejejejejdejejddded	d
ddd ZdS )UserBlockDeleteViewrK   z&ID of the block relationship to deleteTr|   Deleted successfully)rF   r   rR   )rF   rM   	Not found)r"     r   c                 C   sV   zt jj|d}|  tdddtjdW S  t jy*   tdddtjd Y S w )NrS   rU   zuser Unblocked successfully.r   r(   rP   zBlocked user not found.)	r   r)   r1   deleter   r   r,   rZ   HTTP_404_NOT_FOUND)r-   r.   rK   blockr   r   r   r      s"   
zUserBlockDeleteView.deleteN)r=   r>   r?   r   r@   rA   r	   r   rv   r   rf   r   rb   re   rg   r   r   r   r   r   r      s*    

r   c                   @   s@   e Zd Zeejdejdejddgdeddiddd	 Z	d
S )UserFavouriteByUserIdViewrD   z)ID of the user to retrieve favourites forTr|   r"   r#   r   c                 C   s$   t jj|d}t|dd}t|jS )NrC   Tr#   )r   r)   r   r   r   r+   )r-   r.   rD   favsr0   r   r   r   r1     s   
zUserFavouriteByUserIdView.getN)
r=   r>   r?   r	   r   rv   r   rf   r   r1   r   r   r   r   r     s    	r   c                   @   r   )UserFavouriteAddViewr   c                 C   r4   r5   )	r   r+   r6   r7   r   r   r8   r9   r:   r;   r   r   r   r<   3  r   zUserFavouriteAddView.postN)	r=   r>   r?   r   r@   rA   r	   r   r<   r   r   r   r   r   0  r   r   c                   @   sD   e Zd ZejgZeejdej	dej
ddgddddd	d
 ZdS )UserFavouriteDeleteViewrK   z*ID of the favourite relationship to deleteTr|   r   r   )   r   r   c                 C   sR   zt jj|d}|  tdditjdW S  t jy(   tdditjd Y S w )NrS   rR   zFavourite deleted successfully.r(   rP   zFavourite not found.)	r   r)   r1   r   r   r   HTTP_204_NO_CONTENTrZ   r   )r-   r.   rK   favr   r   r   r   =  s   zUserFavouriteDeleteView.deleteN)r=   r>   r?   r   r@   rA   r	   r   rv   r   rf   r   r   r   r   r   r   ;  s     
r   c                
   @   rz   )UserReportByUserIdViewrD   z-ID of the user to retrieve reported users forTr|   rj   8Search by reported user's display_name, email, or mobilerl   r}   r~   r   r   r"   r#   r   c                 C   r   )NrC   r}   rQ   r   r   r   rj   &reported_user__display_name__icontainsreported_user__email__icontains reported_user__mobile__icontainsTr#   )
r   r)   r   r   rr   r1   r   r   r   r+   )r-   r.   rD   reportsr}   r   rj   r0   r   r   r   r1   V  r   zUserReportByUserIdView.getN)r=   r>   r?   r	   r   rv   r   rf   rw   rg   r   r1   r   r   r   r   r   U  r   r   c                
   @   s~   e Zd Ze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d ZdS )UserReportByReporterViewreporter_idz"ID of the user who reported othersTr|   rj   r   rl   r}   r~   r   r   r"   r#   z+List of users reported *by* the given user.)rn   r'   r&   c                 C   s   t jj|d}t|jdd}t|jdd}|r!|j|d}|r)|j|d}|jd}|rC|t|dt|d	B t|d
B }t|dd}t|j	t
jdS )N)reported_user_idr}   rQ   r   r   r   rj   r   r   r   Tr#   r(   )r   r)   r   r   rr   r1   r   r   r   r+   r   r,   )r-   r.   r   r   r}   r   rj   r0   r   r   r   r1     s$    zUserReportByReporterView.getN)r=   r>   r?   r	   r   rv   r   rf   rw   rg   r   r1   r   r   r   r   r     s@    r   c                   @   r   )UserReportAddViewr   c                 C   r4   r5   )	r   r+   r6   r7   r   r   r8   r9   r:   r;   r   r   r   r<     r   zUserReportAddView.postN)	r=   r>   r?   r   r@   rA   r	   r   r<   r   r   r   r   r     r   r   c                   @   s   e Zd Zdd ZdS )UserTransactionListAPIViewc                 C   sh   |j d}|j d}|stdditjdS tjj|d}|r&|j|d}t|dd}t|j	tj
dS )	NrD   r   rP   zuser_id is requiredr(   rC   Tr#   )rr   r1   r   r   r:   r   r)   r   r   r+   r,   )r-   r.   rD   status_filterr   r0   r   r   r   r1     s   zUserTransactionListAPIView.getN)r=   r>   r?   r1   r   r   r   r   r     s    r   N)/rest_framework.viewsr   rest_framework.responser   rest_frameworkr   r   drf_yasgr   django.db.modelsr   django.utils.dateparser   drf_yasg.utilsr	   user.modelsr
   r   r   r   r   user.serializersr   r   r   r   r   r   r   master.authenticationr   r    r!   rB   rE   ri   ry   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s4    $H7(6: