a
    0i1                     @   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} zzJt  }|std| }||  | }dd |D W W |rP|  S  ty } z,td|  g W  Y d}~W |r|  S d}~0 0 W |r|  n|r|  0 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   I/var/www/html/src/Consultas_SQL/Ventas/VentasEUA/AccessDistributorsSQL.py
<listcomp>(   s   z*get_AccessDistributors.<locals>.<listcomp>z:[Error inesperado] Error obteniendo a los distribuidores: Nr   ConnectionErrorcursorexecutefetchallclose	Exceptionprintqueryconnr'   resultser   r   r#   get_AccessDistributors   s0    

r2   c               
   C   s   d} zzJt  }|std| }||  | }dd |D W W |rP|  S  ty } z,td|  g W  Y d}~W |r|  S d}~0 0 W |r|  n|r|  0 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@   s0    

r5   c                 C   s6  d}zzt  }|std| }||| f | }|r|d |d |d |d |d |d |d	 |d
 |d |d |d |d |d dW W |r|  S ddiW W |r|  S W nR ty } z8td|  dt|dW  Y d}~W |r|  S d}~0 0 W |r2|  n|r0|  0 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(   fetchoner*   r+   r,   str)distributor_idr.   r/   r'   resultr1   r   r   r#   get_distributorSelectedinfoc   sP    

r=   V-P-DIEUc              
   C   s   d}zzJt  }|std| }||| |f |  ddiW W |rP|  S  ty } z4td|  dt|iW  Y d}~W |r|  S d}~0 0 W |r|  n|r|  0 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(   commitr*   r+   r,   r:   )user_idrole_idr.   r/   r'   r1   r   r   r#   insert_user_role   s,    

rD   c              
   C   s   d}zzLt  }|std| }||| f | }|d dkW W |rR|  S  ty } z*td|  W Y d}~W |r|  dS d}~0 0 W |r|  n|r|  0 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: NT)r   r&   r'   r(   r9   r*   r+   r,   )emailr.   r/   r'   r<   r1   r   r   r#   check_existing_email   s,    
rF   c              
   C   s   d}zzJt  }|std| }|||| f |  ddiW W |rP|  S  ty } z4td|  dt|iW  Y d}~W |r|  S d}~0 0 W |r|  n|r|  0 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
   zzt  }|std| }d}||| |f d}|| | }|rV|d nd}|  |s~ddiW W |r||  S |dd	W W |r|  S  ty } z4td
|  dt	|iW  Y d}~W |r|  S d}~0 0 W |r|  n|r|  0 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(   r9   rA   r*   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}zzzt  }|std| }||| f | }|sZdd|  iW W |rX|  S |d |d |d dW W |r|  S  ty } z4td	|  dt|iW  Y d
}~W |r|  S d
}~0 0 W |r|  n|r|  0 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}zzht  }|std| }||| |||||||||	|
||||||f |  ddiW W |rn|  S  ty } z4td|  dt|iW  Y d}~W |r|  S d}~0 0 W |r|  n|r|  0 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?  s4    


r^   Nc              
   C   s   d}|| f}zzFt  }|s"td| }||| |  ddiW W |rT|  S  ty } z4td|  dt|iW  Y d}~W |r|  S d}~0 0 W |r|  n|r|  0 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
'&%