diff --git a/cl_sii/rtc/data_models.py b/cl_sii/rtc/data_models.py index 8c5e06b3..bb5241b2 100644 --- a/cl_sii/rtc/data_models.py +++ b/cl_sii/rtc/data_models.py @@ -468,6 +468,15 @@ def dte_deudor_rut(self) -> Rut: # Custom Methods ########################################################################### + def as_cesion_l0(self) -> CesionL0: + return CesionL0( + dte_key=self.dte_key, + seq=self.seq, + cedente_rut=self.cedente_rut, + cesionario_rut=self.cesionario_rut, + fecha_cesion_dt=self.fecha_cesion_dt, + ) + def as_dte_data_l1(self) -> dte_data_models.DteDataL1: return dte_data_models.DteDataL1( emisor_rut=self.dte_key.emisor_rut, @@ -632,6 +641,20 @@ class CesionL2(CesionL1): # Custom Methods ########################################################################### + def as_cesion_l1(self) -> CesionL1: + return CesionL1( + dte_key=self.dte_key, + seq=self.seq, + cedente_rut=self.cedente_rut, + cesionario_rut=self.cesionario_rut, + fecha_cesion_dt=self.fecha_cesion_dt, + monto_cedido=self.monto_cedido, + fecha_ultimo_vencimiento=self.fecha_ultimo_vencimiento, + dte_fecha_emision=self.dte_fecha_emision, + dte_receptor_rut=self.dte_receptor_rut, + dte_monto_total=self.dte_monto_total, + ) + def as_dte_data_l2(self) -> dte_data_models.DteDataL2: return dte_data_models.DteDataL2( emisor_rut=self.dte_key.emisor_rut, diff --git a/cl_sii/rtc/data_models_aec.py b/cl_sii/rtc/data_models_aec.py index 84d90d02..a5f70612 100644 --- a/cl_sii/rtc/data_models_aec.py +++ b/cl_sii/rtc/data_models_aec.py @@ -268,6 +268,30 @@ def alt_natural_key(self) -> data_models.CesionAltNaturalKey: fecha_cesion_dt=self.fecha_cesion_dt, ) + ########################################################################### + # Custom Methods + ########################################################################### + + def as_cesion_l2(self) -> data_models.CesionL2: + return data_models.CesionL2( + dte_key=self.dte.natural_key, + seq=self.seq, + cedente_rut=self.cedente_rut, + cesionario_rut=self.cesionario_rut, + fecha_cesion_dt=self.fecha_cesion_dt, + monto_cedido=self.monto_cesion, + dte_receptor_rut=self.dte.receptor_rut, + dte_fecha_emision=self.dte.fecha_emision_date, + dte_monto_total=self.dte.monto_total, + fecha_ultimo_vencimiento=self.fecha_ultimo_vencimiento, + cedente_razon_social=self.cedente_razon_social, + cedente_email=self.cedente_email, + cesionario_razon_social=self.cesionario_razon_social, + cesionario_email=self.cesionario_email, + dte_deudor_email=self.dte_deudor_email, + cedente_declaracion_jurada=self.cedente_declaracion_jurada, + ) + ########################################################################### # Validators ########################################################################### diff --git a/tests/test_rtc_data_models.py b/tests/test_rtc_data_models.py index efedfd46..f5e36807 100644 --- a/tests/test_rtc_data_models.py +++ b/tests/test_rtc_data_models.py @@ -613,6 +613,26 @@ def test_as_dict(self) -> None: ) self.assertEqual(obj.as_dict(), expected_output) + def test_as_cesion_l0(self): + self._set_obj_1() + + obj = self.obj_1 + expected_output = CesionL0( + dte_key=DteNaturalKey( + emisor_rut=Rut('76354771-K'), + tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA, + folio=170, + ), + seq=32, + cedente_rut=Rut('76389992-6'), + cesionario_rut=Rut('76598556-0'), + fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware( + dt=datetime(2019, 4, 5, 12, 57, 32), + tz=CesionL0.DATETIME_FIELDS_TZ, + ), + ) + self.assertEqual(obj.as_cesion_l0(), expected_output) + def test_as_dte_data_l1(self): self._set_obj_1() @@ -813,6 +833,31 @@ def test_as_dict(self) -> None: ) self.assertEqual(obj.as_dict(), expected_output) + def test_as_cesion_l1(self): + self._set_obj_1() + + obj = self.obj_1 + expected_output = CesionL1( + dte_key=DteNaturalKey( + emisor_rut=Rut('76354771-K'), + tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA, + folio=170, + ), + seq=32, + cedente_rut=Rut('76389992-6'), + cesionario_rut=Rut('76598556-0'), + fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware( + dt=datetime(2019, 4, 5, 12, 57, 32), + tz=CesionL1.DATETIME_FIELDS_TZ, + ), + monto_cedido=2996301, + fecha_ultimo_vencimiento=date(2019, 5, 1), + dte_fecha_emision=date(2019, 4, 1), + dte_receptor_rut=Rut('96790240-3'), + dte_monto_total=2996301, + ) + self.assertEqual(obj.as_cesion_l1(), expected_output) + def test_as_dte_data_l2(self): self._set_obj_1() diff --git a/tests/test_rtc_data_models_aec.py b/tests/test_rtc_data_models_aec.py index c280ee1a..4066dc15 100644 --- a/tests/test_rtc_data_models_aec.py +++ b/tests/test_rtc_data_models_aec.py @@ -168,6 +168,48 @@ def test_alt_natural_key(self) -> None: ) self.assertEqual(obj.alt_natural_key, expected_output) + def test_as_cesion_l2(self) -> None: + self._set_obj_1() + + obj = self.obj_1 + expected_output = CesionL2( + dte_key=DteNaturalKey( + emisor_rut=Rut('76354771-K'), + tipo_dte=TipoDteEnum.FACTURA_ELECTRONICA, + folio=170, + ), + seq=1, + cedente_rut=Rut('76354771-K'), + cesionario_rut=Rut('76389992-6'), + fecha_cesion_dt=tz_utils.convert_naive_dt_to_tz_aware( + dt=datetime(2019, 4, 1, 10, 22, 2), + tz=CesionL2.DATETIME_FIELDS_TZ, + ), + monto_cedido=2996301, + dte_receptor_rut=Rut('96790240-3'), + dte_fecha_emision=date(2019, 4, 1), + dte_monto_total=2996301, + fecha_ultimo_vencimiento=date(2019, 5, 1), + cedente_razon_social='SERVICIOS BONILLA Y LOPEZ Y COMPAÑIA LIMITADA', + cedente_email='enaconltda@gmail.com', + cesionario_razon_social='ST CAPITAL S.A.', + cesionario_email='fynpal-app-notif-st-capital@fynpal.com', + dte_deudor_email=None, + cedente_declaracion_jurada=( + 'Se declara bajo juramento que SERVICIOS BONILLA Y LOPEZ Y COMPAÑIA ' + 'LIMITADA, RUT 76354771-K ha puesto a disposición del cesionario ST ' + 'CAPITAL S.A., RUT 76389992-6, el o los documentos donde constan los ' + 'recibos de las mercaderías entregadas o servicios prestados, entregados ' + 'por parte del deudor de la factura MINERA LOS PELAMBRES, RUT 96790240-3, ' + 'deacuerdo a lo establecido en la Ley N°19.983.' + ), + ) + obj_cesion_l2 = obj.as_cesion_l2() + self.assertEqual(obj_cesion_l2, expected_output) + self.assertEqual(obj_cesion_l2.natural_key, obj.natural_key) + self.assertEqual(obj_cesion_l2.alt_natural_key, obj.alt_natural_key) + self.assertEqual(obj_cesion_l2.dte_key, obj.dte.natural_key) + class AecXmlTest(unittest.TestCase): """