o
    Qhg                     @   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dEd(d)Z<d*d+ Z=ed,gd-d. Z>eeddgd/d0 Z?d1d2 Z@eeddgd3d4 ZAeeddgd5d6 ZBeeddgd7d8 ZCeeddgd9d: ZDed,gd;d< ZEeeddgd=d> ZFeeddgd?d@ ZGeeddgdAdB ZHeeddgdCdD ZIdS )F    )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 r7   7/var/www/html/Testing_prj/Navya-Bakers/chatbot/views.py	chat_list   s   

r9   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   )r3   chat_idr4   querysetr7   r7   r8   chat_delete*   s   rE   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=   rC   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.htmlrW   option_valuer>   False)rY   rZ   r+   r[   )methodr   rF   r/   r   r,   DoesNotExistr   
ValueErrorr	   r?   r@   is_validsaverH   rI   r=   r   listkeys
startswithstrappendlenr   r
   createrK   optionssetrY   )r3   rY   formrG   option_table_idoption_column_idredirect_datarI   related_chat_idr=   rH   r4   rP   dynamic_field_list
error_dictflagir\   r6   option_id_listjoptionr7   r7   r8   chat_add6   s   
	


r{   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__idrK   column_nametable_name__idTr   redirect_flag	r.   r/   r   r   r,   r?   valuesr   rf   r3   r}   r   	map_tabler   r7   r7   r8   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   typerL   ErrorzChat not found!r   messagerQ   c                 S   "   g | ]}|j r|j j|j jfqS r7   related_option_idrK   r_   .0rw   r7   r7   r8   
<listcomp>   s    z'related_option_hide.<locals>.<listcomp>option_namer_   )r   r   rm   Fr   Table)r.   r/   r   r   r,   r?   r@   rP   allrm   rK   uuidUUIDrj   r_   ri   rH   )r3   r   r   r4   related_option_idsoptions_to_renderry   r7   r7   r8   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choicerG   r=   YesRelatedrL   r   default
ForeignKey_r   tablesFr   Noproducts)r.   r/   r   r,   r?   r@   rP   rH   r   
get_models_meta
get_fieldsget_internal_typerelated_modeldb_tablesplitrj   lowerr   rf   StopIterationget_app_configri   )r3   r   rG   r=   r*   table
table_listmodelwy
app_modelstable_list_productscountr7   r7   r8   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 )6NrL   rG   )r   columnr_   T)flatrF   instancerH   rI   r=   r   r   rJ   rM   FrN   rP   rQ   r   rR   dynamic_input_r      rS   rT   rU   rY   ro   rm   r+   r)   r*   r   rp   rs   rq   option_column_listr   option_type_valueexisting_optionsr[   rX   r\   r]   rC   zchat_edit.htmlc                 S   s   g | ]}t |jqS r7   )ri   rK   r   r7   r7   r8   r     s    zchat_edit.<locals>.<listcomp>rV   rW   r^   r>   ))r   r   rF   copyrG   r   r,   r?   rH   rI   rf   values_listra   r   r/   r@   r	   r   rd   re   r=   r   rg   rh   r   rk   rj   ri   r   rK   rC   rP   r   rn   rm   r
   removerB   rl   addr_   )$r3   rC   rY   r*   	post_datarm   r   ro   rG   rp   rq   rs   r   rr   r=   rH   rI   r4   rP   rt   ru   existing_list_postrv   rw   rK   r\   r6   rx   existing_option_listdynamic_field_setfields_to_removedatary   id_rz   related_datar7   r7   r8   	chat_editG  s  







	




	




	
r   c                 C   r|   )z3 Load columns dynamically based on selected table. r}   r~   r   Fr   r   rK   r   r   Tr   r   r   r7   r7   r8   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 rL   Nc                 S   r   r7   r   r   r7   r7   r8   r   >     " z%related_chat_list.<locals>.<listcomp>r   rQ   rM   )rP   TF)chat_id__inrC   	chat_namer*   r   )r   r,   r?   r@   r=   rC   r   rP   rj   rG   rf   rn   rm   rK   r_   r   r   r   r   )r3   rC   r4   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_customr9   rw   rv   ry   custom_fieldsfieldsr   
field_listchat_list_resultr7   r7   r8   related_chat_list  sb   




r   c                 C   s(   t  D ]}|j | kr|  S qd S N)r   r   __name__
capitalize)
model_namer   r7   r7   r8   get_model_by_name  s
   r   rF   c           *         s  ddl m} 	 | jjrtjj| jd }n| j	d}tjj|d }d}|r1|j
r1|j
}d}| j	dd }| j	d	d }| j	d
d }| j	dd }	t }
| j	dd|
_|dkr}tjjdd }|rst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 ]1}|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$ }|s7t d%| d&|j!}d }|rB|j!}d!"d'd( |#d)D }d }|rad!"d*d( |#d+D }t$jj|d$ }|sut d,| d&|j%|j&t'|} | st d-| d.d/d0 | j(j)D }!dd1l*m+   fd2d0| j(, D }"|!vs|!vrt d3 d4 d5| d6d!}#|ro| j(, D ]}$|$- d7kr|$j.j(j/#d)d8 |0 kr|$j1}# nqz|dkr*d9|"v r| jjdEi |#|i}%|%j|gd:}%t2|%3}|
4|| }nTt2| jjdEi |#|i3}|
4|| }n<d;|!v rO| jjdEi |#|i}%|%jdd<}%t2|%3}|
4|| }nt2| jjdEi |#|i3}|
4|| }W nb   g }Y n[|dkrd9|"v r| jj|gd:}%t2|%3}|
4|| }n:t2| j3}|
4|| }n*d;|!v r| jjdd<}%t2|%3}|
4|| }nt2| j3}|
4|| }W n t y }& zd}t5|&}W Y d }&~&nd }&~&ww |rd||j|j|j|j|j|j6r|j6j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|j6r/|j6jnd fd?d0|D |jd"krAdnd|jrH|nd d@
}'|7|' z|
8|W   S  t y }& z$tdt5|&|j|j|j|j|j|j6ry|j6jnd dAW  Y d }&~&  S d }&~&ww |	dkrz1t2|j9: }(dBd0 |(D })|
4|)| })|7d|j|j|j|j|j|j6r|j6jnd |)dC W q t y }& z$tdt5|&|j|j|j|j|j|j6r|j6jnd dAW  Y d }&~&  S d }&~&ww qz|
8|W S    tddDd Y S )FNr   r   )useranonymous_id)r   zLong DistanceShopr   rs   r_   rP   	page_size   welcomerM   )rG   T)r   rC   r   r   FzNo Welcome Message found)r   r   r   z)Missing 'related_chat_id' in request bodyr<   rL   zChat not found! rQ   )r   zInvalid related chat id!zEnd Message)r   rC   rG   r   r   r   rS   r   r   rJ   zTable with UUID z
 not foundc                 s       | ]}|  V  qd S r   r   r   wordr7   r7   r8   	<genexpr>      z#chatbot_data_api.<locals>.<genexpr>r   c                 s   r   r   r   r   r7   r7   r8   r     r   -zColumn with UUID zModel 'z' not found in  app.c                 S   s   g | ]}|j qS r7   )rV   r   fieldr7   r7   r8   r   !  s    z$chatbot_data_api.<locals>.<listcomp>ManyToManyFieldc                    s"   g | ]}t | r|js|jqS r7   )
isinstanceauto_createdrV   r   r   r7   r8   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rK   rW   r/   r   item	column_idr   r7   r8   r        $ )r   r   rC   r   rG   r   rP   r=   rm   r   redirect_namec                    r  r  r	  r
  r  r7   r8   r     r  )
r   rC   r   rG   r   rP   r=   rm   r   r  )r   r   rC   r   rG   rP   r   r=   c                 S   s   g | ]	}|j |jd qS )r  )rK   r_   r   r7   r7   r8   r     s    )r   rC   r   rG   rP   r   r=   rm   zpage not foundr7   );django.appsr   r   is_authenticatedr%   r,   r?   r@   r   r/   shopr   r   r   r   rC   r   r   r   HTTP_404_NOT_FOUNDHTTP_400_BAD_REQUESTr   rP   rG   rH   rp   rI   rq   r   r   map_namer	   	Exception
table_namejoinr   r   r   r  r   r   r   django.db.modelsr   r   r   r   r   r   rV   rf   r   paginate_querysetri   r=   rj   get_paginated_responserm   r   )*r3   r   user_locationr   
order_typeshop_id	data_typers   filter_option_valuerP   r5   welcome_messagerD   current_chatqueryset_dataserialized_datar4   
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_appendrm   r]   r7   )r   r  r   r8   chatbot_data_api  s  





	

"
"




%r9  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   rL   c                 S   r   r7   r   r   r7   r7   r8   r     r   z'related_option_list.<locals>.<listcomp>r   rm   Fr   )
r   r,   r?   r   rm   r   rK   r_   rj   r   )r3   rC   r*   r   rm   r   rw   r7   r7   r8   related_option_list  s   r:  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   )r3   r   rD   r7   r7   r8   check_related  s
   r=  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/   r0   r   r1   r   r2   r   r3   r   r5   r(   r6   r7   r7   r8   chat_tables     

rB  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 )Nr:   r   rF   r   FrN   chat_table_listr)   rY   
table_formcolumn_formr+   zchat_table_edit.html)r   r	   r   ra   r   rF   r   rd   re   r   r   rj   rY   r   )
r3   r}   rY   r   r   rF  rG  
table_datacolumn_datar6   r7   r7   r8   chat_tables_edit-  s$   


rJ  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 )NrF   FrN   rD  r)   rE  zchat_table_add.html)ra   r   rF   r   rd   re   r   r   rj   rY   r   )r3   rY   rF  rG  rH  rI  r6   r7   r7   r8   chat_tables_addG  s*   


rK  c                 C   s<   t jj|d}tjj|d}|r|r|  |  tdS )Nr:   r   rD  )r	   r,   r?   r   rB   r   )r3   r}   r   r   r7   r7   r8   table_chat_deleteg  s   rL  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 )NrF   msgrS   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!)ra   r   r/   r   r  emailphone_number
first_namer#   r$   r   r  ri   )r3   rM  admin_user_mail_idsubject	user_namer   r7  r7   r7   r8   send_user_queryr  s(   

 rV  c              	   C   r>  )Nr&   r?  r(   r   r)   r@  zmap_table_list.html)r   r,   r-   r   r.   r/   r0   r   r1   r   r2   r   rA  r7   r7   r8   
map_tables  rC  rW  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 )Nr:   rF   r   chat_table_map_listr)   rY   map_table_formr+   zmap_table_edit.html)r   r   ra   r   rF   rd   re   r   rj   rY   r   )r3   r}   rY   r   rZ  map_table_datar6   r7   r7   r8   map_table_edit  s   

r\  c                 C   s`   g }| j dkrt| j}| r| }tdS ||j nt }g }||dd}t| d|S )NrF   rX  r)   rY  zmap_table_add.html)	ra   r   rF   rd   re   r   rj   rY   r   )r3   rY   rZ  rH  r6   r7   r7   r8   map_table_add  s   

r]  c                 C   s"   t jj|d}|r|  tdS )NrJ   rX  )r   r,   r?   rB   r   )r3   r}   r   r7   r7   r8   map_table_delete  s   r^  r   )J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   r  r   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%   r9   rE   r{   r   r   r   r   r   r   r9  r:  r=  rB  rJ  rK  rL  rV  rW  r\  r]  r^  r7   r7   r7   r8   <module>   s     


 
)
)
/
 @
j
  u







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