+
    i1                     b    ^ RI Ht ^ RIHt R tR tR tRR ltR tR t	R	 t
R
 tR tRR ltR# )    )logger)get_connectionc                    Rp  \        4       pV'       g   \        R4      hVP                  4       pVP                  V 4       VP	                  4       pV Uu. uFz  pRV^ ,          RV^,          RV^,          RV^,          RV^,          RV^,          R	V^,          R
V^,          RV^,          RV^	,          RV^
,          RV^,          RV^,          /NK|  	  upV'       d   VP                  4        # # u upi   \         d4   p\        RT 24       . u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)u/   Obtiene las compañías desde la base de datos.ax  
    SELECT
        UserRequests.RequestID,
        UserRequests.RequestTypeID,
        UserRequests.BusinessName,
        UserRequests.LegalRepresentative,
        UserRequests.PrimaryContact,
        UserRequests.ContactEmail,
        UserRequests.FiscalAddress,
        UserRequests.PostalCode,
        UserRequests.State,
        UserRequests.City,
        UserRequests.ContactPhone,
        UserRequests.Comments,
        FORMAT(UserRequests.CreatedAt, 'dd-MM-yyyy HH:mm') AS CreatedAt
    FROM 
        UserRequests
    WHERE
        (RequestTypeID = 'DISCAN' OR RequestTypeID = 'DISEUA')
        AND Status = 'PENDIENTE'
    4   No se pudo establecer conexión con la base de datos	RequestIDRequestTypeIDBusinessNameLegalRepresentativePrimaryContactContactEmailFiscalAddress
PostalCodeStateCityContactPhoneComments	CreatedAtz:[Error inesperado] Error obteniendo a los distribuidores: Nr   ConnectionErrorcursorexecutefetchallclose	Exceptionprintqueryconnr   resultsrowes         sC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\Consultas_SQL\Ventas\VentasEUA\AccessDistributorsSQL.pyget_AccessDistributorsr#      sD   E*!"XYYu//#   c 3q63q63q6!3q63q63q63q63q63q63q63r73r73r7
 * JJL +"  J1#NO	JJL 	 JJL sC   AC7 B C2C7 2C7 7D5D0D5D8 0D55D8 8Ec                    Rp  \        4       pV'       g   \        R4      hVP                  4       pVP                  V 4       VP	                  4       pV Uu. uF  pRV^ ,          RV^,          /NK  	  upV'       d   VP                  4        # # u upi   \         d4   p\        RT 24       . u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)z>Obtiene la Lista de Vendedores para asignarle al distribuidor.a:  
    SELECT
        UserRoles.UserID,
        Concat (Profiles.FirstName,' ',Profiles.LastName) AS Seller
    FROM 
        Roles
    LEFT JOIN
        UserRoles ON Roles.RoleID = UserRoles.RoleID
    LEFT JOIN
        Profiles ON UserRoles.UserID = Profiles.UserID
    WHERE
        Roles.RoleID = 'V-P-VEEU'
    r   UserIDSellerz6[Error inesperado] Error obteniendo a los vendedores: Nr   r   s         r"   get_SellerforDistributorsr'   @   s    E!"XYYu//#
 !" !# CFQ !" JJL "  FqcJK	JJL 	 JJL sB   AB B3B B CC.C/C CC C0c                   Rp \        4       pV'       g   \        R4      hVP                  4       pVP                  W34       VP	                  4       pV'       d   RV^ ,          RV^,          RV^,          RV^,          RV^,          RV^,          R	V^,          R
V^,          RV^,          RV^	,          RV^
,          RV^,          RV^,          /V'       d   VP                  4        # # RR/V'       d   VP                  4        # #   \         dA   p\        RT 24       RRR\        T4      /u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)uH   Obtiene los comentarios de un distribuidor específico por su RequestID.a.  
    SELECT
        UserRequests.RequestID,
        UserRequests.RequestTypeID,
        UserRequests.BusinessName,
        UserRequests.LegalRepresentative,
        UserRequests.PrimaryContact,
        UserRequests.ContactEmail,
        UserRequests.FiscalAddress,
        UserRequests.PostalCode,
        UserRequests.State,
        UserRequests.City,
        UserRequests.ContactPhone,
        UserRequests.Comments,
        FORMAT(UserRequests.CreatedAt, 'dd-MM-yyyy HH:mm') AS CreatedAt
    FROM 
        UserRequests
    WHERE
        RequestID = ?
    r   r   r   r	   r
   r   r   r   r   r   r   r   r   r    zB[Error inesperado] Error obteniendo comentarios del distribuidor: errorN	r   r   r   r   fetchoner   r   r   str)distributor_idr   r   r   resultr!   s   &     r"   get_distributorSelectedinfor0   c   sT   E(!!"XYYu/0"vayvayvay%vay vayvayvayvayvayvayvbzvbzvbz, JJL  # JJL 	  1RSTRUVWBQ00JJL 	1 JJL s6   CD +D EE/E0E EE E1c                   Rp \        4       pV'       g   \        R4      hVP                  4       pVP                  W V34       VP	                  4        RR/V'       d   VP                  4        # #   \         d?   p\        RT 24       R\        T4      /u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)zl
Asigna un rol al usuario en la tabla UserRoles.
Por defecto, asigna el rol "V-P-DIEU" para distribuidores.
zT
    INSERT INTO UserRoles (
        UserID,
        RoleID
    ) VALUES (?, ?)
    r   messagez%Rol asignado correctamente al usuarioz,[Error SQL] Error asignando rol al usuario: r*   N	r   r   r   r   commitr   r   r   r-   )user_idrole_idr   r   r   r!   s   &&    r"   insert_user_roler7      s    
E!"XYYu01BC
 JJL 	  !<QC@AQ  JJL 	! JJL 0   AA1 1B:<B5B:B= 5B::B= =Cc                   Rp \        4       pV'       g   \        R4      hVP                  4       pVP                  W34       VP	                  4       pV^ ,          ^ 8  V'       d   VP                  4        # #   \         d4   p\        RT 24        Rp?X'       d   TP                  4        R# R# Rp?ii ; i  X'       d   TP                  4        i i ; i)z^
Valida si el correo ya existe en la tabla Users.
Retorna True si existe, False si no existe.
zE
    SELECT COUNT(*) AS count
    FROM Users
    WHERE Email = ?
    r   z/[Error SQL] Error verificando email existente: NT)r   r   r   r   r,   r   r   r   )emailr   r   r   r/   r!   s   &     r"   check_existing_emailr;      s    
E
!"XYYuh'"ay1} JJL   ?sCDJJL 
 JJL s*   AA8 8B6B1B9 1B66B9 9Cc                   Rp \        4       pV'       g   \        R4      hVP                  4       pVP                  W!V 34       VP	                  4        RR/V'       d   VP                  4        # #   \         d?   p\        RT 24       R\        T4      /u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)u;   
Actualiza el estado y fecha de revisión en UserRequests.
z{
    UPDATE UserRequests
    SET 
        Status = 'APROBADO',
        ReviewDate = ?
    WHERE 
        RequestID = ?
    r   r2   z-Estado de solicitud actualizado correctamentez4[Error SQL] Error actualizando estado de solicitud: r*   Nr3   )
request_idreview_dater   r   r   r!   s   &&    r"   update_user_request_statusr?      s    E!"XYYuJ78JK
 JJL 	  !DQCHIQ  JJL 	! JJL r8   c                p    \        4       pV'       g   \        R4      hVP                  4       pRpVP                  W@V34       RpVP                  V4       VP	                  4       pV'       d
   V^ ,          MRpVP                  4        V'       g   RR/V'       d   VP                  4        # # RVRR	/V'       d   VP                  4        # #   \         d?   p\        R
T 24       R\        T4      /u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)zJ
Inserta un nuevo usuario en la tabla Users y retorna el UserID generado.
r   zk
        INSERT INTO Users (
            RequestTypeID,
            Email
        ) VALUES (?, ?);
        zSELECT @@IDENTITY AS UserID;Nr*   z%No se pudo obtener el UserID generador%   r2   zUsuario creado correctamentez)[Error SQL] Error creando nuevo usuario: )
r   r   r   r   r,   r4   r   r   r   r-   )	request_type_idr:   r   r   insert_queryidentity_queryr/   r5   r!   s	   &&       r"   insert_new_userrD      s   !!"XYY 	|u%=> 8~&"%&)4DE JJL  '9.LM
 JJL 	  !9!=>Q  JJL 	! JJL s<   BC C /C DD3D4D DD D5c                6   Rp \        4       pV'       g   \        R4      hVP                  4       pVP                  W34       VP	                  4       pV'       g!   RRV  2/V'       d   VP                  4        # # RV^ ,          RV^,          RV^,          /V'       d   VP                  4        # #   \         d?   p\        RT 24       R\        T4      /u R	p?X'       d   TP                  4        # # R	p?ii ; i  X'       d   TP                  4        i i ; i)
zH
Obtiene CompanyID, DivisionID y DepartamentID basado en RequestTypeID.
z
    SELECT
        CompanyID,
        DivisionID,
        DepartamentID
    FROM 
        RequestType
    WHERE 
        RequestTypeID = ?
    r   r*   u4   No se encontró información para el RequestTypeID: 	CompanyID
DivisionIDDepartamentIDu@   [Error SQL] Error obteniendo información de tipo de solicitud: Nr+   )rA   r   r   r   r/   r!   s   &     r"   get_request_type_inforI     s    	E!"XYYu01"STcSdef JJL  &)VAY
 JJL 	  !PQRPSTUQ  JJL 	! JJL s6   AB1 ;B1 1C:<C5C:C= 5C::C= =Dc                   Rp \        4       pV'       g   \        R4      hVP                  4       pVP                  VWW#VWVWxWWWVV34       VP	                  4        RR/V'       d   VP                  4        # #   \         d?   p\        RT 24       R\        T4      /u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)z:
Inserta un nuevo perfil de usuario en la tabla Profiles.
aL  
    INSERT INTO Profiles (
        UserID, RequestID, RequestTypeID, BusinessName, LegalRepresentative,
        PrimaryContact, FiscalAddress, PostalCode, State, City, Discount,
        SellerUserID, Email, ContactPhone, CompanyID, DivisionID, DepartamentID
    )
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    r   r2   z&Perfil de usuario creado correctamentez-[Error SQL] Error creando perfil de usuario: r*   Nr3   )r5   r=   rA   business_namelegal_representativeprimary_contactfiscal_addresspostal_codestatecitydiscountseller_user_idr:   contact_phone
company_iddivision_iddepartament_idr   r   r   r!   s   &&&&&&&&&&&&&&&&&    r"   insert_user_profilerX   ?  s    E!"XYYuAU[=k>
 	
 	CD
 JJL 	  !=aSABQ  JJL 	! JJL s6   AA: 'A: :CB>C C >CC C!Nc                   RpW3p \        4       pV'       g   \        R4      hVP                  4       pVP                  W44       VP	                  4        RR/V'       d   VP                  4        # #   \         d?   p\        RT 24       R\        T4      /u Rp?X'       d   TP                  4        # # Rp?ii ; i  X'       d   TP                  4        i i ; i)u   
Actualiza el estado a RECHAZADO y fecha de revisión en UserRequests.
El comentario (motivo del rechazo) no se guarda en la base de datos,
solo se usa para el correo electrónico.
z|
    UPDATE UserRequests
    SET 
        Status = 'RECHAZADO',
        ReviewDate = ?
    WHERE 
        RequestID = ?
    r   r2   z!Solicitud rechazada correctamentez@[Error SQL] Error actualizando estado de solicitud a RECHAZADO: r*   Nr3   )r=   r>   
comentarior   paramsr   r   r!   s   &&&     r"   update_user_request_rejectedr\   d  s    E &F!"XYYu%>?
 JJL 	  !PQRPSTUQ  JJL 	! JJL s0   AA2 2B;=B6B;B> 6B;;B> >C)zV-P-DIEU)N)venvr   Consultas_SQL.conexionr   r#   r'   r0   r7   r;   r?   rD   rI   rX   r\        r"   <module>ra      sE   
  16p!F7r8::%N$L!Jr`   