
    }i%                     0   d dl mZmZ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 d d	lmZ  ed
dg      Zej-                  d       ed       ed       ed       ed       ee      fde
e   de
e   de
e   dedef
d       Zy)    )	APIRouterDependsQuery)Session)funccase)Optional)date)get_db)
Assignment)MassSchedule)Asimz/api/reportsreports)prefixtagsz/assignmentsNF	date_fromdate_toposition_type_codeinclude_inactivedbc           	      :	   |j                  t        j                  j                  d      t        j                  t        j
                  t        j                  t        j                  t        j                        j                  d            j                  t        t        j                  t        j                  k(  d      j                  t        t        j                  t        j                  k(  d      }|s"|j                  t        j                  dk(        }| r6|j                  t        j                  | k\  t        j                  dk(  z        }|r6|j                  t        j                  |k  t        j                  dk(  z        }|j                  t        j                  t        j                  t        j                        j                  d            j                  t        t        j                  t        j                  k(        j                  t        j                  dk7        }| r"|j                  t        j                  | k\        }|r"|j                  t        j                  |k        }|r"|j                  t        j                   |k(        }|j#                  t        j                        }|j%                         D ci c]  }|j                  |j&                   }}|j                  t              }	|s"|	j                  t        j                  dk(        }	|	j)                  t        j                        j%                         }
g }|
D ]]  }|j+                  |j                  d      }|j-                  |j                  |j                  |j
                  |j                  |d       _ |j/                  d	 
       |D cg c]  }|d   	 }}|rt1        |      t3        |      z  nd}|rt5        |      nd}|rt7        |      nd}t5        d|dz        }|D ]C  }t9        |d   |z
  d      |d<   |d   ||z   kD  rd|d<   )|d   ||z
  k  r|dkD  rd|d<   ?d|d<   E t3        |      t1        |      t9        |d      ||d}||dS c c}w c c}w )zv
    Laporan assignment per ASIM dengan fairness metrics.
    Filter: date range, position type, active/inactive.
    asim_idtotalT)isouterNcntr   )r   no_asim	full_name	is_activer   c                     | d    | d   fS )Nr   r    )xs    3/var/www/html/asim.com/backend/app/routes/report.py<lambda>z$report_assignments.<locals>.<lambda>_   s    aj[!I,7    )key   g      ?	deviationabovefairnessbelownormal)
total_asimtotal_assignmentsavg_per_asimmax_assignmentsmin_assignments)summarydata)queryr   idlabelr   r   r   r   countr   joinr   r   schedule_idfilterr
   r   group_byallr   order_bygetappendsortsumlenmaxminround)r   r   r   r   r   qassign_qrowassign_countsasim_q	asim_listr2   asimr   dtotalsavgmax_valmin_val	thresholdr1   s                        r"   report_assignmentsrR      s    	GGMM)$LLNNNNJJz}}%++G4	
 
j*,,7	F	lJ22looEt	T  HHT^^t+, HH)+
0EF
 HH')jmmt.CD
 	JJz}}%++E2	
 
lJ22looE	F	
""d*	+  ??<#4#4	#AB??<#4#4#?@??:#@#@DV#VW  !3!34H5=\\^D^cS[[#'')^MD XXd^Ft~~56-113I D!!$''1-ww||
 	  	II7I8 #''$Qaj$F''-#f+F
#1C#c&kG#c&kG AsTz"IqzC/3+W:i'#AjMwZ#	/)cAg#AjM$AjM  $i [c1""G  a E0 (s   RR)fastapir   r   r   sqlalchemy.ormr   
sqlalchemyr   r   typingr	   datetimer
   app.databaser   app.models.assignmentr   app.models.mass_scheduler   app.models.asimr   routerr=   strboolrR   r    r$   r"   <module>r_      s    - - " !    , 1  	.	{	; N %d#Dk(-d"5\&/n~nd^n !n 	n
 	n nr$   