
    ]i
                         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
 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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	fdZdede	ded
e	fdZy)uG   End-to-End repository — DB queries for the E2E reconciliation module.    )funcselect)AsyncSession)selectinload)EndToEndCycleStatusEndToEndc                      t        t        j                        t        t        j                        t        t        j                        gS )N)r   r   tangki
started_by	closed_by     H/var/www/html/spbu.com/backend/app/repositories/end_to_end_repository.py_eager_optsr   
   s6    ]))*]--.],,- 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 cycle by PK and SPBU.N)	executer   r   wherer   r   optionsr   scalar_one_or_none)r   r   r   results       r   	get_by_idr      sk     ::	}	}2%}'<'<'G	H	+-	! F
 $$&&s   A)B+B ,B	tangki_idc                 $  K   | j                   t        t              j                  t        j                  |k(  t        j
                  t        j                  k(        j                  t                       d{   }|j                         S 7 w)z-Check if there's an open cycle for this tank.N)r   r   r   r   r   statusr   OPENr   r   r   )r   r   r   s      r   get_open_by_tangkir       sw     ::	}	##y0  N$7$77

 
+-	! F $$&&s   A7B9B:Br   skiplimitc                 @  K    t        t              j                  t        j                  |k(        j                  t                }|"|j                  t        j                  |k(        }|"|j                  t        j                  |k(        }|j                  t        j                  j                         t        j                  j                               }| j                  t        t        j                               j                  |j!                                      d{   }|j#                         }| j                  |j%                  |      j'                  |             d{   }	t)        |	j+                         j-                               |fS 7 t7 /w)z6Return paginated E2E cycles for an SPBU, newest first.N)r   r   r   r   r   r   r   r   order_bytanggal_mulaidescr   r   r   countselect_fromsubquery
scalar_oneoffsetr"   listscalarsall)
r   r   r   r   r!   r"   querycount_qtotalr   s
             r   get_allr2   )   s5    	}	}$$/	0	+-	! 

 M33y@AM00F:;NN=66;;=}?O?O?T?T?VWEJJvdjjl3??@PQRRG E::ell4066u=>>F $$&'..	 S ?s%   D#F%F&AF,F-.FFdatac                   K   t        di |}| j                  |       | j                          d{    | j                  |       d{    t	        | |j
                  |j                         d{   S 7 F7 /7 w)z2Insert a new E2E cycle and return it fully loaded.Nr   )r   addflushrefreshr   r   r   )r   r3   cycles      r   creater9   D   sh      !D!EFF5M
((*
**U
2uxx777 7s3   0A?A9A?A;(A?4A=5A?;A?=A?r8   c                   K   |j                         D ]  \  }}t        |||        | j                          d{    | j                  |       d{    t	        | |j
                  |j                         d{   S 7 F7 /7 w)z(Apply update dict to a cycle and commit.N)itemssetattrr6   r7   r   r   r   )r   r8   r3   kvs        r   updater?   O   sn     

1q! 
((*
**U
2uxx777 7s3   9BBBB(B=B>BBB)NNr   2   )__doc__
sqlalchemyr   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   app.models.end_to_endr   r   r   intr   r    strtupler,   r2   dictr9   r?   r   r   r   <module>rJ      s
   M # / ' ?' '# ' 'PT@T '
' 
'# 
'-RVBV 
'  !/// Tz/ $J	/
 / / 4#$/688 888\ 8- 8t 8 8r   