
    f6i1                         d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ddl	m
Z
mZmZ ddlmZ  ed	d
      dededefd       Zd Z ed	d      defd       Z ed	d      d        Zy)uW   
Celery tasks для синхронизации данных с CRM системами
    )shared_task)Session)datetimeN)SessionLocal)IntegrationIntegrationSyncLogCustomer)get_crm_clientTz'app.workers.crm_sync.sync_crm_customers)bindnameintegration_idsync_log_id	tenant_idc           	         t               }	 |j                  t              j                  t        j                  |k(        j                         }|st        d| d      |j                  t              j                  t        j                  |k(        j                         }|st        d| d      	 t        |j                  |j                        }t        j                         }	t        j                  |	       	 |	j!                  t#        |||||            }
|	j!                  |j%                                |	j%                          |
|j%                          S # t        $ r}dt        |      v rt        d       d}~ww xY w# |	j!                  |j%                                |	j%                          w xY w# t        $ r}|j                  t              j                  t        j                  |k(        j                         }|r@d|_        t        |      |_        t+        j,                         |_        |j1                          |j                  t              j                  t        j                  |k(        j                         }|r'd|_        t        |      |_        |j1                           d}~ww xY w# |j%                          w xY w)	uM   
    Синхронизация клиентов из CRM системы
    Integration 
 not foundz	Sync log    не авторизована|   Интеграция не авторизована. Сначала завершите процесс авторизации.Nfailederror)r   queryr   filteridfirst	Exceptionr   r
   typeconfig
ValueErrorstrasyncionew_event_loopset_event_looprun_until_complete_sync_customers_asyncclosestatuserror_messager   utcnowcompleted_atcommit
last_error)selfr   r   r   dbintegrationsync_log
crm_clienteloopresults              ./var/www/notifications/app/workers/crm_sync.pysync_crm_customersr5      sR   
 .B3hh{+22;>>^3STZZ\l>*:*EFF 88./667I7L7LP[7[\bbdi}J?@@	'(8(8+:L:LMJ %%'t$	,,%j+xTVWF ##J$4$4$67JJL( 	
K  	.#a&8  !_  `  `	 ##J$4$4$67JJL  88./667I7L7LP[7[\bbd&HO%(VH"$,OO$5H!IIK hh{+22;>>^3STZZ\!(K%(VK"IIK!$ 	
sa   B(F< 5 E )F< ?F 0F< 	F'F  FF< 1F99F< <	J<C2J77J<<J? ?Kc                 F  K   d}d}d}d}d}	d}
	 	 | j                  |	|
       d{   }|snr|D ]V  }|dz  }	 | j                  |      }|j                  d      }d}|rb|j                  t              j                  t        j                  |k(  t        j                  d   j                  |k(        j                         }|si|j                  d      rX|j                  t              j                  t        j                  |k(  t        j                  |d   k(        j                         }|r|j                  d	      r
|d	   |_        |j                  d
      rFt        |j                  xs g       }t        |d
         }t        |j                  |            |_        |j                  xs i }|j!                  |j                  di              ||_        |dz  }ndt	        ||j                  d      |j                  d	      |j                  d
g       |j                  di             }|j#                  |       |dz  }|dz  dk(  r<|j%                          ||_        ||_        ||_        ||_        |j%                          Y |
|	z  }
t3        |      |	k  rn|j%                          d|_        ||_        ||_        ||_        ||_        t7        j8                         |_        |j%                          d|_        t7        j8                         |_        d|_        ||z   ||||d|_         |j%                          d||||dS 7 &# t.        $ r0}|dz  }t1        d|j                  d       d|        Y d}~Rd}~ww xY w# t.        $ r}d|_        tC        |      |_"        ||_        ||_        ||_        ||_        t7        j8                         |_        |j%                          d|_        tC        |      |_        |j%                           d}~ww xY ww)uL   
    Асинхронная синхронизация клиентов
    r   d   )limitoffsetN   r   crm_idemailphonetagsmeta)r   r<   r=   r>   r?   
   zError syncing contact z: success	connected)customers_syncedlast_sync_recordstotal_createdtotal_updatedtotal_failed)r&   records_processedrecords_createdrecords_updatedrecords_failedr   r   )#get_contactsnormalize_contactgetr   r	   r   r   r?   astextr   r<   r=   setr>   listunionupdateaddr*   rH   rI   rJ   rK   r   printlenr&   r   r(   r)   last_sync_atr+   
sync_statsr   r'   )r0   r.   r/   r   r-   rH   rI   rJ   rK   
batch_sizer9   contactscrm_contact
normalizedr;   existing_customerexisting_tagsnew_tagsexisting_metanew_customerr1   s                        r4   r$   r$   K   s     OONJFD'44:f4UUH' B!Q&!?!+!=!=k!JJ )__T2F(,%,.HHX,>,E,E$..);$MM(3::fD-  %' * -1H,.HHX,>,E,E$..);$NNj.AA-  %' *
 )%>>'26@6I-3%>>&1,/0A0F0F0L",MM'*:f+='>H59-:M:Mh:W5X-2 ):(>(>(D"%,,Z^^FB-GH1>).'1, (0&/",.."9",.."9!+!;!+!;( |,'1, )2-2		 6G23B03B02@/		{BJ j F 8}z)a f 			 $%6"#2 #2 "0 ( 1
		 )#+??#4 !% // A!2,,*"
 			  !2..,
 	
S VH ! "a'N2;??43H2IA3OPZ  "!$Q%6"#2 #2 "0 ( 1
		 %!$Q
		!sd   P!N MN IM	CN P!N 	N	%N>N N		N 	PBPPP!z(app.workers.crm_sync.test_crm_connectionc                    t               }	 |j                  t              j                  t        j                  |k(        j                         }|st        d| d      	 t        |j                  |j                        }t        j                         }t        j                  |       	 |j                  |j!                               }|j                  |j#                                |j#                          |r3d|_        d|_        |j)                          ddd|j#                          S d	|_        d
|_        |j)                          d	d
d|j#                          S # t        $ r}dt        |      v rt        d       d}~ww xY w# |j                  |j#                                |j#                          w xY w# t        $ r}|j                  t              j                  t        j                  |k(        j                         }|r'd	|_        t        |      |_        |j)                          d	t        |      dcY d}~|j#                          S d}~ww xY w# |j#                          w xY w)u@   
    Тестирование подключения к CRM
    r   r   r   r   NrB   zConnection successful)r&   messager   zConnection test failed)r   r   r   r   r   r   r   r
   r   r   r   r   r    r!   r"   r#   test_connectionr%   r&   r+   r*   )r,   r   r-   r.   r0   r1   r2   is_connecteds           r4   test_crm_connectionrf      s   
 .B,hh{+22;>>^3STZZ\l>*:*EFF	'(8(8+:L:LMJ %%'t$	22:3M3M3OPL##J$4$4$67JJL!,K%)K"IIK)6MN  	
 ")K%=K"IIK%2JK 	
G  	.#a&8  !_  `  `	 ##J$4$4$67JJL  6hh{+22;>>^3STZZ\!(K%(VK"IIK!c!f55

6 	
st   AF? ! E! )F? +F 
AF? ."F? !	F*FFF? 1F<<F? ?	IA9III II I1z'app.workers.crm_sync.scheduled_sync_allc                    t               }	 |j                  t              j                  t        j                  dk(  t        j
                  dk(        j                         }g }|D ]  }t        |j                  ddt        j                               }|j                  |       |j                          |j                  |       t        j                  |j                  |j                  |j                         }|j#                  |j                  |j$                  |j                  d        dt'        |       d|d	|j)                          S # |j)                          w xY w)
u   
    Запланированная синхронизация всех активных интеграций
    Можно добавить в celery beat для автоматической синхронизации
    TrB   	customersin_progress)r   	sync_typer&   
started_at)r   integration_nametask_idu,   Запущена синхронизация u    интеграций)rc   results)r   r   r   r   	is_activer&   allr   r   r   r(   rT   r*   refreshr5   delayr   appendr   rV   r%   )r,   r-   integrationsrn   r.   r/   r3   s          r4   scheduled_sync_allru     s1    .B(xx,33!!T)+-
 #% 	
 ' 	K)*~~%$#??,	H FF8IIKJJx  (--%%F NN"-..$/$4$4!99 '	4 Fc,FWEXXmn
 	

s   D4E E#)__doc__celeryr   sqlalchemy.ormr   r   r    app.db.sessionr   app.db.modelsr   r   r	   app.services.crm_integrationsr
   intr5   r$   rf   ru        r4   <module>r      s     "   ' C C 8 $FG9S 9s 9s 9 H9xPf $GH2c 2 I2j $FG/ H/r~   