====== Settings.py ====== ACADEMICO = {} ACADEMICO['SISTEMA'] = 'q_academico' ACADEMICO['DATABASE_NAME'] = 'SISTEMA_ACADEMICO' ACADEMICO['DATABASE_USER'] = 'consultasuap' ACADEMICO['DATABASE_PASSWORD'] = '' ACADEMICO['DATABASE_HOST'] = 'bdacademico.ifce.edu.br:1433' ---------------------------- ====== Instituições ====== No Q-Acadêmico: SELECT cod_instituicao AS codigo, desc_instituicao AS nome, sigla_instituicao AS sigla FROM dbo.INSTITUICOES ORDER BY cod_instituicao; ^codigo^nome^sigla^ |1|CAMPUS FORTALEZA|IFCE-FORTALEZA| |2|CAMPUS CEDRO|IFCE-CEDRO| |3|CAMPUS JUAZEIRO DO NORTE|IFCE-JUAZEIRO| |12|CAMPUS MARACANAÚ|IFCE-MARACANAÚ| |13|CAMPUS QUIXADÁ|IFCE-QUIXADÁ| |14|CAMPUS SOBRAL|IFCE-SOBRAL| |24|CAMPUS LIMOEIRO DO NORTE|IFCE-LIMOEIRO| |25|CAMPUS IGUATU|IFCE-IGUATU| |26|CAMPUS CRATO|IFCE CRATO| |47|CAMPUS CANINDÉ|IFCE-CANINDÉ| |67|CAMPUS ACARAÚ|IFCE-ACARAÚ| |68|CAMPUS TAUÁ|IFCE-TAUÁ| |69|CAMPUS CRATEÚS|IFCE-CRATEÚS| |77|CAMPUS TIANGUÁ|IFCE-TIANGUÁ| |87|CAMPUS ARACATI|IFCE-ARACATI| |97|CAMPUS BATURITÉ|IFCE-BATURITÉ| |107|CAMPUS JAGUARIBE|IFCE-JAGUARIBE| |108|CAMPUS MORADA NOVA|IFCE-MORADA| |109|CAMPUS TABULEIRO DO NORTE|IFCE-TABULEIRO| |110|CAMPUS UBAJARA|IFCE-UBAJARA| |111|CAMPUS CAUCAIA|IFCE-CAUCAIA| |112|CAMPUS CAMOCIM|IFCE-CAMOCIM| |113|CAMPUS UMIRIM|IFCE-UMIRIM| |124|REITORIA|IFCE-REITORIA| |125|CAMPUS GUARAMIRANGA|IFCE-GUARAMIRANGA| |145|CAMPUS JAGUARUANA|IFCE-JAGUARUANA| |155|CAMPUS ITAPIPOCA|IFCE-ITAPIPOCA| |176|CAMPUS PECÉM|IFCE-PECÉM| |197|CAMPUS PARACURU|IFCE-PARACURU| |207|CAMPUS BOA VIAGEM|IFCE-BOA VIAGEM| ---------------------------- ====== Modalidade CURSOS ====== No Q-Acadêmico: select * from SITUACOES_TABELAS where NOME_TABELA = 'CURSOS' AND NOME_COLUNA = 'MODALIDADE_CURSO'; ^%%NOME_TABELA%%^%%NOME_COLUNA%%^%%VALOR%%^%%DESCRICAO%%^ |CURSOS|%%MODALIDADE_CURSO%%|0|Integrado| |CURSOS|%%MODALIDADE_CURSO%%|1|Concomitante| |CURSOS|%%MODALIDADE_CURSO%%|2|Subsequente| |CURSOS|%%MODALIDADE_CURSO%%|3|Bacharelado| |CURSOS|%%MODALIDADE_CURSO%%|4|Tecnologia| |CURSOS|%%MODALIDADE_CURSO%%|5|Licenciatura| |CURSOS|%%MODALIDADE_CURSO%%|8|Aperfeiçoamento| |CURSOS|%%MODALIDADE_CURSO%%|9|Especialização| |CURSOS|%%MODALIDADE_CURSO%%|10|Residência Médica| |CURSOS|%%MODALIDADE_CURSO%%|11|Mestrado| |CURSOS|%%MODALIDADE_CURSO%%|12|Mestrado Profissional| |CURSOS|%%MODALIDADE_CURSO%%|13|Doutorado| |CURSOS|%%MODALIDADE_CURSO%%|14|Pós-Doutorado| |CURSOS|%%MODALIDADE_CURSO%%|15|Propedêutico| |CURSOS|%%MODALIDADE_CURSO%%|16|Fic| SELECT c.cod_curso AS codigo, c.desc_curso AS nome, c.cod_curso_matricula AS cod_turma, c.cod_instituicao AS instituicao, c.cod_curso_habilitado AS curso_habilitado, c.desc_historico AS descricao_historico, c.autorizacao AS autorizacao, c.reconhecimento AS reconhecimento, (select top 1 m.n_periodos from matrizes_curriculares m where m.cod_curso = c.cod_curso order by cod_matriz_curricular desc) AS numero_periodos, c.dt_inicio AS data_inicio, c.exige_enade AS exige_enade, c.modalidade_curso as modalidade_curso FROM cursos c LEFT JOIN turnos t ON c.COD_TURNO = t.COD_TURNO where c.cod_instituicao <=124 ORDER BY c.desc_curso; https://gist.github.com/rodrigosantosbr/aacbc01749318b9093f8aa33a9f55987 ====== Passo 1 ====== Realizar a consulta para verificar se há algum aluno em algum curso onde este curso está sem uma diretoria ligada a ele. segue o código para saber o retorno do valor diretoria_id: select p.nome, pf.cpf, ea.matricula, ec.descricao, ec.descricao_historico, ec.diretoria_id from edu_aluno ea, edu_cursocampus ec, pessoa_fisica pf, pessoa p where p.id = pf.pessoa_ptr_id and pf.pessoa_ptr_id = ea.pessoa_fisica_id and ea.curso_campus_id = ec.id and diretoria_id is null ====== Passo 2 ====== Realizar a execução por ordem obrigatoriamente decrescente dos seguintes scripts. python manage.py edu_importar_dados 2016 python manage.py edu_importar_dados 2015 python manage.py edu_importar_dados 2014 python manage.py edu_importar_dados 2013 ---- ====== Possíveis erros encontrados ====== ^ Chave do erro ^ Traceback ^ Solução ^ | KeyError: 4770 | Traceback (most recent call last): File "/opt/suap/djtools/management/commands/__init__.py", line 33, in execute super(BaseCommandPlus, self).execute(args,options) ... File "/opt/suap/edu/management/commands/edu_importar_dados.py", alunos_criados, alunos_atualizados = dao.importar_alunos( prefixo_matricula=prefixo_matricula,verbose=verbose) File "/opt/suap/edu/q_academico.py", line 412, in importar_alunos curso_campus = cache_cursos[str(m['curso_codigo'])].id, KeyError: '4770' Command edu_importar_dados FAILED | Erro indicando que o curso está no Q-Acadêmico mas não está no SUAP, é necessário fazer a importação da estrutura antes dos alunos. No arquivo edu_importar_dados.py. comentar da linha 31(alunos_criados...) até a 42 (historico.save()...) e descomentar da linha 25 (dao.importar_diretorias()) até a linha 29 (dao.importar_polos_ead...) . Ao término da operação desfazer as ações de comentários indicada nesta solução alterando para o estado anterior | | KeyError: 'nome' | Traceback (most recent call last): File "/opt/suap/djtools/management/commands/__init__.py", line 33, in execute super(BaseCommandPlus, self).execute(*args, **options) File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 338, in execute output = self.handle(*args, **options) ... File "/opt/suap/edu/management/commands/edu_importar_dados.py", line 29, in handle dao.importar_polos_ead(verbose) File "/opt/suap/edu/q_academico.py", line 236, in importar_polos_ead print row['nome'].encode('latin-1') KeyError: 'nome' | Linha de código com problema de encoding, foi necessário comentá-la pois é um comando apenas de print na linha 236. Por garantia a linha 209 também foi comentada pois possui o mesmo comando. | | KeyError: 'modalidade.id' | Traceback (most recent call last): File "/opt/suap/djtools/management/commands/__init__.py", line 33, in execute super(BaseCommandPlus, self).execute(*args, **options) File "/usr/lib/python2.7/dist-packages/django/core/management/base.py", line 399, in execute output = self.handle(*args, **options) File "/usr/local/lib/python2.7/dist-packages/newrelic-2.64.0.48/newrelic/api/function_trace.py", line 104, in literal_wrapper return wrapped(*args, **kwargs) File "/opt/suap/edu/management/commands/edu_importar_dados.py", line 33, in handle alunos_criados, alunos_atualizados = dao.importar_alunos(prefixo_matricula=prefixo_matricula,verbose=verbose) File "/opt/suap/edu/q_academico.py", line 486, in importar_alunos novo_aluno.definir_ano_let_prev_conclusao() File "/opt/suap/edu/models.py", line 4648, in definir_ano_let_prev_conclusao modalidade_id = self.curso_campus.modalidade.id AttributeError: 'NoneType' object has no attribute 'id' | Existem cursos sem modalidade, é preciso importar as modalidades dos cursos na tabela cursos do Qacademico.|