
    ]i                     \   U d dl m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dgg dg d	d
dgdgdZeeee   f   ed<   ed   ed   z   ed   z   ed   z   ed   z   Zee   ed<   dedefdZdedededdfdZdedefdZdedededdfdZdede
fdZded e
deddfd!Zded"edefd#Zy)$    )text)IntegrityErrorSQLAlchemyError)AsyncSession)system_repository)NumberFormatConfigTruncateGrouppenjualan_nozzlelaporan_shift)stock_adjustment_item_fotostock_adjustment_itemstock_adjustment)penerimaan_fotopenerimaan_item
penerimaanpenebusan_item	penebusanexpenses
penyetoranend_to_end_cycle)	penjualanstockpenebusan_penerimaanexpenses_penyetoran
end_to_end_TRUNCATE_ORDERr   r   r   r   r   
_ALL_ORDERdbreturnc                 H   K   t        j                  |        d {   S 7 wN)r   is_maintenance_mode)r   s    =/var/www/html/spbu.com/backend/app/services/system_service.pyget_maintenance_moder$   $   s     "66r::::s   " "enableduser_idNc                   K   	 t        j                  | t         j                  t        |      j	                         |       d {    | j                          d {    y 7 7 # t        $ r | j                          d {  7    w xY wwr!   )r   
set_configMAINTENANCE_KEYstrlowercommitr   rollback)r   r%   r&   s      r#   set_maintenance_moder.   (   s|     **!113w<3E3E3G
 	
 	
 iik	
 	 kkmsM   BA A& A"A& A$A& !B"A& $A& &B
BB

Bc                    K   t        j                  | t         j                         d{   }|r|j                  S dS 7 w)z?Return current environment mode: 'development' or 'production'.N
production)r   
get_configENV_MODE_KEYvalue)r   configs     r#   get_env_moder5   5   s9     $//4E4R4RSSF!6<<3|3 Ts   (A?Amodec                   K   |dvrt        d      	 t        j                  | t        j                  ||       d {    | j	                          d {    y 7 7 # t
        $ r | j                          d {  7    w xY ww)N)developmentr0   z*mode must be 'development' or 'production')
ValueErrorr   r(   r2   r,   r   r-   )r   r6   r&   s      r#   set_env_moder:   ;   s     00EFF**!..g
 	
 	
 iik	
 	 kkmsJ   B)A AA AA BA A B:A=;BBc                 `  K   t         }|j                  | |j                         d {   }|j                  | |j                         d {   }|j                  | |j                         d {   }|j                  | |j
                         d {   }|j                  | |j                         d {   }t        |r|j                  nd|r|j                  nd|rt        |j                        nd|r|j                  nd|r|j                  dk(        S d      S 7 7 7 7 7 sw)N,.r   prefixtrueF)thousand_separatordecimal_separatordecimal_placesnegative_formatnegative_color)
r   r1   NUMBER_THOUSAND_SEP_KEYNUMBER_DECIMAL_SEP_KEYNUMBER_DECIMAL_PLACES_KEYNUMBER_NEGATIVE_FORMAT_KEYNUMBER_NEGATIVE_COLOR_KEYr   r3   int)r   rthousanddecimalplacesneg_fmt	neg_colors          r#   get_number_formatrQ   H   s     A\\"a&?&?@@HLLQ%=%=>>G<<A$?$?@@FLLQ%A%ABBGll2q'B'BCCI-58>>3+2'--,2s6<<()0h6?	61 
 FK  A>@BCsX   &D.D$#D.D&#D.0D(1#D.D*#D.8D,9A,D.&D.(D.*D.,D.fmtc                   K   |j                   |j                  k(  r|j                   dk7  rt        d      |j                  dvrt        d      d|j                  cxk  rdk  st        d       t        d      |j                  dvrt        d	      t
        }	 |j                  | |j                  |j                   |       d {    |j                  | |j                  |j                  |       d {    |j                  | |j                  t        |j                        |       d {    |j                  | |j                  |j                  |       d {    |j                  | |j                  t        |j                        j                         |       d {    | j                          d {    y 7 7 7 7 j7 %7 # t         $ r | j#                          d {  7    w xY ww)
N z:Thousand separator and decimal separator must be different)r=   r<   z$Decimal separator must be '.' or ','r      z&Decimal places must be between 0 and 4)r>   suffixparenthesesz<negative_format must be 'prefix', 'suffix', or 'parentheses')r@   rA   r9   rB   rC   r   r(   rE   rF   rG   r*   rH   rI   rD   r+   r,   r   r-   )r   rR   r&   rK   s       r#   set_number_formatrX   X   s     !6!663;Q;QUW;WUVV
J.?@@##(q(ABB )ABB
"EEWXXA	ll2q88#:P:PRYZZZll2q779N9NPWXXXll2q::C@R@R<SU\]]]ll2q;;S=P=PRYZZZll2q::C@R@R<S<Y<Y<[]deeeiik 	[X]Ze kkms   BG7+G G/G 6G78G /G0/G G
 AG &G'G >G?G G7G G G 
G G G G4,G/-G44G7groupc                 8  K   |dk(  rt         nt        |   }d}	 |D ]6  }| j                  t        d|              d{   }||j                  z  }8 | j                          d{    |S 7 /7 # t        $ r | j                          d{  7    w xY ww)zDelete all rows from the given operational table group.

    Returns total number of rows deleted across all affected tables.
    Only callable when environment_mode == 'development' (enforced by router).
    allr   zDELETE FROM N)r   r   executer   rowcountr,   r   r-   )r   rY   tablestotaltableresults         r#   truncate_grouprb   p   s      !E>Zu/EFEE::d\%+A&BCCFV__$E  iik L D kkmsK   B%A3 A/ (A3 (A1)A3 -B/A3 1A3 3BBBB)
sqlalchemyr   sqlalchemy.excr   r   sqlalchemy.ext.asyncior   app.repositoriesr   app.schemas.systemr   r	   r   dictr*   list__annotations__r   boolr$   rJ   r.   r5   r:   rQ   rX   rb        r#   <module>rn      sf    : / . @ %o6
 '5%&)c49n% & K g,-. +,- l#	$ DI ;< ;D ;

#
.1
	
4< 4C 4
< 
s 
S 
T 
 1C  -8;	0\ - C rm   