pyEscoAPI 0.0.39__tar.gz → 0.0.40__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/PKG-INFO +1 -1
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI/dataclasses.py +58 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI/esco_api.py +84 -1
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI.egg-info/PKG-INFO +1 -1
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyproject.toml +1 -1
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/tests/test_client.py +158 -2
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/README.md +0 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI/__init__.py +0 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI/exception.py +0 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI.egg-info/SOURCES.txt +0 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI.egg-info/dependency_links.txt +0 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI.egg-info/requires.txt +0 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/pyEscoAPI.egg-info/top_level.txt +0 -0
- {pyescoapi-0.0.39 → pyescoapi-0.0.40}/setup.cfg +0 -0
|
@@ -191,3 +191,61 @@ class Instrucciones:
|
|
|
191
191
|
@dataclass
|
|
192
192
|
class EntMailing:
|
|
193
193
|
codEntMailing: int
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
@dataclass
|
|
197
|
+
class MovimientoMoneda:
|
|
198
|
+
importe: float
|
|
199
|
+
moneda: str
|
|
200
|
+
tpCambioMovPais: float
|
|
201
|
+
codCtaContable: int
|
|
202
|
+
codCentroCost: int
|
|
203
|
+
esCredito: bool
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
@dataclass
|
|
207
|
+
class MovimientoTitulo:
|
|
208
|
+
instrumento: str
|
|
209
|
+
codTpInstrumento: str
|
|
210
|
+
codAgenteDepo: int
|
|
211
|
+
cantidad: float
|
|
212
|
+
precio: float
|
|
213
|
+
esCredito: bool
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
@dataclass
|
|
217
|
+
class MovimientoArancel:
|
|
218
|
+
importe: float
|
|
219
|
+
moneda: str
|
|
220
|
+
tpCambioArPais: float
|
|
221
|
+
codTpIVABase: str
|
|
222
|
+
codTpIVASTasa: str
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
@dataclass
|
|
226
|
+
class MovimientoDerecho:
|
|
227
|
+
tipoDerecho: str
|
|
228
|
+
importe: float
|
|
229
|
+
moneda: str
|
|
230
|
+
tpCambioDerPais: float
|
|
231
|
+
ivaDerecho: str
|
|
232
|
+
sobreTasa: str
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@dataclass
|
|
236
|
+
class MovimientoRetencionIIBB:
|
|
237
|
+
importe: float
|
|
238
|
+
moneda: str
|
|
239
|
+
tpCambioRetPais: float
|
|
240
|
+
codProvincia: int
|
|
241
|
+
codPais: int
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
@dataclass
|
|
245
|
+
class MovimientoComision:
|
|
246
|
+
codAgenteDepo: int
|
|
247
|
+
importe: float
|
|
248
|
+
moneda: str
|
|
249
|
+
tpCambioComPais: float
|
|
250
|
+
codTpIVABaseCom: str
|
|
251
|
+
codCtaContable: int
|
|
@@ -9,7 +9,16 @@ from typing import TypedDict
|
|
|
9
9
|
import requests
|
|
10
10
|
from requests import Response
|
|
11
11
|
|
|
12
|
-
from pyEscoAPI.dataclasses import
|
|
12
|
+
from pyEscoAPI.dataclasses import (
|
|
13
|
+
ComitenteData,
|
|
14
|
+
MovimientoArancel,
|
|
15
|
+
MovimientoComision,
|
|
16
|
+
MovimientoDerecho,
|
|
17
|
+
MovimientoMoneda,
|
|
18
|
+
MovimientoRetencionIIBB,
|
|
19
|
+
MovimientoTitulo,
|
|
20
|
+
Persona,
|
|
21
|
+
)
|
|
13
22
|
from pyEscoAPI.exception import PyEscoAPIError
|
|
14
23
|
|
|
15
24
|
logger = logging.getLogger(f"app.{__name__}")
|
|
@@ -2070,6 +2079,80 @@ class EscoAPI:
|
|
|
2070
2079
|
request_method=HTTPMethod.POST,
|
|
2071
2080
|
)
|
|
2072
2081
|
|
|
2082
|
+
def insert_movimiento_manual(
|
|
2083
|
+
self,
|
|
2084
|
+
cuenta: int,
|
|
2085
|
+
fecha_concertacion: date,
|
|
2086
|
+
fecha_liquidacion: date,
|
|
2087
|
+
descripcion: str,
|
|
2088
|
+
cod_tp_movimiento_manual: str,
|
|
2089
|
+
observaciones: str | None = None,
|
|
2090
|
+
num_referencia: int | None = None,
|
|
2091
|
+
mercado: str | None = None,
|
|
2092
|
+
se_informa: bool = True,
|
|
2093
|
+
permite_movimiento_feriado: bool = True,
|
|
2094
|
+
permite_descubierto: bool = True,
|
|
2095
|
+
controla_duplicidad: bool = False,
|
|
2096
|
+
movimientos_moneda: list[MovimientoMoneda] | None = None,
|
|
2097
|
+
movimientos_titulo: list[MovimientoTitulo] | None = None,
|
|
2098
|
+
movimientos_arancel: list[MovimientoArancel] | None = None,
|
|
2099
|
+
movimientos_derecho: list[MovimientoDerecho] | None = None,
|
|
2100
|
+
movimientos_retenciones_iibb: list[MovimientoRetencionIIBB] | None = None,
|
|
2101
|
+
movimientos_comisiones: list[MovimientoComision] | None = None,
|
|
2102
|
+
):
|
|
2103
|
+
"""
|
|
2104
|
+
Ingresa un movimiento manual en la cuenta corriente del comitente.
|
|
2105
|
+
:param cuenta: Número de cuenta comitente.
|
|
2106
|
+
:param fecha_concertacion: Fecha de concertación del movimiento.
|
|
2107
|
+
:param fecha_liquidacion: Fecha de liquidación del movimiento.
|
|
2108
|
+
:param descripcion: Descripción del movimiento.
|
|
2109
|
+
:param cod_tp_movimiento_manual: Código del tipo de movimiento manual.
|
|
2110
|
+
:param observaciones: Observaciones del movimiento.
|
|
2111
|
+
:param num_referencia: Número de referencia del movimiento.
|
|
2112
|
+
:param mercado: Código del mercado.
|
|
2113
|
+
:param se_informa: Indica si el movimiento se informa.
|
|
2114
|
+
:param permite_movimiento_feriado: Indica si se permite cargar el movimiento en un feriado.
|
|
2115
|
+
:param permite_descubierto: Indica si se permite dejar la cuenta en descubierto.
|
|
2116
|
+
:param controla_duplicidad: Indica si se debe controlar duplicidad del movimiento.
|
|
2117
|
+
:param movimientos_moneda: Movimientos de moneda asociados.
|
|
2118
|
+
:param movimientos_titulo: Movimientos de títulos asociados.
|
|
2119
|
+
:param movimientos_arancel: Aranceles asociados.
|
|
2120
|
+
:param movimientos_derecho: Derechos asociados.
|
|
2121
|
+
:param movimientos_retenciones_iibb: Retenciones de ingresos brutos asociadas.
|
|
2122
|
+
:param movimientos_comisiones: Comisiones asociadas.
|
|
2123
|
+
"""
|
|
2124
|
+
if fecha_concertacion is None:
|
|
2125
|
+
fecha_concertacion = date.today()
|
|
2126
|
+
if fecha_liquidacion is None:
|
|
2127
|
+
fecha_liquidacion = date.today()
|
|
2128
|
+
|
|
2129
|
+
req_body = {
|
|
2130
|
+
"cuenta": cuenta,
|
|
2131
|
+
"fechaConcertacion": fecha_concertacion.isoformat(),
|
|
2132
|
+
"fechaLiquidacion": fecha_liquidacion.isoformat(),
|
|
2133
|
+
"descripcion": descripcion,
|
|
2134
|
+
"codTpMovimientoManual": cod_tp_movimiento_manual,
|
|
2135
|
+
"observaciones": observaciones,
|
|
2136
|
+
"numReferencia": num_referencia,
|
|
2137
|
+
"mercado": mercado,
|
|
2138
|
+
"seInforma": se_informa,
|
|
2139
|
+
"permiteMovimientoFeriado": permite_movimiento_feriado,
|
|
2140
|
+
"permiteDescubierto": permite_descubierto,
|
|
2141
|
+
"controlaDuplicidad": controla_duplicidad,
|
|
2142
|
+
"movimientosMoneda": [asdict(item) for item in (movimientos_moneda or [])],
|
|
2143
|
+
"movimientosTitulo": [asdict(item) for item in (movimientos_titulo or [])],
|
|
2144
|
+
"movimientosArancel": [asdict(item) for item in (movimientos_arancel or [])],
|
|
2145
|
+
"movimientosDerecho": [asdict(item) for item in (movimientos_derecho or [])],
|
|
2146
|
+
"movimientosRetencionesIIBB": [asdict(item) for item in (movimientos_retenciones_iibb or [])],
|
|
2147
|
+
"movimientosComisiones": [asdict(item) for item in (movimientos_comisiones or [])],
|
|
2148
|
+
}
|
|
2149
|
+
self.__pre_connection()
|
|
2150
|
+
return self.__make_request(
|
|
2151
|
+
request_endpoint="/insert-movimiento-manual",
|
|
2152
|
+
request_body=req_body,
|
|
2153
|
+
request_method=HTTPMethod.POST,
|
|
2154
|
+
)
|
|
2155
|
+
|
|
2073
2156
|
def get_domicilio_cuenta_comitente(self, cuenta: str, cod_tp_domicilio: str):
|
|
2074
2157
|
"""
|
|
2075
2158
|
Devuelve el domicilio de una cuenta comitente.
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from datetime import date, datetime, timedelta
|
|
2
|
+
from datetime import date, datetime, timedelta, timezone
|
|
3
|
+
from http import HTTPMethod
|
|
3
4
|
|
|
4
5
|
import pytest
|
|
5
6
|
from unittest.mock import patch
|
|
6
7
|
|
|
7
8
|
from pyEscoAPI import EscoAPI
|
|
9
|
+
from pyEscoAPI.dataclasses import (
|
|
10
|
+
MovimientoArancel,
|
|
11
|
+
MovimientoComision,
|
|
12
|
+
MovimientoDerecho,
|
|
13
|
+
MovimientoMoneda,
|
|
14
|
+
MovimientoRetencionIIBB,
|
|
15
|
+
MovimientoTitulo,
|
|
16
|
+
)
|
|
8
17
|
from pyEscoAPI.esco_api import APIVersion
|
|
9
18
|
|
|
10
19
|
|
|
@@ -360,4 +369,151 @@ def test_insert_solicitud_comprobante_pago(api_client):
|
|
|
360
369
|
fecha_liquidacion=date.today(),
|
|
361
370
|
controla_saldo_monetario=True,
|
|
362
371
|
)
|
|
363
|
-
assert result == mock_response
|
|
372
|
+
assert result == mock_response
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
@patch("pyEscoAPI.esco_api.EscoAPI._EscoAPI__esco_login")
|
|
376
|
+
def test_insert_movimiento_manual(mock_login, api_client):
|
|
377
|
+
mock_response = {"codOperacion": 1}
|
|
378
|
+
fecha = datetime(2026, 11, 4, 13, 56, 41, 701000, tzinfo=timezone.utc)
|
|
379
|
+
with patch.object(api_client, "_EscoAPI__pre_connection"), patch.object(
|
|
380
|
+
api_client, "_EscoAPI__make_request", return_value=mock_response
|
|
381
|
+
) as mock_request:
|
|
382
|
+
result = api_client.insert_movimiento_manual(
|
|
383
|
+
cuenta=123,
|
|
384
|
+
fecha_concertacion=fecha,
|
|
385
|
+
fecha_liquidacion=fecha,
|
|
386
|
+
descripcion="Ajuste manual",
|
|
387
|
+
cod_tp_movimiento_manual="AJ",
|
|
388
|
+
observaciones="obs",
|
|
389
|
+
num_referencia=10,
|
|
390
|
+
mercado="ME",
|
|
391
|
+
se_informa=True,
|
|
392
|
+
permite_movimiento_feriado=True,
|
|
393
|
+
permite_descubierto=True,
|
|
394
|
+
controla_duplicidad=False,
|
|
395
|
+
movimientos_moneda=[
|
|
396
|
+
MovimientoMoneda(
|
|
397
|
+
importe=100.5,
|
|
398
|
+
moneda="ARS",
|
|
399
|
+
tpCambioMovPais=1,
|
|
400
|
+
codCtaContable=401,
|
|
401
|
+
codCentroCost=0,
|
|
402
|
+
esCredito=True,
|
|
403
|
+
)
|
|
404
|
+
],
|
|
405
|
+
movimientos_titulo=[
|
|
406
|
+
MovimientoTitulo(
|
|
407
|
+
instrumento="GGAL",
|
|
408
|
+
codTpInstrumento="ES",
|
|
409
|
+
codAgenteDepo=1,
|
|
410
|
+
cantidad=10,
|
|
411
|
+
precio=1500,
|
|
412
|
+
esCredito=False,
|
|
413
|
+
)
|
|
414
|
+
],
|
|
415
|
+
movimientos_arancel=[
|
|
416
|
+
MovimientoArancel(
|
|
417
|
+
importe=10,
|
|
418
|
+
moneda="ARS",
|
|
419
|
+
tpCambioArPais=1,
|
|
420
|
+
codTpIVABase="IB",
|
|
421
|
+
codTpIVASTasa="ST",
|
|
422
|
+
)
|
|
423
|
+
],
|
|
424
|
+
movimientos_derecho=[
|
|
425
|
+
MovimientoDerecho(
|
|
426
|
+
tipoDerecho="ME",
|
|
427
|
+
importe=5,
|
|
428
|
+
moneda="ARS",
|
|
429
|
+
tpCambioDerPais=1,
|
|
430
|
+
ivaDerecho="IB",
|
|
431
|
+
sobreTasa="ST",
|
|
432
|
+
)
|
|
433
|
+
],
|
|
434
|
+
movimientos_retenciones_iibb=[
|
|
435
|
+
MovimientoRetencionIIBB(
|
|
436
|
+
importe=2,
|
|
437
|
+
moneda="ARS",
|
|
438
|
+
tpCambioRetPais=1,
|
|
439
|
+
codProvincia=1,
|
|
440
|
+
codPais=1,
|
|
441
|
+
)
|
|
442
|
+
],
|
|
443
|
+
movimientos_comisiones=[
|
|
444
|
+
MovimientoComision(
|
|
445
|
+
codAgenteDepo=1,
|
|
446
|
+
importe=3,
|
|
447
|
+
moneda="ARS",
|
|
448
|
+
tpCambioComPais=1,
|
|
449
|
+
codTpIVABaseCom="IB",
|
|
450
|
+
codCtaContable=500,
|
|
451
|
+
)
|
|
452
|
+
],
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
assert result == mock_response
|
|
456
|
+
mock_request.assert_called_once_with(
|
|
457
|
+
request_endpoint="/insert-movimiento-manual",
|
|
458
|
+
request_body={
|
|
459
|
+
"cuenta": 123,
|
|
460
|
+
"fechaConcertacion": "2026-11-04T13:56:41.701Z",
|
|
461
|
+
"fechaLiquidacion": "2026-11-04T13:56:41.701Z",
|
|
462
|
+
"descripcion": "Ajuste manual",
|
|
463
|
+
"codTpMovimientoManual": "AJ",
|
|
464
|
+
"observaciones": "obs",
|
|
465
|
+
"numReferencia": 10,
|
|
466
|
+
"mercado": "ME",
|
|
467
|
+
"seInforma": True,
|
|
468
|
+
"permiteMovimientoFeriado": True,
|
|
469
|
+
"permiteDescubierto": True,
|
|
470
|
+
"controlaDuplicidad": False,
|
|
471
|
+
"movimientosMoneda": [{
|
|
472
|
+
"importe": 100.5,
|
|
473
|
+
"moneda": "ARS",
|
|
474
|
+
"tpCambioMovPais": 1,
|
|
475
|
+
"codCtaContable": 401,
|
|
476
|
+
"codCentroCost": 0,
|
|
477
|
+
"esCredito": True,
|
|
478
|
+
}],
|
|
479
|
+
"movimientosTitulo": [{
|
|
480
|
+
"instrumento": "GGAL",
|
|
481
|
+
"codTpInstrumento": "ES",
|
|
482
|
+
"codAgenteDepo": 1,
|
|
483
|
+
"cantidad": 10,
|
|
484
|
+
"precio": 1500,
|
|
485
|
+
"esCredito": False,
|
|
486
|
+
}],
|
|
487
|
+
"movimientosArancel": [{
|
|
488
|
+
"importe": 10,
|
|
489
|
+
"moneda": "ARS",
|
|
490
|
+
"tpCambioArPais": 1,
|
|
491
|
+
"codTpIVABase": "IB",
|
|
492
|
+
"codTpIVASTasa": "ST",
|
|
493
|
+
}],
|
|
494
|
+
"movimientosDerecho": [{
|
|
495
|
+
"tipoDerecho": "ME",
|
|
496
|
+
"importe": 5,
|
|
497
|
+
"moneda": "ARS",
|
|
498
|
+
"tpCambioDerPais": 1,
|
|
499
|
+
"ivaDerecho": "IB",
|
|
500
|
+
"sobreTasa": "ST",
|
|
501
|
+
}],
|
|
502
|
+
"movimientosRetencionesIIBB": [{
|
|
503
|
+
"importe": 2,
|
|
504
|
+
"moneda": "ARS",
|
|
505
|
+
"tpCambioRetPais": 1,
|
|
506
|
+
"codProvincia": 1,
|
|
507
|
+
"codPais": 1,
|
|
508
|
+
}],
|
|
509
|
+
"movimientosComisiones": [{
|
|
510
|
+
"codAgenteDepo": 1,
|
|
511
|
+
"importe": 3,
|
|
512
|
+
"moneda": "ARS",
|
|
513
|
+
"tpCambioComPais": 1,
|
|
514
|
+
"codTpIVABaseCom": "IB",
|
|
515
|
+
"codCtaContable": 500,
|
|
516
|
+
}],
|
|
517
|
+
},
|
|
518
|
+
request_method=HTTPMethod.POST,
|
|
519
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|