
    Ai-4                     |    S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKrS	 r " S
 S\5      rg)    )BaseCommand)Stamp)Function)*calculate_daily_balances_for_user_and_date)WorkBalance)BalanceDetail)dateNc                 b   U (       d  U $ [        U 5      R                  SS5      n[        U5      S:X  a"   [        R                  " U5      n[        U5      $  [        R                  " [        U 5      5      n[        U5      $ ! [
        [        4 a    U s $ f = f! [
        [        4 a    U s $ f = f)z
Normalize user_id to standard UUID format with dashes.
Converts 'edd631c63c1848c681244f5c7c868801' to 'edd631c6-3c18-48c6-8124-4f5c7c868801'
-     )strreplacelenuuidUUID
ValueErrorAttributeError)user_iduser_id_cleanuuid_objs      ND:\TimeStamps\worktimeservice\management\commands\debug_balance_calculation.pynormalize_user_idr      s    
  L((b1M =R	yy/Hx= 99S\*8} N+ 	N	 ' s#    B )B BBB.-B.c                   $    \ rS rSrSrS rS rSrg)Command)   z6Debug balance calculation for a specific user and datec                 \    UR                  S[        SSS9  UR                  S[        SSS9  g )Nz	--user-idTzUser ID to debug)typerequiredhelpz--datez!Date to debug (YYYY-MM-DD format))add_argumentr   )selfparsers     r   add_argumentsCommand.add_arguments,   sB    #	 	 	
 	4	 	 	
    c           	      h&   US   nUS   n[        U5      nXS:w  a;  U R                  R                  U R                  R	                  SU SU S35      5         [        [        UR                  S5      5      u  pgn[        XgU5      n	U R                  R                  S	5        U R                  R                  S
5        U R                  R                  SU 35        U R                  R                  SU	 35        U R                  R                  S	5        U R                  R                  S5        U R                  R                  S5        U R                  R                  S5        [        R                  R                  XYS9R                  S5      nUR                  5       (       a  U R                  R                  U R                  R!                  SUR#                  5        S35      5        U H8  nU R                  R                  SUR$                   SUR&                   35        M:     O5U R                  R                  U R                  R                  S5      5        g U R                  R                  S5        U R                  R                  S5        U R                  R                  S5        [(        R                  R+                  5        Vs0 s H  oR,                  U_M     nnU R                  R                  S[/        U5       35        U GH4  nUR1                  UR$                  5      nU(       a  U R                  R                  SUR$                   S35        U R                  R                  SUR2                   35        U R                  R                  SUR4                   35        U R                  R                  SUR6                   35        U R                  R                  S[9        USS 5       35        M  U R                  R                  U R                  R                  S!UR$                   S"35      5        GM7     U R                  R                  S5        U R                  R                  S#5        U R                  R                  S5        [:        R                  R                  XYS9R=                  5       nU(       Ga  U R                  R                  S$5        U R                  R                  S%UR>                   S&UR>                  S'-  S( S)35        U R                  R                  S*UR@                   S&UR@                  S'-  S( S)35        U R                  R                  S+URB                   S&URB                  S'-  S( S)35        U R                  R                  S%UR>                   S&UR>                  S'-  S( S)35        O4U R                  R                  U R                  R	                  S,5      5        U R                  R                  S5        U R                  R                  S-5        U R                  R                  S5         [E        XY5      nU(       GaS  U R                  R                  U R                  R!                  S.5      5        U R                  R                  S/URF                   35        U R                  R                  S0UR>                   S&UR>                  S'-  S( S)35        U R                  R                  S1UR@                   S&UR@                  S'-  S( S)35        U R                  R                  S2URB                   S&URB                  S'-  S( S)35        URI                  5         URK                  5         U R                  R                  S3UR>                   35        O5U R                  R                  U R                  R	                  S45      5         U R                  R                  S5        U R                  R                  S75        U R                  R                  S5        S6S8K(J)n  URT                  RW                  5         [:        R                  R                  XYS9R=                  5       nU(       Gaz  URK                  5         U R                  R                  S95        U R                  R                  S:URF                   35        U R                  R                  S%UR>                   S&UR>                  S'-  S( S)35        U R                  R                  S*UR@                   S&UR@                  S'-  S( S)35        U R                  R                  S;URX                   S&URX                  S'-  S( S)35        U R                  R                  S+URB                   S&URB                  S'-  S( S)35        U R                  R                  S<URZ                   S&URZ                  S'-  S( S)35        U R                  R                  S=UR\                   S&UR\                  S'-  S( S)35        U R                  R                  S>UR^                   35        U R                  R                  S?UR`                   35        UR>                  S6:X  aj  U R                  R                  S5        U R                  R                  U R                  R                  S@5      5        U R                  R                  SA5        O4U R                  R                  U R                  R	                  SB5      5        U R                  R                  S5        U R                  R                  SC5        U R                  R                  S5        [b        R                  R                  UU	S9Re                  SD5      nUR                  5       (       Ga  U R                  R                  U R                  R!                  SUR#                  5        SE35      5        U GH3  nURf                  (       a  URf                  R2                  OSFnU R                  R                  SGU 35        U R                  R                  SHUR>                   S&UR>                  S'-  S( S)35        U R                  R                  SIUR@                   S&UR@                  S'-  S( S)35        U R                  R                  SJURB                   S&URB                  S'-  S( S)35        U R                  R                  SKURZ                   S&URZ                  S'-  S( S)35        GM6     O4U R                  R                  U R                  R	                  SL5      5        U R                  R                  S5        U R                  R                  SM5        U R                  R                  S5        URi                  5        nURk                  SNXY/5        URm                  5       nU(       GaS  U R                  R                  U R                  R!                  SO5      5        U R                  R                  S:US6    35        U R                  R                  S%USP    S&USP   S'-  S( S)35        U R                  R                  S*USQ    S&USQ   S'-  S( S)35        U R                  R                  S+USR    S&USR   S'-  S( S)35        U R                  R                  S?USS    35        USP   S6:X  aO  U R                  R                  S5        U R                  R                  U R                  R                  ST5      5        O4U R                  R                  U R                  R                  SU5      5        S S S 5        URi                  5        nURk                  SVXY/5        URm                  5       S6   nUS6:  a9  U R                  R                  U R                  R!                  SWU SX35      5        O4U R                  R                  U R                  R	                  SY5      5        S S S 5        U R                  R                  S5        U R                  R                  S	5        U R                  R                  SZ5        U R                  R                  S	5        / nUR                  5       (       d  URo                  S5        O}U Vs/ s H-  nUR1                  UR$                  5      b  M!  UR$                  PM/     nnU(       a  URo                  S[U 35        U(       a!  UR>                  S6:X  a  URo                  S\5        U(       a\  U R                  R                  U R                  R                  S]5      5        U H!  nU R                  R                  SU 35        M#     O4U R                  R                  U R                  R!                  S^5      5        U R                  R                  S5        U R                  R                  S	5        g ! [         aB  n
U R                  R                  U R                  R                  SU S35      5         S n
A
g S n
A
ff = fs  snf ! [         ao  n
U R                  R                  U R                  R                  S5U
 35      5        S6S K&nU R                  R                  URO                  5       5         S n
A
GNS n
A
ff = f! , (       d  f       GNq= f! , (       d  f       GN= fs  snf )_Nr   r	   zUser ID normalized: 'z' -> ''r   zInvalid date format: z. Use YYYY-MM-DDzP================================================================================zDEBUGGING BALANCE CALCULATIONz	User ID: zDate: r   z1. CHECKING STAMPSzP--------------------------------------------------------------------------------)r   r	   timezFound z
 stamp(s):z  - z at zNo stamps found for this datez2. CHECKING FUNCTION OBJECTSzTotal functions in database: u     ✓ :z    - name: z    - out: z    - break_flag: z    - with_reason: with_reasonFu     ✗ z : Function NOT FOUND in databasez3. CHECKING CURRENT WORKBALANCEzCurrent balance:z  - total_work_seconds: z (i  z.2fz hours)z  - regular_work_seconds: z  - net_work_seconds: zNo WorkBalance record foundz4. RECALCULATING BALANCEzCalculation completedz  - Returned WorkBalance ID: z!  - Returned total_work_seconds: z#  - Returned regular_work_seconds: z  - Returned net_work_seconds: z,  - After explicit save: total_work_seconds=z8Calculation returned None (no stamps or deleted balance)zCalculation failed: r   z+5. CHECKING WORKBALANCE AFTER RECALCULATION)
connectionzBalance after recalculation:z  - ID: z  - daily_break_seconds: z  - overtime_seconds: z  - flex_seconds: z  - created_at: z  - updated_at: uC   ⚠️  WARNING: total_work_seconds is still 0 after recalculation!zAThis suggests the calculation logic isn't finding work intervals.z/No WorkBalance record found after recalculationz!6. CHECKING BALANCEDETAIL RECORDSpaycodez BalanceDetail record(s):z
No Paycodez  - Paycode: z    - total_work_seconds: z    - regular_work_seconds: z    - net_work_seconds: z    - overtime_seconds: z,No BalanceDetail records found for this datez!7. VERIFYING DATABASE PERSISTENCEzSELECT id, total_work_seconds, regular_work_seconds, net_work_seconds, updated_at FROM workbalances WHERE user_id = %s AND date = %su.   ✓ WorkBalance found in database via raw SQL:            uL   ⚠️  WARNING: Database shows total_work_seconds=0 even after calculation!u1   ✗ WorkBalance NOT found in database via raw SQLzQSELECT COUNT(*) FROM balancedetail_balancedetail WHERE user_id = %s AND date = %su
   ✓ Found z$ BalanceDetail record(s) in databaseu.   ⚠ No BalanceDetail records found in databaseSUMMARYzMissing Function objects: zABalance is 0.0 even though stamps exist - calculation logic issuezISSUES FOUND:zNo obvious issues found)8r   stdoutwritestyleWARNINGmapintsplitr	   	ExceptionERRORr   objectsfilterorder_byexistsSUCCESScountstamp_functionr)   r   allfunction_ref_idr   getnameout
break_flaggetattrr   firsttotal_work_secondsregular_work_secondsnet_work_secondsr   idsaverefresh_from_db	traceback
format_exc	django.dbr,   queries_logcleardaily_break_secondsovertime_secondsflex_seconds
created_at
updated_atr   select_relatedr-   cursorexecutefetchoneappend)r"   argsoptionsuser_id_rawdate_strr   yearmonthday
check_dateestampsstampffunction_mapfunc_objbalanceresultrQ   r,   balance_afterbalance_detailsdetailpaycode_namer\   rowrA   issuessmissing_functionsissues                                  r   handleCommand.handle:   s   i(6? $K0!KKdjj003HU[\c[dde1fgh	"3s(;<Dd3/J
 	(#9;IgY/0F:,/0(#" 	./(#%%g%GPPQWX==??KKdjj006&,,.9I1TUV!!D)=)=(>d5::,"OP   KKdjj../NOP" 	89(#6>6F6F6J6J6LM6L))1,6LM9#l:K9LMNE#''(<(<=H!!F5+?+?*@"BC!!L"@A!!K~">?!!$6x7J7J6K"LM!!$7-Y^8_7`"ab!!$**"2"2VE<P<P;QQq3r"st  	" 	;<(#%%,,W,NTTVKK 02KK 89S9S8TTVW^WqWqtxWxy|V}  ~E  F  GKK :7;W;W:XXZ[b[w[wz~[~  @C  [D  DK  L  MKK 6w7O7O6PPRSZSkSknrSrsvRww~  AKK 89S9S8TTVW^WqWqtxWxy|V}  ~E  F  GKKdjj001NOP" 	45(#	6?TF!!$**"4"45L"MN!!$A&))"MN!!$EfF_F_E``bcic|c|  @D  dD  EH  cI  IP  #Q  R!!$GHcHcGddfgm  hC  hC  FJ  hJ  KN  gO  OV  #W  X!!$CFD[D[C\\^_e_v_vy}_}  B  _C  CJ  #K  L &&(!!$PQWQjQjPk"lm!!$**"4"45o"pq
 	" 	GH(#($$&#++2272TZZ\))+KK <>KK)9)9(:;<KK 89Y9Y8ZZ\]j]}]}  AE  ^E  FI  ]J  JQ  R  SKK :=;];]:^^`an  bD  bD  GK  bK  LO  aP  PW  X  YKK 9-:[:[9\\^_l  `A  `A  DH  `H  IL  _M  MT  U  VKK 6}7U7U6VVXYfYwYwz~Y~  @C  YD  DK  L  MKK 6}7U7U6VVXYfYwYwz~Y~  @C  YD  DK  L  MKK 2=3M3M2NbQ^QkQknrQrsvPww~  AKK 01I1I0JKLKK 01I1I0JKL//14!!"%!!$**"2"23x"yz!!"efKKdjj001bcd" 	=>(#'//66 7 
 .
# 	
 !!##KKdjj006/:O:O:Q9RRk1lmn)6<nnv~~22,!!M,"@A!!$>v?X?X>YY[\b\u\ux|\|  ~A  \B  BI  #J  K!!$@A\A\@]]_`f`{`{  C  aC  DG  `H  HO  #P  Q!!$<V=T=T<UUWX^XoXorvXvwzW{  |C  #D  E!!$<V=T=T<UUWX^XoXorvXvwzW{  |C  #D  E * KKdjj001_`a" 	=>(#  FNNE%
 //#C!!$**"4"45e"fg!!HSVH"56!!$<SVHBs1vPT}UXFYY`"ab!!$>s1vhbQRVWZH[[b"cd!!$:3q6("SVd]SVDWW^"_`!!$4SVH"=>q6Q;KK%%b)KK%%djj&6&6  8F  'G  H!!$**"2"23f"gh' !,  FNNc% OO%a(Eqy!!$**"4"4z%Hl5m"no!!$**"4"45e"fg ! 	" 	(#)$(#}}MM9:;A p6a\EUEUVWVfVfEg!1!1!16 p  :;L:MNO!A!AQ!FabKKdjj..?@!!D.1   KKdjj001JKL"(#E  	KKdjj..1FxjP`/abc	6 N`  	6KKdjj..1EaS/IJKKKi22455	6z ! , ! * !qs~   .AH; AJ
E%AJ =4AJ .F3AL9BALC4 AL/DAL/H;
AJI8AJJAJJ
ALJA$ALLALL
ALL
AL, N)__name__
__module____qualname____firstlineno__r    r$   ry   __static_attributes__r{   r&   r   r   r   )   s    CD
P$r&   r   )django.core.management.baser   stamps.modelsr   functions.modelsr   worktimeservice.servicer   worktimeservice.modelsr   balancedetail.modelsr   datetimer	   r   r   r   r{   r&   r   <module>r      s0    3  % N . .  <a$k a$r&   