package gcom.gui.micromedicao;
import gcom.cadastro.empresa.Empresa;
import gcom.fachada.Fachada;
import gcom.faturamento.FaturamentoGrupo;
import gcom.faturamento.FiltroFaturamentoGrupo;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.FiltroRota;
import gcom.micromedicao.Leiturista;
import gcom.micromedicao.Rota;
import gcom.relatorio.micromedicao.RelatorioResumoProblemasLeiturasAnormalidade;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.FachadaException;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
*
*
* @author Thiago Nascimento
*
*/
public class AtualizarLeituraAnormalidadeCelularAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null/* actionMapping.findForward("telaSucesso") */;
String nomeArquivo = null;
StringBuffer arquivo = new StringBuffer();
Integer localidade = null;
Empresa empresa = null;
Integer grupo = null;
Usuario usuario = null;
try {
DiskFileUpload upload = new DiskFileUpload();
// Parse the request
List items = upload.parseRequest(httpServletRequest);
FileItem item = null;
Fachada fachada = Fachada.getInstancia();
// pega uma lista de itens do form
Iterator iter = items.iterator();
while (iter.hasNext()) {
item = (FileItem) iter.next();
// verifica se n�o � diretorio
if (!item.isFormField()) {
// coloca o nome do item para maiusculo
String nomeItem = item.getName().toUpperCase();
if (nomeItem.endsWith(".TXT")) {
nomeArquivo = nomeItem;
// abre o arquivo
InputStreamReader reader = new InputStreamReader(item
.getInputStream());
BufferedReader buffer = new BufferedReader(reader);
// Vector<DadosMovimentacao> v = new Vector<DadosMovimentacao>();
Vector<DadosMovimentacao> v = fachada.gerarVetorDadosParaLeitura(buffer);
while (buffer.ready()) {
String linha = buffer.readLine();
arquivo.append(linha);
arquivo.append(System.getProperty("line.separator"));
}
if (v.isEmpty()) {
// Arquivo texto Vazio
throw new ActionServletException(
"atencao.arquivo_sem_dados",null, nomeItem);
}
localidade = v.get(0).getLocalidade();
grupo = v.get(0).getGrupoFaturamento();
FiltroFaturamentoGrupo filtroFaturamentoGrupo = new FiltroFaturamentoGrupo();
filtroFaturamentoGrupo.adicionarParametro(new ParametroSimples(FiltroFaturamentoGrupo.ID, grupo));
Collection colecaoFaturamentoGupo = fachada.pesquisar(filtroFaturamentoGrupo,FaturamentoGrupo.class.getName());
FaturamentoGrupo faturamentoGrupo = (FaturamentoGrupo) Util.retonarObjetoDeColecao(colecaoFaturamentoGupo);
Rota rota = null;
if(faturamentoGrupo != null){
rota = fachada.buscarRotaPorMatriculaImovel(v.get(0).getMatriculaImovel(),faturamentoGrupo.getAnoMesReferencia());
}
if(rota == null){
FiltroRota filtroRota = new FiltroRota();
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.FATURAMENTO_GRUPO);
filtroRota.adicionarCaminhoParaCarregamentoEntidade(FiltroRota.LEITURISTA);
filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.LOCALIDADE_ID,localidade));
filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.SETOR_COMERCIAL_CODIGO, v.get(0).getSetorComercial()));
filtroRota.adicionarParametro(new ParametroSimples(FiltroRota.CODIGO_ROTA, v.get(0).getCodigoRota()));
Collection colecao = fachada.pesquisar(filtroRota,Rota.class.getName());
if(colecao!=null && !colecao.isEmpty() && colecao.size()==1){
rota = (Rota)colecao.iterator().next();
}
}
empresa = fachada.buscarEmpresaPorMatriculaImovel(v.get(0).getMatriculaImovel());
usuario = (Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado");
Leiturista leiturista = null;
if(rota!=null
&& rota.getLeiturista()!=null){
leiturista = rota.getLeiturista();
}
byte[] relatorio = fachada.atualizarLeituraAnormalidadeCelular(v,usuario, nomeItem, leiturista);
OutputStream out = null;
if (relatorio != null) {
//fachada.efetuarRateioDeConsumoPorRota(rota, rota.getFaturamentoGrupo().getAnoMesReferencia());
httpServletResponse
.setContentType("application/pdf");
out = httpServletResponse.getOutputStream();
out.write(relatorio);
out.flush();
out.close();
}
}
}
}
} catch (FileUploadException e) {
throw new ActionServletException("atencao.arquivo_nao_encontrado");
} catch (IOException e) {
throw new ActionServletException("atencao.arquivo_nao_encontrado");
} catch(NumberFormatException e){
this.gerarRelatorioProblema("Arquivo com Dados Inv�lidos",
grupo,
empresa,
localidade,
nomeArquivo,
arquivo.toString().getBytes(),
httpServletResponse,
usuario, "");
}catch (StringIndexOutOfBoundsException e) {
this.gerarRelatorioProblema("Arquivo com registros de tamanho Inv�lido", grupo, empresa,
localidade, nomeArquivo, arquivo.toString().getBytes(),
httpServletResponse, usuario, "");
}catch (FachadaException e) {
e.printStackTrace();
String setor = "";
List<String> parametros = e.getParametroMensagem();
if(parametros != null && !parametros.isEmpty()){
setor = parametros.get(0);
}
this.gerarRelatorioProblema(e.getMessage(), grupo, empresa,
localidade, nomeArquivo, arquivo.toString().getBytes(),
httpServletResponse, usuario, setor);
}
return retorno;
}
/**
*
* @param erro
* @param grupo
* @param empresa
* @param localidade
* @param nomeArquivo
* @param arquivo
* @param httpServletResponse
* @param usuario
* @param setor
*/
private void gerarRelatorioProblema(String erro, Integer grupo, Empresa empresa,
Integer localidade, String nomeArquivo, byte[] arquivo,
HttpServletResponse httpServletResponse, Usuario usuario, String setor) {
try{
RelatorioResumoProblemasLeiturasAnormalidade relatorio = new RelatorioResumoProblemasLeiturasAnormalidade(usuario);
if(grupo != null){
relatorio.addParametro("grupo", grupo);
}else{
relatorio.addParametro("grupo", "");
}
if(empresa != null){
relatorio.addParametro("codigoEmpresa", empresa.getId());
relatorio.addParametro("empresa", empresa.getDescricao());
}else{
relatorio.addParametro("codigoEmpresa", "");
relatorio.addParametro("empresa", "");
}
if(localidade != null){
relatorio.addParametro("localidade", localidade);
}else{
relatorio.addParametro("localidade", "");
}
if(setor !=null){
relatorio.addParametro("setor", setor);
}else{
relatorio.addParametro("setor", "");
}
relatorio.addParametro("erro", erro);
Fachada.getInstancia().enviarEmailProblemasRegistrarConsistir(
nomeArquivo, arquivo);
httpServletResponse
.setContentType("application/pdf");
OutputStream out;
out = httpServletResponse.getOutputStream();
out.write((byte[])relatorio.executar());
out.flush();
out.close();
} catch (IOException e1) {
throw new ActionServletException(
"erro.sistema");
}
}
}