%% Transforma dados do SQL para o formato da planilha
%
% A partir da consulta ao banco de dados do ISAAC, esta script transforma
% os dados para o formato que a planilha de gerencia dos alunos espera.
%
% Executar a seguinte busca no banco de dados:
%
% 
%
close all; clc; clear all


% Imprimir dados
imprimir = false;

% Posicao das turmas na planilha
%   turmas(1) = fase 1; turmas(2) = fase 2; ...
turmas = [5, 14, 23, 32];

%% Leitura do nome de todos os alunos
%
% A planilha "Alunos por curso.sql" � lida e os dados s�o armazenados na
% struct data. O campo que nos interessa eh o campo
% "data.textdata.ExportarPlanilha", que � retornado diretamente do SQL.
% Aqui est�o todos os alunos em ordem alfab�tica:
%
% data.textdata.ExportarPlanilha(1:5,:)
%
% ans = 
%
%    'NR_MATRICULA'    'NM_PESSOA'           'CD_CURSO'    'SITUACAO'         'LINHA'    'ULTIMO_PERIODO'
%    '1116080410'      'AGATA LIMA GOMES'    '608'         'Cursando'              ''    '2014/2'        
%    '1420032895'             [1x27 char]    '608'         'Cursando'              ''    '2014/2'        
%    '1026080166'             [1x23 char]    '608'         'Sem matr�cula'         ''    '2014/2'        
%    '1120030153'             [1x26 char]    '608'         'Cancelado'             ''    '2014/2'       
%

% Leitura da planilha
data = importdata('Alunos por curso.xls');

% Guardando apenas a variavel que nos interessa
alunos = data.textdata.ExportarPlanilha;

%% Leitura da situa��o final dos alunos
%
% A planilha "Entrada script.xls" eh lida e os dados sao armazenados na
% struct data. O campo que nos interessa eh o campo
% "data.textdata.ExportarPlanilha", que � retornado diretamente do SQL.
% Aqui est�o todas as situa��es finais de cada aluno em cada disciplina:
%
% data.textdata.ExportarPlanilha(1:5,:)
%
% ans = 
%
%  Columns 1 through 8
%
%    'MATRICULA'     'INGRESSO'    'CURSO'    'TURMA'      'NOME'         'EIXO'        'FASE'    'SEMESTRE'
%    '1120030153'    '112'         '608'      '6080411'    [1x26 char]    'ANC60804'    '04'      '2014-1'  
%    '1220025763'    '122'         '608'      '6080411'    [1x28 char]    'ANC60804'    '04'      '2014-1'  
%    '1210004887'    '121'         '608'      '6080411'    [1x27 char]    'ANC60804'    '04'      '2014-1'  
%    '1120030072'    '112'         '608'      '6080411'    [1x20 char]    'ANC60804'    '04'      '2014-1'  
%
%  Columns 9 through 15
%
%    'CH_PPC'    'CH_DADA'    'FALTAS'    'PERCENTUAL'    'FI'    'SITUA��O'    'CONCEITO'
%          ''           ''          ''              ''      ''    'N�o Apto'    'D'       
%          ''           ''          ''              ''      ''    'Apto'        'C'       
%          ''           ''          ''              ''      ''    'Apto'        'C'       
%          ''           ''          ''              ''      ''    'Apto'        'B'   
%

% Leitura da planilha
data = importdata('Entrada script.xls');

% Guardando apenas a variavel que nos interessa
situacoes = data.textdata.ExportarPlanilha;
frequencias = data.data.ExportarPlanilha;

%% Leitura do modelo em que os dados ser�o distribu�dos
%
% A saida do programa sera feita no formato da planilha "Modelo.xls"

% Leitura da planilha
saida = importdata('Modelo 111.xls');   % Conceitos

%% Preenchendo os nomes da planilha de saida
%
% A partir dos nomes lidos da planilha "Alunos por curso.xls", vamos
% preencher a coluna dos nomes e das matr�culas na planilha Modelo.xls

for i = 2:size(alunos,1)
	
	% Pegando os campos que nos interessam
	matricula = alunos{i,1};
	nome = alunos{i,2};
	situac_atual = alunos{i,4};
	periodo = alunos{i,6};
	
	% Atribuindo as informa��es � planilha de sa�da
	saida{i,1} = matricula;
	saida{i,2} = nome;
	saida{i,3} = situac_atual;
	saida{i,4} = periodo;
	
end

%% Preenchendo as situa��es finais na planilha de sa�da

% Marcador de andamento
h = waitbar(0,'Formatando...');

% Para cada nome de entrada
for i = 2:size(situacoes,1)
    
    % Verifica se os dados acabaram
    if isempty(situacoes{i,1})
        break
    end
    
    % Pega os dados do aluno atual
    if imprimir
        display('----------------------------')
        nome = situacoes{i,5}
        disciplina = situacoes{i,6}
        conceito = situacoes{i,15}
        turma = situacoes{i,4}
        situacao = situacoes{i,14}
		if isnan(frequencias(i-1,4))
			freq = ''
		else
			freq = [num2str(100 - frequencias(i-1,4)) '%']
		end
    else
        nome = situacoes{i,5};
        disciplina = situacoes{i,6};
		conceito = situacoes{i,15};
		turma = situacoes{i,4};
		situacao = situacoes{i,14};
		if isnan(frequencias(i-1,4))
			freq = '';
		else
			freq = [num2str(100 - frequencias(i-1,4)) '%'];
		end
	end
    
    % Percorre a planilha de saida, procurando a localiza��o do aluno
    for j = 2:size(saida,1)
        
        % Se a linha atual tem o nome do aluno que estamos procurando
        if isequal(saida{j,2},nome)
            
            % Percorre a planilha de saida, procurando a coluna referente � disciplina
            for k = 3:size(saida,2)
                
                % Se a disciplina atual tem o nome que estamos procurando
                if isequal(saida{1,k},disciplina)
                    
					% Se o aluno nao tem conceito associado
					if isempty(conceito)
						% Apenas indica que ele esta matriculado
						saida{j,k} = 'X';
					else						
						% Se ja tem (caso de validacao), armazena o
						% conceito nesta posi��o
						saida{j,k} = conceito;
					end
					
					% Armazena o percentual de faltas nesta posição
					saida{j,k+1} = freq;
                    % E armazena a turma em que o aluno foi matriculado na disciplina
                    saida{j,turmas(str2num(disciplina(end)))} = turma;
                    
                    % E se a situa��o for Cancelada
                    if isequal(situacao,'Cancelada')
                        
                        % Armazena como um conceito nesta posi��o avisando
                        saida{j,k} = 'Cancelado';
                        
                    elseif isequal(situacao,'Trancada')
                        
                        % Armazena como um conceito nesta posi��o avisando
                        saida{j,k} = 'Trancado';
                        
                    end
                    
                    % Como encontramos o que estamos procurando, encerra esse la�o
                    break
                    
                end
            end
        end
    end
    
    % Atualiza o medidor
    waitbar(i/size(situacoes,1),h)
end

% Fechando o medidor
close(h)

%% Salvando o resultado numa planilha
%
% Os resultados s�o finalmente exportados para a planilha "Saida script.xls"
%

[status, message] = xlswrite('Saida script.xls',saida);







