o
    g,+                     @   sN  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 G dd	 d	ejZd dl mZ ddl
mZmZ G d
d dejZG dd dejZG dd dejZG dd dejZG dd deZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZdS )    )serializers)	Developer)PageNumberPagination)Q)ceil   )r   DeveloperTranslatec                   @   s   e Zd ZG dd dZdS )DeveloperSerializerc                   @   s   e Zd ZeZddgZdS )zDeveloperSerializer.MetanameslugN)__name__
__module____qualname__r   modelfields r   r   6/var/www/Entralon-Web-Backend/developer/serializers.pyMeta       r   N)r   r   r   r   r   r   r   r   r	   
   s    r	   c                   @   s8   e Zd ZejddZejddZejddZe ZdS )AggregateRatingSerializerAggregateRatingdefault10N)	r   r   r   r   	CharFieldtyperating_valuebest_ratingrating_countr   r   r   r   r      s
    r   c                   @   sl   e Zd Ze Ze Ze Ze Ze Z	e Z
e Ze Ze Ze Ze Ze ZdS )MetaTagsSerializerN)r   r   r   r   r   titledescriptionkeywordsog_titleog_descriptionog_imageog_typetwitter_cardtwitter_titletwitter_descriptiontwitter_imagecanonical_urlr   r   r   r   r      s    r   c                   @   sP   e Zd Ze Ze Ze Ze	 Z
e Ze Ze ZG dd dZdS )DeveloperTranslateSerializerc                   @      e Zd ZeZg dZdS )!DeveloperTranslateSerializer.Meta)idr
   r   property_numweb_addressis_featuredsummaryr!   imagerate
created_atdevelopments
micro_data	meta_tagsNr   r   r   r   r   r   r   r   r   r   r   1   r   r   N)r   r   r   r   r   r1   IntegerFieldr5   r0   BooleanFieldr2   r4   	JSONFieldr8   r   r9   r   r   r   r   r   r,   '   s    r,   c                   @   s,   e Zd ZeddZe Ze Ze	 Z
dS )FilterDeveloperSerializerTmanyN)r   r   r   r,   noder   r=   	page_infor8   r   r9   r   r   r   r   r>   8   s
    

r>   c                   @   s   e Zd ZdZdZdZdS )DeveloperPagination
   	page_size2   N)r   r   r   rE   page_size_query_parammax_page_sizer   r   r   r   rC   E   s    rC   c                   @   sp   e Zd ZdZe Ze Ze Ze Z	e Z
e Ze Ze Ze Ze Ze Ze ZdS )r   zSEO Meta Tags SerializerN)r   r   r   __doc__r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r   r   r   r   r   K   s    c                       sH   e Zd ZejddZejddZejddZe Z fddZ	  Z
S )r   r   r   r   c                    s:   t  |}|jj |d< |jjjddd  |d< |S )Nr   TF	is_active
is_deletedratingCount)superto_representation	developerr5   r7   filtercountselfinstancedata	__class__r   r   rO   a   s   z+AggregateRatingSerializer.to_representation)r   r   r   r   r   r   r   r   rM   rO   __classcell__r   r   rW   r   r   [   s    c                       sN   e Zd ZejddZe Ze Ze Ze Z	e
 Z fddZ  ZS )DeveloperMicroDataSerializerOrganizationr   c                    sR   t  |}|jj|d< |j|d< |jj|d< d|jj |d< t|j|d< |S )Nr
   r!   urlhttps://file.entralon.com/r4   aggregate_rating)	rN   rO   rP   r
   r3   r1   r4   r   rV   rS   rW   r   r   rO   p   s   
z.DeveloperMicroDataSerializer.to_representation)r   r   r   r   r   r   r
   r!   r\   r4   r   r^   rO   rY   r   r   rW   r   rZ   h   s    rZ   c                   @   s   e Zd Ze Ze ZdS )DevelopmentSerializerN)r   r   r   r   	ListFieldrA   	DictFieldrB   r   r   r   r   r_   z   s    r_   c                       s   e Zd ZejddZejddZe Z	ej
ddZe Ze Ze Ze ZG dd dZdd Zd	d
 Zdd Zdd Zdd Z fddZ  ZS )r,   zdeveloper.web_address)sourcezdeveloper.ratezdeveloper.is_featuredc                   @   r-   )r.   )r/   r
   r   r0   r1   r2   r3   r!   r4   r5   r6   developmentNr:   r   r   r   r   r      r   r   c                 C   s   |j jjddd S )NTFrJ   )rP   r7   rQ   rR   rT   objr   r   r   get_property_num   s   z-DeveloperTranslateSerializer.get_property_numc                 C   s   z|j jW S    Y dS )N )rP   r4   rd   r   r   r   	get_image   s   
z&DeveloperTranslateSerializer.get_imagec              	   C   sT   dd|j jd|j d|j j d|j jr|j jjnd|j jr$|j jjndddS )	Nhttps://schema.orgr[   -https://entralon.com/en/developers/developer-r]   PostalAddressrg   @typeaddressLocalityaddressCountry@contextrm   r
   r\   logoaddress)rP   r
   r   r4   citycountrycoderd   r   r   r   get_micro_data   s   
z+DeveloperTranslateSerializer.get_micro_datac                 C   s   |j j d|j d}d}| d|jj d|j j }|j j}|jr)|jd d nd}|j j}|||||d| d	d
||d| |dS )Nz, z&, developer, home builder, real estatezhttps://entralon.com/z/developers/   rg   r]   websitesummary_large_image)r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   )rP   r
   languagerv   r   r3   r4   )rT   re   r"   base_url	canonicalr    r3   r4   r   r   r   get_meta_tags   s&   z*DeveloperTranslateSerializer.get_meta_tagsc                 C   sB  | j d}t|jdd}t|jdd}|jd}|jd}|jdd	}|d
kr1d
}tddtdd@ }|d urF|t|dM }|d urZ|dkrZ|t|dt|dB M }|j|dd|}	|	 }	|		 }
t
|
| }||kry|}|dk rd}d|d |  }|| }||
k }|	|| ||dk|||
|ddS )Nrequestpager   rE   rD   searchfeaturedsort_byz-created_at   T)development__is_activeF)development__is_deleted)development__is_featuredrg   )development__title__icontains))development__translates__title__icontainsdevelopment__is_sold_outdevelopment__completed_dater   )has_next_pagehas_previous_pagecurrent_pagerE   rR   pages_count)rA   rB   )contextgetintquery_paramsr   development_translaterQ   order_bydistinctrR   r   )rT   re   r   r   rE   r   r   r   fqsrR   r   startendr   r   r   r   get_development   sJ   

z,DeveloperTranslateSerializer.get_developmentc                    s:   t  |}|jj|d< |jj|d< d|jj |d< |S )Nr/   r
   z
developer-r   )rN   rO   rP   r/   r
   r   rS   rW   r   r   rO      s
   z.DeveloperTranslateSerializer.to_representation)r   r   r   r   r   r1   r;   r5   SerializerMethodFieldr0   r<   r2   r4   r8   r9   rc   r   rf   rh   rw   r   r   rO   rY   r   r   rW   r   r,      s     +c                   @   s4   e Zd ZeddZe Ze Z	e
 Zdd ZdS )r>   Tr?   c                 C   s   g }|d D ]K}| d|jd|jj d|jj |jj d|jj |jdd|jjd|j d|jj d	|jj	r>|jj	jnd
|jj
rH|jj
jnd
ddd qdd|d}|S )NrA   ListItemzhttps://entralon.com/z/developers/developer-r]   ri   r[   rj   rk   rg   rl   rp   )rm   positionr\   r
   r4   r!   itemItemList)rq   rm   itemListElement)appendr/   r|   rv   rP   r   r
   r4   r3   rt   ru   )rT   re   	item_listr   r8   r   r   r   rw      s2   

z(FilterDeveloperSerializer.get_micro_dataN)r   r   r   r,   rA   r   ra   rB   r   r8   r   r9   rw   r   r   r   r   r>      s    
N)rest_frameworkr   developer.modelsr   rest_framework.paginationr   django.db.modelsr   mathr   modelsr   ModelSerializerr	   
Serializerr   r   r,   r>   rC   rZ   r_   r   r   r   r   <module>   s*    u