Skip to content

Commit d070777

Browse files
authored
Merge pull request #288 from gisce/permitir_importar_f1_lectura_totalizador_td
Crear lecturas ficticias de consumo al recibir únicamente totalizador con codigo de tarifas nuevas
2 parents c98156b + 9d877f9 commit d070777

File tree

1 file changed

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

1 file changed

+84
-11
lines changed

gestionatr/input/messages/F1.py

Lines changed: 84 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,79 @@ 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 (not tipus or "A" in tipus) and self.factura and len(self.factura.get_consum_facturat(tipus='A', periode=None)) > 1:
1717+
# Si ens facturen varis periodes de consum i la factura no té lectures pre td, hem de revisar si la lectura
1718+
# de consum és un totalitzador, ja que si ho és hem de crear les lectures ficticies
1719+
lectures_by_date = {}
1720+
# Mirem cuantes lectures ens arriben al F1.
1721+
# Si ens arriba totalitzador per la lectura de Gener i per la de Febrer, haurem de crear les lectures fake
1722+
# per totes dues dates
1723+
for l in lectures:
1724+
lectures_by_date.setdefault(l.lectura_desde.fecha, []).append(l)
1725+
for ldate in lectures_by_date:
1726+
lectura_ae_totalitzador = self.has_lectura_AE_totalitzador_on_date(ldate)
1727+
if lectura_ae_totalitzador:
1728+
lectures.extend(self.get_fake_pX_lectures(lectura_ae_totalitzador, tipus='A'))
1729+
1730+
def get_fake_pX_lectures(self, lectura_ae_totalitzador, tipus=None):
1731+
# Si te un totalitzador amb el codi de les noves tarifes, creem les lectures fake
1732+
tarifa_atr = self.factura.datos_factura.tarifa_atr_fact
1733+
nperiodes_td = PERIODES_PER_TARIFA.get(tarifa_atr, {}).get(tipus, None)
1734+
# Obtenim els periodes de les lectures segons la tarifa
1735+
res = []
1736+
if nperiodes_td:
1737+
lectures_per_periode = {}
1738+
for periode in range(1, nperiodes_td + 1):
1739+
pname = "P" + str(periode)
1740+
lectures_per_periode[pname] = []
1741+
1742+
# Agafem el totalitzador com a lectura "base"
1743+
base_lectura = lectura_ae_totalitzador
1744+
# Marquem el totalitzador com a lectura de P1
1745+
lectures_per_periode[lectura_ae_totalitzador.periode].append(lectura_ae_totalitzador)
1746+
1747+
if base_lectura:
1748+
for periode in lectures_per_periode:
1749+
if not lectures_per_periode.get(periode) and base_lectura:
1750+
try:
1751+
aux = self.factura.get_fake_pX_lectura(tipus, periode, base_lectura)
1752+
res.append(aux)
1753+
except Exception:
1754+
pass
1755+
return res
1756+
1757+
def has_lectura_AE_totalitzador_on_date(self, ldate):
1758+
# Busquem les lectures d'activa entrant per la data que ens interessa
1759+
lectures_ae = [
1760+
lect for lect in self.integradores
1761+
if lect.tipus == 'A' and lect.lectura_desde.fecha == ldate
1762+
]
1763+
if len(lectures_ae) == 1 and lectures_ae[0].codigo_periodo in ('A0', '90'):
1764+
return lectures_ae[0]
1765+
return False
1766+
17031767
def has_AS_lectures_only_p0(self):
17041768
has_p0 = False
17051769
try:
@@ -1932,6 +1996,14 @@ def te_lectures_pre_td_amb_tarifa_td(self):
19321996

19331997
return False
19341998

1999+
def te_lectures_amb_totalitzador(self):
2000+
for c in self.get_comptadors():
2001+
for l in c.get_lectures(force_no_transforma_no_td_a_td=True):
2002+
if l.codigo_periodo in ['10', '20', '80', '90', 'A0']:
2003+
return True
2004+
2005+
return False
2006+
19352007
def te_lectures_amb_decimals(self):
19362008
if self.datos_factura.tarifa_atr_fact not in TARIFES_TD:
19372009
return False
@@ -2064,6 +2136,7 @@ def get_lectures_amb_periodes_td(self, lectures, tipus):
20642136
if l.tipus == tipus:
20652137
# Mandanga (Puta Fenosa) En cas que ens arribin lectures de periodes fora de la tarifa del contracte
20662138
# ignorem les lectures dels periodes que estiguin fora de la tarifa ATR del contracte
2139+
# Els codis 90 i A0 corresponen al periode P1
20672140
if l.periode in lectures_per_periode.keys():
20682141
lectures_per_periode[l.periode].append(l)
20692142
base_lectura = l

0 commit comments

Comments
 (0)