a
     ld                     @   s,  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 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 d dlmZ d dlmZm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d dlm(Z( e'eeeeegZ)ede	e)ddG dd deeeeZ*dS )    )datedatetime)Subquery)timezone)method_decorator)swagger_auto_schema)CreateModelMixinListModelMixinUpdateModelMixin)IsAuthenticatedOrReadOnly)GenericViewSet)ReviewFilter)end_date_paramplatform_ids_paramrating_paramsource_ids_paramstart_date_param)ReviewSerializer)HistoryType)ReviewCompany)ReviewSourcePlatform)ReviewResultsSetPagination)company_review_param)Qlist)manual_parameters)name	decoratorc                       sn   e Zd Zejd ddZe	Z
eZegZeZ fddZdd Zdd	 Zd
d Zdd Zdd Z  ZS )ReviewViewSetsource__platformdisplay_order-datec                    s   t   ttjjd }| jdkr~| jj	}|
tjd }|r~|
tjd }t|d}|d urf|nt }|j||gd}|S )N)source__platform__statusr   z%Y-%m-%d)date__range)superget_querysetfilterr   r   StatusHIDE_REVIEWSactionrequestquery_paramsgetr   r   r   r   strptimer   today)selfquerysetr-   start_date_filterend_date_filter	__class__ L/var/www/html/Ranjet/backend/verify_trusted/companies/api/viewsets/review.pyr'   8   s    
zReviewViewSet.get_querysetc                 C   sr   |j d ur|j jjn
|jd j}|jjtjdjdd	d
 }|d ur^t |_|  n|j|_|  d S )Nsource)history_change_reason~)history_typez-history_date)instancer9   companyvalidated_datahistoryexcluder   CLAIMEDr(   order_byfirstr   nowhistory_datesavephone)r1   
serializerr>   r@   r7   r7   r8   add_changelogI   s    


zReviewViewSet.add_changelogc                 C   s\   t jj|djtt jj|d dd d tt jj|d dd d d d S )Nidcal_average_rating   cal_reviews_count)average_ratingreviews_count)r   objectsr(   updater   with_avg_ratingvalueswith_reviews_count)r1   
company_idr7   r7   r8   update_company\   s    zReviewViewSet.update_companyc                 C   s`   t jjttjj|djddddddd}t|dkr\|dd  D ]}d	|_|	  qHd S )
N)rW   rL   T)flat)source_id__in	is_activez-date_modifyr#      F)
r   rR   r(   r   r   values_listrC   lenr[   rG   )r1   rW   reviewsreviewr7   r7   r8   limit_reviews_activee   s    z"ReviewViewSet.limit_reviews_activec                 C   sB   |  | |  tjj|jd djj}| | | 	| d S Nr9   rK   )
rJ   rG   r   rR   r.   datar>   rL   rX   ra   r1   rI   rW   r7   r7   r8   perform_updaten   s
    

zReviewViewSet.perform_updatec                 C   s8   |  | |  tjj|jd djj}| | d S rb   )	rJ   rG   r   rR   r.   rc   r>   rL   rX   rd   r7   r7   r8   perform_createu   s    
zReviewViewSet.perform_create)__name__
__module____qualname__r   rR   prefetch_relatedallrC   r2   r   serializer_classr   pagination_classr   permission_classesr   filterset_classr'   rJ   rX   ra   re   rf   __classcell__r7   r7   r5   r8   r    %   s   
		r    N)+r   r   django.db.modelsr   django.utilsr   django.utils.decoratorsr   drf_yasg.utilsr   rest_framework.mixinsr   r	   r
   rest_framework.permissionsr   rest_framework.viewsetsr   +verify_trusted.companies.api.filters.reviewr   #verify_trusted.companies.api.paramsr   r   r   r   r   (verify_trusted.companies.api.serializersr   &verify_trusted.companies.history_typesr   verify_trusted.companies.modelsr   r   verify_trusted.reviews.modelsr   r   $verify_trusted.users.api.paginationsr   verify_trusted.users.api.paramsr   r   Zreviews_filter_paramsr    r7   r7   r7   r8   <module>   s@   


