U
    âøi¯1  ã                   @   sp   d dl mZ d dlmZ dd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zddd„ZdS )é    )Úlogger)Úget_connectionc               
   C   sš   d} z‚z@tƒ }|stdƒ‚| ¡ }| | ¡ | ¡ }dd„ |D ƒW W ¢BS  tk
r‚ } ztd|› ƒ g  W Y ¢W ¢S d}~X Y nX W 5 |r”|  ¡  X dS )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 datosc                 S   s`   g | ]X}|d  |d |d |d |d |d |d |d |d |d	 |d
 |d |d dœ‘qS )r   é   é   é   é   é   é   é   é   é	   é
   é   é   ©Ú	RequestIDÚRequestTypeIDÚBusinessNameÚLegalRepresentativeÚPrimaryContactÚContactEmailÚFiscalAddressÚ
PostalCodeÚStateÚCityÚContactPhoneÚCommentsÚ	CreatedAt© ©Ú.0Úrowr   r   úsC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\Consultas_SQL\Ventas\VentasEUA\AccessDistributorsSQL.pyÚ
<listcomp>(   s   óóz*get_AccessDistributors.<locals>.<listcomp>z:[Error inesperado] Error obteniendo a los distribuidores: N©Úcloser   ÚConnectionErrorÚcursorÚexecuteÚfetchallÚ	ExceptionÚprint©ÚqueryÚconnr(   ÚresultsÚer   r   r#   Úget_AccessDistributors   s     
ò"r2   c               
   C   sš   d} z‚z@tƒ }|stdƒ‚| ¡ }| | ¡ | ¡ }dd„ |D ƒW W ¢BS  tk
r‚ } ztd|› ƒ g  W Y ¢W ¢S d}~X Y nX W 5 |r”|  ¡  X dS )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   c                 S   s   g | ]}|d  |d dœ‘qS )r   r   )ÚUserIDÚSellerr   r    r   r   r#   r$   X   s   þþz-get_SellerforDistributors.<locals>.<listcomp>z6[Error inesperado] Error obteniendo a los vendedores: Nr%   r-   r   r   r#   Úget_SellerforDistributors@   s     
ý"r5   c                 C   s  d}zìz tƒ }|stdƒ‚| ¡ }| || f¡ | ¡ }|r–|d |d |d |d |d |d |d	 |d
 |d |d |d |d |d dœW W ¢^S ddiW W ¢PS W nF tk
rì } z(td|› ƒ dt|ƒdœ W Y ¢W ¢S d}~X Y nX W 5 |r |  ¡  X dS )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(   r)   Úfetchoner+   r,   Ústr)Údistributor_idr.   r/   r(   Úresultr1   r   r   r#   Úget_distributorSelectedinfoc   s:    ó,r=   úV-P-DIEUc              
   C   s¢   d}zŠz@tƒ }|stdƒ‚| ¡ }| || |f¡ | ¡  ddiW W ¢JS  tk
rŠ } z&td|› ƒ dt|ƒi W Y ¢W ¢S d}~X Y nX W 5 |rœ|  ¡  X dS )zx
    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(   r)   Úcommitr+   r,   r:   )Úuser_idÚrole_idr.   r/   r(   r1   r   r   r#   Úinsert_user_roleœ   s    *rD   c              
   C   sš   d}z‚zBtƒ }|stdƒ‚| ¡ }| || f¡ | ¡ }|d dkW W ¢@S  tk
r‚ } ztd|› ƒ W Y ¢W ¢dS d}~X Y nX W 5 |r”|  ¡  X dS )zj
    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: TN)r&   r   r'   r(   r)   r9   r+   r,   )Úemailr.   r/   r(   r<   r1   r   r   r#   Úcheck_existing_email¸   s     rF   c              
   C   s¢   d}zŠz@tƒ }|stdƒ‚| ¡ }| ||| f¡ | ¡  ddiW W ¢JS  tk
rŠ } z&td|› ƒ dt|ƒi W Y ¢W ¢S d}~X Y nX W 5 |rœ|  ¡  X dS )uC   
    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(   r1   r   r   r#   Úupdate_user_request_statusÕ   s    *rI   c           	   
   C   sÜ   zÈz~tƒ }|stdƒ‚| ¡ }d}| || |f¡ d}| |¡ | ¡ }|rT|d nd}| ¡  |srddiW W ¢ZS |dd	œW W ¢JS  tk
rÄ } z&td
|› ƒ dt	|ƒi W Y ¢W ¢S d}~X Y nX W 5 |rÖ|  ¡  X dS )zR
    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)r3   r?   z)[Error SQL] Error creando nuevo usuario: )
r&   r   r'   r(   r)   r9   rA   r+   r,   r:   )	Úrequest_type_idrE   r/   r(   Úinsert_queryZidentity_queryr<   rB   r1   r   r   r#   Úinsert_new_userò   s(    
*rL   c              
   C   sÈ   d}z°zftƒ }|stdƒ‚| ¡ }| || f¡ | ¡ }|sPdd| › iW W ¢hS |d |d |d dœW W ¢JS  tk
r° } z&td	|› ƒ dt|ƒi W Y ¢W ¢S d
}~X Y nX W 5 |rÂ|  ¡  X d
S )zP
    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   )rJ   r.   r/   r(   r<   r1   r   r   r#   Úget_request_type_info  s&    
ý*rP   c                 C   sÀ   d}z¨z^tƒ }|stdƒ‚| ¡ }| || |||||||||	|
||||||f¡ | ¡  ddiW W ¢JS  tk
r¨ } z&td|› ƒ dt|ƒi W Y ¢W ¢S d}~X Y nX W 5 |rº|  ¡  X dS )zB
    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   rG   rJ   Úbusiness_nameÚlegal_representativeÚprimary_contactÚfiscal_addressÚpostal_codeÚstateÚcityÚdiscountÚseller_user_idrE   Úcontact_phoneÚ
company_idÚdivision_idÚdepartament_idr.   r/   r(   r1   r   r   r#   Úinsert_user_profile?  s@                  ý*r^   Nc              
   C   s¦   d}|| f}z†z<tƒ }|s"tdƒ‚| ¡ }| ||¡ | ¡  ddiW W ¢JS  tk
rŽ } z&td|› ƒ dt|ƒi W Y ¢W ¢S d}~X Y nX W 5 |r |  ¡  X dS )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@   )rG   rH   Ú
comentarior.   Úparamsr/   r(   r1   r   r   r#   Úupdate_user_request_rejectedd  s    *ra   )r>   )N)Úvenvr   ÚConsultas_SQL.conexionr   r2   r5   r=   rD   rF   rI   rL   rP   r^   ra   r   r   r   r#   Ú<module>   s   8#9
'&%