Browse Source

script para migracao de servidores do sistema de rh

diagnosticos
Felipe Vieira 13 years ago
parent
commit
6077ef3dd7
  1. 159
      sigi/apps/servidores/management/commands/migra.py
  2. 18
      sigi/apps/servidores/models.py

159
sigi/apps/servidores/management/commands/migra.py

@ -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()

18
sigi/apps/servidores/models.py

@ -8,10 +8,10 @@ class Subsecretaria(models.Model):
""" Modelo para representação das Subsecretarias do Interlegis
"""
nome = models.CharField(max_length=50)
sigla = models.CharField(max_length=10)
nome = models.CharField(max_length=50, null=True)
sigla = models.CharField(max_length=10, null=True)
# servidor responsavel por dirigir a Subsecretaria
responsavel = models.ForeignKey('servidores.Servidor', related_name='diretor')
responsavel = models.ForeignKey('servidores.Servidor', related_name='diretor', null=True)
class Meta:
ordering = ('nome',)
@ -23,11 +23,11 @@ class Servico(models.Model):
""" Modelo para representação dos Serviços de uma Subsecretaria
"""
nome = models.CharField(max_length=50)
sigla = models.CharField(max_length=10)
subsecretaria = models.ForeignKey(Subsecretaria)
nome = models.CharField(max_length=50, null=True)
sigla = models.CharField(max_length=10, null=True)
subsecretaria = models.ForeignKey(Subsecretaria, null=True)
# servidor responsavel por chefiar o serviço
responsavel = models.ForeignKey('servidores.Servidor', related_name='chefe')
responsavel = models.ForeignKey('servidores.Servidor', related_name='chefe', null=True)
class Meta:
ordering = ('nome',)
@ -88,8 +88,10 @@ class Servidor(models.Model):
blank=True,
null=True,
)
de_fora = models.BooleanField(default=False)
data_nomeacao = models.DateField(u'data de nomeação', blank=True, null=True)
ato_exoneracao = models.CharField(u'ato de exoneração',max_length=150, blank=True, null=True)
ato_numero = models.CharField(u'ato de exoneração',max_length=150, blank=True, null=True)
cpf = models.CharField('CPF', max_length=11, blank=True, null=True)
rg = models.CharField('RG', max_length=25, blank=True, null=True)
obs = models.TextField(u'observação', blank=True, null=True)
@ -99,7 +101,7 @@ class Servidor(models.Model):
email_pessoal = models.EmailField('e-mail pessoal', blank=True, null=True)
endereco = generic.GenericRelation('contatos.Endereco')
telefones = generic.GenericRelation('contatos.Telefone')
ramal = models.IntegerField('ramal', blank=True, null=True)
ramal = models.CharField(max_length=25, blank=True, null=True)
class Meta:
ordering = ('nome_completo',)

Loading…
Cancel
Save