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