o
     gq                     @   s  d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZ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mZmZ dd	lmZmZmZmZm Z m!Z!m"Z" d d
l#m$Z$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3Z3d dl4m5Z5m6Z6 e37 Z8e3j79  e8:dZ;e8:dZ<e8:dZ=dd Z>dd Z?d(ddZ@dd ZAdd ZBdd ZCd d! ZDd"d# ZEd$d% ZFd&d' ZGdS ))    N)settings)transaction)	Developer)
BuildingTypeTranslateDevelopmentFeatureTranslateFlatONHAreaONHDistrictONHPostcode
ONHStationONHZonePaymentOptionTranslate)flat_bedroom_type)CityTranslateCountryCountryTranslate   )FaqFilterElement
FilterList
FilterTypePromptCheckerSiteMapSiteMapType)
FooterMenuLanguageRequestCallBack)urlparseparse_qs)translate_text_by_google)QCountMaxMin)OpenAI)analyze_phone_numberlog_func
openai_keyopenai_pr_idopenai_org_idc                  C   s  t jjddD ]} | j}| j}| j}| j}| j}d }d }d}|d u r%d}| jd urO|d| jj	 d7 }|d u rD| jj
jdkrBd}nd	}d
}|d u rO| jjj	}| jd urq|d| jj d7 }| jj
jdkrhd}nd	}d}| jjj	}| jd ur|d| jj d7 }| jd ur|d| j d7 }| jd ur|d| j d7 }| jd ur|d| j d7 }| jd ur|d| j d7 }| jd ur|d| j d7 }| jd ur|d| j d7 }t| j}	t|	j}
|s|
dd gd }|s|
dd gd }|s|
dd gd }|s|
dd gd }| j}t|tst|}|ds%d| }t|}d}| j  d| j! d}i d|d| j d| j!d| j"pGd d!d"d#|d$d"d%d&d'|d(| j#d)| j$d*d+d,d-d.d/d0|d1|ppd2d3|pvd4|p{d4|pd4|pd4|pd4|d5}z2t%j||d6d7}|j&d8krd9| _'t(( | _)| *  nt+d:t,j,- .d; d<| j/ d=|j0  W q t1y } zt+d:t,j,- .d; d<| j/ d>|  W Y d }~qd }~ww d S )?NF)send_to_bitrixiJ   z for developer  UAEi 	  ^   i\  z for development iZ  z for flat bathrooms_num z for bedroom z for budget z for purpose z for payment method z for time to move z for page url utm_campaignr   
utm_sourceutm_content
utm_medium+zJhttps://entralon.bitrix24.com/rest/2826/av8cnzg5h89ojuca/crm.lead.add.jsonz - New lead Entralon.comzFIELDS[TITLE]zFIELDS[NAME]zFIELDS[LAST_NAME]zFIELDS[EMAIL][0][VALUE]znull@email.comzFIELDS[EMAIL][0][VALUE_TYPE]WORKzFIELDS[PHONE][0][VALUE]zFIELDS[PHONE][0][VALUE_TYPE]zFIELDS[ASSIGNED_BY_ID]"   zFIELDS[SOURCE_ID]zFIELDS[DATE]zFIELDS[LANGUAGE]zFIELDS[UF_CRM_1677243133]i  zFIELDS[UF_CRM_1589211086364]z   zFIELDS[UF_CRM_1590508686034]i	  zFIELDS[UF_CRM_1733589555558]zFIELDS[UF_CRM_1589201675]i  zFIELDS[UF_CRM_1589201755]zN/A)zFIELDS[UTM_CAMPAIGN]zFIELDS[UTM_SOURCE]zFIELDS[UTM_CONTENT]zFIELDS[UTM_MEDIUM]zFIELDS[COMMENTS]   )paramstimeout   T	error on %Y/%m/%d %H:%M:%Sz : send lead [z] request send: z]: )2r   objectsfiltermessager0   r1   r2   r3   	developernamecountrycodecitydevelopmenttitleflatbathrooms_numbedroom_numbudgetpurposepayment_methodtime_to_movepage_urlr   r   querygetphone_number
isinstancestr
startswithr&   
first_name	last_nameemaildatelanguagerequestsstatus_coder+   time	send_timesaveprintdatetimenowstrftimeidtext	Exception)rcr@   r0   r1   r2   r3   uf_crm_country_codeuf_crm_city_name	source_id
parsed_urlquery_paramsrR   uf_crm_1733589555558base_urlrG   r9   reqe rq   */var/www/Entralon-Web-Backend/main/cron.py	send_lead   s   











	




*4rs   c                  C   s   t jjdd} t jjdd}tjjtddj|  d d	 }|r]z	|j
j|d W n   |j
j||jd Y | D ]"}z	|j
j|d W q<   t|j|jd	}|j
j||d Y q<d S d S )
NenrD   
translatestr_numr   
tr_num__ltrZ   rZ   rB   to_language)r   r>   excluderQ   r   annotater"   r?   countfirstrv   createrB   r    rD   )	languagesbase_languagefstlangt_namerq   rq   rr   footer_menu_translatex   s    &r   gpt-4o-minic              
   C   s   d| d|  d}z/t td}|jjj|dddd|dgd	d
}|jd jj}|dddd}d|d dW S  t	y` } zt
dtj d d| dd | dW  Y d }~S d }~ww )Nz%
    translate the following text to z8 language without changing the meaning of the text:
    z
    api_keysystemzIYou are an experienced real estate consultant with deep market knowledge.rolecontentusergffffff?modelmessagestemperaturer   z```htmlr,   z```F)errorr   	error_txtr<   r=   z : in text translate error : T)r%   r(   chatcompletionsr   choicesr@   r   replacerf   r`   ra   rb   rc   )re   rZ   r   promptclientr   generated_textrp   rq   rq   rr   text_translate   s0   r   c               
   C   sJ  t jjdd} t jjdd}tjjtddj|  d d	 }|rz	|j
j|d W n   |j
j||j|jd Y d	}| D ]U}z	|j
j|d W q@   t|j|j}|d
 rktd|j d|j d d}Y q@t|j|j}|d
 rtd|j d|j d d}Y q@|j
j||d |d d Y q@|rd	|_|  d S d S d S )Nrt   ru   rv   rw   r   ry   r{   )rZ   questionanswerTr   r<   z translate answer to z	 languageFz translate question to r   )rZ   r   r   )r   r>   r   rQ   r   r   r"   r?   r   r   rv   r   r   r   r   rB   r`   rd   rD   is_translatedr_   )r   r   r   successr   r   r   rq   rq   rr   faq_translate   s:   &r   c            
   
   C   s   t jtddtddB  } | r{g }| j}|r!|d|d | j}|r.|d|d | j}| j	}z t
td}|jjj|||d	}|jd
 jj}|| _|   W d S  tyz }	 ztdtj d d| j d|	 W Y d }	~	d S d }	~	ww d S )NT)response__isnullr,   )responser   r   r   r   r   r   r<   r=   z : prompt checker [z] : )r   r>   r?   r!   r   user_promptappendsystem_promptai_modelr   r%   r(   r   r   r   r   r@   r   r   r_   rf   r`   ra   rb   rc   rd   )
pcr   r   r   r   r   r   r   r   rp   rq   rq   rr   prompt_checker   s8    4r   c               
   C   s  t |d}tj|}tjj| |d\}}d|j }| j}tj	dd|}t
jjdd\}	}|j  |D ]}tjj||	|d d|d  |d	\}
}|j|
 q8tj	dd|}t
jjd
d\}	}|j  |D ]}tjj||	|d d|d  |d	\}
}|j|
 qotj	dd|}t
jjdd\}	}|j  |D ]}tjj||	|d d|d  |d	\}
}|j|
 qtj	dd|}t
jjdd\}	}|j  |D ]}tjj||	|d |d  |d	\}
}|j|
 qtj	dd|}t
jjdd\}	}|j  |D ]}tjj||	|d d|d  |d	\}
}|j|
 qtjdd	ddj| |ddd}t
jjdd\}	}|j  |D ]}tjj||	|d d|d  |d	\}
}|j|
 qVtjdd	ddj| |ddd}t
jjdd\}	}|j  |D ]}tjj||	|d d|d  |d	\}
}|j|
 qtjdd	dddj| |djg dd }t
jjdd\}	}|j   |D ]}tjj||	|d d |d  |d	\}
}|j |
 qt!jj|d!d"j"t#d#t$d#d$}t
jjd%d\}}t
jjd&d\}}ztjj%||d'|d(}
|d&  |
_&|
|_'W n$ t(y[ } ztjj)|||d&  d'|d	}
|
|_'W Y d }~nd }~ww ztjj%||d)|d(}
|d%  |
_&|
|_*W n$ t(y } ztjj)|||d%  d)|d	}
|
|_*W Y d }~nd }~ww t!jj|d*d+ }t
jjd,d\}	}|j+  t,t-t.|j/d-d.d/}|D ]'}|d0k rt0||n|}d1| }tjj||	|||d	\}
}|j+|
 qd2d3d4d5d6}t
jjd7d\}	}|j1  tjj||	|| d8|d	\}
}|j1|
 t2j23 }t,t-t.tjj|j4|d9j/d:d.d/}|D ]}tjj||	|d;| |d	\}
}|j+|
 q*d S )<NrE   )rZ   rE   zcity-rB   slugpostcode)rB   zzipcode-)rZ   typerB   r   rE   areazarea-districtz	district-zonestationzstation-rZ   payment_optionpayment_option__slugrZ    payment_option__developments__inzpay_opt-building_typebuilding_type__slug)rZ   building_type__developments__inzbuild_type-featurefeature__slugfeature__iconrZ   .feature__development_features__development__infloorszproperty-typeflatsslug__inzkey_feature-r   )development__inbase_price__gt
base_price)	min_price	max_pricer   r   z	price-max)rZ   r   r   rE   z	price-min'  r   bedrooms_num__ltbedroombedrooms_numTrH   r   zbedroom-zReady To Moveu   آماده سکونتu   جاهزة للسكنu"   Готовая к переезду)rt   faarrucompletion_datezcompletion-ready-to-move)completed_at__year__gterE   completed_at__yearzcompletion-)5r!   r   r>   r?   r   get_or_creater   rD   r   valuesr   r   clearr   addr	   r   r
   r   r   r   r   r   r   select_relatedorder_bydistinctr   r   r   r   r   key_featurer   	aggregater$   r#   rQ   rB   r   rf   r   r   r   sortedsetlistvalues_listr   r   ra   rb   year) rZ   rE   fdevelopmentsfl_	city_slugl_coder   el_typefer   	districtsr   r   r   payment_optionsr   building_typesr   featuresr   pricesmin_typemax_typerp   r   lb_nameb_slugrv   rb   rq   rq   rr   filter_list   s   

(
(
(
$
(,
(,
(2
("





( r   c                  C   s6   t j } | D ]}|j }|D ]}t|| qqd S )N)r   r>   allr   )r   rZ   rE   citiesrq   rq   rr   create_filter_listC  s   

r   c                 C   s(   d}| j dkr|}|S t|| j d}|S )Nr,   rt   r}   )rD   r    )rZ   rG   outrq   rq   rr   translate_typeK  s   
r   c            B         sV  t j } | D ]  z
tjj ddW n   tjj dt ddY  fdddD }tjj|dd	 z
tjj d
dW n   tjj d
t ddY t	jj
dddddddd} fdd|D }tjj|dd	 z
tjj ddW n   tjj dt ddY  fddtjj
ddD }tjj|dd	 z
tjj dd}W n   tjj dt dd}Y z
tjj dd}W n   tjj dt dd}Y z
tjj dd}W n   tjj dt dd}Y z
tjj dd}W n   tjj dt dd}Y z
tjj dd}	W n   tjj dt dd}	Y z
tjj dd}
W n   tjj dt d d}
Y z
tjj d!d}W n   tjj d!t d"d}Y z
tjj d#d}W n   tjj d#t d$d}Y z
tjj dd}W n   tjj dt d%d}Y z
tjj d&d}W n   tjj d&t d'd}Y z
tjj d(d}W n   tjj d(t d)d}Y z
tjj d*d}W n   tjj d*t d+d}Y z
tjj d,d}W n   tjj d,t d-d}Y z
tjj d.d}W n   tjj d.t d/d}Y z
tjj d0d}W n   tjj d0t d1d}Y z
tjj d2d}W n   tjj d2t d3d}Y z
tjj d4d}W n   tjj d4t d5d}Y z
tjj d6d}W n   tjj d6t d7d}Y z
tjj d8d}W n   tjj d8t d9d}Y z
tjj d:d}W n   tjj d:t d;d}Y z
tjj d<d}W n   tjj d<t d=d}Y z
tjj d>d}W n   tjj d>t d?d}Y z
tjj d@d}W n   tjj d@t dAd}Y z
tjj dBd}W n   tjj dBt dCd}Y z
tjj dDd}W n   tjj dDt dEd}Y z
tjj dFd}W n   tjj dFt dGd}Y z
tjj dHd}W n   tjj dHt dId}Y z
tjj dJd} W n   tjj dJt dKd} Y z
tjj dLd}!W n   tjj dLt dMd}!Y z
tjj dNd}"W n   tjj dNt dOd}"Y z
tjj dPd}#W n   tjj dPt dQd}#Y z
tjj dRd}$W n   tjj dRt dSd}$Y z
tjj dTd}%W n   tjj dTt dUd}%Y z
tjj dVd}&W n   tjj dVt dWd}&Y z
tjj dXd}'W n   tjj dXt dYd}'Y z
tjj dZd}(W n   tjj dZt d[d}(Y z
tjj d\d})W n   tjj d\t d]d})Y tjj
 dd^d}*|*D ]}+d_ j d`|+j },|j
|+jda}-tjj
 |-dbdcdd }.tjj
 |-dejg dfdgdcdh }/tttjj
|-didjjdkddl}0g }1|1t| dm|+j |, dndodp tjj
|+jdaD ]}2|, dq|2j }3|1t| dm|2j |3 dndodp qtjj
|+jdaD ]}4|, dr|4j }5|1t| dm|4j |5 dndodp q$tjj
|+jdaD ]}6|, ds|6j }7|1t| dm|6j |7 dndodp qJt jj
|+jdaD ]}8|, d_|8j }9|1t|	 dm|8j |9 dndodp qpt!jj
|+jdaD ]}:|, dt|:j };|1t|
 dm|:j |; dndodp q|0D ]}<|, du|< }=|1t| dvt"|< j |= dndodp q|/D ]}>|, dw|>dh  }?|1t| dv|>dc  |? dndodp q|.D ]}@|, dx|@dd  }A|1t| dv|@dc  |A dndodp q|1r&tjj|1ddydz qqd S ){Ngeneral_pager|   zgeneral pages)rZ   rB   rG   c              
      s:   g | ]\}}}t  t |d  j d | d|dqS )/r   r   rZ   rB   urlprioritychange_frequency)r   r   rD   ).0rB   r   freq)r   type_1rq   rr   
<listcomp>Z  s    z#create_site_map.<locals>.<listcomp>))Homer,   daily)zPrivacy Policyprivacymonthly)zTerms Of Usetermsr
  )FAQfaqr
  )zAbout Usaboutr
  )z
Contact Uscontactr
  T)ignore_conflictsrF   zproperty list)	is_activedeveloper__is_activerC   rE   rA   r   key_featuresc              
      2   g | ]}t  |jd  j d|j dddqS )r   z
/property-?r  r   )r   rG   rD   r   r  dev)r   type_4rq   rr   r  q      
zdevelopers listc              
      r  )r   z/developer-r  r  r   )r   rB   rD   r   r  )r   type_5rq   rr   r  }  r  )r  zcities listr   zdistricts listr   z	area listr   zpostcode listr   z	zone listr   zstation listbedroomszbedrooms listr   zfeature listzpayment option listdistrict_areaz list of district and area filterdistrict_postcodez$list of district and postcode filterdistrict_zonez list of district and zone filterdistrict_stationz#list of district and station filterdistrict_bedroomsz$list of district and bedrooms filterdistrict_featurez#list of district and feature filterdistrict_payment_optionz*list of district and payment option filterarea_postcodez list of area and postcode filter	area_zonezlist of area and zone filterarea_stationzlist of area and station filterarea_bedroomsz list of area and bedrooms filterarea_featurezlist of area and feature filterarea_payment_optionz&list of area and payment option filterpostcode_zonez list of postcode and zone filterpostcode_stationz#list of postcode and station filterpostcode_bedroomsz$list of postcode and bedrooms filterpostcode_featurez#list of postcode and feature filterpostcode_payment_optionz*list of postcode and payment option filterzone_stationzlist of zone and station filterzone_bedroomsz list of zone and bedrooms filterzone_featurezlist of zone and feature filterzone_payment_optionz&list of zone and payment option filterstation_bedroomsz#list of station and bedrooms filterstation_featurez"list of station and feature filterstation_payment_optionz)list of station and payment option filterbedrooms_featurez#list of bedrooms and feature filterbedrooms_payment_optionz*list of bedrooms and payment option filterfeature_payment_optionz)list of feature and payment option filter)rZ   city__is_featuredr   z/city-r   r   rB   r   r   r   r   r   r   r   r   r   znew property in g333333?r  r   z
/district-z/area-z	/zipcode-z	/station-z	/bedroom-znew property with z/key_feature-z	/pay_opt-i  )r  
batch_size)#r   r>   r   r   rQ   r   r   r   bulk_creater   r?   r   prefetch_relatedr   r   rD   r   rE   r   r   r   r   r   r   r   r   r   r   rB   r
   r	   r   r   r   r   )Br   
main_pagesr   development_mapsdeveloper_mapstype_3type_6type_7type_8type_9type_10type_11type_12type_13type_14type_15type_16type_17type_18type_19type_20type_21type_22type_23type_24type_25type_26type_27type_28type_29type_30type_31type_32type_33type_34type_35type_36type_37type_38type_39type_40type_41r   rE   city_urlcity_developmentsr   r   r  sitemap_batchr   district_urlr   area_urlr   postcode_urlr   zone_urlr   station_urlbnbedrooms_urlr   feature_urlr   payment_option_urlrq   )r   r  r  r  rr   create_site_mapS  sH  

                                        
$(((((.	**  rp  c            
   	   C   s  d} | d7 } t jd }tj|st| tj }d}|D ]}|j	}|j
j}| d7 } | d| d| d| d	7 } | d
tj d d7 } | d7 } d}|d7 }tjj|dD ]'}|d7 }|d| |j d7 }|d|j d7 }|d|j d7 }|d7 }qY|d7 }t| d| d| dddd}	|	| W d    n1 sw   Y  q| d7 } t| dddd}	|	|  W d    d S 1 sw   Y  d S )Nz'<?xml version="1.0" encoding="UTF-8"?>
zC<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
z../sitemapszhttps://entralon.comz  <sitemap>
z	    <loc>z/sitemaps/sitemap_r   z.xml</loc>
z    <lastmod>z%Y-%m-%dz</lastmod>
z  </sitemap>
z=<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
)r   z  <url>
z</loc>
z    <changefreq>z</changefreq>
z    <priority>z</priority>
z	  </url>
z	</urlset>z	/sitemap_z.xmlwzutf-8)encodingz</sitemapindex>z/sitemap.xml)r   BASE_DIRospathexistsmakedirsr   r>   r   rB   rZ   rD   ra   rb   rc   r   r?   r   r  r  openwrite)
main_sitemapmain_dirsitemap_typesrn   map_type	type_namer   type_sitemapsitemapr   rq   rq   rr   create_sitemap_filew  s>   



""r  )r   )Hra   rt  r]   django.confr   r[   	django.dbr   developer.modelsr   development.modelsr   r   r   r   r	   r
   r   r   r   r   development.utilsr   geo_location.modelsr   r   r   modelsr   r   r   r   r   r   r   main.modelsr   r   r   urllib.parser   r   data_scraper.utilsr    django.db.modelsr!   r"   r#   r$   openair%   environ
main.utilsr&   r'   Envenvread_envrT   r(   r)   r*   rs   r   r   r   r   r   r   r   rp  r  rq   rq   rq   rr   <module>   sF   0$



\
i  &