
    4h2                     D   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
  S SKJr  S SKJr  S SKJr  S SKrS SKJr  S S	KJr  S S
KJr  S SKJr  SSK7  SSK7  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(J)r)  S SK*J+r+  S r,S r-S r.S r/S r0S r1S r2S r3S r4\S 5       r5\" SS 9S! 5       r6\" SS 9\S" 5       5       r7S# r8\S$ 5       r9S% r:\" SS 9S& 5       r;\S' 5       r<\" SS 9S( 5       r=S) r>S* r?\S+ 5       r@\" SS 9S, 5       rA\S- 5       rB\S. 5       rC\S/ 5       rD\S0 5       rES1 rF\S2 5       rG\S3 5       rHS4 rI\" SS 9S5 5       rJ\ R                  S6 5       rL\ R                  S7 5       rM\" SS 9S8 5       rN\\S9 5       5       rO\\S: 5       5       rPS; rQ\S< 5       rR\" SS 9S= 5       r\S> 5       rSS? rT\S@ 5       rU\SA 5       rV\\SB 5       5       rW\SC 5       rXSD rY\\" SS 9SE 5       5       rZ\\" SS 9SF 5       5       r[SG r\SSHKJ]r]  \SI 5       r^\SJ 5       r_SK r`g)L    )renderredirectget_object_or_404)logoutauthenticateloginupdate_session_auth_hash)JsonResponse)csrf_exempt)validate_password)ValidationErrorN)reverse)get_user_model)messages)login_required   )*)require_POST)timezone)transaction)ExistsOuterRefSum)
parse_date)date	timedelta)	send_mailc                     [         R                  R                  SS9R                  S5      S S n[        R                  R                  SS5      R                  S5      S S nUUS.n[        U S	U5      $ )
Nr   )total_rooms__gt-created_at   userhotel   )
room_typesrecent_reviewszjanka_web_app/home.html)RoomTypeobjectsfilterorder_byReviewselect_relatedr   )requestr%   r&   contexts       7D:\Anime\Ugyen\janka_web_project\janka_web_app\views.pyhomer0      sx    !!(((;DD]STVUVWJ^^2267CLL][\^]^_N (G '4g>>    c                    [         R                  R                  SSS5      R                  5       n[        R                  R                  5       n[         R
                  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 R                  R                  S5      nU R                  R                  S5      n	U(       a   UR                  [        U5      S9nU	(       a   UR                  [        U	5      S9nU(       a  UR                  US	9nU(       a  UR                  US
9nU(       a  UR                  US9nU(       a  UR                  US9nUUUS.n
[        U SU
5      $ ! [         a     Nf = f! [         a     Nf = f)N	dzongkhaggewogvillage	room_type	min_rooms	max_rooms)total_rooms__gte)total_rooms__lte)dzongkhag__dzo_id)gewog__gewog_id)village__village_id)r%   )hotels
dzongkhagsroom_choiceszjanka_web_app/rooms.html)Hotelr(   r,   all	Dzongkhagr@   GETgetr)   int
ValueErrorr   )r-   r>   r?   r@   dzongkhag_idgewog_id
village_idr6   r7   r8   r.   s              r/   roomsrK       s   ]]))+w	JNNPF""&&(J%%L ;;??;/L{{w'H+J,I,I,I	]]C	N]CF 	]]C	N]CF >x8:>)4  $G
 '5w??-  		
  		s$   F+ (F; +
F87F8;
GGc                     0 n[        U S5      $ )Nzjanka_web_app/room-detail.htmlr   r-   r.   s     r/   room_detailsrO   H   s    G';<<r1   c                     0 n[        U S5      $ )Nzjanka_web_app/dining.htmlrM   rN   s     r/   diningrQ   L   s    G'677r1   c                     0 n[        U S5      $ )Nzjanka_web_app/activities.htmlrM   rN   s     r/   
activitiesrS   P   s    G':;;r1   c                     [        U S5      $ )Nzjanka_web_app/spa.htmlrM   r-   s    r/   sparV   S   s    '344r1   c                     [        U S5      $ )Nzjanka_web_app/about-us.htmlrM   rU   s    r/   about_usrX   V   s    '899r1   c                 B   U R                   R                  (       a  [        S5      $ S nU R                  S:X  aY  U R                  R                  S5      nU R                  R                  S5      n[        XUS9nUb  [        X5        SSS.nOS	S
S.n[        U SSU05      $ )Nz
/dashboardPOSTusernamepassword)r[   r\   successz Login successful! Redirecting...)statusmessageerrorzInvalid email or password!zjanka_web_app/signin.htmlalert)	r"   is_authenticatedr   methodrZ   rE   r   r   r   )r-   ra   r[   r\   r"   s        r/   sign_inrd   Y   s    ||$$%%E~~<<##J/<<##J/GJ' (5WXE&3OPE'6%8HIIr1   c                 .    [        U 5        [        S5      $ )N/)r   r   rU   s    r/   sign_outrg   k   s    
7OC=r1   c                     [        [        UU R                  S9nUR                  (       d  SUl        UR	                  S/S9  [        UR                  =(       d    S5      $ )z:
Mark notification as read and redirect to its action_url
)idrecipient_userT	is_viewedupdate_fieldsr0   )r   Notificationr"   rk   saver   
action_url)r-   notif_idnotifs      r/   notification_redirectrs   o   sS    
 ||E ??

+
/ E$$.//r1   z	/sign_in/)	login_urlc                 	   [         R                  " 5       nU[        SS9-
  nSU R                  0nU R                  R                  S:X  Ga  [
        R                  R                  5       n[
        R                  R                  SS9R                  5       n[
        R                  R                  SS9R                  5       n[
        R                  R                  SS9R                  5       n[
        R                  R                  US	9R                  SS
5      R                  S5      S S n[
        R                  R                  SS
5      R                  S5      S S n	[        R                  R                  SS
5      R                  S5      S S n
UR                  [        R                  R                  5       [        R                  R                  5       U[        R                  R                  5       UUUUU	U
S.
5        GOU R                  R                  S:X  Ga:  [        R                  R                  U R                  S9nUR                  SSS9n[
        R                  R                  US9nUR                  5       nUR                  SS9R                  5       nUR                  SS9R                  5       nUR                  SS9R                  5       nUR                  US	9R                  SS
5      R                  S5      S S nUR                  SS
5      R                  S5      S S nUR                  UR                  5       UUUUUUUS.5        GOU R                  R                  S:X  Gay  [
        R                  R                  U R                  S9R                  S
S5      R                  S5      n[        R                  R                  U R                  S9R                  S
5      R                  S5      n[         R                  R                  U R                  S9R                  S5      R                  S5      S S nUR                  SS9R                  5       nUR                  SS9R                  5       nUR                  SS9R                  5       n[         R                  R                  U R                  SS9R                  5       nUR                  UUUUUUUS.5        [#        U SU5      $ )N   )hoursr"   admin	confirmedr^   pending	cancelled)created_at__gter#   r    
      )
total_userstotal_hotelstotal_bookingstotal_reviewsconfirmed_bookingspending_bookingscancelled_bookingsrecent_24h_bookingsrecent_bookingsr&   ownerr"   ri   T)flat)	hotel__in)r   r   r   r   r   r   r   owner_hotelsroom_selectedreceiversenderF)r   read)user_bookingsuser_reviewsrecent_messagesunread_messages_countr   r   r   z!janka_web_app/dashboard/home.html)r   nowr   r"   	user_roleBookingr(   countr)   r,   r*   r+   updateUserrA   values_listMessager   )r-   r   last_24r.   r   r   r   r   r   r   r&   r   owner_hotel_idsowner_bookingstotal_owner_bookingsconfirmed_owner_bookingspending_owner_bookingscancelled_owner_bookingsrecent_24h_owner_bookingsrecent_owner_bookingsr   r   r   r   s                           r/   	dashboardr      s   
,,.CIB''G 	G ||( ..0$__33;3GMMO"??111CIIK$__33;3GMMO%oo44W4M\\]celmvv  xE  F  GJ  HJ  K!//88IRRS`abdcde66vwGPPQ^_`babc<<--/!MM//1,#^^113"4 0"4#6.,
 	 
		7	*}}+++>&224d2C ////J-335#1#8#8#8#L#R#R#T !/!6!6i!6!H!N!N!P#1#8#8#8#L#R#R#T $2$9$9'$9$R$a$abhjq$r${${  }J  %K  LO  MO  %P! . = =fg N W WXe fgihi j(..02": 6":#<4(	
 		 
		6	)..GLL.APPQXZijss  uB  C~~,,',,,?NNwW``ano!//00',,0GVVW_`iijwxy{z{|*111EKKM(//y/AGGI*111EKKM !( 6 6SX 6 Y _ _ a*(.%:"4 0"4
 	 '>HHr1   c           
         U R                   S:X  Gas   U R                  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 R                  R                  SS5      nU R                  R                  SS5      nU R                  R                  S	S
5      nU R                  R                  S5      n	[
        R                  R                  US9R                  5       (       a  [        SSS.SS9$ [
        R                  R                  US9R                  5       (       a  [        SSS.SS9$  [        U5        [
        R                  R                  UUUUUUUS9nU	(       a  Xl        UR!                  5         OUR!                  5          SnSU SU SU SU S3	R#                  5       n[%        UU[&        R(                  U/SS9   [*        R                  R-                  SS UR.                   S!UR.                   S"3S#S$UR.                  S%9  [1        S&5        [        SS UR.                   S-3[;        S.5      S/.5      $ [=        U S15      $ ! [         a3  n
[        SSSR                  U
R                  5      -   S.SS9s S n
A
$ S n
A
ff = f!    N= f! [2         a`  n
[1        S'[5        U
5      R6                   S(U
 35        [        SS)[5        U
5      R6                   S*[9        U
5      S S+  3S.S,S9s S n
A
$ S n
A
ff = f! [2         a#  n
[        SS0[9        U
5      -   S.S,S9s S n
A
$ S n
A
ff = f)2NrZ   	full_namer[   emailr\   phone addressr   r"   profile_picture)r[   FzUsername already exists.r]   r_     rz   )r   zEmail already exists.
Password: , )r[   r   r\   r   r   r   r   z"Welcome to Janka Resort Dashboard!z
                    Hello z,

                    Welcome! Your account has been successfully created on the Janka Resort Dashboard.

                    Here are your login details:
                    Username: z
                    Email: z
                    Password: z

                    You can now log in and start using your account.

                    Best regards,
                    Janka Resort Team
                                    Tsubjectr_   
from_emailrecipient_listfail_silentlyzNew User CreatedzUser 'z' has been added by .
user_eventrx   )titler_   categoryrole_visibility
created_byu&   ✅ Notification created successfully!u"   ❌ Notification creation failed: z: z
DB Error: z - d     z' created successfully!registered_usersr]   r_   redirect_urlAn error occurred: z9janka_web_app/dashboard/user_management/add_new_user.html)rc   r"   rZ   rE   FILESr   r(   r)   existsr
   r   r   joinr   create_userr   ro   stripr   settingsDEFAULT_FROM_EMAILrn   creater[   print	Exceptiontype__name__strr   r   )r-   creatorr   r[   r   r\   r   r   r   r   er"   r   r_   s                 r/   add_new_userr      s    ~~a	llG((5I||''
3HLL$$W-E||''
3HLL$$Wb1Ell&&y"5G((f=I%mm//0ABO ||""H"5<<>>#B\$]fijj||"""/6688#BY$Zcfggu!(+
 <<++!!## , D '6$				>$+ &
  (j )!7 #'j )%( ).   ##'::$)7"&$$++,$T]]O3GHXHXGYYZ[)$+&// ,  >?  #DMM?2IJ '(: ;!   'VWW] # u#,QUQZQZ[\[e[eQfBf$gpsttu^  :47;K;K:LBqcRS#$!+DG,<,<+=SQO%    	 03q69!  	s   D#M 7<M 5J  AM ;K AK %M 
K(K	KM 	KM KM 
M"AL=7M8M =MM 
M2M-'M2-M2c                 z    [         R                  R                  5       R                  S5      n[	        U SSU05      $ )Nr    z=janka_web_app/dashboard/user_management/registered_users.htmlusers)r   r(   rB   r*   r   )r-   r   s     r/   r   r   =  s<    LL''6E'Z]  r1   c                     U R                   S:X  a+  [        [        US9nUR                  5         [	        SS05      $ [	        SSS.5      $ )NrZ   ri   r]   TFInvalid requestr]   r`   )rc   r   r   deleter
   r-   user_idr"   s      r/   delete_userr   C  sD    ~~ '2Y-..E4EFGGr1   c                    U R                   S:X  Ga?  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      Ul        U R                  R                  S5      Ul	        U R                  R                  S	5      Ul
        S
U R                  ;   a  U R                  S
   Ul        UR                  5         [        R                  " U S5        [!        S5      $ g )NrZ   r   r   r   r[   r   r   r   r   r   zUser updated successfully!r   )rc   rZ   rE   r   r   r   r[   r   r   r   r   r   r   ro   r   r]   r   r   s      r/   update_userr   K  s    ~~,,""9- '2 ))+6((4\\%%g.
\\%%g.
||''	2 ))+6-#*==1B#CD 		">?*++!  r1   c                    U R                   nU R                  S:X  aP  [        U R                  U R                  US9nUR                  5       (       a  UR                  5         [        S5      $ O	[        US9nUUS.n[        U SU5      $ )NrZ   instancez/user-settings/?updated=true)formr"   z:janka_web_app/dashboard/user_management/user_settings.html)	r"   rc   UserProfileFormrZ   r   is_validro   r   r   )r-   r"   r   r.   s       r/   user_settingsr   ^  s    <<D~~w||W]]TJ==??IIK:;;  - G 'WY`aar1   c                    U R                   S:X  a   [        R                  " U R                  5      nUR	                  S5      nUR	                  S5      nUR	                  S5      nU R
                  nUR                  U5      (       d  [        SSS.SS	9$ X4:w  a  [        SS
S.SS	9$  [        X55        UR                  U5        UR                  5         [        X5        [        SS[        S5      S-   S.5      $ [        SSS.SS	9$ ! [         a3  n[        SSSR                  UR                  5      -   S.SS	9s S nA$ S nAff = f! [          a#  n[        SS[#        U5      -   S.SS	9s S nA$ S nAff = f)NrZ   old_passwordnew_passwordconfirm_new_passwordFzOld password is incorrect.r   r   rz   zNew passwords do not match.r   r   TzPassword changed successfully!r   z?updated=truer   r   r   zInvalid request method  )rc   jsonloadsbodyrE   r"   check_passwordr
   r   r   r   r   set_passwordro   r	   r   r   r   )r-   datar   r   r   r"   r   s          r/   change_passwordr   r  s   ~~1	::gll+D88N3L88N3L#'88,B#C <<D &&|44#$;%   3#$<%  !,5 l+IIK %W3; ' 8? J!   E6NOX[\\3 # #$+dii

.CC%  &  	 03q69!  	sU   BE E 'D 2AE 
E(D>8E9E >EE 
E3E.(E3.E3c                    [         R                  R                  5       n[        R                  R	                  S5      R                  5       n[
        R                  R	                  SS5      R                  5       nU R                  R                  S:X  a.  [        R                  R                  5       R                  S5      nO6[        R                  R                  U R                  S9R                  S5      nUUUUS.n[        U SU5      $ )Nr3   r4   rx   r    r   )r>   r?   gewogsvillagesz2janka_web_app/dashboard/hotels/add_edit_hotel.html)rC   r(   rB   Gewogr,   Villager"   r   rA   r*   r)   r   )r-   r?   r   r   r>   r.   s         r/   add_edit_hotelr     s    ""&&(J]]))+6::<F--g{CGGIH ||(""$--m< %%7<<%8AA-P  	G 'OQXYYr1   c                    U R                   S:X  Ga   U R                  R                  S5      nU R                  R                  S5      nU R                  R                  SS5      nU R                  R                  S5      nU R                  R                  SS5      nU R                  R                  SS	5      nU R                  R                  S
S	5      nU R                  R                  SS5      nU R                  R                  S5      n	U R                  R                  S5      n
U R                  R                  S5      n[        XXIX/5      (       d  [	        SSS.5      $ [        [        U	S9n[        [        XS9n[        [        XUS9n[        R                  R                  UUUUUUUU[        U5      [        U5      UU R                  S9nSU R                  ;   a  U R                  S   Ul        SU R                  ;   a  U R                  S   Ul        SU R                  ;   a  U R                  S   Ul        SU R                  ;   a  U R                  S   Ul        UR'                  5         [	        SSUR(                   S3UR*                  UR(                  UR,                  UR.                  R(                  UR0                  R(                  UR2                  R(                  UR4                  UR6                  UR8                  S.	S.5      $ [	        SS S.5      $ ! [:         a$  n[	        SS[=        U5       3S.5      s S nA$ S nAff = f)!NrZ   namelocationdescriptionr   contact_numberr   total_roomsr   available_roomshotel_ownerrH   rI   rJ   FzHPlease fill all required fields including Dzongkhag, Gewog, and Village.r   dzo_idrI   r3   rJ   r4   r3   )r   r   r   r3   r4   r5   r   r   r   r   r  r"   
home_imagehotel_image1hotel_image2hotel_image3THotel "z" created successfully!	ri   r   r   r3   r4   r5   r   r   r   r]   r_   r#   zError creating hotel: Invalid request method.)rc   rZ   rE   rB   r
   r   rC   r   r   rA   r(   r   rF   r"   r   r  r  r  r	  ro   r   ri   r   r3   r4   r5   r   r   r   r   r   )r-   r   r   r   r   r   r   r   r  rH   rI   rJ   r3   r4   r5   r#   r   s                    r/   create_hotelr    s   ~~L	<<##F+D||''
3H!,,**="=K$\\--.>?NLL$$Wb1E!,,**=!<K%ll../@!DO!,,**="=K #<<++N;L||''
3H )),7J h[\\#$i%   *)LII%ehTE'J_hiG MM((!'#-, #O 4'\\ ) E  w}},#*==#> .%,]]>%B".%,]]>%B".%,]]>%B"JJL$UZZL0GH((!JJ %!&!5!5"[[--$}}11&+&:&:#(#4#4','<'<
!  , E6OPQQ  	 3CF8<!  	s%   EL "F-L 
M(MMMc                    U R                   S:X  Ga.   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S5      Ul        U R                  R                  S5      Ul        U R                  R                  S	S5      Ul	        [        U R                  R                  S
S5      5      Ul        [        U R                  R                  SS5      5      Ul        U R                  R                  SS5      Ul        U R                  R                  S5      nU R                  R                  S5      nU R                  R                  S5      n[        X4U/5      (       d  [        SSS.5      $ [        [         US9n[        ["        XFS9n[        [$        XWUS9nXbl        Xrl        Xl        SU R,                  ;   a  U R,                  S   Ul        SU R,                  ;   a  U R,                  S   Ul        SU R,                  ;   a  U R,                  S   Ul        SU R,                  ;   a  U R,                  S   Ul        UR7                  5         [        SSUR
                   S3UR8                  UR
                  UR                  UR&                  R
                  UR(                  R
                  UR*                  R
                  UR                  UR                  UR                  S.	S.5      $ [        SS!S.5      $ ! [:         a$  n	[        SS [=        U	5       3S.5      s S n	A	$ S n	A	ff = f)"NrZ   hotel_idr   r   r   r   r   r   r   r   r   r   r  rH   rI   rJ   Fz+Dzongkhag, Gewog, and Village are required.r   r  r  r  r  r  r  r	  Tr
  z" updated successfully!r  r  zError updating hotel: r  )rc   rZ   rE   r   rA   r   r   r   r   r   rF   r   r   r  rB   r
   rC   r   r   r3   r4   r5   r   r  r  r  r	  ro   ri   r   r   )
r-   r  r#   rH   rI   rJ   r3   r4   r5   r   s
             r/   update_hotelr    s   ~~B	||''
3H%e9E !))&1EJ$\\--j9EN ' 0 0 CE#*<<#3#34D#EE !,,**7B7EK #GLL$4$4]A$F GE$'(8(89JA(N$OE! ' 0 0 CE #<<++N;L||''
3H )),7J
;<<#$L%   *)LII%ehTE'J_hiG'OK#M w}},#*==#> .%,]]>%B".%,]]>%B".%,]]>%B"JJL$UZZL0GH((!JJ %!&!5!5"[[--$}}11&+&:&:#(#4#4','<'<
!  , E6OPQQ  	 3CF8<!  	s%   F0M E;M 
M<M71M<7M<c                    U R                   S:X  a<   [        R                  R                  US9nUR	                  5         [        SSS.5      $ [        SSS.5      $ ! [        R                   a    [        SSS.5      s $ f = f)	NrZ   r   TzHotel deleted successfully!r   FzHotel not found.zInvalid request.)rc   rA   r(   rE   r   r
   DoesNotExist)r-   r  r#   s      r/   delete_hotelr  \  s    ~~	SMM%%%2ELLND=Z [\\ E6HIJJ !! 	SE>P QRR	Ss   :A "B ?B c                    [         R                  R                  5       R                  S5      n[        R                  R                  5       R                  S5      n[
        R                  R                  5       R                  S5      n[        R                  R                  5       R                  S5      nXX4S.n[        U SU5      $ )Nr   )r?   r   r   gallery_categoriesz)janka_web_app/dashboard/master_table.html)rC   r(   rB   r*   r   r   GalleryCategoryr   )r-   r?   r   r   r  r.   s         r/   master_tabler  g  s    ""&&(11&9J]] ))&1F""$--f5H(00446??G'xyG'FPPr1   c           	         U R                   R                  S5      nU R                   R                  S5      nU(       a'  [        [        US9nX#l        UR                  5         SnO3[        R                  R                  U[        R                  " 5       S9nSn[        SUUR                  UR                  UR                  R                  S5      S	.S
.5      $ )z8
Handles both Create and Edit Dzongkhag in one function
r  r   pkupdated)r   
created_atcreatedTz%Y-%m-%d %H:%M)ri   r   r  )r]   r^   r3   )rZ   rE   r   rC   r   ro   r(   r   r   r   r
   r  r  strftime)r-   r  r   r3   r^   s        r/   save_dzongkhagr   p  s    
 \\h'F<<F#D%iF;	%%,,||~ - 
	 ""NN#..778HI
  r1   c                     U R                   R                  S5      n[        [        US9n[	        S5        UR                  5         [        SSUS.5      $ )Nr  r  z"Reaching here inside the dzonkhag!Tdeleted)r]   r^   r  )rZ   rE   r   rC   r   r   r
   )r-   r  r3   s      r/   delete_dzongkhagr#    sR    \\h'F!)7I	
./  r1   c                    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(       a  U(       d  [        SSS.5      $  [        R
                  R                  US9nU(       a,  [        R
                  R                  US	9nX%l        XEl        S
nO[        R
                  R                  X$S9nSnUR                  5         [        SUUR                  UR                  S.S.5      $ [        SSS.5      $ ! [         a!  n[        S[        U5      S.5      s S nA$ S nAff = f)NrZ   rI   r   rH   FAll fields are required.r   r  rI   r  )r   r3   addedT)rI   r   )r]   r^   r4   r   )rc   rZ   rE   r
   rC   r(   r   r   r3   r   ro   rI   r   r   )r-   rI   r   rH   r3   r4   r^   r   s           r/   
save_gewogr(    s0   ~~<<##J/||'||''7<E>X YZZ	G!))--\-BI))8)<!
"+",,$,L JJL &+nnejjI!   E6GHII  	GEc!f EFF	Gs    B$D3 3
E=EEEc                 :   U R                   S:X  aV  U R                  R                  S5      n [        R                  R                  US9nUR                  5         [        SS05      $ [        SS	S.5      $ ! [        R                   a    [        SSS.5      s $ f = f)
NrZ   rI   r&  r]   TFzGewog not found.r   r   )rc   rZ   rE   r   r(   r   r
   r  )r-   rI   r4   s      r/   delete_gewogr*    s    ~~<<##J/	SMM%%x%8ELLND 122 E6GHII !! 	SE>P QRR	S   9A5 5"BBc                     U R                   R                  S5      nU(       d  [        S/ 05      $ [        R                  R                  US9R                  SS5      n[        S[        U5      0SS9$ )NrH   r   )rH   rI   r   F)safe)rD   rE   r
   r   r(   r)   valueslist)r-   rH   r   s      r/   get_gewogs_by_dzongkhagr0    sa    ;;??>2LXrN++]]!!|!<CCJPVWF4<0u==r1   c                 H   U R                   S:X  GaV  U R                  R                  S5      nU R                  R                  S5      nU R                  R                  S5      nU R                  R                  S5      n[        X#U/5      (       d  [	        SSS.5      $  [
        R                  R                  US	9n[        R                  R                  US
9nU(       a2  [        R                  R                  US9nX'l	        XWl
        Xgl        SnO [        R                  R                  X%US9nSnUR                  5         [	        SUUR                  UR                  S.S.5      $ [	        SSS.5      $ ! [         a!  n	[	        S[!        U	5      S.5      s S n	A	$ S n	A	ff = f)NrZ   rJ   r   rH   rI   Fr%  r   r  r&  rJ   r  )r   r3   r4   r'  T)rJ   r   )r]   r^   r5   r   )rc   rZ   rE   rB   r
   rC   r(   r   r   r   r3   r4   r   ro   rJ   r   r   )
r-   rJ   r   rH   rI   r3   r4   r5   r^   r   s
             r/   save_villager3    st   ~~\\%%l3
||'||''7<<##J/D122E>X YZZ	G!))--\-BIMM%%x%8E!//---D#$-! %"!//00dW\0] LLN ")"4"4#LL!   E6GHII  	GEc!f EFF	Gs   CE6 6
F! FF!F!c                 :   U R                   S:X  aV  U R                  R                  S5      n [        R                  R                  US9nUR                  5         [        SS05      $ [        SS	S.5      $ ! [        R                   a    [        SSS.5      s $ f = f)
NrZ   rJ   r2  r]   TFzVillage not found.r   r   )rc   rZ   rE   r   r(   r   r
   r  )r-   rJ   r5   s      r/   delete_villager5    s    ~~\\%%l3
	Uoo))Z)@GNND 122 E6GHII ## 	UE>R STT	Ur+  c                     U R                   R                  S5      nU(       aC  [        R                  R	                  US9R                  SS5      n[        S[        U5      05      $ [        S/ 05      $ )NrI   r&  rJ   r   r   )rD   rE   r   r(   r)   r.  r
   r/  )r-   rI   r   s      r/   get_villages_by_gewogr7    s`    {{z*H??))8)<CCLRXYZh899R())r1   c                    U R                   R                  S:X  a[  [        R                  R	                  5       R                  S5      n[        R                  R	                  5       R                  S5      nOl[        R                  R                  U R                   S9R                  S5      n[        R                  R                  U R                   S9R                  S5      n[        5       nUU[        R                  US.n[        U SU5      $ )Nrx   hotel_room_typesr#   r   hotel__user)r>   r%   r@   r   z0janka_web_app/dashboard/hotels/room_details.html)r"   r   rA   r(   rB   prefetch_relatedr'   r,   r)   RoomTypeFormROOM_CHOICESr   )r-   r>   r%   r   r.   s        r/   add_edit_roomsr?    s     ||(""$556HI%%))+::7C
 %%7<<%8IIJ\]%%,,,FUUV]^
>D   --	G 'MwWWr1   c           	      j   U R                   S:w  a  [        SSS.SS9$ [        [        US9nUR                  nUR
                  nUR                  5       nUR                  5         U=R                  U-  sl        U=R
                  U-  sl        UR                  5         [        SU S	U S
U S3S.5      $ )NrZ   Fr   r   r   rz   r   Tz (z room(s)) deleted. z room(s) returned to quota.)
rc   r
   r   r'   r#   r   get_room_type_displayr   r   ro   )r-   room_idroomr#   
room_count	room_names         r/   delete_room_typerF    s    ~~:KLUXYYX'2DJJE!!J**,I 	KKM 
Z'	#	JJL[:,.A*Mhi  r1   c                    U R                   S:w  a  [        SSS.SS9$ U R                  nU R                  R	                  S5      =(       d    S nU(       a   [        U5      nU R                  R	                  S
5      nU R                  R	                  S5      nU R                  R	                  SS5      n [        U R                  R	                  SS5      5      n[        U R                  R	                  SS5      5      nU(       a  U(       a  US:  d  US:  a  [        SSS.S	S9$ [        [        US9nUR                  U:w  a  UR                  S:w  a  [        SSS.SS9$ UR                  R                  [        S5      S9S   =(       d    Sn	UR                  U	-
  Ul        UR#                  S/S9  [$        R&                  R)                  XS9R+                  US9R-                  5       (       a7  [        SUR.                   S[1        [$        R2                  5      U    S3S.S	S9$ Sn
U(       a  [        [$        X(S9nUR                  n
Xz-
  nUS:  a-  XR                   :  a  [        SS U S!UR                    S"3S.S	S9$ U(       ah  UWl        XKl        X[l        Xkl        S#U R:                  ;   a  U R:                  S#   Ul        UR#                  5         S$UR?                  5        S%U
 S&U S'3nOl[$        R&                  RA                  UUUUUS(9nS#U R:                  ;   a$  U R:                  S#   Ul        UR#                  5         S)UR?                  5        S*U S'3nU=R                   U-  sl        UR#                  S/S9  [        S+US.5      $ ! [        [        4 a    [        SSS.S	S9s $ f = f! [        [        4 a    [        SSS.S	S9s $ f = f),NrZ   Fr  r   r   rz   rB  zInvalid room ID.r   r  r6   r   r   price_per_nightr   r   zInvalid price or room count.r   z1All fields are required and values must be valid.r   rx   z(Unauthorized: You do not own this hotel.i  totalrJ  r   rl   )r#   r6   z already has a r   )ri   r#   zYou cannot increase rooms by z because only z rooms are available.
room_imagezUpdated z from  to z rooms.)r#   r6   r   rH  r   zCreated z with T)!rc   r
   r"   rZ   rE   rF   rG   	TypeErrorfloatr   rA   r   r9  	aggregater   r   r   ro   r'   r(   r)   excluder   r   dictr>  r6   r   rH  r   rK  rA  r   )r-   r"   rB  r  r6   r   rH  new_total_roomsr#   actual_usedold_room_countrC  deltamsgs                 r/   save_room_typerW  1  s   ~~:ST]`aa <<D lly)1TG	_'lG ||
+H  -I,,""="5K 0 01BA FGgll..}a@A 9!(;QR?RJ
  	 e1EzzTdnn7A
  	 ((22]9K2LWUZYZK!--;E	JJ/0J1 U@HHGHT[[]]**_T(:O:O5PQZ5[4\\]^
  	 N gC)) ,E qyU222/wn(())>@
  	 *"&.7==(%mmL9DO		3356f^<LDQ`Paahi &&#+' ' 
 7==(%mmL9DOIIK3356f_<MWU 
U"	JJ/0J1  y I& 	_E>P QZ]^^	_ 	" 5
  	s%   N 4A
N1 N.-N.1OOc           
         U R                   n[        R                  R                  SSS5      nUR                  S:X  a  UR                  5       nO^UR                  S;   a0  UR                  S:X  a  UR                  US9nO.UR                  US9nO[        R                  R                  5       nUR                  S:X  a>  UR                  [        [        R                  R                  U[        S	5      S
95      S9nO3UR                  [        R                  S[        R                  5       S9S9nU[        R                  S.n[!        U SU5      $ )Nr"   r#   r   rx   )r   r"   r   r:  r   r  r"   booking)has_reviewedF)output_field)bookingsstatus_choicesz,janka_web_app/dashboard/booking/booking.html)r"   r   r(   r,   r   rB   r)   noneannotater   r+   r   modelsValueBooleanFieldr^  r   )r-   r"   base_qsr]  r.   s        r/   manage_bookingsre    s&   <<D oo,,VWoNG~~ ;;=	,	,>>W$~~$~7H~~4~0H??'') ~~$$%%$TN &  % 
 $$&,,uSYSfSfSh,2i$j !00G 'I7SSr1   c                    U R                   S:X  Ga   U R                  R                  S5      nU R                  R                  S5      n[        [        US9n[        [        R                  5      nX$;  a  [        SS0SS9$ UR                  nX#l        UR                  5         UR                  nUR                  (       a  UR                  R                  5       OUR                  nUR                  (       a  UR                  R                  5       OS	nS
n	S
n
US:X  a  US:w  a  Sn	SU SUR                   R"                   SU SUR$                  R'                  S5       SUR(                  R'                  S5       SUR*                   SUR,                   SUR.                   S3R                  5       n
OUS:X  a  US:w  a  Sn	SU SUR                   R"                   SU SUR$                  R'                  S5       SUR(                  R'                  S5       SUR*                   SUR,                   SUR.                   S3R                  5       n
U
(       a5  U	(       a.  UR0                  nSn [3        U	U
UU/SS9  [5        SU SU	 35        [        S!S"XB    3S#.5      $ [        SS'0SS9$ ! [6         a  n[5        S U 35         S nAN<S nAff = f! [6         a$  n[5        S$U 35        [        SS%0S&S9s S nA$ S nAff = f)(NrZ   
booking_idr^   r   r`   zInvalid statusr   rz   zNot specifiedr   ry   u.   ✅ Your Booking at Janka Resort is Confirmed!z#
                            Hello u   ,

                            Great news! Your booking at Janka Resort has been confirmed 🎉

                            Booking Details:
                            - Hotel: z*
                            - Room Type: z)
                            - Check-In: z	%d %b, %Yz*
                            - Check-Out: z&
                            - Rooms: z'
                            - Guests: z+
                            - Booking ID: z

                            We can't wait to welcome you!

                            Warm regards,
                            Janka Resort Team
                                            r|   u3   ❌ Your Booking at Janka Resort has been Cancelledz,

                            We're sorry, but your booking at Janka Resort has been cancelled.

                            Booking Details:
                            - Hotel: z

                            If you have any questions, feel free to contact our support team.

                            Sincerely,
                            Janka Resort Team
                                            zno-reply@jankaresort.comFr   u   📧 Email sent to z | Subject: u   ❌ Failed to send email: TzBooking status updated to r   u%   🚨 Error in update_booking_status: zAn error occurredr   r   )rc   rZ   rE   r   r   rQ  r^  r
   r^   ro   r"   r   r   r[   r   rA  r#   r   check_inr  	check_outnumber_of_roomsnumber_of_guestsri   r   r   r   r   )r-   rg  r^   rZ  valid_statuses
old_statusr"   r   room_type_displayr   r_   recipient_emailr   email_errorr   s                  r/   update_booking_statusrq    sX    ~~c	L )),7J\\%%h/F'J?G "'"8"89N+#W.>$?LL !J#NLLN <<D-1^^4>>'')D
 (( %%;;=$  GG${)BJ##'& )&
 '.mm&8&8%9 :**;)< =))0)9)9)B)B;)O(P Q**1*;*;*D*D[*Q)R S&&-&=&=%> ?''.'?'?&@ A++2::, 7-0$ 16% ( ;&:+DO##'& )&
 '.mm&8&8%9 :**;)< =))0)9)9)B)B;)O(P Q**1*;*;*D*D[*Q)R S&&-&=&=%> ?''.'?'?&@ A++2::, 7-0$ 16% ( 7"&**7

F ' '#-(7'8&+ //@WIVW
  78N7OP!   "34SAA ! F6{mDEEF  	L9!=>*= >sKK	LsO   A-K G)K +J) 
K )
K3KK KK 
K<K71K<7K<c                     U(       d  [        SSS.5      $ [        [        US9nU R                  n[	        USS5      nUS:X  a  O=US:X  a)  UR
                  R                  U:w  a  [        SS	S.5      $ O[        SS
S.5      $ UR                  5         [        SSS.5      $ ! [         a$  n[        SS[        U5      -   S.5      s S nA$ S nAff = f)NFzNo booking ID provided.r   r   r   r"   rx   r   z1You can only delete bookings for your own hotels.z.You do not have permission to delete bookings.TzBooking deleted successfully.r   r   )	r
   r   r   r"   getattrr#   r   r   r   )r-   rg  rZ  r"   r   r   s         r/   delete_bookingrt  /  s    YE<U VWW $G
; ||D+v6	'!}}!!T)#@s$tuu *  E<l mnn 	9XYZZ Y8MPSTUPV8VWXXYs/   B  AB  3B  B   
C*C	C	Cc                 &   [        [        US9n/ n[        R                  " 5       R	                  5       nUR
                  R                  5        Ho  n[        R                  R                  USS9R                  [        S5      S9S   =(       d    SnUR                  U-
  nUS:  d  MZ  UR                  UUUS.5        Mq     [        R                  R                  US	9R                  S
S5      R!                  S5      S S nUUUS.n	[#        U SU	5      $ )Nr   ry   )r   r^   rj  rI  rJ  r   )r6   r   r   )r#   r"   rZ  r    r~   )r#   r%   reviewszjanka_web_app/room_details.html)r   rA   r   r   r   r9  rB   r   r(   r)   rO  r   r   appendr+   r,   r*   r   )
r-   r  r#   r%   todayr6   r   	availablerv  r.   s
             r/   hotel_detailrz  L  s%   e1EJ LLN!E++//1	$__33# 4 
 )#/0)
1'; @ ?@ 	
 )),>>	q=&&8#,  2 nn## $ n	h}cr	#G  G
 '<gFFr1   c                    U R                   S:w  a  [        SS0SS9$  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
S5      5      n[	        U R                  R                  SS5      5      n[        XX4/5      (       d  [        SS0SS9$ [        [        US9n[        [        US9n[        U5      n	[        U5      n
U	(       a  U
(       d  [        SS0SS9$ X:  a  [        SS0SS9$ U	[        R                  " 5       :  a  [        SS0SS9$ [        R                  R                  USS/U
U	S9R                  [         R#                  S
5      S9S   =(       d    SnUR$                  U-
  nX\:  a  [        SSU S30SS9$ [        R                  R'                  UU R(                  UU	U
UUSS9n[*        R                  R'                  SU R(                  R,                   SUR/                  5        SUR0                   S3S S!U R(                  R,                  UR(                  S"S#9  [        S$S%UR2                   S&UR4                   S'UR6                   S3S(.5      $ ! [8         a  n[        S[;        U5      0S)S9s S nA$ S nAff = f)*NrZ   r`   r  r   rz   r  room_type_idrh  ri  rj  r   rk  zMissing required fields.r   r   zInvalid date format.z!Check-out must be after check-in.z$Check-in date cannot be in the past.r{   ry   )r   
status__incheck_in__ltcheck_out__gtrI  rJ  r   zOnly z# room(s) available for this period.)r#   r"   r   rh  ri  rj  rk  r^   zNew Booking Requestz has requested a booking for z at r   r   r   z/manage-bookings/)r   r_   r   r   r   rj   rp   Tu&   Booking confirmed! We’ve saved your z room(s) from rL  r   r   )rc   r
   rZ   rE   rF   rB   r   rA   r'   r   r   rx  r   r(   r)   rO  ra  r   r   r   r"   rn   r[   rA  r   rj  rh  ri  r   r   )r-   r  r|  check_in_strcheck_out_strrj  rk  r#   r6   rh  ri  overlapping_bookingsr   rZ  r   s                  r/   create_bookingr  o  s   ~~W&?@MME;<<##J/||''7||''
3((5gll../@!DEw||//0BAFG HLHII*D EcRR!%H5%h<@	l+}-	y*@ A#NN *M NWZ[[djjl"*P QZ]^^  '55#!;/""	  6  

 )&**%67)
8 B  G
 FG 	 $//2FF,5 11TU! 
 //((#+- ) 	
 	##'||,,--J9KjKjKlJmmqrwr|r|q}}~!#||,, ::* 	$ 	
 ?@W@W?XXfgngwgwfxx|  ~E  ~O  ~O  }P  PQ  R
  	
  ;Wc!f-c::;s?   CK  2AK  >K  $K  4A1K  &CK   
K)
K$K)$K)c                    [         R                  R                  U R                  S9[         R                  R                  U R                  S9-  nUR	                  SS5      R                  S5      n[        R                  R                  U R                  R                  S9R                  S5      nUUS.n[        U S	U5      $ )
N)r   r   r   r   r    r   r[   )user_messages	all_usersz,janka_web_app/dashboard/message/message.html)
r   r(   r)   r"   r,   r*   r   rP  ri   r   )r-   r  r  r.   s       r/   r   r     s     OO**|| +  	 	M
 "00:FOOP]^M $$$8AA*MI 'G 'I7SSr1   c           	      `   U R                   S:w  a  [        SSS.SS9$ 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5      nU(       a  U(       d  [        SSS.SS9$  [
        R                  R                  US9nXPR                  :X  a  [        SSS.SS9$ [        R                  R                  U R                  UUUS9  U(       aP   [        R                  R                  X@R                  S9nUR                  (       d  SUl        UR                  S/S9  UR                  nSUR                   SU R                  R                   SU SU S3	R	                  5       n[        UU[         R"                  U/SS9  [        SSS.5      $ ! [
        R                   a    [        SSS.SS9s $ f = f! [        R                   a     Nf = f)NrZ   Fr  r   r   rz   receiver_idr   r   r_   original_message_idz"Receiver and message are required.r   r   zReceiver not found.i  zYou cannot message yourself.)r   r   r   r_   ri   r   Tr   rl   z
        Hello z,,

        You just received a message from z about: z

        Message:
        z>

        Best regards,
        Janka Resort Team
            r   zMessage sent successfully!)rc   r
   rZ   rE   r   r   r(   r  r"   r   r   r   ro   r   r[   r   r   r   )	r-   r  r   r_   r  r   original_messager   
email_bodys	            r/   send_messager    s>   ~~:ST]`aa,,""=1Klly"-335Glly"-335G!,,**+@Ag;
  	
^<<##{#3 <<:XYbeff OO||	   	&226IT`T`2a#(((, % %%VH%= NNE  ! "**1,,*?*?)@	 R	 
	 
   ..w /  ]  ^:OPY\]]^* ## 		s%   G/ /AH /!HHH-,H-c                     [         R                  R                  U R                  S9R	                  S5      nSU0n[        U SU5      $ )N)rj   r    notificationsz.janka_web_app/dashboard/notification_list.html)rn   r(   r)   r"   r*   r   )r-   r  r.   s      r/   notifications_listr    sE     ((//w||/LUUVcdM}-G'KWUUr1   c                     [        [        UU R                  S9nUR                  (       d  SUl        UR	                  S/S9  [        S5      $ )z>
Mark message as read and redirect to inbox or message detail
r  Tr   rl   r   )r   r   r"   r   ro   r   )r-   
message_idr_   s      r/   message_redirectr    sH    
  G <<F8, Jr1   c                     [         R                  R                  U R                  S9R	                  SSS5      R                  S5      nSU0n[        U SU5      $ )Nr   r#   r6   rZ  r    rv  z#janka_web_app/dashboard/review.html)r+   r(   r)   r"   r,   r*   r   )r-   rv  r.   s      r/   review_pager  +  sf     nn##\\ $ n h}  	7G '@'JJr1   c           	      l   U R                   S:X  GaE  U R                  R                  S5      nU R                  R                  S5      nU R                  R                  SS5      R                  5       n [        R
                  R                  XR                  S9n[        R
                  R                  U R                  US9R                  5       (       a+  [        SS	UR                  R                  S
5       S3S.5      $ [        R
                  R                  UR                  UR                  U R                  U[!        U5      US9  [        SSS.5      $ [        SSS.5      $ ! [        R"                   a    [        SSS.5      s $ [$         a!  n[        S['        U5      S.5      s S nA$ S nAff = f)NrZ   rg  ratingcommentr   ri   r"   rY  F'   You’ve already reviewed this stay on %d %b %Yr   r   )r#   r6   r"   rZ  r  r  TzReview submitted successfully!r   z"Booking not found or unauthorized.r  )rc   rZ   rE   r   r   r(   r"   r+   r)   r   r
   rh  r  r   r#   r   rF   r  r   r   )r-   rg  r  r  rZ  r   s         r/   submit_reviewr  ;  s    ~~\\%%l3
!!(+,,""9b1779	Eoo))Zll)KG ~~$$',,$HOOQQ#$FwGWGWG`G`akGlFmmno%   NN!!mm!//\\6{ "   D=] ^__ E4MNOO ## 	cE<` abb 	EECF CDD	Es,   3BE%  AE% %"F3		F3F.(F3.F3c                    U R                   S:X  a  U R                  R                  S5      n [        R                  R                  XR
                  S9n[        R                  R                  U R
                  US9R                  5       nU(       a-  UR                  R                  S5      n[        SSU S3S	.5      $ [        S
S05      $ [        SS0SS9$ ! [        R                   a    [        S
S05      s $ f = f)NrD   rg  r  rY  r  Tr  r   )r   r_   r   Fr`   r   r   rz   )rc   rD   rE   r   r(   r"   r+   r)   r   rh  r  r
   r  )r-   rg  rZ  r   review_dates        r/   check_review_existsr  _  s    ~~[[__\2
	3oo))Zll)KG^^**g*NUUWF%..77
C#"!HUVW%  
 $Xu$566 "34SAA ## 	35 122	3s   BC >C !C;:C;c                 z    [         R                  R                  5       R                  S5      n[	        U SSU05      $ )Nz-uploaded_atzjanka_web_app/gallery.htmlgallery_items)GalleryImager(   rB   r*   r   )r-   r  s     r/   galleryr  r  s=     ((,,.77GM'7:  r1   c           	         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(       d  [	        SSS.5      $ U(       a=   [
        R                  R                  US	9nX$l        X4l        UR                  5         S
nO [
        R                  R                  UUS9nSn[	        SUUR                  UR                  UR                  UR                  S.S.5      $ [	        SSS.5      $ ! [
        R                   a    [	        SSS.5      s $ f = f)NrZ   category_idr   r   r   FzName is requiredr   r   r  Category not found)r   r   r  T)ri   r   slugr   )r]   r^   r   r   )rc   rZ   rE   r   r
   r  r(   r   r   ro   r  r   ri   r  )r-   r  r   r   r   r^   s         r/   save_gallery_categoryr  x  sS    ~~ll&&}5||+113ll&&}b9??AE>P QRRY*2266+6F $'2$"
 '..55' 6 H Fkk  '33		
 	 		 E6GHII) #// Y#BV$WXXYs   ;E "E)(E)c                    U R                   S:X  a|  U R                  R                  S5      nU(       d  [        SSS.5      $  [        R
                  R                  US9nUR                  nUR                  5         [        SSU S	3S.5      $ [        SSS.5      $ ! [        R                   a    [        SS
S.5      s $ f = f)NrZ   r  FzNo category ID providedr   r   Tz
Category "z" deleted successfullyr  r   )	rc   rZ   rE   r
   r  r(   r   r   r  )r-   r  r   category_names       r/   delete_gallery_categoryr    s     ~~ll&&}5E>W XYY		U&..22k2BH$MMMOO'6LM!   E6GHII ++ 	UE>R STT	Us   A
B "C ?C c                     [         R                  R                  5       n[        R                  R                  5       nUUS.n[	        U SU5      $ )N)gallery_images
categoriesz2janka_web_app/dashboard/page_settings/gallery.html)r  r(   rB   r  r   )r-   r  r  r.   s       r/   gallery_page_settingsr    sJ    !))--/N ((,,.J( G 'OQXYYr1   )GalleryImageFormc                    U R                   S:X  ao  [        U R                  U R                  5      nUR	                  5       (       a,  UR                  5       n[        SSUR                   S3S.5      $ [        SSS.5      $ g )	NrZ   Tu   ✅ Image "z" added successfully!r   F!Please check the form for errors.r   )rc   r  rZ   r   r   ro   r
   r   )r-   r   images      r/   add_gallery_imager    s}    ~~gmm<==??IIKE(5JK!  
   <!    r1   c                    U R                   S:X  a  U R                  R                  S5      n [        R                  R                  US9n[        U R                  U R                  US9nUR                  5       (       a  UR                  5         [        SSS.5      $ [        SS	S
.5      $ g ! [        R                   a    [        SSS
.5      s $ f = f)NrZ   image_idr   r   Tu   ✅ Image updated successfully!r   Fr  r   zImage not found.)rc   rZ   rE   r  r(   r  r   r   ro   r
   r  )r-   r  r  r   s       r/   update_gallery_imager    s    ~~<<##J/	 ((,,,9E#GLL'--%PD}}		##!@%  
 $$@%      (( 	 +!  	s   A.B+ B+ +"CCc                     U R                   S:X  a;   [        R                  R                  US9nUR	                  5         [        SS05      $ g ! [        R                   a    [        SSS.5      s $ f = f)NrZ   r  r]   TFzImage not foundr   )rc   r  r(   rE   r   r
   r  )r-   r  r  s      r/   delete_gallery_imager    su    ~~	P ((,,,3ELLND 122	  
 (( 	PE<M NOO	Ps   9A "A21A2)adjango.shortcutsr   r   r   django.contrib.authr   r   r   r	   django.httpr
   django.views.decorators.csrfr   'django.contrib.auth.password_validationr   django.core.exceptionsr   r   django.urlsr   r   django.contribr   django.contrib.auth.decoratorsr   formsra  django.views.decorators.httpr   django.utilsr   	django.dbr   django.db.modelsr   r   r   django.utils.dateparser   datetimer   r   django.core.mailr   r0   rK   rO   rQ   rS   rV   rX   rd   rg   rs   r   r   r   r   r   r   r   r   r  r  r  r  r   r#  r(  r*  r0  r3  r5  r7  r?  atomicrF  rW  re  rq  rt  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r1   r/   <module>r     s   @ @ U U $ 4 E 2   . # 9   5 ! ! 2 2 - $ &?&@P=8<5:J$ 0 0$ +&OI 'OIb +&eX  'eXN H H,& +&b 'b& 5] 5]r +&Z 'Z*PRdFRP K K +&Q 'Q  : 
 
 J J: 	J 	J> "J "JH 	J 	J* +&X 'X*  , k kZ +&#T '#TJ gB  gBP Y  Y6!GF I; I;V +&T 'T$ B BHV
    $ K K  P   PD B B$ +&%J ' %JN +&J ' J$Z $    .Pr1   