mirror of https://github.com/interlegis/sigi.git
Felipe Vieira
13 years ago
2 changed files with 169 additions and 8 deletions
@ -0,0 +1,159 @@ |
|||||
|
# coding= utf-8 |
||||
|
import sys |
||||
|
import csv |
||||
|
from datetime import datetime |
||||
|
from django.core.management.base import BaseCommand, CommandError |
||||
|
from django.contrib.auth.models import User |
||||
|
from sigi.apps.servidores.models import Servidor, Servico, Subsecretaria |
||||
|
from sigi.apps.contatos.models import Municipio |
||||
|
|
||||
|
#print 'removendo...' |
||||
|
#for u in User.objects.filter(date_joined__gte=datetime(2011, 12, 9, 10, 58, 49, 83734)).all(): |
||||
|
# u.servidor_set.all().delete() |
||||
|
# u.delete() |
||||
|
|
||||
|
print 'iniciando...' |
||||
|
class MigrationError(Exception): |
||||
|
pass |
||||
|
|
||||
|
class Command(BaseCommand): |
||||
|
help = 'Migra usuários do antigo Sistema de RH' |
||||
|
|
||||
|
def handle(self, *args, **options): |
||||
|
reader = csv.reader(open("/tmp/pessoal.csv"), delimiter=',', quotechar="\"") |
||||
|
|
||||
|
BRASILIA = Municipio.objects.get(codigo_ibge=5300108) |
||||
|
|
||||
|
# Read the column names from the first line of the file |
||||
|
fields = reader.next() |
||||
|
for row in reader: |
||||
|
# cria um dict com a primeira e a linha atual |
||||
|
pessoa = zip(fields, row) |
||||
|
p = {} |
||||
|
for (name, value) in pessoa: |
||||
|
p[name] = value.strip() |
||||
|
|
||||
|
# buscar usuário e servidor da linha atual |
||||
|
try: |
||||
|
# procuro o usuario por email se for interlegis |
||||
|
if not p['email'] or not ('@interlegis' in p['email']): |
||||
|
raise MigrationError |
||||
|
user = User.objects.get(email__startswith=p['email']) |
||||
|
servidor = user.servidor |
||||
|
except (MigrationError, User.DoesNotExist): |
||||
|
try: |
||||
|
# se nao encontrar procura por nome |
||||
|
if not p['nome_completo']: |
||||
|
raise MigrationError |
||||
|
servidor = Servidor.objects.get(nome_completo=p['nome_completo']) |
||||
|
except (MigrationError, Servidor.DoesNotExist): |
||||
|
try: |
||||
|
# Cria um usuario tratando os casos incompletos |
||||
|
# fulano@interlegis. |
||||
|
if not '@' in p['email']: |
||||
|
raise MigrationError |
||||
|
username = p['email'].split('@')[0].lower() |
||||
|
if '@interlegis' in p['email']: |
||||
|
# pode ser um antigo usuario do ad |
||||
|
email = username + '@interlegis.gov.br' |
||||
|
else: |
||||
|
# cria um username a partir do email sem |
||||
|
# colidir com os usuarios ldap |
||||
|
username = username + '__' |
||||
|
email = '' |
||||
|
if not username or username == '__': |
||||
|
raise MigrationError |
||||
|
names = p['nome_completo'].split(' ') |
||||
|
first_name = names[0] |
||||
|
last_name = " ".join(names[1:]) |
||||
|
user = User.objects.create( |
||||
|
username = username, |
||||
|
email = email, |
||||
|
first_name = first_name, |
||||
|
last_name = last_name, |
||||
|
is_active= False |
||||
|
) |
||||
|
servidor = user.servidor |
||||
|
except Exception, e: |
||||
|
print ", ".join(row) |
||||
|
continue |
||||
|
|
||||
|
# mapeando dados simples |
||||
|
servidor.nome_completo = p['nome_completo'] |
||||
|
servidor.cpf = p['cpf'] |
||||
|
servidor.rg = p['identidade'] |
||||
|
servidor.apelido = p['username'] |
||||
|
servidor.matricula = p['matricula'] |
||||
|
servidor.ato_exoneracao = p['ato_exoneracao'] |
||||
|
servidor.ato_numero = p['ato_numero'] |
||||
|
servidor.ramal = p['ramal'] |
||||
|
|
||||
|
if p['email'] and not '@interlegis' in p['email']: |
||||
|
servidor.email_pessoal= p['email'] |
||||
|
|
||||
|
if p['inativo']=="-1": |
||||
|
servidor.user.is_active = False |
||||
|
else: |
||||
|
servidor.user.is_active = True |
||||
|
servidor.user.save() |
||||
|
|
||||
|
if p['de_fora']=="-1": |
||||
|
servidor.de_fora = True |
||||
|
else: |
||||
|
servidor.de_fora = False |
||||
|
|
||||
|
if p['sexo'].upper() == 'M': |
||||
|
servidor.sexo = 'M' |
||||
|
elif p['sexo'].upper() == 'F': |
||||
|
servidor.sexo = 'F' |
||||
|
|
||||
|
if p['turno']=="1": |
||||
|
servidor.turno = 'M' |
||||
|
elif p['turno']=="2": |
||||
|
servidor.turno = 'T' |
||||
|
elif p['turno']=="3": |
||||
|
servidor.turno = 'N' |
||||
|
|
||||
|
if p['aniversario']: |
||||
|
servidor.data_nascimento = datetime.strptime(p['aniversario'], "%Y-%m-%d 00:00:00") |
||||
|
|
||||
|
if p['data_nomeacao']: |
||||
|
servidor.data_nomeacao = datetime.strptime(p['data_nomeacao'], "%Y-%m-%d 00:00:00") |
||||
|
|
||||
|
if p['secretaria']: |
||||
|
secretaria = Subsecretaria.objects.get_or_create(sigla=p['secretaria'])[0] |
||||
|
servico = Servico.objects.get_or_create(sigla=(p['servico'] or 'desconhecido'))[0] |
||||
|
servico.subsecretaria = secretaria |
||||
|
servico.save() |
||||
|
servidor.servico = servico |
||||
|
|
||||
|
if p['telefone']: |
||||
|
try: |
||||
|
t = servidor.telefones.get(numero=p['telefone']) |
||||
|
except: |
||||
|
t = servidor.telefones.create(numero=p['telefone']) |
||||
|
t.tipo = 'F' |
||||
|
t.save() |
||||
|
|
||||
|
if p['celular']: |
||||
|
try: |
||||
|
t = servidor.telefones.get(numero=p['celular']) |
||||
|
except: |
||||
|
t = servidor.telefones.create(numero=p['celular']) |
||||
|
t.tipo = 'M' |
||||
|
t.save() |
||||
|
|
||||
|
if p['endereco']: |
||||
|
try: |
||||
|
e = servidor.endereco.get(logradouro=p['endereco']) |
||||
|
except: |
||||
|
e = servidor.endereco.create(logradouro=p['endereco']) |
||||
|
e.municipio = BRASILIA |
||||
|
e.bairro = p['cidade'] # bizarro mas é isso mesmo |
||||
|
e.cep = p['cep'] |
||||
|
e.save() |
||||
|
|
||||
|
servidor.apontamentos = p['apontamentos'] |
||||
|
servidor.obs = p['obs'] |
||||
|
servidor.save() |
||||
|
|
Loading…
Reference in new issue