o
    h5Q                     @   s  d dl mZmZ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 d dlmZmZmZmZmZ d dlmZ d dlmZmZmZmZ 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% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-Z-d dl.Z.dd Z/dd Z0edddd Z1edddd Z2edddd Z3G dd deZ4edd  Z5G d!d" d"eZ6G d#d$ d$eZ7G d%d& d&eZ8eddd'd( Z9eddd)d* Z:eddd+d, Z;eddd-d. Z<eddd/d0 Z=eddd1d2 Z>eddd3d4 Z?eddd5d. Z<eddd6d7 Z@eddd8d9 ZAeddd:d; ZBeddd<d= ZCeddd>d? ZDG d@dA dAeZEedddBdC ZFdS )D    )renderredirectget_object_or_404)login_required)staff_member_required)loginlogoutauthenticate)messages)PasswordResetViewPasswordResetDoneViewPasswordResetConfirmViewPasswordResetCompleteViewPasswordChangeView)reverse_lazy)AuthenticationFormPasswordResetFormUserChangeFormUserCreationForm)UserGroup)JsonResponse)	send_mail)render_to_stringsettings   )CustomUserCreationFormCustomUserChangeForm	GroupFormGroupPermissionFormEditProfileFormTenantLoginFormNc                 C   s  ddl m } | jdkryt| j}| rc|jd }|jd }|jd }t| | |j| jd< g d}d	d
 |j	
 D }|j	 r_|j	 j}|dkrOtdS |dkrWtdS |dv r_tdS tdS |j D ]\}	}
|
D ]}t| | qnqhnt }|| jd}t| d|S )Nr   datetimePOSTusertenanttenant_usertenant_code)Sales
SupervisorManagerAdministratorc                 S   s   g | ]}|j qS  )name).0groupr.   r.   "/var/www/html/pos/authapp/views.py
<listcomp>(   s    zuser_login.<locals>.<listcomp>r*   zsales:make_saler+   zsales:sale_dashboard)r,   r-   	dashboard)formcurrent_yearzauthapp/login.html)r$   methodr"   r%   is_validcleaned_datar   r)   sessiongroupsallexistsfirstr/   r   errorsitemsr
   errornowyearr   )requestr$   r5   r&   r'   r(   staff_groupsuser_groups
user_groupfieldr?   rA   contextr.   r.   r2   
user_login   s<   






rJ   c                 C   s   ddl m } | jdkrK| jd}| jd}|rE|rEt||d}|r>|jr>t| | d| jv r4| jd= t	| d t
d	S t| d
 nt| d d| ji}t| d|S )Nr   r#   r%   usernamepassword)rK   rL   r)   zWelcome, System Administrator!ztenants_admin:system_dashboardz/Invalid credentials or insufficient privileges.z(Please enter both username and password.r6   zauthapp/superadmin_login.html)r$   r7   r%   getr	   is_superuserr   r:   r
   successr   rA   rB   rC   r   )rD   r$   rK   rL   r&   rI   r.   r.   r2   superadmin_loginD   s"   




rP   /auth/login/)	login_urlc                 C   f   t t|d}| jdkr%t| j|d}| r$|  t| d t	dS nt|d}t
| d||dS )N)pkr%   instancez"User profile updated successfully.	user_listzauthapp/user_edit.html)r5   r&   r   r   r7   r   r%   r8   saver
   rO   r   r   )rD   rT   r&   r5   r.   r.   r2   	user_edit`   s   

rZ   c                 C   s"   d| j v r	| j d= t|  tdS )Nr)   zlanding:home)r:   r   r   rD   r.   r.   r2   user_logoutp   s   
r\   c                 C   s
   t | dS )Nzauthapp/profile.html)r   r[   r.   r.   r2   profiley   s   
r]   c                   @   s    e Zd ZdZedZdZdZdS )CustomPasswordResetViewzauthapp/password_reset.htmlpassword_reset_donez!authapp/password_reset_email.htmlz"authapp/password_reset_subject.txtN)__name__
__module____qualname__template_namer   success_urlemail_template_namesubject_template_namer.   r.   r.   r2   r^   ~   s
    r^   c                 C   s
  | j dkrztt|d}ddd tdD }|| |  ddlm}m	} |j
j|d	 }|r7|jnd
}zqd|r@|jnd }d|   d}	|||rS|jnd||	ddd}
td|
}d|rf|jnd d| po|j d|j d| d|r}|jnd d|	 d}t||tj|jg|dd t| d|j d|j  t| d|  W n0 ty } z$t| d|j  t| dt|  t| d|  W Y d
}~nd
}~ww td d!d"W S  ty } ztdt|d#W  Y d
}~S d
}~ww tdd$d#S )%z4Admin function to reset user password and send emailr%   id c                 s   s"    | ]}t tjtj V  qd S N)secretschoicestringascii_lettersdigits)r0   _r.   r.   r2   	<genexpr>   s     z,admin_reset_user_password.<locals>.<genexpr>   r   )
TenantUserTenant)r&   NzPassword Reset - zPOS 254zhttp://rQ   zN/Azsupport@posapp.co.kez+254 796374224)r&   r'   r)   new_passwordrR   support_emailcontact_phonez"tenants/emails/password_reset.htmlz

Hello z\,

Your password has been reset by an administrator.

Your new login credentials:
Username: z
New Password: z
Tenant Code: z

Login at: a  

IMPORTANT: For security reasons, please change this password after your first login.

If you did not request this password reset, please contact our support team immediately.

Support: support@posapp.co.ke
Phone: +254 796374224

Best regards,
The POS 254 TeamF)subjectmessage
from_emailrecipient_listhtml_messagefail_silentlyzPassword reset for z. New password sent to zNew password: zEmail failed to send: TzPassword reset successfully)rO   ry   )rO   rA   zInvalid request method)r7   r   r   joinrangeset_passwordrY   tenants.modelsrs   rt   objectsfilterr>   r'   r/   get_hostr)   r   get_full_namerK   r   r   DEFAULT_FROM_EMAILemailr
   rO   info	Exceptionwarningstrr   )rD   user_idr&   ru   rs   rt   r(   r'   rx   rR   rI   r|   plain_messageer.   r.   r2   admin_reset_user_password   sl   



		r   c                   @      e Zd ZdZdS )CustomPasswordResetDoneViewz authapp/password_reset_done.htmlNr`   ra   rb   rc   r.   r.   r.   r2   r          r   c                   @      e Zd ZdZedZdS )CustomPasswordResetConfirmViewz#authapp/password_reset_confirm.htmlpassword_reset_completeNr`   ra   rb   rc   r   rd   r.   r.   r.   r2   r          r   c                   @   r   )CustomPasswordResetCompleteViewz$authapp/password_reset_complete.htmlNr   r.   r.   r.   r2   r      r   r   c              
   C   s  t j }tj }t }i }| jdkrNd| jv rKt| j| j}| rI|j	dd}|	  | j
d}|j| |	  t| d tdS nd| jv r| jd	}tt |d
}t| j| j|d}	|	 r|	j	dd}
|
	  | j
d}|
j| |
	  t| d tdS t| d nd| jv rN| jd	}tt |d
}| jdst| d tdS zu| jd|j|_| jdd|_| jdd|_| jdd|_d| jv |_| jjrd| jv |_d| jv |_d| jv r|| jkrd|_|	  | j
d}|j| d| jv rt| d|j d t| d|j d tdW S  tyM } zt| dt|  tdW  Y d }~S d }~ww |D ]}|j |vr`t|d||j < qP||||d }t!| d!|S )"Nr%   add_userF)commitr;   User added successfullyrW   	edit_userr   rg   rU   User updated successfullyz+Error updating user. Please check the form.advanced_edit_userzauth.change_userz)You do not have permission to edit users.rK   
first_nameri   	last_namer   	is_activeis_staffrN   lock_accountreset_passwordz$Password reset will be required for z on next login.zUser z0 has been updated successfully with all changes.zError updating user: )usersadd_user_formedit_user_formsavailable_groupszauthapp/user_list.html)"r   r   r<   r   r   r7   r%   FILESr8   rY   getlistr;   setr
   rO   r   rM   r   r   rA   r&   has_permrK   r   r   r   r   rN   r   r   r   r   rh   r   )rD   r   r   r   r   new_userselected_groupsr   user_instanceedit_user_formupdated_userr   r&   rI   r.   r.   r2   rW      s   




rW   c                 C   rS   )Nrg   r%   rU   r   rW   zauthapp/edit_user.html)r5   user_objrX   )rD   r   r&   r5   r.   r.   r2   r   H     

r   c                 C   P   | j dkrt| j}| r|  t| d tdS nt }t| dd|iS )Nr%   r   rW   zauthapp/add_user.htmlr5   )	r7   r   r%   r8   rY   r
   rO   r   r   rD   r5   r.   r.   r2   r   V     

r   c                 C      t j }t| dd|iS Nzauthapp/group_list.htmlr;   r   r   r<   r   rD   r;   r.   r.   r2   
group_listc     
r   c                 C   rS   )Nrg   r%   rU   Group updated successfullyr   zauthapp/edit_group.html)r5   	group_objr   r   r7   r   r%   r8   rY   r
   rO   r   r   rD   group_idr1   r5   r.   r.   r2   
edit_groupi  r   r   c                 C   r   )Nr%   zGroup added successfullyr   zauthapp/add_group.htmlr5   	r7   r   r%   r8   rY   r
   rO   r   r   r   r.   r.   r2   	add_groupw  r   r   c                 C   s(   t t|d}|  t| d tdS )Nrg   zUser deleted successfullyrW   )r   r   deleter
   rO   r   )rD   r   r&   r.   r.   r2   delete_user  s   r   c                 C   r   r   r   r   r.   r.   r2   r     r   c                 C   r   )Nr%   zGroup created successfullyr   zauthapp/group_create.htmlr5   r   r   r.   r.   r2   group_create  s   

r   c                 C   rS   )Nrg   r%   rU   r   r   zauthapp/group_edit.html)r5   r1   r   r   r.   r.   r2   
group_edit  s   

r   c                 C   sB   t t|d}| jdkr|  t| d tdS t| dd|iS )Nrg   r%   zGroup deleted successfullyr   z!authapp/group_delete_confirm.htmlr1   )r   r   r7   r   r
   rO   r   r   )rD   r   r1   r.   r.   r2   group_delete  s   
r   c                 C   sj   t t|d}| jdkr't| j|d}| r&|  t| d t	d|dS nt|d}t
| d||dS )	Nrg   r%   rU   z Permissions updated successfullygroup_detail)r   zauthapp/group_detail.html)r1   r5   )r   r   r7   r    r%   r8   rY   r
   rO   r   r   r   r.   r.   r2   r     s   

r   c                 C   s  | j dkrt| j| j| jd}| r| }d| jv r| jd }dd l}ddlm	} ddl
m} |j|jd}|j|dd	 |j|jd
 }d|j | }	|jd|	}
|j|d|j d}dd l}||ddD ]}z|| W qq   Y qq||
|}|| jd< t| d tdS t| d nt| jd}d }d| jv rddlm	} |j | jd  }||d}t| d|S )Nr%   rU   profile_picturer   r   )default_storageprofile_picturesT)exist_okr   user_z.**z+Your profile has been updated successfully.edit_profilez Please correct the errors below.)r5   profile_picture_urlzauthapp/edit_profile.html)r7   r!   r%   r   r&   r8   rY   osdjango.confr   django.core.files.storager   pathr~   
MEDIA_ROOTmakedirssplitextr/   rh   globreplaceremover:   r
   rO   r   rA   	MEDIA_URLr   )rD   r5   r&   r   r   r   r   
upload_dirfile_extensionfilename	file_pathold_file_pathr   old_file
saved_pathr   rI   r.   r.   r2   r     sF   




r   c                   @   r   )CustomPasswordChangeViewzauthapp/change_password.htmlzauthapp:profileNr   r.   r.   r.   r2   r     r   r   c                 C   s   t  }|| S rj   )r   as_view)rD   viewr.   r.   r2   user_change_password  s   r   )Gdjango.shortcutsr   r   r   django.contrib.auth.decoratorsr   %django.contrib.admin.views.decoratorsr   django.contrib.authr   r   r	   django.contribr
   django.contrib.auth.viewsr   r   r   r   r   django.urlsr   django.contrib.auth.formsr   r   r   r   django.contrib.auth.modelsr   r   django.httpr   django.core.mailr   django.template.loaderr   r   r   formsr   r   r   r    r!   r"   rk   rm   rJ   rP   rZ   r\   r]   r^   r   r   r   r   rW   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r2   <module>   sv     -



O
g





	






<