@@ -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