package gcom.gui.faturamento;
import gcom.faturamento.bean.FaturaClienteResponsavelHelper;
import gcom.faturamento.bean.FaturaItemClienteResponsavelHelper;
import gcom.faturamento.conta.FaturaItem;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.faturamento.RelatorioFaturaClienteResponsavel;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.Util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
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;
public class GerarFaturaClienteResponsavelAction extends ExibidorProcessamentoTarefaRelatorio {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("exibirGerarFatura");
DiskFileUpload upload = new DiskFileUpload();
List items = null;
try {
items = upload.parseRequest(httpServletRequest);
this.getSessao(httpServletRequest).setAttribute("arquivo",items);
} catch (FileUploadException e) {
items = (List) this.getSessao(httpServletRequest).getAttribute("arquivo");
if(items == null){
throw new ActionServletException("erro.sistema", e);
}
}
Collection colecaoFaturaClienteResponsavelHelper =
this.gerarColecaoFaturaClienteResponsavelHelper(items);
FileItem item = (FileItem) Util.retonarObjetoDeColecao(items);
String nomeArquivo = item.getName().replace(".txt","");
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
RelatorioFaturaClienteResponsavel relatorio =
new RelatorioFaturaClienteResponsavel(this.getUsuarioLogado(httpServletRequest));
relatorio.addParametro("colecaoFaturaClienteResponsavelHelper", colecaoFaturaClienteResponsavelHelper);
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
relatorio.addParametro("tipoFormatoRelatorio",Integer.parseInt(tipoRelatorio));
relatorio.addParametro("nomeArquivo",nomeArquivo);
retorno =
processarExibicaoRelatorio(relatorio, tipoRelatorio, httpServletRequest,
httpServletResponse, actionMapping);
return retorno;
}
private Collection gerarColecaoFaturaClienteResponsavelHelper(List items){
Collection retorno = new ArrayList();
FileItem item = null;
String nomeItem = null;
// Parse the request
try {
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
nomeItem = item.getName().toUpperCase();
// compara o final do nome do arquivo � .txt
if (nomeItem.endsWith(".TXT")) {
// abre o arquivo
InputStreamReader reader = new InputStreamReader(item.getInputStream());
BufferedReader buffer = new BufferedReader(reader);
// cria uma variavel do tipo boolean
boolean eof = false;
FaturaClienteResponsavelHelper faturaClienteResponsavelHelper = null;
// enquanto a variavel for false
while (!eof) {
// pega a linha do arquivo
String linhaLida = buffer.readLine();
// se for a ultima linha do arquivo
if (linhaLida == null || linhaLida.trim().length() == 0) {
// seta a variavel boolean para true
eof = true;
} else {
faturaClienteResponsavelHelper = new FaturaClienteResponsavelHelper();
//1-Numero da Fatura (Campo 1 do TXT)
faturaClienteResponsavelHelper.setNumeroFatura(linhaLida.substring(0, 9).trim());
//2-Responsavel pelo Pagamento (Campo 2 do TXT)
faturaClienteResponsavelHelper.setNomeCliente(linhaLida.substring(9, 59).trim());
//3-Endereco de Correspondencia - Parte 1 (Campo 3.1 do TXT)
faturaClienteResponsavelHelper.setEndereco(linhaLida.substring(59, 159).trim());
//4-Bairro (Campo 3.2.1 do TXT)
faturaClienteResponsavelHelper.setEnderecoLinha2(linhaLida.substring(159, 189).trim());
//5,6,7-Municipio,UF,CEP (Campo 3.2.2,3.2.3,3.2.4 do TXT)
String enderecoLinha3 = linhaLida.substring(189, 219).trim() +" "+
linhaLida.substring(219, 221).trim() +" "+
linhaLida.substring(221, 230).trim();
faturaClienteResponsavelHelper.setEnderecoLinha3(enderecoLinha3);
//8-Tipo do Cliente (Campo 5 do TXT)
faturaClienteResponsavelHelper.setTipoResponsavel(linhaLida.substring(237, 287).trim());
//9-Quantidade Itens da Fatura (Campo 6 do TXT)
faturaClienteResponsavelHelper.setQtdeItens(linhaLida.substring(287, 291).trim());
//10-Data de Emissao (Campo 7 do TXT)
faturaClienteResponsavelHelper.setDataEmissao(linhaLida.substring(291, 301).trim());
//11-M�s/Ano (Campo 4 do TXT)
faturaClienteResponsavelHelper.setMesAno(linhaLida.substring(230, 237).trim());
//12-Data de Vencimento (Campo 8 do TXT)
//Nesse caso pega o primeiro vencimento da fatura dos vencimento alternativos
//Anterior - linhaLida.substring(301, 311)
faturaClienteResponsavelHelper.setPrimeiroVencimento(linhaLida.substring(709,719).trim());
//13-Turbidez Valor Medio (Campo 13 do TXT)
faturaClienteResponsavelHelper.setValorMedioTurbidez(linhaLida.substring(499,504).trim());
//14-Turbidez Valor Padrao (Campo 14 do TXT)
faturaClienteResponsavelHelper.setPadraoTurbidez(linhaLida.substring(504,524).trim());
//15-Ph Valor Medio (Campo 15 do TXT)
faturaClienteResponsavelHelper.setValorMedioPh(linhaLida.substring(524,529).trim());
//16-Ph Valor Padrao (Campo 16 do TXT)
faturaClienteResponsavelHelper.setPadraoPh(linhaLida.substring(529,549).trim());
//17-Cor Valor Medio (Campo 17 do TXT)
faturaClienteResponsavelHelper.setValorMedioCor(linhaLida.substring(549,554).trim());
//18-Cor Valor Padrao (Campo 18 do TXT)
faturaClienteResponsavelHelper.setPadraoCor(linhaLida.substring(554,574).trim());
//19-Cloro Valor Medio (Campo 19 do TXT)
faturaClienteResponsavelHelper.setValorMedioCloro(linhaLida.substring(574,579).trim());
//20-Cloro Valor Padrao (Campo 20 do TXT)
faturaClienteResponsavelHelper.setPadraoCloro(linhaLida.substring(579,599).trim());
//21-Fluor Valor Medio (Campo 21 do TXT)
faturaClienteResponsavelHelper.setValorMedioFluor(linhaLida.substring(599,604).trim());
//22-Fluor Valor Padrao (Campo 22 do TXT)
faturaClienteResponsavelHelper.setPadraoFluor(linhaLida.substring(604,624).trim());
//23-Ferro Valor Medio (Campo 23 do TXT)
faturaClienteResponsavelHelper.setValorMedioFerro(linhaLida.substring(624,629).trim());
//24-Ferro Valor Padrao(Campo 24 do TXT)
faturaClienteResponsavelHelper.setPadraoFerro(linhaLida.substring(629,649).trim());
//25-Coliformes Totais Valor Medio (Campo 25 do TXT)
faturaClienteResponsavelHelper.setValorMedioColiformesTotais(linhaLida.substring(649,659));
//26-Coliformes Totais Valor Padrao (Campo 26 do TXT)
faturaClienteResponsavelHelper.setPadraoColiformesTotais(linhaLida.substring(659,679).trim());
//27-Coliformes Fecais Valor Medio (Campo 27 do TXT)
faturaClienteResponsavelHelper.setValorMedioColiformesfecais(linhaLida.substring(679,689).trim());
//28-Coliformes Fecais Valor Padrao (Campo 28 do TXT)
faturaClienteResponsavelHelper.setPadraoColiformesfecais(linhaLida.substring(689,709).trim());
//29-Vencimento Alternativo 1
//30-Vencimento Alternativo 2
//31-Vencimento Alternativo 3
//32-Vencimento Alternativo 4
//33-Vencimento Alternativo 5
//34-Vencimento Alternativo 6
//S�o as data de vencimento
String datasVencimentos = linhaLida.substring(709,719).trim() +" "+
linhaLida.substring(719,729).trim() +" "+
linhaLida.substring(729,739).trim() +" "+
linhaLida.substring(739,749).trim() +" "+
linhaLida.substring(749,759).trim() +" "+
linhaLida.substring(759,769).trim();
faturaClienteResponsavelHelper.setDatasVencimentos(datasVencimentos);
Collection<FaturaItemClienteResponsavelHelper> colecaoFaturaItem = new ArrayList();
//35-Nome do Usuario (Campo 13.1 do TXT)
//36-Matr�cula do Im�vel (Campo 13.2 do TXT)
//37-Consumo (Campo 13.3 do TXT)
//38-Valor da Conta (Campo 13.4 do TXT)
int quantidade = 0;
int quantidadeItensPorFatura = FaturaItem.QTD_ITENS_RELATORIO_FATURA.intValue();
for (int i = 0; i < quantidadeItensPorFatura; i++) {
int index1 = 769 + quantidade;
int index2 = index1 + 50;
int index3 = index2 + 9;
int index4 = index3 + 9;
int index5 = index4 + 14;
String nome = linhaLida.substring(index1, index2).trim();
if(!nome.equals("")){
FaturaItemClienteResponsavelHelper faturaItemClienteResponsavelHelper =
new FaturaItemClienteResponsavelHelper();
faturaItemClienteResponsavelHelper.setNome(nome);
faturaItemClienteResponsavelHelper.setMatricula(linhaLida.substring(index2, index3).trim());
faturaItemClienteResponsavelHelper.setConsumo(linhaLida.substring(index3, index4).trim());
faturaItemClienteResponsavelHelper.setValor(linhaLida.substring(index4, index5).trim());
colecaoFaturaItem.add(faturaItemClienteResponsavelHelper);
}else{
break;
}
quantidade = quantidade + 82;
}
faturaClienteResponsavelHelper.setColecaoFaturaItemClienteResponsavelHelper(colecaoFaturaItem);
//S� gera codigo de barras se existir valor nesse campo
//17-Codigo de Barras Formatado (Campo 11 do TXT)
String codigoBarrasGerado = linhaLida.substring(387,499).trim();
boolean gerarCodigoBarras = false;
if(!codigoBarrasGerado.equals("")){
gerarCodigoBarras = true;
}
if(gerarCodigoBarras){
//16-Somatorio do Valor Total(Campo 9 do TXT)
faturaClienteResponsavelHelper.setValorTotalAPagar(linhaLida.substring(311, 325).trim());
String codigoBarraFormatado = linhaLida.substring(332,387).trim();
faturaClienteResponsavelHelper.setRepresentacaoNumericaCodBarraFormatada(codigoBarraFormatado);
//Representa��o numerica cod barra sem digito
String codigoBarra = codigoBarraFormatado.substring(0,11)
+ codigoBarraFormatado.substring(14, 25)
+ codigoBarraFormatado.substring(28, 39)
+ codigoBarraFormatado.substring(42, 53);
faturaClienteResponsavelHelper.setRepresentacaoNumericaCodBarraSemDigito(codigoBarra);
faturaClienteResponsavelHelper.setIndicadorCodigoBarras("S");
//17-Valor Bruto(Campo 36 do TXT)
faturaClienteResponsavelHelper.setValorBruto(linhaLida.substring(2409, 2423).trim());
//18-Valor Impostos(Campo 37 do TXT)
faturaClienteResponsavelHelper.setValorImposto(linhaLida.substring(2423, 2437).trim());
}else{
//16-Somatorio do Valor Total(Campo 9 do TXT)
faturaClienteResponsavelHelper.setValorTotalAPagar("CONTINUA...");
faturaClienteResponsavelHelper.setIndicadorCodigoBarras(null);
}
retorno.add(faturaClienteResponsavelHelper);
}
}//fim do while eof
}else {
throw new ActionServletException("atencao.tipo_importacao.nao_txt");
}
}
}
} catch (IOException ex) {
throw new ActionServletException("erro.importacao.nao_concluida");
}
return retorno;
}
}