
    hW                         S SK J r Jr  S SKJr  S rS\ S\ 4S jrS\ S\ 4S jrS\S	\S
\4S jr	S r
S\ S\ 4S jrSS\ S\ 4S jjrg)    )datetime	timedelta)
Collectionc                   #    UR                  S5      nU(       d  [        S5      eU S   R                  SU05      nU S   R                  USS.5      nU S   R                  USS.5      n[        R                  " 5       nU[        S	S
9-
  nSUSSU0S.0SSSS0S.0/n[        U S   R                  U5      5      n	U	(       a  U	S   S   OSn
UUUU
UR                  5       S.$ 7f)z)Return high-level metrics for the tenant.
account_id&Account ID not found for current user.userssubscriptionsactiver   statusprojectsACTIVE   days$matchpaid$gter   r   due_date$groupN$sum$amount)_idtotalRevenuepaymentsr   r   )users_countactive_subscriptionsactive_projectstotal_revenuelast_updated)	get
ValueErrorcount_documentsr   utcnowr   list	aggregate	isoformat)dbcurrent_userr   r   r   r    nowone_month_agopipelinerevenue_resultr!   s              LC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\services\saas\dashboard.pyget_overview_metricsr1      s    !!,/JABBW+--|Z.HIKo.>>jdl?mnn44JZb5cdO //
C),,M	*VUbLcde	4&)1DEFH "Z.228<=N9GN1%n5QM # 4*& s   C C"
start_dateend_datec                    #    UR                  S5      nSUX#S.S.0SSSSS	.0S
S0S.0SSS00/n[        U S   R                  U5      5      nU$ 7f)z>Return daily usage metrics (e.g., user logins) grouped by day.r   r   r   z$lte)r   
login_dater   $dateToString%Y-%m-%dz$login_dateformatdater      )r   daily_logins$sortr   user_loginsr#   r'   r(   )r*   r+   r2   r3   r   r.   usages          r0   get_usage_trendsrB       s     !!,/J	$#-@
 	 
#
M%RS#QK
 	 
5!*
H M",,X67ELs   AAc                    #    UR                  S5      nSUSX#S.S.0SSSS	S
.0SS0S.0SSS00/n[        U S   R                  U5      5      nU$ 7f)z%Return revenue trends grouped by day.r   r   r   r5   r   r   r7   r8   z	$due_dater9   r   r   )r   daily_revenuer>   r   r<   r   r@   )r*   r+   r2   r3   r   r.   revenue_trendss          r0   get_financial_trendsrF   1   s     !!,/J	$!+>
 	
 
#
K%PQ$i0
 	 
5!*H "Z.228<=Ns   AAsearch_queryskiplimitc                    #    SSUSS.0SUSS.0/0nU S   R                  U5      R                  U5      R                  U5      n[        U5      nU S   R	                  U5      nXvS.$ 7f)z'Perform account search with pagination.z$oraccount_namei)z$regexz$optionsemailaccounts)total_countrN   )findrH   rI   r'   r%   )r*   rG   rH   rI   queryaccounts_cursorrN   rO   s           r0   search_accountsrS   C   s     	LcBC	\s;< E n))%055d;AA%HOO$HZ.007K&==s   A&A(c                 ^  #    UR                  S5      nU(       d  [        S5      e[        R                  " 5       nU S   R	                  USS.5      nU S   R	                  USS.5      nU S   R	                  USS.5      nU S   R	                  US	S
.5      nUUUUUR                  5       S.$ 7f)zCReturn workforce, fleets, vendors, and users counts for the tenant.r   r   	workforcer   r   fleetsvendorsr	   T)r   	is_active)workforce_countfleets_countvendors_countr   r"   )r#   r$   r   r&   r%   r)   )r*   r+   r   r,   rY   rZ   r[   r   s           r0   &get_workforce_fleet_vendor_user_countsr\   O   s     !!,/JABB
//
C o55 7 O
 h<// 1 L
 yM11 3 M
 W+-- / K +$&" s   B+B-c                 
  #    UR                  S5      nU S   R                  USX#S.S.5      nU S   R                  USX#S.S.5      nU S   R                  USX#S.S.5      nU S   R                  US	X#S.S
.5      nUUUUS.$ 7f)Nr   rU   r   r5   )r   r   created_daterV   rW   r	   T)r   rX   r^   )rY   rZ   r[   r   )r#   r%   )	r*   r+   r2   r3   r   rY   rZ   r[   r   s	            r0   get_workforce_fleet_summaryr_   t   s     !!,/J o55 !+>7 O h<// !+>1 L yM11 !+>3 M W+-- !+>/ K +$&"	 s   BBNc                 Z  #    [         R                  " 5       nUc  U[        SS9-
  nUc  Un[        X5      I Sh  vN n[	        XX#5      I Sh  vN n[        XX#5      I Sh  vN n[        X5      I Sh  vN nUUUUUR                  5       UR                  5       S.S.n	U	$  Nh NV ND N37f)zIAggregate dashboard data including overview, usage, and financial trends.Nr   r   )startend)overviewusage_trendsrE   workforce_fleet_trends
date_range)r   r&   r   r1   rB   rF   r\   r)   )
r*   r+   r2   r3   r,   rc   rA   revenueworkforce_fleet	dashboards
             r0   get_dashboard_metrics_servicerj      s      //
C9"--
)";;H"2ZJJE(:PPGB2TTO !"1 * 4 4 6x?Q?Q?STI  <JPTsE   8B+B#B+B%B+"B'#B+5B)6.B+%B+'B+)B+)NN)r   r   pymongo.collectionr   r1   rB   rF   strintrS   r\   r_   rj        r0   <module>rp      s    ( )8 X "X QY $
>C 
>s 
>3 
>#J$H $X` $Lh ai ro   