o
    g<                     @   s0  d dl mZ d dl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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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ZG dd dejZG dd dejZ G dd dejZ!ej"e!dZ#dS )    )ceilN)DjangoObjectType)Development)LanguageSiteSettings)
PageDetail   )	DeveloperDeveloperTranslate)QCount)settings)Prefetch)cachec                   @   sH   e Zd Zejd dZejddZejddZe Zdd Z	dd Z
dS )AggregateRatingdefault_value10c                 C   s
   | j j S N	developerrateselfinfo r   1/var/www/Entralon-Web-Backend/developer/schema.pyresolve_rating_value   s   
z$AggregateRating.resolve_rating_valuec                 C   s   | j jjddd  S NTF	is_active
is_deletedr   developmentsfiltercountr   r   r   r   resolve_ratingCount   s   z#AggregateRating.resolve_ratingCountN)__name__
__module____qualname__grapheneStringtyperating_valuebest_ratingratingCountr   r&   r   r   r   r   r      s    r   c                   @   sj   e Zd ZejddZe Ze Ze Ze Z	e
eZdd Zdd Zdd Zd	d
 Zdd ZdS )DeveloperMicroDataOrganizationr   c                 C      | j jS r   r   namer   r   r   r   resolve_name%      zDeveloperMicroData.resolve_namec                 C   s   | j S r   )summaryr   r   r   r   resolve_description(   s   z&DeveloperMicroData.resolve_descriptionc                 C   r2   r   r   web_addressr   r   r   r   resolve_url+   r6   zDeveloperMicroData.resolve_urlc                 C      d| j j S )Nhttps://file.entralon.com/r   imager   r   r   r   resolve_image.      z DeveloperMicroData.resolve_imagec                 C   s   | S r   r   r   r   r   r   resolve_aggregate_rating1   s   z+DeveloperMicroData.resolve_aggregate_ratingN)r'   r(   r)   r*   r+   r,   r4   descriptionurlr?   Fieldr   aggregate_ratingr5   r8   r;   r@   rB   r   r   r   r   r0      s    
r0   c                   @   s2   e Zd ZejddZeeZe Z	e Z
dS )DeveloperListingMicroDataItemListr   N)r'   r(   r)   r*   r+   r,   Listr0   itemsnumber_of_itemsitem_list_orderr   r   r   r   rG   5   s
    
rG   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 )MetaTagsTypezSEO Meta Tags SchemaN)r'   r(   r)   __doc__r*   r+   titlerC   keywordsog_titleog_descriptionog_imageog_typetwitter_cardtwitter_titletwitter_descriptiontwitter_imagecanonical_urlr   r   r   r   rM   <   s    rM   c                   @   s   e Zd ZG dd dejZe Ze Z	e Z
e Ze Ze ZeeZejde e e e e dZG dd dZedd Zd	d
ddejfddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!d d! Z"dS )"DeveloperTranslateTypec                   @   s    e Zd ZdZdZdZdZdZdS )z&DeveloperTranslateType.DevelopmentSortrO   z-title
created_at-created_at?N)r'   r(   r)   NAME_ASC	NAME_DESCCREATED_AT_ASCCREATED_AT_DESCRANDOMr   r   r   r   DevelopmentSortM   s    rc   z(development.schema.FilterDevelopmentType)page	page_sizesearchfeaturedsort_byc                   @   s   e Zd ZeZg dZdS )zDeveloperTranslateType.Meta)idr4   slugproperty_numr:   is_featuredr7   rC   r?   r   r[   developmentN)r'   r(   r)   r
   modelfieldsr   r   r   r   Meta^   s    rp   c                 C   s   | ddddddS )Nr   developer__citydeveloper__countrylanguagedeveloper__developmentsdevelopment_translate)select_relatedprefetch_related)clsquerysetr   r   r   r   get_querysetd   s   z#DeveloperTranslateType.get_querysetr   
   Nc                 C   s   |dkrd}t ddt dd@ }|d ur|t |dM }|d ur/|dkr/|t |dt |d	B M }| j|d
d|j}| }| }	t|	| }
||
krO|
}|dk rUd}d|d |  }|| }||	k }||| ||dk|||	|
ddS )N   T)development__is_activeF)development__is_deleted)development__is_featured )development__title__icontains))development__translates__title__icontainsdevelopment__is_sold_outdevelopment__completed_dater   r   has_next_pagehas_previous_pagecurrent_pagere   r%   pages_count)node	page_info)r   ru   r$   order_byvaluedistinctr%   r   )r   r   rd   re   rf   rg   rh   fqsr%   r   startendr   r   r   r   resolve_developmentp   s>   

z*DeveloperTranslateType.resolve_developmentc                 C   r2   r   )r   ri   r   r   r   r   
resolve_id   r6   z!DeveloperTranslateType.resolve_idc                 C   r2   r   r3   r   r   r   r   r5      r6   z#DeveloperTranslateType.resolve_namec                 C   r<   )N
developer-)r   rj   r   r   r   r   resolve_slug   rA   z#DeveloperTranslateType.resolve_slugc                 C   r2   r   r   r   r   r   r   resolve_rate   r6   z#DeveloperTranslateType.resolve_ratec                 C   r2   r   )r   rl   r   r   r   r   resolve_is_featured   r6   z*DeveloperTranslateType.resolve_is_featuredc                 C   s   z| j jW S    Y dS )Nr   r>   r   r   r   r   r@      s   
z$DeveloperTranslateType.resolve_imagec                 C   r2   r   r9   r   r   r   r   resolve_web_address   r6   z*DeveloperTranslateType.resolve_web_addressc                 C   s   | j jjddd S r   r"   r   r   r   r   resolve_property_num   s   z+DeveloperTranslateType.resolve_property_numc              	   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.orgr1   -https://entralon.com/en/developers/developer-r=   PostalAddressr   @typeaddressLocalityaddressCountry@contextr   r4   rD   logoaddress)r   r4   rj   r?   citycountrycoder   r   r   r   resolve_micro_data   s   
z)DeveloperTranslateType.resolve_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/   r   r=   websitesummary_large_imagerO   rC   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   )r   r4   rs   r   rj   r7   r?   )r   r   rP   base_url	canonicalrO   r7   r?   r   r   r   resolve_meta_tags   s&   z(DeveloperTranslateType.resolve_meta_tags)#r'   r(   r)   r*   Enumrc   r+   r:   Intr   rk   Booleanrl   r?   
JSONString
micro_datarE   rM   	meta_tagsrm   rp   classmethodrz   ra   r   r   r5   r   r   r   r@   r   r   r   r   r   r   r   r   rZ   L   s4    

!rZ   c                   @   s:   e Zd ZeeZeeZ	e
 ZeeZdd ZdS )FilterDeveloperTypec                 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 )Nr   ListItemhttps://entralon.com/z/developers/developer-r=   r   r1   r   r   r   r   r   )r   positionrD   r4   r?   rC   itemrH   )r   r   itemListElement)appendri   rs   r   r   rj   r4   r?   r7   r   r   )r   r   	item_listr   r   r   r   r   r      s2   

z&FilterDeveloperType.resolve_micro_dataN)r'   r(   r)   r*   rI   rZ   r   rE   r   r   r   r   rM   r   r   r   r   r   r   r      s    


r   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )DeveloperSortr4   z-namer[   r\   developer__ratez-developer__raterk   z-property_numr]   N)r'   r(   r)   r^   r_   r`   ra   
RATING_ASCRATING_DESCPROPERTY_NUM_ASCPROPERTY_NUM_DESCrb   r   r   r   r   r     s    r   c                   @   s   e Zd Zejee e e e e e e	 e d	Z
ejeejdde dZdddddde	jdfd	d
ZdddZdS )Query)rd   re   rf   rg   r   r   rh   rs   T)required)rj   rs   r   r{   Nenc
                 C   s  d| d| d| d| d| d| d| d|	 }
t |
}|r#|S |dkr)d}tjj|	d }|d u r?tjjdd }tdd|d}|d urQ|t|d	M }|d ure|d
kre|t|dt|dB M }|d urt|d
krt|t|dM }|d ur|d
krt|d}tdtjjdddd}t	j
dddd|djtdd|td dtd
dB |j}| }t|| }||kr|}|dk rd}d|d |  }|| }||k }d|j d}d}d}d
}|r||d
krdnd
 d | 7 }d!| d"}d#| d$}|r||d
krdnd
 d%7 }|d&7 }|d'7 }|r?||d
kr'dnd
 d(| 7 }|d)| d*7 }|d+| d,7 }|rb||d
krJdnd
 d-| 7 }|d)| d.7 }|d+| d/7 }|dkr||d
krodnd
 d0| 7 }|d1| 7 }|d1| 7 }|d
krd2| }||7 }|d37 }d4tj j }||| ||dk||||d5||d6|||d7d8||||d9d:}t |
|t |S );Ndevelopers_query__2   r   r   TF)developer__is_activedeveloper__is_deletedrs   )developer__is_featuredr   )developer__name__icontains)&developer__translates__name__icontains)developer__city__slug)developer__country__slugrt   r   )ry   rs   r   rq   rr   developer__translates)rk   )developer__namer   r   r   z/developers
Developerszlist of Developer on Entralon.&zsearch=zsearch z in Developerszlist of search z in Developer on Entralon.zis_featured=truez is featuredz(list of featured Developers on Entralon.zcountry=z in z countryzlist of developer in z country on Entralon.zcity=z cityz city on Entralon.zpage=z | Page r]   z | Entralonr=   r   z3developer, entralon, building, builder, real estater   r7   r   )r   r   r   )r   getr   objectsr$   firstr   r   r   r
   rv   rw   annotater   excluder   r   r%   r   r   r   default_developer_imageset
CACHE_TIME)rootr   rd   re   rf   rg   r   r   rh   rs   	cache_keycached_resultlangfiltersdevelopments_prefetchr   r%   r   r   r   r   rY   rO   rC   qpr?   outr   r   r   resolve_developers  s   4


$	  
 

	zQuery.resolve_developersc                 C   s   t jj|d }|dd}|d u rt jjdd }tjjt|dt|dB |ddd	 }|d u rOtjd
ddjt|dt|dB dddd }|S )Nr   r   r   r   )developer__slug)developer__translates__slugTF)rs   r   r   rs   r   rt   )language__coder   r   )	r   r   r$   r   replacer
   r   rv   rw   )r   r   rj   rs   r   r   r   r   r   resolve_developer{  s$   zQuery.resolve_developer)r   )r'   r(   r)   r*   rE   r   r   r+   r   r   
developersrZ   r   r   r   r   r   r   r   r   r     s    
gr   )query)$mathr   r*   graphene_djangor   development.modelsr   main.modelsr   r   main.graphene_toolsr   modelsr	   r
   django.db.modelsr   r   django.confr   r   django.core.cacher   r   
ObjectTyper   r0   rG   rM   rZ   r   r   r   r   Schemaschemar   r   r   r   <module>   s,     +{