From 83785cda2d6901b5156301c4cc36c583c45f3be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emili=20Garc=C3=ADa?= Date: Mon, 27 Feb 2023 12:59:26 +0100 Subject: [PATCH 1/3] Allows multiple interations for D1 --- ...otificacionCambiosATRDesdeDistribuidor.xsd | 2 +- gestionatr/input/messages/D1.py | 76 +++++++++------- gestionatr/output/messages/sw_d1.py | 2 +- tests/data/d101_motiu_13_14.xml | 49 ++++++++++ tests/test_input.py | 62 ++++++++++--- tests/test_output.py | 90 +++++++++++++++++++ 6 files changed, 236 insertions(+), 45 deletions(-) create mode 100644 tests/data/d101_motiu_13_14.xml diff --git a/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd b/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd index 941f7044..0fbeea90 100644 --- a/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd +++ b/gestionatr/data/NotificacionCambiosATRDesdeDistribuidor.xsd @@ -6,7 +6,7 @@ - + diff --git a/gestionatr/input/messages/D1.py b/gestionatr/input/messages/D1.py index a99faaba..bb8f1865 100644 --- a/gestionatr/input/messages/D1.py +++ b/gestionatr/input/messages/D1.py @@ -6,54 +6,64 @@ class D1(C1): """Clase que implementa D1.""" + @property + def notificacion_cambios_atr_desde_distribuidor(self): + tree = 'NotificacionCambiosATRDesdeDistribuidor' + data = [] + for d in get_rec_attr(self.obj, tree, False): + data.append(NotificacionCambiosATRDesdeDistribuidor(d)) + return data + + +class NotificacionCambiosATRDesdeDistribuidor(object): + + def __init__(self, data): + self.notificacion_cambios_atr_desde_distribuidor = data + @property def motivo_cambio_atr_desde_distribuidora(self): - tree = '{0}.MotivoCambioATRDesdeDistribuidora'.format(self._header) - data = get_rec_attr(self.obj, tree, False) - if data: - return data.text - else: - return False + data = '' + try: + data = self.notificacion_cambios_atr_desde_distribuidor.MotivoCambioATRDesdeDistribuidora.text + except AttributeError: + pass + return data @property def fecha_prevista_aplicacion_cambio_atr(self): - tree = '{0}.FechaPrevistaAplicacionCambioATR'.format(self._header) - data = get_rec_attr(self.obj, tree, False) - if data: - return data.text - else: - return False + data = '' + try: + data = self.notificacion_cambios_atr_desde_distribuidor.FechaPrevistaAplicacionCambioATR.text + except AttributeError: + pass + return data @property def periodicidad_facturacion(self): - tree = '{0}.PeriodicidadFacturacion'.format(self._header) - data = get_rec_attr(self.obj, tree, False) - if data: - return data.text - else: - return False + data = '' + try: + data = self.notificacion_cambios_atr_desde_distribuidor.PeriodicidadFacturacion.text + except AttributeError: + pass + return data @property def info_registro_autocons(self): - tree = '{0}.InfoRegistroAutocons'.format(self._header) - data = get_rec_attr(self.obj, tree, False) - if data not in [None, False]: - return InfoRegistroAutocons(data) - else: - tree = '{0}.InfoRegistroAutocons'.format(self._header) - data = get_rec_attr(self.obj, tree, False) - if data not in [None, False]: - return InfoRegistroAutocons(data) - return False + data = '' + try: + data = InfoRegistroAutocons(self.notificacion_cambios_atr_desde_distribuidor.InfoRegistroAutocons) + except AttributeError: + pass + return data @property def info_retardo_activ_autocons(self): - tree = '{0}.InfoRetardoActivAutocons'.format(self._header) - obj = get_rec_attr(self.obj, tree, False) data = [] - if obj not in [None, False]: - for i in obj: - data.append(InfoRetardoActivAutocons(i)) + try: + for datos in self.notificacion_cambios_atr_desde_distribuidor.InfoRetardoActivAutocons: + data.append(InfoRetardoActivAutocons(datos)) + except AttributeError: + pass return data diff --git a/gestionatr/output/messages/sw_d1.py b/gestionatr/output/messages/sw_d1.py index 3539843a..4e296c7b 100644 --- a/gestionatr/output/messages/sw_d1.py +++ b/gestionatr/output/messages/sw_d1.py @@ -12,7 +12,7 @@ def __init__(self): self.mensaje = XmlField('MensajeNotificacionCambiosATRDesdeDistribuidor', attributes={'xmlns': 'http://localhost/elegibilidad'}) self.cabecera = Cabecera() - self.notificacion_cambios_atr_desde_distribuidor = NotificacionCambiosATRDesdeDistribuidor() + self.notificacion_cambios_atr_desde_distribuidor = [] super(MensajeNotificacionCambiosATRDesdeDistribuidor, self) \ .__init__('MensajeNotificacionCambiosATRDesdeDistribuidor', 'mensaje') diff --git a/tests/data/d101_motiu_13_14.xml b/tests/data/d101_motiu_13_14.xml new file mode 100644 index 00000000..27c4b6b0 --- /dev/null +++ b/tests/data/d101_motiu_13_14.xml @@ -0,0 +1,49 @@ + + + + 1234 + 4321 + D1 + 01 + 201605219497 + 00 + 2016-06-08T04:24:09 + ES0116000000011531LK0F + + + 13 + + 12345678 + 2022-01-01 + 2022-01-01 + 2022-01-01 + 15 + 100 + 200 + 6 + + + + 14 + + 12345678 + 2022-01-01 + 2022-01-01 + 2022-01-01 + 15 + 100 + 200 + 6 + + + 12345679 + 2022-01-02 + 2022-01-02 + 2022-01-02 + 16 + 101 + 201 + 6 + + + diff --git a/tests/test_input.py b/tests/test_input.py index da77cb60..e554e9f2 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -1147,6 +1147,7 @@ def setUp(self): self.xml_d102_reject = open(get_data("d102_reject.xml"), "r") self.xml_d101_motiu_11 = open(get_data("d101_motiu_11.xml"), "r") self.xml_d101_motiu_13 = open(get_data("d101_motiu_13.xml"), "r") + self.xml_d101_motiu_13_14 = open(get_data("d101_motiu_13_14.xml"), "r") def tearDown(self): self.xml_d101.close() @@ -1156,14 +1157,15 @@ def tearDown(self): self.xml_d102_reject.close() self.xml_d101_motiu_11.close() self.xml_d101_motiu_13.close() + self.xml_d101_motiu_13_14.close() def test_d101(self): d1 = D1(self.xml_d101) d1.parse_xml() - self.assertEqual(d1.periodicidad_facturacion, u'01') - self.assertEqual(d1.fecha_prevista_aplicacion_cambio_atr, u'2016-06-09') - self.assertEqual(d1.motivo_cambio_atr_desde_distribuidora, u'01') - info = d1.info_registro_autocons + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].periodicidad_facturacion, u'01') + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].fecha_prevista_aplicacion_cambio_atr, u'2016-06-09') + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].motivo_cambio_atr_desde_distribuidora, u'01') + info = d1.notificacion_cambios_atr_desde_distribuidor[0].info_registro_autocons autoconsumo = info.autoconsumo self.assertEqual(autoconsumo.cau, u'ES1234000000000001JN0FA001') self.assertEqual(autoconsumo.seccion_registro, u'2') @@ -1230,8 +1232,8 @@ def test_d101(self): def test_d101_min_with_info(self): d1 = D1(self.xml_d101_min_with_info) d1.parse_xml() - self.assertEqual(d1.motivo_cambio_atr_desde_distribuidora, u'04') - info = d1.info_registro_autocons + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].motivo_cambio_atr_desde_distribuidora, u'04') + info = d1.notificacion_cambios_atr_desde_distribuidor[0].info_registro_autocons autoconsumo = info.autoconsumo self.assertEqual(autoconsumo.cau, u'ES1234000000000001JN0FA001') self.assertEqual(autoconsumo.seccion_registro, u'2') @@ -1266,18 +1268,18 @@ def test_d101_min_with_info(self): def test_d101_fully_min(self): d1 = D1(self.xml_d101_fully_min) d1.parse_xml() - self.assertEqual(d1.motivo_cambio_atr_desde_distribuidora, u'01') + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].motivo_cambio_atr_desde_distribuidora, u'01') def test_d101_motiu_11(self): d1 = D1(self.xml_d101_motiu_11) d1.parse_xml() - self.assertEqual(d1.motivo_cambio_atr_desde_distribuidora, u'11') + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].motivo_cambio_atr_desde_distribuidora, u'11') def test_d101_motiu_13(self): d1 = D1(self.xml_d101_motiu_13) d1.parse_xml() - self.assertEqual(d1.motivo_cambio_atr_desde_distribuidora, u'13') - info = d1.info_retardo_activ_autocons[0] + self.assertEqual(d1.notificacion_cambios_atr_desde_distribuidor[0].motivo_cambio_atr_desde_distribuidora, u'13') + info = d1.notificacion_cambios_atr_desde_distribuidor[0].info_retardo_activ_autocons[0] self.assertEqual(info.codigo_fiscal_factura, u'12345678') self.assertEqual(info.fecha_inicio_conteo_activ_autocons, u"2022-01-01") self.assertEqual(info.fecha_desde, u"2022-01-01") @@ -1287,6 +1289,46 @@ def test_d101_motiu_13(self): self.assertEqual(info.valor_energia_horaria_calculada, u'200') self.assertEqual(info.pot_instalada_gen, u'6') + def test_d101_motiu_13_14(self): + d1 = D1(self.xml_d101_motiu_13_14) + d1.parse_xml() + + # Notificacio tipus 13 + notificacio0 = d1.notificacion_cambios_atr_desde_distribuidor[0] + self.assertEqual(notificacio0.motivo_cambio_atr_desde_distribuidora, u'13') + info = notificacio0.info_retardo_activ_autocons[0] + self.assertEqual(info.codigo_fiscal_factura, u'12345678') + self.assertEqual(info.fecha_inicio_conteo_activ_autocons, u"2022-01-01") + self.assertEqual(info.fecha_desde, u"2022-01-01") + self.assertEqual(info.fecha_hasta, u"2022-01-01") + self.assertEqual(info.dias_retardo_activ_autocons, u'15') + self.assertEqual(info.valor_energia_anual_calculado, u'100') + self.assertEqual(info.valor_energia_horaria_calculada, u'200') + self.assertEqual(info.pot_instalada_gen, u'6') + + # Notificacio tipus 14 + notificacio1 = d1.notificacion_cambios_atr_desde_distribuidor[1] + self.assertEqual(notificacio1.motivo_cambio_atr_desde_distribuidora, u'14') + info10 = notificacio1.info_retardo_activ_autocons[0] + self.assertEqual(info10.codigo_fiscal_factura, u'12345678') + self.assertEqual(info10.fecha_inicio_conteo_activ_autocons, u"2022-01-01") + self.assertEqual(info10.fecha_desde, u"2022-01-01") + self.assertEqual(info10.fecha_hasta, u"2022-01-01") + self.assertEqual(info10.dias_retardo_activ_autocons, u'15') + self.assertEqual(info10.valor_energia_anual_calculado, u'100') + self.assertEqual(info10.valor_energia_horaria_calculada, u'200') + self.assertEqual(info10.pot_instalada_gen, u'6') + + info11 = notificacio1.info_retardo_activ_autocons[1] + self.assertEqual(info11.codigo_fiscal_factura, u'12345679') + self.assertEqual(info11.fecha_inicio_conteo_activ_autocons, u"2022-01-02") + self.assertEqual(info11.fecha_desde, u"2022-01-02") + self.assertEqual(info11.fecha_hasta, u"2022-01-02") + self.assertEqual(info11.dias_retardo_activ_autocons, u'16') + self.assertEqual(info11.valor_energia_anual_calculado, u'101') + self.assertEqual(info11.valor_energia_horaria_calculada, u'201') + self.assertEqual(info11.pot_instalada_gen, u'6') + def test_d102_accept(self): d1 = D1(self.xml_d102_accept) d1.parse_xml() diff --git a/tests/test_output.py b/tests/test_output.py index 26c38377..7b4cb198 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -1582,12 +1582,14 @@ class test_D1(unittest.TestCase): def setUp(self): self.xml_d101 = open(get_data("d101.xml"), "r") self.xml_d101_motiu_13 = open(get_data("d101_motiu_13.xml"), "r") + self.xml_d101_motiu_13_14 = open(get_data("d101_motiu_13_14.xml"), "r") self.xml_d102_accept = open(get_data("d102_accept.xml"), "r") self.xml_d102_reject = open(get_data("d102_reject.xml"), "r") def tearDown(self): self.xml_d101.close() self.xml_d101_motiu_13.close() + self.xml_d101_motiu_13_14.close() self.xml_d102_accept.close() self.xml_d102_reject.close() @@ -1830,6 +1832,94 @@ def test_create_pas01_motiu_13(self): xml = str(mensaje) assertXmlEqual(xml, self.xml_d101_motiu_13.read()) + def test_create_pas01_motiu_13_14(self): + # MensajeNotificacionCambiosATRDesdeDistribuidor + mensaje = d1.MensajeNotificacionCambiosATRDesdeDistribuidor() + + # Cabecera + cabecera = d1.Cabecera() + cabecera_fields = { + 'codigo_ree_empresa_emisora': '1234', + 'codigo_ree_empresa_destino': '4321', + 'codigo_del_proceso': 'D1', + 'codigo_del_paso': '01', + 'codigo_de_solicitud': '201605219497', + 'secuencial_de_solicitud': '00', + 'fecha': '2016-06-08T04:24:09', + 'cups': 'ES0116000000011531LK0F', + } + cabecera.feed(cabecera_fields) + + # InfoRegistroAutocons + info_list0 = [] + info0 = d1.InfoRetardoActivAutocons() + info_retardo_activ_autocons_fields0 = { + 'codigo_fiscal_factura': '12345678', + 'fecha_inicio_conteo_activ_autocons': '2022-01-01', + 'fecha_desde': '2022-01-01', + 'fecha_hasta': '2022-01-01', + 'dias_retardo_activ_autocons': 15, + 'valor_energia_anual_calculada': 100, + 'valor_energia_horaria_calculada': 200, + 'pot_instalada_gen': 6, + } + info0.feed(info_retardo_activ_autocons_fields0) + info_list0.append(info0) + # NotificacionCambiosATRDesdeDistribuidor + notificacion0 = d1.NotificacionCambiosATRDesdeDistribuidor() + notificacion_cambios_atr_desde_distribuidor_fields0 = { + 'motivo_cambio_atr_desde_distribuidora': '13', + 'info_retardo_activ_autocons_list': info_list0, + } + notificacion0.feed(notificacion_cambios_atr_desde_distribuidor_fields0) + + # InfoRegistroAutocons + info_list1 = [] + info10 = d1.InfoRetardoActivAutocons() + info_retardo_activ_autocons_fields10 = { + 'codigo_fiscal_factura': '12345678', + 'fecha_inicio_conteo_activ_autocons': '2022-01-01', + 'fecha_desde': '2022-01-01', + 'fecha_hasta': '2022-01-01', + 'dias_retardo_activ_autocons': 15, + 'valor_energia_anual_calculada': 100, + 'valor_energia_horaria_calculada': 200, + 'pot_instalada_gen': 6, + } + info10.feed(info_retardo_activ_autocons_fields10) + info_list1.append(info10) + + info11 = d1.InfoRetardoActivAutocons() + info_retardo_activ_autocons_fields11 = { + 'codigo_fiscal_factura': '12345679', + 'fecha_inicio_conteo_activ_autocons': '2022-01-02', + 'fecha_desde': '2022-01-02', + 'fecha_hasta': '2022-01-02', + 'dias_retardo_activ_autocons': 16, + 'valor_energia_anual_calculada': 101, + 'valor_energia_horaria_calculada': 201, + 'pot_instalada_gen': 6, + } + info11.feed(info_retardo_activ_autocons_fields11) + info_list1.append(info11) + + # NotificacionCambiosATRDesdeDistribuidor + notificacion1 = d1.NotificacionCambiosATRDesdeDistribuidor() + notificacion_cambios_atr_desde_distribuidor_fields1 = { + 'motivo_cambio_atr_desde_distribuidora': '14', + 'info_retardo_activ_autocons_list': info_list1, + } + notificacion1.feed(notificacion_cambios_atr_desde_distribuidor_fields1) + + mensaje_notificacion_cambios_atr_desde_distribuidor_fields = { + 'cabecera': cabecera, + 'notificacion_cambios_atr_desde_distribuidor': [notificacion0, notificacion1], + } + mensaje.feed(mensaje_notificacion_cambios_atr_desde_distribuidor_fields) + mensaje.build_tree() + xml = str(mensaje) + assertXmlEqual(xml, self.xml_d101_motiu_13_14.read()) + def test_create_pas02_accept(self): # Cabecera cabecera = d1.Cabecera() From 6532b94a7ffc6f2aba99c221332dd60a1ec30a3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emili=20Garc=C3=ADa?= Date: Tue, 14 Mar 2023 11:17:45 +0100 Subject: [PATCH 2/3] Modifies contract type text --- gestionatr/defs.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gestionatr/defs.py b/gestionatr/defs.py index 31daf116..4b2b9f02 100644 --- a/gestionatr/defs.py +++ b/gestionatr/defs.py @@ -670,7 +670,7 @@ TABLA_9 = [('01', 'Anual'), ('02', 'Eventual medido'), ('03', 'Temporada'), - ('05', 'RECORE'), + ('05', 'Suministro a instalaciones RECORE'), ('07', 'Suministro de Obras'), ('08', 'Suministro de Socorro'), ('09', 'Eventual a tanto alzado'), From c2b2bff5deef2dd793ff3560122e9d866c074817 Mon Sep 17 00:00:00 2001 From: alex Date: Mon, 18 Sep 2023 09:23:26 +0200 Subject: [PATCH 3/3] fix test --- tests/test_input.py | 1 + tests/test_output.py | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/test_input.py b/tests/test_input.py index c9cb9170..b2a9ae33 100644 --- a/tests/test_input.py +++ b/tests/test_input.py @@ -1159,6 +1159,7 @@ def setUp(self): self.xml_d102_reject = open(get_data("d102_reject.xml"), "rb") self.xml_d101_motiu_11 = open(get_data("d101_motiu_11.xml"), "rb") self.xml_d101_motiu_13 = open(get_data("d101_motiu_13.xml"), "rb") + self.xml_d101_motiu_13_14 = open(get_data("d101_motiu_13_14.xml"), "rb") def tearDown(self): self.xml_d101.close() diff --git a/tests/test_output.py b/tests/test_output.py index c4c4e67d..b34a075a 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -1583,6 +1583,7 @@ class test_D1(unittest.TestCase): def setUp(self): self.xml_d101 = open(get_data("d101.xml"), "rb") self.xml_d101_motiu_13 = open(get_data("d101_motiu_13.xml"), "rb") + self.xml_d101_motiu_13_14 = open(get_data("d101_motiu_13_14.xml"), "rb") self.xml_d102_accept = open(get_data("d102_accept.xml"), "rb") self.xml_d102_reject = open(get_data("d102_reject.xml"), "rb")