U
    i[/                     @   sX   d dl Z d dlmZ dd Zdd Zdd Zd	d
 Zdd Zdd Zdd Z	dd Z
dS )    N)get_connectionc              
   C   s   d}zzBt }|std| }|||  | }dd |D W W |S  tk
r } ztd|  g  W Y W NS d}~X Y n< tk
r } ztd|  g  W Y W S d}~X Y nX W 5 |r|   X dS )z/
    Obtiene los correos de los empleados.
    z?
       SELECT Correos FROM CorreosdeModulos WHERE  ID = ?
    4   No se pudo establecer conexión con la base de datosc                 S   s   g | ]}d |d iqS )Correosr    .0rowr   r   YC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\Consultas_SQL\registration.py
<listcomp>   s     z0get_Correo_Solicitud_de_alta.<locals>.<listcomp>   [Error de conexión] Nz:[Error inesperado] Error obteniendo correos de empleados: closer   ConnectionErrorcursorexecutefetchallprint	Exception)idqueryconnr   resultsceer   r   r	   get_Correo_Solicitud_de_alta   s"    "r   c               
   C   s   d} zz@t }|std| }||  | }dd |D W W |S  tk
r } ztd|  g  W Y W NS d }~X Y n< tk
r } ztd|  g  W Y W S d }~X Y nX W 5 |r|   X d S )Nz&SELECT CompanyID, Company FROM Companyr   c                 S   s   g | ]}|d  |d dqS )r      )	CompanyIDCompanyr   r   r   r   r	   r
   1   s     z!get_companies.<locals>.<listcomp>r   1   [Error inesperado] Error obteniendo compañías: r   r   r   r   r   r   r   r   r   r	   get_companies%   s"    
"r    c               
   C   s   d} zz@t }|std| }||  | }dd |D W W |S  tk
r } ztd|  g  W Y W NS d}~X Y n< tk
r } ztd|  g  W Y W S d}~X Y nX W 5 |r|   X dS )up   
    Obtiene las compañías desde la base de datos.
    Retorna una lista de diccionarios con ID y Nombre.
    zCSELECT RequestTypeID, RequestType FROM RequestType WHERE Active = 1r   c                 S   s   g | ]}|d  |d dqS )r   r   )RequestTypeIDRequestTyper   r   r   r   r	   r
   L   s     z#get_RequestType.<locals>.<listcomp>r   Nr   r   r   r   r   r	   get_RequestType<   s"    
"r#   c              
   C   s   d}zzDt }|std| }||| f | }dd |D W W |S  tk
r } ztd|  g  W Y W NS d}~X Y n< tk
r } ztd|  g  W Y W S d}~X Y nX W 5 |r|   X dS )   
    Obtiene las divisiones asociadas a una compañía específica.
    Retorna una lista de diccionarios con ID y Nombre.
    zWSELECT DivisionID, Division FROM Division WHERE CompanyID = ? AND DivisionID != 'CLIE' r   c                 S   s   g | ]}|d  |d dqS r   r   )r   namer   r   r   r   r	   r
   h   s     z,get_divisions_by_company.<locals>.<listcomp>r   N0[Error inesperado] Error obteniendo divisiones: r   )
company_idr   r   r   r   r   r   r   r   r	   get_divisions_by_companyX   s"    "r)   c              
   C   s   d}zzDt }|std| }||| f | }dd |D W W |S  tk
r } ztd|  g  W Y W NS d}~X Y n< tk
r } ztd|  g  W Y W S d}~X Y nX W 5 |r|   X dS )r$   z3SELECT  Division FROM Division WHERE DivisionID = ?r   c                 S   s   g | ]}d |d iqS )Divisionr   r   r   r   r   r	   r
      s     z'get_divisions_by_id.<locals>.<listcomp>r   Nr'   r   )Z
Divisionidr   r   r   r   r   r   r   r   r	   get_divisions_by_idt   s"    "r+   c              
   C   s   d}zzFt }|std| }||| |f | }dd |D W W |S  tk
r } ztd|  g  W Y W NS d}~X Y n< tk
r } ztd|  g  W Y W S d}~X Y nX W 5 |r|   X dS )u   
    Obtiene los departamentos filtrados por compañía y división.
    Retorna una lista de diccionarios con ID y Nombre.
    zy
        SELECT DepartamentID, Departament 
        FROM Departament 
        WHERE CompanyID = ? AND DivisionID = ?
    r   c                 S   s   g | ]}|d  |d dqS r%   r   r   r   r   r	   r
      s     z;get_departments_by_company_and_division.<locals>.<listcomp>r   Nz3[Error inesperado] Error obteniendo departamentos: r   )r(   division_idr   r   r   r   r   r   r   r   r	   'get_departments_by_company_and_division   s"    "r-   c                 C   s  |dd}|dkr| | dd| dd| dd| dd| d	d| d
d| dd| dd| dd| dd| dd| ddkrdndd nJ|dkr6| | dd| dd| dd| dd| dd| dd| dd| dd| dd| dd| d dkr*dndd! n|d"kr| | d#d| d$d| d%d| d&d| d'd| d(d| d)d| d*d| d+d| d,d| d-d| d.d| d/d| d0d| d1dkrdndd2 |S )3uQ   
    Prepara los datos del formulario para la inserción en la base de datos
    	PENDIENTE)r!   Statusu   DISMÉXMX_BusinessName MX_LegalRepresentativeMX_PrimaryContactMX_ContactEmailMX_FiscalAddressMX_PostalCodeMX_StateMX_CityMX_RFCMX_ContactPhoneMX_CommentsMX_Terms)true1onTr   r   )BusinessNameLegalRepresentativePrimaryContactContactEmailFiscalAddress
PostalCodeStateCityRFCContactPhoneCommentsTerms)DISEUADISCANEU_BusinessNameEU_LegalRepresentativeEU_PrimaryContactEU_ContactEmailEU_FiscalAddressEU_PostalCodeEU_StateEU_CityEU_ContactPhoneEU_CommentsEU_Terms)r@   rA   rB   rC   rD   rE   rF   rG   rI   rJ   rK   EMPLEADOEMPFirstNameEMPMiddleNameEMPLastNameEMPSecondLastNameEMPCorporateEmailEMPContactPhoneEMPEmployeeNumberEMPCompanyIDEMPDivisionIDEMPDepartamentIDEMPPositionEMPDirectSupervisorEMPPermissionTypeEMPCommentsEMPTerms)	FirstName
MiddleNameLastNameSecondLastNameCorporateEmailrI   EmployeeNumberr   
DivisionIDDepartamentIDPositionDirectSupervisorPermissionTyperJ   rK   )updateget)datarequest_typeprocessed_datar   r   r	   prepare_form_data   sf    





































ry   c              
   C   sV  z>zt }|std| }g }g }g }ddddddg}|  D ]`\}}|dkrF|d	k	rF|| t|tr||kr| 	 }	||	 n
|| |d
 qF|d |d dd
| dd
| d}
||
| |d | d }|  dW W 4S  tk
r\ } z.td|  ddt| f W Y W  S d	}~X Y n tjk
r } z,td|  ddt| f W Y W S d	}~X Y n tk
r } z,td|  ddt| f W Y W ^S d	}~X Y nL tk
r< } z,td|  ddt| f W Y W S d	}~X Y nX W 5 |rP|   X d	S )u   
    Inserta una nueva solicitud en la tabla UserRequests.
    Params:
        request_data: diccionario con los datos del formulario
    Returns:
        tuple: (bool, str) - (éxito, mensaje)
    r   rm   r!   r   ro   rp   r/   	RequestIDN?	CreatedAtz8SYSDATETIMEOFFSET() AT TIME ZONE 'Central Standard Time'z#
        INSERT INTO UserRequests (z, z)
        VALUES (z
)
        zSELECT @@IDENTITYr   T"Solicitud registrada exitosamente r   Fu   Error de conexión: z[Error de integridad] zError: u   [Error de validación] u   Error de validación: z/[Error inesperado] Error insertando solicitud: zError inesperado: )Tr}   )r   r   r   r   itemsappend
isinstancestrstrip
capitalizejoinr   fetchonecommitr   pyodbcIntegrityError
ValueErrorr   )request_datar   r   fieldsvaluesplaceholdersZexclude_formattingfieldvalueZformatted_valuer   new_idr   Ziever   r   r   r	   insert_user_request   sV    




,**0r   )r   Consultas_SQL.conexionr   r   r    r#   r)   r+   r-   ry   r   r   r   r   r	   <module>   s   !C