
    fi*                        S SK JrJr  S SK JrJrJr  S SKJr  S SKJrJ	r	J
r
  SSKJrJrJrJr  S SKJrJrJrJr  S SKJrJr  S S	KJr  S S
KJr  S SKJrJr  S SKJr  S SK J!r!  S SK"J#r#  S r$\$S 5       r%\$S 5       r&\$S 5       r'\$S 5       r(\$S 5       r)\$S 5       r*\$S 5       r+S SK JrJr  S SKJr  S SK,J-r-  S SKJr  S SKJ	r	  S SK JrJrJr  S SKJr  S SKJr  SSK.J	r	  S SK JrJrJr  S SKJr  S S	KJr  S SK J/r/  S SK JrJrJr  S SKJr  S SKJr  SSK.J	r	  \$S 5       r0S r1\$S 5       r2S r3\$S  5       r4S SK JrJrJr  S SKJr  S S!K5J6r6  SS"K.J
r
  \$S# 5       r7S SK JrJrJr  S SKJr  S S!K5J6r6  SS"K.J
r
  \$S$ 5       r8\$S% 5       r9\$S& 5       r:S S'K JrJrJr  SS(K.J
r
J;r;  \$S) 5       r<\$S* 5       r=\$S+ 5       r>\$S, 5       r?S SK JrJrJr  S SKJr  SS-K.J@r@  S SK JrJrJr  S SKJr  SS.K.J@r@J
r
JArA  \$S/ 5       rB\$S0 5       rC\$S1 5       rD\$S2 5       rE\$S3 5       rFS S4KJrJ	r	J
r
J@r@  S S5K Jr  \$S6 5       rG\$S7 5       rH\$S8 5       rIS SK JrJrJr  SS9K.JJrJ  S SKJr  \$S: 5       rK\$S=S< j5       rLg;)>    )renderHttpResponse)r   redirectget_object_or_404)messages)BannerAdminService   )
BannerForm	AdminFormServiceFormServiceImageForm)CaseWhenValueIntegerField)authenticatelogin)User)Token)make_passwordcheck_password)logout)	DataErrorwrapsc                 0   ^  [        T 5      U 4S j5       nU$ )Nc                 R   > SU R                   ;  a  [        S5      $ T" U /UQ70 UD6$ )Nadmin_idadmin_login)sessionr   )requestargskwargs	view_funcs      ,C:\admin_panel\Admin_page\ad_static\views.pywrapper%admin_login_required.<locals>.wrapper   s/    W__,M**242622    r   )r&   r(   s   ` r'   admin_login_requiredr+      s!    
93 3 Nr*   c                     [        U S5      $ )Nbackend/dashboard/home1.htmlr   r#   s    r'   home1r0          '9::r*   c                     [        U S5      $ )Nz backend/dashboard/analytics.htmlr.   r/   s    r'   	analyticsr3      s    '=>>r*   c                     [        U S5      $ )Nzbackend/dashboard/users.htmlr.   r/   s    r'   usersr5   #   r1   r*   c                     [        U S5      $ )Nzbackend/dashboard/settings.htmlr.   r/   s    r'   settingsr7   '   s    '<==r*   c                     [        U S5      $ )Nbackend/dashboard/banner.htmlr.   r/   s    r'   bannerr:   +   s    ':;;r*   c                     [        U S5      $ )Nbackend/dashboard/admin.htmlr.   r/   s    r'   adminr=   /   r1   r*   c                    [        [        S[        S5      S9[        S[        S5      S9[        S[        S5      S9[        S[        S5      S9[        S[        S5      S9[        S[        S5      S9[        5       S9n[        R
                  R                  / S	QS
9R                  U5      S S n[        5       nSSSSSSS	.nU H  nUR                  UR                  S5      Ul        UR                  (       a1  [        UR                  5      S:  a  UR                  S S S-   Ul        OUR                  Ul        UR                  (       a2  [        UR                  5      S:  a  UR                  S S S-   Ul        M  UR                  Ul        M     SnU R"                  S:X  Ga  U R$                  R                  SS5      nU R$                  R                  SS5      nU R$                  R                  SS5      n	[        U5      S:  a3  Sn[        U R$                  U R&                  5      n[)        U SUUUS.5      $  SU R$                  ;   Gay  U R$                  R                  S5      n
[+        [        U
S9nU R$                  R                  S5      Ul        U R$                  R                  S5      Ul        U R$                  R                  S5      Ul        U R&                  R                  S 5      (       a  U R&                  S    n/ S!QnUR.                  R1                  S"5      S#   R3                  5       nUR4                  S$:  a"  [6        R8                  " U S%5        [;        S&5      $ X;  a"  [6        R8                  " U S'5        [;        S&5      $ Xl        UR?                  5         [6        R@                  " U S(5        [;        S&5      $ [        U R$                  U R&                  5      nURC                  5       (       a2  UR?                  5         [6        R@                  " U S)5        [;        S&5      $  [        5       n[)        U SUUS+.5      $ ! [D         a%    [6        R8                  " U S*5        [;        S&5      s $ f = f),Nr   )typethen               )output_field)r   rA   rB   rC   rD   rE   )type__inHomeAboutServicesProjectsVaastuContactUnknown   z...(    POSTtitlesubtitlecontent   z&Subtitle must be under 255 characters.r9   )bannersformsubtitle_error	banner_ididimage)jpgjpegpnggif.i    z%Image file size must not exceed 2 MB.banner_pagez3Only image files (JPG, JPEG, PNG, GIF) are allowed.zBanner updated successfully!zBanner added successfully!z(Data too long. Please shorten your text.)rW   rX   )#r   r   r   r   r   objectsfilterorder_byr   getr?   	type_namerS   lenshort_titlerT   short_subtitlemethodrR   FILESr   r   rU   namesplitlowersizer   errorr   r]   savesuccessis_validr   )r#   orderingrW   rX   type_name_mapr:   rY   rS   rT   rU   rZ   r]   valid_extensionsexts                 r'   banner_listr{   5   s    !%(#!%(#!%(#!%(#!%(#!%(#!^H nn##-?#@II(STVUVWG<D M (,,V[[)D<<C-2!'cr!2U!:F!'F??s6??3b8$*OOCR$85$@F!$*OOF!  N~~  "-<<##J3,,""9b1 x=3ENgllGMM:D'#B""0E  
(	+gll*#LL,,[9	*6i@&||//8"),,"2"2:">!(!1!1)!< ==$$W--#MM'2E'D$****3/399;CzzO3 w0WX'662 w0ef'66#(L  *HI.. "',,>==??IIK$$W.JK#M22 # <D':=    	+NN7$NOM**	+s&   =D*Q	 (&Q	 7Q	 A&Q	 	,Q87Q8)r   r   )get_messages)r   )r	   )IntegrityErrorc                 \   [         R                  R                  5       R                  S5      nU0 SS 0 S S.nU R                  S:X  Ga  U R
                  R                  S5      nU R
                  R                  SS5      R                  5       nU R
                  R                  SS5      R                  5       nU R
                  R                  S	S5      R                  5       nU R
                  R                  S
S5      R                  5       nU R
                  R                  SS5      R                  5       n0 n	UUUS.n
U(       d  SU	S'   U(       d  SU	S'   OB[         R                  R                  US9R                  US9R                  5       (       a  SU	S'   U(       a)  UR                  5       (       a  [        U5      S:w  a  SU	S	'   U(       d$  U(       d  SU	S
'   U(       d  SU	S'   O=Xx:w  a  SUS'   O2U(       d  U(       a$  U(       d  SU	S
'   OU(       d  SU	S'   O
Xx:w  a  SUS'   U	(       d
  US   (       a&  XS'   XS'   U(       a  X2S'   OSUS'   [        U SU5      $ U(       ai  [        [         US9nXKl        X[l        U(       a  UOS Ul        U(       a  [%        U5      Ul        UR)                  5         [*        R,                  " U S5        OJ[         R                  R/                  UUU(       a  UOS [%        U5      SS 9  [*        R,                  " U S!5        [1        S"5      $ [        U SU5      $ )#N-idF)adminsform_errorsshow_add_modaledit_admin_idold_form_datapassword_errorrR   r    ro   rQ   email
contact_nopasswordconfirm_password)ro   r   r   Name is required.Email is required.r   r[   Email already exists.
   zEnter a valid 10-digit number.Password is required.zConfirm password is required.Passwords do not match.r   z.Password is required when confirming password.r   r   r   Tr   r<   zAdmin updated successfully.)ro   r   r   r   statuszAdmin added successfully.
admin_list)r	   re   allrg   rm   rR   rh   striprf   excludeexistsisdigitrj   r   r   ro   r   r   r   r   rt   r   ru   creater   )r#   r   contextr    ro   r   r   r   r   r   r   r=   s               r'   r   r      s   ]] ))%0F G ~~<<##J/||+113  "-335\\%%lB7==?
<<##J399;"<<++,>CIIK$
 "5K#7K ]]!!!.66(6CJJLL#:K %%''3z?b+@,LL) *AJ'#2Q./-,E()+.^K
+)6UK 2310IG,-
 '"23%0M"'4O$+3(,0() '#A7KK %e9EJK-7zTE!.x!8JJLW&CDMM  )3:&x0 !  W&AB %% '97CCr*   c                 t   0 nU R                   S:X  Ga]  U R                  R                  S5      nU R                  R                  S5      nX!S'   S nS nU(       d  SnU(       d  SnU(       d  U(       a  XAS'   XQS'   [        U SU5      $  [        R
                  R                  US	9nUR                  (       d"  [        R                  " U S5        [        S5      $ [        X6R                  5      (       am  UR                  U R                  S'   UR                  U R                  S'   UR                   U R                  S'   [        R"                  " U S5        [        S5      $ SUS'   [        U SU5      $ [        U SU5      $ ! [        R                   a%    [        R                  " U S
5        [        S5      s $ f = f)NrR   r   r   r   r   email_errorr   zbackend/dashboard/login.htmlr   zInvalid email or password!r!   z0Your admin account is inactive. Contact support.r    
admin_nameadmin_emailzLogin successful!	dashboardzInvalid password.)rm   rR   rh   r   r	   re   DoesNotExistr   rs   r   r   r   r   r\   r"   ro   r   ru   )r#   r   r   r   r   r   	admin_objs          r'   r!   r!   g  s   G~~  )<<##J/  .K4N.%0M"(6$%'#A7KK	+)))6I NN7$VWM** ($6$677*3,,GOOJ',5NNGOOL)-6__GOOM*W&9:K(((;G$%'#A7KK '97CC1 !! 	+NN7$@AM**	+s   E> >6F76F7c                     [        [        US9nUR                  (       + Ul        UR                  5         [	        S5      $ )Nr[   r   )r   r	   r   rt   r   )r#   r\   r=   s      r'   toggle_statusr     s0    e+E||#EL	JJLL!!r*   c                    U R                   S:X  Gap  U R                  R                  S5      nU R                  R                  S5      nU R                  R                  S5      nU R                  R                  S5      n0 nXS.nU(       d  SUS'   U(       d  SUS'   U(       d  S	US'   U(       d  S
US'   O
X4:w  a  SUS'   [        R                  R                  US9R                  5       (       a  SUS'   U(       a  [        U SUUS.5      $ [        R                  R                  UU[        U5      SS9u  px[        R                  R                  UU[        U5      S9u  p[        R                  " U S5        [        S5      $ [        U S5      $ )NrR   ro   r   r   r   )ro   r   r   r   r   zConfirm your password.r   r   r   zbackend/dashboard/register.html)r   oldT)ro   r   r   r   )usernamer   r   zRegistration successful!r!   )rm   rR   rh   r	   re   rf   r   r   get_or_creater   r   r   ru   r   )
r#   ro   r   r   r   r   old_datar=   createdusers
             r'   admin_registerr     s   ~~||'  )<<##J/"<<++,>? 1 "5K#7K &=K
#.FK*+).GK*+==e,3355#:K '#D*G   44"8,	 5 
 22"8, 3 
 	"<=&&'<==r*   c                 
   U R                   R                  (       a"  [        SU R                   R                  S.5        [	        U 5        U R
                  R                  5         [        R                  " U S5        [        S5      $ )Nadmin_logout)eventby_userzLogged out successfully.r!   )
r   is_authenticatedprintr\   r   r"   flushr   ru   r   r/   s    r'   r   r     s_    ||$$#||
 	 7OOOW89M""r*   )slugify)r
   c                 z    [         R                  R                  5       R                  S5      n[	        U SSU05      $ )Nr   zbackend/dashboard/service.htmlservices)r
   re   r   rg   r   )r#   r   s     r'   service_listr     s4    ""$--e4H';j(=STTr*   c                 @   / SQnU R                   S:X  Ga  U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S	5      S
.n0 nSSSSSSSS
.R                  5        H  u  pEX$   (       a  M  U S3X4'   M     SU R                  ;  a  SUS'   SU R                  ;  a  SUS'   U(       a  [        U SUUUS S.5      $  [        R                  R                  US   US   US   US   US   US   US	   U R                  S   U R                  S   S9	n[        R                  " U S5        [        S5      $ [        U SS Vs0 s H  oS_M     sn0 US S.5      $ ! [         a-  nS[        U5       3US'   [        U SUUUS S.5      s S nA$ S nAff = fs  snf ) N))r   
Commercial)rA   Retail)rB   ResidentialrR   service_titledescriptionslugdetail_page_titlerU   	seo_titleseo_descriptionr   r   r   r   rU   r   r   Service titleDescriptionSlugDetail page titleContent	SEO titleSEO description is required.featured_imageFeatured image is required.r]   Main image is required.#backend/dashboard/service_edit.html)	form_dataerrorsSERVICE_TYPE_CHOICESservice)	r   r   r   r   rU   r   r   r   r]   zService added successfully!r   zError saving service: general)r   r   r   r   rU   service_typer   r   rQ   )rm   rR   rh   itemsrn   r   r
   re   r   r   ru   r   	Exceptionstr)	r#   r   r   r   fieldlabelr   eks	            r'   service_addr     sl    ~~$\\--o>"<<++M:LL$$V,!(!1!12E!F||''	2 ))+6&||//0AB	
	  -(!4 $0	
 %'	LE ###(' 7	 7==0'DF#$'--'7F7O '#H& (<	K  	oo,,'8%m4v&"+,?"@!),#K0 )*; <&}}-=>mmG, - G W&CDN++ '@&
  &
e &
   4C    	"8Q AF9'#H& (<	K  	s%   A5G! 	H!
H+"HHHc           	      t   [        [        US9n[        R                  n0 nU R                  S:X  Gau  U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S5      U R                  R                  S	5      S
.nU R                  R                  S5      nU R                  R                  S5      nSSSSSSSS
.R                  5        H  u  pXX   (       a  M  U	 S3XH'   M     U(       d  UR                  (       d  SUS'   U(       d  UR                  (       d  SUS'   US   (       a  [        US   5      O[        US   5      n
[        R                  R                  U
S9R                  UR                  S9R                  5       (       a  SUS'   U(       a  [!        U SUUUUS.5      $ US   Ul        US   Ul        Xl        US   Ul        US   Ul        US   Ul        US	   Ul        U(       a  Xbl        U(       a  Xrl	        UR1                  5         [2        R4                  " U S5        [7        S5      $ UU0 S.n[!        U SU5      $ )Nr[   rR   r   r   r   r   rU   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   )r   z(Slug already exists for another service.r   )r   r   r   r   zService updated successfully!r   )r   r   r   )r   r
   r   rm   rR   rh   rn   r   r   r]   r   re   rf   r   r\   r   r   r   r   r   r   rU   r   r   rt   r   ru   r   )r#   r\   r   r   r   r   r   r]   r   r   r   r   s               r'   service_editr   i  s   B/G"77F~~$\\--o>"<<++M:LL$$V,!(!1!12E!F||''	2 ))+6&||//0AB	
	 !**+;<!!'* -(!4 $0	
 %'	LE ###(' 7	 g&<&<'DF#$W]]7F7O .7v->wy()GIVeLfDg??!!t!,44

4CJJLLGF6N '#H" &(<	K   !*/ :'6$-.A$B!#I.%k2"+,=">%3"!M"AB''  4G
 '@'JJr*   c                     [        [        US9nUR                  (       + Ul        UR                  5         [        R
                  " U SUR                  (       a  SOS S35        [        S5      $ )Nr[   zService status updated to ActiveInactiverb   r   )r   r
   r   rt   r   ru   r   )r#   r\   r   s      r'   toggle_service_statusr   c  sU    B/G 'GNLLNW :w~~8[e:ffghiN##r*   )r   r   r   )r
   ServiceImagec                 r    [        [        US9nUR                  R                  5       n[	        U SUUS.5      $ )Nr[   z'backend/dashboard/service_sub_list.html)r   images)r   r
   r   r   r   )r#   
service_idr   r   s       r'   service_image_listr   q  s>    J7G^^!F'DG  r*   c                 N   [        [        US9nU R                  S:X  ao  [        U R                  U R
                  5      nUR                  5       (       a9  UR                  SS9nX$l        UR                  5         [        SUR                  S9$ O
[        5       n[        U SX2S.5      $ )	Nr[   rR   F)commitr   r   "backend/dashboard/service_img.html)rX   r   )r   r
   rm   r   rR   rn   rv   rt   r   r   r\   r   )r#   r   r   rX   r]   s        r'   service_image_addr   y  s    J7G~~gmm<==??IIUI+E#MJJL0WZZHH	   !'?$Acddr*   c                 Z   [        [        US9nU R                  S:X  as  SU R                  ;   a  U R                  S   Ul        U R
                  R                  SS5      Ul        UR                  5         [        SUR                  R                  S9$ [        U SUR                  US	S
.5      $ )Nr[   rR   r]   long_descriptionrQ   r   r   r   Edit)r   r]   action)r   r   rm   rn   r]   rR   rh   r   rt   r   r   r\   r   )r#   image_id	image_objs      r'   service_image_editr     s    !,8<I~~gmm#%mmG4IO%,\\%5%56H"%M	",9J9J9M9MNN'?YM^M^ir  ~D  BE  F  Fr*   c                 ~    [        [        US9nUR                  R                  nUR	                  5         [        SUS9$ )Nr[   r   r   )r   r   r   r\   deleter   )r#   r   r   r   s       r'   service_image_deleter     s9    !,8<I""%%J(Z@@r*   )Gallery)r   r
   Enquiryc                 z    [         R                  R                  5       R                  S5      n[	        U SSU05      $ )Nr   #backend/dashboard/gallery_list.html	galleries)r   re   r   rg   r   )r#   r   s     r'   gallery_listr     s>     ##%..u5I'@YC  r*   c                     [        [        US9n[        R                  R	                  5       R                  S5      n[        U SUUS.5      $ )Nr[   r   r   )r   r   )r   r
   r   re   r   rg   r   )r#   r   r   r   s       r'   gallery_list1r     sI    J7G##%..u5I'@C  r*   c           	         [        [        US9nU R                  S:X  a  U R                  R	                  S5      nU R                  R	                  S5      nU R                  R	                  S5      nU R                  R	                  S5      nU R
                  R                  S5      nU H,  n[        R                  R                  UUUUUS:X  a  S	OS
S9  M.     [        R                  " U S5        [        S5      $ [        U SSU05      $ )Nr[   rR   rS   r   thumbnail_textr   r   1TF)rS   r   r   r]   r   zImage added successfully!r   "backend/dashboard/gallery_add.htmlr   )r   r
   rm   rR   rh   rn   getlistr   re   r   r   ru   r   r   )	r#   r   r   rS   r   r   r   r   imgs	            r'   gallery_addr    s    J7G~~  )((9 !))*:;!!(+&&x0 COO""-%}t% #   	"=>'''?GB  r*   c                    [        [        US9nU R                  S:X  a  U R                  R	                  S5      Ul        U R                  R	                  S5      Ul        U R                  R	                  S5      S:X  a  SOSUl        S	U R                  ;   a  U R                  S	   Ul	        UR                  5         [        R                  " U S
5        [        S5      $ [        U SSU05      $ )Nr[   rR   rS   r   r   r   TFr   zGallery updated successfully!r   r   gallery)r   r   rm   rR   rh   rS   r   r   rn   r]   rt   r   ru   r   r   r#   r\   r  s      r'   gallery_editr    s    B/G ~~((1!(!1!12B!C!(!1!1(!;s!Bw}}$#MM(3GM"AB'''?7B  r*   c                     [        [        US9nUR                  (       + Ul        UR                  5         [        R
                  " U S5        [        S5      $ )Nr[   Status updated successfully!r   )r   r   r   rt   r   ru   r   r  s      r'   gallery_toggle_statusr
    A    B/G 'GNLLNW<=N##r*   )r   r	   r
   r   r.   c                    [         R                  R                  5       n[         R                  R                  SS9R                  5       n[         R                  R                  SS9R                  5       n[        R                  R                  5       n[
        R                  R                  5       n[        R                  R                  5       n[        U SUUUUSUUS.5      $ )NT)r   Fr-   r   )total_adminsactive_adminsinactive_adminstotal_servicestestimonial_counttotal_gallery_imagestotal_enquiry)r	   re   countrf   r
   r   r   r   )r#   r  r  r  r  r  r  s          r'   r   r   
  s    ==&&(LMM(((5;;=Mmm**%*8>>@O__**,N"??002OO))+M '9$&*( 4'<  r*   c                 z    [         R                  R                  5       R                  S5      n[	        U SSU05      $ )Nz-created_atzbackend/dashboard/enquiry.html	enquiries)r   re   r   rg   r   )r#   r  s     r'   enquiry_listr     s6     ##%..}=I';k9=UVVr*   c                     [        [        US9nUR                  (       + Ul        UR                  5         [        R
                  " U S5        [        S5      $ )Nr[   r	  r  )r   r   r   rt   r   ru   r   )r#   r\   enquirys      r'   enquiry_toggle_statusr  )  r  r*   )
SEOSettingc                 z    [         R                  R                  5       R                  S5      n[	        U SSU05      $ )Nz-updated_atzbackend/dashboard/seo_list.htmlseo_list)r  re   r   rg   r   )r#   r  s     r'   r  r  6  s6    !!%%'00?H'<z8>TUUr*   Nc                    S nU(       a  [        [        US9nU R                  S:X  Ga  U R                  R	                  S5      nU R                  R	                  S5      nU R                  R	                  S5      nU R                  R	                  S5      nU R
                  R	                  S5      nU(       aM  X2l        XBl        XRl        Xbl	        U(       a  Xrl
        UR                  5         [        R                  " U S5        O8[        R                  R                  UUUUUS	9  [        R                  " U S
5        [!        S5      $ [#        U SSU05      $ )Nr[   rR   r   meta_keywordsmeta_descriptionurl_slugr]   z"SEO settings updated successfully.)r   r  r   r!  r]   z SEO settings added successfully.r  zbackend/dashboard/seo_form.htmlseo)r   r  rm   rR   rh   rn   r   r  r   r!  r]   rt   r   ru   re   r   r   r   )r#   seo_idseo_instancer   r  r   r!  r]   s           r'   seo_add_editr%  ;  s$   L(?~~LL$$[1	((9"<<++,>?<<##J/!!'*%.")6&,<)$,!%*"W&JK%%#+!1! &  W&HI
##'<ul>STTr*   )N)Mdjango.shortcutsr   r   r   r   django.contribr   ad_static.modelsr   r	   r
   formsr   r   r   r   django.db.modelsr   r   r   r   django.contrib.authr   r   django.contrib.auth.modelsr   rest_framework.authtoken.modelsr   django.contrib.auth.hashersr   r   r   	django.dbr   	functoolsr   r+   r0   r3   r5   r7   r:   r=   r{   django.contrib.messagesr|   modelsr}   r   r!   r   r   r   django.utils.textr   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>r5     s?   0 @ @ # 3 3 G G < < 3 + 1 E &  
 ; ; ? ? ; ; > > < < ; ;
 ` `R . # 0 5 " A @ # 5  @ @ # + $ @ @ # 5 eD eDL2Dh " "43>j # #$ A @ # %  U U
 A @ # %  T Tp NK NKr $ $ A @ )   e e2 F F A A A @ #  A @ # , ,        B  0 $ $ = < # * W W $ $ A @  #V V !U !Ur*   