
    ]i                       d Z ddlmZ ddlmZmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZmZ ddlmZmZ ddlmZ dd	Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZddZy
)uH   Anomali service — business logic for anomaly detection and management.    )annotations)datetimetimezone)AnomaliRecordStatusAnomali)anomali_repository)AnomaliCreateAnomaliResponseAnomaliResolveAnomaliUpdate)IntegrityErrorSQLAlchemyError)AsyncSessionc                   t        di d| j                  d| j                  d| j                  d| j                  d| j                  d| j
                  d| j                  r| j                  j                  nd d| j                  d	| j                  r| j                  j                  nd d
| j                  d| j                  d| j                  d| j                  d| j                  d| j                  d| j                   d| j"                  d| j$                  r| j$                  j&                  nd d| j(                  d| j*                  d| j,                  S )Nidspbu_idkodetipelaporan_shift_id	produk_idproduk_nama	nozzle_idnozzle_nama
plat_nomor	deskripsidetailstatusresolved_atresolved_by_idcatatan_resolusiassigned_toassigned_to_namenotes
created_at
updated_at )r
   r   r   r   r   r   produknamar   nozzler   r   r   r   r   r   r    r!   assigned_usernamer#   r$   r%   )rs    >/var/www/html/spbu.com/backend/app/services/anomali_service.py_build_responser.      s`    44		 VV VV	
 ++ ++ &'XXAHHMM4 ++ &'XXAHHMM4 << ++ xx xx MM ''  ++!" MM#$ 23--d%& gg'( <<)* <<+     Nc                   K   t        j                  | |||||       d {   \  }}|D cg c]  }t        |       c}|fS 7 "c c}w w)N)r   r   skiplimit)r   get_allr.   )	dbr   r   r   r1   r2   rowstotalr,   s	            r-   list_anomalir7   (   sY      +22
G$vD KD% )--1OA-u44 .s   AAAAAAc                |   K   t        j                  | ||       d {   }|t        d      t        |      S 7 w)NAnomali tidak ditemukan)r   	get_by_id
ValueErrorr.   )r4   r   
anomali_idrecords       r-   get_anomalir>   6   sA      &//JHHF~2336"" Is   <:<c                  K   	 t        j                  | ||j                  |j                  |j                  |j
                  |j                  t        j                  d       d {   }| j                          d {    t        |      S 7 '7 # t        $ r% | j                          d {  7   t        d      t        $ r | j                          d {  7    w xY ww)N)r   r   r   r   r   r   r   z#Data anomali konflik atau sudah ada)r   creater   r   r   r   r   r   NEWcommitr   rollbackr;   r   r.   )r4   r   datar=   s       r-   create_anomalirE   ?   s     )00II//kk#''6
   iik 6""! 	 @kkm>?? kkmsY   C$A!B %B&B =B>B C$B B C!-B0.+C!CC!!C$c                  K   t        j                  | ||       d {   }|t        d      |j                  d      }|st        d      	 t        j                  | ||       d {   }| j                          d {    t        |      S 7 s7 )7 # t        $ r | j                          d {  7    w xY ww)Nr9   T)exclude_unsetzTidak ada data yang diupdate)	r   r:   r;   
model_dumpupdaterB   r   rC   r.   )r4   r   r<   rD   r=   update_dataupdateds          r-   update_anomalirL   V   s      &//JHHF~233///5K788*11"fkJJiik 7## I K kkmsW   B>B0B>B )B*B BB B>B B B;3B64B;;B>c           
     
  K   t         j                  j                  t         j                  j                  h}|j                  |vrt        ddj                  |             t        j                  | ||       d{   }|t        d      |j                  t         j                  j                  t         j                  j                  fv rt        d      	 t        j                  | ||j                  |j                  |t        j                  t        j                        d       d{   }| j                          d{    t%        |      S 7 7 )7 # t         $ r | j#                          d{  7    w xY ww)zGTransition anomali to closed_valid or false_positive with audit fields.z&Status resolve harus salah satu dari: z, Nr9   zAnomali sudah diresolve)r   r    r   r   )r   CLOSED_VALIDvalueFALSE_POSITIVEr   r;   joinr   r:   rI   r    r   nowr   utcrB   r   rC   r.   )r4   r   r<   rD   r   valid_statusesr=   rK   s           r-   resolve_anomalirU   j   sF     $00668T8T8Z8Z[N{{.(A$))NB[A\]^^%//JHHF~233}}3399=;W;W;];]^^233
*11"fkk $ 5 5,#<<5	?
   iik 7### I 	 kkms\   A:F<E=AFAE .E/E EE FE E F 8E;9F  Fc                J   K   t        j                  | |       d {   S 7 w)N)r   count_active)r4   r   s     r-   rW   rW      s     #00W====s   #!#)r,   r   returnr
   )NNr   2   )r4   r   r   intr   
str | Noner   r[   r1   rZ   r2   rZ   rX   z!tuple[list[AnomaliResponse], int])r4   r   r   rZ   r<   rZ   rX   r
   )r4   r   r   rZ   rD   r	   rX   r
   )
r4   r   r   rZ   r<   rZ   rD   r   rX   r
   )r4   r   r   rZ   r<   rZ   rD   r   r   rZ   rX   r
   )r4   r   r   rZ   rX   rZ   )__doc__
__future__r   r   r   app.models.anomalir   r   app.repositoriesr   app.schemas.anomalir	   r
   r   r   sqlalchemy.excr   r   sqlalchemy.ext.asyncior   r.   r7   r>   rE   rL   rU   rW   r&   r/   r-   <module>rc      s+   N " ' ; / ] ] : /: 555 5 	5
 5 5 '5##"#03####"#*7##.$$"$03$;H$$($$"$03$;I$[^$$8>r/   