Ë
    5åjˆN  ã                   óF  — d 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 ddl	m
Z
 ddlmZmZmZmZmZ ddlmZmZ dd	lmZmZmZmZ d
dlmZmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z( d„ Z)e
gZ*d„ Z+ G d„ de«      Z, G d„ de«      Z- G d„ de«      Z. G d„ de«      Z/ G d„ de«      Z0 G d„ de«      Z1 G d„ de«      Z2 G d„ de«      Z3 G d „ d!e«      Z4 G d"„ d#e«      Z5 G d$„ d%e«      Z6 G d&„ d'e«      Z7 G d(„ d)e«      Z8d*Z9d+„ Z: G d,„ d-e«      Z; G d.„ d/e«      Z<y0)1u&  
API views â€“ migrated from app/Http/Controllers/ (API routes)

All routes are protected by:
  - IsAuthenticated  (auth:sanctum â†’ AdminTokenAuthentication)
  - IsApiUser        (limit2apiusers middleware â†’ DRF permission class)

Mapping:
  GET/PUT/DELETE /api/res     â†’ RealEstateView (combined)
  GET/PUT        /api/reus   â†’ REUView (combined)
  GET/PUT        /api/users  â†’ UserView (combined)
  GET    /api/mietvs/{reid}   â†’ MietVByREIDView
  PUT    /api/mietvs          â†’ MietVStoreOrUpdateView
  PUT    /api/refverbrrahmen  â†’ RefVerRahmenStoreOrUpdateView
  PUT    /api/refverbrdaten   â†’ RefVerDatenStoreOrUpdateView
  PUT    /api/verbrrahmen     â†’ VerRahmenStoreOrUpdateView
  POST   /api/verbrdaten      â†’ VerDatenStoreView
  PUT    /api/verbrdaten      â†’ VerDatenStoreOrUpdateView
  GET    /api/me              â†’ MeView
  POST   /api/me/tokencreate  â†’ TokenCreateView
  GET    /api/anmeldungen     â†’ AnmeldungenView  (?seit_id=N, inkrementell)
  GET    /api/besuche         â†’ BesucheView      (?seit_id=N, inkrementell)
é    )ÚAPIView)ÚResponse©Ústatus)ÚAdminTokenAuthentication)ÚIsAuthenticated)ÚUserÚReuMietVÚReuEigentuemerÚNutzerAnmeldungÚNutzerBesuch)Ú
RealEstateÚRealEstateUnit)ÚVISysVerbrauchRahmenÚVISysVerbrauchsDSÚVISysRefVerbrauchRahmenÚVISysRefVerbrauchsDSé   )	ÚUserApiSerializerÚRealEstateSerializerÚRealEstateUnitSerializerÚReuMietVSerializerÚReuEigentuemerSerializerÚ!VISysRefVerbrauchRahmenSerializerÚVISysRefVerbrauchsDSSerializerÚVISysVerbrauchRahmenSerializerÚVISysVerbrauchsDSSerializer)Ú
connection)ÚART_EIGENTUEMERÚ
ART_MIETERÚueberlappende_verhaeltnissec                 óæ  — t        | ||||f¬«      }|sy|d   }|j                  t        k(  rdnd}|j                  r|j                  j	                  «       nd}t        d| › d|› d	|j                  › d
|j                  › d|j                  › d	|› d�|D �	cg c]<  }	|	j                  |	j                  |	j                  |	j                  |	j                  dœ‘Œ> c}	dœt        j                  ¬«      S c c}	w )a‚  Ueberlappende Nutzungsverhaeltnisse ablehnen (xin, Arbeitspaket A).

    Geprueft wird gegen Nutzungsperioden, nicht gegen Mietvertraege -- sonst
    bleibt im WEG-Fall der Eigentuemer-Nutzer unsichtbar und Ueberlappungen
    Eigentuemer <-> Mieter kaemen durch.

    Abgelehnt wird das VERHAELTNIS, nicht der Nutzer: eine Person darf
    gleichzeitig in mehreren Einheiten stehen.
    )ÚausserNr   ÚEigentumsverhaeltnisÚMietverhaeltniszohne EnddatumzREU z hat bereits ú z	 (Person z, ab z).)ÚartÚquell_idÚpersonen_idÚgueltig_vonÚgueltig_bis)ÚdetailÚ	konflikter   )r!   r'   r   r+   Ú	isoformatr   r(   r)   r*   r   ÚHTTP_409_CONFLICT)
ÚreuidÚvonÚbisr'   r(   ÚkollisionenÚkÚrolleÚendeÚxs
             ú*/var/www/html/vportal/app_api/views_api.pyÚ_pruefe_ueberlappungr9   7   sõ   € ô .¨e°S¸#ÀsÈHÀoÔV€KÙØà�A‰€AØ&'§e¡e¬Ò&>Ñ"ÐDU€EØ()¯ªˆ1�=‰=×"Ñ"Ô$¸?€DÜð �u�g˜]¨5¨'°°1·:±:°,ð ?ØŸ=™=˜/¨¨q¯}©}¨o¸Q¸t¸fÀBðHð %ö	ð ð Ÿ5™5Ø !§
¡
Ø#$§=¡=Ø#$§=¡=Ø#$§=¡=óò	ñ	
ô  ×'Ñ'ô#ð ùò	s   ÂAC.
c                 óš  — t        | t        «      r@| j                  «       D ],  \  }}t        |t        t        f«      r|r|d   n|}|› d|› �c S  yt        | t        t        f«      ret        | «      D ]W  \  }}|sŒ	t        |t        «      rd|› dt        |«      › �c S t        |t        t        f«      rd|› d|d   › �c S d|› d|› �c S  y)uƒ  Erste Fehlermeldung aus Serializer-Fehlern ziehen â€“ auch bei many=True.

    ListSerializer.errors ist eine Liste mit einem Eintrag je Element und einem
    leeren Dict fuer gueltige Elemente; bei ungueltigem Payload-Typ dagegen ein
    Dict. Ein hartes errors[0] laeuft deshalb in IndexError/KeyError, sobald der
    Fehler nicht im ersten Datensatz steckt -> HTTP 500 statt 400.
    r   z: zValidation errorz
Datensatz )Ú
isinstanceÚdictÚitemsÚlistÚtupleÚ	enumerateÚ_first_error_message)ÚerrorsÚfieldÚmessagesr,   ÚindexÚitems         r8   rA   rA   a   så   € ô �&œ$ÔØ%Ÿ|™|›~ò 	(‰OˆE�8Ü$.¨x¼$Ä¸Ô$GÉH�X˜a’[ÐZbˆFØ�W˜B˜v˜hÐ'Ò'ð	(ð "Ü�&œ4¤˜-Ô(Ü$ VÓ,ò 	0‰KˆE�4ÙØÜ˜$¤Ô%Ø# E 7¨"Ô-AÀ$Ó-GÐ,HÐIÒIÜ˜$¤¤u Ô.Ø# E 7¨"¨T°!©W¨IÐ6Ò6Ø ˜w b¨¨Ð/Ò/ð	0ð ó    c                   ó,   — e Zd ZdZegZeZd„ Zd„ Z	d„ Z
y)ÚRealEstateViewuÖ   
    GET    /api/res â€“ list all real estates.
    PUT    /api/res â€“ create or update real estate.
    DELETE /api/res â€“ delete ALL data cascade (use with caution).
    Migrated from RealEstateController.
    c                 ó~   — t         j                  j                  «       }t        t	        |d¬«      j
                  «      S ©NT©Úmany)r   ÚobjectsÚallr   r   Údata©ÚselfÚrequestÚqss      r8   ÚgetzRealEstateView.getˆ   s/   € Ü×Ñ×#Ñ#Ó%ˆÜÔ,¨R°dÔ;×@Ñ@ÓAÐArG   c                 ón  — t        |j                  ¬«      }|j                  «       s?t        t	        |j
                  j                  «       «      d   t        j                  ¬«      S |j                  }t        j                  j                  |d   |¬«      \  }}t        t        |«      j                  «      S )N©rP   r   r   ÚREID)rX   Údefaults)r   rP   Úis_validr   r>   rB   Úvaluesr   ÚHTTP_400_BAD_REQUESTÚvalidated_datar   rN   Úupdate_or_create©rR   rS   Ú
serializerrP   ÚobjÚ_s         r8   ÚputzRealEstateView.putŒ   sŽ   € Ü)¨w¯|©|Ô<ˆ
Ø×"Ñ"Ô$ÜœD ×!2Ñ!2×!9Ñ!9Ó!;Ó<¸QÑ?Ì×HcÑHcÔdÐdØ×(Ñ(ˆÜ×#Ñ#×4Ñ4¸$¸v¹,ÐQUÐ4ÓV‰ˆˆQÜÔ,¨SÓ1×6Ñ6Ó7Ð7rG   c                 óÜ  — t         j                  j                  «       j                  «        t        j                  j                  «       j                  «        t
        j                  j                  «       j                  «        t        j                  j                  «       j                  «        t        j                  j                  «       j                  «        t        j                  j                  «       j                  «        t        j                  j                  «       j                  «        t        j                  j                  «       j                  «       }t        d|i«      S )NÚdeleted)r   rN   rO   Údeleter   r   r   r
   r   r	   r   r   )rR   rS   Úcounts      r8   rf   zRealEstateView.delete”   sê   € Ü×!Ñ!×%Ñ%Ó'×.Ñ.Ô0Ü×$Ñ$×(Ñ(Ó*×1Ñ1Ô3Ü×$Ñ$×(Ñ(Ó*×1Ñ1Ô3Ü×'Ñ'×+Ñ+Ó-×4Ñ4Ô6Ü×Ñ×ÑÓ×%Ñ%Ô'Ü×Ñ×"Ñ"Ó$×+Ñ+Ô-Ü�‰×ÑÓ×!Ñ!Ô#Ü×"Ñ"×&Ñ&Ó(×/Ñ/Ó1ˆÜ˜ EÐ*Ó+Ð+rG   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úauthentication_classesÚAPI_PERMISSIONSÚpermission_classesrU   rc   rf   © rG   r8   rI   rI   ~   s(   „ ñð 7Ð7ÐØ(ÐòBò8ó	,rG   rI   c                   ó&   — e Zd ZdZegZeZd„ Zd„ Z	y)ÚREUViewuŽ   
    GET /api/reus â€“ list all units.
    PUT /api/reus â€“ bulk create or update units (accepts list).
    Migrated from REUController.
    c                 ó~   — t         j                  j                  «       }t        t	        |d¬«      j
                  «      S rK   )r   rN   rO   r   r   rP   rQ   s      r8   rU   zREUView.get­   s/   € Ü×#Ñ#×'Ñ'Ó)ˆÜÔ0°¸$Ô?×DÑDÓEÐErG   c                 ó¬  — t        |j                  t        «      r|j                  n|j                  g}t        |d¬«      }|j	                  «       s.t        t        |j                  «      t        j                  ¬«      S d}|j                  D ]+  }t        j                  j                  |d   |¬«       |dz  }Œ- t        |t        j                  ¬«      S )NT©rP   rM   r   r   ÚREUID)ru   rY   r   )r;   rP   r>   r   rZ   r   rA   rB   r   r\   r]   r   rN   r^   ÚHTTP_201_CREATED©rR   rS   rP   r`   rg   rF   s         r8   rc   zREUView.put±   s­   € Ü)¨'¯,©,¼Ô=ˆw�|Š|ÀGÇLÁLÀ>ˆÜ-°4¸dÔCˆ
Ø×"Ñ"Ô$ÜÔ0°×1BÑ1BÓCÌF×LgÑLgÔhÐhØˆØ×-Ñ-ò 	ˆDÜ×"Ñ"×3Ñ3¸$¸w¹-ÐRVÐ3ÔWØ�Q‰J‰Eð	ô ˜¤f×&=Ñ&=Ô>Ð>rG   N©
rh   ri   rj   rk   r   rl   rm   rn   rU   rc   ro   rG   r8   rq   rq   ¤   s#   „ ñð
 7Ð7ÐØ(ÐòFó	?rG   rq   c                   ó&   — e Zd ZdZegZeZd„ Zd„ Z	y)ÚUserViewuˆ   
    GET /api/users â€“ list all users.
    PUT /api/users â€“ create or update user.
    Migrated from UserController API methods.
    c                 ó~   — t         j                  j                  «       }t        t	        |d¬«      j
                  «      S rK   )r	   rN   rO   r   r   rP   rQ   s      r8   rU   zUserView.getÊ   s-   € Ü�\‰\×ÑÓˆÜÔ)¨"°4Ô8×=Ñ=Ó>Ð>rG   c                 óL  — dd l }|j                  j                  «       }|j                  d«      s|j	                  d«      |d<   	 t
        j                  j                  |j                  d«      ¬«      }t        ||d¬«      }|j                  «       sAt        |j                  j                  «       «      d   }t        |t        j                  ¬	«      S |j!                  «       }t        t        |«      j                  «      S # t
        j                  $ r t        |¬«      }Y Œ w xY w)
Nr   Úpasswordé   Ú
PersonenID)r   T)rP   ÚpartialrW   r   )ÚsecretsrP   ÚcopyrU   Ú	token_hexr	   rN   r   ÚDoesNotExistrZ   r>   rB   r[   r   r   r\   Úsave)rR   rS   r�   rP   Úuserr`   Úfirst_errorra   s           r8   rc   zUserView.putÎ   sî   € ÛØ�|‰|× Ñ Ó"ˆØ�x‰x˜
Ô#Ø&×0Ñ0°Ó4ˆD�Ñð	6Ü—<‘<×#Ñ#¨t¯x©x¸Ó/EÐ#ÓFˆDÜ*¨4°dÀDÔIˆJð ×"Ñ"Ô$Ü˜z×0Ñ0×7Ñ7Ó9Ó:¸1Ñ=ˆKÜ˜K´×0KÑ0KÔLÐLà�o‰oÓˆÜÔ)¨#Ó.×3Ñ3Ó4Ð4øô × Ñ ò 	6Ü*°Ô5ŠJð	6ús   Á=D ÄD#Ä"D#Nrx   ro   rG   r8   rz   rz   Á   s"   „ ñð
 7Ð7ÐØ(Ðò?ó5rG   rz   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚMietVByREIDViewu<   GET /api/mietvs/{reid} â€“ get all tenancies for a property.c           	      ó@  — t        j                  «       5 }|j                  d|g«       |j                  D �cg c]  }|d   ‘Œ	 }}|j	                  «       }d d d «       D �cg c]  }t        t        |«      «      ‘Œ }}t        |«      S c c}w # 1 sw Y   Œ;xY wc c}w )NaG  
                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 reu.REID = %s
            r   )r   ÚcursorÚexecuteÚdescriptionÚfetchallr<   Úzipr   )	rR   rS   Úreidr‹   ÚcolÚcolumnsÚrowsÚrowÚresults	            r8   rU   zMietVByREIDView.getë   s�   € Ü×ÑÓ ð 		% FØ�N‰Nð ð �ôð *0×);Ñ);Ö< #�s˜1“vÐ<ˆGÐ<Ø—?‘?Ó$ˆD÷		%ð 6:Ö:¨c”$”s˜7 CÓ(Õ)Ð:ˆÐ:Ü˜ÓÐùò =÷		%ð 		%üò ;s"   •"B·B
ÁBÁ!BÂ
BÂBN©	rh   ri   rj   rk   r   rl   rm   rn   rU   ro   rG   r8   r‰   r‰   æ   s   „ ÙFØ6Ð7ÐØ(Ðó rG   r‰   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚMietVStoreOrUpdateViewu-   PUT /api/mietvs â€“ create or update tenancy.c                 óø  — t        |j                  ¬«      }|j                  «       s?t        t	        |j
                  j                  «       «      d   t        j                  ¬«      S |j                  }t        |d   j                  |j                  d«      |j                  d«      t        |d   «      }|�|S t        j                  j!                  |d   |¬«      \  }}t        t        |«      j                  «      S )	NrW   r   r   ru   ÚContractValidFromÚContractValidUntilÚMietVID)rœ   rY   )r   rP   rZ   r   r>   rB   r[   r   r\   r]   r9   ÚpkrU   r    r
   rN   r^   ©rR   rS   r`   rP   Úkonfliktra   rb   s          r8   rc   zMietVStoreOrUpdateView.putÿ   sÖ   € Ü'¨W¯\©\Ô:ˆ
Ø×"Ñ"Ô$ÜœD ×!2Ñ!2×!9Ñ!9Ó!;Ó<¸QÑ?Ì×HcÑHcÔdÐdØ×(Ñ(ˆä'Ø�‰M×ÑØ�H‰HÐ(Ó)Ø�H‰HÐ)Ó*ÜØ�‰Oó
ˆð ÐØˆOä×!Ñ!×2Ñ2¸4À	¹?ÐUYÐ2ÓZ‰ˆˆQÜÔ*¨3Ó/×4Ñ4Ó5Ð5rG   N©	rh   ri   rj   rk   r   rl   rm   rn   rc   ro   rG   r8   r˜   r˜   ú   s   „ Ù7Ø6Ð7ÐØ(Ðó6rG   r˜   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚEigentuemerByREIDViewzJGET /api/eigentuemer/{reid} - alle Eigentumsverhaeltnisse einer Immobilie.c                 ó¢   — t         j                  j                  |¬«      j                  dd«      }t	        t        |d¬«      j                  «      S )N)ÚREUID__REIDru   Ú	ValidFromTrL   )r   rN   ÚfilterÚorder_byr   r   rP   )rR   rS   r�   rT   s       r8   rU   zEigentuemerByREIDView.get  sC   € ä×"Ñ"ß‰V ˆVÓ%ß‰X�g˜{Ó+ð 	ô
 Ô0°¸$Ô?×DÑDÓEÐErG   Nr–   ro   rG   r8   r¢   r¢     s   „ ÙTØ6Ð7ÐØ(ÐóFrG   r¢   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚEigentuemerStoreOrUpdateViewzGPUT /api/eigentuemer - Eigentumsverhaeltnis anlegen oder aktualisieren.c                 óø  — t        |j                  ¬«      }|j                  «       s?t        t	        |j
                  j                  «       «      d   t        j                  ¬«      S |j                  }t        |d   j                  |j                  d«      |j                  d«      t        |d   «      }|�|S t        j                  j!                  |d   |¬«      \  }}t        t        |«      j                  «      S )	NrW   r   r   ru   r¥   Ú
ValidUntilÚ
EigentumID)r¬   rY   )r   rP   rZ   r   r>   rB   r[   r   r\   r]   r9   r�   rU   r   r   rN   r^   rž   s          r8   rc   z EigentuemerStoreOrUpdateView.put+  sÜ   € Ü-°7·<±<Ô@ˆ
Ø×"Ñ"Ô$ÜœD ×!2Ñ!2×!9Ñ!9Ó!;Ó<¸QÑ?Ì×HcÑHcÔdÐdØ×(Ñ(ˆä'Ø�‰M×ÑØ�H‰H�[Ó!Ø�H‰H�\Ó"ÜØ�Ñó
ˆð ÐØˆOä×'Ñ'×8Ñ8Ø˜LÑ)°Dð 9ó 
‰ˆˆQô Ô0°Ó5×:Ñ:Ó;Ð;rG   Nr    ro   rG   r8   r©   r©   &  s   „ ÙQØ6Ð7ÐØ(Ðó<rG   r©   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚRefVerRahmenStoreOrUpdateViewuI   PUT /api/refverbrrahmen â€“ create or update reference consumption frame.c                 ón  — t        |j                  ¬«      }|j                  «       s?t        t	        |j
                  j                  «       «      d   t        j                  ¬«      S |j                  }t        j                  j                  |d   |¬«      \  }}t        t        |«      j                  «      S )NrW   r   r   ÚVISysRefVerbrID)r°   rY   )r   rP   rZ   r   r>   rB   r[   r   r\   r]   r   rN   r^   r_   s         r8   rc   z!RefVerRahmenStoreOrUpdateView.putJ  s—   € Ü6¸G¿L¹LÔIˆ
Ø×"Ñ"Ô$ÜœD ×!2Ñ!2×!9Ñ!9Ó!;Ó<¸QÑ?Ì×HcÑHcÔdÐdØ×(Ñ(ˆÜ(×0Ñ0×AÑAØ Ð!2Ñ3¸dð Bó 
‰ˆˆQô Ô9¸#Ó>×CÑCÓDÐDrG   Nr    ro   rG   r8   r®   r®   E  s   „ ÙSØ6Ð7ÐØ(ÐóErG   r®   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚRefVerDatenStoreOrUpdateViewuG   PUT /api/refverbrdaten â€“ bulk create or update reference data points.c                 ó²  — t        |j                  t        «      r|j                  n|j                  g}t        |d¬«      }|j	                  «       s.t        t        |j                  «      t        j                  ¬«      S d}|j                  D ]+  }t        j                  j                  |d   |¬«       |dz  }Œ- t        |› d�t        j                  ¬«      S )	NTrt   r   r   ÚRefVerBrDatID)r´   rY   r   uO    DatensÃ¤tze wurden neu eingetragen / aktualisiert (oder waren schon vorhanden))r;   rP   r>   r   rZ   r   rA   rB   r   r\   r]   r   rN   r^   rv   rw   s         r8   rc   z RefVerDatenStoreOrUpdateView.put^  sÂ   € Ü)¨'¯,©,¼Ô=ˆw�|Š|ÀGÇLÁLÀ>ˆÜ3¸ÀDÔIˆ
Ø×"Ñ"Ô$ÜÔ0°×1BÑ1BÓCÌF×LgÑLgÔhÐhØˆØ×-Ñ-ò 	ˆDÜ ×(Ñ(×9Ñ9Ø" ?Ñ3¸dð :ô ð �Q‰J‰Eð		ô
 ØˆgÐdÐeÜ×*Ñ*ô
ð 	
rG   Nr    ro   rG   r8   r²   r²   Y  s   „ ÙQØ6Ð7ÐØ(Ðó
rG   r²   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚVerRahmenStoreOrUpdateViewuB   PUT /api/verbrrahmen â€“ bulk create or update consumption frames.c                 ó¬  — t        |j                  t        «      r|j                  n|j                  g}t        |d¬«      }|j	                  «       s.t        t        |j                  «      t        j                  ¬«      S d}|j                  D ]+  }t        j                  j                  |d   |¬«       |dz  }Œ- t        |t        j                  ¬«      S )NTrt   r   r   ÚVISysVerbrauchsID)r¸   rY   r   )r;   rP   r>   r   rZ   r   rA   rB   r   r\   r]   r   rN   r^   rv   rw   s         r8   rc   zVerRahmenStoreOrUpdateView.putx  sµ   € Ü)¨'¯,©,¼Ô=ˆw�|Š|ÀGÇLÁLÀ>ˆÜ3¸ÀDÔIˆ
Ø×"Ñ"Ô$ÜÔ0°×1BÑ1BÓCÌF×LgÑLgÔhÐhØˆØ×-Ñ-ò 	ˆDÜ ×(Ñ(×9Ñ9Ø"&Ð':Ñ";Àdð :ô ð �Q‰J‰Eð		ô
 ˜¤f×&=Ñ&=Ô>Ð>rG   Nr    ro   rG   r8   r¶   r¶   s  s   „ ÙLØ6Ð7ÐØ(Ðó?rG   r¶   c                   ó&   — e Zd ZdZegZeZd„ Zd„ Z	y)ÚVerDatenViewu¹   
    POST /api/verbrdaten â€“ bulk create consumption data points.
    PUT  /api/verbrdaten â€“ bulk create or update consumption data points.
    Migrated from VerDatenController.
    c                 ó�  — t        |j                  t        «      r|j                  n|j                  g}t        |d¬«      }|j	                  «       s%t        |j                  t        j                  ¬«      S d}|j                  D ]&  }t        j                  j                  di |¤Ž |dz  }Œ( t        |t        j                  ¬«      S )NTrt   r   r   r   ro   )r;   rP   r>   r   rZ   r   rB   r   r\   r]   r   rN   Úcreaterv   rw   s         r8   ÚpostzVerDatenView.post“  s    € Ü)¨'¯,©,¼Ô=ˆw�|Š|ÀGÇLÁLÀ>ˆÜ0°dÀÔFˆ
Ø×"Ñ"Ô$Ü˜J×-Ñ-´f×6QÑ6QÔRÐRØˆØ×-Ñ-ò 	ˆDÜ×%Ñ%×,Ñ,Ñ4¨tÒ4Ø�Q‰J‰Eð	ô ˜¤f×&=Ñ&=Ô>Ð>rG   c                 óŒ  — t        |j                  t        «      r|j                  n|j                  g}t        |d¬«      }|j	                  «       s%t        |j                  t        j                  ¬«      S |j                  D ]&  }t        j                  j                  |d   |¬«       Œ( t        dt        j                  ¬«      S )NTrt   r   Ú
VerBrDatID)r¿   rY   z+Daten wurden neu eingetragen / aktualisiert)r;   rP   r>   r   rZ   r   rB   r   r\   r]   r   rN   r^   rv   )rR   rS   rP   r`   rF   s        r8   rc   zVerDatenView.putž  sŸ   € Ü)¨'¯,©,¼Ô=ˆw�|Š|ÀGÇLÁLÀ>ˆÜ0°dÀÔFˆ
Ø×"Ñ"Ô$Ü˜J×-Ñ-´f×6QÑ6QÔRÐRØ×-Ñ-ò 	ˆDÜ×%Ñ%×6Ñ6Ø Ñ-¸ð 7õ ð	ô ÐEÌf×NeÑNeÔfÐfrG   N)
rh   ri   rj   rk   r   rl   rm   rn   r½   rc   ro   rG   r8   rº   rº   Š  s#   „ ñð
 7Ð7ÐØ(Ðò	?ó	grG   rº   c                   ó   — e Zd ZdZegZeZy)ÚMeViewu-   GET /api/me â€“ return current API user info.N)rh   ri   rj   rk   r   rl   rm   rn   ro   rG   r8   rÁ   rÁ   ®  s   „ Ù7Ø6Ð7ÐØ(ÑrG   rÁ   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚTokenCreateViewuF   POST /api/me/tokencreate â€“ create a new auth token for current user.c                 óð   — ddl m} |j                  j                  |j                  ¬«      j                  «        |j                  j                  |j                  ¬«      }t        d|j                  i«      S )Nr   )ÚToken)r†   Útoken)	Úrest_framework.authtoken.modelsrÅ   rN   r¦   r†   rf   r¼   r   Úkey)rR   rS   rÅ   rÆ   s       r8   r½   zTokenCreateView.post¼  sV   € Ý9à�‰×Ñ '§,¡,ÐÓ/×6Ñ6Ô8Ø—‘×$Ñ$¨'¯,©,Ð$Ó7ˆÜ˜ %§)¡)Ð,Ó-Ð-rG   N)	rh   ri   rj   rk   r   rl   rm   rn   r½   ro   rG   r8   rÃ   rÃ   ·  s   „ ÙPØ6Ð7ÐØ(Ðó.rG   rÃ   iˆ  c                 óŒ   — 	 t        t        | j                  j                  dd«      «      d«      S # t        t
        f$ r Y yw xY w)NÚseit_idr   )ÚmaxÚintÚquery_paramsrU   Ú	TypeErrorÚ
ValueError)rS   s    r8   Ú_seit_idrÐ   Ì  sC   € ðÜ”3�w×+Ñ+×/Ñ/°	¸1Ó=Ó>ÀÓBÐBøÜ”zÐ"ò Ùðús   ‚.1 ±AÁAc                   ó    — e Zd ZdZegZeZd„ Zy)ÚAnmeldungenViewuF   GET /api/anmeldungen?seit_id=N â€“ Anmeldungen mit id > N (max. 5000).c           
      ó˜  — t         j                  j                  t        |«      ¬«      j	                  d«      j                  d«      d t         }g }|D ]k  }t        |dd «      }|j                  |j                  |j                  |j                  |j                  |r|j                  nd |r|j                  nd dœ«       Œm t        |«      S )N©Úid__gtÚip_infoÚid)r×   r   Ú	zeitpunktÚerfolgreichÚipÚ
user_agent)r   rN   r¦   rÐ   Úselect_relatedr§   ÚLOG_SEITENGROESSEÚgetattrÚappendr×   r   rØ   rÙ   rÚ   rÛ   r   )rR   rS   rT   ÚdatenÚarÖ   s         r8   rU   zAnmeldungenView.getØ  s´   € ä×#Ñ#ß‰Vœ8 GÓ,ˆVÓ-ß‰^˜IÓ&ß‰X�d‹^Ð.Ô.ð0ð 	ð ˆØò 		ˆAÜ˜a ¨DÓ1ˆGØ�L‰LØ—d‘dØŸl™lØŸ[™[Ø Ÿ}™}Ù$+�g—j’j°Ù4;˜g×0Ò0Àñõ ð		ô ˜‹ÐrG   Nr–   ro   rG   r8   rÒ   rÒ   Ó  s   „ ÙPØ6Ð7ÐØ(ÐórG   rÒ   c                   ó    — e Zd ZdZegZeZd„ Zy)ÚBesucheViewuK   GET /api/besuche?seit_id=N â€“ Besuche (Nutzer/Tag) mit id > N (max. 5000).c                 óÌ   — t         j                  j                  t        |«      ¬«      j	                  d«      j                  dddd«      d t         }t        t        |«      «      S )NrÔ   r×   r   ÚtagÚerster_zugriff)	r   rN   r¦   rÐ   r§   r[   rÝ   r   r>   rQ   s      r8   rU   zBesucheView.getò  sX   € ä× Ñ ß‰Vœ8 GÓ,ˆVÓ-ß‰X�d‹^ß‰V�D˜,¨Ð/?Ó@ÐASÔBSðUð 	ô œ˜R›Ó!Ð!rG   Nr–   ro   rG   r8   rã   rã   í  s   „ ÙUØ6Ð7ÐØ(Ðó"rG   rã   N)=rk   Úrest_framework.viewsr   Úrest_framework.responser   Úrest_frameworkr   Úapp_admin.authenticationr   Úrest_framework.permissionsr   Úapp_nutzer.modelsr	   r
   r   r   r   Úapp_real_estate.modelsr   r   Úapp_verbrauch.modelsr   r   r   r   Úserializersr   r   r   r   r   r   r   r   r   Ú	django.dbr   Ú#core.services.nutzungsverhaeltnisser   r    r!   r9   rm   rA   rI   rq   rz   r‰   r˜   r¢   r©   r®   r²   r¶   rº   rÁ   rÃ   rÝ   rÐ   rÒ   rã   ro   rG   r8   ú<module>rò      s.  ðñõ0 )Ý ,Ý !Ý =Ý =Ý 6ç [Õ [ß =÷ó ÷÷ õ õ !÷ñ ò
#ðN #Ð$€òô:,�Wô ,ôL?ˆgô ?ô:5ˆwô 5ôJ �gô  ô(6˜Wô 6ô<F˜Gô Fô< 7ô <ô>E Gô Eô(
 7ô 
ô4? ô ?ô.g�7ô gôH)ˆWô )ô
.�gô 
.ð$ Ð òô�gô ô4"�'õ "rG   