
    ]i                     \   d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZ 	 	 	 	 	 ddeded	edz  d
edz  dededeee
   ef   fdZde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ededee   de
fdZ	 ddede
dedee   dz  de
f
dZ	 ddede
d	ededz  de
f
dZdede
dedede
f
dZy)u8   Penebusan repository — DB queries for BBM procurement.    )deletefuncselect)AsyncSession)selectinload)	PenebusanPenebusanItemStatusPenebusanNdbspbu_idstatusbooking_codeskiplimitreturnc                 L  K   t        t              j                  t        j                  |k(        j	                  t        t        j                        t        t        j                        j                  t        j                              j                  t        j                  j                         t        j                  j                               }|"|j                  t        j                  |k(        }|"|j                  t        j                  |k(        }|2|j                  t        j                  j!                  d| d            }| j#                  t        t%        j&                               j)                  |j+                                      d{   }|j-                         }	| j#                  |j/                  |      j1                  |             d{   }
t3        |
j5                         j7                         j9                               |	fS 7 7 =w)z<Fetch paginated penebusan rows with items and relationships.N%)r   r   wherer   optionsr   
created_byitemsr	   produkorder_bytanggaldescidr   r   ilikeexecuter   countselect_fromsubquery
scalar_oneoffsetr   listscalarsuniqueall)r   r   r   r   r   r   r   querycount_qtotalresults              G/var/www/html/spbu.com/backend/app/repositories/penebusan_repository.pyget_all_penebusanr-   
   s     	y	y  G+	,	--.)66}7K7KL

 
)##((*ILL,=,=,?	@ 
 I--89I,,67I22881\N!9LMNJJvdjjl3??@PQRRG E::ell4066u=>>F '')--/0%77	 S ?s%   FH$H AH$$H"%<H$"H$penebusan_idc           	        K   | j                  t        t              j                  t        j                  |k(  t        j
                  |k(        j                  t        t        j                        t        t        j                        t        t        j                        j                  t        j                                     d{   }|j                         S 7 w)zKFetch a single Penebusan by PK and SPBU, eagerly loading items with produk.N)r   r   r   r   r   r   r   r   r   spbur   r	   r   scalar_one_or_none)r   r.   r   r+   s       r,   get_penebusan_by_idr2   +   s      ::y	y|||+Y->->'-I	J	--.()66}7K7KL

 F $$&&s   CC 	C
C c                    K   | j                  t        t              j                  t        j                  |k(  t        j
                  |k(               d{   }|j                         S 7 w)zHCheck if a penebusan with this booking_code already exists for the SPBU.N)r   r   r   r   r   r   r1   )r   r   r   r+   s       r,   get_penebusan_by_booking_coder4   ;   s`      ::y(""l2	
 F $$&&s   AA-A+A-	data_dict
item_dictsc                 L  K   t        di |}| j                  |       | j                          d{    |D ](  }| j                  t        dd|j                  i|       * | j                          d{    t        | |j                  |d          d{   S 7 k7 (7 w)zGInsert a new Penebusan together with its PenebusanItem rows atomically.Nr.   r    )r   addflushr	   r   r2   )r   r5   r6   	penebusanitems        r,   create_penebusanr=   H   s      &I&IFF9
((*
}?),,?$?@ 
((*$Ry7KLLL	  Ls4   0B$BAB$7B 8!B$B"B$ B$"B$r;   c                   K   |j                         D ]  \  }}t        |||        |}| j                  t        t              j                  t        j                  |j                  k(               d{    |D ](  }| j                  t	        dd|j                  i|       * | j                          d{    t        | |j                  |j                         d{   S 7 r7 /7 w)z6Update header fields and optionally replace all items.Nr.   r8   )r   setattrr   r   r	   r   r.   r   r9   r:   r2   r   )r   r;   r5   r6   keyvaluer<   s          r,   update_penebusanrB   W   s       oo'
U	3& ( jj=!''(B(Bill(RS
 	
 	
 DFF=CillCdCD  ((*$Ry7H7HIII	
 Is7   A3C.5C(6AC.:C*;(C.#C,$C.*C.,C.no_soc                    K   ||_         |||_        | j                          d{    | j                  |       d{    t	        | |j
                  |j                         d{   S 7 F7 /7 w)z4Transition status, optionally setting the SO number.N)r   rC   r:   refreshr2   r   r   )r   r;   r   rC   s       r,   update_penebusan_statusrF   l   sg      I	
((*
**Y
$Ry7H7HIII Is2   $A3A-A3A/ (A3(A1)A3/A31A3
field_nameurlc                    K   t        |||       | j                          d{    | j                  |       d{    t        | |j                  |j
                         d{   S 7 F7 /7 w)z)Update pdf_do_url or pdf_bukti_bayar_url.N)r?   r:   rE   r2   r   r   )r   r;   rG   rH   s       r,   update_file_urlrJ   {   s^      Iz3'
((*
**Y
$Ry7H7HIII Is1   !A0A*A0A,(A0%A.&A0,A0.A0)NNNr      )N)__doc__
sqlalchemyr   r   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   app.models.penebusanr   r	   r
   intstrtupler$   r-   r2   r4   dictr=   rB   rF   rJ   r8       r,   <module>rV      s   > + + / ' J J %)#888 d"	8
 *8 8 8 4	?C 8B''$''25'' 
'
'"
'25
'
'MMM T
M 	M& %)	JJJ J T
T!	J
 J2 	JJJ J :	J
 J
J
J
J 
J 
	
J
 
JrU   