Browse Source

script de migracao da tabela pessoal

diagnosticos
Felipe Vieira 13 years ago
parent
commit
e2e96eed61
  1. 140
      sigi/apps/servidores/management/commands/migra.py
  2. 6
      sigi/apps/servidores/models.py

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

@ -1,24 +1,29 @@
# coding= utf-8 # coding= utf-8
import sys import sys
import csv import csv
import re
from datetime import datetime from datetime import datetime
from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
from django.contrib.auth.models import User from django.contrib.auth.models import User
from sigi.apps.servidores.models import Servidor, Servico, Subsecretaria from sigi.apps.servidores.models import Servidor, Servico, Subsecretaria, Funcao, Ferias, Licenca
from sigi.apps.contatos.models import Municipio from sigi.apps.contatos.models import Municipio
#print 'removendo...' #Funcao.objects.all().delete()
#Ferias.objects.all().delete()
#Licenca.objects.all().delete()
#for u in User.objects.filter(date_joined__gte=datetime(2011, 12, 9, 10, 58, 49, 83734)).all(): #for u in User.objects.filter(date_joined__gte=datetime(2011, 12, 9, 10, 58, 49, 83734)).all():
# u.servidor_set.all().delete() # u.servidor_set.all().delete()
# u.delete() # u.delete()
print 'iniciando...'
class MigrationError(Exception): class MigrationError(Exception):
pass pass
class Command(BaseCommand): class Command(BaseCommand):
help = 'Migra usuários do antigo Sistema de RH' help = 'Migra usuários do antigo Sistema de RH'
def to_date(self, data):
return datetime.strptime(data, "%Y-%m-%d 00:00:00")
def handle(self, *args, **options): def handle(self, *args, **options):
reader = csv.reader(open("/tmp/pessoal.csv"), delimiter=',', quotechar="\"") reader = csv.reader(open("/tmp/pessoal.csv"), delimiter=',', quotechar="\"")
@ -50,33 +55,41 @@ class Command(BaseCommand):
try: try:
# Cria um usuario tratando os casos incompletos # Cria um usuario tratando os casos incompletos
# fulano@interlegis. # fulano@interlegis.
if not '@' in p['email']:
raise MigrationError
username = p['email'].split('@')[0].lower() username = p['email'].split('@')[0].lower()
if '@interlegis' in p['email']: user = User.objects.exclude(email='').get(username=username)
# pode ser um antigo usuario do ad try:
email = username + '@interlegis.gov.br' servidor = user.servidor
else: except Servidor.DoesNotExist:
# cria um username a partir do email sem servidor = Servidor.objects.create(
# colidir com os usuarios ldap user=user,
username = username + '__' nome_completo= "%s %s" % (user.first_name, user.last_name)
email = '' )
if not username or username == '__': except (MigrationError, User.DoesNotExist):
raise MigrationError try:
names = p['nome_completo'].split(' ') if not username:
first_name = names[0] raise MigrationError
last_name = " ".join(names[1:]) if '@interlegis' in p['email']:
user = User.objects.create( # pode ser um antigo usuario do ad
username = username, email = username + '@interlegis.gov.br'
email = email, else:
first_name = first_name, # cria um username a partir do email sem
last_name = last_name, # colidir com os usuarios ldap
is_active= False username = username + '__'
) email = ''
servidor = user.servidor names = p['nome_completo'].split(' ')
except Exception, e: first_name = names[0]
print ", ".join(row) last_name = " ".join(names[1:])
continue 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 # mapeando dados simples
servidor.nome_completo = p['nome_completo'] servidor.nome_completo = p['nome_completo']
@ -115,14 +128,32 @@ class Command(BaseCommand):
servidor.turno = 'N' servidor.turno = 'N'
if p['aniversario']: if p['aniversario']:
servidor.data_nascimento = datetime.strptime(p['aniversario'], "%Y-%m-%d 00:00:00") servidor.data_nascimento = self.to_date(p['aniversario'])
if p['data_nomeacao']: if p['data_nomeacao']:
servidor.data_nomeacao = datetime.strptime(p['data_nomeacao'], "%Y-%m-%d 00:00:00") servidor.data_nomeacao = self.to_date(p['data_nomeacao'])
if p['secretaria_sigla']:
if ' - ' in p['secretaria_nome']:
secretaria_nome = p['secretaria_nome'].split(' - ')[1]
else:
secretaria_nome = p['secretaria_nome']
secretaria = Subsecretaria.objects.get_or_create(
sigla = p['secretaria_sigla'],
nome = secretaria_nome
)[0]
if ' - ' in p['servico_nome']:
servico_nome = p['servico_nome'].split(' - ')[1]
else:
servico_nome = p['servico_nome']
servico = Servico.objects.get_or_create(
sigla = p['servico_sigla'],
nome = servico_nome
)[0]
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.subsecretaria = secretaria
servico.save() servico.save()
servidor.servico = servico servidor.servico = servico
@ -155,5 +186,46 @@ class Command(BaseCommand):
servidor.apontamentos = p['apontamentos'] servidor.apontamentos = p['apontamentos']
servidor.obs = p['obs'] servidor.obs = p['obs']
if p['cargo'] or p['funcao']:
funcao = servidor.funcao_set.get_or_create(
funcao = p['cargo'],
cargo = p['funcao'],
)[0]
if p['data_bap_entrada']:
funcao.data_bap_entrada = self.to_date(p['data_bap_entrada'])
if p['data_bap_saida']:
funcao.data_bap_saida = self.to_date(p['data_bap_saida'])
if p['data_entrada']:
funcao.inicio_funcao = self.to_date(p['data_entrada'])
if p['data_saida']:
funcao.fim_funcao = self.to_date(p['data_saida'])
funcao.bap_entrada = p['bap_entrada']
funcao.bap_saida = p['bap_saida']
funcao.save()
if re.search(r'estagi.ri[o|a]',p['cargo'],re.I):
#TODO inserir dados de estagio
pass
if p['inicio_ferias'] and p['final_ferias']:
servidor.ferias_set.get_or_create(
inicio_ferias = self.to_date(p['inicio_ferias']),
fim_ferias = self.to_date(p['final_ferias']),
obs = p['obs_ferias']
)
if p['inicio_licenca'] and p['fim_licenca']:
servidor.licenca_set.get_or_create(
inicio_licenca = self.to_date(p['inicio_licenca']),
fim_licenca = self.to_date(p['fim_licenca']),
obs = p['obs_licenca']
)
servidor.save() servidor.save()

6
sigi/apps/servidores/models.py

@ -161,9 +161,9 @@ class Funcao(models.Model):
servidores no Interlegis servidores no Interlegis
""" """
servidor = models.ForeignKey(Servidor) servidor = models.ForeignKey(Servidor)
funcao = models.CharField(max_length=50) funcao = models.CharField(max_length=50, null=True)
cargo = models.CharField(max_length=50, blank=True, null=True) cargo = models.CharField(max_length=50, null=True)
inicio_funcao = models.DateField(u'início da função') inicio_funcao = models.DateField(u'início da função', null=True)
fim_funcao = models.DateField(u'fim da função', blank=True, null=True) fim_funcao = models.DateField(u'fim da função', blank=True, null=True)
descricao = models.TextField(u'descrição', blank=True, null=True) descricao = models.TextField(u'descrição', blank=True, null=True)

Loading…
Cancel
Save