a
    0iH.                     @   sx   d dl mZmZmZ d dlmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlmZ d dlZd dlZd dlmZ dd ZdS )    )jsonifyrequestrender_template)
get_AccessEmployeesget_all_request_typesget_roles_by_filtersget_all_companiesget_divisions_by_companyget_departments_by_divisionget_infocheck_if_email_existsupdate_infoupdate_user_request_rejected)MessageN)send_activation_emailc                    s   j ddgddd } j ddgddd } j d	dgdd
d } j ddgddd } j ddgddd } j ddgddd } j ddgddd } j ddgddd }	 j ddgd fdd}
 j ddgdfd d!}d% fd#d$	 S )&uO   
    Agrupamos todas las funciones que importamos en la aplicación Flask.
    z2/SupyCtrol_Module/DataMaster/DMAccessEmployee/listGET)methodsc               
   S   sR   zt  } t| dfW S  tyL } z tdt|idfW  Y d}~S d}~0 0 dS )u8   Retorna la lista de empleados pendientes de aceptación.   error  N)r   r   	Exceptionstr)ZAccessEmployeese r   E/var/www/html/src/App/SupyCtrol_Module/DataMaster/DMAccessEmployee.pylist_AccessEmployees   s
    z5funcion_AccessEmployees.<locals>.list_AccessEmployeesz;/SupyCtrol_Module/DataMaster/DMAccessEmployee/request-typesc               
   S   sR   zt  } t| dfW S  tyL } z tdt|idfW  Y d}~S d}~0 0 dS )z4Retorna la lista de tipos de formulario disponibles.r   r   r   N)r   r   r   r   )Zrequest_typesr   r   r   r   get_request_types   s
    z2funcion_AccessEmployees.<locals>.get_request_typesz7/SupyCtrol_Module/DataMaster/DMAccessEmployee/companiesc               
   S   sR   zt  } t| dfW S  tyL } z tdt|idfW  Y d}~S d}~0 0 dS )u,   Retorna la lista de compañías disponibles.r   r   r   N)r   r   r   r   )	companiesr   r   r   r   get_companies'   s
    z.funcion_AccessEmployees.<locals>.get_companiesz7/SupyCtrol_Module/DataMaster/DMAccessEmployee/divisionsc               
   S   sv   z8t jd} | s$tddidfW S t| }t|dfW S  typ } z tdt|idfW  Y d}~S d}~0 0 dS )uC   Retorna las divisiones disponibles para una compañía específica.	companyIdr   zCompanyID es requerido  r   r   N)r   argsgetr   r	   r   r   )
company_idZ	divisionsr   r   r   r   get_divisions0   s    z.funcion_AccessEmployees.<locals>.get_divisionsz9/SupyCtrol_Module/DataMaster/DMAccessEmployee/departmentsc               
   S   s   zJt jd} t jd}| r"|s4tddidfW S t| |}t|dfW S  ty } z tdt|idfW  Y d}~S d}~0 0 dS )	uS   Retorna los departamentos disponibles para una compañía y división específicas.r   
divisionIdr   z%CompanyID y DivisionID son requeridosr    r   r   N)r   r!   r"   r   r
   r   r   )r#   division_idZdepartmentsr   r   r   r   get_departments=   s    
z0funcion_AccessEmployees.<locals>.get_departmentsz</SupyCtrol_Module/DataMaster/DMAccessEmployee/filtered-rolesc               
   S   s   zDt jdd} t jdd}t jdd}t| ||}t|dfW S  ty| } z tdt|idfW  Y d}~S d}~0 0 dS )	uY   Retorna la lista de roles disponibles filtrados por compañía, división y departamento.r    r%   ZdepartamentIdr   r   r   N)r   r!   r"   r   r   r   r   )r#   r&   Zdepartament_idZrolesr   r   r   r   get_filtered_rolesL   s    z3funcion_AccessEmployees.<locals>.get_filtered_rolesz5/SupyCtrol_Module/DataMaster/DMAccessEmployee/getinfoc               
   S   s   zLt jd} td|  | s.tddidfW S t| }td| t|dfW S  ty } z tdt|idfW  Y d	}~S d	}~0 0 d	S )
uB   Obtiene la información detallada de un empleado por su RequestID.	RequestIDzID del usuario: r   RequestID es requeridor    u   Información del empleado: r   r   N)r   r!   r"   printr   r   r   r   )
request_idZInfoEmployeer   r   r   r   getinfoY   s    

z(funcion_AccessEmployees.<locals>.getinfoz9/SupyCtrol_Module/DataMaster/DMAccessEmployee/check-emailc               
   S   sz   z<t jd} | s$tddidfW S t| }td|idfW S  tyt } z tdt|idfW  Y d}~S d}~0 0 dS )	u?   Verifica si un correo electrónico ya existe en la tabla Users.emailr   zEmail es requeridor    existsr   r   N)r   r!   r"   r   r   r   r   )r/   r0   r   r   r   r   check_email_existsl   s    z3funcion_AccessEmployees.<locals>.check_email_existsz4/SupyCtrol_Module/DataMaster/DMAccessEmployee/updatePOSTc            	   
      sH  zt  } | s tddidfW S | d}|s@tddidfW S t| }td| |r^d|vrptddid	fW S td
|d  t |d }t|tr|\}}| }td|ddd|fW S tdt	|dr|j
ndddfW S  tyB } zBddl}td|  t|  tdt|id	fW  Y d}~S d}~0 0 dS )u)   Actualiza la información de un empleado.r   zNo se recibieron datosr    r*   r+   u    Resultado de la actualización: user_idz0No se pudo obtener el ID del usuario actualizador   zID del usuario actualizado: ub   Hubo un error al enviar el correo de activación contacte a soporte carlos.velazquezm@igsa.com.mx zError desconocido)messager   u&   Información actualizada correctamentejsonzEmail enviado correctamente)r4   Z
token_infor   r   Nz)Error en al intentar resgistrar usuario: )r   get_jsonr   r"   r   r,   r   
isinstancetuplehasattrr5   r   	traceback
format_excr   )	datar-   update_resultZtoken_resultZjson_responsestatus_codeZ
error_datar   r:   appmailr   r   
updateinfoz   sB    

	

z+funcion_AccessEmployees.<locals>.updateinfoz4/SupyCtrol_Module/DataMaster/DMAccessEmployee/rejectc            	   
      s   zt  } | d}| d}|s4tddidfW S t|}|rHd|v rZtddidfW S td}tj|	d	}t
|||}d|v rt|dfW S  ||}d|v rtd
|d ddfW S tddidfW S  ty } z.td|  tdt|idfW  Y d}~S d}~0 0 dS )uD   Rechaza una solicitud de empleado y envía notificación por correo.Z
employeeId
comentarior   zID de empleado requeridor    u/   No se pudo obtener la información del empleador   America/Mexico_Cityz%Y-%m-%d %H:%M:%SuK   Solicitud rechazada, pero hubo un problema al enviar el correo electrónico)r4   Z
error_mailr   r4   u9   Solicitud rechazada correctamente y notificación enviadaz[Error en reject_employee] N)r   r6   r"   r   r   pytztimezonedatetimenowstrftimer   r   r,   r   )	r<   Zemployee_idrC   employee_inforF   current_dater=   Zemail_resultr   )enviar_correo_rechazor   r   reject_employee   s4    



z0funcion_AccessEmployees.<locals>.reject_employeeNc           
   
      s   z| d }|sddiW S d}t d}tj|}| d | d tj j|d}td	|d
}t| jd |gd}||_ 	  
| W d   n1 s0    Y  ddiW S  t y }	 z&td|	  dt|	iW  Y d}	~	S d}	~	0 0 dS )uK   
        Envía un correo de notificación de rechazo al empleado.
        ZCorporateEmailr   u&   No se encontró el correo del empleadoz0Respuesta a su solicitud de acceso como empleadorD   	FirstNameLastName)rN   rO   ZYearZ
ComentariozSecurity/UserPasswordemail.html)r<   MAIL_USERNAME)sender
recipientsNZsuccesszCorreo enviado correctamentez#Error al enviar correo de rechazo: )rE   rF   rG   rH   yearr   r   confightmlapp_contextsendr   r,   r   )
rJ   rC   ZdestinatarioZasuntorF   rK   r<   Zcuerpo_htmlmsgr   r?   r   r   rL      s2    



(
z6funcion_AccessEmployees.<locals>.enviar_correo_rechazo)N)route)r@   rA   r   r   r   r$   r'   r)   r.   r1   rB   rM   r   )r@   rL   rA   r   funcion_AccessEmployees   s,    

	





8&-rZ   )flaskr   r   r   Z6Consultas_SQL.SupYCtrol.DataMaster.DMAccessEmployeeSQLr   r   r   r   r	   r
   r   r   r   r   
flask_mailr   rG   rE   Z App.Security_Module.UserPasswordr   rZ   r   r   r   r   <module>   s   0