
    i1                     `    S SK Jr  S SKJr  S rS rS rSS jrS rS r	S	 r
S
 rS rSS jrg)    )logger)get_connectionc                  $   Sn  [        5       nU(       d  [        S5      eUR                  5       nUR                  U 5        UR	                  5       nU Vs/ s H:  nUS   US   US   US   US   US   US	   US
   US   US   US   US   US   S.PM<     snU(       a  UR                  5         $ $ s  snf ! [         a2  n[        SU 35        / s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)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 datosr                           	   
         	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_AccessDistributorsr0      s*   E*!"XYYu//#   c $'q6#&q6#&q6#&q6#&q6#&q6#&q6#&q6#&q6#&q6#&r7#&r7#&r7
 * JJL +"  J1#NO	JJL 	 JJL sC   AB6 AB1B6 1B6 6
C2 C-C2C5 -C22C5 5Dc                     Sn  [        5       nU(       d  [        S5      eUR                  5       nUR                  U 5        UR	                  5       nU Vs/ s H  nUS   US   S.PM     snU(       a  UR                  5         $ $ s  snf ! [         a2  n[        SU 35        / s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)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   r   r   )UserIDSellerz6[Error inesperado] Error obteniendo a los vendedores: Nr!   r)   s         r/   get_SellerforDistributorsr4   @   s    E!"XYYu//#
 !" !#  FQ !" JJL "  FqcJK	JJL 	 JJL sB   AB
 B*B
 B
 

CC#C$C	 CC	 	C#c                 X   Sn [        5       nU(       d  [        S5      eUR                  5       nUR                  X45        UR	                  5       nU(       aO  US   US   US   US   US   US   US	   US
   US   US   US   US   US   S.U(       a  UR                  5         $ $ SS0U(       a  UR                  5         $ $ ! [         a>  n[        SU 35        S[        U5      S.s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)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   r   r    zB[Error inesperado] Error obteniendo comentarios del distribuidor: )r   errorN	r   r"   r#   r$   fetchoner&   r'   r(   str)distributor_idr*   r+   r#   resultr.   s         r/   get_distributorSelectedinfor=   c   s6   E(!!"XYYu/0"'-ay'-ay'-ay'-ay'-ay'-ay'-ay'-ay'-ay'-ay'-bz'-bz'-bz, JJL  # JJL 	  1RSTRUVWQ00JJL 	1 JJL s6   BC (C 
DD)D*D DD D)c                    Sn [        5       nU(       d  [        S5      eUR                  5       nUR                  X U45        UR	                  5         SS0U(       a  UR                  5         $ $ ! [         a=  n[        SU 35        S[        U5      0s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)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: r7   N	r   r"   r#   r$   commitr&   r'   r(   r:   )user_idrole_idr*   r+   r#   r.   s         r/   insert_user_rolerD      s    
E!"XYYu01BC
 JJL 	  !<QC@AQ  JJL 	! JJL 0   AA/ /
B69B1B6B9 1B66B9 9Cc                    Sn [        5       nU(       d  [        S5      eUR                  5       nUR                  X45        UR	                  5       nUS   S:  U(       a  UR                  5         $ $ ! [         a0  n[        SU 35         SnAW(       a  UR                  5         ggSnAff = f! W(       a  UR                  5         f f = f)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   r   z/[Error SQL] Error verificando email existente: NT)r   r"   r#   r$   r9   r&   r'   r(   )emailr*   r+   r#   r<   r.   s         r/   check_existing_emailrH      s    
E
!"XYYuh'"ay1} JJL   ?sCDJJL 
 JJL s*   AA2 2
B,<B'
B/ 'B,,B/ /C	c                    Sn [        5       nU(       d  [        S5      eUR                  5       nUR                  X!U 45        UR	                  5         SS0U(       a  UR                  5         $ $ ! [         a=  n[        SU 35        S[        U5      0s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)u;   
Actualiza el estado y fecha de revisión en UserRequests.
z{
    UPDATE UserRequests
    SET 
        Status = 'APROBADO',
        ReviewDate = ?
    WHERE 
        RequestID = ?
    r   r?   z-Estado de solicitud actualizado correctamentez4[Error SQL] Error actualizando estado de solicitud: r7   Nr@   )
request_idreview_dater*   r+   r#   r.   s         r/   update_user_request_statusrL      s    E!"XYYuJ78JK
 JJL 	  !DQCHIQ  JJL 	! JJL rE   c                 V    [        5       nU(       d  [        S5      eUR                  5       nSnUR                  X@U45        SnUR                  U5        UR	                  5       nU(       a  US   OSnUR                  5         U(       d  SS0U(       a  UR                  5         $ $ USS	.U(       a  UR                  5         $ $ ! [         a=  n[        S
U 35        S[        U5      0s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)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;r   Nr7   z%No se pudo obtener el UserID generadozUsuario creado correctamente)r2   r?   z)[Error SQL] Error creando nuevo usuario: )
r   r"   r#   r$   r9   rA   r&   r'   r(   r:   )	request_type_idrG   r+   r#   insert_queryidentity_queryr<   rB   r.   s	            r/   insert_new_userrQ      s   !!"XYY 	|u%=> 8~&"%&)4DE JJL  ".LM
 JJL 	  !9!=>Q  JJL 	! JJL s6   BC 'C 
DD(D)D DD D(c                    Sn [        5       nU(       d  [        S5      eUR                  5       nUR                  X45        UR	                  5       nU(       d  SSU  30U(       a  UR                  5         $ $ US   US   US   S.U(       a  UR                  5         $ $ ! [         a=  n[        S	U 35        S[        U5      0s S
nAW(       a  UR                  5         $ $ S
nAff = f! W(       a  UR                  5         f f = f)zH
Obtiene CompanyID, DivisionID y DepartamentID basado en RequestTypeID.
z
    SELECT
        CompanyID,
        DivisionID,
        DepartamentID
    FROM 
        RequestType
    WHERE 
        RequestTypeID = ?
    r   r7   u4   No se encontró información para el RequestTypeID: r   r   r   )	CompanyID
DivisionIDDepartamentIDu@   [Error SQL] Error obteniendo información de tipo de solicitud: Nr8   )rN   r*   r+   r#   r<   r.   s         r/   get_request_type_inforV     s    	E!"XYYu01"STcSdef JJL    )#AY
 JJL 	  !PQRPSTUQ  JJL 	! JJL s6   AB 8B 
C&)C!C&C) !C&&C) )Dc                    Sn [        5       nU(       d  [        S5      eUR                  5       nUR                  UXX#UXVXxXXXUU45        UR	                  5         SS0U(       a  UR                  5         $ $ ! [         a=  n[        SU 35        S[        U5      0s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)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   r?   z&Perfil de usuario creado correctamentez-[Error SQL] Error creando perfil de usuario: r7   Nr@   )rB   rJ   rN   business_namelegal_representativeprimary_contactfiscal_addresspostal_codestatecitydiscountseller_user_idrG   contact_phone
company_iddivision_iddepartament_idr*   r+   r#   r.   s                        r/   insert_user_profilere   ?  s    E!"XYYuAU[=k>
 	
 	CD
 JJL 	  !=aSABQ  JJL 	! JJL s0   AA8 8
B?B:B?C :B??C CNc                    SnX4n [        5       nU(       d  [        S5      eUR                  5       nUR                  X45        UR	                  5         SS0U(       a  UR                  5         $ $ ! [         a=  n[        SU 35        S[        U5      0s SnAW(       a  UR                  5         $ $ SnAff = f! W(       a  UR                  5         f f = f)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   r?   z!Solicitud rechazada correctamentez@[Error SQL] Error actualizando estado de solicitud a RECHAZADO: r7   Nr@   )rJ   rK   
comentarior*   paramsr+   r#   r.   s           r/   update_user_request_rejectedri   d  s    E &F!"XYYu%>?
 JJL 	  !PQRPSTUQ  JJL 	! JJL s0   AA0 0
B7:B2B7B: 2B77B: :C)zV-P-DIEU)N)venvr   Consultas_SQL.conexionr   r0   r4   r=   rD   rH   rL   rQ   rV   re   ri        r/   <module>rn      sE   
  16p!F7r8::%N$L!Jrm   