o
    gV                    @   s:  d dl Z d dlmZ d dlmZ d dlmZ d dl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mZmZmZmZmZmZmZ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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZI d dl
mJZJmZmKZKmLZL ejMZMG dd dejNZOG dd dejNZPG dd dejNZQG dd de	ZRG dd dejNZSG dd de	ZTG d d! d!e	ZUG d"d# d#ejNZVG d$d% d%ejNZWG d&d' d'ejNZXG d(d) d)e	ZYG d*d+ d+e	ZZG d,d- d-ejNZ[G d.d/ d/ejNZ\G d0d1 d1ejNZ]G d2d3 d3ejNZ^G d4d5 d5ejNZ_G d6d7 d7ejNZ`G d8d9 d9ejNZaG d:d; d;ejNZbG d<d= d=ejNZcG d>d? d?ejNZdG d@dA dAejNZeG dBdC dCejNZfG dDdE dEejNZgG dFdG dGejNZhG dHdI dIejNZiG dJdK dKejNZjG dLdM dMejNZkG dNdO dOejNZlG dPdQ dQejNZmG dRdS dSejNZnG dTdU dUejNZoG dVdW dWejNZpG dXdY dYejNZqedZd[d\d] Zrd^d_ ZsG d`da daejNZtG dbdc dce	ZuG ddde dee	ZvG dfdg dge	ZwG dhdi die	ZxG djdk dkeEZyG dldm dmeEZzG dndo doeEZ{G dpdq dqeEZ|G drds dsejNZ}G dtdu duejNZ~G dvdw dwejNZG dxdy dyejNZG dzd{ d{ejNZd|d}d~ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddZG dd dejNZG dd dejNZG dd dejNZG dd dejNZG dd dejNZG dd dejNZG ddÄ dejNZG ddń dejNZG ddǄ dejNZejeedȍZdS )    N)	lru_cache)ceil)settings)DjangoObjectType)QMinMax)	Developer)BuildingTypeTranslate
ChangeRateCurrencyDevelopmentFeatureFeatureTranslateFlatONHAreaONHDistrictONHPostcode
ONHStationONHZonePaymentOptionTranslatePaymentPlanTranslate)CurrencyType)flat_bedroom_type)CityCityTranslateCountryCountryTranslateDistrict
LondonAreaLondonZipState
LondonZonePostCodePublicFacilityRegion   )ContactUsFormErrorLogFormRequestCallBackFormSubscribeNewsletterForm)
PageDetail)	ContactUsErrorLogFaqFaqTranslateFilterElement
FilterListFooterMenuTranslateLanguageRequestCallBackSettingTranslateSiteMapSiteSettingsSubscribeNewsletter)DjangoModelFormMutation)slugify)cache)Countr   FValuec                   @   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)__name__
__module____qualname____doc__grapheneStringtitledescriptionkeywordsog_titleog_descriptionog_imageog_typetwitter_cardtwitter_titletwitter_descriptiontwitter_imagecanonical_url rQ   rQ   ,/var/www/Entralon-Web-Backend/main/schema.pyr>      s    r>   c                   @   (   e Zd Ze Ze ZejddZdS )FlatNodeFdefault_valueN	r?   r@   rA   rC   rD   nameslugBooleanis_selectedrQ   rQ   rQ   rR   rT   '       rT   c                   @   @   e Zd Ze Ze Ze ZejddZ	dd Z
dd ZdS )KeyFeaturesNodeFrU   c                 C      d| d  S )Nkey_feature-feature__slugrQ   selfinforQ   rQ   rR   resolve_slug3      zKeyFeaturesNode.resolve_slugc                 C   
   |  dS )Nfeature__icongetrb   rQ   rQ   rR   resolve_icon6      
zKeyFeaturesNode.resolve_iconN)r?   r@   rA   rC   rD   rX   rY   iconrZ   r[   re   rk   rQ   rQ   rQ   rR   r^   -       r^   c                   @      e Zd ZG dd dZdS )LanguageTypec                   @      e Zd ZeZg dZdS )zLanguageType.Meta)idrX   codeN)r?   r@   rA   r2   modelfieldsrQ   rQ   rQ   rR   Meta;       rv   Nr?   r@   rA   rv   rQ   rQ   rQ   rR   rp   :       rp   c                   @   s$   e Zd Ze Ze Zdd ZdS )FooterMenuTypec                 C      | d S )Nfooter_menu__linkrQ   rb   rQ   rQ   rR   resolve_linkD      zFooterMenuType.resolve_linkN)r?   r@   rA   rC   rD   rX   linkr}   rQ   rQ   rQ   rR   rz   @   s    rz   c                   @   ro   )SettingTypec                   @      e Zd ZeZddgZdS )zSettingType.Metarr   	site_nameN)r?   r@   rA   r6   rt   ru   rQ   rQ   rQ   rR   rv   I   rw   rv   Nrx   rQ   rQ   rQ   rR   r   H   ry   r   c                   @   ro   )SettingTranslateTypec                   @   rq   )zSettingTranslateType.Meta)rr   r   phone_numberemailshort_descriptionrF   addressrulesabout_us
about_us_2privacy_policyterms_of_useabout_us_homehome_seo_textN)r?   r@   rA   r4   rt   ru   rQ   rQ   rQ   rR   rv   O   rw   rv   Nrx   rQ   rQ   rQ   rR   r   N   ry   r   c                   @   sN   e Zd Ze Ze ZeeZ	e
 Zdd Zdd Zdd Zdd ZdS )AboutUsTypec                 C   rg   )Nr   ri   rb   rQ   rQ   rR   <lambda>[      
 zAboutUsType.<lambda>c                 C   rg   )Nr   ri   rb   rQ   rQ   rR   r   \   r   c                 C   v   t d| dd d | dd| dd d d| d ddd| dd d d| d d	| d
 ddS )Nabout usr   ,  rG   https://file.entralon.com/site_settings__main_logowebsitesummary_large_imagehttps://www.entralon.com/language__code/aboutrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   r>   rj   rb   rQ   rQ   rR   r   ^       c                 C   s   ddd|  dd d d|  d d|  d	 d
dd|  d	 d
ddddd|  d dddddddd|  d |  d dddddddddd|  d	 d
dgddS )Nhttps://schema.org	AboutPager   r   r   r   r   r   r   r   WebPage@type@idOrganizationEntralonImageObjectX  <   r   urlwidthheightr   rX   logoPersonr   rX   r   
created_at
updated_atBreadcrumbListListItemr%   r   positionrX   item   r   itemListElement@contextr   rX   rF   imager   mainEntityOfPage	publisherauthordatePublisheddateModified
breadcrumbrj   	isoformatrb   rQ   rQ   rR   r   l   J   N)r?   r@   rA   rC   rD   text_1text_2Fieldr>   	meta_tags
JSONString
micro_dataresolve_text_1resolve_text_2resolve_meta_tagsresolve_micro_datarQ   rQ   rQ   rR   r   U   s    
r   c                   @   s6   e Zd Ze ZeeZe	 Z
dd Zdd ZdS )TermsOfUseTypec                 C   r   )Nterms of user   r   rG   r   r   r   r   r   r   /termsr   r   rb   rQ   rQ   rR   r      r   zTermsOfUseType.<lambda>c                 C   s   ddd|  dd d d|  d d|  d	 d
dd|  d	 d
ddddd|  d dddddddd|  d |  d dddddddddd|  d	 d
dgddS )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r   r   r   r   r   rb   rQ   rQ   rR   r      r   N)r?   r@   rA   rC   rD   r   r   r>   r   r   r   r   r   rQ   rQ   rQ   rR   r      s    
r   c                   @   s6   e Zd Ze ZeeZe	 Z
dd Zdd ZdS )PrivacyPolicyTypec                 C   r   )Nprivacy policyr   r   rG   r   r   r   r   r   r   /privacyr   r   rb   rQ   rQ   rR   r      s   z#PrivacyPolicyType.resolve_meta_tagsc                 C   s   ddd|  dd d d|  d d|  d	 d
dd|  d	 d
dddd|  d dddddddd|  d |  d dddddddddd|  d	 d
dgdddS )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   BreadCrumbListr   r%   r   r   r   )r   r   r   r   r   r   r   r   r   rX   rF   r   r   r   r   rb   rQ   rQ   rR   r      sJ   z$PrivacyPolicyType.resolve_micro_dataN)r?   r@   rA   rC   rD   r   r   r>   r   r   r   r   r   rQ   rQ   rQ   rR   r      s    
r   c                   @   s:   e Zd Ze Ze ZG dd dZdd Zdd Z	dS )FaqTypec                   @   rq   )zFaqType.Metarr   questionanswerN)r?   r@   rA   r-   rt   ru   rQ   rQ   rQ   rR   rv   '  rw   rv   c                 C   (   i }| j  D ]
}|j||jj < q|S N)
translatesallr   languagers   rc   rd   outtrrQ   rQ   rR   resolve_question+     zFaqType.resolve_questionc                 C   r   r   )r   r   r   r   rs   r   rQ   rQ   rR   resolve_answer1  r   zFaqType.resolve_answerN)
r?   r@   rA   rC   r   r   r   rv   r   r   rQ   rQ   rQ   rR   r   $  s    r   c                   @   ro   )FaqTranslateTypec                   @   rq   )zFaqTranslateType.Metar   N)r?   r@   rA   r.   rt   ru   rQ   rQ   rQ   rR   rv   :  rw   rv   Nrx   rQ   rQ   rQ   rR   r   8  s    r   c                   @   s8   e Zd ZeeZe Ze	e
Zdd Zdd ZdS )FaqNodec                 C   sL   t j  }tdddddd|j ddddd|j d| d j dd	S )
Nfaqzfaq, entralon, homesr   r   r   r   r   /faqr   )r6   objectsr   firstr>   	main_logors   rc   rd   ssrQ   rQ   rR   r   E  s   

zFaqNode.resolve_meta_tagsc                 C   s   t j  }ddddd|j d| d j ddd| d j ddd	d
d|j dddddd	dddddd	dddddd| d j ddgdddS )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r   r   r   )r   r   r   r   r   r   )r6   r   r   r   r   rs   r   rQ   rQ   rR   r   W  sH   

zFaqNode.resolve_micro_dataN)r?   r@   rA   rC   r   r>   r   r   r   Listr   noder   r   rQ   rQ   rQ   rR   r   ?  s    

r   c                   @      e Zd Ze Ze ZdS )CoordinatesTypeN)r?   r@   rA   rC   FloatlatlonrQ   rQ   rQ   rR   r         r   c                   @   r]   )AreaNodeFrU   c                 C      d|  d S )N	district-rY   ri   rb   rQ   rQ   rR   re        zAreaNode.resolve_slugc                 C   r   Ncity-
city__slugri   rb   rQ   rQ   rR   resolve_city  r   zAreaNode.resolve_cityNr?   r@   rA   rC   rD   rX   rY   cityrZ   r[   re   r  rQ   rQ   rQ   rR   r     rn   r   c                   @       e Zd ZeeZeeZ	dS )AreaNodeFilterNodeN)
r?   r@   rA   rC   r   r   r   r   r*   	page_inforQ   rQ   rQ   rR   r        
r  c                   @   r]   )LondonAreaNodeFrU   c                 C   r   )Narea-rY   ri   rb   rQ   rQ   rR   re     r   zLondonAreaNode.resolve_slugc                 C   r   r   ri   rb   rQ   rQ   rR   r    r   zLondonAreaNode.resolve_cityNr  rQ   rQ   rQ   rR   r    s    r  c                   @   r]   )LondonZipCodeNodeFrU   c                 C   r   )Nzipcode-rY   ri   rb   rQ   rQ   rR   re     r   zLondonZipCodeNode.resolve_slugc                 C   r   r   ri   rb   rQ   rQ   rR   r    r   zLondonZipCodeNode.resolve_cityNr  rQ   rQ   rQ   rR   r
    rn   r
  c                   @   r  )LondonZipCodeFilterNodeN)
r?   r@   rA   rC   r   r
  r   r   r*   r  rQ   rQ   rQ   rR   r    r  r  c                   @   s8   e Zd Ze Ze Ze ZejddZ	dd Z
dS )LondonZoneNodeFrU   c                 C   r   r   ri   rb   rQ   rQ   rR   r    r   zLondonZoneNode.resolve_cityN)r?   r@   rA   rC   rD   rX   rY   r  rZ   r[   r  rQ   rQ   rQ   rR   r    s    r  c                   @   r   )	PriceNodeN)r?   r@   rA   rC   r   minmaxrQ   rQ   rQ   rR   r    r   r  c                   @   rS   )CompletionDateNodeFrU   NrW   rQ   rQ   rQ   rR   r    r\   r  c                   @   8   e Zd Ze Ze ZejddZdd Z	dd Z
dS )PostCodeNodeFrU   c                 C      | j S r   out_coderb   rQ   rQ   rR   resolve_name     zPostCodeNode.resolve_namec                 C   r  r   r  rb   rQ   rQ   rR   re     r  zPostCodeNode.resolve_slugNr?   r@   rA   rC   rD   rX   rY   rZ   r[   r  re   rQ   rQ   rQ   rR   r    s    r  c                   @   rS   )
RegionNodeFrU   NrW   rQ   rQ   rQ   rR   r    r\   r  c                   @   sX   e Zd Ze Ze Ze Ze Ze Z	ej
ddZdd Zdd Zdd Zd	S )
StationNodeFrU   c                 C   r   )Nstation-rY   ri   rb   rQ   rQ   rR   re     r   zStationNode.resolve_slugc                 C   s   z|  dW S    Y d S )Nrm   ri   rb   rQ   rQ   rR   rk     s   zStationNode.resolve_iconc                 C   s    z	d|  d W S    Y d S r   ri   rb   rQ   rQ   rR   r    s   zStationNode.resolve_cityN)r?   r@   rA   rC   rD   rX   rY   r  districtrm   rZ   r[   re   rk   r  rQ   rQ   rQ   rR   r    s    r  c                   @   r  )StationFilterNodeN)
r?   r@   rA   rC   r   r  r   r   r*   r  rQ   rQ   rQ   rR   r    r  r  c                   @   rS   )BedRoomNodeFrU   NrW   rQ   rQ   rQ   rR   r    r\   r  c                   @   0   e Zd Ze Ze ZejddZdd Z	dS )CityNodeFrU   c                 C   r   r   ri   rb   rQ   rQ   rR   re     r   zCityNode.resolve_slugN
r?   r@   rA   rC   rD   rX   rY   rZ   r[   re   rQ   rQ   rQ   rR   r!    
    r!  c                   @   r   )PaymentOptionNodeFrU   c                 C   r_   )Npay_opt-payment_option__slugrQ   rb   rQ   rQ   rR   re     rf   zPaymentOptionNode.resolve_slugNr"  rQ   rQ   rQ   rR   r$    r#  r$  c                   @   r  )PaymentPlanNodeFrU   c                 C   r{   )NrE   rQ   rb   rQ   rQ   rR   r    r~   zPaymentPlanNode.resolve_namec                 C   r_   )Nz	pay_plan-payment_plan__slugrQ   rb   rQ   rQ   rR   re     rf   zPaymentPlanNode.resolve_slugNr  rQ   rQ   rQ   rR   r'    s    r'  c                   @   r   )BuildingTypeNodeFrU   c                 C   r_   )Nzbuild_type-building_type__slugrQ   rb   rQ   rQ   rR   re   %  rf   zBuildingTypeNode.resolve_slugNr"  rQ   rQ   rQ   rR   r)     r#  r)  c                   @   ,   e Zd Ze Ze Ze Zdd ZdS )DeveloperNodec                 C      d| j  S )N
developer-rY   rb   rQ   rQ   rR   re   /     zDeveloperNode.resolve_slugN)	r?   r@   rA   rC   rD   rX   rY   r   re   rQ   rQ   rQ   rR   r,  )  s
    r,  c                   @   r+  )DevelopmentNodec                 C   r-  )N	property-r/  rb   rQ   rQ   rR   re   8  r0  zDevelopmentNode.resolve_slugN)	r?   r@   rA   rC   rD   rE   rY   r   re   rQ   rQ   rQ   rR   r1  3  s
    r1  c                   @   s\   e Zd ZeeZeeZee	Z
eeZeeZeeZeeZeeZdS )
SearchTypeN)r?   r@   rA   rC   r   r!  r  r,  	developerr1  developmentr   r  r  stationr
  london_zip_coder  london_arear  london_zonerQ   rQ   rQ   rR   r3  <  s    






r3  c                   @   s    e Zd ZeeZeeZdS )FilterSearchTypeN)	r?   r@   rA   rC   r   r3  r   r*   r  rQ   rQ   rQ   rR   r:  G  r  r:  d   )maxsizec                 C   s"   t jj| |djddd }|S )N)from_currency__codeto_currency__coderateTflat)r   r   filtervalues_listr   )from_currencyto_currencyr?  rQ   rQ   rR   _get_conversion_rateL  s   rF  c                 C   s^   g }| D ]"}|d }|d }||kr| | qt||}|r&| ||  q|r-||S d S )Nck_price#development__default_currency__code)appendrF  )pricestarget_currencyagg_func	converted
price_datapricesource_currencyr?  rQ   rQ   rR   _convert_pricesV  s   

rQ  c                   @   sB  e Zd ZeeZeeZe	 Z
e Ze ZeeZeeZeeZeeZeeZeeZeeZeeZeeZee Z!ee"Z#ee$Z%ee&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 Z0dd Z1dd Z2dd Z3dd Z4dd Z5dd Z6dd  Z7d!d" Z8d#S )$DevelopmentFilterTypec                 C   s   |  d}d| d  }|dkr|d| 7 }t |}|r |S |  d}tjj|d|  ddd	dd
d }t||t	 |S )Ncity_keyfilter_cities_r    _Fcities)r   city__developments__isnullcity__inr  rX   r   )
rj   r:   r   r   rB  select_relatedvaluesdistinctset
CACHE_TIME)rc   rd   rS  	cache_keycachedr   rW  rQ   rQ   rR   r  |  s"   


z"DevelopmentFilterType.resolve_cityc                 C      |  d}d| d  }|dkr|d| 7 }t |}|r |S tjdddd	j|  d
ddd}t	||t
 |S )NrS  filter_london_zip_code_r   rU  rV  r  rX   rY   r   rW  rY  )rj   r:   r   r   rZ  r[  rB  order_byr\  r]  r^  )rc   rd   rS  r_  r`  r7  rQ   rQ   rR   resolve_london_zip_code      


z-DevelopmentFilterType.resolve_london_zip_codec                 C   ra  )NrS  filter_london_area_r   rU  rV  r  rX   rY   r   rW  rc  )rj   r:   r   r   rZ  r[  rB  rd  r\  r]  r^  )rc   rd   rS  r_  r`  arearQ   rQ   rR   resolve_london_area  rf  z)DevelopmentFilterType.resolve_london_areac                 C   ra  )NrS  filter_district_r   rU  rV  r  rX   rY   r   rW  rc  )rj   r:   r   r   rZ  r[  rB  rd  r\  r]  r^  )rc   rd   rS  r_  r`  	districtsrQ   rQ   rR   resolve_district  rf  z&DevelopmentFilterType.resolve_districtc                 C   ra  )NrS  filter_london_zone_r   rU  rV  r  rX   rY   r   rW  rc  )rj   r:   r   r   rZ  r[  rB  rd  r\  r]  r^  )rc   rd   rS  r_  r`  zonerQ   rQ   rR   resolve_london_zone  rf  z)DevelopmentFilterType.resolve_london_zonec                 C      |  d}d| d  }|dkr|d| 7 }t |}|r |S | d }| dd}|  d	}| d
krI|d j}|jdkrBd}n|jdkrId}tjj|  d	dddj	t
dd}	t|	|t}
t||
t |
S )NrS  filter_min_price_r   rU  rV  kwargscurrencyGBPrW  r%   r   united-kingdomunited-arab-emiratesAEDdevelopment__city__inbase_price__gtrH  
base_pricerG  )rj   r:   countcountryrY   r   r   rB  r[  annotater   rQ  r  r]  r^  )rc   rd   rS  r_  r`  rr  default_currency_coderW  r~  
min_pricesresultrQ   rQ   rR   resolve_min_price  0   



z'DevelopmentFilterType.resolve_min_pricec                 C   rp  )NrS  filter_max_price_r   rU  rV  rr  rs  rt  rW  r%   r   ru  rv  rw  rx  rH  r{  r|  )rj   r:   r}  r~  rY   r   r   rB  r[  r  r   rQ  r  r]  r^  )rc   rd   rS  r_  r`  rr  r  rW  r~  
max_pricesr  rQ   rQ   rR   resolve_max_price  r  z'DevelopmentFilterType.resolve_max_pricec           	      C   s   |  d}d| d  }|dkr|d| 7 }t |}|r |S dddd	d
}t|| d  dg}tj }ttttj	j
|j|  ddjddd}|D ]}|t|d|  qOt||t |S )NrS  filter_completion_date_r   rU  rV  Ready To Move   آماده سکونت   جاهزة للسكن"   Готовая к переездуenfaarruzcompletion-ready-to-moverW  )completed_at__year__gterY  completed_at__yearTr@  completion-)rj   r:   r  datetimenowsortedr]  listr   r   rB  yearrC  rI  r^  )	rc   rd   rS  r_  r`  r   r   r  lrQ   rQ   rR   resolve_completion_date  s&   


.z-DevelopmentFilterType.resolve_completion_datec                 C      |  d}d| d  }|dkr|d| 7 }t |}|r |S |  d}tjddddj||  d	d
dd}t	||t
 |S )NrS  filter_payment_option_r   rU  rV  payment_optionrX   r&  rW  )r   &payment_option__developments__city__inrY   )rj   r:   r   r   rZ  r[  rB  rd  r\  r]  r^  )rc   rd   rS  r_  r`  r   payment_optionsrQ   rQ   rR   resolve_payment_options     


2z-DevelopmentFilterType.resolve_payment_optionsc                 C   r  )NrS  filter_payment_plan_r   rU  rV  payment_planrE   r(  rW  )r   #payment_plan__development__city__inrY   )rj   r:   r   r   rZ  r[  rB  rd  r\  r]  r^  )rc   rd   rS  r_  r`  r   payment_plansrQ   rQ   rR   resolve_payment_plans"  r  z+DevelopmentFilterType.resolve_payment_plansc                 C   r  )NrS  filter_building_type_r   rU  rV  building_typerX   r*  rW  )r   %building_type__developments__city__inrY   )rj   r:   r
   r   rZ  r[  rB  rd  r\  r]  r^  )rc   rd   rS  r_  r`  r   building_typesrQ   rQ   rR   resolve_building_type/  r  z+DevelopmentFilterType.resolve_building_typec                 C   s   |  d}d| d  }|dkr|d| 7 }t |}|r |S |  d}tjddddd	j||  d
djg dd }t	||t
 |S )NrS  filter_key_features_r   rU  rV  featurerX   ra   rh   rW  )r   4feature__development_features__development__city__in)floorszproperty-typeflats)slug__in)rj   r:   r   r   rZ  r[  rB  excluder\  r]  r^  )rc   rd   rS  r_  r`  r   featuresrQ   rQ   rR   resolve_key_features<  s   


8z*DevelopmentFilterType.resolve_key_featuresc           	      C   s   |  d}d| d  }|dkr|d| 7 }t |}|r |S g }tjj|  ddd }ttt|j	d	d
d}|D ]}|dk rKt
|| d n|}||d| d q>t||t |S )NrS  filter_bedrooms_r   rU  rV  rW  '  )ry  bedrooms_num__ltbedrooms_numTr@  r%   bedroom-)rX   rY   )rj   r:   r   r   rB  r\  r  r]  r  rC  r   rI  r^  )	rc   rd   rS  r_  r`  r   r  r  rX   rQ   rQ   rR   resolve_bedroomsI  s   

z&DevelopmentFilterType.resolve_bedroomsc                 C   s~   |  d}d| d  }|dkr|d| 7 }t |}|r |S tjdddd	j|  d
ddd}t||t	 |S )NrS  filter_station_r   rU  rV  rX   rY   rm   r   rW  rc  )
rj   r:   r   r   r[  rB  rd  r\  r]  r^  )rc   rd   rS  r_  r`  r6  rQ   rQ   rR   resolve_stationZ  s   

,z%DevelopmentFilterType.resolve_stationc                 C      t jj| dd S NrW  rc  )r"   r   rB  rj   r\  rb   rQ   rQ   rR   resolve_post_codef     z'DevelopmentFilterType.resolve_post_codec                 C   r  r  )r$   r   rB  rj   r\  rb   rQ   rQ   rR   resolve_regioni  r  z$DevelopmentFilterType.resolve_regionc                 C   r  )NrW  )developments__city__in)r   r   rB  rj   r\  rb   rQ   rQ   rR   resolve_currencyl  r  z&DevelopmentFilterType.resolve_currencyN)9r?   r@   rA   rC   r   r!  r  r   r  Intr}  r   	min_price	max_pricerT   bedroomsr  completion_dater$  r  r'  r  r)  r  r^   key_featuresr  	post_coder  regionr  r6  r   rs  r
  r7  r  r8  r  r9  r  re  ri  rl  ro  r  r  r  r  r  r  r  r  r  r  r  r  rQ   rQ   rQ   rR   rR  g  sH    














rR  c                   @   ro   )RequestCallBackTypec                   @   rq   )zRequestCallBackType.Meta)rr   
first_name	last_namer   r   messager   dateutm_campaign
utm_sourceutm_content
utm_mediumwhatsapp_chattelegram_chatpage_urlr5  r4  bedroom_numbudgetpurposepayment_methodtime_to_moveN)r?   r@   rA   r3   rt   ru   rQ   rQ   rQ   rR   rv   q  rw   rv   Nrx   rQ   rQ   rQ   rR   r  p  ry   r  c                   @   ro   )ContactUsTypec                   @   rq   )zContactUsType.Meta)rr   rX   r   r   r  N)r?   r@   rA   r+   rt   ru   rQ   rQ   rQ   rR   rv   y  rw   rv   Nrx   rQ   rQ   rQ   rR   r  x  ry   r  c                   @   ro   )SubscribeNewsletterTypec                   @   r   )zSubscribeNewsletterType.Metarr   r   N)r?   r@   rA   r7   rt   ru   rQ   rQ   rQ   rR   rv     rw   rv   Nrx   rQ   rQ   rQ   rR   r  ~  ry   r  c                   @   ro   )ErrorLogTypec                   @   rq   )zErrorLogType.Meta)rr   r   locationtypeerrorN)r?   r@   rA   r,   rt   ru   rQ   rQ   rQ   rR   rv     rw   rv   Nrx   rQ   rQ   rQ   rR   r    ry   r  c                   @   $   e Zd ZeeZG dd dZdS )RequestCallBackMutationc                   @      e Zd ZeZdS )zRequestCallBackMutation.MetaN)r?   r@   rA   r(   
form_classrQ   rQ   rQ   rR   rv         rv   N)r?   r@   rA   rC   r   r  	call_backrv   rQ   rQ   rQ   rR   r        
r  c                   @   r  )ContactUsMutationc                   @   r  )zContactUsMutation.MetaN)r?   r@   rA   r&   r  rQ   rQ   rQ   rR   rv     r  rv   N)r?   r@   rA   rC   r   r  
contact_usrv   rQ   rQ   rQ   rR   r    r  r  c                   @   r  )SubscribeNewsletterMutationc                   @   r  )z SubscribeNewsletterMutation.MetaN)r?   r@   rA   r)   r  rQ   rQ   rQ   rR   rv     r  rv   N)r?   r@   rA   rC   r   r  subscribe_newsletterrv   rQ   rQ   rQ   rR   r    r  r  c                   @   r  )ErrorLogMutationc                   @   r  )zErrorLogMutation.MetaN)r?   r@   rA   r'   r  rQ   rQ   rQ   rR   rv     r  rv   N)r?   r@   rA   rC   r   r  	error_logrv   rQ   rQ   rQ   rR   r    r  r  c                   @   r   )
FilterTypeN)r?   r@   rA   rC   rD   rX   rY   rQ   rQ   rQ   rR   r    r   r  c                   @   sf   e Zd ZeeZeeZeeZeeZ	eeZ
dd Zdd Zdd Zdd Zd	d
 ZdS )SelectedFilterc                 C   &   t jj| d ddd d d S Ndevelopments)locations__developments__in?rX      )r   r   rB  rd  r\  rb   rQ   rQ   rR   rl       &zSelectedFilter.resolve_districtc                 C   r  r  )r    r   rB  rd  r\  rb   rQ   rQ   rR   re    r  z&SelectedFilter.resolve_london_zip_codec                 C   r  r  )r   r   rB  rd  r\  rb   rQ   rQ   rR   ri    r  z"SelectedFilter.resolve_london_areac                 C   r  r  )r!   r   rB  rd  r\  rb   rQ   rQ   rR   ro    r  z"SelectedFilter.resolve_london_zonec                 C   sl   g }t jj| d dd }ttt|jddd}|D ]}|t	t
|| d d|  q|d d	 S )
Nr  r  )development__inr  r  Tr@  r   r  r  )r   r   rB  r\  r  r]  r  rC  rI  r  r   )rc   rd   r   r  r  rQ   rQ   rR   r    s   "zSelectedFilter.resolve_bedroomsN)r?   r@   rA   rC   r   r  r  bedroom_numberr9  r8  r7  rl  re  ri  ro  r  rQ   rQ   rQ   rR   r    s    




r  c                   @   s,   e Zd Ze Ze Ze Ze ZdS )breadcrumbNodeN)	r?   r@   rA   rC   rD   rX   rY   r  r  rQ   rQ   rQ   rR   r    
    r  c                   @   s.   e Zd ZeeZe Ze Z	e Z
dS )PageSeoTypeN)r?   r@   rA   rC   r   r>   r   r   page_micro_databreadcrumb_micro_dataorganization_micro_datarQ   rQ   rQ   rR   r    s
    
r  c                   @   s,   e Zd Ze Ze Ze Ze Z	dS )StatItemN)
r?   r@   rA   rC   r  rr   rD   rX   r}  r   rQ   rQ   rQ   rR   r    r  r  z1 Bedroom Housesz2 Bedroom Housesz3 Bedroom Housesz4 Bedroom HouseszReady to Move HouseszCompleted at 2025zCompleted at 2026zCompleted at 2027
DeveloperszPrice Up to 500K {currency}zPrice Up to 1M {currency}zPrice Up to 1.5M {currency}zPrice Up to 2M {currency}z	in {city})1_bedroom_houses2_bedroom_houses3_bedroom_houses4_bedroom_housesready_to_move_housescompletion_2025completion_2026completion_2027developers_in_cityprice_up_to_500kprice_up_to_1mprice_up_to_1_5mprice_up_to_2min_cityu!   خانه‌های یک خوابهu!   خانه‌های دو خوابهu!   خانه‌های سه خوابهu%   خانه‌های چهار خوابهu(   خانه‌های آماده تحویل u+   خانه های تکمیل شده در 2025u+   خانه های تکمیل شده در 2026u+   خانه های تکمیل شده در 2027u   سازندگانu/   خانه‌ها تا ۵۰۰ هزار {currency}u1   خانه‌ها تا یک میلیون {currency}u;   خانه‌ها تا یک میلیون و نیم {currency}u1   خانه‌ها تا دو میلیون {currency}u   در {city}u    منازل بغرفة واحدةu   منازل بغرفتي نومu%   منازل بغرفة ثلاث نومu%   منازل بغرفة اربع نومu$   منازل جاهزة للتحريكu!   منازل مكتملة في 2025u!   منازل مكتملة في 2026u!   منازل مكتملة في 2027u   المطورونu+   المنازل حتى 500 ألف {currency}u+   المنازل حتى مليون {currency}u4   المنازل حتى مليون ونصف {currency}u/   المنازل حتى مليونين {currency}u   في {city}u'   Дома с одной спальнейu)   Дома с двумя спальнямиu)   Дома с тремя спальнямиu/   Дома с четырьмя спальнямиu   Готовые домаu   Завершение в 2025u   Завершение в 2026u   Завершение в 2027u   Разработчикиu'   Дома до 500 тысяч {currency}u)   Дома до миллиона {currency}uP   Дома до миллиона и полутора миллионов {currency}u4   Дома до двух миллионов {currency}u	   В {city}r  c                   @   s   e Zd ZeeZdd ZdS )DevelopmentStatsNodec                 C   s  |  d}|  d}|  d}g }d}|D ]}|j}|j}	|	d u r6|jdkr/tjj dd}	ntjj dd}	td	|d
d	d}
z
|jj |dj}W n   |j}Y d|j	 d|j }t
j|
jtdtdddtdtdddtdtdddtdtdddtdtd	ddtdtdddtdtdddtdtdddtdtddddtdtddddtdtddddtdtdd ddd!}t |j	td" }tjj|d# }|r|d$ j|d#}nd%}||d |d& | |d' | d(d)|d |d* | |d+ | d,d)|d |d- | |d. | d/d)|d |d0 | |d1 | d2d)|d3 |d4 | |d4 | d5d)|d6 |d7 | |d7 | d8d)|d9 |d: | |d: | d;d)|d< |d= j|	jd>| |d= | d?d)|d@ |dA j|	jd>| |dA | dBd)|dC |dD j|	jd>| |dD | dEd)|dF |dG j|	jd>| |dG | dHd)|dI |dJ | |dKd)g7 }t|}q|S )LNr   rW  include_cityr   londonrt  rs   rw  TF)	is_activer  
is_deleteddeveloper__is_activer   //city-rr   r%   )flats__bedrooms_num)rB  r         )is_ready_to_movei  )r  i  i  i i  )flats__base_price__gteflats__base_price__ltei@B i` i )one_bedroom_housestwo_bedroom_housesthree_bedroom_housesfour_bedroom_housesr  r	  r
  r  r  r  r  r  r  r  r  rU  r  r"  z
/bedroom-1)rr   rX   r}  r   r  r#  z
/bedroom-2r  r$  z
/bedroom-3r  r%  z
/bedroom-4   r  z/completion-ready-to-move   r	  z/completion-2025   r
  z/completion-2026   r  )rs  z ?priceMin=400000&priceMax=500000	   r  z!?priceMin=400000&priceMax=1000000
   r  z!?priceMin=400000&priceMax=1500000   r  z"/?priceMin=400000&priceMax=2000000   r  z/developers)rj   r~  default_currencyrY   r   r   r   r   rX   rs   r   rB  	aggregater;   TRANSLATIONSr	   r}  formatsymbollen)rc   rd   r   rW  r  dynamic_statsnr  r~  rs  f	city_namecity_urlstatstranslations
developersrQ   rQ   rR   resolve_stats!  s   













Jz"DevelopmentStatsNode.resolve_statsN)r?   r@   rA   rC   r   r  r:  r=  rQ   rQ   rQ   rR   r    s    
r  c                   @   s$   e Zd Ze Ze Ze ZdS )FilterItemNodeN)r?   r@   rA   rC   rD   rX   rY   r  rQ   rQ   rQ   rR   r>    s    r>  c                   @   s   e Zd ZeeZeeZeeZeeZ	eeZ
eeZeeZeeZeeZeeZeeZeeZe 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d Zdd Z dd Z!dS )FilterListNodec                 C   
   | j  S r   )r6  r   rb   rQ   rQ   rR   r    rl   zFilterListNode.resolve_stationc                 C   r@  r   )r  r   rb   rQ   rQ   rR   rl    rl   zFilterListNode.resolve_districtc                 C   r@  r   )postcoder   rb   rQ   rQ   rR   resolve_postcode  rl   zFilterListNode.resolve_postcodec                 C   r@  r   )bedroomr   rb   rQ   rQ   rR   resolve_bedroom  rl   zFilterListNode.resolve_bedroomc                 C   r@  r   )rh  r   rb   rQ   rQ   rR   resolve_area  rl   zFilterListNode.resolve_areac                 C   r@  r   )rn  r   rb   rQ   rQ   rR   resolve_zone  rl   zFilterListNode.resolve_zonec                 C   r@  r   )key_featurer   rb   rQ   rQ   rR   resolve_key_feature  rl   z"FilterListNode.resolve_key_featurec                 C   r@  r   )r  r   rb   rQ   rQ   rR   resolve_payment_option  rl   z%FilterListNode.resolve_payment_optionc                 C   r@  r   )r  r   rb   rQ   rQ   rR   r    rl   z&FilterListNode.resolve_completion_datec                 C   r@  r   )r  r   rb   rQ   rQ   rR   r    rl   z$FilterListNode.resolve_building_typec                 C   r  r   )r  rb   rQ   rQ   rR   r    r  z FilterListNode.resolve_min_pricec                 C   r  r   )r  rb   rQ   rQ   rR   r    r  z FilterListNode.resolve_max_pricec                 C   s<   | j j}|j}|d u r|jdkrdnd}tjj|d}|jS )Nru  rt  UAEr  )r  r~  r/  rY   r   r   rj   r3  )rc   rd   r~  rs  rs   rQ   rQ   rR   r    s   zFilterListNode.resolve_currencyN)"r?   r@   rA   rC   r   r>  r6  r  rA  rC  rh  rn  rG  r  r  r  r   r  r  rD   rs  r  rl  rB  rD  rE  rF  rH  rI  r  r  r  r  r  rQ   rQ   rQ   rR   r?    s6    











r?  c                   @   sD   e Zd Ze Ze Ze Ze Z	dd Z
dd Zdd ZdS )SiteMapNodec                 C   r{   )Nobj_namerQ   rb   rQ   rQ   rR   r    r~   zSiteMapNode.resolve_namec                 C      | d  | d  S )Npre_slugrY   rQ   rb   rQ   rQ   rR   re        zSiteMapNode.resolve_slugc                 C   rM  )Npre_linkrY   rQ   rb   rQ   rQ   rR   r}     rO  zSiteMapNode.resolve_linkN)r?   r@   rA   rC   IDrr   rD   rX   rY   r   r  re   r}   rQ   rQ   rQ   rR   rK    s    rK  c                   @   s   e Zd ZeeZeeZeeZeeZ	eeZ
eeZeeZeeZeeZee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 )SiteMapTypec                 C   sX   | d }d}d|j  d| }tjjtdt|t|dddd	d
djddd}|S )Nr   r.  r  z/developers/rX   rL  rP  rN  rr   rL  rP  rN  rY   TFr  r  )rs   r	   r   r  r<   r=   r[  rB  )rc   rd   r   rN  rP  r4  rQ   rQ   rR   resolve_developer  
   6zSiteMapType.resolve_developerc                 C   sX   | d }d}d|j  d| }tjjtdt|t|ddddd	d
jddd}|S )Nr   r2  r  rE   rS  rr   rL  rP  rN  rY   TFrT  )rs   r   r   r  r<   r=   r[  rB  )rc   rd   r   rN  rP  r5  rQ   rQ   rR   resolve_development  rV  zSiteMapType.resolve_developmentc                 C   s\   | d }d}d }d|j  d| }tjjtdt|t|ddddd	d
jd|d}|S )Nr   r   r  rX   rS  rr   rL  rP  rN  rY   T)city__is_featuredr   )rs   r   r   r  r<   r=   r[  rB  )rc   rd   r   rN  rW  rP  rQ   rQ   rR   r    s   6zSiteMapType.resolve_cityc                 C      | d }d}d }t jjddD ]3}d|j d|j d| }tjjtdt|t|d	d	d
dddj|d}|r@|
|}q|}q|S )Nr   r  Tis_featuredr  r  rX   rS  rr   rL  rP  rN  rY   r&  )r   r   rB  rs   rY   r   r  r<   r=   r[  union)rc   rd   r   rN  stationsr  rP  r6  rQ   rQ   rR   r       4zSiteMapType.resolve_stationc                 C   rY  )Nr   r   TrZ  r  r  rX   rS  rr   rL  rP  rN  rY   r&  )r   r   rB  rs   rY   r   r  r<   r=   r[  r\  )rc   rd   r   rN  rk  r  rP  r  rQ   rQ   rR   rl    r^  zSiteMapType.resolve_districtc                 C   rY  )Nr   r  TrZ  r  r  rX   rS  rr   rL  rP  rN  rY   r&  )r   r   rB  rs   rY   r   r  r<   r=   r[  r\  )rc   rd   r   rN  	zip_codesr  rP  zip_coderQ   rQ   rR   resolve_zip_code"  r^  zSiteMapType.resolve_zip_codec                 C   rY  )Nr   r	  TrZ  r  r  rX   rS  rr   rL  rP  rN  rY   r&  )r   r   rB  rs   rY   r   r  r<   r=   r[  r\  )rc   rd   r   rN  areasr  rP  rh  rQ   rQ   rR   rE  -  r^  zSiteMapType.resolve_areac                 C   rY  )Nr   rU  TrZ  r  r  rX   rS  rr   rL  rP  rN  rY   r&  )r   r   rB  rs   rY   r   r  r<   r=   r[  r\  )rc   rd   r   rN  zonesr  rP  rn  rQ   rQ   rR   rF  8  r^  zSiteMapType.resolve_zonec                 C      | d }d}d }t jjddD ]3}d|j d|j d| }tjjtdt|t|d	d	d
dddj|d}|r@|
|}q|}q|S )Nr   r`   TrZ  r  r  rX   rS  rr   rL  rP  rN  rY   r  )r   r   rB  rs   rY   r   r  r<   r=   r[  r\  )rc   rd   r   rN  r  r  rP  rG  rQ   rQ   rR   rH  C  r^  zSiteMapType.resolve_key_featurec                 C   rd  )Nr   r%  TrZ  r  r  rX   rS  rr   rL  rP  rN  rY   r  )r   r   rB  rs   rY   r   r  r<   r=   r[  r\  )rc   rd   r   rN  r  r  rP  r  rQ   rQ   rR   rI  N  r^  z"SiteMapType.resolve_payment_optionN)r?   r@   rA   rC   r   rK  r4  r5  r  r6  r  r`  rh  rn  rG  r  rU  rW  r  r  rl  ra  rE  rF  rH  rI  rQ   rQ   rQ   rR   rR    s*    









rR  c                   @   s4   e Zd Ze Ze Ze Ze Z	dd Z
dS )SiteMapModeTypec                 C   s   | j j S r   )r  rE   rb   rQ   rQ   rR   resolve_typea  r0  zSiteMapModeType.resolve_typeN)r?   r@   rA   rC   rQ  rr   rD   r  rX   r   rf  rQ   rQ   rQ   rR   re  Z  s    re  c                   @   r  )SiteMapPageNodeN)
r?   r@   rA   rC   r   re  r   r   r*   r  rQ   rQ   rQ   rR   rg  d  r  rg  c                   @   sT  e Zd Zejee dZejeejdde	 e	 e dZ
ejee eeje e e e eejeejeejeejeejdZejee e dZejee dZejee e	 e	 dZejee e	 e	 dZejee e eeje e	 e	 e dZejee e e e	 e	 e d	Zejee e e e	 e	 e d	Zejee dZeeZeje e dZ!eje"eeje d
Z#eje$eeje d
Z%eje&e dZ'eje(e dZ)eje*e dZ+eje e dZ,eje e dZ-eje.e e dZ/d;ddZ0d<ddZ1d;ddZ2d;ddZ3d;ddZ4d;ddZ5d=ddZ6d;ddZ7d>d"d#Z8d>d$d%Z9d>d&d'Z:d;d(d)Z;d;d*d+Z<d;d,d-Z=d;d.d/Z>d;d0d1Z?d;d2d3Z@d;d4d5ZAd;d6d7ZBd?d9d:ZCd8S )@Queryr  T)required)searchpage	page_sizer   )r  r4  ready_to_move	availabler   rs  r  r7  r8  r9  r6  )r   r  )r   rk  rl  )r  rj  r5  limitrk  rl  r   )r  rj  ro  rk  rl  r   )rY   r   )r  r   r  c                 C   s4   t jj|d }|d u rt jjdd }d|iS )Nr  r  r   )r2   r   rB  r   rootrd   r   langrQ   rQ   rR   resolve_site_map  s   zQuery.resolve_site_mapr%     c           	   	   C   s   t jj|d }|d u rt jjdd }|d | }|| }tjddddj|d}||| || k |dk||| t| | d	d
S )Nr  r  r%   rr   rX   r  r   r  has_next_pagehas_previous_pagecurrent_pagerl  r}  pages_countr   r  )r2   r   rB  r   r5   onlyr}  r   )	rq  rd   r   rk  rl  rr  startendqsrQ   rQ   rR   resolve_sitemap  s   

zQuery.resolve_sitemapc              
   C   s   t jj|d }|d u rt jjdd }t|d}|r,|ddd}|t|dM }n|td dM }ztjd	d
ddd	|W S  t
yV } zW Y d }~d S d }~ww )Nr  r  r  r   rU  r%   )r   r&  r   r  r  r  r6  )r2   r   rB  r   r   replacer0   rZ  prefetch_relatedrj   	Exception)rq  rd   r  r   rr  r7  erQ   rQ   rR   resolve_filters_list  s(   
zQuery.resolve_filters_listc                 C   sB   t jj|d }|d u rt jjdd }tjjd|d|dS )Nr  r  T)faq__is_activer   )r   r   )r2   r   rB  r   r.   rp  rQ   rQ   rR   resolve_faq  s   zQuery.resolve_faqc                 C   s&   t ddd}tj| }||dS )NTFrT  )r  r   )r   r   r   rB  r\  )rq  rd   r   r7  r  rQ   rQ   rR   resolve_selected_filters  s   
zQuery.resolve_selected_filtersc                 C   s:   t j }|jj|d }|d u r|jjdd }|S )Nr   r  )r6   r   r   r   rB  rq  rd   r   settingtsrQ   rQ   rR   resolve_general_data  s
   
zQuery.resolve_general_datar'  c              
   C   s  d| d| d| d| }t |}|r|S |dkrd}|dd}|d}g }	|	| |	t|dd dD ]}
|
|}||vrJ|	| q:d  }}|	D ]8}|d urt|d	kr|d u rgt|d
}n|t|d
O }|d u r}t|d
t|dB }qQ|t|d
t|dB O }qQt	j
jtj
j|ddd|ddddd }tj
ddddjt|dt|dB dddd}tj
ddddjt|dt|dB dddd}tj
ddddjt|dt|dB dddd}tj
ddddjt|dt|dB dddd}tj
ddddjt|dt|dB dddd}tj
jt|dt|dB t|dB t|dB ddd }tj
jt|dt|dB t|dB t|dB dddd }t| | | | | | | | }t|| }||kr|}|d	k rd	}d|d	 |  }|| }||k }||| ||| ||| ||| ||| ||| ||| ||| d||d	k||||d d!}t ||t |S )"Nsearch_data_rV  2   + T)allow_unicode)-rV  rU  r%   )similar_name__icontains)#translates__similar_name__icontainsF)developments__isnulldevelopments__is_active)rY  r   r  r   rX   r   rY   rm   )name__icontains)slug__icontains)r  )translates__name__icontains)translates__slug__icontainsrT  )title__icontains)translates__title__icontains)r  r  r  r   )r  r4  r5  r  r6  r9  r8  r7  ru  rz  )r:   rj   r  splitrI  r9   joinr4  r   r   r   rB  r   rZ  r[  r\  r   rd  r   r   r   r   r	   r   r  r}  r   r]  r^  )rq  rd   rj  rk  rl  r   r_  cached_resultsearch_splitsearch_listr  wfilter_s
filter_t_sqrW  r6  r  r9  London_arear7  r<  r  r}  ry  r|  r}  rv  r  rQ   rQ   rR   resolve_search_data  s   




8:<6







zQuery.resolve_search_datac                 K   s  d }d|v r'| dr'|d dd}||d< |r!|t|dM }nt|d}nd|v rI| drIdd |d D }|rC|t|dM }nft|d}n`d	|v rk| d	rkd
d |d	 D }|re|t|dM }nDt|d}n>d|v r| dr|r|t|d dM }n)t|d d}n!d|v r| drdd |d D }|r|t|dM }nt|d}|rtj| }	ntjjdd}	ddd |	jdddD }
|		ddd|
||d}|S )Nr  r   rU  r/  r  c                 S      g | ]}| d dqS )r   rU  r  .0r   rQ   rQ   rR   
<listcomp>(      z)Query.resolve_filters.<locals>.<listcomp>)onh_districts__slug__inr7  c                 S   r  )r  rU  r  r  rQ   rQ   rR   r  ,  r  )onh_postcodes__slug__inr9  )onh_zone__slug__inr8  c                 S   r  )r	  rU  r  r  rQ   rQ   rR   r  3  r  )onh_area__slug__inTrZ  rV  c                 s   s    | ]}| V  qd S r   rQ   )r  drQ   rQ   rR   	<genexpr>8  s    z(Query.resolve_filters.<locals>.<genexpr>rr   r@  rX   rY   )rW  rS  r   rr  )
rj   r  r   r   r   rB  r\  r  rC  r{  )rq  rd   r   rr  cities_filter
city_slugsdistrict_slugszipcode_slugs
area_slugsrW  rS  r  rQ   rQ   rR   resolve_filters  s<   
zQuery.resolve_filtersFr   c                 K   s  d| d| d| d| }d|v r|d  dd}||7 }t|}	|	r'|	S |dkr-d}d }
tjdddd	d
}i }d|v rE||d
< d|v rO|d |d< d|v rY|d |d< |rc|jdi |}|d	d}|
 }|rt|| }||kr}|}|dk rd}d|d |  }|| }||k }nd}||kr|}|dk rd}d}|}d}||| ||dk||||dd}t||t |S )Nstation_query_rV  r  r   rU  r;  rX   rY   rm   r   r5  developments__slug__inrj  r  r%   r   Fru  rz  rQ   )r  r:   rj   r   r   rZ  r[  rB  rd  r\  r}  r   r]  r^  )rq  rd   ro  rk  rl  r   rr  r_  	city_slugr  r7  r~  filtersr}  ry  r|  r}  rv  r  rQ   rQ   rR   r  B  s`   


zQuery.resolve_stationc                 K   l  d| d| d| d| }d|v r|d  dd}||7 }t|}	|	r'|	S |dkr-d}i }
d|v r7||
d< d|v rA|d |
d	< tjdd
dd}|
rV|jdi |
}|d	d}|
 }|rt|| }||krp|}|dk rvd}d|d |  }|| }||k }nd}||kr|}|dk rd}d}|}d}||| ||dk||||dd}t||t |S )Ndistrict_query_rV  r  r   rU  r;  r   rj  r  rX   rY   r%   r   Fru  rz  rQ   )r  r:   rj   r   r   rZ  r[  rB  rd  r\  r}  r   r]  r^  rq  rd   ro  rk  rl  r   rr  r_  r  r  r  r~  r}  ry  r|  r}  rv  r  rQ   rQ   rR   rl  ~  sZ   


zQuery.resolve_districtc                 K   r  )Nlondon_zip_code_query_rV  r  r   rU  r;  r   rj  r  rX   rY   r%   r   Fru  rz  rQ   )r  r:   rj   r   r   rZ  r[  rB  rd  r\  r}  r   r]  r^  r  rQ   rQ   rR   re    sZ   


zQuery.resolve_london_zip_codec                 C   sx   d| }t |}|r|S tjj|d }|d u r$tjjdd }tjddj|ddd}t 	||t
 |S )	Nfooter_menu_query_r  r  rX   r|   T)r   footer_menu__is_activefooter_menu__priority)r:   rj   r2   r   rB  r   r1   r[  rd  r]  r^  )rq  rd   r   r_  r  rr  r   rQ   rQ   rR   resolve_footer_menu  s   

zQuery.resolve_footer_menuc              
   C   s*  d| }|dd dd |D  7 }t|}|r|S tjj|d }|d u r3tjjdd }g }d|j }d }	|D ]C}
|
d	rlt	jj|

d	d
d|d }	|	d urk||	j|
| d|
 ddd q?|
drtjj|

dd
dd }|d ur||j|
| d|jj d|
 dd	|jj dd q?|
drtjj|
d }|d ur||j|
| d|jj d|
 dd	|jj dd q?|
drtjj|

dd
dd }|d ur||j|
| d|jj d|
 dd	|jj dd q?|
dr;tjj|

dd
dd }|d ur:||j|
| d|jj d|
 dd	|jj dd q?|
drqtjj|

dd
dd }|d urp||j|
| d|jj d|
 d d	|jj d!d q?|
d"rtjj|

d"d
d|d# }|d ur||j|
| d|	j d|
 d$d	|	j d%d q?|
d&rtjj|

d&d
d|d' }|d ur||j|
| d|	j d|
 d(d	|	j d)d q?|
d*rz)t|

d*d
d}|t||jd+|
| d|	j d|
 d,d	|	j d-d W q?   Y q?|
d.rSd/d0d1d2d3}z0zt|

d.d
d}W n	   ||j }Y |||
| d|	j d|
 d4d	|	j d5d W q?   Y q?|
d6rtjj|

d6d
dd }|d ur||j|
| d|
 d7d	|jj d5d q?t|d8d9 d:}t||t |S );Nbreadcrumb_query_rV  r  c                 s       | ]}|V  qd S r   rQ   r  rQ   rQ   rR   r        z+Query.resolve_breadcrumb.<locals>.<genexpr>r  r  https://entralon.com/r   rU  r%   r   r   r  r  r   )rX   rY   r   r  orderr	  r/  r  rh  r  )rX   rY   r   r  r  r  zone-rn  r  r  zipcoder'  r   r  r  r6  r(  r`   ra   r   rG  r)  r%  r&  r   
pay_optionr*  r  rr  rC  r+  r  r  r  r  r  r  
completionr,  r2  propertyc                 S   r{   )Nr  rQ   r  rQ   rQ   rR   r   <      z*Query.resolve_breadcrumb.<locals>.<lambda>key)r  r:   rj   r2   r   rB  r   rs   
startswithr   r  rI  rX   r   r  rY   r!   r   r   r   r   r   intr   r   rE   r  r]  r^  )rq  rd   rY   r   r_  r  rr  r   base_urlr  srh  rn  r  r  r6  rG  r  numr   rX   r5  rQ   rQ   rR   resolve_breadcrumb  s   



"
8
8
8
8
8
4
4@
6
8zQuery.resolve_breadcrumbc           !      C   s  d| }|dd dd |D  7 }t|}|r|S tjj|d }|d u r3tjjdd }tj }z
tjj||d}W n   tjj|dd	}Y g }	d
|j	 }
|	
dd|
 dd |j d|j }|j }|j }d}|
}d }|D ]}|drtjj|ddd|d }|d ur|	
d|j|
 d| dd q{|drtjj|dddd }|d ur|	
d|j|
 d|jj d| dd q{|drtjj|d }|d ur|	
d|j|
 d|jj d| dd q{|dr+tjj|dddd }|d ur*|	
d|j|
 d|jj d| dd q{|drZtjj|dddd }|d urY|	
d|j|
 d|jj d| dd q{|d rtjj|d ddd }|d ur|	
d|j|
 d|jj d| d!d q{|d"rtjj|d"dd|d# }|d ur|	
d|j|
 d|j d| d$d q{|d%rtjj|d%dd|d& }|d ur|	
d|j|
 d|j d| d'd q{|d(rz#t|d(dd}|	
dt||j	d)|
 d|j d| d*d W q{   Y q{|d+rTd,d-d.d/d0}z+zt|d+dd}W n	   ||j	 }Y |	
d| |
 d|j d| d1d W q{   Y q{|d2r}tjj|d2ddd }|d ur}|	
d|j|
 d| d1d q{t |	d3d4 d5}	d6d7|	d8}d6d9||
|d:d;d<d=}d6d>|j d
d?d@|j! dAdBdC|j" |j# |j$ dDdE}||||||dFdG||||dH|||dI} t%|| t& | S )JNpage_seo_query_rV  r  c                 s   r  r   rQ   r  rQ   rQ   rR   r  B  r  z)Query.resolve_page_seo.<locals>.<genexpr>r  r  )site_settingsr   )r  r   r  r   Homer%   )r   rX   r   r   z | z%https://file.entralon.com/favicon.icor   rU  r  r  r  r	  r/  r  r  r  r'  r  r(  r   r)  r  r*  r`   r  r+  r%  r  r,  r  r  r-  r  r  r  r  r  r  r.  r2  c                 S   r{   )Nr   rQ   r  rQ   rQ   rR   r     r  z(Query.resolve_page_seo.<locals>.<lambda>r  r   r   )r   r   r   r   WebSitezhttps://entralon.com)r   r   )r   r   rX   r   rF   isPartOfr   z https://entralon.com/favicon.icoContactPointzcustomer service)r   	telephonecontactTypePostalAddress)r   streetAddressaddressLocalityaddressCountry)r   r   rX   r   r   contactPointr   r   summaryr   )r   r  r   r  )'r  r:   rj   r2   r   rB  r   r6   r4   rs   rI  r   r   rF   rG   r  r   r  rX   r   r  rY   r!   r   r   r   r   r   r  r   r   rE   r  r   r   address_localityaddress_countryr]  r^  )!rq  rd   rY   r   r_  r  rr  r  	setting_tbreadcrumb_arrayr  rE   rF   rG   r   rP   r  r  rh  rn  r  r  r6  rG  r  r  r   rX   r5  breadcrumb_list
page_micror  r   rQ   rQ   rR   resolve_page_seo@  s  




 
*
*
*
*
*
(
(4
,
*zQuery.resolve_page_seoc              	   C   s^   t j }|jdddddddj|d }|d u r-|jdddddddjd	d }|S )
Nr   r   rG   r   r   r   r   r  r  r6   r   r   r   r[  rB  r  rQ   rQ   rR   resolve_about_us  s
   
$$zQuery.resolve_about_usc                 C   Z   t j }|jddddddj|d }|d u r+|jddddddjdd }|S )	Nr   rG   r   r   r   r   r  r  r  r  rQ   rQ   rR   resolve_terms_of_use  
   
""zQuery.resolve_terms_of_usec                 C   r  )	Nr   rG   r   r   r   r   r  r  r  r  rQ   rQ   rR   resolve_privacy_policy  r  zQuery.resolve_privacy_policyc                 C   L   t j }|jdj|d }|d u r!|jdjdd }|dS )Nr   r  r  r6   r   r   r   r[  rB  rj   r  rQ   rQ   rR   resolve_home_seo_text  
   

zQuery.resolve_home_seo_textc                 C   r  )Nr   r  r  r  r  rQ   rQ   rR   resolve_about_us_home  r  zQuery.resolve_about_us_homeNc                 C   sb   t jj|d }|d u rt jjdd }|d u }|r$tjj|d}ntjjdd}|||dS )Nr  r  r/  TrZ  )r   rW  r  )r2   r   rB  r   r   )rc   rd   r  r   rr  r  rQ   rQ   rR   resolve_development_stats  s   zQuery.resolve_development_stats)r  )r  r%   rt  )r%   r'  r  )Fr%   r   r  )Nr  )Dr?   r@   rA   rC   r   r   rD   general_datar:  r  search_datarR  r   rZ   r  r?  filters_listrR  site_mapre  sitemaprg  r  r6  r  r  r  r7  r   r   r  selected_filtersrz   footer_menur  r   r  page_seor   r   r   r   r   r   r   r   r  development_statsrs  r  r  r  r  r  r  r  r  rl  re  r  r  r  r  r  r  r  r  r  rQ   rQ   rQ   rR   rh  i  s\    ("(:00





	


U
#
<
6
5

I 




rh  c                   @   s,   e Zd Ze Ze Ze Z	e
 ZdS )MutationN)r?   r@   rA   r  r   create_request_callbackr  create_contact_usr  create_subscribe_newsletterr  create_error_logrQ   rQ   rQ   rR   r    r  r  )querymutation)r  	functoolsr   mathr   django.confr   rC   graphene_djangor   django.db.modelsr   r   r   developer.modelsr	   development.modelsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   development.schemar   development.utilsr   geo_location.modelsr   r   r   r   r   r   r    r!   r"   r#   r$   formsr&   r'   r(   r)   graphene_toolsr*   modelsr+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   graphene_django.forms.mutationr8   django.utils.textr9   django.core.cacher:   r;   r<   r=   r^  
ObjectTyper>   rT   r^   rp   rz   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r  r  r  r  r  r  r  r!  r$  r'  r)  r,  r1  r3  r:  rF  rQ  rR  r  r  r  r  r  r  r  r  r  r  r  r  r  r1  r  r>  r?  rK  rR  re  rg  rh  r  SchemaschemarQ   rQ   rQ   rR   <module>   s,   @4<GCEI
			
	
	  Dz=q
     