
    ;&i)                        d dl mZmZmZmZ d dlZd dlmZ d dlm	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ  ej:                  e      Zde	dededefdZ de	dee!   dee   fdZ"dde	dee!   dee   fdZ#	 dde	de!de!deee   ef   fdZ$de	dee!ee%e!ee!   f   f   fdZ&de	dee!ee%e!ee!   f   f   fdZ'y)    )DictListUnionOptionalN)status)Session)selectand_or_funcdescasc)APIException)
SiteMaster)
UserSchema)SiteMasterSchema)SiteMasterCreateRequestSchema)DEFAULT_SITE_MASTERdbpayload
created_byreturnc           
        K   	 t        |j                  |j                  |j                  |j                        }| j                  |       | j                          | j                  |       t        j                  |      S # t        $ rZ}| j                          t        j                  d|        t        t        i t         j"                  dt%        |             d}~ww xY ww)z=
    Create a new site master entry using SQLAlchemy 2.0
    )keyvaluelabelgroupz"Error creating site master entry: z$Failed to create site master entry: moduleerrorstatus_codemessageN)r   r   r   r   r   addcommitrefreshr   model_validate	Exceptionrollbackloggerr    r   __name__r   HTTP_400_BAD_REQUESTstr)r   r   r   site_masteres        \/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/apps/site_masters/services.pycreate_master_entryr0      s     
 ------	
 	{
		


;..{;; 

9!=>33:3q6(C	
 	

s*   C(A=B C(	C%AC  C%%C(keysc                    	 t        t              j                  t        t        j                  j                  |                  }| j                  |      j                         j                         }|D cg c]  }t        j                  |       c}S c c}w # t        $ r$}t        j                  d|        g cY d}~S d}~ww xY w)z>
    Get site master entries by keys using SQLAlchemy 2.0
    z+Error getting site master entries by keys: N)r	   r   wherer
   r   in_executescalarsallr   r&   r'   r)   r    )r   r1   stmtresultitemr.   s         r/   get_by_keysr;   2   s    j!''""4(
 D!))+//1BHI$ //5III B1#FG	s0   A5B 7BB B 	C$C=CCsearchc                 n   	 t        t              }t        t        d      r.|j                  t        j                  j                  d            }|rt        j                  j                  d| d      t        j                  j                  d| d      t        j                  j                  d| d      t        j                  j                  d| d      g}|j                  t        |       }|j                  t        t        j                        t        t        j                              }| j                  |      j!                         j#                         }|D cg c]  }t%        j&                  |       c}S c c}w # t(        $ r$}t*        j-                  d|        g cY d}~S d}~ww xY w)z:
    Get all site master entries using SQLAlchemy 2.0
    
deleted_atN%z'Error getting all site master entries: )r	   r   hasattrr3   r>   is_r   iliker   r   r   r   order_byr   display_orderr5   r6   r7   r   r&   r'   r)   r    )r   r<   r8   search_conditionsr9   r:   r.   s          r/   get_allrF   E   sZ   j!:|,::j3377=>D $$q]3  &&6(!}5  &&6(!}5  &&6(!}5	! ::c#456D }}S!9!9:C
<OPD!))+//1BHI$ //5III >qcBC	s0   E!F #F?F F 	F4F/)F4/F4c                   K   g }t        |      dkD  rT|j                  d      }t        |      dkD  r!t        t        i t        j
                  d      t        | |      }d}d|v rnt        | |	      }i }|D ]=  }|j                  |vrg ||j                  <   ||j                     j                  |       ? d|v rr||d<   |S w)
z6
    List site master entries with SQLAlchemy 2.0
    r   ,
   z0A maximum of 10 entries can be requested at oncer   )r   r1   N
industries)r<   )
lensplitr   r*   r   r+   r;   rF   r   append)r   r1   r<   itemsentriesrJ   responseentrys           r/   list_master_entriesrR   d   s      %'E
4y1}**S/w<""77J	  r0 
4 6* H *99H$"$HUYY""5)* t
!+Os   CCc                    	 t         j                  d       t        t        j                  t
        j                              }| j                  |      j                         xs d}t         j                  d|        g }g }g }g }t        D ]  }	 t        t
              j                  t        t
        j                  |j                  d      k(  t
        j                  |j                  d      k(              }| j                  |      j                         }	|	st        di |}
|j!                  |
       |j!                  |j                  d       d|j                  d              t         j#                  d|j                  d       d|j                  d              nm|j!                  |j                  d       d|j                  d              t         j#                  d|j                  d       d|j                  d               |rD| j+                  |       | j-                          t         j                  dt/        |       d       nt         j                  d       | j                  |      j                         xs d}ddt/        |      t/        |      t/        |      t/        t              |||r|dd ng |r|dd ng |d}t         j                  dt/        |       dt/        |       dt/        |       d       |S # t$        $ rR}d	|j                  dd
       dt'        |       }|j!                  |       t         j)                  |       Y d}~d}~ww xY w# t$        $ rL}| j1                          dt'        |       }t         j)                  |       d|ddddddg g |gdcY d}~S d}~ww xY w)z
    Populate SiteMaster table with default data from seeder using SQLAlchemy 2.0
    
    Args:
        db: Database session
        
    Returns:
        Dictionary containing operation results with counts and messages
    z0Starting to populate default site master data...r   z(Current SiteMaster records in database: r   r   z -> zWill insert: zSkipped (exists): zError processing item unknownz: NzSuccessfully inserted z new SiteMaster recordsz2No new records to insert - all data already existsTz%Site master data population completedrI      successr"   records_insertedrecords_skippedrecords_with_errorstotal_processeddatabase_total_beforedatabase_total_afterinserted_itemsskipped_itemserror_itemszPopulation summary: z inserted, z
 skipped, z errorsz%Failed to populate site master data: F    )r)   infor	   r   countr   idr5   scalarr   r3   r
   r   getr   scalar_one_or_nonerM   debugr'   r,   r    add_allr$   rK   r(   )r   
total_stmtcurrent_total	to_insertinserted_recordsskipped_recordserror_recordsr:   exists_stmtexisting_recordr-   
item_error	error_msgfinal_totalr9   r.   s                   r/   !populate_default_site_master_datarv      s   W
FG DJJz}}56


:.557<1>}oNO 	 ( 	(D($Z066"$((5/9"((DHHW,== #%**["9"L"L"N&","4t"4K$$[1$++txx.?tDHHWDUCV,WXLL=%0AdhhwFWEX!YZ#**dhhuo->d488GCTBU+VWLL#5dhhuo5Fd488T[K\J]!^_'	(6 JJy!IIKKK0Y0@@WXYKKLM jj,335: > #$4 5"?3#&}#5"#67%2$/7G.s3R4C_Ra0(
 	*3/?+@*ASQ`MaLbblmpq~m  mA  AH  I  	JA  (4TXXeY5O4PPRSVWaSbRcd	$$Y/Y''(D  

;CF8D	Y   ! #$ %&$% %;
 	

sL   BM0 F LD M0 	M-AM("M0 (M--M0 0	O9AO :O Oc                    	 t        t        j                  t        j                              }| j                  |      j                         xs d}t        t              }||k\  rdd| d| dd|dd||g d| d| gg dS t        j                  d| d| d	       t        |       S # t        $ r<}d
t        |       }t        j                  |       d|ddddddg g |gdcY d}~S d}~ww xY w)z
    Populate site master data only if the table is empty or has fewer records than the default dataset
    
    Args:
        db: Database session
        
    Returns:
        Dictionary containing operation results
    r   Tz/Site master table already has sufficient data (/z	 records)z
Table has z records, expected rV   z. Proceeding with population...z"Failed to check site master data: Fra   N)r	   r   rd   r   re   r5   rf   rK   r   r)   rc   rv   r'   r,   r    )r   rk   rl   expected_totalr.   rt   s         r/   seed_site_master_data_if_emptyrz      s"   '
DJJz}}56


:.557<101N*L]O[\]k\lluv$%#0'(#$)6(5"$$.}o=PQ_P`"a!b!  	j/B>BRRqrs044 
8QA	Y  ! #$ %&$% %;
 	

s$   A>B( &B( (	C-11C("C-(C-)N)(typingr   r   r   r   logging	starletter   sqlalchemy.ormr   
sqlalchemyr	   r
   r   r   r   r   src.core.exceptionsr   (src.apps.site_masters.models.site_masterr   "src.apps.users.schemas.user_commonr   0src.apps.site_masters.schemas.site_master_commonr   2src.apps.site_masters.schemas.site_master_requestsr   )src.apps.site_masters.seeders.site_masterr   	getLoggerr*   r)   r0   r,   r;   rF   rR   intrv   rz   rb       r/   <module>r      sJ   . .   " 9 9 , ? 9 M \ I			8	$

7
EO

DG 49 6F1G & # $?O:P @ +/((($'(
4 !4'((Va
' a
d3c3PTUXPYFY@Z;Z6[ a
H1
w 1
4U3TRUYCV=W8W3X 1
r   