
    p.ieZ                        d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dl	m
c mc 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 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"m#Z# d dl$m%Z%m&Z& d dl'm(Z( d dl	m)Z)  G d d      Z*y)    N)Optional)load_workbook)descselect)Session)JWTPayloadSchema)FormHTTPException
UploadFile)Messages)TblCivil)TblDisplayBoard)TblElectricalCabling)TblGroup)TblMainData)StoreFormatBaseTblStoreFormat)remove_external_linkssafe_load_workbook)CustomResponse)StoreFormateUpdatec                       e Zd ZdedefdZdej                  fdZ e	d      fdej                  defdZ e	d      fd	ededefd
ZdefdZd	efdZy)StoreFormateServicedbtokenc                      || _         || _        y N)r   r   )selfr   r   s      D/var/www/html/retail-simulation-api/app/api/store_formate/service.py__init__zStoreFormateService.__init__   s    
    requestc                    K   t        j                  |j                               }t        j                  || j
                         | j
                  j                          t        dt        j                        S w)N1statusmessage)
r   model_validate
model_dumpr   creater   commitr   r   STOREFORMATE_CREAT)r   r"   created_users      r   create_store_formatez(StoreFormateService.create_store_formate   sT     &55g6H6H6JKlDGG4S(2M2MNNs   A9A;Nupload_store_layoutc                    | j                   j                  t        t              j	                  t        j
                  |j
                  k(              j                         }|st        dd      S |j                  |j                  g}| j                   j                  t        t              j	                  t        j                  j                  |            j                  t        t        j                              j!                  d            }|j                         }|st        dd      S |j"                  xs d|j$                  xs d|j&                  xs dd}|j(                  xs d|j*                  xs d|j,                  xs dd}|j.                  xs d|j0                  xs d|j2                  xs dd}	|j5                  |j6                        }
|
t        dd      S |j5                  |j8                        }|t        dd	      S |	j5                  |j:                        }|t        dd
      S d }|r]|j<                  }d| }t?        j@                  dd       tC        |d      5 }tE        jF                  |jH                  |       d d d        tK        jL                  |      }||_'        tQ        |
      |_        tQ        |      |_        tQ        |      |_        tS        di |jU                         }| j                   jW                  |       | j                   jY                          | j                   j[                  |       d}d}t]        ||      }t_        |       |ja                  |       ddd}|j5                  |jb                        }|r||   }|jd                  |d<   |ja                  |       |jg                          t        dth        jj                        S # 1 sw Y   ]xY w)N0zGroup not foundr%      z,Main data not found for the group's categoryr   LowMediumHighInvalid merchandise levelInvalid service parameter level!Invalid technology adoption leveluploads/uploadsTexist_okwb;uploaded_files/Simulation_Test_file_clean_final_output.xlsx+files/Simulation_Test_file_clean_final.xlsxAssu Sum Mod AAssu Sum Mod BzStore Format AzStore Format BI6r$    )6r   executer   r   wheregroup_idscalar_one_or_noner   category_assignedcategoryr   format_typein_order_byr   data_idlimitno_of_cats_lno_of_cats_mno_of_cats_h
services_l
services_m
services_h
tech_inv_l
tech_inv_m
tech_inv_hgetmerchandiseservice_parameterstechnology_adoptionfilenameosmakedirsopenshutilcopyfileobjfiler   r(   r/   strr   r)   addr+   refreshr   r   savestore_format_type
store_sizecloser   r,   )r   r"   r/   groupcategory_listresult	main_datamerchandise_mapservice_parameters_maptechnology_adoption_mapmerchandise_valueservice_value
tech_value
image_pathimage_filenamebuffer	new_storenew_store_dbOUTPUT_PATH
EXCEL_PATHworkbookformat_to_sheet
sheet_namesheets                           r   create_store_format3z(StoreFormateService.create_store_format3   s    8""8#4#48H8H#HI



 	 !6GHH ##NN

 ;U;**..}=>Xd;../0U1X	
 --/	!F  )).Q,,1**/a
 '',1**/a((-A"
 '',1**/a((-A#
 ,//0C0CD$!6QRR.2273M3MN !6WXX,001L1LM
!6YZZ 
099N#N#34JKK	D1j$'6""#6#;#;VD ( $227;	(2	% #$5 6	'*='9	$(+J	%%?	(<(<(>?L!% TB
%k:>h'k" /.

 %(()B)BC
Z(E#..E$Kk"S(2M2MNNY ('s   6!O22O<store_idc                 r  K   | j                   j                  t              j                  t        j                  |k(        j                         }|st        dd      |j                  d      t        fddD              rn| j                   j                  t              j                  t        j                  |j                  k(        j                         }|st        dd      |j                  |j                  g}| j                   j                  t        t              j!                  t        j"                  j%                  |            j'                  t)        t        j*                              j-                  d	            j/                         }|st        dd
      |j0                  xs d|j2                  xs d|j4                  xs dd}|j6                  xs d|j8                  xs d|j:                  xs dd}	|j<                  xs d|j>                  xs d|j@                  xs dd}
dv r:|jC                  |jD                        }|t        dd      tG        |      |_"        dv r:|	jC                  |jH                        }|t        dd      tG        |      |_$        dv r:|
jC                  |jJ                        }|t        dd      tG        |      |_%        jM                         D ]  \  }}|dvstO        |||        |r|jP                  rtS        jT                  dd       d|jP                   }tW        |d      5 }tY        jZ                  |j\                  |       d d d        |j^                  rHtR        j`                  jc                  |j^                        rtS        jd                  |j^                         ||_/        | j                   jg                          | j                   ji                  |       d}d}tk        ||      }tm        |       |jo                  |       ddd}|jC                  |jp                        }|r	 ||   }|jr                  |d<   |jo                  |       |jw                          | j                   j                  tx              j                  tx        j                  |j                  k(        j                         }| j                   j                  tz              j                  tz        j                  |j                  k(        j                         }| j                   j                  t|              j                  t|        j                  |j                  k(        j                         }|r|j~                  |jr                  z  |_@        |rZ|j                  d v r|j                  |jr                  z  |_C        n-|j                  d!k(  r|j                  |jr                  z  |_C        |r-|j                  d!k(  r|jr                  |j                  z  |_C        | j                   jg                          t        d"d#d$|j^                  i%      S # 1 sw Y   xY w# tt        $ r}t        ddtG        |             d }~ww xY ww)&Ni  zStore format not found)status_codedetailT)exclude_unsetc              3   &   K   | ]  }|v  
 y wr   rE   ).0kupdate_fieldss     r   	<genexpr>z;StoreFormateService.update_store_formate.<locals>.<genexpr>  s      JH '(qM!Hs   )r[   r\   r]   zGroup not found for mappingr2   zMain data not foundr   r3   r[   i  r7   r\   r8   r]   r9   r;   r<   r:   r>   r?   r@   rA   rB   rC   rD   i  zExcel update failed: )LightingCablingzRate per SQFTr$   z!Store format updated successfully	image_url)r&   r'   data)Hr   queryr   filterr   firstr
   r)   anyr   rH   rJ   rK   rF   r   r   rG   rL   rM   rN   r   rO   rP   rI   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   re   r\   r]   itemssetattrr^   r_   r`   ra   rb   rc   rd   r/   pathexistsremover+   rg   r   r   rh   ri   rj   	Exceptionrk   r   r   r   rate_per_sqft
total_sqftfeature_type	cost_unittotalchoice	rate_unitrate_per_sqr   )r   r   r"   r/   uploadrl   rm   ro   rp   rq   rr   	merch_valserv_valtech_valkeyvaluenew_image_pathfr{   r|   r}   	sheet_mapr   r   egroup_civilgroup_electricgroup_displayr   s                               @r   update_store_formatez(StoreFormateService.update_store_formate  s     GGMM.)VN++x78UW 	 C8PQQ***> JHJ J h'))V__<= 
 #<YZZ"44ennEM ;'U;2266}EFXd;#6#678U1X	 $#%  #<QRR !--2#005A!..3!O !++0q#..3!!,,1&" !++0q#..3!!,,1'# -+//0C0CD	$'C@[\\%(^" $}4155g6P6PQ#'C@abb,/M) %5266w7R7RS#'C@cdd-0]*'--/JCVVU+ 0 #6#?#?KK	D1'(;(D(D'EFNnd+q""#6#;#;Q? , ))bggnnV=W=W.X		&445)7F& TB
%k:>h'k" /.
	
 ]]6#;#;<
^ ,$//d 	k" GGMM(#VH%%89UW 	 GGMM./V(11V__DEUW 	 GGMM/*VO,,?@UW 	 %0%>%>ARAR%RK" **.EE'5'?'?&BSBS'S$&&/9'5'?'?&BSBS'S$ ]11_D"("3"3m6O6O"OM7v99:
 	
g ,+N  ^#>STWXYTZS[<\]]^sK   LZ7AZ7!Z  C&Z7'Z ;HZ7 Z
Z7	Z4Z//Z44Z7rH   c                    K   t        j                  || j                        }|D cg c]!  }t        j                  j                  |      # c}S c c}w wr   )r   get_by_group_idr   schemasStoreFormateResr(   )r   rH   store_format	get_groups       r   get_store_formatez%StoreFormateService.get_store_formateB  sG     %55hHS_`S_i''66yAS_```s   %A&AAc                    K   t        j                  || j                        }|st        dd      S t        dd      S w)Nz-1zStore Formate not foundr%   r$   z"Store Formate deleted successfully)r   deleter   r   )r   r   deleteds      r   delete_store_formatez(StoreFormateService.delete_store_formateF  s;      ''$'':!7PQQS2VWWs   =?)__name__
__module____qualname__r   r   r    r   StoreFormateCreater.   r	   StoreFormateCreate11r   r   intr   r   r   r   rE   r!   r   r   r      s    7 )9 O'2L2L OZ +/t*tO--tO (tOT +/t*	t
t
 $t
 (	t
pa aX3 Xr!   r   )+r_   rb   typingr   openpyxlr   
sqlalchemyr   r   app.api.store_formate.schemasapistore_formater   sqlalchemy.ormr   app.dependency.authanticationr   fastapir	   r
   r   app.locale.messagesr   app.models.main.civilr   app.models.main.display_boardr   "app.models.main.electrical_cablingr   app.models.main.groupr   app.models.main.main_datar   app.models.main.store_formater   r   app.utils.common_utilsr   r   app.utils.schemas_utilsr   r   r   rE   r!   r   <module>r      sR    	   " # / / " : 3 3 ( * 9 C * 1 I L 2 <uX uXr!   