
    ]i                        d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ ddlmZ  ed	d
g      Zdeez  defdZej1                  de       ed       ed       edd       edd       eddd       ee       ee      fdededz  dedz  dedz  deded e
d!edefd"       Zej1                  d#e       ee       ee      fded$ed e
d!edef
d%       Zej=                  d&eej>                  '       ee       ee      fded$ed e
d!edef
d(       Z ejC                  d)e       ee       ee      fded$ed e
d!edef
d*       Z"y)+zORouter for Rekonsiliasi Harian (daily sounding-based reconciliation) endpoints.    )date)	APIRouterDependsHTTPExceptionQuerystatus)AsyncSession)get_db)get_current_userget_spbu_access)User)rekonsiliasi_servicez/spbus/{spbu_id}/rekonsiliasirekonsiliasi)prefixtagsereturnc                     t        | t              r$t        t        j                  t        |             S t        t        j                  t        |             S )N)status_codedetail)
isinstancePermissionErrorr   r   HTTP_403_FORBIDDENstrHTTP_400_BAD_REQUEST)r   s    :/var/www/html/spbu.com/backend/app/routers/rekonsiliasi.py_service_errorr      s:    !_%)B)B3q6RRV%@%@QPP     )response_modelN)defaultr   )r!   alias)r!   ge2         )r!   r#   lespbu_idtanggal_mulaitanggal_akhirstatus_filterskiplimitdbcurrent_userc           	        K   	 t        j                  || |||||       d{   \  }}	|D cg c]  }|j                          c}|	||z  dz   |ddS 7 2# t        t        f$ r}
t	        |
      d}
~
ww xY wc c}w w)z'List daily reconciliations for an SPBU.)r)   r*   r   r,   r-   Nr%   )totalpageper_page)datameta)r   list_rekonsiliasi
ValueErrorr   r   
model_dump)r(   r)   r*   r+   r,   r-   r.   r/   rowsr1   r   rs               r   r6   r6      s     	 0BB'' U
 
e *..A.):N 
 (  Q  /sB   A?A AA A?A:A?A A7'A22A77A?z
/{tanggal}tanggalc                 ~   K   t        j                  || |       d{   }|dddS d|j                         iS 7 w)z.Get reconciliation detail for a specific date.Nz/Rekonsiliasi belum dijalankan untuk tanggal inir4   messager4   )r   get_rekonsiliasir8   )r(   r;   r.   r/   results        r   r?   r?   5   sJ      (88WgNNF~)Z[[F%%'(( Os   =;=z/{tanggal}/run)r    r   c                    K   	 t        j                  || ||j                         d{   }|j                         ddS 7 # t        t        f$ r}t        |      d}~ww xY ww)zIRun (or re-run) daily reconciliation. All shifts must be submitted first.Nz'Rekonsiliasi harian berhasil dijalankanr=   )r   run_rekonsiliasiidr7   r   r   r8   r(   r;   r.   r/   r@   r   s         r   rB   rB   C   sj      +<<,//
 

 %%'4]^^
 (  Q 7   A%%A AA A%A A"AA""A%z/{tanggal}/approvec                    K   	 t        j                  || ||j                         d{   }|j                         ddS 7 # t        t        f$ r}t        |      d}~ww xY ww)z!Approve a pending reconciliation.NzRekonsiliasi berhasil diapprover=   )r   approve_rekonsiliasirC   r7   r   r   r8   rD   s         r   rG   rG   T   sj      +@@,//
 

 %%'4UVV
 (  Q rE   )#__doc__datetimer   fastapir   r   r   r   r   sqlalchemy.ext.asyncior	   app.core.databaser
   app.dependenciesr   r   app.models.userr   app.servicesr   routerr7   r   r   getdictintr   r6   r?   postHTTP_201_CREATEDrB   patchrG    r   r   <module>rX      sK   U  D D / $ >   -	*
	
Qj?2 Q} Q Bt$ "'t!4!&t!4 %d( CaA&raC0v 1$; $; :	
   	  
 %6 L. v 1	
)
)
) 	
) 	
)
 

) /
) d@W@WX v 1	___ 	_ 	_
 
_ Y_  "48 v 1	WWW 	W 	W
 
W 9Wr   