
    i                     J    S SK r S SKrS SKrS SKJr  \" 5          " S S5      rg)    N)load_dotenvc                   z    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)BusinessCentralService   c                    [         R                  " SS5      U l        [         R                  " SS5      U l        [         R                  " SS5      U l        SU l        SU R                   S	3U l        S
U l        SU l        SU R                   SU R                   SU R                   S3U l	        SU R                   SU R                   SU R                   S3U l
        S U l        SU l        g )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)selfs    hC:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\src\App\api\services\business_central_Service.py__init__BusinessCentralService.__init__   s    >3YZ>3YZYY'9;efH
=dnn=MM_` A,<T^^<LA  EdooEVVWY 	
 =T^^<LA  HHYYZ\ 	 !!"    c                 4   U R                   (       a=  [        R                  " 5       U R                  S-
  :  a  [        S5        U R                   $ [        S5        SU R                  U R
                  U R                  S.n[        R                  " U R                  US9nUR                  5         UR                  5       nUR                  S5      U l         UR                  SS	5      n[        R                  " 5       U-   U l        [        S
5        U R                   $ )ua   
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_dataexpires_in_secondss        r   	get_token BusinessCentralService.get_token$   s     t/E/E/J!J78$$$MN.!//ZZ	
 ==g>!!#]]_
 'NN>:'^^L$?!%/A!A89   r   c                    U R                  5       nSU 3SS.nSU;   a  UR                  US   5        UR                  SS5         [        R                  " X4SU0UD6nUR                  5         UR                  (       a  UR                  5       $ S$ ! [        R                  R                   a7  n[        SU 35        [        SUR                  R                   35        UeSnAff = f)	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: )r0   updatepopr'   requestr)   contentr*   
exceptions	HTTPErrorr&   r-   text)r   methodurlkwargstokenr4   r-   errs           r   _make_request$BusinessCentralService._make_requestC   s     &ug..
 NN6),-

9d#
	''OWOOH%%'&.&6&68==?>B>"",, 	5cU;<3CLL4E4E3FGHI		s   A	B B C'02C""C'c                 D    U R                    S3nU R                  SU5      $ )N/customerImportsGETr   rB   r   r>   s     r   get_customers$BusinessCentralService.get_customers]   )    ""##34!!%--r   c                 @    U R                    S3nU R                  SX!S9$ )NrE   POSTr*   rG   r   r#   r>   s      r   create_customer&BusinessCentralService.create_customera   s,    ""##34!!&#!99r   c                 L    U R                    SU S3nU R                  SX2SS0S9$ )N/customerImports(r   PATCHIf-Match*)r*   r4   rG   )r   customer_idr#   r>   s       r   modify_customer&BusinessCentralService.modify_customere   s:    ""##4[MC!!'3JPSCT!UUr   c                 L    U R                    SU S3nU R                  SUSS0S9$ )NrS   r   DELETErU   rV   r4   rG   )r   rW   r>   s      r   delete_customer&BusinessCentralService.delete_customeri   s9    ""##4[MC!!(C*c9J!KKr   c                 D    U R                    S3nU R                  SU5      $ )N/itemImportsrF   rG   rH   s     r   	get_items BusinessCentralService.get_itemsm   s(    ""#<0!!%--r   c                 @    U R                    S3nU R                  SX!S9$ )Nr`   rM   rN   rG   rO   s      r   create_item"BusinessCentralService.create_itemq   s+    ""#<0!!&#!99r   c                 D    U R                    S3nU R                  SU5      $ )Nz/contactsImportsrF   rG   rH   s     r   get_contacts#BusinessCentralService.get_contactsu   rK   r   c                 D    U R                    S3nU R                  SU5      $ )Nz/salespersonImportsrF   rG   rH   s     r   get_salespersons'BusinessCentralService.get_salespersonsy   s)    ""##67!!%--r   c                 D    U R                    S3nU R                  SU5      $ )N/quoteImportsrF   rG   rH   s     r   get_quote_lines&BusinessCentralService.get_quote_lines}   s(    ""#=1!!%--r   c                 @    U R                    S3nU R                  SX!S9$ )Nrm   rM   rN   rG   rO   s      r   create_quote#BusinessCentralService.create_quote   s+    ""#=1!!&#!99r   c                 X    U R                    SU SU SU S3nU R                  SUSS0S9$ )	Nz/quoteImports(z,'z',r   r[   rU   rV   r\   rG   )r   	system_idquote_noline_nor>   s        r   delete_quote_line(BusinessCentralService.delete_quote_line   sE    ""#>)Bxj7)STU!!(C*c9J!KKr   c                 D    U R                    S3nU R                  SU5      $ )N/contactsBufferrF   r   rB   rH   s     r   get_contact_buffer)BusinessCentralService.get_contact_buffer   s(    &&'7!!%--r   c                 @    U R                    S3nU R                  SX!S9$ )Nrz   rM   rN   r{   rO   s      r   create_contact_buffer,BusinessCentralService.create_contact_buffer   s+    &&'7!!&#!99r   c                 D    U R                    S3nU R                  SU5      $ )Nz/opportunitiesrF   rG   rH   s     r   get_opportunities(BusinessCentralService.get_opportunities   s(    ""#>2!!%--r   )r   r   r   r   r   r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r0   rB   rI   rP   rX   r]   ra   rd   rg   rj   rn   rq   rw   r|   r   r   __static_attributes__ r   r   r   r      sZ    #0!>4.:VL.:...:L.:.r   r   )r'   r   r%   dotenvr   r   r   r   r   <module>r      s&     	   H. H.r   