
    ]i                        d 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dlmZmZ de
d	ed
ee   fdZde
d	ededed
ef
dZde
ded
edz  fdZ	 	 	 	 	 	 	 d%de
d	ededz  dedz  dedz  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
ef
dZde
deded
efd Zde
ded
dfd!Zde
ded"ed
efd#Zde
ded
efd$Zy)&zExpense repository.    )date)Decimal)funcselector_)AsyncSession)selectinload)ExpenseExpenseKategoridbspbu_idreturnc           
        K   | j                  t        t              j                  t        j                  j                  d      t        t        j                  j                  d      t        j                  |k(              j                  t        j                  t        j                               d{   }t        |j                         j                               S 7 +w)z<Return global + SPBU-specific categories, ordered by urutan.TN)executer   r   where	is_activeis_r   r   order_byurutanidlistscalarsall)r   r   results      E/var/www/html/spbu.com/backend/app/repositories/expense_repository.pyget_kategori_listr      s     ::	%%))$/''++D1?3J3Jg3UV

 
/((/*<*<	= F  $$&''s   B3C#5C!6,C#namar   c                    K   t        |||      }| j                  |       | j                          d {    | j                  |       d {    |S 7 7 w)N)r   r   r   )r   addflushrefresh)r   r   r   r   kats        r   create_kategorir#      sM     
'V
DCFF3K
((*
**S/J s!   3AAAAAAkat_idNc                 ~  K   | j                  t        t              j                  t        j                  |k(               d {   }|j                         }|y |j                         D ]  \  }}|	t        |||        | j                          d {    | j                  |       d {    |S 7 r7 !7 
wN)
r   r   r   r   r   scalar_one_or_noneitemssetattrr    r!   )r   r$   kwargsr   r"   kvs          r   update_kategorir-   "   s     ::f_5;;O<N<NRX<XYZZF

#
#
%C
{1=CA  ((*
**S/J [ s<   AB=B7/B=5"B=B9B=0B;1B=9B=;B=tanggaltanggal_from
tanggal_tolaporan_shift_idkategori_idskiplimitc	           
      B  K   t        t              j                  t        j                  |k(        j	                  t        t        j                        t        t        j                        t        t        j                        t        t        j                        t        t        j                        t        t        j                              j                  t        j                  j                         t        j                  j                               }	|r"|	j                  t        j                  |k(        }	|r"|	j                  t        j                  |k\        }	|r"|	j                  t        j                  |k        }	|r"|	j                  t        j                   |k(        }	|r"|	j                  t        j"                  |k(        }	| j%                  t        t'        j(                               j+                  |	j-                                      d {   }
|
j/                         }| j%                  |	j1                  |      j3                  |             d {   }t5        |j7                         j9                         j;                               |fS 7 7 =wr&   )r   r
   r   r   optionsr	   kategori
created_bysubmitted_byreviewed_byrecalled_byunlocked_byr   r.   descr   r1   r2   r   r   countselect_fromsubquery
scalar_oneoffsetr4   r   r   uniquer   )r   r   r.   r/   r0   r1   r2   r3   r4   querycount_qtotalr   s                r   get_all_expensesrG   /   s     	w	w')	*	))*++,--.,,-,,-,,-

 
'//&&('**//*;	< 
 GOOw67GOO|;<GOOz9:G448HHIG//;>?JJvdjjl3??@PQRRG E::ell4066u=>>F '')--/0%77 S>s%   HJJAJJ <JJ
expense_idc                   K   | j                  t        t              j                  t        j                  |k(  t        j
                  |k(        j                  t        t        j                        t        t        j                        t        t        j                        t        t        j                        t        t        j                        t        t        j                                     d {   }|j                         S 7 wr&   )r   r   r
   r   r   r   r6   r	   r7   r8   r9   r:   r;   r<   r'   )r   rH   r   r   s       r   get_expense_by_idrJ   X   s     ::w	wzzZ'G)C	D	))*++,--.,,-,,-,,-

 F $$&&s   C2D4D	5Duser_iddatac                    K   t        d||d|}| j                  |       | j                          d {    | j                  |       d {    t	        | |j
                  |       d {   S 7 <7 %7 w)N)r   created_by_id )r
   r   r    r!   rJ   r   )r   r   rK   rL   expenses        r   create_expenserQ   h   si     EgWEEGFF7O
((*
**W
"2wzz7;;; ;s3   3A8A2A8A4A8-A6.A84A86A8rP   c                   K   |j                         D ]  \  }}|	t        |||        | j                          d {    | j                  |       d {    t	        | |j
                  |j                         d {   S 7 F7 /7 wr&   )r(   r)   r    r!   rJ   r   r   )r   rP   rL   r+   r,   s        r   update_expenserS   p   su     

1=GQ"  ((*
**W
"2wzz7??CCC Cs8   B"BBBB(B B	BB	Bc                 v   K   | j                  |       d {    | j                          d {    y 7 7 wr&   )deleter    )r   rP   s     r   delete_expenserV   y   s0     
))G

((* s   959799urlc                    K   ||_         | j                          d {    | j                  |       d {    t        | |j                  |j
                         d {   S 7 F7 /7 wr&   )	bukti_urlr    r!   rJ   r   r   )r   rP   rW   s      r   update_bukti_urlrZ   ~   sV     G
((*
**W
"2wzz7??CCC Cs1   A*A$A*A&(A*A( A*&A*(A*c           	        K   | j                  t        t        j                  t        j                  t
        j                        d            j                  t
        j                  |k(               d{   }|j                         S 7 w)z.Sum of all expenses for a given laporan_shift.r   N)
r   r   r   coalescesumr
   jumlahr   r1   rA   )r   r1   r   s      r   get_total_by_shiftr_      se     ::t}}TXXgnn5q9:	w''+;;	< F 	s   A3B5B
6B)NNNNNr   2   )__doc__datetimer   decimalr   
sqlalchemyr   r   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr	   app.models.expensesr
   r   intr   r   strr#   r-   tuplerG   rJ   dictrQ   rS   rV   rZ   r_   rO       r   <module>rm      s      ( ( / ' 8
( 
(s 
(tO?T 
(l S  S Ud 
l 
C 
oX\F\ 
    $"#'"&8&8&8 D[&8 +	&8
 t&8 Dj&8 t&8 &8 &8 4=#&8R' '# ' 'PWZ^P^ ' <\ <C <# <T <V] <D\ DG D4 DG D\ G  
D| Dg DC DG D   rl   