o
    g                  
   @   s  d dl Z 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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 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& e
 Z'dd Z(dedfdedfgZ)dedfdedfgZ*dedfdedfgZ+d edfdedfgZ,G dd dej-Z.G dd  d ej-Z/G d!d" d"ej-Z0G d#d$ d$ej-Z1G d%d& d&ej-Z2G d'd( d(ej-Z3G d)d* d*ej-Z4G d+d, d,ej-Z5G d-d. d.ej-Z6G d/d0 d0ej-Z7G d1d2 d2ej-Z8G d3d4 d4ej-Z9G d5d6 d6ej-Z:G d7d8 d8ej-Z;G d9d: d:ej-Z<G d;d< d<ej-Z=d=d> Z>d?d@ Z?G dAdB dBej-Z@G dCdD dDej-ZAG dEdF dFej-ZBG dGdH dHej-ZCG dIdJ dJej-ZDG dKdL dLej-ZEG dMdN dNej-ZFG dOdP dPej-ZGG dQdR dRej-ZHG dSdT dTej-ZIG dUdV dVej-ZJd edWfdedXfdYedZfd[ed\fgZKG d]d^ d^ej-ZLG d_d` d`ej-ZMd edafdedbfdYedcfd[eddfdeedffdgedhfdiedjfdkedlfgZNd edmfdednfdYedofd[edpfdeedqfdgedrfdiedsfgZOdtdu ZPdvdw ZQG dxdy dyej-ZRG dzd{ d{ej-ZSG d|d} d}ej-ZTG d~d dej-ZUG dd dej-ZVG dd dej-ZWG dd dej-ZXG dd dej-ZYG dd dej-ZZG dd dej-Z[dS )    N)BeautifulSoup)models)gettext_lazy)get_user_model)	DeveloperDeveloperTranslate)flat_bedroom_type)CityCountryDistrictLocation
LondonAreaLondonZipState
LondonZonePublicFacility)	WEBPField)Language)ContentFile)slugify)Image)BytesIO)CKEditor5Fieldc                 C   s2   | j \}}|| }t|| }| ||ftjjS )z;Resize image to target width while maintaining aspect ratio)sizeintresizer   
ResamplingLANCZOS)imagetarget_widthwidthheightratio
new_height r#   3/var/www/Entralon-Web-Backend/development/models.pyresize_by_width   s   
r%   T	submittedFignoredactivedeactiveyesnoznot completed   	completedc                       s`  e Zd ZejedddZejedddZejedddZejedddZ	ejedddZ
eedZejed	ddZejed
ddZejedddZejedddZejedddZejedddZejedddZejedddZejedddZejedddZejedddZdd Z fddZG dd dZ  ZS )Currencyname   
max_lengthcodedemonymzmajor singlezmajor pluralziso numsymbolzsymbol nativezminor singlezminor pluralz
iso digitsr   defaultzdecimal digitsznum to basiczgbp ratezaed rate
created atTauto_now_add
updated atauto_nowc                 C      | j  d| j S N )r/   r3   selfr#   r#   r$   __str__G      zCurrency.__str__c                       t  j|i | d S NsupersaverB   argskwargs	__class__r#   r$   rI   J      zCurrency.savec                   @   "   e Zd ZedZedZdgZdS )zCurrency.Metar.   
Currenciesr/   N__name__
__module____qualname___verbose_nameverbose_name_pluralorderingr#   r#   r#   r$   MetaM       
rZ   )rS   rT   rU   r   	CharFieldrV   r/   r3   r4   major_singlemajor_pluralIntegerFieldiso_numr5   symbol_nativeminor_singleminor_plural
iso_digitsdecimal_digitsnum_to_basic
FloatFieldgbp_rateaed_rateDateTimeField
created_at
updated_atrC   rI   rZ   __classcell__r#   r#   rM   r$   r.   2   s*    r.   c                       s   e Zd ZejeejedddZejeejedddZ	e
edZejeddd	Zejed
ddZdd Z fddZG dd dZ  ZS )
ChangeRatezfrom currencyfrom_currency	on_deleterW   related_namezto currencyto_currencyrater8   Tr9   r;   r<   c                 C   r>   )Nz to )ro   rs   rA   r#   r#   r$   rC   Y   rD   zChangeRate.__str__c                    rE   rF   rG   rJ   rM   r#   r$   rI   \   rO   zChangeRate.savec                   @   "   e Zd ZedZedZdgZdS )zChangeRate.MetazCurrency Change RateidNrR   r#   r#   r#   r$   rZ   _   r[   rZ   )rS   rT   rU   r   
ForeignKeyr.   CASCADErV   ro   rs   rg   rt   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   rn   R   s    rn   c                          e Zd ZejedddZejeddddddZej	eddddZ
ejedd	ddd
ZejedddZejedddZejedddZdd Z fddZG dd dZ  ZS )Featurer/   r0   r1   SlugTr2   uniquenullblankiconr~   r   zfeature/icon/	upload_tor~   r   
translatedFr6   r8   r9   r;   r<   c                 C      | j  S rF   r/   rA   r#   r#   r$   rC   m      zFeature.__str__c                    ,   | j rt| j dd| _t j|i | d S NTallow_unicoder/   r   slugrH   rI   rJ   rM   r#   r$   rI   p      zFeature.savec                   @   rP   )zFeature.Metarz   Featuresr/   NrR   r#   r#   r#   r$   rZ   t   r[   rZ   rS   rT   rU   r   r\   rV   r/   	SlugFieldr   	TextField	icon_text	FileFieldr   BooleanFieldr   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   rz   d       rz   c                          e Zd ZejeejedddZeje	ejedddZ
ejeddddd	Zejed
ddZejeddddZejedddZejedddZdd Z fddZG dd dZ  ZS )FeatureTranslatefeature
translatesrp   languagefeature_translater{   r0   Tr2   r~   r   r/   r1   descriptionr   r8   r9   r;   r<   c                 C      | j  d| jj S r?   r/   r   r3   rA   r#   r#   r$   rC         zFeatureTranslate.__str__c                    r   r   r   rJ   rM   r#   r$   rI      r   zFeatureTranslate.savec                   @   6   e Zd ZedZedZdgZejddgddgZ	dS )zFeatureTranslate.MetazFeature Translater/   r   r   #repeated_language_feature_translatefieldsr/   N
rS   rT   rU   rV   rW   rX   rY   r   UniqueConstraintconstraintsr#   r#   r#   r$   rZ          rZ   )rS   rT   rU   r   rw   rz   rx   rV   r   r   r   r   r   r\   r/   r   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r   y       r   c                          e Zd ZejedddZejeddddddZej	eddd	Z
ejed
ddZejedddZdd Z fddZG dd dZ  ZS )BuildingTyper/   r0   r1   r{   Tr|   r   Fr6   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC      r   zBuildingType.__str__c                    r   r   r   rJ   rM   r#   r$   rI      r   zBuildingType.savec                   @   ru   )zBuildingType.MetaBuilding Typer/   NrR   r#   r#   r#   r$   rZ      r[   rZ   rS   rT   rU   r   r\   rV   r/   r   r   r   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r          r   c                       r   )BuildingTypeTranslatezbuilding typer   rp   r   building_type_translater{   r0   Tr   r/   r1   r   r   r8   r9   r;   r<   c                 C   r   r?   r   rA   r#   r#   r$   rC      r   zBuildingTypeTranslate.__str__c                    r   r   r   rJ   rM   r#   r$   rI      r   zBuildingTypeTranslate.savec                   @   r   )zBuildingTypeTranslate.MetazBuilding Type Translater/   r   building_type)repeated_language_building_type_translater   Nr   r#   r#   r#   r$   rZ      r   rZ   )rS   rT   rU   r   rw   r   rx   rV   r   r   r   r   r   r\   r/   r   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r      r   r   c                       r   )PaymentOptionr/   r0   r1   r{   Tr|   r   Fr6   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC      r   zPaymentOption.__str__c                    r   r   r   rJ   rM   r#   r$   rI      r   zPaymentOption.savec                   @   ru   )zPaymentOption.MetaPayment Optionr/   NrR   r#   r#   r#   r$   rZ      r[   rZ   r   r#   r#   rM   r$   r      r   r   c                       r   )PaymentOptionTranslatezpayment optionr   rp   r   payment_option_translater{   r0   Tr   r/   r1   r   r   r8   r9   r;   r<   c                 C   r   r?   r   rA   r#   r#   r$   rC      r   zPaymentOptionTranslate.__str__c                    r   r   r   rJ   rM   r#   r$   rI      r   zPaymentOptionTranslate.savec                   @   r   )zPaymentOptionTranslate.MetazPayment Option Translater/   r   payment_option*repeated_language_payment_option_translater   Nr   r#   r#   r#   r$   rZ      r   rZ   )rS   rT   rU   r   rw   r   rx   rV   r   r   r   r   r   r\   r/   r   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r      r   r   c                       ry   )RankElementr/   r0   r1   r{   Tr|   r   r   z
rank/icon/r   r   Fr6   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC      r   zRankElement.__str__c                    r   r   r   rJ   rM   r#   r$   rI      r   zRankElement.savec                   @   ru   )zRankElement.MetazRank Elementr/   NrR   r#   r#   r#   r$   rZ      r[   rZ   r   r#   r#   rM   r$   r      r   r   c                       r   )RankElementTranslaterank elementr   rp   r   rank_element_translater{   r0   Tr   r/   r1   r   r   r8   r9   r;   r<   c                 C   r   r?   r   rA   r#   r#   r$   rC     r   zRankElementTranslate.__str__c                    r   r   r   rJ   rM   r#   r$   rI     r   zRankElementTranslate.savec                   @   r   )zRankElementTranslate.MetazRank Element Translater/   r   rank_element(repeated_language_rank_element_translater   Nr   r#   r#   r#   r$   rZ     r   rZ   )rS   rT   rU   r   rw   r   rx   rV   r   r   r   r   r   r\   r/   r   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r      r   r   c                       s0  e Zd ZejeddddZejeddddddZejeddddd	Z	ejed
dddd	Z
ejeejedddZejeejedddZejeddddddZejeddddZejedddZejeddddZejedddZejedddZdd Z fddZG dd  d Z  ZS )!
ONHStationr/   r0   Tr2   db_indexr{   r2   r   r~   r   r3   
   r   type   countryonh_stationsrp   cityr   jsonr   checkFr6   
last checkr8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC   "  r   zONHStation.__str__c                    r   r   r   rJ   rM   r#   r$   rI   %  r   zONHStation.savec                   @   4   e Zd ZedZedZdgZejg ddgZ	dS )zONHStation.MetazOne New Homes Stationr/   )r   r/   r   r   N
rS   rT   rU   rV   rW   rX   rY   r   Indexindexesr#   r#   r#   r$   rZ   )      rZ   )rS   rT   rU   r   r\   rV   r/   r   r   r3   r   rw   r
   rx   r   r	   r   r   	JSONFieldr   r   is_checkrg   
last_checkrj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r     s     r   c                       s  e Zd ZejeddddZejeddddddZejeddddd	Z	ej
eejed
ddZej
eejedddZejeddddZejeedddZejedddZejeddddZejedddZejedddZdd Z fddZG dd dZ  ZS ) 	MetroLiner/   r0   Tr   r{   r   r3   r   r   r   metro_linesrp   r   r   r   stations)rW   rr   r   Fr6   r   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC   >  r   zMetroLine.__str__c                    r   r   r   rJ   rM   r#   r$   rI   A  r   zMetroLine.savec                   @   r   )zMetroLine.Meta
Metro Liner/   )r   r/   r3   r   Nr   r#   r#   r#   r$   rZ   E  r   rZ   ) rS   rT   rU   r   r\   rV   r/   r   r   r3   rw   r
   rx   r   r	   r   r   r   ManyToManyFieldr   r   r   r   rg   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r   1  s    r   c                         e Zd ZejeddddZejeddddddZejeddddd	Z	ej
eejed
ddZej
eejedddZejeddddZejedddZejeddddZejedddZejedddZdd Z fddZG dd dZ  ZS )ONHDistrictr/   r0   Tr   r{   r   r3   r   r   r   onh_districtsrp   r   r   r   r   Fr6   r   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC   Y  r   zONHDistrict.__str__c                    r   r   r   rJ   rM   r#   r$   rI   \  r   zONHDistrict.savec                   @   4   e Zd ZedZedZdgZejddgdgZ	dS )zONHDistrict.MetazOne New Homes Districtr/   r   r   Nr   r#   r#   r#   r$   rZ   `  r   rZ   rS   rT   rU   r   r\   rV   r/   r   r   r3   rw   r
   rx   r   r	   r   r   r   r   r   rg   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r   M      r   c                       r   )ONHPostcoder/   r0   Tr   r{   r   r3   r   r   r   onh_postcodesrp   r   r   r   r   Fr6   r   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC   t  r   zONHPostcode.__str__c                    r   r   r   rJ   rM   r#   r$   rI   w  r   zONHPostcode.savec                   @   r   )zONHPostcode.MetazOne New Homes Postcoder/   r   r   Nr   r#   r#   r#   r$   rZ   {  r   rZ   r   r#   r#   rM   r$   r   h  r   r   c                       r   )ONHArear/   r0   Tr   r{   r   r3   r   r   r   onh_arearp   r   r   r   r   Fr6   r   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC     r   zONHArea.__str__c                    r   r   r   rJ   rM   r#   r$   rI     r   zONHArea.savec                   @   r   )zONHArea.MetazOne New Homes Arear/   r   r   Nr   r#   r#   r#   r$   rZ     r   rZ   r   r#   r#   rM   r$   r     r   r   c                       r   )ONHZoner/   r0   Tr   r{   r   r3   r   r   r   onh_zonerp   r   r   r   r   Fr6   r   r8   r9   r;   r<   c                 C   r   rF   r   rA   r#   r#   r$   rC     r   zONHZone.__str__c                    r   r   r   rJ   rM   r#   r$   rI     r   zONHZone.savec                   @   r   )zONHZone.MetazOne New Homes Zoner/   r   r   Nr   r#   r#   r#   r$   rZ     r   rZ   r   r#   r#   rM   r$   r     r   r   c                 C      d| j  dS )Ndevelopment/.webpr   instancefilenamer#   r#   r$   image_development_folder     r   c                 C   r   )Nr   z-mobile.webpr   r   r#   r#   r$   image_mobile_development_folder  r   r   c                       s  e Zd ZejeddddddZejeddddddZejedddddddZ	ej
eejed	d
dddZejedddZejeddedZejedddddZej
eejedd
dddZejedddddZejeddddZejedddZej
eejedd
dddZej
eejedd
dddZej
e ejedd
dddZ!ej
e"ejedd
dddZ#ej
e$ejedd
dddZ%ej
e&ejedd
dddZ'ej(e)ed d!dd"Z*ejed#ddZ+ejed$ddZ,ejed%ddZ-ejed&d'dZ.ejed(ddZ/ejed)ddZ0ejed*d'dZ1ejed*ddZ2ejed*ddZ3ejed+ddZ4ejed,dedZ5ejed-dedZ6ejed.dedZ7ejed/dedZ8ejed0dedZ9ejed1dedZ:ejed2dedZ;ej
e<ejed3d
dddZ=ej(e>ed4d
dd"Z?ej(e@ed5d
dd"ZAejed6d7dddZBejCed8dddZDejed9eEdd:ZFejed;edd:ZGejed<edd:ZHejed=dedZIejed>dddZJeKed?eLddd@ZMeKedAeNddd@ZOej(ePedBd
dd"ZQej(eRedCd
dd"ZSej(eTedDd
dd"ZUej(eVedEd
dd"ZWej(eXed#d
dd"ZYej(eZedFd
dd"Z[ej\edGddHZ]ej\edIddJZ^ fdKdLZ_dMdN Z`G dOdP dPZa  ZbS )QDevelopmentzReference ID   Tr   Titler{   r0   )r2   r   r}   r~   r   	developerdevelopmentsrq   rW   rr   r~   r   
Base Pricer   r6   r(   Fr7   choicesAddressr   locationcoordinatesi  )sridr~   r   Geo JSONr   geo json lat creater   r   districtzposition areazoner   station_developmentsrW   rr   r   AreazMin AreazMax AreaFloor0z	min Floorz	max FloorFlatOrder	PublishedFeaturedHighlightedCheckedzChecked By AdminDeletedr   zDefault Currencyr   r   zCompleted date   zCompleted AtzCompleted Statusr   r7   zReady To MoveSold OutzPanorama CheckPlacesr   )r   r   r~   zImage MobileStationr   r   PostcodeZoner8   r9   r;   r<   c              
      s  | j rt| j dd| _| jd u r| jd ur| jj| _| jd u r)| jd ur)| jj| _| jdkr2d| _nd| _| jd u sD| jdksD| jdkrP| j	d urPd| j	 | _| j
r4tjj| j
d}zQz| jjddd	 j}W n   | jjdd
 j}Y |r|jrtj|jjrt|jj t|}t }t|d}|j|ddd t| |jd| _W n ty } ztd|  W Y d }~nd }~ww zRz| jjddd	  j}W n   | jjdd
  j}Y |r|j!rtj|j!jrt|j!j t|}t }	t|d}
|
j|	ddd t|	 |jd| _!W n ty3 } ztd|  W Y d }~nd }~ww | jjdd
" dkrGd| _#d| _$nd| _#d| _$| jj%&| jj%s]d| _#d| _$z| j'jdd(t)*dd | _+| j+d u rwd| _+W n   Y z| j'jdd(t),dd | _-| j-d u rd| _-W n   Y z| j'jdd(t)*dd | _.| j.d u rd| _.W n   Y | j'jdd(t),dd pd| _/zt0 j|i | W d S  ty } zt| W Y d }~d S d }~ww )NTr   r   F zENT-NonezENT-)pk)r   category)r   iX  WEBPU   )formatqualityr   zImage processing error: i  zImage mobile processing error: )area__gtarea	area__max	area__min)base_price__gt
base_pricebase_price__min)1titler   r   r   r   r   completed_statusis_ready_to_movereference_idrv   r  r   objectsgetattachmentsfilterfirstr   ospathexistsremover   openr   r%   rI   r   getvaluer/   	Exceptionprintlastimage_mobilecountis_published	is_activer   containsflats	aggregater   Maxr  Minmin_areamax_arear!  rH   )rB   rK   rL   old_instanceimg	pil_imageoutput_desktopdesktop_imageeoutput_mobilemobile_imagerM   r#   r$   rI     s   


(



   &zDevelopment.savec                 C   r   rF   r#  rA   r#   r#   r$   rC   O  r   zDevelopment.__str__c                   @   sR   e Zd ZedZedZg dZejg ddejg ddejg ddgZ	dS )	zDevelopment.Metar   Developments)is_sold_outorder-idr#  )r   r8  
is_deletedr   )r   r8  rM  )is_featuredr8  rM  Nr   r#   r#   r#   r$   rZ   R  s    rZ   )crS   rT   rU   r   r\   rV   r&  r#  r   r   rw   r   rx   r   r_   r!  r   QUESTION_BOOLEANr8  addressr   r   
PointFieldr   r   geo_jsonrg   last_creater
   r   r	   r   r   r   r   position_arear   postcoder   r  r   r   r   r  r>  r?  floor	min_floor	max_floorflatmin_flatmax_flatrK  r7  rN  is_highlighted
is_checkedis_checked_by_adminrM  r   r.   default_currencyr   r   r   r   completed_date	DateFieldcompleted_atCOMPLETED_STATUSr$  r%  rJ  panorama_checkplacesr   r   r   r   r5  r   onh_stationr   r   r   onh_districtr   onh_postcoder   r   r   r   rj   rk   rl   rI   rC   rZ   rm   r#   r#   rM   r$   r     sv    Lr   c                       s  e Zd ZejeeddejdZeje	eddejdZ
ejeddddd	Zejed
dddd	ZejeddddZejedddZejeddddZejeddddZejeddddZejeddddZejeddddd	ZejeddddZejeeddejdddZejedddZejeddedZejeddddZ ejeddddZ!ejedddZ"ejed dedZ#ejed!dddZ$ej%ed"dd#Z&ej%ed$dd%Z'd&d' Z( fd(d)Z)G d*d+ d+Z*  Z+S ),DevelopmentTranslater   development_translaterW   rr   rq   r   r   r   r   Tr   r{   r0   r   r   r   r   r6   SummaryDescriptionKeywordszFeatures Descriptionr   Neighborhoodr   rW   rr   rq   r~   r   zis paraphraseFzParaphrase errorr   Errorzlast paraphrasezis summarizezsummarize has error?zsummarize errorr8   r9   r;   r<   c                 C   r   rF   rH  rA   r#   r#   r$   rC   t  r   zDevelopmentTranslate.__str__c              
      s   | j j| _| j jrt| j jdd| _| js,| jr,zt| jd d d | _W n   Y | jsGz| j jj	
 j| jd }|| _W n   Y zt j|i | W d S  typ } ztd| j d| W Y d }~d S d }~ww )NTr   zhtml.parseri  )r   zerror on save z development translate)developmentr#  r   r   summaryr   r   get_textr   r   allr*  r   r+  rH   rI   r2  r3  rv   )rB   rK   rL   r   rE  rM   r#   r$   rI   w  s   
 
0 zDevelopmentTranslate.savec                   @   r   )zDevelopmentTranslate.MetazDevelopment Translaterv   r   rr  'repeated_language_development_translater   Nr   r#   r#   r#   r$   rZ     r   rZ   ),rS   rT   rU   r   rw   r   rV   rx   r   r   rr  r\   r#  r   r   r   rR  rg   rS  r   rs  r   keywordsfeatures_descriptionrP  neighborhoodr   r   r   is_paraphraserO  paraphrase_errorerrorlast_paraphraseis_summarizesummarize_has_errorsummarize_errorrj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   ri  \  s4    ri  c                   @   s   e Zd ZejeeddejdZeje	eddejdZ
ejeddddd	Zejed
dddZejedddZejedddZdd ZG dd dZdS )
KeyFeaturer   key_featuresrk  rz   development_featuresValuer   Tr   Numr   r8   r9   r;   r<   c                 C      | j j d| jj S r?   )rr  r#  r   r/   rA   r#   r#   r$   rC     rO   zKeyFeature.__str__c                   @   s8   e Zd ZedZedZddgZejddgddgZ	dS )	zKeyFeature.MetazDevelopment Key FeaturezDevelopment Key Featuresr   rv   rr  (repeated_feature_development_key_featurer   Nr   r#   r#   r#   r$   rZ         rZ   N)rS   rT   rU   r   rw   r   rV   rx   rr  rz   r   r\   valuerg   numrj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                   @   s   e Zd ZejeeddejdZeje	eddejdZ
ejeddddZejed	dd
ZejedddZdd ZG dd dZdS )AutoScoreRankr   auto_scoresrk  r   development_auto_scoresRankTr   r8   r9   r;   r<   c                 C   r  r?   )rr  r#  elementr/   rA   r#   r#   r$   rC     rO   zAutoScoreRank.__str__c                   @   $   e Zd ZedZedZddgZdS )zAutoScoreRank.MetazDevelopment Auto ScorezDevelopment Auto Scoresr  rv   NrR   r#   r#   r#   r$   rZ         rZ   N)rS   rT   rU   r   rw   r   rV   rx   rr  r   r  rg   rankrj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                   @   s   e Zd ZejeeddejdZej	edddZ
ejeddd	Zejed
ddZejedddZdd ZG dd dZdS )DevelopmentOfferr   offersrk  Textr   r1   r   Fr6   r8   Tr9   r;   r<   c                 C   
   | j j S rF   rr  r#  rA   r#   r#   r$   rC        
zDevelopmentOffer.__str__c                   @   rP   )zDevelopmentOffer.MetaDevelopment OfferzDevelopment Offersrv   NrR   r#   r#   r#   r$   rZ     r[   rZ   N)rS   rT   rU   r   rw   r   rV   rx   rr  r   textr   r   rj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                   @      e Zd ZejeeddejdZeje	eddejdZ
ejedddZejed	d
dZejedd
dZdd ZG dd dZdS )DevelopmentOfferTranslater   development_offer_translaterk  r  r   r  r   r1   r8   Tr9   r;   r<   c                 C      | j jj S rF   )development_offerrr  r#  rA   r#   r#   r$   rC        z!DevelopmentOfferTranslate.__str__c                   @   r   )zDevelopmentOfferTranslate.MetazDevelopment Offer Translaterv   r   r  -repeated_language_development_offer_translater   Nr   r#   r#   r#   r$   rZ     r   rZ   N)rS   rT   rU   r   rw   r   rV   rx   r   r  r  r   r  rj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                       s   e Zd ZejeeddejdZej	edddZ
ejeddd	Zejed
ddddZejeddd	ZejedddZejedddZdd Z fddZG dd dZ  ZS )PaymentPlanr   payment_planrk  r#  r0   r1   Percentr   r6   r{   Tr   r   Fr8   r9   r;   r<   c                 C   r   rF   rH  rA   r#   r#   r$   rC     r   zPaymentPlan.__str__c                    r   r   r#  r   r   rH   rI   rJ   rM   r#   r$   rI     r   zPaymentPlan.savec                   @   r   )zPaymentPlan.MetazPayment Planrv   rr  r   &repeated_slug_development_payment_planr   Nr   r#   r#   r#   r$   rZ     r   rZ   )rS   rT   rU   r   rw   r   rV   rx   rr  r\   r#  rg   percentr   r   r   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r    s    r  c                       r   )PaymentPlanTranslatezpayment planr   rp   r   payment_plan_translater{   r0   Tr   r#  r1   r   r   r8   r9   r;   r<   c                 C   r   r?   )r#  r   r3   rA   r#   r#   r$   rC     r   zPaymentPlanTranslate.__str__c                    r   r   r  rJ   rM   r#   r$   rI     r   zPaymentPlanTranslate.savec                   @   r   )zPaymentPlanTranslate.MetazPayment Plan Translaterv   r   r  (repeated_language_payment_plan_translater   Nr   r#   r#   r#   r$   rZ     r   rZ   )rS   rT   rU   r   rw   r  rx   rV   r  r   r   r   r   r\   r#  r   r   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r    r   r  c                   @   s   e Zd ZejeeddejdZeje	ejedddZ
ejedddd	Zejed
ddd	ZejedddZejedddZejedddZdd ZG dd dZdS )DevelopmentPublicFacilityr   public_facilitiesrk  zPublic Facilitiesr   rp   distanceTr   durationr  r   r6   r8   r9   r;   r<   c                 C   r  r?   )rr  r#  public_facilityr/   rA   r#   r#   r$   rC     rO   z!DevelopmentPublicFacility.__str__c                   @   s8   e Zd ZedZedZg dZejddgddgZ	dS )	zDevelopmentPublicFacility.MetazDevelopment Public FacilityzDevelopment Public Facilities)r  r  r  rv   r  rr  $repeated_public_facility_developmentr   Nr   r#   r#   r#   r$   rZ     r  rZ   N)rS   rT   rU   r   rw   r   rV   rx   rr  r   r  rg   r  r  PositiveSmallIntegerFieldr  rj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                       sF  e Zd ZejeeddejdZej	eddddZ
ej	eddd	Zejed
dedZejeddedZejeddedZejeddedZejeddedZejeddddZejeddddZejeddddZej	eddd	ZejedddZejedddZ fddZdd ZG dd dZ  ZS )r  r   r:  rk  zBedrooms Numberr   T)r7   r   zBathrooms Numberr6   r(   Fr   r	  r
  r  r  r  zPrice Per Meterr   r  r8   r9   r;   r<   c                    s*   | j dkr| j| j | _ t j|i |S )Nr   )r!  price_per_meterr  rH   rI   rJ   rM   r#   r$   rI   .  s   
z	Flat.savec                 C   s   | j j d| j d| j S )Nz : )rr  r#  bedrooms_numbathrooms_numrA   r#   r#   r$   rC   3  s   zFlat.__str__c                   @   s$   e Zd ZedZedZg dZdS )z	Flat.MetazDevelopment FlatzDevelopment Flats)r  z-orderrv   NrR   r#   r#   r#   r$   rZ   6  r  rZ   ) rS   rT   rU   r   rw   r   rV   rx   rr  r_   r  r  r   ACTIVE_BOOLEANr8  rO  r7  rN  r]  rJ  rg   r  r  r!  rK  rj   rk   rl   rI   rC   rZ   rm   r#   r#   rM   r$   r    s$    r  c                       s   e Zd ZejeeddejdZeje	eddejdZ
ejeddddZejed	d
dddZejedddZejedddZdd Z fddZG dd dZ  ZS )FlatTranslater   flat_translaterk  r  r   rm  Tr   Namer   r   r8   r9   r;   r<   c                 C   s   | j jj d| jj S )N-)rY  rr  r#  r   r3   rA   r#   r#   r$   rC   C  s   zFlatTranslate.__str__c                    s,   t | jj| jjd| _t j|i | d S )N)lang)r   rY  r  r   r3   r/   rH   rI   rJ   rM   r#   r$   rI   F  r   zFlatTranslate.savec                   @   8   e Zd ZedZedZddgZejddgddgZ	dS )	zFlatTranslate.MetazDevelopment Flat TranslatezDevelopment Flats TranslaterY  rv   r    repeated_language_flat_translater   Nr   r#   r#   r#   r$   rZ   J  r  rZ   )rS   rT   rU   r   rw   r   rV   rx   r   r  rY  r   r   r\   r/   rj   rk   rl   rC   rI   rZ   rm   r#   r#   rM   r$   r  ;  s    r  zPrice ChangezOwnership Change   
Renovation   Otherc                   @   s   e Zd ZejeeddejdZej	ede
ddZejedddZejed	d
d
dZejedd
dZejedd
dZdd ZG dd dZdS )FlatPriceHistoryr  price_historyrk  Eventr   r  Pricer6   timeTr   r8   r9   r;   r<   c                 C   r  rF   )rY  rr  r#  rA   r#   r#   r$   rC   d  r  zFlatPriceHistory.__str__c                   @   r  )zFlatPriceHistory.MetazDevelopment Flat PricezDevelopment Flat Pricesr  rv   NrR   r#   r#   r#   r$   rZ   g  r  rZ   N)rS   rT   rU   r   rw   r  rV   rx   rY  SmallIntegerFieldPRICE_EVENTeventrg   pricer  rj   rk   rl   rC   rZ   r#   r#   r#   r$   r  [  s    r  c                   @   s   e Zd ZejeeddejdZeje	eddejdddZ
ejeejeddddd	Zejed
dddZejedddZejedddZejedddZdd ZG dd dZdS )DevelopmentReviewr   reviewsrk  r  Trp  userdevelopment_reviewsr   Reviewr   Rater   r6   r8   r9   r;   r<   c                 C   r  rF   r  rA   r#   r#   r$   rC   w  r  zDevelopmentReview.__str__c                   @   rP   )zDevelopmentReview.MetazDevelopment ReviewzDevelopment Reviewsrv   NrR   r#   r#   r#   r$   rZ   z  r[   rZ   N)rS   rT   rU   r   rw   r   rV   rx   rr  r  rY  UserSET_NULLr  r   reviewr_   rt   rj   rk   rl   rC   rZ   r#   r#   r#   r$   r  l  s    r  PublicExteriorInterior	Amenities   zFloor Plans   z
Site Plans   z
Flat Plans   zStreet Viewr   VideoAudioDocumentz	Video URLz	Audio URLzDocument URLc                 C   sF   zd |dd d }W n	   t j}Y d| jj d| dS )Nr  .r   /attachments/r   )joinsplituuiduuid4hexrr  r   )r   r   	file_namer#   r#   r$   image_development_attach_folder  s   r  c                 C   s   d| j j d| S )Nr   r  )rr  r   r   r#   r#   r$   file_development_attach_folder  s   r  c                       s  e Zd ZejeeddejdZej	ede
dddZeededddZejedd	ddd
ZejeddddZejedd	dZejedd	ddd
ZejededdZejededdZejedddZejedddZ fddZdd ZG dd dZ  Z S )
Attachmentr   r)  rk  FileTr   r   z
Image Namer  r   Linkr   r   r1   Altz	File Typer   r  Categoryr8   r9   r;   r<   c                    s   | j d u rdtj| jjdd d }t|dd| _ | j	j
 d|   d|   }|| _
| dt jd d  | _t j|i | d S )	Nr@   r  r  Tr   r  #r  )r  r  r,  r-  basenamefiler/   r  r   rr  r#  get_category_displayget_type_displayr  r  r  altrH   rI   )rB   rK   rL   nr#  rM   r#   r$   rI     s   
$ zAttachment.savec                 C   r  rF   r  rA   r#   r#   r$   rC     r  zAttachment.__str__c                   @   6   e Zd ZedZedZdgZejg dddgZ	dS )zAttachment.MetazDevelopment AttachmentzDevelopment Attachmentsrv   )rr  r  r  )repeated_file_name_development_attachmentr   Nr   r#   r#   r#   r$   rZ     r   rZ   )!rS   rT   rU   r   rw   r   rV   rx   rr  r   r  r  r   r  r   r\   r  URLFieldlinkr#  r  r  ATTACHMENT_TYPEr   ATTACHMENT_CATEGORYr  rj   rk   rl   rI   rC   rZ   rm   r#   r#   rM   r$   r    s    	r  c                       sz   e Zd ZejedddZejedddZej	eddd	Z
ej	ed
ddZ fddZdd ZG dd dZ  ZS )FaqCategoryr   r0   r1   r  r   r6   r8   Tr9   r;   r<   c                    s,   | j dkrtj d | _ t j|i |S )Nr   r,   )rK  r  r'  r6  rH   rI   rJ   rM   r#   r$   rI     s   
zFaqCategory.savec                 C   r   rF   rH  rA   r#   r#   r$   rC     r   zFaqCategory.__str__c                   @   r  )zFaqCategory.MetazDevelopment FAQ CategoryzDevelopment FAQ CategoriesrK  rL  NrR   r#   r#   r#   r$   rZ     r  rZ   )rS   rT   rU   r   r\   rV   r#  r_   rK  rj   rk   rl   rI   rC   rZ   rm   r#   r#   rM   r$   r    s    r  c                   @   r  )FaqCategoryTranslater   faq_category_translaterk  r  r   r   r0   r1   r8   Tr9   r;   r<   c                 C   r   rF   rH  rA   r#   r#   r$   rC     r   zFaqCategoryTranslate.__str__c                   @   r  )	zFaqCategoryTranslate.Metaz"Development FAQ Category Translatez#Development FAQ Category Translatesr  rL  r   4repeated_development_faq_category_language_translater   Nr   r#   r#   r#   r$   rZ     r  rZ   N)rS   rT   rU   r   rw   r   rV   rx   r   r  r  r\   r#  rj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                   @   s   e Zd ZejeeddejdZejeeddejdZ	e
edZe
edZejedd	d
Zejedd	dZdd ZG dd dZdS )
FaqFormular   faq_formulark  r  formulaQuestionAnswerr8   Tr9   r;   r<   c                 C   r   rF   questionrA   r#   r#   r$   rC     r   zFaqFormula.__str__c                   @   rP   )zFaqFormula.MetazDevelopment FAQ FormulazDevelopment FAQ Formulasrv   NrR   r#   r#   r#   r$   rZ     r[   rZ   N)rS   rT   rU   r   rw   r   rV   rx   r  r  r   r  answerrj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                   @   s   e Zd ZejeeddejdZeje	eddejdZ
eedZejedddZejed	d
dZejedddZejedddZdd ZG dd dZdS )Faqr   faqsrk  r  r  r(   Tr6   r   Fr8   r9   r;   r<   c                 C   r   rF   r  rA   r#   r#   r$   rC     r   zFaq.__str__c                   @   r  )zFaq.MetazDevelopment FAQzDevelopment FAQsrL  )rr  r  r  !repeated_development_faq_questionr   Nr   r#   r#   r#   r$   rZ     r   rZ   N)rS   rT   rU   r   rw   r   rV   rx   rr  r  r  r   r  r   r8  is_translatedrj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                   @   s   e Zd ZejeejddZejeejddZ	e
edZe
edZejedddZejed	d
dZejedd
dZdd ZG dd dZdS )FaqTranslater   )rq   rr   development_faq_translationsr  r  zcreated timer   r6   r8   Tr9   r;   r<   c                 C   r   rF   r  rA   r#   r#   r$   rC     r   zFaqTranslate.__str__c                   @   s6   e Zd ZedZedZdgZejddgddgZ	dS )	zFaqTranslate.MetazDevelopment FAQ TranslationzDevelopment FAQ TranslationsrL  faqr   +repeated_development_faq_language_translater   Nr   r#   r#   r#   r$   rZ     r   rZ   N)rS   rT   rU   r   rw   r  rx   r  r   r   r   rV   r  r  rg   created_timerj   rk   rl   rC   rZ   r#   r#   r#   r$   r    s    r  c                   @   sX  e Zd ZejeeddejdZeje	eddejdddZ
ejeddddd	Zejed
dddZejeddddd	Zejeddddd	ZejeddddZejeddddd	ZejeddddZejedddZejedddZejeddddZejedddZejedddZejedddZdd ZG d d! d!Zd"S )#FilterSeoTextr
   development_filter_seo_textrk  r	   Trp  zFirst Filterr0   r   zFirst Filter Prefixin)r2   r7   zFirst Filter TypezSecond FilterzSecond Filter PrefixwithzSecond Filter Typer  r   zCheck For TextFr6   zGet Text ErrorzGet Text Error Message
Paraphraser8   r9   r;   r<   c                 C   sl   | j j d| jr| jjnd d| jr| jnd d| jr| jnd d| jr'| jnd d| jr2| j S d S Nr@   r  )r   r3   r   r/   first_filterfirst_filter_typesecond_filtersecond_filter_typerA   r#   r#   r$   rC   6  s   lzFilterSeoText.__str__c                   @   s*   e Zd ZedZedZdgZg dZdS )zFilterSeoText.MetazDevelopment Filter Seo TextzDevelopment Filter Seo Textsrv   )r   r   r  r  r  r  NrS   rT   rU   rV   rW   rX   rY   unique_togetherr#   r#   r#   r$   rZ   9  
    rZ   N)rS   rT   rU   r   rw   r
   rV   rx   r   r	   r   r\   r  first_filter_prefixr  r  second_filter_prefixr  r   r  r   check_for_textget_text_errorget_text_error_messagerz  rj   rk   rl   rC   rZ   r#   r#   r#   r$   r  "  s$    r  c                   @   s   e Zd ZejeejedddZeje	ejedddZ
ejeddddZejed	dd
ZejedddZdd ZG dd dZdS )FilterSeoTextTranslater   %development_filter_seo_text_translaterp   zFilter Seo Textr   r  Tr   r8   r9   r;   r<   c                 C   s4   | j j d| jjj d| jjr| jjj S d S r  )r   r3   filter_seo_textr   r   r/   rA   r#   r#   r$   rC   G  s   4zFilterSeoTextTranslate.__str__c                   @   s*   e Zd ZedZedZdgZddgZdS )zFilterSeoTextTranslate.Metaz'Development Filter Seo Text Translationz(Development Filter Seo Text Translationsrv   r   r$  Nr  r#   r#   r#   r$   rZ   J  r  rZ   N)rS   rT   rU   r   rw   r   rx   rV   r   r  r$  r   r  rj   rk   rl   rC   rZ   r#   r#   r#   r$   r"  ?  s    r"  c                       s  e Zd ZejeejedddZeje	ejedddZ
ejeejedddddZejedd	ddd
Zejedd	ddd
Zejedd	ddd
ZejedddddZejeeddddZejeeddddZejeeddddZejeeddddZejeeddddZejeeddddZej eddddZ!eje"eddddZ#ej eddddZ$ej%eddddZ&ej%eddddZ'ej(eddddZ)eje*eddddZ+ejedddddZ,ej(ed dddZ-ejed!ddddZ.ejed"ddddZ/ejed#ddddZ0ej(ed$dddZ1ejed%d&d'Z2ej3ed(dddZ4ej5ed)dd*Z6ej5ed+dd,Z7 fd-d.Z8d/d0 Z9G d1d2 d2Z:  Z;S )3DevelopmentFilterListr   development_filter_listrp   r   r   Tr   featuredN)r7   r~   r   	availablezready to movesearchr  r   r   r  	districts	postcodesfeaturesareaszonesbedroomsr   zpayment optionszcomplete yearz	min pricez	max pricequeryzdevelopment translater#  r   r   rw  zcanonical urlzseo textzseo text generatedFr6   zseo text generated atr8   r9   r;   r<   c                       t  j|i |S rF   rG   rJ   rM   r#   r$   rI   w  rD   zDevelopmentFilterList.savec                 C   r   rF   rH  rA   r#   r#   r$   rC   z  r   zDevelopmentFilterList.__str__c                   @   s$   e Zd ZedZedZddgZdS )zDevelopmentFilterList.MetazFilter Listr#  rv   NrR   r#   r#   r#   r$   rZ   }  r  rZ   )<rS   rT   rU   r   rw   r   rx   rV   r   r
   r   r	   r   r   r'  r(  ready_to_mover\   r)  r   r   r   r   r*  r   r+  rz   r,  r   r  r   r  r   bedroomr   payment_optionscomplete_yearr_   	min_price	max_pricer   r0  ri  rj  r#  r   r   rw  canonical_urlseo_textseo_text_generatedrg   seo_text_generated_atrj   rk   rl   rI   rC   rZ   rm   r#   r#   rM   r$   r%  P  sD    r%  c                       s   e Zd ZejeejedddZej	eddddZ
ej	eddddZejeddd	Zejed
ddZ fddZdd ZG dd dZ  ZS )DevelopmentDetailrr  development_detailrp   r   Tr   rs  r8   r9   r;   r<   c                    r1  rF   rG   rJ   rM   r#   r$   rI     rD   zDevelopmentDetail.savec                 C   r  rF   r  rA   r#   r#   r$   rC     r  zDevelopmentDetail.__str__c                   @   r  )zDevelopmentDetail.MetazDevelopment DetailzDevelopment Detailsdevelopment__titlerv   NrR   r#   r#   r#   r$   rZ     r  rZ   )rS   rT   rU   r   OneToOneFieldr   rx   rV   rr  r   r   rs  rj   rk   rl   rI   rC   rZ   rm   r#   r#   rM   r$   r<    s    r<  )\r,  r  bs4r   django.contrib.gis.dbr   django.utils.translationr   rV   django.contrib.authr   developer.modelsr   r   development.utilsr   geo_location.modelsr	   r
   r   r   r   r   r   r   main.fieldsr   main.modelsr   django.core.files.baser   django.utils.textr   PILr   ior   django_ckeditor_5.fieldsr   r  r%   CHECK_BOOLEANr  rO  rc  Modelr.   rn   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri  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$   <module>   s    (
	






  4 



















"3