Ë
    ÀëìjØf  ã                   ó¾  — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dl
mZ dd	lmZmZmZmZmZ g d
¢Zg d¢Zg d¢Zg d¢Zg d¢Zg d¢dddddddœg d¢dddddddœg d¢ddddd d!dœg d"¢d#d$ddd%d&dœg d'¢d(d)d*d+d,d-dœg d.¢d/d/d*d+d0d1dœg d2¢d1d1d3d3d4d1dœd5œZd6„ Zd7Zd8„ Zd9„ Zd:„ Zd;„ Zd<„ Zd=„ ZdJd>„Zd?„ Z d@„ Z!dA„ Z"dBe#dCe#fdD„Z$dBe#dCe#fdE„Z%dF„ Z&dKdG„Z'dLdH„Z(yI)Mé    )Údate)Ú
connection)ÚVISysVerbrauchRahmen)Úmodels)ÚReuMietV)ÚRealEstateUnitÚ
RealEstate)r   é   )r   ÚVISysVerbrauchsDSÚVISysRefVerbrauchRahmenÚVISysRefVerbrauchsDSÚVISysVerbrauchArt)éc   éd   ée   éf   én   éo   )r   r   r   r   r   )ÚJanÚFebu   MÃ¤rÚAprÚMaiÚJunÚJulÚAugÚSepÚOktÚNovÚDez)ÚJanuarÚFebruaru   MÃ¤rzÚAprilr   ÚJuniÚJuliÚAugustÚ	SeptemberÚOktoberÚNovemberÚDezember)z#d9d9d9z#999999z#a6a6a6)z#FFC000z#e1a200z#c38400z#a56600u4   Energieverbrauch fÃ¼r RaumwÃ¤rme (erfasst durch HKV)u2   Verbrauch/mÂ² der Heizkostenverteiler (RaumwÃ¤rme)ÚgHKVu   gHKV/mÂ²u<  Dies ist der gewichtete, erfasste Verbrauch der Heizkostenverteiler im GebÃ¤ude.<br><br>Die Gewichtung berÃ¼cksichtigt die unterschiedliche thermische Leistung der HeizkÃ¶rper. Weitere Information zur Gewichtung kÃ¶nnen Sie der Heizkostenabrechnung entnehmen. Angaben in gHKV kÃ¶nnen nicht in kWh umgerechnet werden.uC  Beim Verbrauchsvergleich wird der auf die WohnflÃ¤che von 1 mÂ² normierte Verbrauch der Heizkostenverteiler in Ihrer Einheit mit dem Verbrauch des Durchschnittsnutzers derselben Kategorie verglichen. Der Verbrauch des Durchschnittsnutzers ist dabei der Referenzwert. Angaben in gHKV kÃ¶nnen nicht in kWh umgerechnet werden.)Ú
colorstackÚTitleÚ	TitleSpezÚMassEinheitÚMassEinheitSpezÚTextÚTextSpezu   Energiebedarf fÃ¼r RaumwÃ¤rmeu(   Energiebedarf fÃ¼r RaumwÃ¤rme (normiert)ÚkWhu   kWh/mÂ²ue   Dies ist der Energiebedarf zur Bereitstellung von RaumwÃ¤rme (Referenzwert: Gesamtbedarf im GebÃ¤ude)u,  Beim Verbrauchsvergleich wird der auf die WohnflÃ¤che von 1 mÂ² normierte Energiebedarf zur Bereitstellung von RaumwÃ¤rme in Ihrer Einheit mit dem Energiebedarf (=Referenzwert) des Durchschnittsnutzers derselben Kategorie verglichen. Der Verbrauch des Durchschnittsnutzers ist dabei der Referenzwert.)z#FF6600z#e14800z#c32a00z#a50c00u"   Energiebedarf fÃ¼r Trinkwarmwasseru-   Energiebedarf fÃ¼r Trinkwarmwasser (normiert)uj   Dies ist der Energiebedarf zur Bereitstellung von Trinkwarmwasser (Referenzwert: Gesamtbedarf im GebÃ¤ude)uî   Beim Verbrauchsvergleich wird der auf die WohnflÃ¤che von 1 mÂ² normierte Energiebedarf zur Bereitstellung von Trinkwarmwasser in Ihrer Einheit mit dem Energiebedarf (=Referenzwert) des Durchschnittsnutzers derselben Kategorie verglichen.)z#FF9300z#e17400z#c35700z#a53900u   Energiebedarf fÃ¼r WÃ¤rmeu$   Energiebedarf fÃ¼r WÃ¤rme (normiert)uˆ   Dies ist der Energieverbrauch, den Ihre Einheit von der zentralen WÃ¤rmeversorgung bezogen hat. (Referenzwert: Gesamtbedarf im GebÃ¤ude)uc  Beim Verbrauchsvergleich wird die auf die WohnflÃ¤che von 1 mÂ² normierte gelieferte WÃ¤rme in Ihrer Einheit mit der gelieferten WÃ¤rme (=Referenzwert) des Durchschnittsnutzers derselben Kategorie verglichen. Der Verbrauch des Durchschnittsnutzers ist dabei der Referenzwert. RaumwÃ¤rme und WÃ¤rme fÃ¼r Trinkwarmwasser werden dabei nicht getrennt erfasst.)z#205AFCz#023cdez#001ec0z#0000a2z"Verbrauch von Trinkwasser (gesamt)z$Verbrauch von Trinkwasser (normiert)u   mÂ³u   mÂ³/mÂ²u®   Dies gibt den Verbrauch von Trinkwasser im GebÃ¤ude an. Darin ist das Trinkwasser fÃ¼r Kalt- & Warmwasser enthalten. Der Referenzwert gibt den Gesamtverbrauch im GebÃ¤ude an.u  Beim Verbrauchsvergleich wird der auf die WohnflÃ¤che von 1 mÂ² normierte Trinkwasserverbrauch in Ihrer Einheit mit dem Trinkwasserverbrauch (=Referenzwert) des Durchschnittsnutzers derselben Kategorie verglichen. Der Verbrauch des Durchschnittsnutzers ist dabei der Referenzwert.)z#E21914z#c40000z#a60000z#880000u   Verbrauch fÃ¼r Trinkwarmwasseruu   Dies gibt den Verbrauch von Trinkwarmwasser im GebÃ¤ude an. Der Referenzwert gibt den Gesamtverbrauch im GebÃ¤ude an.Ú )ú#ffffffr4   r4   r4   zo.E.z'Keine Weiteren Informationen hinterlegt)r   r   r   r   r   r   éç  c                 ój   — | d›j                  dd«      j                  dd«      j                  dd«      S )zÞFormatiert eine Zahl im deutschen Format (1.234,56).

    Bewusst nur auf den Zahlenwert anwenden - fruehere Varianten haben die
    Ersetzung auf den ganzen Satz angewendet und damit Satzpunkte zu Kommas
    gemacht.
    ú,.2fú,ÚCOMMAú.©Úreplace)Úwerts    ú./var/www/html/vportal/app_verbrauch/service.pyÚ_de_zahlr?   ˆ   s6   € ð �4ˆ[×!Ñ! # wÓ/×7Ñ7¸¸SÓA×IÑIÈ'ÐSVÓWÐWó    )r   r   c                  óT   — t        j                  «       j                  } | | dz
  | dz
  gS )zIReturns last 3 years including current year. Migrated from static method.r
   é   )r   ÚtodayÚyear)Úcurrents    r>   Úget_verbrauchs_jahrerF   —   s(   € ä�j‰j‹l×Ñ€GØ�W˜q‘[ '¨A¡+Ð.Ð.r@   c                 ó~   — g }t         D ]1  }t        || |«      sŒt        || |«      }|sŒ!|j                  |«       Œ3 |S )z:Migrated from VerbrauchsChartDaten::getAllDashCardsData().)ÚDIAGRAMM_TYPESÚ_check_verbrauchsrahmen_existsÚget_dash_card_datenÚappend)ÚreuidÚ	nutzer_idÚresultÚdiagramm_typeÚcards        r>   Úget_all_dash_cards_datarQ   �   sF   € à€FÜ'ò $ˆÜ)¨-¸À	ÕJÜ& }°e¸YÓGˆDÚØ—‘˜dÕ#ð	$ð
 €Mr@   c                 ó  — t         j                  | t         d   «      }|d   }|d   }|d   }|d   }t        |«      }|r|d   nd}t        «       }	g }
t	        |	«      D �]  \  }}t        | ||d«      }|r<t        |«      }|
j                  |t        |«      k  r||   nd	t        |«      |d
œ«       |sŒVt        | ||d«      }|sŒgt        |«      }t        |«      dk(  rdt        d„ |D «       «      }t        d„ |D «       «      }|dkD  r;||z  dz  }|d|› dt        |«      › d|› dt        |«      › dt        |«      › d|› d�z  }|
j                  |t        t        «      k  r	t        |   nd	|› d�|d
œ«       �Œ ||r|d   nd	|| ||
dœS )z‚
    Migrated from VerbrauchsChartDaten::getVerbauchsChartDaten().
    Returns chart data dict for a single consumption type.
    r5   r,   r0   r.   r+   ÚREIDNÚ	VerBrWertú#ccc©ÚcolorrD   ÚdataÚRefVerBrWerté   c              3   óD   K  — | ]  }|d    €Œ	t        |d    «      –— Œ y­w©r   N©Úfloat©Ú.0Úrs     r>   ú	<genexpr>z-get_verbrauchs_chart_daten.<locals>.<genexpr>Í   s!   è ø€ Ò,[¸QÈ!ÈAÉ$ÑJZ¬U°1°Q±4¯[Ñ,[ùó   ‚
 � c              3   óD   K  — | ]  }|d    €Œ	t        |d    «      –— Œ y­wr\   r]   r_   s     r>   rb   z-get_verbrauchs_chart_daten.<locals>.<genexpr>Î   s"   è ø€ Ò-`¸aÈqÐQRÉtÑO_¬e°A°a±D¯kÑ-`ùrc   r   r   ú+<br><br>In Ihrer Einheit wurden im <b>Jahr ú: ú ú </b> verbraucht. Das entspricht ú % des Gesamtverbrauchs (õ   ) des GebÃ¤udes.ú
 Referenz ©r,   rW   r0   Ú	ChartTyper.   Úcharts)ÚDIAGRAMM_STYLE_AND_TEXTÚgetÚ_fetch_reu_datarF   Ú	enumerateÚ_fetch_verbrauchswerteÚ_rows_to_monthly_arrayrK   ÚlenÚstrÚ_fetch_referenzwerteÚsumr?   ÚCOLORS_REFERENZ)ÚverbrauchsartÚmietv_idÚstyleÚtitleÚtextÚmass_einheitr+   Úreu_dataÚreidÚjahreÚ
chart_barsÚiÚjahrÚrowsÚmonthlyÚref_rowsÚref_monthlyÚjahres_sum_einheitÚjahres_sum_gebaeudeÚanteils                       r>   Úget_verbrauchs_chart_datenr�   ©   sí  € ô
 $×'Ñ'¨Ô7NÈsÑ7SÓT€EØ�'‰N€EØ�‰=€DØ˜Ñ'€LØ�|Ñ$€Jä˜xÓ(€HÙ'ˆ8�FÒ¨T€Dä Ó"€EØ€Jä˜UÓ#ó "‰ˆˆ4ä% m°T¸8À[ÓQˆÙÜ,¨TÓ2ˆGØ×ÑØ*+¬c°*«oÒ*=˜ AšÀ6Ü˜D›	Øñô ò Ü+¨M¸4ÀÀ~ÓVˆHÚÜ4°XÓ>�ô �t“9 ’?Ü),Ñ,[À$Ô,[Ó)[Ð&Ü*-Ñ-`À8Ô-`Ó*`Ð'Ø*¨QÒ.Ø"4Ð7JÑ"JÈcÑ!Q˜ØØIÈ$ÈÈrÜ'Ð(:Ó;Ð<¸A¸l¸^ð L.Ü.6°vÓ.>Ð-?ð @ Ü (Ð)<Ó =Ð>¸aÀ¸~ÐM]ð_ñ˜ð ×!Ñ!Ø34´s¼?Ó7KÒ3Kœ_¨QÒ/ÐQWØ#˜f JÐ/Ø'ñ#ö ð="ðJ Ù",�˜A’°&ØØ"Ø#Øñð r@   c                 óv  — t         j                  | t         d   «      }|d   }|d   }|d   }|d   }t        j                  j	                  |¬«      j                  dd«      j                  «       }|r|d   nd }	t        «       }
g }t        |
«      D �]  \  }}t        | |||d	«      }|r<t        |«      }|j                  |t        |«      k  r||   nd
t        |«      |dœ«       |	sŒWt        | ||	d«      }|sŒht        |«      }t        |«      dk(  rdt        d„ |D «       «      }t        d„ |D «       «      }|dkD  r;||z  dz  }|d|› dt!        |«      › d|› dt!        |«      › dt!        |«      › d|› d�z  }|j                  |t        t"        «      k  r	t"        |   nd
|› d�|dœ«       �Œ ||r|d   nd
|| ||dœS )Nr5   r,   r0   r.   r+   ©ÚREUIDr�   rS   rT   rU   rV   rY   rZ   c              3   óD   K  — | ]  }|d    €Œ	t        |d    «      –— Œ y­wr\   r]   r_   s     r>   rb   z1get_verbrauchs_chart_daten_neu.<locals>.<genexpr>  ó$   è ø€ Ò.a¸qÐPQÐRSÑPTÑP`¬u°Q°q±T¯{Ñ.aùrc   c              3   óD   K  — | ]  }|d    €Œ	t        |d    «      –— Œ y­wr\   r]   r_   s     r>   rb   z1get_verbrauchs_chart_daten_neu.<locals>.<genexpr>  r’   rc   r   r   re   rf   rg   rh   ri   rj   rk   rl   )ro   rp   r   ÚobjectsÚfilterÚvaluesÚfirstrF   rr   rs   rt   rK   ru   rv   rw   rx   r?   ry   )rz   rL   rM   r|   r}   r~   r   r+   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   s                        r>   Úget_verbrauchs_chart_daten_neur˜   è   s  € Ü*×.Ñ.¨}Ô>UÐVYÑ>ZÓ[€EØ˜‘>€EØ˜‘=€DØ˜Ñ'€LØ˜Ñ&€Jä×%Ñ%×,Ñ,°5Ð,Ó9×@Ñ@ÀÈ&ÓQ×WÑWÓY€HÙ#+ˆx˜Ò°€DÜ#Ó%€EØ€Jä˜UÓ#ó ‰ˆˆ4Ü% m°T¸5À)È[ÓYˆÙÜ,¨TÓ2ˆGØ×ÑØ*+¬c°*«oÒ*=˜ AšÀ6Ü˜T›Ø ñô ò Ü+¨M¸4ÀÀ~ÓVˆHÚÜ4°XÓ>�Ü�t“9 ’?Ü+.Ñ.aÀDÔ.aÓ+aÐ&Ü+.Ñ.aÀHÔ.aÓ+aÐ'Ø*¨QÒ.Ø"4Ð7JÑ"JÈcÑ!Q˜ØØIÈ$ÈÈrÜ'Ð(:Ó;Ð<¸A¸l¸^ð L.Ü.6°vÓ.>Ð-?ð @ Ü (Ð)<Ó =Ð>¸aÀ¸~ÐM]ð_ñ˜ð ×!Ñ!Ø34´s¼?Ó7KÒ3Kœ_¨QÒ/ÐQWØ $˜v ZÐ0Ø(ñ#ö ð3ð@ Ù'1�j ’m°vØØ#Ø#Ø ñð r@   c                 ó
  — t         j                  | t         d   «      }|d   }|d   }|d   }|d   }t        j                  j	                  |¬«      j                  dd«      j                  «       }|r|d   nd	}	t        «       }
g }t        |
«      D �]T  \  }}t        | |||d
«      }|r<t        |«      }|j                  |t        |«      k  r||   ndt        |«      |dœ«       |	sŒWt        | ||	d«      }|sŒht        |«      }t        |«      dk(  r¡t        d„ |D «       «      }t        d„ |D «       «      }||z
  }|d|› dt!        |«      › d|› d�z  }|dkD  r.|dt!        t#        |«      «      › d|› dt!        |«      › d|› d�	z  }n-|dt!        t#        |«      «      › d|› dt!        |«      › d|› d�	z  }|j                  |t        t$        «      k  r	t$        |   nd|› d�|dœ«       �ŒW | t&        vr|dz  }||r|d   nd|| ||dœS )zy
    Migrated from VerbrauchsChartDaten::getVerbauchsChartDatenSpez().
    Returns normalised (specific) chart data.
    r5   r-   r1   r/   r+   r�   r�   rS   NÚVerBrWertNormArU   rV   ÚRefVerBrWertNormArZ   c              3   óD   K  — | ]  }|d    €Œ	t        |d    «      –— Œ y­wr\   r]   r_   s     r>   rb   z2get_verbrauchs_chart_daten_spez.<locals>.<genexpr>>  s!   è ø€ Ò&U°qÀAÀaÁDÑDT¤u¨Q¨q©T§{Ñ&Uùrc   c              3   óD   K  — | ]  }|d    €Œ	t        |d    «      –— Œ y­wr\   r]   r_   s     r>   rb   z2get_verbrauchs_chart_daten_spez.<locals>.<genexpr>?  s!   è ø€ Ò'Z¸ÈÈ1ÉÑIY¬¨a°©d¯Ñ'Zùrc   zG<br><br>In Ihrer Einheit lag der <b>normierte Verbrauch</b> im <b>Jahr z</b> bei <b>rg   z</b>. r   z,Der Verbrauch in Ihrer Einheit war somit <b>u<    hÃ¶her</b> als der Verbrauch unseres Durchschnittsnutzers (z) im gleichen Zeitraum.z'Der Verbrauch der Einheit war somit <b>z? niedriger</b> als der Verbrauch unseres Durchschnittsnutzers (rk   zd<br><br><i>Weitere Informationen zum normierten Energieverbrauch finden Sie auf unserer Website.</i>rl   )ro   rp   r   r”   r•   r–   r—   rF   rr   rs   rt   rK   ru   rv   rw   rx   r?   Úabsry   Ú$VERBRAUCHSARTEN_OHNE_ENERGIE_HINWEIS)rz   rL   rM   r|   r}   r~   r   r+   r€   r�   r‚   rƒ   r„   r…   r†   r‡   rˆ   r‰   Úspez_einheitÚspez_gebaeudeÚdeltas                        r>   Úget_verbrauchs_chart_daten_spezr£     s�  € ô
 $×'Ñ'¨Ô7NÈsÑ7SÓT€EØ�+Ñ€EØ�Ñ€DØÐ*Ñ+€LØ�|Ñ$€Jä×%Ñ%×,Ñ,°5Ð,Ó9×@Ñ@ÀÈ&ÓQ×WÑWÓY€HÙ#+ˆx˜Ò°€DÜ#Ó%€EØ€Jô ˜UÓ#ó )‰ˆˆ4Ü% m°T¸5À)ÐM]Ó^ˆáÜ,¨TÓ2ˆGØ×ÑØ*+¬c°*«oÒ*=˜ AšÀ6Ü˜D›	Øñô ò Ü+¨M¸4ÀÐGZÓ[ˆHÚÜ4°XÓ>�ä�t“9 ’?Ü#&Ñ&U¸DÔ&UÓ#U�LÜ$'Ñ'Z¸XÔ'ZÓ$Z�MØ(¨=Ñ8�EØð#Ø#' &¨´X¸lÓ5KÐ4LÈAÈlÈ^Ð[aðcñ�Dð ˜q’yØØJÌ8ÔTWÐX]ÓT^ÓK_ÐJ`Ð`aÐbnÐaoð pOÜOWÐXeÓOfÐNgÐghÐiuÐhvð w4ð5ñ™ð ØEÄhÌsÐSXËzÓFZÐE[Ð[\Ð]iÐ\jð kOÜOWÐXeÓOfÐNgÐghÐiuÐhvð w4ð5ñ˜ð ×!Ñ!Ø34´s¼?Ó7KÒ3Kœ_¨QÒ/ÐQWØ#˜f JÐ/Ø'ñ#ö ðK)ðV Ô@Ñ@ØÐvÑvˆð Ù",�˜A’°&ØØ"Ø#Øñð r@   c                 ó.  — t         j                  | t         d   «      }|d   }|d   }|d   d   }t        j                  «       5 }|j	                  d||| g«       |j                  «       }ddd«       sy|d   d   �t        |d   d   «      nd}	|d   d	   }
|d   d
   }ddlm} d}d}t        |
d«      rdt        j                  «       5 }|j	                  d||| |
 |d	¬«      z
  g«       |j                  «       }|r|d   �t        |d   «      }d}ddd«       t        |
d«      r|
 |d	¬«      z
  }|r| |d	¬«      z
  nd}nd}d}d}d}|r]|r[t        j                  «       5 }|j	                  d||| ||g«       |j                  «       }|r|d   �t        |d   «      }d}ddd«       |s|dk7  rt        |	|z  d	z
  dz  «      }n|rd}nd}|s1|dk7  r,|	|z  d	z
  dz  }|dk\  rdnd}|› |d›�j                  dd«      }n|rd}nd}t        |
d«      r|
j                  nd}|rt        |d	z
     nd}t        |
d«      r|
j                  nd}d„ }||||| ||	«       ||«       ||«      |||||| dœS # 1 sw Y   �Œ	xY w# 1 sw Y   �ŒnxY w# 1 sw Y   ŒêxY w)zp
    Migrated from VerbrauchsChartDaten::getDashCardDaten().
    Returns summary data for a dashboard card.
    r5   r,   r.   r+   r   al  
            SELECT vd.VerBrWert, vd.VerBrSD, vd.VerBrED
            FROM tbl_v_i_sys_verbrauchs_daten vd
            LEFT JOIN tbl_v_i_sys_ver_rahmen vr ON vr.VISysVerbrauchsID = vd.VerBrID
            WHERE vr.REUID_id = %s AND vr.PersonenID_id = %s
              AND vr.VISysVerbrauchsArtID = %s
            ORDER BY vd.VerBrSD DESC
            LIMIT 1
        Ng        r
   rB   )ÚrelativedeltaTrD   aa  
                SELECT vd.VerBrWert FROM tbl_v_i_sys_verbrauchs_daten vd
                LEFT JOIN tbl_v_i_sys_ver_rahmen vr ON vr.VISysVerbrauchsID = vd.VerBrID
                WHERE vr.REUID_id = %s AND vr.PersonenID_id = %s
                  AND vr.VISysVerbrauchsArtID = %s
                  AND vd.VerBrSD = %s
                LIMIT 1
            )ÚmonthsF)ÚyearsaŽ  
                SELECT vd.VerBrWert FROM tbl_v_i_sys_verbrauchs_daten vd
                LEFT JOIN tbl_v_i_sys_ver_rahmen vr ON vr.VISysVerbrauchsID = vd.VerBrID
                WHERE vr.REUID_id = %s AND vr.PersonenID_id = %s
                  AND vr.VISysVerbrauchsArtID = %s
                  AND vd.VerBrSD = %s AND vd.VerBrED = %s
                ORDER BY vd.VerBrSD DESC LIMIT 1
            r   r3   u   + âˆžú+z.2fr:   r8   Úmonthc                 ój   — | d›j                  dd«      j                  dd«      j                  dd«      S )Nr7   r8   ÚXr:   r;   )Úvals    r>   Úfmtz get_dash_card_daten.<locals>.fmtÉ  s3   € Ø�d�×$Ñ$ S¨#Ó.×6Ñ6°s¸CÓ@×HÑHÈÈcÓRÐRr@   )r,   rW   ÚMonatÚ	MonatNameÚJahrÚVerbrauchswertÚVerbrauchswertVMÚVerbrauchswertVJÚVerbrauchswertVM_nvÚVerbrauchswertVJ_nvÚAenderungZuVMÚAenderungZuVJr.   ÚVerbrauchsArtID)ro   rp   r   ÚcursorÚexecuteÚfetchallr^   Údateutil.relativedeltar¥   ÚhasattrÚfetchoneÚroundr<   r©   ÚMONATE_LANGrD   )rz   rL   rM   r|   r}   r   Úfarber¹   ÚrecentÚverbrauchs_wertÚsdÚedr¥   Úverbrauchs_wert_vmÚverbrauchs_wert_vm_keine_datenÚvm_rowÚ
sd_vorjahrÚ
ed_vorjahrÚverbrauchs_wert_vjÚverbrauchs_wert_vj_keine_datenÚvj_rowÚaenderung_vmÚaenderung_vj_rawÚsignÚaenderung_vjÚmonatÚ
monat_namer…   r­   s                                r>   rJ   rJ   g  s<  € ô
 $×'Ñ'¨Ô7NÈsÑ7SÓT€EØ�'‰N€EØ˜Ñ'€LØ�,Ñ Ñ"€Eä	×	Ñ	Ó	ð 
# Ø�‰ð ð �Y Ð.ô	0ð —‘Ó"ˆ÷
#ñ Øà-3°A©Y°q©\Ð-E”e˜F 1™I a™LÔ)È3€OØ	�‰�1‰€BØ	�‰�1‰€Bå4ð ÐØ%)Ð"Üˆr�6ÔÜ×ÑÓ ð 	7 FØ�N‰Nð ð ˜ M°2¹ÈQÔ8OÑ3OÐPôRð —_‘_Ó&ˆFÙ˜& ™)Ð/Ü%*¨6°!©9Ó%5Ð"Ø16Ð.÷	7ô ˆr�6ÔØ™-¨aÔ0Ñ0ˆ
Ù46�R™-¨aÔ0Ò0¸D‰
àˆ
Øˆ
àÐØ%)Ð"Ù‘jÜ×ÑÓ ð 	7 FØ�N‰Nð ð ˜ M°:¸zÐJôLð —_‘_Ó&ˆFÙ˜& ™)Ð/Ü%*¨6°!©9Ó%5Ð"Ø16Ð.÷	7ñ *Ð.@ÀAÒ.EÜ˜Ð1CÑCÀqÑHÈCÑOÓP‰Ù	'Ø‰àˆá)Ð.@ÀAÒ.EØ,Ð/AÑAÀQÑFÈ#ÑMÐØ&¨!Ò+‰s°ˆØ˜Ð 0°Ð5Ð6×>Ñ>¸sÀCÓH‰Ù	'Ø‰àˆô    GÔ,ˆB�HŠH°!€EÙ+0”˜U Q™YÒ'°b€JÜ˜b &Ô)ˆ2�7Š7¨t€DòSð ØØØØÙ˜oÓ.ÙÐ 2Ó3ÙÐ 2Ó3Ø=Ø=Ø%Ø%Ø#Ø(ñð ÷w
#ñ 
#ú÷4	7ñ 	7ú÷2	7ð 	7ús%   Á&I1Ã
AI>Å#?JÉ1I;É>JÊJc                 ó¨   — dgdz  }| D ]F  }||   }||   }|sŒt        |d«      r|j                  nt        t        |«      dd «      }|||dz
  <   ŒH |S )zHConvert DB rows to a 12-element monthly array (None for missing months).NrZ   r©   é   é   r
   )r½   r©   Úintrv   )r†   Úvalue_col_indexÚdate_col_indexr‡   ÚrowÚvalueÚ
start_dateÚ	month_nums           r>   rt   rt   á  ss   € àˆf�r‰k€GØò +ˆØ�OÑ$ˆØ˜Ñ(ˆ
ÚÜ,3°JÀÔ,H˜
×(Ò(ÌcÔRUÐV`ÓRaÐbcÐdeÐRfÓNgˆIØ%*ˆG�I ‘MÒ"ð+ð €Nr@   c                 ób   — t         j                  j                  | ||¬«      j                  «       S )z0Gibt es Rahmen dieser Art fuer Einheit + Nutzer?)ÚVISysVerbrauchsArtIDr�   Ú
PersonenID)r   r”   r•   Úexists)rz   rL   rM   s      r>   rI   rI   í  s.   € ä×'Ñ'×.Ñ.Ø*°%ÀIð /ó ç�fƒhðr@   c                 ón  — 	 t         j                  j                  dd«      }| dk(  r+|j                  |j                  ¬«      j                  «       }n!|j                  | |¬«      j                  «       }|sy|j                  }|r|j                  nd}|j                  |j                  |j                  |j                  |j                  |r|j                  nd|r|j                  nd|r|j                  nd|r|j                   nd|r|j"                  nd|r|j$                  dœS ddœS # t&        $ r Y yw xY w)z?
    Returns the tenancy (ReuMietV + joined data) or None.
    r�   ÚREUID__REIDéÿÿÿÿ)ÚMieterID)r�   rå   N)ÚMietVIDr�   rå   ÚContractValidFromÚContractValidUntilrS   ÚREUDescÚStreetÚHouseNumberÚ
PostalCodeÚCity)r   r”   Úselect_relatedr•   rà   r—   r�   rS   ræ   ÚREUID_idrå   rç   rè   ÚREID_idré   rê   rë   rì   rí   Ú	Exception)rL   rM   ÚuserÚqsÚrmvÚreuÚres          r>   Úprocess_reuid_nutzer_idr÷   õ  s  € ð#Ü×Ñ×,Ñ,ØØó
ˆð
 �BŠ;Ø—)‘) T§_¡_�)Ó5×;Ñ;Ó=‰Cà—)‘) %°)�)Ó<×BÑBÓDˆCáØà�i‰iˆÙˆc�hŠh 4ˆð "%§¡Ø!$§¡Ø!$§¡Ø!$×!6Ñ!6Ø!$×!7Ñ!7á&)�s—{’{¨tÙ&)�s—{’{¨tá-/˜2Ÿ9š9°TÙ-/˜2Ÿ>š>°TÙ-/˜2Ÿ=š=°TÙ-/˜2Ÿ7™7ñ
ð 	
ð 6:ñ
ð 	
øô" ò Ùðús   ‚A3D( Á6B-D( Ä$D( Ä(	D4Ä3D4c                 ó|  — t        j                  «       5 }| dk(  r|j                  d|j                  g«       n|j                  d| |j                  g«       |j                  D �cg c]  }|d   ‘Œ	 }}|j                  «       }|rt        t        ||«      «      cddd«       S 	 ddd«       yc c}w # 1 sw Y   yxY w)zt
    Migrated from MietVController::processMietVID().
    Returns the tenancy (ReuMietV + joined data) or None.
    rä   az  
                SELECT rmv.*, reu.REID, reu.REUDesc, re.Street, re.HouseNumber,
                       re.PostalCode, re.City
                FROM reu_miet_v_s rmv
                LEFT JOIN real_estate_units reu ON reu.REUID = rmv.REUID
                LEFT JOIN real_estates re ON re.REID = reu.REID
                WHERE rmv.MieterID = %s
                LIMIT 1
            a�  
                SELECT rmv.*, reu.REID, reu.REUDesc, re.Street, re.HouseNumber,
                       re.PostalCode, re.City
                FROM reu_miet_v_s rmv
                LEFT JOIN real_estate_units reu ON reu.REUID = rmv.REUID
                LEFT JOIN real_estates re ON re.REID = reu.REID
                WHERE rmv.MietVID = %s AND rmv.MieterID = %s
                LIMIT 1
            r   N)r   r¹   rº   rà   Údescriptionr¾   ÚdictÚzip)Úmietvidrò   r¹   ÚcolÚcolumnsrÚ   s         r>   Úprocess_mietv_idrÿ      sÂ   € ô
 
×	Ñ	Ó	ð + Ø�bŠ=Ø�N‰Nð ð —/‘/Ð"õ$ð �N‰Nð ð ˜4Ÿ?™?Ð+ô-ð &,×%7Ñ%7Ö8˜c�3�q“6Ð8ˆÐ8Ø�o‰oÓˆÙÜœ˜G SÓ)Ó*÷3+ñ +ð0 ÷1+ð4 ùò	 9÷-+ð4 ús   •AB2Á%B-Á1(B2Â-B2Â2B;rL   rM   c                 óþ   — t        t        j                  j                  || ¬«      j	                  dd¬«      j                  «       «      }g }t        D ](  }||v sŒt        || |«      }|sŒ|j                  |«       Œ* |S ©N)rà   r�   rß   T©Úflat)	Úsetr   r”   r•   Úvalues_listÚdistinctrH   r˜   rK   ©rL   rM   Úvorhandene_typenrN   rO   rX   s         r>   Úget_all_chart_datar	  C  s}   € ÜÜ×$Ñ$ß	‰˜9¨EˆÓ	2ß	‰Ð+°$ˆÓ	7ß	‰‹ó	Ðð €FÜ'ò $ˆØÐ,Ò,Ü1°-ÀÈ	ÓRˆDÚØ—‘˜dÕ#ð	$ð
 €Mr@   c                 óþ   — t        t        j                  j                  || ¬«      j	                  dd¬«      j                  «       «      }g }t        D ](  }||v sŒt        || |«      }|sŒ|j                  |«       Œ* |S r  )	r  r   r”   r•   r  r  ÚDIAGRAMM_TYPES_SPEZr£   rK   r  s         r>   Úget_all_chart_data_spezr  T  s   € ÜÜ×$Ñ$ß	‰˜9¨EˆÓ	2ß	‰Ð+°$ˆÓ	7ß	‰‹ó	Ðð €Fô -ò $ˆØÐ,Ò,Ü2°=À%ÈÓSˆDÚØ—‘˜dÕ#ð	$ð
 €Mr@   c                 ó   — t        j                  «       5 }|j                  d| g«       |j                  D �cg c]  }|d   ‘Œ	 }}|j	                  «       }|rt        t        ||«      «      cddd«       S 	 ddd«       yc c}w # 1 sw Y   yxY w)z,Helper: get REID and REU data for a MietVID.aj  
            SELECT rmv.MietVID, rmv.REUID, reu.REID, reu.REUDesc,
                   re.Street, re.HouseNumber, re.PostalCode, re.City
            FROM reu_miet_v_s rmv
            LEFT JOIN real_estate_units reu ON reu.REUID = rmv.REUID
            LEFT JOIN real_estates re ON re.REID = reu.REID
            WHERE rmv.MietVID = %s
            LIMIT 1
        r   N)r   r¹   rº   rù   r¾   rú   rû   )r{   r¹   rý   rþ   rÚ   s        r>   rq   rq   f  s“   € ä	×	Ñ	Ó	ð + Ø�‰ð ð ˆZô	ð &,×%7Ñ%7Ö8˜c�3�q“6Ð8ˆÐ8Ø�o‰oÓˆÙÜœ˜G SÓ)Ó*÷+ñ +ð ÷+ð ùò	 9÷+ð ús   •"B·A?Á(BÁ?BÂBc                 óú   — t         j                  j                  | |||¬«      j                  dd¬«      }t	        t
        j                  j                  |¬«      j                  d«      j                  |d«      «      S )N)rß   r°   r�   rà   ÚVISysVerbrauchsIDTr  )ÚVerBrID__inÚVerBrSD)r   r”   r•   r  Úlistr   Úorder_by)rz   r…   rL   rM   ÚfieldÚ
rahmen_idss         r>   rs   rs   y  sy   € ô &×-Ñ-×4Ñ4Ø*ØØØð	 5ó ÷
 �kÐ%¨D€kÓ1ð ô Ü×!Ñ!ß	‰˜JˆÓ	'ß	‰�)Ó	ß	‰�U˜IÓ	&ó	ð r@   c                 óø   — t         j                  j                  | ||¬«      j                  dd¬«      }t	        t
        j                  j                  |¬«      j                  d«      j                  |d«      «      S )N)rß   r°   rS   ÚVISysRefVerbrIDTr  )ÚRefVerBrID__inÚ
RefVerBrSD)r   r”   r•   r  r  r   r  )rz   r…   r�   r  r  s        r>   rw   rw   Œ  st   € Ü(×0Ñ0×7Ñ7Ø*ØØð 8ó ÷ �kÐ#¨$€kÓ/ð	 ô Ü×$Ñ$ß	‰˜zˆÓ	*ß	‰�,Ó	ß	‰�U˜LÓ	)ó	ð r@   N)r   r
   )rT   )rY   ))Údatetimer   Ú	django.dbr   Úapp_verbrauch.modelsr   r   Údjango_modelsÚapp_nutzer.modelsr   Úapp_real_estate.modelsr   r	   r   r   r   r   rH   r  ÚMONATErÀ   ry   ro   r?   rŸ   rF   rQ   r�   r˜   r£   rJ   rt   rI   r÷   rÿ   r×   r	  r  rq   rs   rw   © r@   r>   ú<module>r"     s´  ðå Ý  õ 6å -Ý &ß =Ý 1÷õ ò /€Ú.Ð â	^€ò€ò
 4€ò CØGØIØØ%ðGðGñ	ò( CØ0Ø?ØØ$ØwðQñ
ò CØ5ØDØØ$Ø|ðWñ
ò CØ,Ø;ØØ$ð [ð^ñ
ò  CØ5Ø;ØØ$ðHð
Qñ
ò& CØ1Ø5ØØ$ð HØñ
ò CØØØØ!Ø9Øñ
ñsbÐ òJXð (2Ð $ò/òò<ò~2òhFòVtót	òò'òVðF˜sð °ó ð" Cð °Só ò$ó&ô&r@   