
    V
h                        S SK J r Jr  S SKJr  S SKJr  SSKJrJr  SSK	J
r
  S SKJrJr  S SKr\R                  " \5      rS	rS
\S\R&                  S\4S jrS\S\\   S\S\S\R&                  S\\   4S jrS\S\R&                  S\\   4S jrS\S\S\R&                  S\\   4S jrS\S\R&                  S\\   4S jrS\S\R&                  S\4S jrS\S\S\R&                  S\4S jrg)    )datetime	timedelta)
Collection)database   )SupportActivityCreateSupportActivityUpdate)str_to_objectid)OptionalListNsupport_activitiesactivitydbreturnc                 X  #     U[            nU R                  5       n[        R                  " 5       US'   UR	                  U5      n[        UR                  5      US'   US   US'   [        R                  SUS   5        U$ ! [         a  n[        R                  SU5        e SnAff = f7f)zG
Insert a new support activity into the support_activities collection.
created_date_idactivity_idzCreated activity %szError creating activity: %sN)COLLECTION_NAMEdictr   utcnow
insert_onestrinserted_idloggerinfo	Exceptionerror)r   r   activities_collectionactivity_dataresultes         JC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\services\saas\support.pycreate_activity_servicer$      s     ,.,? (0(9n%&11-@"6#5#56e'4U';m$)=+GH 2A6s)   B*A<B  B*
B'B""B''B*
account_idtype_filterskiplimitc                   #     U[            nSU 0nU(       a  XS'   UR                  U5      R                  U5      R                  U5      R	                  SS5      n/ nU  Sh  vN n	[        U	S   5      U	S'   U	S   U	S'   UR                  U	5        M5   N0
 U$ ! [         a  n
[        R                  SU
5        e Sn
A
ff = f7f)	zp
Retrieve a paginated list of support activities for the specified account.
Optionally filter by activity type.
r%   typer   Nr   r   zError listing activities: %s)
r   findr'   r(   sortr   appendr   r   r   )r%   r&   r'   r(   r   r   querycursor
activitiesdocr"   s              r#   list_activities_servicer3      s     
,.,?z*'&M&++E277=CCEJOOP^`bc
 	##SZCJ!$UCc"	#  3Q7sM   CAB B#B$B'-B BB C
B?#B::B??Cr   c                    #     U[            nUR                  S[        U 5      05      nU(       a  [        US   5      US'   US   US'   U$ ! [         a  n[
        R                  SX5        e SnAff = f7f)z/
Retrieve a single support activity by its ID.
r   r   z Error retrieving activity %s: %sN)r   find_oner
   r   r   r   r   r   r   r   r   r"   s        r#   get_activity_servicer7   3   sx     	,.,?(115/+:V2WX!(5/2HUO&.uoH]# 7Hs)   A4AA 
A4
A1A,,A11A4activity_updatec                 j  #     U[            nUR                  SS9nUR                  S[        U 5      0SU05      nUR                  S:X  a  gUR                  S[        U 5      05      nU(       a  [        US   5      US'   US   US'   U$ ! [         a  n[        R                  SX5        e SnAff = f7f)	z&
Update an existing support activity.
T)exclude_unsetr   $setr   Nr   zError updating activity %s: %s)
r   r   
update_oner
   matched_countr5   r   r   r   r   )r   r8   r   r   update_datar!   r   r"   s           r#   update_activity_servicer?   B   s     ,.,?%***>&115/+:V2WZ`bmYno1$(115/+:V2WX!(5/2HUO&.uoH]# 5{Fs5   B3AB
 B3=B
 	B3

B0B++B00B3c                 &  #     U[            nUR                  S[        U 5      05      nU(       d  gUR                  S[        U 5      05        [	        US   5      US'   US   US'   U$ ! [
         a  n[        R                  SX5        e SnAff = f7f)z:
Delete a support activity and return the deleted record.
r   Nr   zError deleting activity %s: %s)r   r5   r
   
delete_oner   r   r   r   r6   s        r#   delete_activity_servicerB   U   s     ,.,?(115/+:V2WX((%1M)NOhuo."*5/ 5{Fs2   B,A( B6A( 'B(
B2B		BBc                 T  #     U[            nUR                  U SSS/0S.5      n[        R                  " 5       nUR	                  U SSU0S.5      nSnU  S	h  vN nUS
-  nM   N
 UUS	UR                  5       S.nU$ ! [         a  n	[        R                  SU	5        e S	n	A	ff = f7f)a  
Aggregate support metrics for an account:
  - Total count of support activities (of type 'comment' or 'note')
  - Count of upcoming meetings (activity type 'meeting' with scheduled date in additional_data)
  - For pipeline, the latest update might be shown elsewhere (here set as None)
z$incommentnote)r%   r*   meetingz$gte)r%   r*   zadditional_data.scheduled_dater   N   )comments_countupcoming_meetings_counttrial_days_remaininglast_updatedz'Error aggregating dashboard metrics: %s)	r   count_documentsr   r   r,   	isoformatr   r   r   )
r%   r   r   rH   nowmeetings_cursormeetings_count_	dashboardr"   s
             r#   get_support_dashboard_servicerS   f   s     ,.,?.>>$Y/0@
  oo/44$/5sm6
 
 & 	 !aN	  -'5$(MMO	
	  >BsM   B(AA? A'A%A'A? %A''A? >B(?
B%	B  B%%B(
new_statusc                   #     US   nUR                  S[        U 5      05      nU(       d  [        S5      eUR                  SS5      nUR	                  S[        U 5      0SU[
        R                  " 5       S.05        SU S	S
U SU 3XQS.[
        R                  " 5       S.nU[           nUR                  U5      n[        UR                  5      US'   US   US'   U$ ! [         a  n	[        R                  SX	5        e S	n	A	ff = f7f)z
Update the sales pipeline status for an account.
This function does two things:
  1. Updates the account record in the 'accounts' collection.
  2. Inserts a support activity record of type 'pipeline_update' to log the change.
accountsr   zAccount not foundsales_pipeline_statusunknownr;   )rW   updated_datepipeline_updateNzPipeline status changed from z to )
old_statusrT   )r*   r%   user_idcontentadditional_datar   r   z1Error updating pipeline status for account %s: %s)r5   r
   
ValueErrorgetr<   r   r   r   r   r   r   r   r   r   )
r%   rT   r   accounts_collectionaccountr[   r    r   r!   r"   s
             r#   update_pipeline_status_servicerc      s     n%..z7R/ST011[[!8)D
&&OJ/0z8??K\]^	
 &$6zl$zlS.8S$OO-
 -/,?&11-@"6#5#56e'4U';m$ H*Xs)   DCC D
D(C??DD)r   r   pymongo.collectionr   app.dbr   models.saas.supportmodelr   r	   libraries.objectr
   typingr   r   logging	getLogger__name__r   r   MongoDBr   r$   r   intr3   r7   r?   rB   rS   rc        r#   <module>rp      sl   ( )  T / ! 			8	$&,A xGWGW \` "c  UX ad jrjzjz   @D  EI  @J *C X5E5E (SW. s EZ `h`p`p u}  C  vD &s 8H8H XVZ^ " C  X=M=M  RV  D"S "c "xO_O_ "dh "ro   