a
    0i                     @   s<   d dl Z d dlZd dlZd dlmZ e  G dd dZdS )    N)load_dotenvc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$BusinessCentralServicec                 C   s   t dd| _t dd| _t dd| _d| _d| j d	| _d
| _d| _d| j d| j d| j d| _	d| j d| j d| j d| _
d | _d| _d S )NBC_TENANT_IDz$b16d289b-fa4c-4578-accd-b308f19bbeb5BC_CLIENT_IDz$9956717e-890f-4c61-864a-363ae9e025a9BC_CLIENT_SECRETz(yUT8Q~OZSBa5Dl9GJkoksoPAvzwwsfC2vHDQuadtz1https://api.businesscentral.dynamics.com/.defaultz"https://login.microsoftonline.com/z/oauth2/v2.0/tokenz$9eb89615-5f45-f011-be59-000d3a5efc08zIGSA-CRM-SB-Desz.https://api.businesscentral.dynamics.com/v2.0//z%/api/IGSA/integration/v1.0/companies()z(/api/IGSA/Webintegration/v1.0/companies(r   )osgetenv	tenant_id	client_idclient_secretscope	token_url
company_idenvironmentbase_api_urlbase_web_api_urlaccess_tokentoken_expiry_time)self r   >/var/www/html/src/App/api/services/business_central_Service.py__init__   s*    

zBusinessCentralService.__init__c                 C   s   | j r&t | jd k r&td | j S td d| j| j| jd}tj| j	|d}|
  | }|d| _ |dd	}t | | _td
 | j S )uy   
        Obtiene un token de acceso válido, solicitando uno nuevo si el actual
        no existe o ha expirado.
        <   z#INFO: Reutilizando token existente.z=INFO: Token no existe o ha expirado. Solicitando uno nuevo...client_credentials)
grant_typer   r   r   )datar   
expires_ini  z(INFO: Nuevo token obtenido exitosamente.)r   timer   printr   r   r   requestspostr   raise_for_statusjsonget)r   payloadresponse
token_dataZexpires_in_secondsr   r   r   	get_token$   s"    z BusinessCentralService.get_tokenc              
   K   s   |   }d| dd}d|v r.||d  |dd z4tj||fd|i|}|  |jrj| ndW S  tjj	y } z0t
d|  t
d|jj  |W Y d}~n
d}~0 0 dS )	u5   Método genérico para realizar solicitudes a la API.zBearer zapplication/json)AuthorizationzContent-TypeheadersN u!   ERROR: Falló la solicitud HTTP: zERROR: Cuerpo de la respuesta: )r)   updatepopr!   requestr#   contentr$   
exceptions	HTTPErrorr    r'   text)r   methodurlkwargstokenr+   r'   errr   r   r   _make_requestC   s    z$BusinessCentralService._make_requestc                 C   s   | j  d}| d|S )N/customerImportsGETr   r9   r   r5   r   r   r   get_customers]   s    z$BusinessCentralService.get_customersc                 C   s   | j  d}| jd||dS )Nr:   POSTr$   r<   r   r   r5   r   r   r   create_customera   s    z&BusinessCentralService.create_customerc                 C   s(   | j  d| d}| jd||ddidS )N/customerImports(r   PATCHIf-Match*)r$   r+   r<   )r   customer_idr   r5   r   r   r   modify_customere   s    z&BusinessCentralService.modify_customerc                 C   s&   | j  d| d}| jd|ddidS )NrC   r   DELETErE   rF   r+   r<   )r   rG   r5   r   r   r   delete_customeri   s    z&BusinessCentralService.delete_customerc                 C   s   | j  d}| d|S )N/itemImportsr;   r<   r=   r   r   r   	get_itemsm   s    z BusinessCentralService.get_itemsc                 C   s   | j  d}| jd||dS )NrL   r?   r@   r<   rA   r   r   r   create_itemq   s    z"BusinessCentralService.create_itemc                 C   s   | j  d}| d|S )Nz/contactsImportsr;   r<   r=   r   r   r   get_contactsu   s    z#BusinessCentralService.get_contactsc                 C   s   | j  d}| d|S )Nz/salespersonImportsr;   r<   r=   r   r   r   get_salespersonsy   s    z'BusinessCentralService.get_salespersonsc                 C   s   | j  d}| d|S )N/quoteImportsr;   r<   r=   r   r   r   get_quote_lines}   s    z&BusinessCentralService.get_quote_linesc                 C   s   | j  d}| jd||dS )NrQ   r?   r@   r<   rA   r   r   r   create_quote   s    z#BusinessCentralService.create_quotec                 C   s2   | j  d| d| d| d}| jd|ddidS )	Nz/quoteImports(z,'z',r   rI   rE   rF   rJ   r<   )r   	system_idquote_noline_nor5   r   r   r   delete_quote_line   s    z(BusinessCentralService.delete_quote_linec                 C   s   | j  d}| d|S )N/contactsBufferr;   r   r9   r=   r   r   r   get_contact_buffer   s    z)BusinessCentralService.get_contact_bufferc                 C   s   | j  d}| jd||dS )NrX   r?   r@   rY   rA   r   r   r   create_contact_buffer   s    z,BusinessCentralService.create_contact_bufferc                 C   s   | j  d}| d|S )Nz/opportunitiesr;   r<   r=   r   r   r   get_opportunities   s    z(BusinessCentralService.get_opportunitiesN)__name__
__module____qualname__r   r)   r9   r>   rB   rH   rK   rM   rN   rO   rP   rR   rS   rW   rZ   r[   r\   r   r   r   r   r      s"   r   )r!   r	   r   dotenvr   r   r   r   r   r   <module>   s
   