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 2c809440..6d8dbe05 100644 --- a/gestionatr/input/messages/D1.py +++ b/gestionatr/input/messages/D1.py @@ -7,54 +7,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 5a7a14d7..e790cd87 100644 --- a/gestionatr/output/messages/sw_d1.py +++ b/gestionatr/output/messages/sw_d1.py @@ -13,7 +13,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 821d060a..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() @@ -1168,14 +1169,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') @@ -1242,8 +1244,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') @@ -1278,18 +1280,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") @@ -1299,6 +1301,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 eb51f69d..b34a075a 100644 --- a/tests/test_output.py +++ b/tests/test_output.py @@ -1583,12 +1583,14 @@ 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") 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() @@ -1831,6 +1833,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() @@ -7060,4 +7150,4 @@ def test_create_a143(self): mensaje_a143.feed(mensaje_a143_fields) mensaje_a143.build_tree() xml = str(mensaje_a143) - assertXmlEqual(xml, self.xml_a143.read()) \ No newline at end of file + assertXmlEqual(xml, self.xml_a143.read())