
    ]i|                        d 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 ddlmZ ddlmZmZ d	 Zd
 Zde	dedededz  fdZde	dededz  fdZde	dedededz  fdZ	 	 	 	 	 d&de	dedededee   dee   dee   deee   ef   fdZde	dededefdZde	dededefdZde	d edededz  fd!Z	 	 	 d'de	dedededee   deee   ef   fd"Zde	dededefd#Z de	d$ededefd%Z!y)(uK   Penyetoran repository — DB queries for the per-shift cash deposit module.    )date)Optional)funcselect)AsyncSession)selectinload)LaporanShift)
PenyetoranPenyetoranBatchc                      t        t        j                        t        t        j                        j                  t        j
                        t        t        j                        gS )z1Standard eager-load options for a Penyetoran row.)r   r
   
created_bylaporan_shiftr	   shiftbatch     H/var/www/html/spbu.com/backend/app/repositories/penyetoran_repository.py_eager_optsr      sI     	Z**+Z--.;;L<N<NOZ%%& r   c                  t   t        t        j                        t        t        j                        t        t        j                        j                  t
        j                        j                  t        j                        t        t        j                        j                  t
        j                        gS )z6Standard eager-load options for a PenyetoranBatch row.)
r   r   submitted_byreviewed_byitemsr
   r   r	   r   r   r   r   r   _batch_eager_optsr      sz     	_112_001_**+889Q9QR__`l`r`rs_**+889N9NO	 r   dbidspbu_idreturnNc                   K   | j                   t        t              j                  t        j                  |k(  t        j
                  |k(        j                  t                       d{   }|j                         S 7 w)z)Fetch a single Penyetoran by PK and SPBU.N)	executer   r
   wherer   r   optionsr   scalar_one_or_none)r   r   r   results       r   	get_by_idr$   )   si     ::	z	z}}"J$6$6'$A	B	+-	! F
 $$&&   A)B+B ,Blaporan_shift_idc                    K   | j                   t        t              j                  t        j                  |k(        j
                  t                       d{   }|j                         S 7 w)z0Fetch a Penyetoran by laporan_shift_id (unique).N)r   r   r
   r    r&   r!   r   r"   )r   r&   r#   s      r   get_by_laporan_shift_idr(   3   sa      ::	z	z**.>>	?	+-	! F
 $$&&s   AA0A.A0tanggalc                 `  K   | j                   t        t              j                  t        j                  |k(  t        j
                  |k(        j                  t                j                  t        j                        j                  d             d{   }|j                         S 7 w)uP   Fetch the first Penyetoran by SPBU + date (backward compat — may return None).   N)r   r   r
   r    r   r)   r!   r   order_byr   limitr"   )r   r   r)   r#   s       r   get_by_tanggalr.   ?   s      ::	z	z!!W,j.@.@G.K	L	+-	! 
*--	 	q F $$&&s   BB.B,B.skipr-   tanggal_from
tanggal_tostatusc                   K    t        t              j                  t        j                  |k(        j                  t                j                  t        j                  j                         t        j                  j                               }|"|j                  t        j                  |k\        }|"|j                  t        j                  |k        }|"|j                  t        j                  |k(        }| j                  t        t        j                               j                  |j                                      d{   }|j!                         }	| j                  |j#                  |      j%                  |             d{   }
t'        |
j)                         j+                               |	fS 7 t7 /w)z;Return paginated Penyetoran list for an SPBU, newest first.N)r   r
   r    r   r!   r   r,   r)   descr   r2   r   r   countselect_fromsubquery
scalar_oneoffsetr-   listscalarsall)r   r   r/   r-   r0   r1   r2   querycount_qtotalr#   s              r   get_allr@   M   sP    	z	z!!W,	-	+-	! 
*$$))+Z]]-?-?-A	B	 
 J..,>?J..*<=J--78JJvdjjl3??@PQRRG E::ell4066u=>>F $$&'..	 S ?s%   EG F<AG F>.G >G pdatac                   K   |j                         D ]  \  }}t        |||        | j                          d{    | j                  |       d{    t	        | |j
                  |j                         d{   S 7 F7 /7 w)z6Apply a partial update dict to a Penyetoran and flush.N)r   setattrflushrefreshr$   r   r   )r   rA   rB   kvs        r   updaterI   k   sm     

11a 
((*
**Q-2qttQYY/// /3   9BBBB(B=B>BBBurlc                    K   ||_         | j                          d{    | j                  |       d{    t        | |j                  |j
                         d{   S 7 F7 /7 w)z,Set the bukti_url on a Penyetoran and flush.N)	bukti_urlrE   rF   r$   r   r   )r   rA   rK   s      r   update_buktirN   t   sT     AK
((*
**Q-2qttQYY/// /s1   A*A$A*A&(A*A( A*&A*(A*batch_idc                   K   | j                   t        t              j                  t        j                  |k(  t        j
                  |k(        j                  t                       d{   }|j                         S 7 w)z.Fetch a single PenyetoranBatch by PK and SPBU.N)	r   r   r   r    r   r   r!   r   r"   )r   rO   r   r#   s       r   get_batch_by_idrQ      so      ::		!!X-/F/F'/Q	R	#%	' F
 $$&&r%   c                   K    t        t              j                  t        j                  |k(        j                  t                j                  t        j                  j                               }|"|j                  t        j                  |k(        }| j                  t        t        j                               j                  |j                                      d{   }|j                         }| j                  |j!                  |      j#                  |             d{   }t%        |j'                         j)                               |fS 7 t7 /w)z@Return paginated PenyetoranBatch list for an SPBU, newest first.N)r   r   r    r   r!   r   r,   r   r4   r2   r   r   r5   r6   r7   r8   r9   r-   r:   r;   r<   )	r   r   r/   r-   r2   r=   r>   r?   r#   s	            r   get_all_batchesrS      s    		&&'1	2	#%	' 
/$$))+	,	 
 O22f<=JJvdjjl3??@PQRRG E::ell4066u=>>F $$&'..	 S ?s%   C E"E#AE)E*.EEc                    K   t        dd|i|}| j                  |       | j                          d{    | j                  |       d{    t	        | |j
                  |       d{   S 7 <7 %7 w)z8Insert a new PenyetoranBatch and return it fully loaded.r   Nr   )r   addrE   rF   rQ   r   )r   r   rB   r   s       r   create_batchrV      si      4G4t4EFF5M
((*
**U
 UXXw777 7s3   2A7A1A7A3A7,A5-A73A75A7r   c                   K   |j                         D ]  \  }}t        |||        | j                          d{    | j                  |       d{    t	        | |j
                  |j                         d{   S 7 F7 /7 w)z;Apply a partial update dict to a PenyetoranBatch and flush.N)r   rD   rE   rF   rQ   r   r   )r   r   rB   rG   rH   s        r   update_batchrX      sp      

1q! 
((*
**U
 UXXu}}=== =rJ   )r   2   NNN)r   rY   N)"__doc__datetimer   typingr   
sqlalchemyr   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   app.models.operationalr	   app.models.penyetoranr
   r   r   r   intr$   r(   r.   strtupler:   r@   dictrI   rN   rQ   rS   rV   rX   r   r   r   <module>rf      s'   Q   # / ' / =' '# ' '
T@Q '	'	'(+	'$	'''"'-1'$'" #'!% /// / 	/
 4./ / SM/ 4
S !/<0\ 0j 0 0 00< 0J 0S 0Z 0	'	' #	'.1	't	'  /// / 	/
 SM/ 4 #%&/088"8*.88>>,>48>>r   