
    ]i                        d Z ddlmZmZmZ ddlmZ ddl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mZ ddlmZmZmZ 	 	 	 	 	 d&d
ededd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e   def
dZd
ededee   defdZ	 	 	 	 d'd
edededed	z  ded	z  ded	z  de defdZ!d
eded ed!edd	f
d"Z"d
eded#ed$edee   f
d%Z#y	)(uK   Operational repository — DB queries for LaporanShift and PenjualanNozzle.    )datedatetimetimezone)Decimal)deletefuncselectupdate)AsyncSession)selectinload)LaporanShiftPenjualanNozzleStatusLaporan)IslandNozzleShiftNdbspbu_idtanggalzdate | Noneshift_idstatusskiplimitreturnc           	        K   ddl m} t        t              j	                  t        j
                  |k(        j                  t        t        j                        t        t        j                        t        t        j                        t        t        j                        t        t        j                              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{   }	|	j1                         }
| j'                  |j3                  |      j5                  |             d{   }t7        |j9                         j;                         j=                               |
fS 7 7 =w)zJFetch paginated laporan_shift rows, with shift/user joins for name fields.r   )r   N)r   r   r	   r   wherer   optionsr   shiftsubmitted_byreviewed_byrecalled_bypenjualan_nozzleorder_byr   descidr   r   executer   countselect_fromsubquery
scalar_oneoffsetr   listscalarsuniqueall)r   r   r   r   r   r   r   r   querycount_qtotalresults               I/var/www/html/spbu.com/backend/app/repositories/operational_repository.pyget_all_laporanr5      s      	|	|##w.	/	++,223112112667

 
,&&++-|/C/C/E	F 
 L00G;<L11X=>L//69:JJvdjjl3??@PQRRG E::ell4066u=>>F '')--/0%77	 S ?s%   F<I>I?AII<II
laporan_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                        j                  t        j                        j                  t        j                         t        t        j                        j                  t        j                        j                  t        j"                                     d{   }|j%                         S 7 w)zaFetch a single LaporanShift by PK and SPBU, eagerly loading nozzle rows with their produk/island.N)r&   r	   r   r   r%   r   r   r   r   r   r    r!   r"   r   nozzler   islandprodukscalar_one_or_none)r   r6   r   r3   s       r4   get_laporan_by_idr<   4   s      ::|	|*,l.B.Bg.M	N	++,223112112667DD_E[E[\iijpjwjwx667DD_E[E[\iijpjwjwx

 F $$&&s   E&E?(E=)E?nozzle_rowsc                 j  K   t        |||t        j                        }| j                  |       | j	                          d{    |D ](  }| j                  t        dd|j                  i|       * | j	                          d{    t        | |j                  |       d{   S 7 h7 %7 w)zUInsert a new LaporanShift together with its PenjualanNozzle rows. Caller owns commit.)r   r   r   r   Nlaporan_shift_id )r   r   DRAFTaddflushr   r%   r<   )r   r   r   r   r=   laporanrows          r4   create_laporanrF   G   s      ""	G FF7O
((*
B

BcBC 
((*"2wzz7;;;  ;s7   AB3B-AB3	B/
B3(B1)B3/B31B3rD   c                   K   | 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)zXReplace all PenjualanNozzle rows for a laporan (delete-then-insert). Caller owns commit.Nr?   r@   )
r&   r   r   r   r?   r%   rB   rC   r<   r   )r   rD   r=   rE   s       r4   update_laporan_nozzlesrH   ^   s      **%%o&F&F'**&TU   
B

BcBC 
((*"2wzz7??CCC
 Cs7   ACCACC(C<C=CCCuser_idcatatanunlock_reasonrecallc                   K   t        j                  t        j                        }||_        |t
        j                  k(  r|||_        ||_        ny|t
        j                  t
        j                  fv r|||_        ||_        |E||_        n=|t
        j                  k(  r*|r|||_        ||_        d|_        d|_        n	|||_        | j%                          d{    |S 7 w)z[Transition the status of a LaporanShift, setting relevant audit fields. Caller owns commit.N)r   nowr   utcr   r   	SUBMITTEDsubmitted_by_idsubmitted_atAPPROVEDREJECTEDreviewed_by_idreviewed_atcatatan_reviewrA   recalled_by_idrecalled_atrK   rC   )r   rD   r   rI   rJ   rK   rL   rN   s           r4   update_statusrZ   k   s      ,,x||
$CGN(((W-@")"	M**M,B,BC	CH[!(!%,G"	=&&	&g)%,G""%G&*G##'G &$1G!
((*N s   CC&C$C&	nozzle_idteller_terakhir_manualteller_terakhir_digitalc                    K   | j                  t        t              j                  t        j                  |k(        j                  ||             d{    | j                          d{    y7 7 w)zaUpdate both teller_terakhir fields on a Nozzle record after a shift is saved. Caller owns commit.)r\   r]   N)r&   r
   r   r   r%   valuesrC   )r   r[   r\   r]   s       r4   update_nozzle_tellerr`      si      **v	vyyI%	&	#9$; 
 

   ((* s$   AA7A3A7-A5.A75A7prev_tanggalprev_shift_idc                 d  K   | j                  t        t              j                  t        t        j
                  t        j                  k(        j                  t        j                  |k(  t        j                  j                  d      t        j                  j                  d            j                  t        j                  t        j                               d{   }t        |j!                         j#                               }| j                  t        t$              j'                  t)        t$        j*                              j                  t$        j                  |k(  t$        j,                  |k(  t$        j.                  |k(  t$        j0                  j3                  t4        j6                  t4        j8                  t4        j:                  g                   d{   }|j=                         }i }|r$|j*                  xs g D ]  }	|	||	j>                  <    |D 
cg c]|  }
|
j                  |
j                  |v r||
j                     j@                  nd|
j                  |v r||
j                     jB                  nd|
jD                  xs d|
j                  |vd~ c}
S 7 7 c c}
w w)zReturn teller_akhir from the previous shift's submitted/approved laporan for each active nozzle.

    If no qualifying laporan exists for (spbu_id, prev_tanggal, prev_shift_id),
    is_first_time=True for every nozzle.
    TNmanual)r[   r\   r]   primary_telleris_first_time)#r&   r	   r   joinr   	island_idr%   r   r   	is_activeis_
deleted_atr#   urutannamar,   r-   r/   r   r   r   r"   r   r   r   in_r   rP   rS   LOCKEDr;   r[   teller_akhir_manualteller_akhir_digitalre   )r   r   ra   rb   nozzle_resultnozzleslaporan_resultprev_laporannozzle_row_maprE   ns              r4   get_teller_initrx      s      **v	ff&&&))3	4	v~~(&*:*:*>*>t*DfFWFWF[F[\`Fa	b	&--	-	 M =((*..01G ::|	l;;<	=	  G+  L0!!]2##'')?)?AUAU% 	

 N "446L 46N006B6C,/N3==) 7 	 A RSRVRVZhRhnQTT&:&N&NnrTUTXTX\jTj~add';'P'Ppt..:(TT7	
 	 	;(	s9   CJ0J& DJ0!J)"A J0"BJ+#J0)J0+J0)NNNr      )NNNF)$__doc__r   r   r   decimalr   
sqlalchemyr   r   r	   r
   sqlalchemy.ext.asyncior   sqlalchemy.ormr   app.models.operationalr   r   r   app.models.spbur   r   r   inttupler,   r5   r<   dictrF   rH   strboolrZ   r`   rx   r@       r4   <module>r      s	   Q - -  3 3 / ' O O 1 1 "#'#8#8#8 #8 Dj	#8
 D #8 #8 #8 4s"##8L''"%'03'D'&<<< <
 d< <.
D
D+
D:>t*
D
D"  $      4Z	 
 4Z  :     F $ %	
 
$222 2 	2
 
$Z2r   