
    R({j{9                        d Z ddlZddlZddlZddlZddlmZmZ dZdZdZ	de dd	d
Z
dZdZdZdZdZg dZdddZd Zd Zd Zd Zd Zd Zd Zd Zedk(  rs ed        ede de         ed e d!        ed"        e       \  ZZ ed# ee       d$ ee       d%        e       Z eee      Z  ee d&           ed'       yy)(ui   
Sweet Angels - SDR Médio Porte Sorocaba
Setup: custom fields + importação de 300 leads no CRM Linkia
    N)datetimedatez(pit-5c81b5cf-19ef-4b6d-8d90-2df3a3e054b74z6Fjpgj2soAQZpu8Ddkz$https://services.leadconnectorhq.comzBearer z
2021-07-28zapplication/json)AuthorizationVersionzContent-TypeKMQE42Xf8IQ0WoNxM77rz$74908ed8-4fbf-447f-9341-b8e8f72feeaezW/opt/mia/workspace/clientes/sweet_angels/sdr_medio_porte/dados/base_prospeccao_300.xlsxzG/opt/mia/workspace/clientes/sweet_angels/sdr_medio_porte/field_map.jsonzV/opt/mia/workspace/clientes/sweet_angels/sdr_medio_porte/medio_porte_envio_linkia.json))IDID_ProspeccaoNUMBERN)Empresar   TEXTN)   Razão socialRazao_Socialr   N)CNPJr   r   N)Segmentor   r   N)CidadeCidade_Prospeccaor   N)UFr   r   N)zFaixa de porteFaixa_de_Porter   N)zPorte ReceitaPorte_Receitar   N)zCapital socialCapital_Socialr   N)zData de aberturaData_de_AberturaDATEN)TelefoneTelefone_Prospeccaor   N)
Telefone 2
Telefone_2r   N)E-mailEmail_Prospeccaor   N)Siter    r   N)u
   Evidência	Evidenciar   N)zSinal de investimentoSinal_Investimentor   N)
PrioridadePrioridade_Leadr   N)zDecisor sugeridoDecisor_Sugeridor   N)zFonte empresarialFonte_Empresarialr   N)zFonte cadastralFonte_Cadastralr   N)u   Data da validaçãoData_da_Validacaor   N)z
Status CRM
Status_CRMr   N)u   ResponsávelResponsavelr   N)u   Próxima açãoProxima_Acaor   N)u   Data próxima açãoData_Proxima_Acaor   N)u   ObservaçõesObservacoesr   NOXuuJ2qaOS3Rft8yYYbMHTynXy6CmQBknlpaGxBH)r   r    c                     t        j                  t         |  t              }|j	                          |j                         S )Nheaders)requestsgetBASEHEADERSraise_for_statusjson)pathrs     H/opt/mia/workspace/clientes/sweet_angels/sdr_medio_porte/setup_import.pyapi_getr<   E   s1    vdV_g6A668O    c                     t        j                  t         |  t        |      }|j                  }	 |j                         }|j                  |fS # t        $ r d|i}Y w xY wN)r2   r8   raw)r3   postr5   r6   textr8   	Exceptionstatus_coder9   bodyr:   	body_textdatas        r;   api_postrI   K   sa    tfowTBAI"vvx ==$  "y!"   A A A c                     t        j                  t         |  t        |      }|j                  }	 |j                         }|j                  |fS # t        $ r d|i}Y w xY wr?   )r3   putr5   r6   rB   r8   rC   rD   rE   s        r;   api_putrM   U   sa    vdV_gDAAI"vvx ==$  "y!"rJ   c            
      @   t        d       t        dt         d      } | j                  dg       }|D ci c]$  }|d   j	                         j                         |& }}|D ci c]  }|d   j                         | }}i }t        D ]  \  }}}}	|t        v r]t        |   t        fd|D        d       }
|
r|
d   n||
r|
d   nd|j                          d	d
||<   t        d| d d| d       n|j                  dd      j                         }|j	                         j                         }|j                  |      xs |j                  |      }|r0|d   |d   |d   d	d
||<   t        d| d|d    d|d    d       ||dd}|	r|	|d<   t        dt         d|      \  }}t        j                  d       |dv rW|j                  d|      }|j                  dd      |j                  dd      }||dd
||<   t        d| d d| d       t        d| d| d|        d |d d| d
||<    t        t        d      5 }t        j                   ||dd !       d d d        t        d"t                |S c c}w c c}w # 1 sw Y   'xY w)#Nz,
=== FASE 1: Mapeamento de custom fields ===z/locations/z/customFieldscustomFieldsnamefieldKeyc              3   4   K   | ]  }|d    k(  s|  yw)idN ).0ffids     r;   	<genexpr>z"build_field_map.<locals>.<genexpr>r   s     KAAdGsNaKs   zcontact.reutilizado)field_id
field_name	field_keystatusz
  [REUSO] z ->  ()_ rS   contact)rP   dataTypemodelpicklistOptionsg?      customField criadoz  [CRIADO] z	  [ERRO] : erro_wF   ensure_asciiindentz
Field map salvo em )printr<   LOCr4   striplowerFIELDS_SPECEXISTING_FIELD_IDSnextreplacerI   timesleepopenFIELD_MAP_PATHr8   dump)existingexisting_fieldsrV   by_nameby_key	field_mapcol_planilhanome_crmdtypepicklist	field_obj	key_lower	alt_lowerfoundpayloadrD   respcffkeyrW   s                      @r;   build_field_mapr   b   s   	
9:SE78Hll>26O 6EEqy &&(!+EGE1@AAq}""$a'AFAI5@ ;1x))$X.CKKTRI!3<i/(7@i
3QYQ_Q_QaPbFc+	'Il# J|nDRzCD $$S#.446	 &&(..0	I&@'++i*@#Dk#Fm#J/+	'Il# J|nDtRfaPQ !!

 )1G%&${3%}%EwOT

3*$-.B&&r"C66*b)D!&"&	'Il# K~T#b
!DEIl^2k]!D6BC"&" %k]3	'Il#m;z 
nc	" >a		)QU1=> 
!.!1
23M FAB> >s   )J
%JJJc                 X   | yt        | t        t        f      rt        | d      r| j	                  d      S t        | t
              r-| t        |       k(  rt        t        |             S t        |       S t        | t              rt        |       S t        |       j                         xs dS )u?   Converte valores da planilha para string compatível com o CRM.Nstrftimez%Y-%m-%d)	
isinstancer   r   hasattrr   floatintstrru   )vals    r;   serialize_valuer      s    
{#$'(3
#<<
++#u#c(?s3x= 3x#s3xs8>>#t#r=   c            	         t        j                  t              } | d   }|d   D cg c]  }|j                   }}g }|j	                  dd      D ]2  }t        |      s|j                  t        t        ||                   4 | d   }t               |j	                  dd      D ]  }|d   	j                  |d           t        |fd	      }|fS c c}w )
Nu   Leads_Região   ro   T)min_rowvalues_onlyPrioridade_Ar   c                 \    | j                  d      v rdnd| j                  d      xs dfS )Nr	   r   r   i'  r4   )xprio_idss    r;   <lambda>zload_xlsx.<locals>.<lambda>   s1    QUU4[H5LRSUVUZUZ[_U`Uhdh/i r=   )key)openpyxlload_workbookXLSXvalue	iter_rowsanyappenddictzipsetaddsorted)	wbws_maincellr2   leadsrowws_prioleads_sortedr   s	           @r;   	load_xlsxr      s    				%B !G&-aj1dtzz1G1E   = .3xT#gs+,-.  GuH   = !q6LLQ !
 %%ijL!!! 2s   Cc                 @	   t        d       t               \  }}g }g }t        |      }t        |d      D ]{  \  }}|j	                  d      xs d| }	|j	                  d      }
|j	                  d      }|j	                  d      }|j	                  d      }|j	                  d	      |v }t        d
| d| d|	 d|rdnd        g }| j                         D ]M  \  }}|j	                  d      s|j	                  |      }t        |      }|7|j                  |d   |d       O t        |	|j	                  d      xs |	|dg|rdgng z   d}|rt        |      |d<   |rt        |      |d<   t        d|      \  }}|dk(  rdt        |      v r||j	                  d      xs i j	                  d      xs |j	                  d      }|s4dd l}|j                  dt        |            }|r|j                  d      nd }t        d|        ns|dv r8|j	                  d       xs i j	                  d!      xs |j	                  d!      }n7t        d"| d#|        |j                  |	d$| t        |      d d% d&       K|s1t        d'|        |j                  |	d(t        |      d d% d&       ~t        j                  d)       t         t        |	t"        d*|d+}t        d,|      \  }}|dv r_|j	                  d-      xs i j	                  d!      xs |j	                  d!      }|j                  |	|||d.       t        d/| d0|        nMt        d1| d#|        |j                  |	|d || d2       |j                  |	d3| t        |      d d% d&       t        j                  d4       ~ t%        j&                         j)                         |t        |D cg c]  }|j	                  d5      s| c}      t        |      ||d6}t+        t,        d7      5 } t/        j0                  || d8d9:       d d d        t        d;       t        d<|        t        d=|d>           t        d?|d@           t        dAt,                |S c c}w # 1 sw Y   ]xY w)BNu&   
=== FASE 2: Importação de leads ===r   r   Lead_r   r   r   r   r	   z  [/z] ra   z[PRIO-A]rj   rZ   )rS   r   r   zmedio-porte-sorocabar   )
locationIdrP   companyNamerO   tagsphoneemail
/contacts/i  	contactIdmetar   z[0-9a-zA-Z]{20}u"       -> Contato já existe, usando rf   rb   rS   z    [ERRO contato] rl   contact_rg   )empresamotivodetalheu.       [ERRO] Não conseguiu extrair contact_id: sem_contact_idg      ?r}   )
pipelineIdr   rP   pipelineStageIdr]   r   z/opportunities/opportunity)r   
contact_idopportunity_idprioridade_az    -> OK | contact=z | opp=z    [ERRO opportunity] )r   r   r   r   opp_erroopp_g333333?r   )	gerado_emtotalsucessos_countfalhas_countsucessosfalhasrn   Fro   rp   z
=== RESULTADO ===z  Total processado: z  Contatos + Opportunities OK: r   z
  Falhas: r   z  Resultado em: )rs   r   len	enumerater4   itemsr   r   rt   r   rI   researchgroupr{   r|   PIPELINE_IDENTRY_STAGEr   now	isoformatr}   RESULT_PATHr8   r   )!r   r   
leads_datar`   r   r   r   ileadr   cnpjteltel2r   is_priocustom_fieldsr   finforaw_valr   contact_payloadrD   r   r   r   matchopp_payload
status_oppresp_oppopp_idsresultrV   s!                                    r;   import_leadsr      s   	
34KMJHF:EZ+ `4((9%45((6"((:&((<(((8$((4.H,A3awb	:b*IJK #,??#4 		L%99Z(hh|,G!'*C$$":. & 		 "88O4?)+,G0@QST
 '*3xOG$'*5zOG$$\?CT#+T":((6*0b55kB[dhh{F[J		"4c$i@/4U[[^$
6zlCDJ&((9-388>P$((4.J'}Btf=>MMg8K=9Q^abf^ghlil^mnoB4&IJMMg9IVYZ^V_`dadVefg 	

3 '"*!%
  ((9;G
H#ll=17R<<TBXhllSWFXFOO")","(")	  (GF8DE+J<r(DEOO")","&")%/L  MMg4
|9LY\]eYfgkhkYlmn 	

3A`F lln..0(NQaee<L6MqNOf+F 
k3	 ;1		&!%:; 
!	 
()	+F3C,D+E
FG	Jvn-.
/0	[M
*+M O
; ;s   R5RRRc           	      x   | st        d       y t        d | D        d       }|sy |d   }t        d| d|d    d       t        j                  t         d| t
        	      }|j                   |j                  d
k(  r|j                         }|j                  d|      }|j                  dg       }t        dt        |              |d d D ]1  }t        d|j                  d       d|j                  d              3 |j                  dg       }t        d|        y t        d|j                          y )Nz&
[SKIP] Nenhum sucesso para verificar.c              3   D   K   | ]  }|j                  d       s|  yw)r   Nr   )rU   r   s     r;   rX   zspot_check.<locals>.<genexpr>b  s     =|)<!=s     r   z 
=== FASE 3: Spot-check contato r^   r   z) ===r   r1   rg   rb   rO   z  Custom fields preenchidos: 
   z    id=rS   z	 | value=r   r   z  Tags: z  Erro ao buscar contato: )
rs   ry   r3   r4   r5   r6   rB   rD   r8   r   )	r   firstcidr:   rH   rb   cfsr   r   s	            r;   
spot_checkr   ]  s.   78=X=tDE

C	-cU"U95E4Fe
LMvZu-w?AFF}}vvx((9d+kk."--c#hZ89cr( 	FBGBFF4L>266'?2CDE	F{{62& *1==/:;r=   __main__u7   Sweet Angels - SDR Médio Porte Sorocaba - Setup Importz
Location: z | Pipeline: zEntry stage: NOVO LEAD (r_   z<============================================================z
Planilha carregada: z	 leads | z Prioridade_Ar   u   
Concluído.)!__doc__r8   r{   r   r3   r   r   TOKENrt   r5   r6   r   r   r   r~   r   rw   rx   r<   rI   rM   r   r   r   r   r   __name__rs   r   r   r   r   r   rT   r=   r;   <module>r     s>  
     # 	3.ug&& '6`Zi@ #" Mf$ "0z@<8 z	
CD	Jse=
67	$[M
34	(O$;J	"3z?"39S]O=
YZ!I)X.Fvj!"	/ r=   