a
     ldU7                     @   s*  d dl mZ d dl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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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$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/Z/d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZH e1e2e5e4e3gZIG dd de!ZJG dd de ZKedee7e6e8gddG dd deeeKZLedee7e6e8gddG d d! d!e!eKZMedeeIeHgd"dG d#d$ d$e"ZNdS )%    )	strtobool)CaseCountIntegerFieldValueWhenSubquery)timezone)method_decorator)no_bodyswagger_auto_schemastatus)action)CreateModelMixinListModelMixin)IsAdminUserIsAuthenticatedIsAuthenticatedOrReadOnly)Request)Response)GenericViewSetModelViewSetReadOnlyModelViewSet)HistoryTypeHistoryTypeSymbol)CompanyReview)ReviewSourceChangelogFilter)PlatformResultsSetPagination'ReviewSourceHistoryResultsSetPagination ReviewSourceResultsSetPaginationN)company_name_paramcompany_paramdate_after_paramdate_before_paramhistory_type_paramis_popular_param
name_paramstatus_paramaccess_tokenpage_idis_add)PlatformSerializerReviewSourceHistorySerializerReviewSourceSerializerUserPlatformCreateSerializer UserReviewSourceCreateSerializer)PlatformReviewSource)sync_reviews_task)#NoDjangoFilerBackendFilterInspectorc                       s   e Zd Zejd ZeZ	e
gZeZ fddZ fddZedddZeeeeegd	ed
dgddedddZdd Zdd Zdd Zdd Zdd Z  ZS )ReviewSourceViewSetplatformc                    s   | j dv rtS t  S )N)createupdatedestroy)r   r1   superget_serializer_classself	__class__ C/var/www/html/Ranjet/backend/verify_trusted/reviews/api/viewsets.pyr<   E   s    
z(ReviewSourceViewSet.get_serializer_classc                    sF   t   }| jdv rB| jj}|jsB|j|tjj	tjj
tjjgd}|S )N)r9   partial_updater:   sync_reviews)company__userplatform__status__in)r;   get_querysetr   requestuseris_superuserfilterr2   StatusACTIVEHIDE_REVIEWSUNAVAILABLE)r>   querysetrI   r?   rA   rB   rG   J   s    

z ReviewSourceViewSet.get_querysetrH   c                 O   s4   |   }| |}|j}|j }|j|d< t|S )N
history_id)
get_objectget_serializerdatahistorylatestrR   r   )r>   rH   argskwargsinstance
serializerresponse_datarecordrA   rA   rB   retrieveY   s    


zReviewSourceViewSet.retrieve)request_bodymanual_parametersTPOSTzsync-reviews)detailmethodsurl_pathc           	      O   s   |   }d|j v r(t|jd }nd}d|j v rpd|j v rp|jd }|jd }t|j|||}nt|jd d |}|  t	j
j|_|  tddS )Nr,   Fr*   r+      r   )rS   query_paramskeysjsonloadsr4   sidapply_asyncr3   
SyncStatusSYNCINGsync_statussaver   )	r>   rH   rX   rY   rZ   Zis_add_paramr*   r+   taskrA   rA   rB   rD   a   s    


z ReviewSourceViewSet.sync_reviewsc                 C   sn   |j d ur|j jn|jd }|jjtjdjddd	 }|d urZt
 |_|  n|j|_|  d S )Ncompany)history_change_reason~)history_type-history_date)rZ   rr   validated_datarV   excluder   CLAIMEDrK   order_byfirstr	   nowhistory_daterp   phone)r>   r[   rr   rV   rA   rA   rB   add_changelog   s    


z!ReviewSourceViewSet.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rk   cal_average_rating   cal_reviews_countaverage_ratingreviews_count)r   objectsrK   r9   r   with_avg_ratingvalueswith_reviews_count)r>   
company_idrA   rA   rB   update_company   s    z"ReviewSourceViewSet.update_companyc                 C   s,   |  | |  |jd j}| | d S Nrr   r   rp   rw   rk   r   r>   r[   r   rA   rA   rB   perform_update   s    
z"ReviewSourceViewSet.perform_updatec                 C   s,   |  | |  |jd j}| | d S r   r   r   rA   rA   rB   perform_create   s    
z"ReviewSourceViewSet.perform_createc                 C   s6   |   }|j}t|}| | |  | | d S )N)rS   r   r/   r   deleter   )r>   pkrZ   r   r[   rA   rA   rB   perform_destroy   s    
z#ReviewSourceViewSet.perform_destroy)__name__
__module____qualname__r3   r   select_relatedallrP   r/   serializer_classr   permission_classesr!   pagination_classr<   rG   r   r^   r   r   r*   r+   r,   r   rD   r   r   r   r   r   __classcell__rA   rA   r?   rB   r6   =   s    	r6   c                       s.   e Zd Zej ZeZe	Z
 fddZ  ZS )BasePlatformViewSetc              	      s2  t   }| jjjs2|jtjjtjj	tjj
gd}|jtttjjtddttjj
tddttjjtddttjj	tddtdt dd	d
ddd}| jdkr.| jj}|tjd  }r|j|d}|tjd d ur|tjd d}|j|d}|tjd  }r.|jtt|d}|S )N)Z
status__inr   )r   then         c   )defaultoutput_field)status_sort_pointz-is_populardisplay_orderr   namelist)name__icontains,)
is_popular)r;   rG   rH   rI   rJ   rK   r2   rL   rM   rN   rO   annotater   r   r   INACTIVEr   rz   r   rf   getr(   r   r)   splitr'   boolr   )r>   rP   rf   name_filterZstatus_filterZis_popular_filterr?   rA   rB   rG      sX    


z BasePlatformViewSet.get_queryset)r   r   r   r2   r   r   rP   r-   r   r   r   rG   r   rA   rA   r?   rB   r      s   
r   r   )r`   )r   	decoratorc                       s"   e Zd ZegZ fddZ  ZS )PlatformViewSetc                    s   | j dkrtS t  S )Nr8   )r   r0   r;   r<   r=   r?   rA   rB   r<      s    
z$PlatformViewSet.get_serializer_class)r   r   r   r   r   r<   r   rA   rA   r?   rB   r      s   r   c                       sL   e Zd ZegZdd Zed fddZeddgde	d	d
dZ
  ZS )AdminPlatformViewSetc                 O   sP  |   }| | t|dr|j r|j dkrtjj|jd	d
 }|D ]d}|d }tjj|djttjj|d 	dd d ttjj|d 	dd d d qRtd	d
itjdS zf|jjj}tjj|djttjj|d 	dd d ttjj|d 	dd d d W n   Y n0 td	ditjdS )Nreview_sourcesr   platform_idr   r   r   r   r   Z	is_deleteFr   T)rS   r   hasattrr   countr3   r   rK   rk   r   distinctr   r9   r   r   r   r   r   HTTP_204_NO_CONTENTrr   )r>   rH   rX   rY   rZ   Ztempstempr   rA   rA   rB   r:     s:    


zAdminPlatformViewSet.destroy)rZ   c                    s8   t |dr(|j r(tjj|_|  nt 	| d S )Nr   )
r   r   r   r2   rL   r   r   rp   r;   r   )r>   rZ   r?   rA   rB   r   %  s    

z$AdminPlatformViewSet.perform_destroyTGET)rb   rc   rQ   c                 O   st   |   }tjj|d }tjdj|jd }tjdj	t
ddj|jdd }tt|j|||dS )	Nr   rk   )Zsource__platform_idZreview_sources__reviews)r   r   )Zreview_sources__platform_idr   )r7   review_sources_countr   company_no_reviews_count)rS   r3   r   rK   r   r   onlyrk   r   r   r   r   r-   rU   )r>   rH   rX   rY   r7   r   r   r   rA   rA   rB   about,  s"    zAdminPlatformViewSet.about)r   r   r   r   r   r:   r2   r   r   r   r   r   rA   rA   r?   rB   r      s   r   )r`   filter_inspectorsc                   @   s2   e Zd ZeZefZeZe	Z
dZdd Zdd ZdS )ReviewSourceHistoryViewSetrR   c                 C   s`   t jt jt jg}tjddj|dd}| j	j
}|js\|jd ur\|j|jjdddd}|S )	Nr7   rr   )history_type__inrv   rk   T)flat)id__in)r   CREATEDCHANGEDDELETEDr3   rV   prefetch_relatedrK   rz   rH   rI   rJ   	companiesvalues_list)r>   typesrP   rI   rA   rA   rB   rG   Q  s     z'ReviewSourceHistoryViewSet.get_querysetc           
      O   sp   |   }| |}|j}|j|d ur0| |jnd d}|d ur\||}dd |jD }	nd }	|	|d< t|S )N)selected_recordprevious_recordc                 S   s   i | ]}|j |j|jd qS ))oldnew)fieldr   r   ).0changerA   rA   rB   
<dictcomp>r  s
   z7ReviewSourceHistoryViewSet.retrieve.<locals>.<dictcomp>diff)rS   rT   prev_recordrU   diff_againstchangesr   )
r>   rH   rX   rY   rZ   r[   r   responsedeltar   rA   rA   rB   r^   d  s     

z#ReviewSourceHistoryViewSet.retrieveN)r   r   r   r.   r   r   r   r    r   r   filterset_classlookup_fieldrG   r^   rA   rA   rA   rB   r   C  s   r   )Odistutils.utilr   django.db.modelsr   r   r   r   r   r   django.utilsr	   django.utils.decoratorsr
   Zdrf_yasg.utilsr   r   rest_frameworkr   rest_framework.decoratorsr   rest_framework.mixinsr   r   rest_framework.permissionsr   r   r   rest_framework.requestr   rest_framework.responser   rest_framework.viewsetsr   r   r   &verify_trusted.companies.history_typesr   r   Zverify_trusted.companies.modelsr   r   Z"verify_trusted.reviews.api.filtersr   Z&verify_trusted.reviews.api.paginationsr   r    r!   rh   Z!verify_trusted.reviews.api.paramsr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   &verify_trusted.reviews.api.serializersr-   r.   r/   r0   r1   verify_trusted.reviews.modelsr2   r3   Zverify_trusted.reviews.tasksr4   $verify_trusted.utils.swagger_schemasr5   history_search_paramsr6   r   r   r   r   rA   rA   rA   rB   <module>   sn    4	s8
@