Skip to content

Commit e2b0e69

Browse files
authored
Merge pull request #291 from gisce/revert-290-revert-288-permitir_importar_f1_lectura_totalizador_td
Recuperar "Crear lecturas ficticias de consumo al recibir únicamente totalizador con codigo de tarifas nuevas""
2 parents ffe2731 + 482a1d8 commit e2b0e69

File tree

1 file changed

+93
-11
lines changed
  • gestionatr/input/messages

1 file changed

+93
-11
lines changed

gestionatr/input/messages/F1.py

Lines changed: 93 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1681,17 +1681,8 @@ def get_lectures(self, tipus=None, force_no_transforma_no_td_a_td=False, force_n
16811681
lectures.append(integrador)
16821682
except AttributeError:
16831683
pass
1684-
1685-
if (not tipus or "S" in tipus) and self.factura and self.factura.get_consum_facturat(tipus='S', periode=None) \
1686-
and not self.factura.has_AS_lectures():
1687-
# Si no tenim lectures AS pero si que ens han cobrat excedents,
1688-
# creem unes lectures AS ficticies a 0 (puta ENDESA)
1689-
lectures.extend(self.factura.get_fake_AS_lectures(comptador_base=self))
1690-
if (not tipus or "S" in tipus) and self.factura and self.has_AS_lectures_only_p0() \
1691-
and len(self.factura.get_consum_facturat(tipus='S', periode=None)) > 1:
1692-
# Si nomes ens envien el P0 de excedents pero ens cobren varis periodes
1693-
# creem una lectura e P2 AS ficticies a 0 (puta FENOSA)
1694-
lectures.extend(self.factura.get_fake_AS_p2_lectures(comptador_base=self))
1684+
# Comprovem si es necessari crear alguna lectura ficticia i es modifiquen les lectures si és així
1685+
self.get_fake_lectures(lectures, tipus)
16951686

16961687
if not force_no_transforma_no_td_a_td and self.factura:
16971688
lectures = self.factura.transforma_no_td_a_td(
@@ -1700,6 +1691,83 @@ def get_lectures(self, tipus=None, force_no_transforma_no_td_a_td=False, force_n
17001691
lectures = sorted(lectures, key=lambda x: x.lectura_desde.fecha)
17011692
return lectures
17021693

1694+
def get_fake_lectures(self, lectures, tipus=None):
1695+
"""
1696+
Aquest mètode contempla les diferents casuistiques que es poden donar perque l'ERP hagi de crear lectures
1697+
ficticies, ja que per algun motiu no ens arriben les lectures dels periodes pertinents.
1698+
Casos contemplats:
1699+
- No tenim lectures AS, pero en el F1 ens cobren excedents
1700+
- Lectura totalitzadora d'AS
1701+
- Lectura totalitzadora d'AE i F1 no té lectures PRE TD
1702+
"""
1703+
generacio_facturada = self.factura and self.factura.get_consum_facturat(tipus='S', periode=None)
1704+
if (not tipus or "S" in tipus) and self.factura and not self.factura.has_AS_lectures():
1705+
# El mètode get_consum_facturat retorna [0.0] si no hi ha consum
1706+
if generacio_facturada and len(generacio_facturada) > 1 or generacio_facturada[0] != 0.0:
1707+
# Si no tenim lectures AS pero si que ens han cobrat excedents,
1708+
# creem unes lectures AS ficticies a 0 (puta ENDESA)
1709+
lectures.extend(self.factura.get_fake_AS_lectures(comptador_base=self))
1710+
if (not tipus or "S" in tipus) and self.factura and self.has_AS_lectures_only_p0() \
1711+
and generacio_facturada and len(generacio_facturada) > 1:
1712+
# Si nomes ens envien el P0 de excedents pero ens cobren varis periodes
1713+
# creem una lectura e P2 AS ficticies a 0 (puta FENOSA)
1714+
lectures.extend(self.factura.get_fake_AS_p2_lectures(comptador_base=self))
1715+
1716+
if (
1717+
(not tipus or "A" in tipus)
1718+
and self.factura and self.factura.datos_factura.tipo_factura != 'G'
1719+
and len(self.factura.get_consum_facturat(tipus='A', periode=None)) > 1
1720+
):
1721+
# Si ens facturen varis periodes de consum i la factura no té lectures pre td, hem de revisar si la lectura
1722+
# de consum és un totalitzador, ja que si ho és hem de crear les lectures ficticies
1723+
lectures_by_date = {}
1724+
# Mirem cuantes lectures ens arriben al F1.
1725+
# Si ens arriba totalitzador per la lectura de Gener i per la de Febrer, haurem de crear les lectures fake
1726+
# per totes dues dates
1727+
for l in lectures:
1728+
lectures_by_date.setdefault(l.lectura_desde.fecha, []).append(l)
1729+
for ldate in lectures_by_date:
1730+
lectura_ae_totalitzador = self.has_lectura_AE_totalitzador_on_date(ldate)
1731+
if lectura_ae_totalitzador:
1732+
lectures.extend(self.get_fake_pX_lectures(lectura_ae_totalitzador, tipus='A'))
1733+
1734+
def get_fake_pX_lectures(self, lectura_ae_totalitzador, tipus=None):
1735+
# Si te un totalitzador amb el codi de les noves tarifes, creem les lectures fake
1736+
tarifa_atr = self.factura.datos_factura.tarifa_atr_fact
1737+
nperiodes_td = PERIODES_PER_TARIFA.get(tarifa_atr, {}).get(tipus, None)
1738+
# Obtenim els periodes de les lectures segons la tarifa
1739+
res = []
1740+
if nperiodes_td:
1741+
lectures_per_periode = {}
1742+
for periode in range(1, nperiodes_td + 1):
1743+
pname = "P" + str(periode)
1744+
lectures_per_periode[pname] = []
1745+
1746+
# Agafem el totalitzador com a lectura "base"
1747+
base_lectura = lectura_ae_totalitzador
1748+
# Marquem el totalitzador com a lectura de P1
1749+
lectures_per_periode[lectura_ae_totalitzador.periode].append(lectura_ae_totalitzador)
1750+
1751+
if base_lectura:
1752+
for periode in lectures_per_periode:
1753+
if not lectures_per_periode.get(periode) and base_lectura:
1754+
try:
1755+
aux = self.factura.get_fake_pX_lectura(tipus, periode, base_lectura)
1756+
res.append(aux)
1757+
except Exception:
1758+
pass
1759+
return res
1760+
1761+
def has_lectura_AE_totalitzador_on_date(self, ldate):
1762+
# Busquem les lectures d'activa entrant per la data que ens interessa
1763+
lectures_ae = [
1764+
lect for lect in self.integradores
1765+
if lect.tipus == 'A' and lect.lectura_desde.fecha == ldate
1766+
]
1767+
if len(lectures_ae) == 1 and lectures_ae[0].codigo_periodo in ('A0', '90'):
1768+
return lectures_ae[0]
1769+
return False
1770+
17031771
def has_AS_lectures_only_p0(self):
17041772
has_p0 = False
17051773
try:
@@ -1899,6 +1967,11 @@ class FacturaATR(Factura):
18991967

19001968
def __init__(self, data):
19011969
super(FacturaATR, self).__init__(data)
1970+
# Mandanga incoming:
1971+
# El metode "te_lectures_pre_td_amb_tarifa_td" quan estem en un F1 tipus G espera que
1972+
# el atribut "has_pre_td_readings" estigui inicialitzat. Per tant l'inicialitzem amb un valor dummy
1973+
# i despres ja s'actualitzarà amb el valor real.
1974+
self.has_pre_td_readings = False
19021975
self.has_pre_td_readings = self.te_lectures_pre_td_amb_tarifa_td()
19031976
self.GETTERS_LINEAS_FACTURA += [
19041977
('potencia', self.get_info_potencia),
@@ -1932,6 +2005,14 @@ def te_lectures_pre_td_amb_tarifa_td(self):
19322005

19332006
return False
19342007

2008+
def te_lectures_amb_totalitzador(self):
2009+
for c in self.get_comptadors():
2010+
for l in c.get_lectures(force_no_transforma_no_td_a_td=True):
2011+
if l.codigo_periodo in ['10', '20', '80', '90', 'A0']:
2012+
return True
2013+
2014+
return False
2015+
19352016
def te_lectures_amb_decimals(self):
19362017
if self.datos_factura.tarifa_atr_fact not in TARIFES_TD:
19372018
return False
@@ -2064,6 +2145,7 @@ def get_lectures_amb_periodes_td(self, lectures, tipus):
20642145
if l.tipus == tipus:
20652146
# Mandanga (Puta Fenosa) En cas que ens arribin lectures de periodes fora de la tarifa del contracte
20662147
# ignorem les lectures dels periodes que estiguin fora de la tarifa ATR del contracte
2148+
# Els codis 90 i A0 corresponen al periode P1
20672149
if l.periode in lectures_per_periode.keys():
20682150
lectures_per_periode[l.periode].append(l)
20692151
base_lectura = l

0 commit comments

Comments
 (0)