a
     ld""                     @   s   d dl 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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 G dd deZG dd deZ dS )    N)date)settings)model_to_dict)render)IsAuthenticatedOrReadOnly)Request)Response)ModelViewSet)CompanyReviewSubscription)SealWidget   )CompanySerializer)Platform   )SealSerializerWidgetSerializerc                       sv   e Zd ZeZej Ze	gZ
edd Zedd Z fddZeddd	Zed fd
dZedddZ  ZS )WidgetViewSetc                 C   s   ddd}| | dS )Nzslider-light.htmlzgrid-light.html      zlist-light.htmlget	layout_idZswitcher r   C/var/www/html/Ranjet/backend/verify_trusted/widgets/api/viewsets.pyget_template_light   s    z WidgetViewSet.get_template_lightc                 C   s   ddd}| | dS )Nzslider-dark.htmlzgrid-dark.htmlr   zlist-dark.htmlr   r   r   r   r   get_template_dark!   s    zWidgetViewSet.get_template_darkc                    sH   t jj| jjd d}t|dkr.tddiS t j|g|R i |S )Ncompany
company_idr   widgetz Cannot create more than 1 widget)	r   objectsfilterrequestdatalenr   supercreate)selfr'   argskwargs
old_widget	__class__r   r   r+   )   s    zWidgetViewSet.creater'   c                 O   s  |   }|jdkr| |jn
| |j}|jd ur:|jnd}|jjtj	j
dd}|jtjjkrt|d}t|t|}t||d | }n@|jtjjkrt|ddd | }nt|ddd | }|jj}	tj j|	d }
t|
j}d	}d	}|d
 d ur|d
 D ]}|d }|d tj	j
tj	jfv rfd| v rf|d d urf||d 7 }d| v r|d d ur||d k r|d }q||d< tjj|	d }d}|d urt |jj!o|j"t#$ k}t%|||||t&j't&j(||ddS )Nzlight-background   T)source__platform__status	is_activedisplay_order-id-ratingidr   review_sourcesplatformstatusreviews_countaverage_ratingr"   F)reviews_datareviewsr!   client_name
static_urlis_visibilityr?   context))
get_objectset_idr   r   r    number_of_reviewrA   r&   r   StatusACTIVEorder_byr   OrderByRANDOMlistminr)   randomsampleNEWERr!   r:   r
   r%   with_reviews_countfirstr   r(   HIDE_REVIEWSkeysr   boolis_verifieddue_dater   todayr   r   CLIENT_NAMEAWS_S3_CUSTOM_DOMAIN)r,   r'   r-   r.   instancetemplate_namerI   rA   Zrandom_itemsr#   get_companyr!   review_countZtop_average_ratingreview_sourcesource_platformsubscriptionrD   r   r   r   retrieve/   st    
	


zWidgetViewSet.retrievec           
         s`   t   }| jd }t|j|ddd}|jd }|d }dd |D }	|	|jd d< t|jS )	Nr#   r"   T)manyr   rA   c                 S   s*   g | ]"}|d  d d t jjfv r|qS )sourcer<   r=   )r   rJ   rK   ).0dr   r   r   
<listcomp>z       z,WidgetViewSet.get_widget.<locals>.<listcomp>)r*   get_querysetr.   r   r&   r(   r   )
r,   r'   r-   r.   querysetr#   
serializerr(   Zdata_reviewZfilter_datar0   r   r   
get_widgett   s    


zWidgetViewSet.get_widgetc                 O   s  | j d }tjj|tjjdddd d }tj	 
 j|d }t|j}g }|D ]H}	t|	}
|	jjjszd |
d< n|	jjjj|
d< |	jjj|
d< ||
 qZd	}d	}g }|d
 d ur|d
 D ]V}|d d ur|d d ur|d }|d tjjtjjfv r||d 7 }||d  qt|d	kr>t|t| }n0t|d	krnt|}tdd |D t| }||d|d}t|S )Nr#   T)source__company_idr4   r5   r8   r3   r9   r<   platform_namer   r;   r>   r=   r?   c                 S   s   g | ]}|d  qS )ratingr   )rh   ir   r   r   rj      rk   z&WidgetViewSet.demo.<locals>.<listcomp>)r>   r?   )r!   rA   )r.   r   r%   r&   r   rJ   rK   rL   r
   rT   with_avg_ratingrU   r   r(   r   rg   r<   logourlnameappendrV   r)   sumr   )r,   r'   r-   r.   r#   rA   r`   r!   r@   reviewr(   ra   r?   ratingsrb   rc   response_datar   r   r   demo~   sX    



zWidgetViewSet.demo)__name__
__module____qualname__r   serializer_classr   r%   allrm   r   permission_classesstaticmethodr   r    r+   r   re   ro   r}   __classcell__r   r   r0   r   r      s   


E
r   c                       sD   e Zd ZeZej Ze	gZ
edddZed fddZ  ZS )SealViewSetr2   c              	   O   sj   |   }d}tjj|jd }|d urBt|jjo>|jt	
 k}d}t||||j|jjtjtjddS )NF)r!   zseal_template.html)rD   	seal_typerv   rB   rC   rE   )rG   r   r%   r&   r!   rU   rX   rY   rZ   r   r[   r   r   rv   r   r\   r]   )r,   r'   r-   r.   r^   rD   rd   r_   r   r   r   re      s$    zSealViewSet.retrievec                    s8   t   }| jd }t|j|dd }t|jS )Nr#   r"   r7   )	r*   rl   r.   r   r&   rL   rU   r   r(   )r,   r'   r-   r.   rm   r#   rn   r0   r   r   get_seal   s    

zSealViewSet.get_seal)r~   r   r   r   r   r   r%   r   rm   r   r   r   re   r   r   r   r   r0   r   r      s
   
r   )!rQ   datetimer   django.confr   django.forms.modelsr   django.shortcutsr   rest_framework.permissionsr   rest_framework.requestr   rest_framework.responser   rest_framework.viewsetsr	   Zverify_trusted.companies.modelsr
   r   r   Zverify_trusted.widgets.modelsr   r   Zcompanies.api.serializersr   Zreviews.modelsr   serializersr   r   r   r   r   r   r   r   <module>   s     