
    %gc                     l   d dl mZmZ d dlmZ d dlmZ d dl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T d	d
lmZ d dlmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d	dl(T d dl)m*Z*m+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l0m1Z2 d dl,Z,d dl"m3Z3 d dl4T d dl5T d dl6m7Z7 d dl8Z8d dl9m:Z: d Z;d Z<d Z=d Z> G d de          Z? G d  d!e          Z@ G d" d#e          ZA G d$ d%e          ZB G d& d'e          ZC G d( d)e          ZD G d* d+e          ZE G d, d-e          ZF G d. d/e          ZG G d0 d1e          ZH G d2 d3e          ZI G d4 d5e          ZJ G d6 d7e          ZK G d8 d9e          ZL G d: d;e          ZM G d< d=e          ZN G d> d?e          ZO G d@ dAe          ZP G dB dCe          ZQ G dD dEe          ZR G dF dGe          ZS G dH dIe          ZT G dJ dKe          ZU G dL dMe          ZV G dN dOe          ZW G dP dQe          ZX G dR dSe          ZY G dT dUe          ZZ G dV dWe          Z[ G dX dYe          Z\ G dZ d[e          Z] G d\ d]e          Z^ G d^ d_e          Z_ G d` dae          Z` G db dce          Za G dd dee          Zb G df dge          Zc G dh die          Zd G dj dke          Ze G dl dme          Zf G dn doe          Zg G dp dqe          Zh G dr dse          Zi G dt due          Zj G dv dwe          Zk G dx dye          Zl G dz d{e          Zm G d| d}e          Znd~ Zod Zpd Zqd Zr G d de          Zs G d de          Zt G d de          Zu G d de          Zv G d de          Zwd Zx G d de          Zy G d de          Zz G d de          Z{ G d de          Z| G d de          Z}d Z~ G d de          Zd dlmZ d Z G d de          ZdS )    )_python_exit_worker)Template)View)TemplateView)authenticateloginlogout)renderredirect)HttpResponse)*   )forms)messages)mail)render_to_stringN)settings)	Paginator)JsonResponse)login_required)method_decorator)QSum)Count)django_pbkdf2_sha256)HttpResponseRedirect)timezone)defaultdictc                     | j                             d          }t          j                            |d                                          }|rt          d          S d}t          |d          S )Nemailr   r!   is_superusertruez)This email does not exist in our databaseFsafe)GETgetUserobjectsfilterfirstr   r   )requesttextpostmessages       6/var/www/html/Manimaran/manimaran/admin_panel/views.py
checkEmailr2   %   si      $a88>>@@ *	v		7'	g5	)	)	))    c                 $   | j                             dd          }| j                             d          }t          j                            |d          }|                    |          dk    rd}t          |d          S t          d	          S )
Nr!    passwordr   r"   Fz!Please enter the correct passwordr%   r$   )r'   r(   r)   r*   check_passwordr   r   )r-   r.   r6   userr0   s        r1   checkLoginPasswordr9   .   s    ##KOOJ''  t1 ==!!U**/'	g5	)	)	))	v		r3   c                    | j                             d          }t          j                            | j        j        d          }|                    |          dk    rd}t          |d          S t          d          S )Nold_passwordr   r"   Fz%Does not match with the old password.r%   r$   )	r'   r(   r)   r*   r8   r!   r7   r   r   )r-   r;   r8   r0   s       r1   adminCheckPasswordr<   8   ss    //  w|'9 KK%%..3'	g5	)	)	))	v		r3   c                  .   t           j                                                                        } | rb| j        sdS | j        }|dd          }t          |          dz   }t          |          }|                    d          }dt          |          z   S dS )NTRANS000001   r   TRANS)UserTranscationr*   alllasttranscation_idintstrzfill)lastObjtheIds     r1   generateTranscationsIdrJ   C   s    

!
%
%
'
'
,
,
.
. 		 
-%abb	%E

1%E

%A%	U		r3   c                       e Zd ZdZd Zd ZdS )
AdminLogInzadmin-signin.htmlc                 b    |j         j        rt          d          S t          || j                  S N/admin-dashboardr8   is_authenticatedr   r   template_nameselfr-   s     r1   r(   zAdminLogIn.getT   1    \" 3
1
2
22	*	+	++r3   c                    	 t          j        |j                  }|                                r|j                            d          }|j                            d          }t          ||          }|j        dk    r*t          j	        |d           t          || j                  S |j        r*t          j	        |d           t          || j                  S |r4t          ||           t          j        |d           t          d          S t          j	        |d	           t          || j                  S t          || j        d
|i          S # t           $ r.}t          j        |d           t          d          cY d }~S d }~ww xY w)Nr!   r6   )r!   r6   Fz/You account has been deactivated by superadmin.z+You account has been deleted by superadmin.zLogin successfullyrO   zInvalid email and password.form&Something went wrong.Please try again.zadmin-signin)r   AdminSigninFormPOSTis_validcleaned_datar(   r   statusr   errorr   rR   end_dater	   successr   	Exceptionwarning)rT   r-   rW   r!   r6   r8   es          r1   r/   zAdminLogIn.postY   s   #


-
-4
mmoo > $$W--E $$Z00H%(;;;D{e^GNOOO7D.///} 0^GJKKK7D./// 0GTw 4555())) ^G:;;;7D.///'$,vtn===	 # # #GEFFF
>
"
"""""""#s6   B'E *0E 5E )E ;E 
F#F FFN__name__
__module____qualname__rR   r(   r/    r3   r1   rL   rL   R   s7        $, , ,
# # # # #r3   rL   c                       e Zd ZdZd Zd ZdS )AdminForgetPasswordzforgot-password.htmlc                 b    |j         j        rt          d          S t          || j                  S rN   rP   rS   s     r1   r(   zAdminForgetPassword.gety   rU   r3   c                    t          j        |j                  }|                                r.|j                            d          }t          j                            |          	                                }d
                    d t          d          D                       }dt          |j                  z   dz   |z   }t          t          j                  |z   }||_        |                                 d}t%          d	d
|i          }	|	}
t          j        }|}t)          j        ||
||g|	           t-          j        |d           t1          d          S t3          || j        d|i          S )Nr!   r!   r5   c                 d    g | ]-}t          j        t          j        t          j        z             .S rh   )randomchoicestringascii_lettersdigits).0ns     r1   
<listcomp>z,AdminForgetPassword.post.<locals>.<listcomp>   s,    ]]]afmF$86=$HII]]]r3      z/forgot-admin//zForgot Passwordz forget_admin_password_email.htmllinkhtml_messagez/A link has been successfully sent to your mail.z/admin-forget-passwordrW   )r   AdminForgetPasswordFormrZ   r[   r\   r(   r)   r*   r+   r,   joinrangerF   r!   r   BASE_URLforgot_password_linksaver   EMAIL_HOST_USERr   	send_mailr   r`   r   r   rR   )rT   r-   rW   r!   	admin_objran_numbaselinkcompletelinksubjectr{   plain_message
from_emailtos                r1   r/   zAdminForgetPassword.post~   sY   		&w|	4	4$	]]__ >!!'**5|""5"1177999WW]]SXY[S\S\]]]^^7#io"6"66<wF8h'((83<$,9!>>7"#EP\G]^^<=(:2>'=*rdVVVVGNOOO
+
,
,,
$,vtn
=
==r3   Nrd   rh   r3   r1   rj   rj   w   s7        ', , ,
> > > > >r3   rj   c                       e Zd ZdZd Zd ZdS )ForgetPasswordVerificationzreset-password.htmlc                    t          | j        j                  }|                    d          d         }t          j                            |                                          }|j        dk    rt          |d          S t          j                            ||                                          }|rd}nd}t          || j
        t                                S )	Nrx   rm   
LinkExpiryzlink_expire.html)r!   r   TF)rF   r-   pathsplitr)   r*   r+   r,   r   r   rR   locals)rT   r-   ry   
user_emaillink_expiryr   valids          r1   r(   zForgetPasswordVerification.get   s    	T\		$zz#r"*##J#77==??+%55
+
,
,,l!!*T!RRXXZZ) 555	*688	4	44r3   c                    t          j        |j                  }|                                r#|j                            d          }|j                            d          }t          | j        j                  }|	                    d          d         }t          |           t          j                            |                                          }|rT|                    |           d|_        |                                 t%          j        |d           t)          d          S t%          j        |d	           t)          d          S t-          || j        d
|i          S )Nnew_passwordconfirm_new_passwordrx   rm   r   zPassword changed successfully/admin-loginzSomething went wrongrW   )r   ForgetVerificationFormrZ   r[   r\   r(   rF   r-   r   r   printr)   r*   r+   r,   set_passwordr   r   r   r`   r   r^   r   rR   )rT   r-   rW   r   r   ry   r   user_objs           r1   r/   zForgetPasswordVerification.post   s7   		%gl	3	3$	]]__ >#''77<+//0FGG
dl
 
 4

3#:l!!*!55;;==8 $,'''$0H!MMOOOW=>>>N###N72333N###
$,vtn
=
==r3   Nrd   rh   r3   r1   r   r      s7        &5 5 5> > > > >r3   r   c                   N    e Zd ZdZ e ed                    d             ZdS )AdminDashboardzdashboard.htmlr   	login_urlc                    t          j                    }|j        }t          j                            dd                                          }t          j                            dd                                          }t          j                            dd          d d         }t          j                            dd          d d         }t          j                            d                                          }t          j                            d          d d         }	t          j                            |d          	                    t          d	                    d
         }
t          j                            |          }g dt          t                    |D ].}|j        j        xx         t          |j                  z  cc<   /fdt!          dd          D             }dfdt!          dd          D             dg}t          j                            d          t          j                            d          g d}fdt!          dd          D             }fdt!          dd          D             }|||||d}t#          || j        t'                                S )NTr   end_date__isnullis_userr   	is_workerr?   r   r   r   )created_at__yearr   amountamount__sumr   JanFebMarAprMayJunJulAugSepOctNovDecc                 &    g | ]}|d z
           S r   rh   rt   imonth_namess     r1   rv   z&AdminDashboard.get.<locals>.<listcomp>   "    999qAE"999r3      Cornc                      g | ]
}|         S rh   rh   rt   r   amounts_by_months     r1   rv   z&AdminDashboard.get.<locals>.<listcomp>   s    *U*U*U1+;A+>*U*U*Ur3   namedata  start_date__year  c                 `    g | ]*}                     |                                           +S )start_date__monthr+   countrt   r   bookings_this_years     r1   rv   z&AdminDashboard.get.<locals>.<listcomp>   8    jjjXY/666KKQQSSjjjr3   c                 `    g | ]*}                     |                                           +S r   r   rt   r   bookings_last_years     r1   rv   z&AdminDashboard.get.<locals>.<listcomp>   r   r3   )monthsbookings_this_year_databookings_last_year_data
categoriesseries_data)r   nowyearr)   r*   r+   r   UserBookingsrA   	aggregater   r   float
created_atmonthr   r~   r   rR   r   )rT   r-   r   current_yeartotal_userstotal_workers
all_workerall_usertotal_bookingsbooking_objtotal_paymentsr   entryr   r   r   r   r   contextr   r   r   r   s                      @@@@r1   r(   zAdminDashboard.get   s   #,##ta#HHNNPP+,%%!%LLRRTT-|""dq"II"1"M*\  !t DDRaRH('..$.GGMMOO.%,,,EEbqbI+"*11<cg1hhrrsvw  tA  tA  B  B  CP  Q. 
	 	'	'	'	F	F$ edd+ !'' C CeE$*+++uU\/B/BB++++ :999E!RLL999* *U*U*U*UaQS*U*U*UVVW+ $+22D2II#+22D2II `__&jjjj]bcdfh]i]ijjjjjjj]bcdfh]i]ijjj 55 ' 
*688	4	44r3   Nre   rf   rg   rR   r   r   r(   rh   r3   r1   r   r      sK        !>>N;;;<<.5 .5 =<.5 .5 .5r3   r   c                   T    e Zd ZdZ e ed                    d             Zd ZdS )AdminProfilezadmin_profile.htmlr   r   c                 F    t          || j        t                                S Nr   rR   r   rS   s     r1   r(   zAdminProfile.get       	*688	4	44r3   c                 D   t          j        |j                  }|                                r^|j                            d          }|j                            d          }|j                            d          }|j                            d          }t          j                            |j	        j
                                      ||||           |j                            d          rwt          |j                            d                    }d|z   }t          j                            |j	        j
                                      t          |          	           t          j        |d
           t#          d          S t%          || j                  S )N
first_name	last_namer!   phone_numberidr   r   r!   r   avatarrx   r   zUpdate Succesfullyzadmin-profile)r   AdminProfileFormrZ   r[   r\   r(   r)   r*   r+   r8   r   updateFILESuploadTheImagesrF   r   r`   r   r   rR   )rT   r-   rW   r   r   r!   r   fileUrls           r1   r/   zAdminProfile.post   sh   

 
.
.4
mmoo ."&&|44J!%%k22I!!'**E$((88LL7<?++22jS\ch  wC2  D  D  D}"" IW]..x8899W[W	\GLO,,333w<<3HHHW2333O$$$'$,---r3   Nre   rf   rg   rR   r   r   r(   r/   rh   r3   r1   r   r      sZ        %>>N;;;<<5 5 =<5. . . . .r3   r   c                   T    e Zd ZdZ e ed                    d             Zd ZdS )AdminResetPasswordadmin_reset_password.htmlr   r   c                 F    t          || j        t                                S r   r   rS   s     r1   r(   zAdminResetPassword.get  r   r3   c                 :   	 t          j        |j                  }|                                r|j                            d          }t
          j                            |j        j                  }|	                    |           |
                                 t          |           t          j        |d           t          d          S t          |dd|i          S # t           $ r.}t          j        |d           t          d          cY d }~S d }~ww xY w)	NconfirmPasswordrm   z)You have successfully reset your passwordr   r  rW   rX   admin-dashboard)r   ChangePasswordFormrZ   r[   r(   r)   r*   r8   r!   r   r   r
   r   infor   r   ra   rb   )rT   r-   rW   r6   r8   rc   s         r1   r/   zAdminResetPassword.post  s   &

"7<
0
04
mmoo 
H| 122H|gl&899DhIIKKK
7OOOM'FGGGN### '6GGG	 & & &GEFFF
$
%
%%%%%%%&s$   CC" C" "
D,#DDDNr  rh   r3   r1   r  r    sZ        ,>>N;;;<<5 5 =<5& & & & &r3   r  c                   J    e Zd Z e ed                    d             ZdS )AdminLogoutr   r   c                 h    t          |           t          j        |d           t          d          S )NzLogout Succesfullyr   )r
   r   r`   r   rS   s     r1   r(   zAdminLogout.get  s/    ///
70111	.	!	!!r3   Nre   rf   rg   r   r   r(   rh   r3   r1   r  r    F        >>N;;;<<" " =<" " "r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )privacyPolicyzprivacy_policy.htmlr   r   c                     t           j                            d                                          }t	          || j        t                                S )NPrivacy	page_typeContentPagesr*   r+   r,   r   rR   r   rT   r-   cont_objs      r1   r(   zprivacyPolicy.get)  s@    !((9(==CCEE(	*688	4	44r3   c                 t   t          j        |j                  }|                                r|j                            d          }|j                            d          }t          j                            d          	                                }|r<t          j                            |j
                                      ||d           n"t          j                            ||d           t          j        |d           t          d          S t!          || j        t%                                S )	Ntitlecontentr  r  r   r  r   r  Updated Successfullyz/privacy-policyr   content_page_formrZ   r[   r\   r(   r  r*   r+   r,   r   r  creater   r`   r   r   rR   r   rT   r-   rW   r  r   r   s         r1   r/   zprivacyPolicy.post.  s   		 	.	.$	]]__ 6  ))5""9--7


%
%	
%
:
:
@
@
B
B4
 Q47++22wYb2cccceGiPPPG3444
$
%
%%
+FHH
5
55r3   Nr  rh   r3   r1   r  r  '  sZ        &>>N;;;<<5 5 =<56 6 6 6 6r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )termsAndConditionsz
terms.htmlr   r   c                     t           j                            d                                          }t	          || j        t                                S )NTermsr  r  r  s      r1   r(   ztermsAndConditions.get@  s@    !((7(;;AACC(	*688	4	44r3   c                 t   t          j        |j                  }|                                r|j                            d          }|j                            d          }t          j                            d          	                                }|r<t          j                            |j
                                      ||d           n"t          j                            ||d           t          j        |d           t          d          S t!          || j        t%                                S )	Nr  r   r*  r  r   r!  r"  z/terms-and-conditionsr#  r&  s         r1   r/   ztermsAndConditions.postE  s   		 	.	.$	]]__ 6  ))5""9--7


%
%
%
8
8
>
>
@
@4
 O47++22wY`2aaaaeGgNNNG3444
*
+
++
+FHH
5
55r3   Nr  rh   r3   r1   r(  r(  >  sZ        >>N;;;<<5 5 =<56 6 6 6 6r3   r(  c                   N    e Zd ZdZ e ed                    d             ZdS )
faqListingzfaq_listing.htmlr   r   c                 *   t           j                            d                              d          }t	          |d          }|j                            d          }|                    |          }t          || j	        t                                S NTr   -id   page)Faqr*   r+   order_byr   r'   r(   get_pager   rR   r   )rT   r-   data_obj	paginatorpage_numberfaq_objs         r1   r(   zfaqListing.getW  sv    [488AA%HH(!$$)''+{++'	*688	4	44r3   Nr   rh   r3   r1   r-  r-  U  sK        #>>N;;;<<5 5 =<5 5 5r3   r-  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )addFaqzadd_faq.htmlr   r   c                 F    t          || j        t                                S r   r   rS   s     r1   r(   z
addFaq.getc  r   r3   c                    t          j        |j                  }|                                ry|j                            d          }|j                            d          }t          j                            ||           t          j
        |d           t          d          S t          || j        t                                S )Nr  r   r  r   zCreated Successfully/faq-listing)r   r$  rZ   r[   r\   r(   r3  r*   r%  r   r`   r   r   rR   r   )rT   r-   rW   r  r   s        r1   r/   zaddFaq.postg  s    		 	.	.$	]]__ 6  ))5""9--7;E'222G3444
>
"
""
+FHH
5
55r3   Nr  rh   r3   r1   r;  r;  a  sZ        >>N;;;<<5 5 =<5	6 	6 	6 	6 	6r3   r;  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )editFaqzedit_faq.htmlr   r   c                     t           j                            |d                                          }t	          || j        t                                S NTr   r   )r3  r*   r+   r,   r   rR   r   )rT   r-   r   r9  s       r1   r(   zeditFaq.getu  sA    K"==CCEE'	*688	4	44r3   c                    t          j        |j                  }|                                r|j                            d          }|j                            d          }t          j                            |          	                    ||           t          j        |d           t          d          S t          || j        t                                S )Nr  r   r   r>  r"  r?  )r   r$  rZ   r[   r\   r(   r3  r*   r+   r  r   r`   r   r   rR   r   )rT   r-   r   rW   r  r   s         r1   r/   zeditFaq.postz  s    		 	.	.$	]]__ 6  ))5""9--7;##%#@@@G3444
>
"
""
+FHH
5
55r3   Nr  rh   r3   r1   rA  rA  s  sZ         >>N;;;<<5 5 =<5	6 	6 	6 	6 	6r3   rA  c                   J    e Zd Z e ed                    d             ZdS )	deleteFaqr   r   c                     t           j                            |                              t          j                                                   t          j        |d           t          d          S )Nr   )r_   zFaq Deleted Successfullyr?  )	r3  r*   r+   r  datetimer   r   r`   r   )rT   r-   r   s      r1   r(   zdeleteFaq.get  s]    +""H,=,A,A,C,C"DDD
76777	.	!	!!r3   Nr  rh   r3   r1   rG  rG    r  r3   rG  c                   N    e Zd ZdZ e ed                    d             ZdS )adminNotificationszadmin_notifications.htmlr   r   c                     t           j                                                            d          }t	          || j        t                                S )Nr0  )AdminNotificationsr*   rB   r4  r   rR   r   )rT   r-   
notify_objs      r1   r(   zadminNotifications.get  s=    !)--//88??*	*688	4	44r3   Nr   rh   r3   r1   rK  rK    sK        +>>N;;;<<5 5 =<5 5 5r3   rK  c                       e Zd Zd ZdS )deleteAdminNotificationsc                    	 |j         dk    r|j                            d          }|rgd |                    d          D             }t          j                            |                                           t          j	        |d           nt          j
        |d           t          d          S t          d          S # t          $ r.}t          j        |d	           t          d
          cY d }~S d }~ww xY w)Nr'   	delete_idc                 ,    g | ]}t          |          S rh   )rE   )rt   r   s     r1   rv   z0deleteAdminNotifications.get.<locals>.<listcomp>  s    "D"D"Dr3r77"D"D"Dr3   ,)pk__inzDeleted Sucessfullyz*At least One notification must be selectedz/admin-notificationsrX   r  )methodr'   r(   r   rM  r*   r+   deleter   r`   r^   r   ra   rb   )rT   r-   idsint_id_listrc   s        r1   r(   zdeleteAdminNotifications.get  s   	/~&&kook22 Y"D"DSYYs^^"D"D"DK&.55[5IIPPRRR$W-BCCCCN7+WXXX 6777   6777 	/ 	/ 	/W&NOOO-........	/s$   B1C 4C 
C;#C60C;6C;Nre   rf   rg   r(   rh   r3   r1   rP  rP    s#        / / / / /r3   rP  c                   N    e Zd ZdZ e ed                    d             ZdS )helpAndSupportListzhelp_support_list.htmlr   r   c                 N   t           j                                                                        }t           j                            d                                          }t           j                            d                                          }t           j                                                            d          }t          |d          }|j                            d          }|	                    |          }t          || j        t                                S )NT)r]   Fr0  r1  r2  )HelpSupportr*   rB   r   r+   r4  r   r'   r(   r5  r   rR   r   )	rT   r-   totalresolvedpendinghelp_objr7  r8  sup_objs	            r1   r(   zhelpAndSupportList.get  s    


!
!
#
#
)
)
+
+% '''66<<>>(&&&66<<>>' $$&&//66(!$$)''+{++'	*688	4	44r3   Nr   rh   r3   r1   r\  r\    sK        )>>N;;;<<5 5 =<5 5 5r3   r\  c                   N    e Zd ZdZ e ed                    d             ZdS )viewHelpAndSupportzhelp_support_view.htmlr   r   c                     t           j                            |                                          }t	          || j        t                                S Nr   r^  r*   r+   r,   r   rR   r   )rT   r-   r   rc  s       r1   r(   zviewHelpAndSupport.get  s@    &&"&--3355'	*688	4	44r3   Nr   rh   r3   r1   re  re    sK        )>>N;;;<<5 5 =<5 5 5r3   re  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )sendReplyHelpSupportzhelp_support_reply.htmlr   r   c                     t           j                            |                                          }t	          || j        t                                S rg  rh  )rT   r-   r   helps       r1   r(   zsendReplyHelpSupport.get  s@    


$
$
$
+
+
1
1
3
3$	*688	4	44r3   c                    t          j        |j                  }|                                r|j                            d          }|j                            d          }|j                            d          }t          d|||d          }|}d}	|}
t          j        |||	|
g|           t          j
                            |                              |t          j                                        d	
           t          j        |d           t#          d          S t%          || j        t)                                S )Nr!   r   replyzsupport_email.html)
reply_textr!   r   support@olfix.co.ukrz   r   T)rn  
reply_dater]   zsend successfullyz/help-and-support-list)r   sendsupportformrZ   r[   r\   r(   r   r   r   r^  r*   r+   r  rI  r   r   r`   r   r   rR   r   )rT   r-   r   rW   r!   r   rn  r{   r   r   r   s              r1   r/   zsendReplyHelpSupport.post  s)   		w|	,	,$	]]__ 6!!'**5""9--7  ))5"#7V[fm9n9noo<=%:2>'=*rdVVVV$$++%XEVEZEZE\E\dh+iiiG0111
+
,
,,
+FHH
5
55r3   Nr  rh   r3   r1   rj  rj    sZ        *>>N;;;<<5 5 =<56 6 6 6 6r3   rj  c                   N    e Zd ZdZ e ed                    d             ZdS )customerListingzcustomer_listing.htmlr   r   c                    t           j                            dd                              d          }|j                            d          }|rvt           j                            t          |          t          |          z  t          |          z  t          |	          z  dd
                              d          }|j                            d          }t          j                                        	                    d          }|j                            d          }|r=t           j                            ||dz   |z   gdd                              d          }t          |d          }|j                            d          }|                    |          }	t          || j        t                                S )Nr   Tr   r0  searchphone_number__icontainsemail__icontainsfirst_name__icontainslast_name__icontainsr   
start_date%H:%M:%Sr_    )start_date__ranger   r   r1  r2  r)   r*   r+   r4  r'   r(   r   rI  r   strftimer   r5  r   rR   r   )
rT   r-   r6  search_postsearch_starttime
search_endr7  r8  cust_objs
             r1   r(   zcustomerListing.get  s   \  1 FFOOPUVV())+ ml!!!K"H"H"H^iIjIjIj"jkl  FQ  lR  lR  lR  #R  ST  lw  Sx  Sx  Sx  #x  LP  [\!  ]  ]  f  f  gl  m  m8..,					 	 	)	)*	5	5${z*** Nl!!\:PSCSUYCY4Zlp{|!}}  G  G  HM  N  N8!$$)''+,,(	*688	4	44r3   Nr   rh   r3   r1   rt  rt    sK        (>>N;;;<<5 5 =<5 5 5r3   rt  c                   N    e Zd ZdZ e ed                    d             ZdS )customerDetailszcustomer_details.htmlr   r   c                 2   t           j                            |dd                                          }t          j                            |d          }t          j                            |d          }t          || j        t                                S )Nr   Tr   r   r   Accepted)r8   booking_status	Completed)r)   r*   r+   r,   r   r   rR   r   )rT   r-   r   r  upcomingpasts         r1   r(   zcustomerDetails.get  sy    \  Bt LLRRTT(!((*(UU(			$	$Hk	$	R	R$	*688	4	44r3   Nr   rh   r3   r1   r  r    sK        (>>N;;;<<5 5 =<5 5 5r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )editCustomerDetailszedit_customer_details.htmlr   r   c                     t           j                            |dd                                          }t	          || j        t                                S )Nr   Tr  )r)   r*   r+   r,   r   rR   r   rT   r-   r   r   s       r1   r(   zeditCustomerDetails.get  sC    l!!R!!MMSSUU(	*688	4	44r3   c                 8   t          j        |j                  }|                                rK|j                            d          }|j                            d          }|j                            d          }|j                            d          }t          j                            |d          	                    ||||           |j
                            d          rmt          |j
                            d                    }d	|z   }t          j                            |
          	                    t          |                     t          j        |d           t          d          S t!          || j        t%                                S )Nr   r   r!   r   r   )r   r   r   r   rx   r   r   Updated successfully/get-customer-listing)r   editcustomerformrZ   r[   r\   r(   r)   r*   r+   r  r  r  rF   r   r`   r   r   rR   r   )	rT   r-   r   rW   r   r   r!   r   r  s	            r1   r/   zeditCustomerDetails.post  sh   			-	-$	]]__ 6!%%l33: $$[119  ))5#''77<<"q))00jU^gl  }I0  J  J  Jm!! ;GM--h7788GKGL2%%S\\%:::G3444
*
+
++
+FHH
5
55r3   Nr  rh   r3   r1   r  r    sZ        ->>N;;;<<5 5 =<56 6 6 6 6r3   r  c                       e Zd Zd ZdS )deleteCustomerc                     t           j                            |dd                                          }t          j                                        |_        |                                 t          j	        |d           t          d          S )Nr   Tr  zUser deleted successfullyr  r)   r*   r+   r,   rI  r   r_   r   r   r`   r   r  s       r1   r(   zdeleteCustomer.get  sq    |""bd"LLRRTT('++--(
--///
77888	)	*	**r3   NrZ  rh   r3   r1   r  r    #        + + + + +r3   r  c                   J    e Zd Z e ed                    d             ZdS )changeCustomerStatusr   r   c                 "   	 t           j                            |j        d                   }|j        d         |_        |                                 |j        dk    r<t          j        |d           t          |j	                            d                    S t          j
        |d           t          |j	                            d                    S # t          $ r.}t          j        |d           t          d	          cY d }~S d }~ww xY w)
Nmain_idr   r]   1zCustomer status is activatedHTTP_REFERERzCustomer is deactivatedrX   r  r)   r*   r(   rZ   r]   r   r   r`   r   METAr^   ra   rb   r   rT   r-   pubrc   s       r1   r/   zchangeCustomerStatus.post  s   &  gl9&= >>3X&3:88:::	jCW<===((88999N75666((88999	 & & &GEFFF
$
%
%%%%%%%&$   BC ;C 
D #D	D	DNre   rf   rg   r   r   r/   rh   r3   r1   r  r    F        >>N;;;<<& & =<& & &r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )categoryListingzcategory_listing.htmlr   r   c                    t           j                            d                              d          }|j                            d          }|rBt           j                            t          |          d                              d          }t          |d          }|j                            d          }|                    |          }t          || j
        t                                S )NTr   r0  rv  name__icontainsr1  r2  )Categoryr*   r+   r4  r'   r(   r   r   r5  r   rR   r   rT   r-   r6  r  r7  r8  cat_objs          r1   r(   zcategoryListing.get2  s    $$$==FFuMM())+ n%%a&D&D&DX\%]]ffglmm8!$$)''+{++'	*688	4	44r3   Nr   rh   r3   r1   r  r  0  sK        (>>N;;;<<5 5 =<5 5 5r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )addCategoryzadd_category.htmlr   r   c                 F    t          || j        t                                S r   r   rS   s     r1   r(   zaddCategory.get@  r   r3   c                 8   t          j        |j                  }|                                r|j                            d          }t          j                            |          }|j	                            d          rTt          |j	                            d                    }d|z   }t          |          |_        |                                 t          j        |d           t!          d          S t#          || j        t'                                S )Nr   r   imagerx   Created successfully/category-listing)r   addcategoryformrZ   r[   r\   r(   r  r*   r%  r  r  rF   r  r   r   r`   r   r   rR   r   )rT   r-   rW   r   r  r  s         r1   r/   zaddCategory.postD  s    		w|	,	,$	]]__ 6




'
'4$$D$117m   GM--g6677GKGg,,GMLLNNNG3444
&
'
''
+FHH
5
55r3   Nr  rh   r3   r1   r  r  >  sZ        $>>N;;;<<5 5 =<56 6 6 6 6r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )editCategoryzedit_category.htmlr   r   c                     t           j                            |                                          }t	          || j        t                                S rg  )r  r*   r+   r,   r   rR   r   rT   r-   r   r  s       r1   r(   zeditCategory.getW  s@    $$$++1133'	*688	4	44r3   c                 x   t          j        |j                  }|                                r|j                            d          }t          j                            |          	                    |           |j
                            d          r`t          |j
                            d                    }d|z   }t          j                            |          	                    |           t          j        |d           t          d          S t          || j        t#                                S )	Nr   r   r  r  rx   r  r  r  )r   r  rZ   r[   r\   r(   r  r*   r+   r  r  r  r   r`   r   r   rR   r   )rT   r-   r   rW   r   r  s         r1   r/   zeditCategory.post\  s
   


-
-$	]]__ 
6




'
'4b!!(((555m   ;GM--g6677GKGr""))'):::G3444
&
'
''
+FHH
5
55r3   Nr  rh   r3   r1   r  r  U  sZ        %>>N;;;<<5 5 =<56 6 6 6 6r3   r  c                       e Zd Zd ZdS )changeCategoryStatusc                 "   	 t           j                            |j        d                   }|j        d         |_        |                                 |j        dk    r<t          j        |d           t          |j	                            d                    S t          j
        |d           t          |j	                            d                    S # t          $ r.}t          j        |d           t          d	          cY d }~S d }~ww xY w)
Nr  r   r]   r  zCategory status is activatedr  zCategory is deactivatedrX   r  )r  r*   r(   rZ   r]   r   r   r`   r   r  r^   ra   rb   r   r  s       r1   r/   zchangeCategoryStatus.postm  s   & $$',y*A$BB3X&3:88:::	jCW<===((88999N75666((88999	 & & &GEFFF
$
%
%%%%%%%&r  N)re   rf   rg   r/   rh   r3   r1   r  r  k  s#        & & & & &r3   r  c                       e Zd Zd ZdS )deleteCategoryc                    t           j                            |d                                          }t          j                                        |_        |                                 t          j	        |d           t          d          S )NTrD  Category deleted successfullyr  )r  r*   r+   r,   rI  r   r_   r   r   r`   r   r  s       r1   r(   zdeleteCategory.get}  sp    %%t%EEKKMM'&**,,'	,,...
7;<<<	%	&	&&r3   NrZ  rh   r3   r1   r  r  |  s#        ' ' ' ' 'r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )subCategoryListingzsub_category_listing.htmlr   r   c                    t           j                            d                              d          }|j                            d          }|rSt           j                            t          |          t          |          z  d                              d          }t          |d          }|j                            d          }|                    |          }t          || j
        t                                S )	NTr   r0  rv  r  )category__name__icontainsr1  r2  )SubCategoryr*   r+   r4  r'   r(   r   r   r5  r   rR   r   r  s          r1   r(   zsubCategoryListing.get  s     ''4'@@II%PP())+ Z!((;)G)G)GdoHpHpHp)p  EI(  J  J  S  S  TY  Z  Z8!$$)''+{++'	*688	4	44r3   Nr   rh   r3   r1   r  r    sK        ,>>N;;;<<5 5 =<5 5 5r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )addSubCategoryzadd_sub_category.htmlr   r   c                     t           j                            d          }t          || j        t                                S NTr   r  r*   r+   r   rR   r   )rT   r-   mains      r1   r(   zaddSubCategory.get  s4    			 	 D	 	9	9$	*688	4	44r3   c                    t          j        |j                  }|                                r|j                            d          }|j                            d          }t          j                            |          }t          j        	                    ||          }|j
                            d          rTt          |j
                            d                    }d|z   }t          |          |_        |                                 t          j        |d           t#          d          S t%          || j        t)                                S )	Nr   categoryr   r   r  r  rx   r  /sub-category-listing)r   addsubcategoryformrZ   r[   r\   r(   r  r*   r  r%  r  r  rF   r  r   r   r`   r   r   rR   r   )rT   r-   rW   r   r  category_objr  r  s           r1   r/   zaddSubCategory.post  s   		!',	/	/$	]]__ 6




'
'4##J//8"&&(&33< ''t|'LL7m   GM--g6677GKGg,,GMLLNNNG3444
*
+
++
+FHH
5
55r3   Nr  rh   r3   r1   r  r    sZ        (>>N;;;<<5 5 =<56 6 6 6 6r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )editSubCategoryzedit_sub_category.htmlr   r   c                     t           j                            |                                          }t          j                            d          }t          || j        t                                S )Nr   Tr   )r  r*   r+   r,   r  r   rR   r   )rT   r-   r   r  r  s        r1   r(   zeditSubCategory.get  sY     ''2'..4466'			 	 D	 	9	9$	*688	4	44r3   c                    t          j        |j                  }|                                r'|j                            d          }|j                            d          }t          j                            |          }t          j        	                    |          
                    ||          }|j                            d          r`t          |j                            d                    }d|z   }t          j        	                    |          
                    |           t          j        |d           t          d	          S t!          || j        t%                                S )
Nr   r  r   r  r  rx   r  r  r  )r   r  rZ   r[   r\   r(   r  r*   r  r+   r  r  r  r   r`   r   r   rR   r   )	rT   r-   r   rW   r   r  r  r  r  s	            r1   r/   zeditSubCategory.post  s:   

"7<
0
0$	]]__ 6




'
'4##J//8"&&(&33< ''2'..55T\5ZZ7m   >GM--g6677GKG"%%,,W,===G3444
*
+
++
+FHH
5
55r3   Nr  rh   r3   r1   r  r    sZ        )>>N;;;<<5 5 =<5
6 6 6 6 6r3   r  c                   J    e Zd Z e ed                    d             ZdS )changeSubCategoryStatusr   r   c                 "   	 t           j                            |j        d                   }|j        d         |_        |                                 |j        dk    r<t          j        |d           t          |j	                            d                    S t          j
        |d           t          |j	                            d                    S # t          $ r.}t          j        |d           t          d	          cY d }~S d }~ww xY w)
Nr  r   r]   r  z Sub Category status is activatedr  zSub Category is deactivatedrX   r  )r  r*   r(   rZ   r]   r   r   r`   r   r  r^   ra   rb   r   r  s       r1   r/   zchangeSubCategoryStatus.post  s   &#''W\)-D'EE3X&3:88:::	jCW@AAA((88999N79:::((88999	 & & &GEFFF
$
%
%%%%%%%&r  Nr  rh   r3   r1   r  r    r  r3   r  c                       e Zd Zd ZdS )deleteSubCategoryc                    t           j                            |d                                          }t          j                                        |_        |                                 t          j	        |d           t          d          S )NTrD  r  r  )r  r*   r+   r,   rI  r   r_   r   r   r`   r   r  s       r1   r(   zdeleteSubCategory.get  sp    !((B$(HHNNPP'&**,,'	,,...
7;<<<	)	*	**r3   NrZ  rh   r3   r1   r  r    r  r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )paymentListingzpayment_listing.htmlr   r   c                 4   ddl m } t          j                                                            d          }|j                            d          }|rt          j                            t          |          t          |          z  t          |          z  t          |          z  t          |	          z  d
                              d          }|j                            d          }|rC |j	        |d          
                                }t          j                            |          }t          |d          }|j                            d          }|                    |          }	t          || j        t                                S )Nr   rI  r0  rv  )$booking__user__first_name__icontains)#booking__user__last_name__icontains)&booking__worker__first_name__icontains)%booking__worker__last_name__icontainsbooking__booking_id__icontainsTr   r  %Y-%m-%d)created_at__dater1  r2  )rI  rA   r*   rB   r4  r'   r(   r+   r   strptimedater   r5  r   rR   r   )
rT   r-   rI  r6  r  start_date_strr  r7  r8  payment_objs
             r1   r(   zpaymentListing.get  s   $((**33E::())+ V%,,QT_-`-`-`ab  HS  bT  bT  bT  .T  UV  ~I  UJ  UJ  UJ  .J  KL  s~  K  K  K  .  @A  al  @m  @m  @m  .m  AE,  F  F  O  O  PU  V  V8;??<00. J!!.*==BBDD:%,,j,II8!$$)''+"";//+	*688	4	44r3   Nr   rh   r3   r1   r  r    sK        '>>N;;;<<5 5 =<5 5 5r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )
getReportszget_reports.htmlr   r   c           
      J   !" t          j                    }|j        }t          j                            d                                          }t          j                            d                                          }t          j                            d|                              t          d                    d         }|d}t          j                                                                        }t          j                    }t          j                            |                                d	                                          }t          j                            |                                d
                                          }	t          j                            d                                          }
t          j                            d|                              t          d                    d         }t          j                            |          }g d!t          t                    |D ].}|j        j        xx         t          |j                  z  cc<   /!fdt%          dd          D             }dfdt%          dd          D             dg}t          j                            d           t          j                            d          g d} fdt%          dd          D             }fdt%          dd          D             }t          j                            ddg|                              ddi                              d                              t-          dt.                              d                    t-          dt.                              d                                                  d          }g d}d  |D             }d! |D             }t          j                            |dd"                                          }t          j                            |dd"          }t          t4                    "|D ]}|j        j        }"|xx         dz  cc<   g d!"fd#t%          dd          D             }d$|dg}t          j                            |dd%                                          }t          j                            |dd%          }t          t4                    "|D ]}|j        j        }"|xx         dz  cc<   g d!"fd&t%          dd          D             }d'|dg}|||||||||d(	}t9          || j        t=                                S ))Nr   )r   r   T)r   r   r   r   r   )start_date__dater   )r  r   Declined)r  r   r   c                 &    g | ]}|d z
           S r   rh   r   s     r1   rv   z"getReports.get.<locals>.<listcomp>  r   r3   r   Earningsc                      g | ]
}|         S rh   rh   r   s     r1   rv   z"getReports.get.<locals>.<listcomp>  s    .Y.Y.Yq/?/B.Y.Y.Yr3   r   r   r   r   c                 `    g | ]*}                     |                                           +S r   r   r   s     r1   rv   z"getReports.get.<locals>.<listcomp>%  r   r3   c                 `    g | ]*}                     |                                           +S r   r   r   s     r1   rv   z"getReports.get.<locals>.<listcomp>&  r   r3   r  )booking_status__inr   r   zEXTRACT(month FROM start_date)r   )r+   )	cancelled	completedc                 :    g | ]}|                     d d          S )r  r   r(   rt   	data_dicts     r1   rv   z"getReports.get.<locals>.<listcomp>3  &    JJJ	immK33JJJr3   c                 :    g | ]}|                     d d          S )r  r   r  r  s     r1   rv   z"getReports.get.<locals>.<listcomp>4  r  r3   )r   r   r   c                 <    g | ]}                     |d           S r   r  rt   r   users_by_months     r1   rv   z"getReports.get.<locals>.<listcomp>>  s)    @@@a##Aq))@@@r3   Users)r   r   r   c                 <    g | ]}                     |d           S r  r  r  s     r1   rv   z"getReports.get.<locals>.<listcomp>J  s)    BBB>%%a++BBBr3   zService Providers)	r   r   r   r   r   cancelled_seriescompleted_seriesuser_series_dataworker_series_data)r   r   r   r)   r*   r+   r   rA   r   r   r   rB   r  r   r   r   r   r   r~   extravaluesannotater   modelsr   r4  rE   r  r   rR   r   )#rT   r-   r   r   total_user_counttotal_provider_countr   total_bookingnew_user_countnew_worker_countcancelled_bookingr   r   r   r   r   r   r   r  r  r   active_usersr   user_countsr  r   active_workerworker_countsr  r   r   r   r   r   r  s#                                 @@@@@r1   r(   zgetReports.get  s   #,\((1(55;;==,,,;;AACC"*11T[g1hhrrsvw  tA  tA  B  B  CP  Q.>'++--3355-#<&&

Q&OOUUWW.\((#((**QR(SSYY[["*11:1NNTTVV"*11T[g1hhrrsvw  tA  tA  B  B  CP  Q. 
	 	'	'	'	F	F$ edd+
 !'' C CeE$*+++uU\/B/BB++++ :999E!RLL999*$.Y.Y.Y.YERSUWLL.Y.Y.YZZ[+ $+22D2II#+22D2II `__&jjjj]bcdfh]i]ijjjjjjj]bcdfh]i]ijjj 
		$	$j8Qco	$	p	p	9:	;	;		E$vxxzx/R/RSSS!$vxx{x/S/STTT 
 
V 
V	'		  `__& KJTJJJJJTJJJ ##\SWab#cciikk+$$lTXbc$dd,s##.  e!5%Addd+@@@@5B<<@@@+&<<= ,%%|UYef%ggmmoo-,%%|UYef%gg-s##.  e!5%Addd+BBBBU1b\\BBB-!4mLLM 55''&*
 
' 
*688	4	44r3   Nr   rh   r3   r1   r  r    sP        #>>N;;;<<\5 \5 =<\5 \5 \5r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )refundListingzrefund_listing.htmlr   r   c                    t           j                                                            d          }ddlm} |j                            d          }|rBt           j                            t          |          d                              d          }|j                            d          }|rV |j	        |d	          
                                }t           j                            |
                              d          }t          |d          }|j                            d          }|                    |          }	t          || j        t                                S )Nr0  r   r  rv  r  Tr   r  r  )date_processed__dater1  r2  )AdminRefundRequestr*   rB   r4  rI  r'   r(   r+   r   r  r  r   r5  r   rR   r   )
rT   r-   r6  rI  r  r  r  r7  r8  
refund_objs
             r1   r(   zrefundListing.get]  sE   '++--66u==())+ G (//Q\0]0]0]qu/vv  AF  G  G8;??<00. a!!.*==BBDD: (//Z/PPYYZ_``8!$$)''+!!+..*	*688	4	44r3   Nr   rh   r3   r1   r#  r#  [  K        &>>N;;;<<5 5 =<5 5 5r3   r#  c                   N    e Zd ZdZ e ed                    d             ZdS )refundDetailszrefund_details.htmlr   r   c                     t           j                            |                                          }t	          || j        t                                S rg  )r&  r*   r+   r,   r   rR   r   )rT   r-   r   r'  s       r1   r(   zrefundDetails.getq  s@    !)00b099??AA*	*688	4	44r3   Nr   rh   r3   r1   r*  r*  o  sK        &>>N;;;<<5 5 =<5 5 5r3   r*  c                   J    e Zd Z e ed                    d             ZdS )payRefundAmountr   r   c                 f   t           j                            |                                          }t          j                            |j        j                                                  }t          j                            |j        j        j	                                                  }t          j                            |                                          }|j        |j        z   }||_        |                                 d|_        |                                 t          j                            |d|j        j        z   dz   d           t"          j                            t%                      d|||j        d	           t'          j        |d
           t+          d          S )Nr   )r8   r  z$Your refund amount for booking id : z  has been processed successfullyrefund)customerr0   typewallet)rD   transcation_typebookingr8   r   payment_modezRefund processed successfullyz/refund-listing)r&  r*   r+   r,   r   r4  
booking_idr)   r8   r   
UserWalletr   refund_amountr   r]   CustomerNotificationsr%  rA   rJ   r   r`   r   )rT   r-   r   r'  r   r   user_wallet
new_amounts           r1   r/   zpayRefundAmount.postx  s   !)00b099??AA*&--1C1N-OOUUWW+\  j&8&=&@ AAGGII("))x)88>>@@+!J$<<*!+!*//&&(Eklvl~  mJ  FJ  Ln  Fn  v~&        0F0H0H[cmx  @H  Q[  Qi  x@   A  A  A
7;<<<	#	$	$$r3   Nr  rh   r3   r1   r-  r-  w  sF        >>N;;;<<% % =<% % %r3   r-  c                   N    e Zd ZdZ e ed                    d             ZdS )bookingListingzbooking_listing.htmlr   r   c                    t           j                                                            d          }|j                            d          }|rt           j                            t          |          t          |          z  t          |          z  t          |          z  t          |          z  d	                              d          }|j                            d
          }t          j        	                                
                    d          }|j                            d          }|r<t           j                            ||dz   |z   gd                              d          }t          |d          }|j                            d          }|                    |          }	t          || j        t                                S )Nr0  rv  )booking_id__icontainsuser__first_name__icontainsuser__last_name__icontains)worker__first_name__icontains)worker__last_name__icontainsTr   r  r  r_   r  )r  r   r1  r2  )r   r*   rB   r4  r'   r(   r+   r   rI  r   r  r   r5  r   rR   r   )
rT   r-   r6  r  r  r  r  r7  r8  book_objs
             r1   r(   zbookingListing.get  s   !%%''0077())+ o"))!+*N*N*NqozO{O{O{*{|}  \g  }h  }h  }h  +h  ij  KV  iW  iW  iW  +W  YZ  zE  YF  YF  YF  +F  Z^)  _  _  h  h  in  o  o8..,					 	 	)	)*	5	5${z*** J"))\:X[K[]aKa<btx)yy  C  C  DI  J  J8!$$)''+,,(	*688	4	44r3   Nr   rh   r3   r1   r=  r=    sK        '>>N;;;<<5 5 =<5 5 5r3   r=  c                   N    e Zd ZdZ e ed                    d             ZdS )bookingDetailszbooking_details.htmlr   r   c                     t           j                            |                                          }t	          || j        t                                S rg  )r   r*   r+   r,   r   rR   r   )rT   r-   r   r   s       r1   r(   zbookingDetails.get  s@    %,,",66<<>>+	*688	4	44r3   Nr   rh   r3   r1   rH  rH    sK        '>>N;;;<<5 5 =<5 5 5r3   rH  c                   N    e Zd ZdZ e ed                    d             ZdS )getWorkerListingzworker_listing.htmlr   r   c                    t           j                            dd                              d          }|j                            d          }|rvt           j                            t          |          t          |          z  t          |          z  t          |	          z  dd
                              d          }|j                            d          }dd l}|j                                        	                    d          }|j                            d          }|r=t           j                            ||dz   |z   gdd                              d          }t          |d          }|j                            d          }	|                    |	          }
t          || j        t                                S )Nr   T)r   r   r0  rv  rw  ry  r{  r}  r   r  r   r  r_   r  )r  r   r   r1  r2  r  )rT   r-   r6  r  r  rI  r  r  r7  r8  r  s              r1   r(   zgetWorkerListing.get  s   \  Q4 HHQQRWXX())+ ol!!!K"H"H"H^iIjIjIj"jkl  FQ  lR  lR  lR  #R  ST  lw  Sx  Sx  Sx  #x  LP  ]^!  _  _  h  h  in  o  o8..,///					 	 	)	)*	5	5${z*** Pl!!\:PSCSUYCY4Zlp}~!  I  I  JO  P  P8!$$)''+,,(	*688	4	44r3   Nr   rh   r3   r1   rK  rK    r(  r3   rK  c                   N    e Zd ZdZ e ed                    d             ZdS )getWorkerDetailszworker_details.htmlr   r   c                    t           j                            |dd                                          }t          j                            |                                          }t
          j                            |j                  }t          j                            |d          }t          j                            |d          }t          || j	        t                                S )Nr   Tr   r   r   )	worker_idr  )workerr  r  )r)   r*   r+   r,   WorkerBankAccountDetailsWorkerServicesr   r   r   rR   r   )rT   r-   r   r  bank_objservice_objr  r  s           r1   r(   zgetWorkerDetails.get  s    \  B1 NNTTVV('/6626FFLLNN(&--(+-FF+!(((J(WW(			$	$h	$	T	T$	*688	4	44r3   Nr   rh   r3   r1   rN  rN    sK        &>>N;;;<<5 5 =<5 5 5r3   rN  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )editWorkerDetailszedit_worker_details.htmlr   r   c                     t           j                            d          }t          j                            |dd                                          }t          || j        t                                S )NTr   r   rP  )r  r*   r+   r)   r,   r   rR   r   )rT   r-   r   r  r   s        r1   r(   zeditWorkerDetails.get  s\    			 	 D	 	9	9$\  B1 NNTTVV(	*688	4	44r3   c                    t          j        |j                  }|                                r|j                            d          }|j                            d          }|j                            d          }|j                            d          }|j                            d          }|j                            d          }	t          j                            |d          	                    |||||	|	           |j
                            d
          rmt          |j
                            d
                    }
d|
z   }
t          j                            |          	                    t          |
                     t          j        |d           t          d          S t!          || j        t%                                S )Nr   r   r!   r   
experienceaddressr   )r   r   )r   r   r!   r   r\  r[  r   rx   r   r   r  /get-worker-listing)r   editworkerformrZ   r[   r\   r(   r)   r*   r+   r  r  r  rF   r   r`   r   r   rR   r   )rT   r-   r   rW   r   r   r!   r   r[  r\  r  s              r1   r/   zeditWorkerDetails.post  s   		gl	+	+$	]]__ 6!%%l33: $$[119  ))5#''77<!%%l33:""9--7<"++22
W`in  K  V]  is2  t  t  tm!! ;GM--h7788GKGL2%%S\\%:::G3444
(
)
))
+FHH
5
55r3   Nr  rh   r3   r1   rX  rX    sZ        +>>N;;;<<5 5 =<5
6 6 6 6 6r3   rX  c                   J    e Zd Z e ed                    d             ZdS )changeWorkerStatusr   r   c                 "   	 t           j                            |j        d                   }|j        d         |_        |                                 |j        dk    r<t          j        |d           t          |j	                            d                    S t          j
        |d           t          |j	                            d                    S # t          $ r.}t          j        |d           t          d	          cY d }~S d }~ww xY w)
Nr  r   r]   r  z$Service provider status is activatedr  zService provider is deactivatedrX   r  r  r  s       r1   r/   zchangeWorkerStatus.post  s   &  gl9&= >>3X&3:88:::	jCWDEEE((88999N7=>>>((88999	 & & &GEFFF
$
%
%%%%%%%&r  Nr  rh   r3   r1   r`  r`    r  r3   r`  c                       e Zd Zd ZdS )deleteWorkerc                    t           j                            |d                                          }t          j                                        |_        |                                 t          j	        |d           t          d          S )NTrD  zWorker deleted successfullyr]  r  r  s       r1   r(   zdeleteWorker.get  so    l!!R4!AAGGII'&**,,'	,,...
79:::	'	(	((r3   NrZ  rh   r3   r1   rc  rc    s#        ) ) ) ) )r3   rc  c                   N    e Zd ZdZ e ed                    d             ZdS )featureServiceszfeature_service_list.htmlr   r   c                 *   t           j                            d                              d          }t	          |d          }|j                            d          }|                    |          }t          || j	        t                                S r/  )FetaureServicer*   r+   r4  r   r'   r(   r5  r   rR   r   )rT   r-   r6  r7  r8  feat_objs         r1   r(   zfeatureServices.get  sw    #**D*AAJJ5QQ(!$$)''+,,(	*688	4	44r3   Nr   rh   r3   r1   rf  rf    sK        ,>>N;;;<<5 5 =<5 5 5r3   rf  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )addFeatureServiceszadd_feature_service.htmlr   r   c                     t           j                            d          }t          || j        t                                S r  r  )rT   r-   sub_objs      r1   r(   zaddFeatureServices.get  s4    ##t#<<'	*688	4	44r3   c                 p   t          j        |j                  }|                                r|j                            d          }t          j                            |          	                                }t          j                            |          	                                }|r$t          j        |d           t          d          S t          j                            |           t          j        |d           t          d          S t!          || j        t%                                S )Nsub_categoryr   )ro  zAlready added/feature-servicesAdded successfully)r   addfeatureformrZ   r[   r\   r(   r  r*   r+   r,   rh  r   rb   r   r%  r`   r   rR   r   )rT   r-   rW   sub_servicerV  
check_datas         r1   r/   zaddFeatureServices.post  s   		gl	+	+$	]]__ 6#''77;!((k(::@@BB;&--;-GGMMOO: )Wo...'(((   <<<G1222
&
'
''
+FHH
5
55r3   Nr  rh   r3   r1   rk  rk    sZ        +>>N;;;<<5 5 =<56 6 6 6 6r3   rk  c                       e Zd Zd ZdS )deleteFeatureServicesc                     t           j                            |d                                          }|                                 t          j        |d           t          d          S )NTrD  Deleted Successfullyrp  )rh  r*   r+   r,   rW  r   r`   r   r  s       r1   r(   zdeleteFeatureServices.get  s\    $++rT+KKQQSS'	..
72333	%	&	&&r3   NrZ  rh   r3   r1   rv  rv    s#        ' ' ' ' 'r3   rv  c                    t           j                                        }t          d          }d|d<   t	          j        |          }|                    g d           |D ]}|                    |j        |j        j	        dz   |j        j
        z   |j        j	        dz   |j        j
        z   |j        |j        |j        j        j        |j        j        |j        |j        g	           |S )Ntext/csvcontent_typez"attachment; filename="booking.csv"Content-Disposition)	z
Booking IdService Provider Namez	User NameBooking DateBooking TimezService NamezSubservice NamezBooking StatusPricer  )r   r*   rB   r   csvwriterwriterowr6  rR  r   r   r8   booking_datebooking_timesub_servicesr  r   r  pricer-   querysetresponser  items        r1   exportCsvBookingr  &  sN    $$&&j111#G
 
*X

  `  `  `  a  a  a   T//4?DK$:3$>t{?T$TVZV_VjknVnosox  pC  WC  DH  DU  VZ  Vg  hl  hy  hB  hG  HL  HY  H^  _c  _r  sw  s}  ~        r3   c           
         | j                             dd          }| j                             dd           }| j                             dd           }t          j                            dd                              d          }|rV|                    t          |	          t          |
          z  t          |          z  t          |          z            }|O|M|                    ||dz   t          j                                        	                    d          z   g          }t          d          }d|d<   t          j        |          }|                    g d           |D ]L}|                    |j        |j        dz   |j        z   |j        |j        |j        |j        |j        g           M|S )Nrv  r5   r  r_   r   Tr   r0  rw  ry  r{  r}  r  r  )r  rz  r{  z$attachment; filename="customers.csv"r}  )zUser IdNamePhone NumberDate of BirthEmail IdStatusCreated Date)r'   r(   r)   r*   r+   r4  r   rI  r   r  r   r  r  r  r   r   r   r   dobr!   r]   r  )r-   search_queryr  r_   r  r  r  r  s           r1   exportCsvUserr  4  s    ;??8R00Lt44J{z400H|""1t"DDMMeTTH ~??1\#J#J#JQ`lMmMmMm#mpq  IU  qV  qV  qV  $V  YZ  p|  Y}  Y}  Y}  $}  ~  ~("6??j(S.S[SdShShSjSjSsSst~SSB  6A?  B  B444H&LH"#Z!!F
OOnnnooo  R R$/C"7$."H$J[]a]egkgqsws~  AE  AP  Q  	R  	R  	R  	ROr3   c           
      d   t           j                            d          }t          d          }d|d<   t	          j        |          }|                    g d           |D ]L}|                    |j        |j        dz   |j	        z   |j
        |j        |j        |j        |j        g           M|S )	Nr   r  rz  r{  z,attachment; filename="service_providers.csv"r}  )zService Provider Idr  r  r  r  r  r  r  )r)   r*   r+   r   r  r  r  r   r   r   r   r  r!   r]   r  r  s        r1   exportCsvWorkerr  N  s    LA..j111#Q
 
*X

sssttt  E ET//47DOC/>@QSWS[\`\fgkgrsw  tC  D  E  E  E  Er3   c           
         t           j                                        }t          d          }d|d<   t	          j        |          }|                    g d           |D ]}|                    |j        j        |j        j	        j
        dz   |j        j	        j        z   |j        j        j
        dz   |j        j        j        z   |j        j        |j        j        |j        |j        g           |S )Nrz  r{  !attachment; filename="refund.csv"r}  )z
Booking IDCustomer NamezWorker Namer  r  r  zRefund Statusr  )r&  r*   rB   r   r  r  r  r4  r6  r8   r   r   rR  r  r  r8  r]   r  s        r1   exportCsvRefundr  [  s@   &**,,j111#F
 
*X

uuuvvv  C CT//4<*DL,=,H,LT\M^Mh,hjnjvj}  kI  KN  kN  PT  P\  Pc  Pm  km  os  o{  oH  IM  IU  Ib  cg  cu  vz  vA  B  C  C  C  Cr3   c                   N    e Zd ZdZ e ed                    d             ZdS )getBannerListingzbanner_listing.htmlr   r   c                 *   t           j                            d                              d          }t	          |d          }|j                            d          }|                    |          }t          || j	        t                                S r/  )BannerManagementr*   r+   r4  r   r'   r(   r5  r   rR   r   )rT   r-   r6  r7  r8  
banner_objs         r1   r(   zgetBannerListing.getk  sw    &--t-DDMMeTT(!$$)''+!!+..*	*688	4	44r3   Nr   rh   r3   r1   r  r  i  K        &>>N;;;<<5 5 =<5 5 5r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )addBannerHomepagezadd_banner.htmlr   r   c                 F    t          || j        t                                S r   r   rS   s     r1   r(   zaddBannerHomepage.getx  r   r3   c                 8   t          j        |j                  }|                                r|j                            d          }t          j                            |          }|j	                            d          rit          |j	                            d                    }d|z   }t          |          |_        |                                 t          j        |d           t!          d          S t#          || j        t'                                S )Nbanner_titler  r  rx   rq  /get-banner-listing)r   addBannerformrZ   r[   r\   r(   r  r*   r%  r  r  rF   r  r   r   r`   r   r   rR   r   )rT   r-   rW   r  r  r  s         r1   r/   zaddBannerHomepage.post}  s    		W\	*	*$	]]__ 6#''77< (//\/JJ:m   4GM--g6677GKG7||JOOW2333
(
)
))
+FHH
5
55r3   Nr  rh   r3   r1   r  r  v  sZ        ">>N;;;<<5 5 =<56 6 6 6 6r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )editBannerHomepagezedit_banner.htmlr   r   c                     t           j                            |                                          }t	          || j        t                                S rg  )r  r*   r+   r,   r   rR   r   )rT   r-   r   r  s       r1   r(   zeditBannerHomepage.get  s@    '..B.77==??*	*688	4	44r3   c                 x   t          j        |j                  }|                                r|j                            d          }t          j                            |          	                    |          }|j
                            d          rut          |j
                            d                    }d|z   }t          j                            |          	                    |           t          j        |d           t          d          S t          || j        t#                                S )	Nr  r   r  r  rx   r  r  r  )r   r  rZ   r[   r\   r(   r  r*   r+   r  r  r  r   r`   r   r   rR   r   )rT   r-   r   rW   r  r  r  s          r1   r/   zeditBannerHomepage.post  s	   		W\	*	*$	]]__ 6#''77< (//R/99@@l@[[:m   6GM--g6677GKG###--4474CCCW4555
(
)
))
+FHH
5
55r3   Nr  rh   r3   r1   r  r    sZ        #>>N;;;<<5 5 =<56 6 6 6 6r3   r  c                       e Zd Zd ZdS )deleteBannerHomepagec                     t           j                            |d                                          }|                                 t          j        |d           t          d          S )NTrD  rx  r  )r  r*   r+   r,   rW  r   r`   r   r  s       r1   r(   zdeleteBannerHomepage.get  s\    &--t-MMSSUU'	..
72333	'	(	((r3   NrZ  rh   r3   r1   r  r    s#        ) ) ) ) )r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )getConverStationListingzconverstation_listing.htmlr   r   c                 H   t           j                            d          }|j                            d          }|rt           j                            t          |          t          |          z  t          |          z  t          |          z  t          |          z  d                              d	          }t          |d
          }|j                            d          }|                    |          }t          || j
        t                                S )NTr   rv  r@  rB  )'service_provider__first_name__icontains)&service_provider__last_name__icontains)twilio_channel_sid__icontainsr0  r1  r2  )Conversationr*   r+   r'   r(   r   r4  r   r5  r   rR   r   )rT   r-   r6  r  r7  r8  chat_objs          r1   r(   zgetConverStationListing.get  sd    "))4)@@())+ B"))!*T*T*TUVr}U~U~U~*~  @A  ju  @v  @v  @v  +v  wx  `k  wl  wl  wl  +l  mn  MX  mY  mY  mY  +Y  mq)  r  r  {  {  |A  B  B8!$$)''+,,(	*688	4	44r3   Nr   rh   r3   r1   r  r    sK        ->>N;;;<<5 5 =<5 5 5r3   r  c           	         t           j                                        }t          d          }d|d<   t	          j        |          }|                    g d           |D ]e}|                    |j        j        dz   |j        j	        z   |j
        j        dz   |j
        j	        z   |j        |j        |j        |j        g           f|S )Nrz  r{  r  r}  )r  r~  zTwilio Channel SIDzUser Twilio IDzService Provider Twilio ID
Created atr  )r  r*   rB   r   r  r  r  r8   r   r   service_providertwilio_channel_siduser_twilio_idservice_provider_twilio_idr   r  s        r1   exportConvertsationr    s    $$&&j111#F
 
*X

  M  M  M  N  N  N  h hT//49'+DI,??AVAabeAefjf{  gF  BF  HL  H_  bf  bu  w{  wV  W[  Wf  g  h  h  h  hr3   c                   J    e Zd Z e ed                    d             ZdS )approveWorkerAccountr   r   c                    t           j                            |d                              d          }t           j                            |d                                          }t          dd|j        i          }d}|}d}|j        }	t          j        ||||	g|	           t          j
        |d
           t          d          S )NTrD  r   is_worker_approvedzapprove_worker_account.htmlr!   zAccount Approved Successfullyrp  rz   zApproved Successfullyr]  )r)   r*   r+   r  r,   r   r!   r   r   r   r`   r   )
rT   r-   r   r  work_objr{   r   r   r   r   s
             r1   r(   zapproveWorkerAccount.get  s    l!!R4!AAHH^_H``'|""bD"BBHHJJ(!"?'(.AYZZ,+'-$*~".-bTUUUU
73444	'	(	((r3   Nr  rh   r3   r1   r  r    sF        >>N;;;<<
) 
) =<
) 
) 
)r3   r  c                   T    e Zd ZdZ e ed                    d             Zd ZdS )disapproveWorkerAccountzdisapporve_reason.htmlr   r   c                 J    |}t          || j        t                                S r   r   )rT   r-   r   rQ  s       r1   r(   zdisapproveWorkerAccount.get  s     )	*688	4	44r3   c                 j   t          j        |j                  }|                                r|j                            d          }t          j                            |d          	                    d          }t          j                            |d          
                                }t          d|j        |d          }d}|}	d	}
|j        }t          j        ||	|
|g|
           t          j        |d           t#          d          S t%          || j        t)                                S )NreasonTrD     r  zdisapprove_worker_account.html)r!   r  z Account Disapproved Successfullyrp  rz   zDisapproved Successfullyr]  )r   DisapproveReasonFormrZ   r[   r\   r(   r)   r*   r+   r  r,   r   r!   r   r   r   r`   r   r   rR   r   )rT   r-   r   rW   r  r  r  r{   r   r   r   r   s               r1   r/   zdisapproveWorkerAccount.post  s   		#GL	1	1$	]]__ 6!!(++6|""bD"BBII_`Iaa7##rT#CCIIKK8"#ChnflEmEmnn</7=%:2>'=*rdVVVVG7888
(
)
))
+FHH
5
55r3   Nr  rh   r3   r1   r  r    sZ        )>>N;;;<<5 5 =<56 6 6 6 6r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )getRatingsReviewListzrating_review_list.htmlr   r   c                    t           j                            d          }t          |d          }|j                            d          }|                    |          }t          || j        t                                S )NTr   r1  r2  )
ServiceProviderRatingReviewsr*   r+   r   r'   r(   r5  r   rR   r   )rT   r-   r6  r7  r8  
rating_objs         r1   r(   zgetRatingsReviewList.get  si    *29949PP(!$$)''+!!+..*	*688	4	44r3   Nr   rh   r3   r1   r  r    sK        *>>N;;;<<5 5 =<5 5 5r3   r  c                   N    e Zd ZdZ e ed                    d             ZdS )getRatingsReviewDetailszrating_review_details.htmlr   r   c                     t           j                            |d                                          }t	          || j        t                                S rC  )r  r*   r+   r,   r   rR   r   )rT   r-   r   r  s       r1   r(   zgetRatingsReviewDetails.get  sC    ,4;;rSW;XX^^``*	*688	4	44r3   Nr   rh   r3   r1   r  r    sK        ->>N;;;<<5 5 =<5 5 5r3   r  c                       e Zd Zd ZdS )deleteRatingReviewc                     t           j                            |d                                          }|                                 t          j        |d           t          d          S )NTrD  rx  z/get-ratings-reviews-list)r  r*   r+   r,   rW  r   r`   r   r  s       r1   r(   zdeleteRatingReview.get
  s]    *299RSW9YY__aa'	..
72333	-	.	..r3   NrZ  rh   r3   r1   r  r  	  s#        / / / / /r3   r  c                    t           j                                        }t          d          }d|d<   t	          j        |          }|                    g d           |D ]_}|                    |j        j        dz   |j        j	        z   |j
        j        dz   |j
        j	        z   |j        |j        |j        g           `|S )Nrz  r{  r  r}  )r  r~  RatingReviewr  r  )r  r*   rB   r   r  r  r  r8   r   r   r  ratingreviewr  r  s        r1   exportCSVRatingReviewr    s    (04466j111#F
 
*X

[[[\\\  t tT//49'+DI,??AVAabeAefjf{  gF  BF  HL  HS  VZ  Va  cg  cr  s  t  t  t  tr3   c                   N    e Zd ZdZ e ed                    d             ZdS )payoutListingzpayout_listing.htmlr   r   c                 &   t           j                                                            d          }t	          |d          }|j                            d          }|                    |          }t          || j	        t                                S )Nr0  r1  r2  ) ServiceProviderPayoutTranscationr*   rB   r4  r   r'   r(   r5  r   rR   r   )rT   r-   r6  r7  r8  pay_objs         r1   r(   zpayoutListing.get"  sr    .6::<<EEeLL(!$$)''+{++'	*688	4	44r3   Nr   rh   r3   r1   r  r     r  r3   r  )get_object_or_404c                     | j                             d          }| j                             d          }t          t          |          }||_        |                                 t          ddi          S )Ntransaction_id
new_statusr   r`   T)rZ   r(   r  r  transcation_statusr   r   )r-   r  r  pays       r1   update_transaction_statusr  ,  sh    \%%&677N!!,//J
<
P
P
PC'CHHJJJD)***r3   c                   T    e Zd ZdZ e ed                    d             Zd ZdS )otherSettingszother_settings.htmlr   r   c                     t           j                                                                        }t	          || j        t                                S r   )OtherSettingsr*   rB   r,   r   rR   r   )rT   r-   	other_objs      r1   r(   zotherSettings.get9  s;    $((**0022)	*688	4	44r3   c                 <   t          j        |j                  }|                                r|j                            d          }|j                            d          }t          j                                        	                                }|r#||_
        ||_        |                                 n!t          j                            ||           t          j        |d           t!          d          S t#          || j        t'                                S )Nplatform_feesadmin_commission)platform_feer  r"  z/other-settings)r   addothersettingformrZ   r[   r\   r(   r  r*   rB   r,   r  r  r   r%  r   r`   r   r   rR   r   )rT   r-   rW   r  r  rt  s         r1   r/   zotherSettings.post=  s    		"7<	0	0$	]]__ 6$((99<(,,-?@@%))++1133: `*J"2JOO  N^ ___G3444
$
%
%%
+FHH
5
55r3   Nr  rh   r3   r1   r  r  7  sZ        &>>N;;;<<5 5 =<56 6 6 6 6r3   r  )concurrent.futures.threadr   r   pipesr   django.views.generic.baser   django.views.genericr   django.contrib.authr   r	   r
   django.shortcutsr   r   django.http.responser   admin_panel.modelsr5   r   django.contribr   django.corer   django.template.loaderr   mathro   rq   django.confr   django.core.paginatorr   django.httpr   django.contrib.auth.decoratorsr   django.utils.decoratorsr   	functionsdjango.db.modelsr   r   rI  jsonr   astpasslib.hashr   handlerr   worker_panel.modelsuser_panel.modelsdjango.utilsr   r  collectionsr   r2   r9   r<   rJ   rL   rj   r   r   r   r  r  r  r(  r-  r;  rA  rG  rK  rP  r\  re  rj  rt  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r*  r-  r=  rH  rK  rN  rX  r`  rc  rf  rk  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rh   r3   r1   <module>r     s   ; ; ; ; ; ; ; ;       * * * * * * - - - - - - ; ; ; ; ; ; ; ; ; ; - - - - - - - - - - - - - -               # # # # # #       3 3 3 3 3 3                         + + + + + + $ $ $ $ $ $ 9 9 9 9 9 9 4 4 4 4 4 4     " " " " " " " "   " " " " " " 



 - - - - - - 8 8 8 8 8 8  , , , , , , ! ! ! !     ! ! ! ! ! ! 



 # # # # # #* * *      "# "# "# "# "# "# "# "#J> > > > >, > > >:"> "> "> "> "> "> "> ">J15 15 15 15 15\ 15 15 15h. . . . .< . . .0& & & & & & & &2" " " " ", " " "6 6 6 6 6D 6 6 6.6 6 6 6 6 6 6 6.5 5 5 5 5 5 5 56 6 6 6 6T 6 6 6$6 6 6 6 6d 6 6 6$" " " " " " " "5 5 5 5 5 5 5 5/ / / / /t / / /,5 5 5 5 5 5 5 55 5 5 5 5 5 5 56 6 6 6 6< 6 6 645 5 5 5 5l 5 5 5&5 5 5 5 5l 5 5 56 6 6 6 6, 6 6 60+ + + + +T + + +& & & & &4 & & &*5 5 5 5 5l 5 5 56 6 6 6 6, 6 6 6.6 6 6 6 6< 6 6 6,& & & & &4 & & &"' ' ' ' 'T ' ' '5 5 5 5 5 5 5 56 6 6 6 6\ 6 6 666 6 6 6 6l 6 6 62& & & & &d & & &"+ + + + + + + +5 5 5 5 5\ 5 5 5,_5 _5 _5 _5 _5 _5 _5 _5B5 5 5 5 5L 5 5 5(5 5 5 5 5L 5 5 5% % % % %d % % %$5 5 5 5 5\ 5 5 5&5 5 5 5 5\ 5 5 55 5 5 5 5| 5 5 5&	5 	5 	5 	5 	5| 	5 	5 	56 6 6 6 6 6 6 68& & & & & & & &&) ) ) ) )4 ) ) )5 5 5 5 5l 5 5 56 6 6 6 6 6 6 6,' ' ' ' 'D ' ' '
 
 
  4
 
 

 
 
5 5 5 5 5| 5 5 56 6 6 6 6 6 6 606 6 6 6 6 6 6 6.) ) ) ) )< ) ) )5 5 5 5 5l 5 5 5 
 
 
) ) ) ) )4 ) ) )6 6 6 6 6l 6 6 625 5 5 5 5< 5 5 55 5 5 5 5l 5 5 5/ / / / / / / /
 
 
5 5 5 5 5L 5 5 5 / . . . . .+ + +6 6 6 6 6L 6 6 6 6 6r3   