
    hU                     f   S SK r S SKrS SKrS SK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JrJr  S SKJrJr  S S	KJr  S
SKJrJrJrJr  S SKJr  \" 5         SrSrSr S\S\!4S jr"S\#S\#S\\$   S\\$   S\\$   S\\$   S\\$   S\\$   S\\$   S\!4S jr%S\$S\!4S jr&S\$S\S\!4S jr'S\$S\!4S  jr(S)S\$S!\$S\\\$\$4      4S" jjr)S)S\$S!\$S\\\$\*4      4S# jjr+ S*S\$S\\$   S\\\$\4      4S$ jjr,S)S\$S%\$S!\$S\\\$\*4      4S& jjr-S)S\$S!\$S\\!   4S' jjr.S)S!\$S\\!   4S( jjr/g)+    N)datetime)ObjectId)DuplicateKeyError)HTTPExceptionstatus)load_dotenv)OptionalListDictAny)	ASCENDING
DESCENDING)str_to_objectid   )	WorkforceWorkforceBaseWorkforceUpdateWorkforceResponseList)get_next_sequence_value_int	workforcetag_nameaccountsreturnc                    U[            nU[           nUR                  S[        U R                  5      05      nU(       d
  [        SSS9e[        UR                  SS5      5      R                  5       nSU;   a-   [        UR                  S5      S   R                  5       5      nOOUR                  S
5      (       a-   [        UR                  S
S5      R                  5       5      nSnO [        U5      nUR                  SU R                  05      nX:  a  [        SSU S3S9eUR                  SSU R                  0SU R                   0/05      (       a
  [        SSS9eU R"                  (       a]  [$        R                  SU R"                  05      n	U	(       d5  [$        R'                  U R"                  [(        R*                  " 5       S.5        U R-                  5       n
U
R/                  [(        R*                  " 5       [(        R*                  " 5       SS.5        SU
;  a  S U
S'    [1        SU5      U
S'   UR'                  U
5      nUR                  SUR2                  05      n[        US   5      US'   UR                  S5      (       a  [4         SUS    3US'   U$ ! [         a    S	n GNf = f! [         a    Sn GNf = f! [         a    S	n GNf = f! [6         a    [        SSS9ef = f)N_id  zAccount not foundstatus_codedetailworkforce_countz0-10-
   + i ʚ;
account_idi  z=Workforce limit reached. Maximum allowed for this account is .$ormobile_numberemail_idz6Workforce with this contact information already existsr   )r   created_dateactive)r+   last_updatedr   photow_idz/public/workforce/zDuplicate workforce entry)COLLECTION_NAMEACCOUNTS_COLLECTIONfind_oner   r&   r   strgetstripintsplit
ValueErrorendswithreplacecount_documentsr)   r*   r   tag_collection
insert_oner   utcnowdictupdater   inserted_idBASE_URLr   )r   dbworkforce_collectionaccounts_collectionaccountworkforce_rangemax_allowedbaseexisting_countexisting_tagworkforce_dataresultinserted_datas                PC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\services\platform\workforce.pycreate_workforce_servicerP      s   o. 01!**E8I<P<P3Q+RSG4GHH '++&7@AGGIO
o	o33C8<BBDEK 
	!	!#	&	&	 ..sB7==?@DK
	o.K
 *99<I]I]:^_N$RS^R__`a
 	
 $$e	)112	Y''(. &   4lmm %..
I<N<N/OP%%%.. ( 1'  ^^%N ) )  n$"&wQ!<VR!Hv%00@ -55uf>P>P6QR  #=#78eW%%(0z1CMRYDZC[%\M'"E  	K	  	 K	   	K	n  Q4OPPQsC   :+J =+J0 *K &A6K J-,J-0K ?K KKK+skiplimitqr   created_date_fromcreated_date_tosort_by
sort_orderr&   c                    U	[            n0 nU(       a  USS.nSU0SU0SU0SU0/US'   U(       a  X<S'   U(       a  XS	'   U(       d  U(       aH  0 nU(       a  [        R                  " US
5      US'   U(       a  [        R                  " US
5      US'   XS'   SSSSSSS.nUR                  US5      nUS:X  a  [        O[
        nUR                  U5      R                  UU5      R                  U 5      R                  U5      n[        U5      nU HU  n[        US   5      US'   S H;  nUU;   d  M  [        UU   [        5      (       d  M%  UU   R                  5       UU'   M=     MW     UR                  U5      nUUS.$ )Niz$regexz$options
first_name	last_namer*   r)   r(   r   r&   z%Y-%m-%dz$gtez$lter+   )r[   r\   r)   r*   r   r+   ascr   workforce_id)r+   r-   date_of_birth	join_date)total_countr   )r0   r   strptimer4   r   r   findsortrQ   rR   listr3   
isinstance	isoformatr;   )rQ   rR   rS   r   rT   rU   rV   rW   r&   rC   current_userrD   queryregex_querydate_filtersort_fields
sort_fieldsort_directioncursorr   entryfieldra   s                          rO   get_workforce_servicerr   p   s    o.E!"4;'+&%k*	
e  h (l O"*"3"34Ez"RK"*"3"3OZ"PK +n # (&K .9J","5Y:N!&&u-22:~NSSTXY__`efFVI  #E%L 1nSE~*U5\8"D"D$U|557e T  '66u=K&Y??    r^   c                 |    U[            R                  S[        U 5      05      nU(       a  [        US   5      US'   U$ )Nr   id)r0   r2   r   r3   )r^   rC   r   s      rO   read_workforce_servicerv      s=    ?#,,e_\5R-STIi./	$rs   rL   c                    U[            nUR                  S[        U 5      05      nU(       d
  [        SSS9eUR	                  5       R                  5        VVs0 s H  u  pVUc  M
  XV_M     nnnUR                  S[        U 5      0SU05      nUR                  S:X  a
  [        SSS9eUR                  S[        U 5      05      n	U	(       a  [        U	R                  S5      5      U	S'   U	$ [        SSS9es  snnf )	Nr   r   Workforce not foundr   z$setr   ru   z Workforce not found after update)
r0   r2   r   r   r?   items
update_onematched_countr3   pop)
r^   rL   rC   rD   existingkvupdate_datarM   updateds
             rO   update_workforce_servicer      s    o.#,,e_\5R-STH4IJJ$2$7$7$9$?$?$AS$ADAQ414$AKS!,,	-.	F
 q 4IJJ"++UOL4Q,RSGGKK./
C0R
SS Ts   	C3%C3c                     U[            nUR                  S[        U 5      05      nU(       d
  [        SSS9e[	        US   5      US'   US	 UR                  S[        U 5      05        U$ )Nr   r   rx   r   ru   )r0   r2   r   r   r3   
delete_one)r^   rC   rD   r   s       rO   delete_workforce_servicer      sq    o.$--uol6S.TUI4IJJ)E*+IdO%##UOL,I$JKrs   ri   c                     U [            nSU0nU(       a  [        R                  " U5      SS.US'   UR                  USS05      nU Vs/ s H$  n[	        US   5      UR                  SS5      S.PM&     sn$ s  snf )	Nr&   rY   rZ   r[      r   r%   )ru   r[   )r0   reescaperc   r3   r4   )rC   r&   ri   
collectionfiltersresultsfs          rO   get_workforce_dropdown_listr      sx    O$JZ(G+-99U+; Mooga'89GRYZRYQ3qx=lB0GHRYZZZs   	+A7c                 p   U [            nU S   nU S   nSU0nU(       a  [        R                  " U5      SS.US'   UR                  USS05      n/ nU H_  n	[	        U	S   5      n
UR                  UU
S	.5      nUR                  UU
S	.5      nUR                  U
U	R                  SS
5      UUS.5        Ma     U$ )N	schedulestasksr&   rY   rZ   r[   r   r   r&   r^   r%   ru   r[   total_schedulestotal_tasks)r0   r   r   rc   r3   r;   appendr4   )rC   r&   ri   r   schedule_collectiontask_collectionr   workforce_cursorresponser   r^   schedule_count
task_counts                rO   get_freeworkforce_with_countsr      s    O$J[/kOZ(G+-99U+; M!wq0ABH1U8} -<<$(>
  %44$(6
 

 	%%b1-%	
 	 , Ors   c                   #    U S   nU S   nU S   nSU0nU(       a  [        U5      US'   UR                  U5      n/ nU GH  n	[        U	S   5      n
[        UR                  UU
S.5      5      nU Vs/ s H  n[        US   5      PM     nn/ nU(       a  [        UR                  SSU005      5      nUR	                  U
U	R                  S	S
5      U	R                  SS
5      U	R                  SS
5      U	R                  S/ 5      [        U5      [        U5      U Vs/ s He  n[        US   5      UR                  SS
5      UR                  SS
5      UR                  S5      UR                  S5      UR                  S5      S.PMg     snU Vs/ s H  n[        US   5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S0 5      UR                  S0 5      S.
PM     snS.	5        GM     U$ s  snf s  snf s  snf 7f)Nr   r   r   r&   r   r   schedule_idz$inr[   r%   r\   r*   
fleet_infoschedule_namer   
start_timeend_timer+   )r   r   r   r   r   r+   scheduled_startscheduled_endtiminglocationpriority	task_modecustomer_info)
task_idr   r   r   r   r   r   r   r   r   )	r^   r[   r\   r*   r   r   r   r   r   )r   rc   r3   re   r   r4   len)rC   r&   r^   rD   r   r   r   
workforcesr   r   	wf_id_strr   schschedule_idsr   tasks                   rO   .get_workforce_details_with_tasks_and_schedulesr     sb    
 k?[/kOZ(G!,/%**73JH		%()	 ,11$%3
  	 4==9CCJ9= --|4/  E 	%#--b9"{B7!j"5#--b9"9~u: %
 %C $'s5z?%(WW_b%A!ggh3"%'',"7 #
 3$'GGN$; %
0 " "D  #4;/"hhx0'+xx0A'B%)XXo%>"hhx0 $ 4 $ 4!%+!6%)XXor%B"&((<"< "'"
 "	+  r O_ >&
s-   A1I3I
BIA,IIB,I:Iworkforce_typec                    U [            nU S   nU S   nSU0nU(       a  [        R                  " U5      SS.US'   UR                  USS05      n/ n	U H  n
[	        U
S   5      nUR                  UUS	.5      nUR                  S
U05      nUU
R                  SS5      UUS.nUS:X  a  US:X  a  U	R                  U5        Mn  US:X  d  Mv  US:  d  M~  U	R                  U5        M     U	$ )Nr   r   r&   rY   rZ   r[   r   r   r   r^   r%   r   freer   	scheduled)r0   r   r   rc   r3   r;   r4   r   )rC   r&   r   ri   r   r   r   r   r   result_listr   r^   r   r   rL   s                  rO   get_workforce_list_by_typer     s   O$J[/kOZ(G+-99U+; M!wq0ABK1U8},<<$(>
 
 %44L6
 
 %%b1-%	
 V#!(;~.{*~/A~./ 2 rs   c                    U [            nU S   nU S   nSU0nU(       a  [        R                  " U5      SS.US'   UR                  USSSS.5      n/ nU GH  n	[	        U	S	   5      n
UR                  UU
S
.5      nUR                  U
SS.5      nUR                  U
SS.5      nSnUS:X  a  SnO#U(       a  SnOU(       a
  U(       d  SnOUS:  a  Sn0 SU
_SU	R                  SU5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  S5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _SU	R                  SS5      _S U	R                  S S!5      _S"U	R                  S"5      _U	R                  S#5      U	R                  S$5      U	R                  S%5      U	R                  S&5      U	R                  S'S(5      U	R                  S)/ 5      U	R                  S*5      U	R                  S+S5      U	R                  S,S5      U	R                  S-5      U	R                  S.5      US/S0SSS1S2.U   S3.EnUR                  U5        GM     U$ )4Nr   r   r&   rY   rZ   r[   r   )r[   r\   r   r   r   
inprogress)r^   r   	completed   r      r   r^   user_idr%   r\   r)   r*   genderr_   
license_idnational_idemergency_contactshift_timingaddressblood_groupis_humanTr+   r-   r   cense_numberr`   is_fleet_assignedFskillsr/   workforce_category_nameskills_namer   workforce_category_idr   busyr,   )r   r   r   r   r   )r-   r   r   r`   r   r   r/   r   r   r   r   workforce_statusstatus_label)	r0   r   r   rc   r3   r;   r2   r4   r   )rC   r&   ri   r   r   r   r   r   r   r   r^   r   inprogress_taskcompleted_taskr   rL   s                   rO   get_workforce_list_with_statusr     sK   O$J[/kOZ(G+-99U+; M!wqq\]0^_K1U8} -<<$(>
  *22("4
  )11(!3
  Q  O a 
L
!%%j9
 quuY+
 !%%b1	

 {B/
 QUU?B7
 j"-
 aeeHb)
 QUU?3
 !%%b1
 1553
  ':B!?
 AEE."5
 quuY+
 1553
  j$/!
" AEE.1#
$ EE.1eeHoEE.1{+!"':E!BeeHb)EE&M'(uu-F'K553j)%&UU+B%C 0 &6l{W_`aqr=
B 	>*A D rs   c                     U [            n0 nU(       a  [        R                  " U5      SS.US'   [        UR	                  USSS.5      5      nU Vs/ s H
  nSUS   0PM     sn$ s  snf )NrY   rZ   r   r   r   )r   r   )TAG_COLLECTIONr   r   re   rc   )rC   ri   r<   r   tagsts         rO   get_tag_name_listr   G  si    'NG)+5)9sK
##GQA-FGHD156AZ:'666s   A%)r%   )N)0jsonosr   r   bsonr   pymongo.errorsr   fastapir   r   dotenvr   typingr	   r
   r   r   pymongor   r   app.v1.libraries.objectr   models.platform.workforcemodelr   r   r   r   app.v1.services.sequencer   r0   r   r1   r?   rP   r6   r3   rr   rv   r   r   r   objectr   r   r   r   r    rs   rO   <module>r      sO    	 	   , )  + + ) 3  A    UQ UQd UQn@@
@@@@ }@@ SM	@@
  }@@ c]@@ c]@@ @@ @@ 
@@F T T3 T TX\ T,3 t [ [C [dSVX[S[nI] [## #c #4PTUXZ`U`PaKb #H #'II 3-I 
$sCx.	IV&s &C &PS &]abfgjlrgrbs]t &PN3 Ns NDQUJ N`7 7d4j 7rs   