o
    ţ5h                     @   s  d dl mZmZ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mZmZ d dlmZ dd	l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%m&Z& 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.Z.d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 eeddgdd Z5eeddgdd Z6eeddgdd Z7eeddgdd  Z8eeddgd!d" Z9eeddgd#d$ Z:eeddgd%d& Z;eeddgd'd  Z8eeddgdCd(d)Z<ed*gd+d, Z=eeddgd-d. Z>d/d0 Z?eeddgd1d2 Z@eeddgd3d4 ZAeeddgd5d6 ZBeeddgd7d8 ZCed*gd9d: ZDeeddgd;d< ZEeeddgd=d> ZFeeddgd?d@ ZGeeddgdAdB ZHdS )D    )renderredirectget_object_or_404   )	Chat_DataOptions
ColumnList	TableListRelatedOptionTable	MapTables)	Paginator)check_user_role)user_passes_test)r   	EmptyPagePageNotAnInteger)PageNumberPagination)ChatFormTableListFormColumnListFormMapForm)apps)JsonResponse)api_view)Responsestatus)ChatDataSerializerOptionsSerializer)
connectiontransaction)Products)messagesN)	send_mail)EMAIL_HOST_USER)UserLocationzSuper Adminz	NBC Adminc              	   C   s   t jd}t|d}| jd}z||}W n ttfy(   |d}Y n t	y6   ||j
}Y nw |dd}t| d|S )N-created_date   pager   active)	chat_datachat_activezchat_data_list.html)r   objectsorder_byr   GETgetget_pager   	TypeErrorr   	num_pagesr   )requestchat	paginatorr'   r)   context r6   7/var/www/html/Testing_prj/Navya-Bakers/chatbot/views.py	chat_list   s   

r8   c                 C   sL   t jj|d}t jj|d }|rt| d tdS |r"|  tdS )Npkrelated_chatz-Couldn't delete chat related to another chat!	chat-list)r   r+   filterfirstr!   warningdeleter   )r2   chat_idr3   querysetr6   r6   r7   chat_delete*   s   rD   c              	   C   s   g }| j dkrt| j}| jd}| jd}| jd}| jd}z|r/tjj|dnd }W n tjy>   d }Y nw | jdd }d }	|rbz	tjj|d}	W n tjtfya   d }	Y nw |rmt	jj
|d nd }
z|rytjj|dnd }W n tjy   d }Y nw |d	krd }
d }d }	| r*|jd
d}|
|_||_|	|_||_| jd}g }i }|dkrd}t| j D ]%}|dr| jt|dkrd||< d}||| jt|d q|dkrt|}||dd||d}t| d|S |  g }|r|D ]}tjj|d d}||j q	|j| |  tdS ||j | jd}i }g }|dkrmt| j D ]&}|drk| jt|dkr]d||< ||| jt|d qFt|}||dd||d}t| d|S t }||ddd}t| d|S )NPOST	chat_typeoption_tableoption_columnr   idr<   rB   Welcome MessageFcommitoption_typeCustomr   dynamic_input Field Required!r   namevaluer(   True)errors	chat_formr*   option_flagoption_countoption_listzchat_add.htmlrV   option_valuer=   False)rX   rY   r*   rZ   )methodr   rE   r.   r   r+   DoesNotExistr   
ValueErrorr	   r>   r?   is_validsaverG   rH   r<   r   listkeys
startswithstrappendlenr   r
   createrJ   optionssetrX   )r2   rX   formrF   option_table_idoption_column_idredirect_datarH   related_chat_idr<   rG   r3   rO   dynamic_field_list
error_dictflagir[   r5   option_id_listjoptionr6   r6   r7   chat_add6   s   
	


rz   c                 C   h   | j d}|stdg dddS tjj|ddd}tjj|d	}d}|r)d
}tt||dddS )Ntable_idMissing table_iderrorcolumnsFsafe	table__idrJ   column_nametable_name__idTr   redirect_flag	r-   r.   r   r   r+   r>   valuesr   re   r2   r|   r   	map_tabler   r6   r6   r7   load_column_list   s   r   c                 C   s  | j d}| j dd }|stdddS tjj|d }|s(tddd	S |jd
krqdd tj D }g }|j	 D ](}|rT|j
t|krT||j
|jd |j
|jf|vrf||j
|jd q>tdd
|dddS |jdkr}tdddS tdt|jdS )Nrow_id	option_idSuccessNone)r   typerK   ErrorzChat not found!r   messagerP   c                 S   "   g | ]}|j r|j j|j jfqS r6   related_option_idrJ   r^   .0rv   r6   r6   r7   
<listcomp>   s    z'related_option_hide.<locals>.<listcomp>option_namer^   )r   r   rl   Fr   Table)r-   r.   r   r   r+   r>   r?   rO   allrl   rJ   uuidUUIDri   r^   rh   rG   )r2   r   r   r3   related_option_idsoptions_to_renderrx   r6   r6   r7   related_option_hide   s6   

r   c                 C   s  | j d}| j d}| j d}|dkr|dkrtjj|d }|jdkr,|j}nd}	 g }zEt	 D ]*}|j
 D ]"}| d	kr_|jj
jd
d |kr_||j
j d
d  q=q6|rntdt|iddW S tdg iddW S  ty   tdg idd Y S w |dkrz8td	 }	g }
d}|	D ]}|
t|j
jd
d  |d  q|
rtdt|
iddW S tdg iddW S  ty   tdg idd Y S w d S )NchoicerF   r<   YesRelatedrK   r   default
ForeignKey_r   tablesFr   Noproducts)r-   r.   r   r+   r>   r?   rO   rG   r   
get_models_meta
get_fieldsget_internal_typerelated_modeldb_tablesplitri   lowerr   re   StopIterationget_app_configrh   )r2   r   rF   r<   r)   table
table_listmodelwy
app_modelstable_list_productscountr6   r6   r7   r     sZ   

r   c           $      C   s@  g }t t|d}| j }|j|d< tjj|j|j	d}t
tjj|j|j	djddd}| jdkrt||d}| jdd }| jd	d }	| jd
d }
| jdd }| jdd }| jdd }|rntjj|d nd }|	r{tjj|	d nd }|
rtjj|
d nd }|dkrd }d }d }| r|jdd}||_||_	||_||_| jd}g }i }g }|dkrd}t
| j D ]7}|dr|dd }t|dkr|| | jt|dkrd||< d}||| jt|d q|dkrlt|}i d|d|d|dd d!|d"tj d#|jr%|jjndd$|jr0|jjndd%|j	r;|j	jndd&|jrJtjj|jd'ng d(|jrT|jndd)|d*d+d,|d-|d.|}t | d/|S |  g }t!d0d1 |j" D }t!|}t
|| }|D ]}t#jj|d}|j"$|  |%  q|r|D ];} | d2 dd }!t|!dk rt#jj&| d3 d4}"||"j |j"'|"j qt#jj|!d}#| d3 |#_(|#  q|  td5S | jd}g }i }|dkr't
| j D ]&}|dr%| jt|dkrd||< ||| jt|d q t|}i d|d|d|dd d!|d"tj d#|jrJ|jjndd$|jrU|jjndd%|j	r`|j	jndd&|jrotjj|jd'ng d(|jry|jndd)|d*d+d,|d-|d.|}	 nt|d}|j}i }g }|dkrt
|j" D ]}|d|j |j(d qt|}i d|d|d|dd d!|d"tj d#|jr|jjndd$|jr|jjndd%|j	r|j	jndd&|jrtjj|jd'ng d(|jr|jndd)|d*d+d,|d-|d.|}t | d/|S )6NrK   rF   )r   columnr^   T)flatrE   instancerG   rH   r<   r   r   rI   rL   FrM   rO   rP   r   rQ   dynamic_input_r      rR   rS   rT   rX   rn   rl   r*   r(   r)   r   ro   rr   rp   option_column_listr   option_type_valueexisting_optionsrZ   rW   r[   r\   rB   zchat_edit.htmlc                 S   s   g | ]}t |jqS r6   )rh   rJ   r   r6   r6   r7   r     s    zchat_edit.<locals>.<listcomp>rU   rV   r]   r=   ))r   r   rE   copyrF   r   r+   r>   rG   rH   re   values_listr`   r   r.   r?   r	   r   rc   rd   r<   r   rf   rg   r   rj   ri   rh   r   rJ   rB   rO   r   rm   rl   r
   removerA   rk   addr^   )$r2   rB   rX   r)   	post_datarl   r   rn   rF   ro   rp   rr   r   rq   r<   rG   rH   r3   rO   rs   rt   existing_list_postru   rv   rJ   r[   r5   rw   existing_option_listdynamic_field_setfields_to_removedatarx   id_ry   related_datar6   r6   r7   	chat_editG  s  







	




	




	
r   c                 C   r{   )z3 Load columns dynamically based on selected table. r|   r}   r~   Fr   r   rJ   r   r   Tr   r   r   r6   r6   r7   r     s   c                 C   s  t jj|d }d}|r|j}d}|r|j}d}|r|j}t j }dd t j D }g }g }	g }
|D ]A}|jdkrB||j |jdkrM|
|j |j	dkrX||j |jrv|jjdkri|	|jj q5|jj	dkrv|	|jj q5t
t|t|	 }g }t jjdd}|D ]}d	}|j D ]}|j|jf|vrd
}q|r||j qt
t|
t| }|| }|| g }|rt|g}t
t|t| }t
t jj|ddd}tdt
|id
dS ) Fetch Related Chat List rK   Nc                 S   r   r6   r   r   r6   r6   r7   r   >     " z%related_chat_list.<locals>.<listcomp>r   rP   rL   )rO   TF)chat_id__inrB   	chat_namer)   r   )r   r+   r>   r?   r<   rB   r   rO   ri   rF   re   rm   rl   rJ   r^   r   r   r   r   )r2   rB   r3   r<   chat_id_addremove_chat_idrelated_options_without_customr   related_field_ids	field_idscustom_field_idsidstable_field_idsfields_to_remove_customr8   rv   ru   rx   custom_fieldsfieldsr   
field_listchat_list_resultr6   r6   r7   related_chat_list  sb   




r   rE   c           )         s  | j jrtjj| j d }n| jd}tjj|d }d}|r*|jr*|j}d}| jdd}| jdd}| jd	d}| jd
d}t	 }	| jdd|	_
|dkrvtjjdd }
|
rltd|
j|
j|
jdS tdddtjdS |stdddtjdS tjj|d}tjj|d }|stdddS |dkr|j|d}| }|r|j}ntdddS g }|D ]3}|jdkrtd|j|j|j|jd  S |dkr|jr|jnd}|jr|jnd}d }|jd!krtjj|d" j}d}d}|jdkr|jr	|jnd}g }d}d}ztjj|d# }tjj|d# }|s0td$| d%|j}d}|r;|j}d  d&d' |!d(D }d}|rZd  d)d' |!d*D }t"jj|d# }|sntd+| d%|j#|j$t%&d,|}|std-| d.d/d0 |j'j(D } d1d2l)m*   fd3d0|j'+ D }!| vs| vrtd4 d5 d6| d7d }"|rj|j'+ D ]}#|#, d8kr|#j-j'j.!d(d9 |/ kr|#j0}" nqz|dkr%d:|!v r|jjdFi |"|i}$|$j|gd;}$t1|$2}|	3|| }nTt1|jjdFi |"|i2}|	3|| }n<d<| v rJ|jjdFi |"|i}$|$jdd=}$t1|$2}|	3|| }nt1|jjdFi |"|i2}|	3|| }W nb   g }Y n[|dkrd:|!v r|jj|gd;}$t1|$2}|	3|| }n:t1|j2}|	3|| }n*d<| v r|jjdd=}$t1|$2}|	3|| }nt1|j2}|	3|| }W n ty }% zd}t4|%}W Y d}%~%nd}%~%ww |rd||j|j|j|j|j|j5r|j5jndfd>d0|D |jd!kr	dnd|jd!kr|ndd?}&n0d|j|j|j|j|j|j5r*|j5jndfd@d0|D |jd!kr<dnd|jrC|nddA
}&|6|& z|	7|W   S  ty }% z$tdt4|%|j|j|j|j|j|j5rt|j5jnddBW  Y d}%~%  S d}%~%ww |dkrz1t1|j89 }'dCd0 |'D }(|	3|(| }(|6d|j|j|j|j|j|j5r|j5jnd|(dD W q ty }% z$tdt4|%|j|j|j|j|j|j5r|j5jnddBW  Y d}%~%  S d}%~%ww qz|	7|W S    tddEd Y S )Gz Fetch Chatbot API Data )useranonymous_id)r   zLong DistanceShopr   Nrr   r^   rO   	page_size   welcomerL   )rF   T)r   rB   r   r   FzNo Welcome Message found)r   r   r   z)Missing 'related_chat_id' in request bodyr;   rK   zChat not found! rP   )r   zInvalid related chat id!zEnd Message)r   rB   rF   r   r   r   rR   r   r   rI   zTable with UUID z
 not foundc                 s       | ]}|  V  qd S N
capitalizer   wordr6   r6   r7   	<genexpr>      z#chatbot_data_api.<locals>.<genexpr>r   c                 s   r   r   r   r   r6   r6   r7   r     r   -zColumn with UUID r   zModel 'z' not found in 'products' app.c                 S   s   g | ]}|j qS r6   )rU   r   fieldr6   r6   r7   r     s    z$chatbot_data_api.<locals>.<listcomp>r   ManyToManyFieldc                    s"   g | ]}t | r|js|jqS r6   )
isinstanceauto_createdrU   r   r   r6   r7   r     s    zColumn 'z' or 'z' does not exist in model ''r   r   
sales_unit)sales_unit__inlong_distance_availability)r  c                    $   g | ]}|  | d dqS zField Not FoundrJ   rV   r.   r   item	column_idr   r6   r7   r        $ )r   r   rB   r   rF   r   rO   r<   rl   r   redirect_namec                    r  r  r  r  r  r6   r7   r     r
  )
r   rB   r   rF   r   rO   r<   rl   r   r  )r   r   rB   r   rF   rO   r   r<   c                 S   s   g | ]	}|j |jd qS )r  )rJ   r^   r   r6   r6   r7   r     s    )r   rB   r   rF   rO   r   r<   rl   zpage not foundr6   ):r   is_authenticatedr$   r+   r>   r?   r   r.   shopr   r   r   r   rB   r   r   r   HTTP_404_NOT_FOUNDHTTP_400_BAD_REQUESTr   rO   rF   rG   ro   rH   rp   r   r   map_namer	   	Exception
table_namejoinr   r   r   r	  r   	get_modelr   r   django.db.modelsr   r   r   r   r   r   rU   re   r   paginate_querysetrh   r<   ri   get_paginated_responserl   r   ))r2   user_locationr   
order_typeshop_id	data_typerr   filter_option_valuerO   r4   welcome_messagerC   current_chatqueryset_dataserialized_datar3   
table_uuidcolumn_uuidr  prev_table_uuidprev_column_uuidoptions_datafailure_flagfailure_reason	table_objprev_table_objr  prev_table_namemodel_class_nameprev_model_class_name
column_objtable_modelmodel_fields
m2m_fieldsforeign_columnr   field_filteredata_to_appendrl   r\   r6   )r   r	  r   r7   chatbot_data_api  s  





	

"
"




%r5  c                 C   sv   t jj|d}dd t j D }|j}g }| D ]}|jj|jjf|vr2||jj|jjd qt	d|iddS )r   rK   c                 S   r   r6   r   r   r6   r6   r7   r     r   z'related_option_list.<locals>.<listcomp>r   rl   Fr   )
r   r+   r>   r   rl   r   rJ   r^   ri   r   )r2   rB   r)   r   rl   r   rv   r6   r6   r7   related_option_list  s   r6  c                 C   s:   | j d}tjj|d }|rtddiS tddiS )Nr   )related_option_id__idr   relatedznot related)r-   r.   r   r+   r>   r?   r   )r2   r   rC   r6   r6   r7   check_related  s
   r9  c              	   C      t jd}t|d}| jd}z||}W n ttfy(   |d}Y n t	y6   ||j
}Y nw |dd}t| d|S )Nr%   
   r'   r   r(   r   r*   zchat_table_list.html)r   r+   r,   r   r-   r.   r/   r   r0   r   r1   r   r2   r   r4   r'   r5   r6   r6   r7   chat_tables     

r>  c           
      C   s   g }t t|d}t t|d}| jdkrKt| j|d}t| j|d}| r>| r>| }|jdd}||_	|  t
dS ||j ||j n
t|d}t|d}|||dd	}	t| d
|	S )Nr9   r   rE   r   FrM   chat_table_listr(   rX   
table_formcolumn_formr*   zchat_table_edit.html)r   r	   r   r`   r   rE   r   rc   rd   r   r   ri   rX   r   )
r2   r|   rX   r   r   rB  rC  
table_datacolumn_datar5   r6   r6   r7   chat_tables_edit!  s$   


rF  c                 C   s   g }| j dkr;t| j}t| j}| r.| r.| }|jdd}||_|  tdS ||j	 ||j	 nt }t }g }|||dd}t
| d|S )NrE   FrM   r@  r(   rA  zchat_table_add.html)r`   r   rE   r   rc   rd   r   r   ri   rX   r   )r2   rX   rB  rC  rD  rE  r5   r6   r6   r7   chat_tables_add;  s*   


rG  c                 C   s<   t jj|d}tjj|d}|r|r|  |  tdS )Nr9   r   r@  )r	   r+   r>   r   rA   r   )r2   r|   r   r   r6   r6   r7   table_chat_delete[  s   rH  c              
   C   s   | j dkrmzK| jdd}d}| jjrId| jj d| jj d}| jjr)| jj}nd}d	| d
d| d }t||t	|gdd t
dddW S t
dddW S  tyl } zt
ddt|dW  Y d }~S d }~ww t
dddS )NrE   msgrR   zakhilraj3200@gmail.comzUser Query (r   )r   zUser enquiry recieved from z please check: 

r   F)fail_silentlyTzEmail send successfully!r   zuser not authenticatedzmessage send failed!)r   r   r   zPost method required!)r`   r   r.   r   r  emailphone_number
first_namer"   r#   r   r  rh   )r2   rI  admin_user_mail_idsubject	user_namer   r3  r6   r6   r7   send_user_queryf  s(   

 rR  c              	   C   r:  )Nr%   r;  r'   r   r(   r<  zmap_table_list.html)r   r+   r,   r   r-   r.   r/   r   r0   r   r1   r   r=  r6   r6   r7   
map_tables  r?  rS  c                 C   sp   g }t t|d}| jdkr't| j|d}| r | }tdS ||j	 nt|d}||dd}t
| d|S )Nr9   rE   r   chat_table_map_listr(   rX   map_table_formr*   zmap_table_edit.html)r   r   r`   r   rE   rc   rd   r   ri   rX   r   )r2   r|   rX   r   rV  map_table_datar5   r6   r6   r7   map_table_edit  s   

rX  c                 C   s`   g }| j dkrt| j}| r| }tdS ||j nt }g }||dd}t| d|S )NrE   rT  r(   rU  zmap_table_add.html)	r`   r   rE   rc   rd   r   ri   rX   r   )r2   rX   rV  rD  r5   r6   r6   r7   map_table_add  s   

rY  c                 C   s"   t jj|d}|r|  tdS )NrI   rT  )r   r+   r>   rA   r   )r2   r|   r   r6   r6   r7   map_table_delete  s   rZ  r   )Idjango.shortcutsr   r   r   modelsr   r   r   r	   r
   r   django.core.paginatorr   adminportal.viewsr   django.contrib.auth.decoratorsr   r   r   rest_framework.paginationr   formsr   r   r   r   django.appsr   django.httpr   rest_framework.decoratorsr   rest_framework.responser   rest_frameworkr   serializersr   r   	django.dbr   r   products.modelsr    django.contribr!   r   django.core.mailr"   NavyaBackers.settingsr#   accounts.modelsr$   r8   rD   rz   r   r   r   r   r   r5  r6  r9  r>  rF  rG  rH  rR  rS  rX  rY  rZ  r6   r6   r6   r7   <module>   s     


 
)
)
/
 @
k
  p










