U
    i&                     @   sV   d dl Z d dlmZmZmZ d dlmZ G dd dZG dd dZG dd	 d	Z	dS )
    N)OptionalListDict)get_connectionc                   @   sF   e Zd ZdZeeeeeeeeeeeeeedddZedddZdS )	CRM_OpportunityDTOu3   DTO para la información de la oportunidad del CRM.crm_idcrm_opportunity_numbercrm_contact_namecrm_contact_typecrm_assigned_salespersoncrm_contact_adresscrm_contact_coloniacrm_contact_citycrm_contact_numbercrm_contact_countrycrm_contact_legal_identifiercrm_contact_zipcrm_contact_statecrm_contact_emailc                 C   sX   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _d S NCRM_OpportunityIDCRM_OpportunityNumberCRM_ContactNameCRM_ContactTypeCRM_AssignedSalespersonCRM_ContactAdressCRM_ContactColoniaCRM_ContactCityCRM_ContactNumberCRM_ContactCountryCRM_ContactLegalIdentifierCRM_ContactZipCRM_ContactStateCRM_ContactEmail)selfr   r	   r
   r   r   r   r   r   r   r   r   r   r   r    r'   hC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\App\api\services\quotation_cotiz_services.py__init__   s    zCRM_OpportunityDTO.__init__returnc                 C   s>   | j | j| j| j| j| j| j| j| j| j	| j
| j| j| jdS )Nr   r   )r&   r'   r'   r(   to_dict    s    zCRM_OpportunityDTO.to_dictN)__name__
__module____qualname____doc__strr)   dictr,   r'   r'   r'   r(   r   	   s         r   c                   @   sh   e Zd ZdZeeeeee eej eejeee ee ee ejeeee	 dddZ
edddZdS )	TaskDTOu   
    Objeto de Transferencia de Datos (DTO) para la información de las tareas de cotización.
    Ahora incluye los datos de la oportunidad del CRM.
    UserIDTaskIDSellerUserIDFormIDAssignedUserIDAssignedDateStatus
StatusDater   QuotationIDQuotationDateDocsID	UpdatedAt	UpdatedByActivecrm_datac                 C   sh   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _|| _|| _t|| _|| _d S r   )r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r?   r@   rA   boolrB   rC   )r&   r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r?   r@   rA   rB   rC   r'   r'   r(   r)   9   s     
zTaskDTO.__init__r*   c                 C   s   | j | j| j| j| j| jr$| j nd| j| jr:| j nd| j	| j
| j| j| jr\| j nd| j| jd}| jr| j |d< |S )z2Convierte el objeto a un diccionario serializable.N)r5   r6   r7   r8   r9   r:   r;   r<   r   r=   r>   r?   r@   rA   rB   rC   )r5   r6   r7   r8   r9   r:   	isoformatr;   r<   r   r=   r>   r?   r@   rA   rB   rC   r,   )r&   	base_dictr'   r'   r(   r,   ^   s&    zTaskDTO.to_dictN)r-   r.   r/   r0   intr1   r   datetimerD   r   r)   r2   r,   r'   r'   r'   r(   r3   3   s&   %r3   c                   @   s(   e Zd ZdZeeee dddZdS )Quotation_Cotiz_ServiceuT   Clase de servicio para manejar la lógica relacionada con las tareas de cotización.)taskIdr+   c                 C   s  d}z@t  .}| }|||  | }|rt|d |d |d |d |d |d |d |d	 |d
 |d |d |d |d |d d}t|d |d |d |d |d |d |d |d |d |d |d |d |d |d |d |d}|W  5 Q R  W  5 Q R  W S W 5 Q R  W 5 Q R  W d S W 5 Q R X W 5 Q R X W n8 tk
r~ } ztd!|  W Y d S d }~X Y nX d S )"u   
        Recupera una única tarea de cotización y los datos de la oportunidad del CRM
        por su TaskID, utilizando un JOIN.
        a  
                SELECT
                        Q_SpQ_QuotationTasks.TaskID, --0
                        Q_SpQ_QuotationTasks.SellerUserID, --1
                        Q_SpQ_QuotationTasks.FormID, --2
                        Q_SpQ_QuotationTasks.AssignedUserID, --3
                        Q_SpQ_QuotationTasks.AssignedDate, --4
                        Q_SpQ_QuotationTasks.Status, --5
                        Q_SpQ_QuotationTasks.StatusDate, --6
                        Q_SpQ_QuotationTasks.CRM_OpportunityID, --7
                        Q_SpQ_QuotationTasks.CostingID, --8
                        Q_SpQ_QuotationTasks.CostingDate, --9
                        Q_SpQ_QuotationTasks.DocsID, --10
                        Q_SpQ_QuotationTasks.UpdatedAt, --11
                        Q_SpQ_QuotationTasks.UpdatedBy, --12
                        Q_SpQ_QuotationTasks.Active, --13

                        Q_OpportunityCRM.CRM_OpportunityNumber, --14
                        Q_OpportunityCRM.Version, --15
                        Q_OpportunityCRM.UserID, --16
                        Q_OpportunityCRM.CRM_ContactID, --17
                        Q_OpportunityCRM.CRM_ContactName, --18
                        Q_OpportunityCRM.CRM_ContactType, --19
                        Q_OpportunityCRM.CRM_AssignedSalesperson, --20
                        Q_OpportunityCRM.CRM_ContactAdress, --21
                        Q_OpportunityCRM.CRM_ContactColonia, --22
                        Q_OpportunityCRM.CRM_ContactCity, --23
                        Q_OpportunityCRM.CRM_ContactNumber, --24
                        Q_OpportunityCRM.CRM_ContactCountry, --25
                        Q_OpportunityCRM.CRM_ContactLegalIdentifier, --26
                        Q_OpportunityCRM.CRM_ContactZip, --27
                        Q_OpportunityCRM.CRM_ContactState, --28
                        Q_OpportunityCRM.CRM_ContactEmail --29
                    FROM
                        Q_SpQ_QuotationTasks
                    INNER JOIN
                        Q_OpportunityCRM ON Q_SpQ_QuotationTasks.CRM_OpportunityID = Q_OpportunityCRM.CRM_OpportunityID
                    WHERE
                        Q_SpQ_QuotationTasks.TaskID = ?;

                                                          r      r                        	   
            r4   NzError en getQuotationTaskById: )r   cursorexecutefetchoner   r3   	Exceptionprint)rJ   queryconnrf   rowrC   Ztask_objer'   r'   r(   getQuotationTaskByIdz   s\    )
2z,Quotation_Cotiz_Service.getQuotationTaskByIdN)	r-   r.   r/   r0   staticmethodrG   r   r3   ro   r'   r'   r'   r(   rI   w   s   rI   )
rH   typingr   r   r   Consultas_SQL.conexionr   r   r3   rI   r'   r'   r'   r(   <module>   s
   *D