Ë
    ;IÛiÈ  ã                   óì   — d Z ddlmZ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 dd	lmZ dd
lmZ ddlmZmZ ddlmZ ddddœZg d¢Zg d¢Zdefd„Z e	dg«       e
eeg«      d„ «       «       Zy)u„   
GET /api/admin-dashboard/?period=30d
RÃ©servÃ© aux superusers. Retourne KPIs, croissance, distribution, santÃ© tenants, audit log.
é    )Ú	timedeltaÚdate)ÚCount)Útimezone)Úapi_viewÚpermission_classes)ÚIsAuthenticated)ÚResponseé   )ÚTenant)ÚIsSuperUser)Ú
MembershipÚAuditLog)ÚCasei`	  i°  iX  )Ú
enterpriseÚbusinessÚstarter)ÚJanu   FÃ©vÚMarÚAvrÚMaiÚJunÚJulu   AoÃ»ÚSepÚOctÚNovu   DÃ©c)ÚLunr   ÚMerÚJeuÚVenÚSamÚDimÚperiodc                 óæ  — t        j                  «       j                  «       }| dk(  rOt        ddd«      D �cg c]  }|t	        |¬«      z
  ‘Œ }}|D �cg c]  }t
        |j                  «          ‘Œ }}||fS | dk(  rIt        ddd«      D �cg c]  }|t	        |¬«      z
  ‘Œ }}t        d«      D �cg c]
  }d	|d
z   › �‘Œ }}||fS | dk(  rdnd}g }|}t        |«      D ]S  }|j                  d|j                  d
¬«      «       |j                  d
¬«      t	        d
¬«      z
  j                  d
¬«      }ŒU |D �	cg c]  }	t        |	j                  d
z
     ‘Œ }}	||fS c c}w c c}w c c}w c c}w c c}	w )u4   Retourne (dates, labels) pour la pÃ©riode demandÃ©e.Ú7dé   éÿÿÿÿ)ÚdaysÚ30dé   )Úweeksé   ÚSr   Ú90dé   r   ©Úday)r   Únowr   Úranger   Ú
DAY_LABELSÚweekdayÚinsertÚreplaceÚMONTH_LABELSÚmonth)
r#   ÚtodayÚiÚdatesÚdÚlabelsÚnÚmonthsÚ_Úms
             ú&/var/www/html/acx/tenancy/dashboard.pyÚ_date_bucketsrD      su  € ä�L‰L‹N×ÑÓ!€Eà�‚~Ü5:¸1¸bÀ"Ó5EÖF°�%œ)¨Ô+Ó+ÐFˆÐFØ38Ö9¨a”*˜QŸY™Y›[Ó)Ð9ˆÐ9Ø�fˆ}Ðà�‚Ü6;¸A¸rÀ2Ó6FÖG°�%œ)¨!Ô,Ó,ÐGˆÐGÜ%*¨1£XÖ. �A�a˜‘c�U’)Ð.ˆÐ.Ø�fˆ}Ðð �uŠ_‰ "€AØ€FØ€AÜ�1‹Xò BˆØ�‰�a˜Ÿ™ q˜Ó)Ô*Ø�Y‰Y˜1ˆYÓ¤	¨qÔ 1Ñ1×:Ñ:¸qÐ:ÓA‰ðBð 28Ö8¨AŒl˜1Ÿ7™7 Q™;Ó'Ð8€FÐ8Ø�6ˆ>Ðùò# GùÚ9ùò HùÚ.ùò 9s   ·EÁEÂE$Â0E)Ä7E.ÚGETc                 ó¤
  — | j                   j                  dd«      }t        j                  j	                  t        j
                  j                  ¬«      j                  «       }t        j                  j	                  t        j
                  j                  ¬«      j                  d«      j                  «       j                  «       }t        j                  j                  «       }t        j                  j	                  t        j
                  j                  ¬«      j                  d«      j                  t        d«      ¬«      }t        d„ |D «       «      }t        j                   «       j#                  d	¬
«      }t        j                  j	                  t        j
                  j                  |¬«      j                  «       }t        j                  j	                  t        j
                  j                  |¬«      j                  d«      j                  «       j                  «       }	t%        |«      \  }
}g }t'        |
|«      D ]¼  \  }}|j)                  |t        j                  j	                  |¬«      j                  «       t        j                  j	                  |¬«      j                  d«      j                  «       j                  «       t        j                  j	                  |¬«      j                  «       dœ«       Œ¾ |j+                  d«      D �cg c]  }|d   xs dj-                  «       |d   dœ‘Œ! }}g }t        j                  j/                  «       j+                  d«      d d D ]ø  }|j0                  xs dj3                  «       }|j)                  |j4                  |j6                  t        j                  j	                  |¬«      j                  «       t        j                  j	                  |t        j
                  j                  ¬«      j                  «       |j0                  xs dj-                  «       |j8                  t:        j                  |d«      dœ«       Œú t<        j                  j?                  dd«      j+                  d«      d d D �cg c]�  }|j@                  |jB                  rtE        |jB                  «      nd|jF                  r|jF                  j6                  nd |jH                  |jJ                  |jL                  |jN                  jQ                  «       dœ‘Œ‘ }}tS        ||||	||d œ||||d!œ«      S c c}w c c}w )"Nr#   r)   )ÚstatusÚuserÚplanÚid)Úcountc              3   ó~   K  — | ]5  }t         j                  |d    xs dj                  «       d«      |d   z  –— Œ7 y­w)rI   Ú r   rK   N)ÚPLAN_MRRÚgetÚlower)Ú.0Úps     rC   ú	<genexpr>z(admin_dashboard_stats.<locals>.<genexpr>N   s=   è ø€ ò àô 	�‰�a˜‘i’o 2×,Ñ,Ó.°Ó2°Q°w±ZÕ?ñùs   ‚;=r   r0   )rG   Úcreated_at__date__lt)Úcreated_at__date__lte)Úopened_at__date__lte)ÚnameÚtenantsÚusersÚcasesz-countÚAutrerK   )rW   Úvaluez-created_até   rM   )Útenant)r^   rG   r   )rJ   rW   rZ   rY   rI   rG   ÚmrrÚactorr^   z-idé
   Úsystem)Úactionr`   r^   Úentity_typeÚentity_labelÚmetadataÚ
created_at)Útotal_tenantsÚprev_tenantsÚtotal_usersÚ
prev_usersÚtotal_casesÚ	total_mrr)ÚkpisÚgrowthÚplan_distributionÚtenant_healthÚ	audit_log)*Úquery_paramsrO   r   ÚobjectsÚfilterÚStatusÚACTIVErK   r   ÚvaluesÚdistinctr   Úannotater   Úsumr   r:   r7   rD   ÚzipÚappendÚorder_byÚ
capitalizeÚallrI   rP   rJ   rW   rG   rN   r   Úselect_relatedrc   r`   Ústrr^   rd   re   rf   rg   Ú	isoformatr
   )Úrequestr#   rh   rj   rl   Úplan_qsrm   Úfirst_of_monthri   rk   r<   r>   ro   r=   ÚlabelrR   rp   rq   ÚtÚplan_keyÚlogrr   s                         rC   Úadmin_dashboard_statsr‹   8   s<  € ð ×!Ñ!×%Ñ% h°Ó6€Fô —N‘N×)Ñ)´·±×1EÑ1EÐ)ÓF×LÑLÓN€Mä×Ñß	‰”z×(Ñ(×/Ñ/ˆÓ	0ß	‰�‹ß	‰‹ß	‰‹ð ô —,‘,×$Ñ$Ó&€Kô 	�‰ß	‰”v—}‘}×+Ñ+ˆÓ	,ß	‰�‹ß	‰œ˜d›ˆÓ	$ð	 ô ñ àôó €Iô —z‘z“|×+Ñ+°Ð+Ó2€NÜ—>‘>×(Ñ(Ü�}‰}×#Ñ#Ø+ð )ó ÷ �eƒgð ô
 	×Ñß	‰”z×(Ñ(×/Ñ/ÀnˆÓ	Uß	‰�‹ß	‰‹ß	‰‹ð ô " &Ó)�M€Eˆ6Ø€FÜ˜˜vÓ&ò ‰ˆˆ5Ø�‰ØÜ—~‘~×,Ñ,À1Ð,ÓE×KÑKÓMä×"Ñ"ß‘¨a�Ó0ß‘˜“ß‘“ß‘“ä—\‘\×(Ñ(¸aÐ(Ó@×FÑFÓHñ
õ 	ðð( ×!Ñ! (Ó+öð
 ð ˜‘iÒ* 7×6Ñ6Ó8Ø�w‘Zó	
ðÐð ð €MÜ�^‰^×ÑÓ!×*Ñ*¨=Ó9¸#¸2Ð>ò ˆØ—F‘F’L˜b×'Ñ'Ó)ˆØ×ÑØ—d‘dØ—f‘fÜ—l‘l×)Ñ)°Ð)Ó3×9Ñ9Ó;Ü ×(Ñ(×/Ñ/Ø!"¬:×+<Ñ+<×+CÑ+Cð 0ó ç™›Ø—v‘v’| ×/Ñ/Ó1Ø—h‘hÜ—l‘l 8¨QÓ/ñ

õ 
	ðô2 ×#Ñ#×2Ñ2°7¸HÓE×NÑNÈuÓUÐVYÐWYÐZöð ð  ŸJ™JØ.1¯iªiœC §	¡	œN¸XØ/2¯zªz˜CŸJ™JŸOšO¸tØŸO™OØ×,Ñ,ØŸL™LØŸN™N×4Ñ4Ó6ó	
ð€Ið ô à*Ø)Ø(Ø'Ø(Ø&ñ
ð $Ø.Ø*Ø&ñó ð ùòMùò2s   Ì$UÒBUN)Ú__doc__Údatetimer   r   Údjango.db.modelsr   Údjango.utilsr   Úrest_framework.decoratorsr   r   Úrest_framework.permissionsr	   Úrest_framework.responser
   Úmodelsr   Úpermissionsr   Úaccounts.modelsr   r   Úcases.modelsr   rN   r8   r4   r‚   rD   r‹   © ó    rC   ú<module>r™      sƒ   ðñ÷ %å "Ý !ß BÝ 6Ý ,å Ý $ß 0Ý ð
 ØØñ€ò<€â@€
ð˜#ó ñ2 
ˆ5ˆ'ÓÙ�_ kÐ2Ó3ñló 4ó ñlr˜   