
    ]i	                     0   d Z ddl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lmZ ddlmZ d Z	 	 	 	 dd
ede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e   de	fdZd
ede	dd	fdZd
ededed	z  dedede
fdZd
edededefdZy	)u5   Penerimaan repository — DB queries for BBM receipt.    )funcselect)AsyncSession)selectinload)
PenerimaanPenerimaanFotoPenerimaanItem)Tangki)Produkc                     t        t        j                        t        t        j                        t        t        j                        t        t        j
                        t        t        j                        t        t        j                        t        t        j                        j                  t        t        j                        j                  t        j                        t        t        j                        j                  t        j                        t        t        j                        t        t        j                        t        t        j                              gS )z6Standard selectinload chain for full Penerimaan graph.)r   r   	penebusan
created_bysubmitted_byreviewed_byunlocked_byfotositemsoptionsr	   tangkir
   	kalibrasiprodukpenebusan_item     H/var/www/html/spbu.com/backend/app/repositories/penerimaan_repository.py_eager_optionsr      s     	Z))*Z**+Z,,-Z++,Z++,Z%%&Z%%&..../<<V=M=MN../<<V]]K../667--.	
 r   Ndbspbu_idpenebusan_idskiplimitreturnc                 X  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        t        j                               j                  |j                                      d {   }|j!                         }| j                  |j#                  |      j%                  |             d {   }	t'        |	j)                         j+                         j-                               |fS 7 7 =wN)r   r   wherer   r   r   order_bytanggaldescidr   executer   countselect_fromsubquery
scalar_oneoffsetr!   listscalarsuniqueall)
r   r   r'   r   r    r!   querycount_qtotalresults
             r   get_all_penerimaanr8      s;    	z	z!!W,	-	."	$ 
*$$))+Z]]-?-?-A	B	 
 J..'9:J33|CDJJvdjjl3??@PQRRG E::ell4066u=>>F '')--/0%77	 S ?s%   D!F*#F&$AF**F(+<F*(F*penerimaan_idc                   K   | j                   t        t              j                  t        j                  |k(  t        j
                  |k(        j                  t                       d {   }|j                         S 7 wr$   )	r*   r   r   r%   r)   r   r   r   scalar_one_or_none)r   r9   r   r7   s       r   get_penerimaan_by_idr<   9   sl      ::	z	z}}-z/A/AW/L	M	."	$ F
 $$&&s   A)B+B ,Bheader_dictitems_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)z>Create Penerimaan header + all PenerimaanItem rows atomically.Nr9   r   r   )r   addflushr	   r)   r<   )r   r=   r>   
penerimaan	item_dicts        r   create_penerimaanrD   D   s      *k*JFF:
((* 	
~GJMMGYGH !
((*%b*--Y9OPPP	  Ps4   0B$BAB$7B 8!B$B"B$ B$"B$rB   c                 v   K   | j                  |       d {    | j                          d {    y 7 7 wr$   )deleterA   )r   rB   s     r   delete_penerimaanrG   S   s0     
))J

((*  s   959799penerimaan_item_idtipeurlc                    K   t        ||||      }| j                  |       | j                          d {    | j                  |       d {    |S 7 7 w)N)r9   rH   rI   rJ   )r   r@   rA   refresh)r   r9   rH   rI   rJ   fotos         r   add_fotorN   X   sZ      #-	D FF4L
((*
**T
K s!   4AAAAAAfoto_idc                   K   | j                  t        t              j                  t        j                  |k(  t        j
                  |k(               d{   }|j                         }|t        d| d      |j                  }| j                  |       d{    | j                          d{    |S 7 d7  7 
w)zUDelete a foto record. Returns the stored file URL so the caller can clean up storage.NzFoto id=z tidak ditemukan)r*   r   r   r%   r)   r9   r;   
ValueErrorrJ   rF   rA   )r   rO   r9   r7   rM   rJ   s         r   delete_fotorR   k   s      ::~$$(((M9	
 F $$&D|8G9,<=>>
((C
))D/
((*J s7   ACB;ACB=C4B?5C=C?C)NNr      )__doc__
sqlalchemyr   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   app.models.penerimaanr   r   r	   app.models.spbur
   app.models.productr   r   inttupler0   r8   r<   dictrD   rG   strrN   rR   r   r   r   <module>r_      s\   ; # / ' L L " %, #888 *	8
 8 8 4
S !84''%('36'$'QQQ dQ 	Q *  
 d
 	
 
 &"36r   