
    dij                     R   S SK JrJr  S SKJr  S SKJr  S SKJr  S SK	J
r
Jr  SSKJrJrJr  SSKJrJr  S S	KJr  S S
KJr  S SKrS rS rS r\" SS/5      S 5       r\" / SQ5      S 5       r\" S/5      S 5       r\" S/5      S 5       r\" SS/5      \" \/5      S 5       5       rg)    )api_viewpermission_classes)Responsestatus)IsAuthenticated)transaction
connection   )ConfigurationConfigurationTranslationAppSettings)MenuSerializerAppSettingsSerializer)QuestionConfiguration)	log_errorNc                     U R                   (       a  [        U R                   S5      (       a  U R                   R                  nU(       a   [        U R                   S5      (       a  U R                   R                  (       at  SSKJn  UR                  R                  U R                   R                  S9R                  S5      R                  5       nU(       a  UR                  (       a  UR                  $ U=(       d    S$ U R                   (       a  [        U R                   S5      (       a  U R                   R                  (       av   SSKJn  UR                  R                  U R                   R                  S9R                  S5      R                  5       nU(       a  UR                  (       a  UR                  $ gg! [         a     Nf = f! [         a     gf = f! [         a     gf = f)z
Get user's language preference from request.
Returns 'en' as default if user is not authenticated or language is not set.
Fetches fresh from database to ensure we get the latest language setting.
langidr   )User)r   en)userhasattrr   r   user.modelsr   objectsfilteronlyfirst	Exception)requestcached_langr   r   s       %D:\TimeStamps\configurations\views.pyget_user_languager#      s\   <<GGLL&99!,,++Kw||T22w||4#||22glloo2FKKFSYY[DII#'99, #*d* <<GGLL$77GLLOO,||**glloo*>CCFKQQSDII99$ % !   
  	s]   A	G B)F? 6
G AG 	A3G ?
G	G GG 
GG GG 
G,+G,c                    US:X  a  X4$ [        U [        5      (       a  U R                  S5      OSnU(       d!  [        U S5      (       a  U R                  nOX4$  [
        R                  R                  SUUS9R                  5       nU(       a4  [        U [        5      (       a  U R                  5       n UR                  U S'   / nU H  nUR                  S5      =(       d    SnUR                  5       nU(       aD   [
        R                  R                  S	UUS9R                  5       n	U	(       a  U	R                  US
'   UR                  U5        M     X4$ ! [         a     Nf = f! [         a     N4f = f)aP  
Apply translations to configuration header and question labels.

Args:
    config_data: Dictionary with configuration data (header, icon, color, etc.)
    questions_data: List of question dictionaries
    user_language: User's language code ('en', 'fi', 'sv')

Returns:
    Tuple of (translated_config_data, translated_questions_data)
r   function_ref_idNfunction_header)translation_typelanguagereference_idheaderquestion_id question_labellabel)
isinstancedictgetr   r%   r   r   r   r   copytranslated_textr   append)
config_dataquestions_datauser_languager%   header_translationtranslated_questionsquestionr+   translated_questionlabel_translations
             r"   apply_translationsr=   4   s    **<F{TX<Y<Ykoo&78_cO; 122)99O..5==DD."( E 
 %'	 	 *[$"?"?%**,K$6$F$FK!
 "ll=17R&mmo
$<$D$D$K$K%5*!, %L % %'	 " %3D3T3T'0 	##$78# #& ,,1  &  s&   A(E <AE'
E$#E$'
E43E4c                    SnSnU (       a"  U(       a  SU ;   a  SnSnOSU 3U ;   a  SnSU 3nU (       a  U(       d  U $ U(       d  U $ SnU H  nUR                   U:X  d  M  Un  O   U(       d  U $ SnUR                  U;   a  X6R                     nO	X;   a  X1   nUc  U $ SU S3n	SU S3n
[        U[        5      (       a  UR	                  SS5      nSU S3nO[        U5      nX;   a  U R	                  X5      nU$ X;   a@  [        U[        5      (       a  UR	                  SS	5      nSU S3nU R	                  X5      nU$ U R	                  X\5      nU$ )
a  
Replace :dependencyId in custom_sql with the actual value from answers.

Args:
    custom_sql: The SQL query string that may contain :dependencyId
    dependency_id: The question_id of the question this depends on
    question_configs: All question configurations for this function_ref_id
    answers: Dictionary of answers where keys are question labels or question_ids

Returns:
    The SQL query with :dependencyId replaced, or original SQL if dependency not found
FNz:dependencyIdT:'"z''z"")r+   r.   r/   strreplace)
custom_sqldependency_idquestion_configsanswershas_dependency_placeholderplaceholder_to_replacedependent_questionqcdependency_valuequoted_placeholder_singlequoted_placeholder_doubleescaped_valuevalue_to_insertresolved_sqls                 r"   resolve_dependency_in_sqlrR   r   s    "'!mj()-&%4" J.)-&'(%8"7 >>]*!# 
  7*"#;#;<		!"1 #$$:#;1 ="#$:#;1 = "C(((00d;m_A. ./ !.!))*CU  
#	0&,,,44S$?M !-2O!))*CU
  "))*@R    GETPOSTc                 	   U R                   S:X  Ga    [        R                  R                  5       n[	        U 5      n0 0 S.nU GH  n[
        R                  R                  UR                  S9R                  SS5      n0 nSU R                  ;   a%   [        R                  " U R                  S   5      nOQU R                  R                  5        H3  u  pxUR                  S5      (       d  M  UR!                  SS5      n	XU	'   M5     / n
U GHl  nUR"                  UR$                  UR&                  UR(                  UR*                  UR,                  UR.                  UR0                  UR2                  =(       d    S	UR4                  =(       d    SUR6                  =(       d    SS
.nUR.                  (       a   [9        UR.                  UR6                  UU5      n[:        R<                  " 5        nUR?                  U5        URA                  5       n/ nU H@  n[C        U5      S:  d  M  URE                  [G        US   5      [G        US   5      S.5        MB     UUS'   S S S 5        U
RE                  U5        GMo     URL                  URN                  URP                  U
URR                  UR                  S.n[U        UX5      u  nn
U
US'   URV                  S:X  a  UUS   UR                  '   GM  URV                  S:X  a  UUS   UR                  '   GM  UX4R                  '   GM     [Y        U5      $ U R                   S:X  a   [^        R`                  " 5          [c        U Rd                  S9nURg                  5       (       aF  URi                  5       n[c        U5      n[Y        URd                  [Z        Rj                  S9sS S S 5        $ [Y        URl                  [Z        Rn                  S9sS S S 5        $ g ! [        R                  [        4 a     GN
f = f! , (       d  f       GN= f! [H         a  n[K        SU5         S nAGNS nAff = f! [H         a0  n[K        SU5        [Y        SS0[Z        R\                  S9s S nA$ S nAff = f! , (       d  f       g = f! [H         a0  n[K        SU5        [Y        SS0[Z        R\                  S9s S nA$ S nAff = f)NrT   )InMenuOutMenur%   order
created_atrG   answer_r,   Noner.   	read_onlyrequiredquestion_typequestion_optionsborder_colorrD   rZ   question_categoryr+   rE      r   r   
valueField	textFieldrb   zconfiguration_list.execute_sqlr*   iconcolor	questionsis_quick_menur%   rl   rW   rX   zconfiguration_list.GETerrorz/An error occurred while fetching configurationsr   rU   datazconfiguration_list.POSTz.An error occurred while creating configuration)8methodr   r   allr#   r   r   r%   order_byquery_paramsjsonloadsJSONDecodeError	TypeErroritems
startswithrC   r.   r_   r`   ra   rb   rc   rD   rZ   rd   r+   rE   rR   r
   cursorexecutefetchalllenr4   rB   r   r   r*   rj   rk   rm   r=   	menu_typer   r   HTTP_500_INTERNAL_SERVER_ERRORr	   atomicr   rp   is_validsaveHTTP_201_CREATEDerrorsHTTP_400_BAD_REQUEST)r    configurationsr7   response_dataconfigrF   rG   keyvalue
answer_keyrl   rK   question_datarQ   r{   resultsoptionsrower5   
serializerresponse_serializers                         r"   configuration_listr      sM   ~~k	*22668N .g6M M
 )#8#@#@#G#G$*$:$: $H $(7L1 !
  4 44"&**W-A-A)-L"M
 '.&:&:&@&@&B
>>)44),Y)CJ27J/ 'C
 	*B!#%'\\$&KK)+)9)9,.,?,?(*&(mm!#-/-A-A-KV')~~';)+)9)9)?R%M }}!+D " " 0 0 0 '	,L ",!2!2!4 &| <*0//*; +-+2C'*3x1}(/:=c!f+9<SV8* )+ ,3 EL.@ A "5$ $$]3Y +^ %mm"KK#\\!*%+%9%9'-'='= *<K)b&Y+4K( ##x/FQM(+F,B,BC%%2GRM),V-C-CD =HM"8"89o )r M** 
6	!	##%+>
&&(('__.F*8*@'#$7$<$<VE\E\] &%  
 1 1&:U:UV &% 
"m !00)< H "5!4  ) !%&FJ !<  	.2KL<< 	 &%  	/3JK<< 	s   A=Q
 #O344Q
 ,C
Q
 77P&.6P(5PP&%CQ
 R A%R=	R !R(	R 3PQ
 PQ
 
P#P&!Q
 #P&&
Q0Q<Q
 QQ
 

R%Q?9R?R
RR R 
S"%SSS)rT   PUTDELETEc                 D    [         R                  R                  US9nU R                  S:X  Ga   [        U 5      n[        R                  R                  UR                  S9R                  SS	5      n0 nS
U R                   ;   a%   ["        R$                  " U R                   S
   5      nOQU R                   R+                  5        H3  u  pxUR-                  S5      (       d  M  UR/                  SS5      n	XU	'   M5     / n
U GHl  nUR0                  UR2                  UR4                  UR6                  UR8                  UR:                  UR<                  UR>                  UR@                  =(       d    SURB                  =(       d    SURD                  =(       d    SS.nUR<                  (       a   [G        UR<                  URD                  UU5      n[H        RJ                  " 5        nURM                  U5        URO                  5       n/ nU H@  n[Q        U5      S:  d  M  URS                  [U        US   5      [U        US   5      S.5        MB     UUS'   S S S 5        U
RS                  U5        GMo     URV                  URX                  URZ                  U
UR\                  UR                  S.n[_        UX5      u  nn
U
US'   [	        U5      $ U R                  S:X  a   [`        Rb                  " 5          [e        X Rf                  S9nURi                  5       (       a9  URk                  5       n[e        U5      n[	        URf                  5      sS S S 5        $ [	        URl                  [
        Rn                  S9sS S S 5        $ U R                  S:X  a{   [`        Rb                  " 5          URq                  5         [         R                  Rs                  5       n[e        U5      n[	        URf                  [
        Rt                  S9sS S S 5        $ g ! [         R                   a    [	        [
        R                  S9s $ [         a0  n[        SU5        [	        SS0[
        R                  S9s S nA$ S nAff = f! ["        R&                  [(        4 a     GNf = f! , (       d  f       GNH= f! [         a  n[        SU5         S nAGNgS nAff = f! [         a0  n[        SU5        [	        SS0[
        R                  S9s S nA$ S nAff = f! , (       d  f       g = f! [         a0  n[        SU5        [	        SS0[
        R                  S9s S nA$ S nAff = f! , (       d  f       g = f! [         a0  n[        SU5        [	        SS0[
        R                  S9s S nA$ S nAff = f) N)pkr   z&configuration_detail.get_configurationrn   .An error occurred while fetching configurationrT   rY   rZ   r[   rG   r\   r,   r]   r^   re   r   r   rf   rb   z configuration_detail.execute_sqlri   rl   zconfiguration_detail.GETz6An error occurred while fetching configuration detailsr   ro   zconfiguration_detail.PUTz.An error occurred while updating configurationr   zconfiguration_detail.DELETEz.An error occurred while deleting configuration);r   r   r1   DoesNotExistr   r   HTTP_404_NOT_FOUNDr   r   r   rq   r#   r   r   r%   rs   rt   ru   rv   rw   rx   ry   rz   rC   r.   r_   r`   ra   rb   rc   rD   rZ   rd   r+   rE   rR   r
   r{   r|   r}   r~   r4   rB   r*   rj   rk   rm   r=   r	   r   r   rp   r   r   r   r   deleterr   HTTP_204_NO_CONTENT)r    r   configurationr   r7   rF   rG   r   r   r   rl   rK   r   rQ   r{   r   r   r   r5   r   r   r   all_configss                          r"   configuration_detailr   J  s   	
%--11R18 ~~Y	-g6M  5<<CC - = =  D  hw- 
 GG000"jj)=)=i)HIG
 #*"6"6"<"<">JC~~i00%([[B%?
.3
+ #?
 I&XX!# "%'%5%5(*(;(;$&OO"$--XX)+)=)=)G#%>>#7R%'%5%5%;! =='@MM,,,#	( (..0F"NN<8&,oo&7G ')G'.#&s8q=$+NN69#a&k58Q[4& %' (/ AHM*<= 1$   /Y '^ (..%**&,,&!.!<!<#0#@#@K &8Y%^"K'0K$K(( 
5	 	##%+MM
&&(('__.F*8*@'#$7$<$<= &%  
 1 1&:U:UV &% 
8	#	##%$$&+33779+K8

8R8RS &% 
$k %% :v8899 
:A>FG88
 	

, ,,i8 H 10 % !"DaH*  	0!4RS<< 	 &%  	0!4JK<< 	 &%  	3Q7JK<< 	sG  P	 AS	 #Q2 )4S	 !C
S	 ,7R%#6R5RR%A/S	 T 0AT	T !T3	T U% #AU>	U% 	+Q/6	Q/?%Q*$Q/*Q/2RS	 RS	 
R"	R% S	 "R%%
S/S;S	 SS	 	
T%S>8T>T
TT T 
U!%UUU
U"U% "U% %
V/%VVVc                     [         R                  R                  US9n[        U 5      n[        R                  R                  US9R                  SS5      n0 nSU R                  ;   a%   [        R                  " U R                  S   5      nOQU R                  R                  5        H3  u  pgUR                  S5      (       d  M  UR                  SS5      nXuU'   M5     / n	U GHk  n
U
R                  U
R                   U
R"                  U
R$                  U
R&                  U
R(                  U
R*                  U
R,                  U
R.                  =(       d    SU
R0                  =(       d    SU
R2                  =(       d    SS.nU
R*                  (       a   [5        U
R*                  U
R2                  UU5      n[6        R8                  " 5        nUR;                  U5        UR=                  5       n/ nU H@  n[?        U5      S	:  d  M  URA                  [C        US
   5      [C        US   5      S.5        MB     XS'   S S S 5        U	RA                  U5        GMn     URH                  URJ                  URL                  U	URN                  URP                  S.n[S        UX5      u  nn	U	US'   UU0n[U        U5      $ ! [        R                  [        4 a     GNf = f! , (       d  f       N= f! [D         a  n[G        SU5         S nANS nAff = f! [         RV                   a     [U        SSU 30[X        RZ                  S9s $ [D         a0  n[G        SU5        [U        SS0[X        R\                  S9s S nA$ S nAff = f)NrY   rZ   r[   rG   r\   r,   r]   r^   re   r   r   rf   rb   z-get_configuration_by_function_ref.execute_sqlri   rl   rn   z-Configuration not found for function_ref_id: r   !get_configuration_by_function_refr   )/r   r   r1   r#   r   r   rs   rt   ru   rv   rw   rx   ry   rz   rC   r.   r_   r`   ra   rb   rc   rD   rZ   rd   r+   rE   rR   r
   r{   r|   r}   r~   r4   rB   r   r   r*   rj   rk   rm   r%   r=   r   r   r   r   r   )r    r%   r   r7   rF   rG   r   r   r   rl   rK   r   rQ   r{   r   r   r   r   r5   r   s                       r"   r   r     s8   h
%--11/1R *'2 188??+ @ 

(7L
) 	 ,,,**W%9%9)%DE
 &2288:
>>),,!$Y!;J*/J' ; 	"B\\KK!#!1!1$&$7$7 " mm%'%9%9%CV!~~3!#!1!1!7RM }}#<(((	$L $**,|4"(//"3 #%#*C"3x1} '25c!f+14SV0" !# $+ =D&89 -$ ]+Y #^ $**!&&"(("*88,<<
 "4K!ZY#,K  [
 &&U (()4 J -, ! MqQ4 %% 
EoEVWX,,
 	
  
5q9FG88
 	

s   A'L *#J1 4L C
L 7K#6K4K5K#=A3L 1KL KL 
K 	K#L  K##
L-K>9L >LL 1M29	M2%M-'M2-M2r   c                     [         R                  " 5          [        R                  R	                  US9nUR                  5       (       d&  [        SSU 30[        R                  S9sS S S 5        $ UR                  5         [        SSU 30[        R                  S9sS S S 5        $ ! , (       d  f       g = f! [         a0  n[        SU5        [        SS0[        R                  S9s S nA$ S nAff = f)	NrY   rn   z-No configurations found for function_ref_id: r   messagez=Successfully deleted all configurations for function_ref_id: $delete_configuration_by_function_refz/An error occurred while deleting configurations)r	   r   r   r   r   existsr   r   r   r   HTTP_200_OKr   r   r   )r    r%   r   r   s       r"   r   r   >  s    
!*2299/9ZN!((** MoM^_`!44 "! !!#[\k[lmn)) "!!$  
8!<GH88
 	

sG   B7 AB&&	B7 0,B&	B7 &
B40B7 4B7 7
C1%C,&C1,C1r   c                 
    [         R                  " 5       nU R                  S:X  a   [        U5      n[	        UR
                  5      $ U R                  S:X  ap  [        XR
                  SS9nUR                  5       (       a%  UR                  5         [	        UR
                  5      $ [	        UR                  [        R                  S9$ g	! [         a0  n[        SU5        [	        SS0[        R                  S9s S	nA$ S	nAff = f)
z9
Get or update application settings (SMTP configuration)
rT   r   T)rp   partialr   app_settingsrn   z/An error occurred while processing app settingsN)r   get_settingsrq   r   r   rp   r   r   r   r   r   r   r   r   )r    settingsr   r   s       r"   r   r   [  s    
++->>U".x8JJOO,,^^u$.xllTXYJ""$$!
00J--f6Q6QRR %  
.!$GH88
 	

s+   AC AC %!C 
D%C=7D=D) rest_framework.decoratorsr   r   rest_framework.responser   rest_frameworkr   rest_framework.permissionsr   	django.dbr	   r
   modelsr   r   r   serializersr   r   questionconfigurations.modelsr   ErrorLogs.utilsr   ru   r#   r=   rR   r   r   r   r   r    rS   r"   <module>r      s    B , ! 6 - H H > ? % $N;-|Vp 
5&/} }~ 

"#E $EN 
5'i
 i
V 
8*
 
8 
5%._%&
 ' 
rS   