Você está na página 1de 10

21/03/2022 11:22 Untitled-1

1 import openpyxl
2 import os
3 import sys
4 import platform
5 import glob
6 import csv
7 import pandas as pd
8 import getpass
9 import tkinter as tk
10 from tkinter import filedialog
11 from datetime import datetime
12 from shutil import copyfile
13 from ldap3 import Server, Connection, SIMPLE, SYNC, ALL, SASL, NTLM, SUBTREE,
ALL_ATTRIBUTES, ALL_OPERATIONAL_ATTRIBUTES, MODIFY_REPLACE, MODIFY_ADD
14 from unidecode import unidecode
15
16 '''CRIA TIMESTAMP'''
17 data = datetime.now()
18 data = data.strftime("%Y%m%d%H%M")
19
20 '''
21 ###########################################
22 ###########################################
23 ###########################################
24 FUNCOES
25 ###########################################
26 ###########################################
27 ###########################################
28 '''
29
30 '''FORMATA NOME DO USUARIO PARA BUSCAR NO AD'''
31 def formata_nome(nome_csv):
32 global para_buscar
33 para_buscar = nome_csv
34 para_buscar = para_buscar.title()
35 para_buscar = unidecode(para_buscar)
36 para_buscar = para_buscar.replace(" E "," e ")
37 para_buscar = para_buscar.replace(" De "," de ")
38 para_buscar = para_buscar.replace(" Da "," da ")
39 para_buscar = para_buscar.replace(" Das "," das ")
40 para_buscar = para_buscar.replace(" Do "," do ")
41 para_buscar = para_buscar.replace(" Dos "," dos ")
42
43 '''BUSCA USUARIOS HABILITADOS NO AD APOS A FORMATACAO DE NOME (USA A MESMA VARIAVEL)'
44 def busca_AD():
45 global para_buscar
46 global resultado
47 filtro="(&(objectClass=user)(userAccountControl=512)(name=" + para_buscar + "))"
48 # 512 - USUARIO HABILITADO (512),
49 # 514 - USUARIO DESABILITADO (2 + 512),
50 conn.search(
51 search_base = 'OU=usuarios,DC=empresa,DC=com',
52 search_filter = filtro,
53 search_scope = 'SUBTREE',
54 attributes = ['distinguishedName', 'name', 'title', 'manager', 'department',
'physicalDeliveryOfficeName', 'userAccountControl']
55 )
56 resultado = conn.entries
57
58 '''CASO A BUSCA NÃO ENCONTRE O USUARIO VERIFICA SE ESTE DESABILITADO'''
59 def busca_AD_desab():

localhost:61785 1/10
21/03/2022 11:22 Untitled-1
60 global para_buscar
61 global resultado
62 filtro="(&(objectClass=user)(userAccountControl=514)(name=" + para_buscar + "))"
63 # 512 - Normal account (512),
64 # 514 - Disable account (2 + 512),
65 conn.search(
66 search_base = 'OU=usuarios,DC=empresa,DC=com',
67 search_filter = filtro,
68 search_scope = 'SUBTREE',
69 attributes = ['name', 'userAccountControl']
70 )
71 resultado = conn.entries
72
73 '''
74 ###########################################
75 ###########################################
76 ###########################################
77 MANIPULANDO O ARQUIVO EXCEL
78 ###########################################
79 ###########################################
80 ###########################################
81 '''
82
83
84 ''' VERIFICA O ARQUIVO XLS* MAIS NOVO NA PASTA '''
85 '''ESPECIFICANDO LOCAL DO ARQUIVO PARA EFETUAR A BUSCA'''
86 print("Iniciando script...")
87 print("Abrindo janela para seleção do arquivo da movimentação...")
88
89 root = tk.Tk()
90 root.withdraw()
91
92 arquivo_excel = filedialog.askopenfilename()
93 arquivo_excel = arquivo_excel.replace("/","\\")
94 caminho_arq = arquivo_excel[0:(arquivo_excel.rfind("\\")) + 1]
95 #caminho_arq = ('C:\\movimentacao\\')
96 print("Arquivo selecionado foi: " + arquivo_excel)
97 print("E sua pasta é: " + caminho_arq)
98
99 '''SELECIONA O ARQUIVO E PLANILHA PARA EDIÇÃO'''
100 arq = openpyxl.load_workbook(arquivo_excel)
101 pl = arq[arq.sheetnames[0]]
102 print("A planilha selecionada é: " + str(pl))
103 print("Iniciando validação da planilha...")
104
105 print("")
106 print("")
107
108 ''' VALIDA A PLANILHA
109
110 BUSCA PELA LINHA DOS CABEÇALHOS'''
111 coluna_max = pl.max_column
112 linha_max = pl.max_row
113 linha = 1
114 coluna = 1
115 cabecalhos = ['NOME','CARGO','MAT GESTOR','GESTOR ANTERIOR','CR NOME','MAT
GESTOR','NOVO GESTOR','CR Nº','CR NOME','FILIAL','DATA DA ALTERAÇÃO']
116 achado = 0
117 vazios = 0
118 col = 1
119 print("Validando a planilha")

localhost:61785 2/10
21/03/2022 11:22 Untitled-1
120 print("Buscando os cabeçalhos padrão do arquivo")
121 for linha in range(1,linha_max):
122 if (achado > 4):
123 linha_cabecalhos = linha - 1
124 break
125 if (vazios > 0):
126 vazios = 0
127 for coluna in range(1,coluna_max + 1):
128 if (vazios > 3):
129 break
130 if ((pl.cell(row=linha, column=coluna).value == None) or (pl.cell(row=linha,
column=coluna).value in cabecalhos) == False):
131 vazios += 1
132 continue
133 if (pl.cell(row=linha, column=coluna).value in cabecalhos):
134 achado += 1
135 if (achado > 4):
136 break
137
138 '''VALIDA OS CABEÇALHOS E SAI SE NÃO ESTIVEREM CERTOS'''
139 print("Validando os cabeçalhos encontrados...")
140 linha = linha_cabecalhos
141 validador = 0
142 if (pl.cell(row=linha, column=3).value == "NOME"):
143 validador += 1
144 if (pl.cell(row=linha, column=4).value == "CARGO"):
145 validador += 1
146 if (pl.cell(row=linha, column=5).value == "MAT GESTOR"):
147 validador += 1
148 if (pl.cell(row=linha, column=6).value == "GESTOR ANTERIOR"):
149 validador += 1
150 if (pl.cell(row=linha, column=7).value == "CR Nº"):
151 validador += 1
152 if (pl.cell(row=linha, column=8).value == "CR NOME"):
153 validador += 1
154 if (pl.cell(row=linha, column=9).value == "FILIAL"):
155 validador += 1
156 if (pl.cell(row=linha, column=10).value == "NOVO CARGO"):
157 validador += 1
158 if (pl.cell(row=linha, column=11).value == "MAT GESTOR"):
159 validador += 1
160 if (pl.cell(row=linha, column=12).value == "NOVO GESTOR"):
161 validador += 1
162 if (pl.cell(row=linha, column=13).value == "CR Nº"):
163 validador += 1
164 if (pl.cell(row=linha, column=14).value == "CR NOME"):
165 validador += 1
166 if (pl.cell(row=linha, column=15).value == "FILIAL"):
167 validador += 1
168 if (pl.cell(row=linha, column=16).value == "Data da Alteração"):
169 validador += 1
170 if (validador != 14):
171 sys.exit("ERRO NAS COLUNAS, VERIFIQUE OS CABEÇALHOS")
172
173 print("")
174 print("")
175
176 print("Começando busca de dados para normalizacao da planilha")
177 '''BUSCA PELA PRIMEIRA E ULTIMA COLUNA QUE SERÁ USADA'''
178 linha = linha_cabecalhos
179 inicio_linhas = linha_cabecalhos + 1

localhost:61785 3/10
21/03/2022 11:22 Untitled-1
180 for coluna in range(1,coluna_max + 1):
181 if (pl.cell(row=linha, column=coluna).value == None):
182 continue
183 if (pl.cell(row=linha, column=coluna).value == None):
184 continue
185 valor = pl.cell(row=linha, column=coluna).value
186 if ((valor.upper() == "DATA DA ALTERAÇÃO") and valor != None):
187 fim_colunas = coluna
188 break
189 if (pl.cell(row=linha, column=coluna).value == "NOME"):
190 inicio_colunas = coluna
191
192 '''COLETA O NÚMERO DA ÚLTIMA LINHA COM VALOR'''
193 ini = 3
194 while pl.cell(row = ini, column = 3).value != None:
195 ini += 1
196 fim_linhas = ini - 1
197
198 print("Buscando por células com referência para outras...")
199 referencia = 0
200 for ln in range(inicio_linhas,fim_linhas):
201 for cl in range(inicio_colunas,fim_colunas):
202 tmp_valor = str(pl.cell(row=ln, column=cl).value)
203 if ("=" in tmp_valor):
204 referencia = 1
205 if (referencia == 1):
206 print("")
207 print("FOI ENCONTRADA UMA CELULA COM REFERENCIA NA LINHA", ln ," E COLUNA", cl
208 sys.exit("VERIFIQUE O ARQUIVO SELECIONADO")
209
210 '''REMOVE MESCLA DAS CÉLULAS, ACERTA A ALTURA DA LINHA E SALVA O ARQUIVO'''
211 print("Removendo mescla das células...")
212 mesclados = pl.merged_cells.ranges
213 para_sair = []
214 for x in range(len(mesclados)):
215 para_sair.append(str(mesclados[x]))
216 for i in para_sair:
217 pl.unmerge_cells(i)
218 arq.save(arquivo_excel)
219 pl.row_dimensions[2].height = pl.row_dimensions[10].height
220 arq.save(arquivo_excel)
221
222 '''DELETA AS COLUNAS E LINHAS DESNECESSÁRIAS E SALVA O ARQUIVO'''
223 print("Removendo colunas e linhas desnecessárias...")
224 '''P-S'''
225 pl.delete_cols(16,4)
226 arq.save(arquivo_excel)
227 '''M'''
228 pl.delete_cols(13)
229 arq.save(arquivo_excel)
230 '''K'''
231 pl.delete_cols(11)
232 arq.save(arquivo_excel)
233 '''D-I'''
234 pl.delete_cols(4,6)
235 arq.save(arquivo_excel)
236 '''A-B'''
237 pl.delete_cols(1,2)
238 arq.save(arquivo_excel)
239 '''APAGA AS LINHAS 1 E 2'''
240 pl.delete_rows(1,2)

localhost:61785 4/10
21/03/2022 11:22 Untitled-1
241 arq.save(arquivo_excel)
242
243 '''COLOCA _ NO LUGAR DO ESPAÇO NO TÍTULO DAS COLUNAS E SALVA O ARQUIVO'''
244 print("Normatizando títulos...")
245 pl.cell(row=1, column=1).value = (pl.cell(row=1, column=1).value).replace(" ", "_")
246 pl.cell(row=1, column=2).value = (pl.cell(row=1, column=2).value).replace(" ", "_")
247 pl.cell(row=1, column=3).value = (pl.cell(row=1, column=3).value).replace(" ", "_")
248 pl.cell(row=1, column=4).value = (pl.cell(row=1, column=4).value).replace(" ", "_")
249 arq.save(arquivo_excel)
250
251 print("Removendo linhas depois da tabela...")
252 ini = 2
253 fim = 0
254 while pl.cell(row = ini, column = 3).value != None:
255 ini += 1
256 if ((pl.cell(row=ini, column=3).value == None) or (len(pl.cell(row=ini,
column=3).value))):
257 ultima = ini
258 else:
259 ultima = ini + 1
260 pl.delete_rows(ultima,linha_max)
261 arq.save(arquivo_excel)
262
263 print("Formatacao finalizada. Iniciando correcao dos valores")
264 qtd_val_cor = ini - 2
265 '''CORREÇÕES NOS VALORES'''
266 print("")
267 print("")
268 print("Corrigindo valores - total de " + str(qtd_val_cor))
269 print("1", end="\r")
270
271 for l in range(2, ini):
272
273 print(str(l), end="\r")
274 (pl.cell(row = l, column = 1).value) = unidecode((pl.cell(row = l, column =
1).value))
275 (pl.cell(row = l, column = 3).value) = unidecode((pl.cell(row = l, column =
3).value))
276 arq.save(arquivo_excel)
277
278 '''CORRIGE O NOME DA JANET BAIREVA NO CAMPO NOME'''
279 if ((pl.cell(row = l, column = 1).value) == "ZHANETA KIRCHEVA BAIREVA"):
280 pl.cell(row = l, column = 1).value = "JANET BAIREVA"
281 arq.save(arquivo_excel)
282
283 '''CORRIGE O NOME DA JANET BAIREVA NO CAMPO SUPERVISOR'''
284 if ((pl.cell(row = l, column = 3).value) == "ZHANETA KIRCHEVA BAIREVA"):
285 pl.cell(row = l, column = 3).value = "JANET BAIREVA"
286 arq.save(arquivo_excel)
287
288 '''CORRIGE O SOBRENOME SANT'ANNA'''
289 if ((pl.cell(row = l, column = 1).value) == "SANT ANNA"):
290 pl.cell(row = l, column = 1).value = "SANT'ANNA"
291 arq.save(arquivo_excel)
292
293 '''AJUSTE DE CARGOS TECH'''
294 if (pl.cell(row = l, column = 2).value) == "LEAD SOFTWARE ENGINEER_G11.1":
295 (pl.cell(row = l, column = 2).value) = "LEAD SOFTWARE ENGINEER"
296 arq.save(arquivo_excel)
297 continue
298 if (pl.cell(row = l, column = 2).value) == "LEAD SOFTWARE ENG_G11.1":
299 (pl.cell(row = l, column = 2).value) = "LEAD SOFTWARE ENGINEER"
localhost:61785 5/10
21/03/2022 11:22 Untitled-1
300 arq.save(arquivo_excel)
301 continue
302 if (pl.cell(row = l, column = 2).value) == "SOFTWARE ENGINEER I_G8":
303 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEER"
304 arq.save(arquivo_excel)
305 continue
306 if (pl.cell(row = l, column = 2).value) == "SOFTWARE ENGINEER II_G9":
307 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEER"
308 arq.save(arquivo_excel)
309 continue
310 if (pl.cell(row = l, column = 2).value) == "SOFTWARE ENGINEER III_G10":
311 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEER"
312 arq.save(arquivo_excel)
313 continue
314 if (pl.cell(row = l, column = 2).value) == "SR SOFTWARE ENGINEER_G11":
315 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEER"
316 arq.save(arquivo_excel)
317 continue
318 if (pl.cell(row = l, column = 2).value) == "SR SOFTWARE ENGINEER_G11.1":
319 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEER"
320 arq.save(arquivo_excel)
321 continue
322 if (pl.cell(row = l, column = 2).value) == "STAFF SOFTWARE ENGINEER_G12":
323 (pl.cell(row = l, column = 2).value) = "STAFF SOFTWARE ENGINEER"
324 arq.save(arquivo_excel)
325 continue
326 if (pl.cell(row = l, column = 2).value) == "STAFF SOFTWARE ENGINEER_G13":
327 (pl.cell(row = l, column = 2).value) = "STAFF SOFTWARE ENGINEER"
328 arq.save(arquivo_excel)
329 continue
330 if (pl.cell(row = l, column = 2).value) == "PRINCIPAL SOFTWARE ENGINEER_G14":
331 (pl.cell(row = l, column = 2).value) = "PRINCIPAL SOFTWARE ENGINEER"
332 arq.save(arquivo_excel)
333 continue
334 if (pl.cell(row = l, column = 2).value) == "PRINCIPAL SOFTWARE ENGINEER_G15":
335 (pl.cell(row = l, column = 2).value) = "PRINCIPAL SOFTWARE ENGINEER"
336 arq.save(arquivo_excel)
337 continue
338 if (pl.cell(row = l, column = 2).value) == "SOFTWARE ENG MANAGER_G12":
339 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEERING MANAGER"
340 arq.save(arquivo_excel)
341 continue
342 if (pl.cell(row = l, column = 2).value) == "SOFTWARE ENG MANAGER_G13":
343 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEERING MANAGER"
344 arq.save(arquivo_excel)
345 continue
346 if (pl.cell(row = l, column = 2).value) == "SR SOFTWARE ENG MANAGER_G14":
347 (pl.cell(row = l, column = 2).value) = "SOFTWARE ENGINEERING MANAGER"
348 arq.save(arquivo_excel)
349 continue
350
351 '''AJUSTE DE CARGOS GERAL'''
352 cel_cargo = pl.cell(row = l, column = 2).value
353 ultimo_espaco = cel_cargo.rfind(' ') + 1
354 pos_retirar = len(cel_cargo) - ultimo_espaco
355 retirar = cel_cargo[ultimo_espaco:len(cel_cargo)]
356 if (len(retirar) <= 3) and (retirar == "I") or (retirar == "II") or (retirar ==
"III") or (retirar == "IV") or (retirar == "V") or (retirar == "VI") or (retirar ==
"VII") or (retirar == "VIII") or (retirar == "SR") or (retirar == "PL") or (retirar ==
"JR"):
357 retirar = " " + retirar
358 cargo = cel_cargo.replace(retirar, "")
localhost:61785 6/10
21/03/2022 11:22 Untitled-1
359 pl.cell(row = l, column = 2).value = cargo
360 arq.save(arquivo_excel)
361
362 arq.save(arquivo_excel)
363
364 print("")
365 print("Valores corrigidos...")
366
367 '''SALVA O ARQUIVO'''
368 print("Salvando arquivo XLSX")
369 arq.save(arquivo_excel)
370 '''
371 ###########################################
372 ###########################################
373 ###########################################
374 MANIPULANDO O ARQUIVOS CSV
375 ###########################################
376 ###########################################
377 ###########################################
378 '''
379
380 csv_arq = caminho_arq + data + '.csv'
381 print("Exportando para CSV no camihnho " + csv_arq)
382 pd.read_excel(arquivo_excel).to_csv(csv_arq, index=None, header=True, sep='|')
383 print("Export finalizado...")
384 print("")
385 print("")
386 print("")
387
388 '''COLETA CSV RECENTE E GERA OS ARQUIVOS DE ROLLBACK, LOG E VALIDADOR'''
389 csv_validador = caminho_arq + data + "_validador.csv"
390 csv_rollback = caminho_arq + data + "_rollback.csv"
391 csv_erro = caminho_arq + data + "_erro.csv"
392
393 print("Serão gerados os arquivos CSV:")
394 print("Rollback - " + csv_rollback)
395 print("Validador - " + csv_validador)
396 print("Erro - " + csv_erro)
397
398 '''GERANDO LOG DE ERRO'''
399 print("Gerando CSV de erro")
400 with open(csv_erro, 'w', newline='', encoding='utf-8') as file_err:
401 pass
402
403 '''GERANDO ROLLBACK'''
404 print("Gerando CSV de rollback")
405 with open(csv_rollback, 'w', newline='', encoding='utf-8') as file_rbc:
406 writer = csv.writer(file_rbc, delimiter='|')
407 writer.writerow(['NOME','NOVO_CARGO','NOVO_GESTOR','CR_NOME','FILIAL'])
408
409 '''GERANDO VALIDADOR'''
410 print("Gerando CSV validador")
411 with open(csv_validador, 'w', newline='', encoding='utf-8') as file_val:
412 writer = csv.writer(file_val, delimiter='|')
413 writer.writerow(['NOME','NOVO_CARGO','NOVO_GESTOR','CR_NOME','FILIAL'])
414
415 # ===================
416 # ======= AD ========
417 # ===================
418 '''PEDE CREDENCIAL PARA CONEXAO COM O AD'''
419 print("INFORME O LOGIN DE REDE E SENHA PARA CONEXÃO COM O AD")

localhost:61785 7/10
21/03/2022 11:22 Untitled-1
420 usr = "empresa.com\\" + (str(input('Login: ')))
421 p = getpass.getpass()
422 '''FAZ CONEXAO COM O AD'''
423 print("Fazendo conexão com o dominio")
424 server = Server('empresa.com', port=636, use_ssl=True, get_info='ALL')
425 conn = Connection(server, user=usr, password=p, authentication=NTLM, auto_bind=True)
426 conn.bind()
427
428 '''LE O ARQUIVO CSV, FAZ A BUSCA NO AD PARA GERAR O ROLLBACK E VALIDADOR'''
429 print("Lendo o arquivo csv, fazendo busca no AD para gerar o rollback e validador")
430
431 with open(csv_arq, 'r') as csv_file:
432 csv_reader = csv.reader(csv_file, delimiter="|")
433 #PULA A PRIMEIRA LINHA QUE EH O CABECALHO
434 next(csv_reader)
435 linhas = [linha for linha in csv_reader]
436 print("Verificando nomes - total de " + str(len(list(csv_reader))))
437 linha_csv_contador = 0
438 for linha_csv in linhas:
439
440 print("Verificando o(a) usuario(a): " + str(linha_csv[0]))
441
442 #COLOCA NAS VARIAVEIS OS ITENS DAS COLUNAS
443 csv_nome = linha_csv[0]
444 csv_cargo = linha_csv[1]
445 csv_gestor = linha_csv[2]
446 csv_setor = linha_csv[3]
447 csv_filial = linha_csv[4]
448
449 #FORMATA O NOME, BUSCA NO AD E ARMAZENA O RESULTADO
450 print(" Formatando o nome e buscando o nome no AD")
451 formata_nome(csv_nome)
452 busca_AD()
453 nome_achado = resultado
454
455 #FORMATA O NOME DO GESTOR, BUSCA NO AD E ARMAZENA O RESULTADO
456 print(" Buscando o gestor informado")
457 formata_nome(csv_gestor)
458 busca_AD()
459 gestor_achado = resultado
460
461 # SE A BUSCA DO GESTOR NAO RETORNAR VAZIA
462 if (len(gestor_achado) == 0):
463 formata_nome(csv_gestor)
464 busca_AD_desab()
465 gestor_valida = resultado
466 #SE A BUSCA NAO RETORNAR VAZIA
467 if (len(gestor_valida) != 0):
468 # ESCREVE NO LOG "GESTOR DESABILITADO NO AD"
469 with open(csv_erro, 'a+', newline='') as file_err:
470 writer = csv.writer(file_err, delimiter='|')
471 writer.writerow([csv_nome, "O GESTOR " + csv_gestor + " ATRIBUIDO
ESTA DESABILITADO NO AD"])
472 print(" O(A) gestor(a) atribuido para o(a) usuario(a) esta
desabilitado. Erro escrito no log")
473 continue
474 else:
475 # ESCREVE NO LOG "GESTOR COM ESTE NOME NAO FOI ENCONTRADO NO AD"
476 with open(csv_erro, 'a+', newline='') as file_err:
477 writer = csv.writer(file_err, delimiter='|')
478 writer.writerow([csv_nome, "O GESTOR " + csv_gestor + " ATRIBUIDO
NAO FOI ENCONTRADO NO AD COM O NOME INFORMADO"])
localhost:61785 8/10
21/03/2022 11:22 Untitled-1
479 print(" O(A) gestor(a) atribuido para o(a) usuario(a) nao foi
encontrado no AD. Erro escrito no log")
480 continue
481 else:
482 bucsa_dn_gest = str((gestor_achado[0]).distinguishedName)
483
484 # SE A BUSCA NAO RETORNAR VAZIA
485 if (len(nome_achado) != 0):
486 print(" Tratando dados encontrados....")
487 #ARMAZENA O RESULTADO DA BUSCA NAS VARIAVEIS
488 #.decode('iso-8859-1').encode('utf8')
489 bucsa_nome = (nome_achado[0]).name
490 if (len((nome_achado[0]).title) != 0):
491 bucsa_cargo = (nome_achado[0]).title
492 else:
493 bucsa_cargo = ""
494 #O NOME DO SUPERVISOR EH SEPARADO POIS EH LISTADO COMO "DistinguishedName"
495 if (len(unidecode(((str((nome_achado[0]).manager)).split(',')
[0]).replace("CN=",""))) != 2):
496 #bucsa_supervisor =
unidecode(((str((nome_achado[0]).manager)).split(',')[0]).replace("CN=",""))
497 bucsa_supervisor = bucsa_dn_gest
498 else:
499 bucsa_supervisor = ""
500 if (len((nome_achado[0]).department) != 0):
501 bucsa_setor = (nome_achado[0]).department
502 else:
503 bucsa_setor = ""
504 if (len((nome_achado[0]).physicalDeliveryOfficeName) != 0):
505 bucsa_escritorio = (nome_achado[0]).physicalDeliveryOfficeName
506 else:
507 bucsa_escritorio = ""
508 bucsa_dn_user = str((nome_achado[0]).distinguishedName)
509 #ESCREVE O RESULTADO NO ARQUIVO DE ROLLBACK E VALIDADOR
510 with open(csv_validador, 'a+', encoding='utf-8', newline='') as file:
511 writer = csv.writer(file, delimiter='|')
512
writer.writerow([bucsa_nome,bucsa_cargo,bucsa_supervisor,bucsa_setor,bucsa_escritorio
513 with open(csv_rollback, 'a+', encoding='utf-8', newline='') as file_rbc:
514 writer = csv.writer(file_rbc, delimiter='|')
515 writer.writerow([(nome_achado[0]).name,(nome_achado[0]).title,
(nome_achado[0]).manager,(nome_achado[0]).department,
(nome_achado[0]).physicalDeliveryOfficeName])
516
517 print(" Dados escritos no arquivo de rollback e validador...")
518 else:
519 #BUSCA O USUARIO PARA VALIDAR SE ESTA DESABILITADO
520 formata_nome(csv_nome)
521 busca_AD_desab()
522 nome_achado = resultado
523 #SE A BUSCA NAO RETORNAR VAZIA
524 if (len(nome_achado) != 0):
525 # ESCREVE NO LOG "USUARIO DESABILITADO NO AD"
526 with open(csv_erro, 'a+', newline='') as file_err:
527 writer = csv.writer(file_err)
528 writer.writerow([csv_nome, "USUARIO DESABILITADO NO AD"])
529 print(" O(A) usuario(a) " + csv_nome + "esta desabilitado no AD")
530 else:
531 # ESCREVE NO LOG "USUARIO COM ESTE NOME NAO FOI ENCONTRADO NO AD"
532 with open(csv_erro, 'a+', newline='') as file_err:
533 writer = csv.writer(file_err)
534 writer.writerow([csv_nome, "USUARIO COM ESTE NOME NAO FOI

localhost:61785 9/10
21/03/2022 11:22 Untitled-1
ENCONTRADO NO AD"])
535 print(" O(A) usuario(a) " + csv_nome + "nao foi encontrado no AD co
o nome informado")
536 linha_csv_contador += 1
537
538 print("")
539 print("")
540 print("")
541
542 print("Lendo o arquivo validador para realizar as alterações")
543 with open(csv_validador, 'r') as csv_vlfile:
544 csv_vlreader = csv.reader(csv_vlfile, delimiter='|')
545 next(csv_vlfile)
546 for linha_vl in csv_vlreader:
547 vl_nome = (linha_vl[0]).upper()
548 print("Tratando o(a) usuario(a) " + vl_nome)
549 novo_cargo = linha_vl[1]
550 novo_sup = linha_vl[2]
551 novo_setor = linha_vl[3]
552 novo_escr = linha_vl[4]
553 print(" Novo cargo: " + novo_cargo)
554 print(" Novo gestor(a): " + novo_sup)
555 print(" Novo setor: " + novo_setor)
556 print(" Escritorio: " + novo_escr)
557 print("")
558 conn.modify(bucsa_dn_user, {'title': [(MODIFY_REPLACE, [novo_cargo])]})
559 conn.modify(bucsa_dn_user, {'manager': [(MODIFY_REPLACE, [novo_sup])]})
560 conn.modify(bucsa_dn_user, {'department': [(MODIFY_REPLACE, [novo_setor])]})
561 conn.modify(bucsa_dn_user, {'physicalDeliveryOfficeName': [(MODIFY_REPLACE,
[novo_escr])]})
562 print("****************** Alterado no AD ******************")
563
564 conn.unbind()

localhost:61785 10/10

Você também pode gostar