
    X(iZ                     |    d dl Z d dlZd dlmZmZmZ d dlmZ d dlmZ d dl	 d dl
mZ d dlmZmZ  G d d	e      Zy)
    N)datetimetimezonedate)Path)BeautifulSoup)*)CmfMessageMixin)before_requestcmf_contextc                   R    e Zd Zdej                  iZej                  ej                  j                  ej                  d      g      Zeed<    ej                  di eZej"                  dgz   Zdd fd
Z fdZd	 Zd
 Zed fd	       Zd ZddedefdZddZd Zd Z xZS )CmfWhatsapp
autoescapezmodules/voip/templatesloadersend_messager   )depthc                &    t        |   |d|i|S )Nr   )supersave)selfr   argskwargs	__class__s       $./modules/crm/models/cmf_whatsapp.pyr   zCmfWhatsapp.save   s    w|T99&99    c                 N    t        t        | 
  |i |}| j                  d       y )Nwhatsapp_delete)r   r   deletesend_cmd)r   r   r   resr   s       r   r   zCmfWhatsapp.delete   s&    K-t>v>'(r   c                 &    | j                  d       y)um   
        Отправляем событие на отключение сессии
        :return:
        whatsapp_disconnectNr   r   s    r   
disconnectzCmfWhatsapp.disconnect   s    
 	+,r   c                 x    | j                  dg       | j                  dd| j                  j                  i       y )Nload_from_datewhatsapp_connect)load_fieldsr   r&   jsonr#   s    r   connectzCmfWhatsapp.connect%   s5    *+,(+;T=P=P=U=U*VWr   c                 N    |dk(  r|sg }|g dg}dg}t        |   |f||d|S )Nparent)zstatus.status_typez!=CLOSEDCmfPipeline)filtermodels_list)r   field_options_list)clsrelation_field_namer/   r0   r   r   s        r   r1   zCmfWhatsapp.field_options_list)   sD    (*DEF(/Kw)*=pfZepioppr   c                 &    | j                  d       y )Nwhatsapp_statusr"   r#   s    r   check_statuszCmfWhatsapp.check_status2   s    '(r   cmddatac                     |
t               }t        j                  |d<   | j                  j                  |d<   t        ||dt        d        y )Norg_namecrm_idz	/whatsapp)	namespacesocket_clientroom)dictconfigORG_NAMEidvaluecmf_emit_eventwhatsapp_sio)r   r7   r8   s      r   r   zCmfWhatsapp.send_cmd5   s>    <6D!??ZXsDK|Z^_r   c                    |sy | d}d }t         j                  j                  |      }t               }	t	        |      }
g }|
j                  d      D ]=  }d|j                  j                  dd      v s"|j                  t        |d             ? |
j                  d      D ]  }|j                  t        |d	               |r)|D ]"  }|d
   }|j                  j                  d      }t        j                  d|      d   }t         j                  j                  dd|gdg      }t         j                  |j                  d      d   | |d      }t        |j                  d      5 }|j!                         }d d d        t#        j$                        j'                         }||	d<   t(        j*                  j                  d|j                  d      d          |	d<   |d   |	d<   % n)|
j-                         }t         j                  || |d      }|r%||_        d|_        ||_        |j5                          |j6                  j8                  |	d<   |j:                  j8                  |	d<   |j<                  j8                  |	d<   |j>                  j8                  |	d<   | jA                  d |	       |S # 1 sw Y   =xY w)!Nz@s.whatsapp.netazcmf-fileclass file)objtypeimgimagerK   srcz	/files/.*r   url==r   )r/   fields/sending)textchannel	client_idmessage_statusrb.   	mime_typerL   outphonemessagecrm_message_id
message_idwhatsapp_message_send)!models	CmfPersonget_by_phoner?   r   findAllattrsgetappendrefindallCmfAttachmentCmfChannelMessagesplitopen	file_pathreadbase64	b64encodedecode	mimetypes	types_mapget_textchat_messagemessage_flow	person_tor   rX   rC   rV   rB   rb   r   )r   phone_numberr`   ry   r   r   rX   channel_msgcontactparamssoupfilesrK   _filefull_urlurl_path
attachmentfrM   	plain_msgs                       r   r   zCmfWhatsapp.send_message=   s   #nO4	""//= W%<<$ 	9CSYY]]7B77Tc78	9 <<& 	6CLL#G45	6 /El99==/::lH=a@#1155eT8=T^a]b5c
$66HNN3<OPR<S?Cyir 7 t*..5 #&&(C#&&s+224!$v&/&9&9&=&=(..QTBUVWBXAY>Z&[{#!&vv/ I 22	;?9en 3 pK'3K$',K$$+K!%//55w',,22y#.>>#7#7 *55;;|-v6)# #s   ,J88K	c                 @   | j                  | j                  d       t        j                  j                  |d   | j                        }|ry t	        j
                  |d         }|j                         | j                  k  ry t        j                  |      }| |_        |d   |_	        |d   |_
        |j                  j                  d      d	   }t        j                  j                  |g d
      }|d   rd|_        d|_        ||_        nd|_        ||_        d}d}	|d   rU|j%                  d       d|j&                   d|j(                  j&                   }
| j+                  |d   |
|d         }d| }	|d   dk(  r|d   |_        n}|d   dk(  r@| j.                  j1                  d      }t3        |	d      } |j4                  d#i ||_        n5|d   dk(  rd|	 d|_        n!|d   dk(  rd |	 d|d    d!|_        nd"|_        |j7                          |S )$NT)
for_updateId)rb   
channel_id	Timestamp)message_raw	RemoteJid@r   )
user_localrQ   F)r/   FromMer^   sentinrI   rJ   z%Y%m%d_%H%M%S_r]   z/filesrL   rV   Textaudiozrecord.html)rP   rV   rN   z
<img src="z">documentz	<a href="z</a>u4   Не поддерживаемое сообщение )ri   rB   rd   rn   r   fromisoformatr   r&   rW   rb   rX   ro   re   get_or_create_by_phonerz   rY   r{   person_fromstrftimecode
cmf_author
_save_filerV   
_jinja_envget_templater?   renderr   )r   r   r   r   r}   message_dater_   r~   rq   rP   nametemplatecontexts                r   receive_messagezCmfWhatsapp.receive_messagek   s<    	T*..22k$>O\`\c\c2d--k+.FG!4!44..;.G"!,T!2 +K 8%%++C03""99%Hc9dx ',K$)/K&$+K!'+K$&-K#	v"++O<=Qw||nAkNdNdNiNiMjkDF(;T;{C[\I9+&Cv&(*62K G+33MBHs,G.x99K G+!+C53K J.!*3%r+f2E1FdKKUKr   c                 "   t        j                  |j                  d      d         }|dk(  rd}||z   }t        j                   d| j
                   dt        j                         j                  d       d| }t        j                  d|        t        j                  j                  j                  j                         }|j!                  |      }|j#                  d	d
d
       |j%                  t'        j(                  |      d	       |S )N;r   z
image/webpz.webpz/files/obj/rS   z%Y%mu/   Сохраняем файл сообщения FT)is_direxist_okparents)backup)rv   guess_extensionro   r@   PROJECT_DIR
class_namer   todayr   gdebugrd   CmfRFiledpdata_driverget_rd	get_rfilecreatewriters   	b64decode)	r   	file_datar   r]   file_extensionreq_filenamerq   rdiskrfiles	            r   r   zCmfWhatsapp._save_file   s    "229??33G3JK$$Nn,))*+doo5Fa

H]H]^dHeGffghtguv		A)MN""..557	*ED$?F$$Y/>r   r   )NN)N) __name__
__module____qualname__APPselect_jinja_autoescape_optionsjinja2FileSystemLoaderospathjoinr@   r   _loaderEnvironmentr   r	   api_methodsr   r   r$   r*   classmethodr1   r6   strr?   r   r   r   r   __classcell__)r   s   @r   r   r      s    c99:H%%rww||F4F4FH`'a&bcG HX###/h/J!--1
 
K !" :)-X q q)`C `t `,\0dr   r   )rs   rv   r   r   r   pathlibr   bs4r   cmf.include$modules.crm.models.cmf_message_mixinr	   cmf.appr
   r   r   r   r   r   <module>r      s.      - -    @ /]/ ]r   