Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package br.com.themist.verificador.checks;
- import java.io.ByteArrayOutputStream;
- import java.io.InputStream;
- import java.sql.Timestamp;
- import java.text.Format;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map.Entry;
- import java.util.Scanner;
- import java.util.Set;
- import org.apache.log4j.Logger;
- import org.hibernate.Criteria;
- import org.hibernate.Session;
- import org.hibernate.criterion.Criterion;
- import org.hibernate.criterion.Order;
- import org.hibernate.criterion.Projections;
- import org.hibernate.criterion.Restrictions;
- import org.jboleto.JBoleto;
- import org.jboleto.JBoletoBean;
- import org.jboleto.PDFGeneratorCell;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import br.com.aplic.DAO.empresas.LogViewBancoDAOGeral;
- import br.com.aplic.entidades.admin.ConfigGerencialWeb;
- import br.com.aplic.entidades.admin.Empresa;
- import br.com.aplic.entidades.admin.Marca;
- import br.com.aplic.entidades.admin.integracao.Integrador;
- import br.com.aplic.entidades.distribuidor.LogViewBanco;
- import br.com.aplic.entidades.distribuidor.MarcaDistribuidor;
- import br.com.aplic.entidades.distribuidor.ProdutoCategoriaDistribuidor;
- import br.com.aplic.entidades.distribuidor.ProdutoDistribuidor;
- import br.com.aplic.entidades.distribuidor.RegionalMarcaDistribuidor;
- import br.com.aplic.entidades.distribuidor.Titulo;
- import br.com.aplic.entidades.distribuidor.integracao.PontoVendaCobrancaIntegracaoRepasse;
- import br.com.aplic.entidades.empresa.BoletoGerado;
- import br.com.aplic.entidades.empresa.CicloVenda;
- import br.com.aplic.entidades.empresa.CicloVendaControleEnvio;
- import br.com.aplic.entidades.empresa.CicloVendaFaturamentoNotaFiscal;
- import br.com.aplic.entidades.empresa.CicloVendaFaturamentoNotaFiscalAutorizacao;
- import br.com.aplic.entidades.empresa.CicloVendaRepasse;
- import br.com.aplic.entidades.empresa.FaturamentoEtico;
- import br.com.aplic.entidades.empresa.FaturamentoEticoArquivo;
- import br.com.aplic.entidades.empresa.PontoVenda;
- import br.com.aplic.entidades.empresa.TituloCicloVenda;
- import br.com.aplic.entidades.empresa.UsuarioGerencial;
- import br.com.aplic.entidades.empresa.Venda;
- import br.com.aplic.entidades.integracao.financeiro.CicloVendaBO;
- import br.com.aplic.exceptions.RestricaoException;
- import br.com.aplic.notafiscaletico.AncoraEmail;
- import br.com.aplic.relatorios.datasource.CicloVendaRepasseDS;
- import br.com.aplic.relatorios.util.DataSourcePadrao;
- import br.com.aplic.utils.DataUtil;
- import br.com.aplic.utils.EmailAppswareSession;
- import br.com.aplic.utils.FormatadorUtil;
- import br.com.aplic.utils.Utils;
- import br.com.themist.banco.ConexaoBanco;
- import br.com.themist.verificador.Verificavel;
- @SuppressWarnings("unchecked")
- public class ChecaEnvioEmailCobrancaFaturamento implements Verificavel {
- private static final Logger logger = Logger.getLogger(ChecaEnvioEmailCobrancaFaturamento.class);
- private static final String SCHEMA_A_EXECUTAR_N2 = "n2";
- private HashMap<String, EmailAppswareSession> sessoesEmails = new HashMap<String, EmailAppswareSession>();
- static {
- }
- public void run() {
- while (true) {
- Session sessaoAdmin = null;
- // SEGUNDOS!!!
- long timeSleep = 30000L;
- try {
- Calendar atual = Calendar.getInstance();
- atual = Utils.zerarHoras(atual.getTime());
- logger.info("INICIOU CHECK ENVIO EMAIL_COBRANCA_FATURAMENTO");
- sessaoAdmin = ConexaoBanco.getInstance().getSessaoAdmin();
- Criteria ct = sessaoAdmin.createCriteria(ConfigGerencialWeb.class);
- ct.add(Restrictions.eq(ConfigGerencialWeb.strNomSchema, SCHEMA_A_EXECUTAR_N2));
- ct.add(Restrictions.isNull(ConfigGerencialWeb.strDthExclusao));
- List<ConfigGerencialWeb> listaConfigs = ct.list();
- for (ConfigGerencialWeb configGerencialWeb : listaConfigs) {
- Session sessaoEmpresa = ConexaoBanco.getInstance().getSessao(configGerencialWeb.getNomSchema());
- Date data = null;
- try {
- LogViewBanco logViewBanco = new LogViewBancoDAOGeral(sessaoEmpresa).consultarUnqFiltro(LogViewBanco.strNomProcesso, ChecaEnvioEmailCobrancaFaturamento.class.toString());
- timeSleep = logViewBanco.getQtdSegundosLoop();
- data = DataUtil.adicionarMilesimos(logViewBanco.getDthValidacao(), logViewBanco.getQtdSegundosLoop().intValue());
- // if (data != null && data.after(new Date())) {
- // logger.info("Processo de Envio EMAIL_COBRANCA_FATURAMENTO, data ultima execução: " + DataUtil.strDataHora(logViewBanco.getDthValidacao()) + ", data da próxima execução: " + DataUtil.strDataHora(data));
- // continue;
- // } else {
- enviarEmailCobrancaFatInit(sessaoEmpresa);
- // }
- sessaoEmpresa.beginTransaction();
- logViewBanco.setDthValidacao(new Timestamp(new Date().getTime()));
- sessaoEmpresa.merge(logViewBanco);
- sessaoEmpresa.getTransaction().commit();
- } catch (Exception e) {
- e.printStackTrace();
- sessaoEmpresa.getTransaction().rollback();
- } finally {
- Utils.closeSession(sessaoEmpresa);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- sessaoAdmin.getTransaction().rollback();
- } finally {
- logger.info("FIM CHECK EMAIL_COBRANCA_FATURAMENTO");
- Utils.closeSession(sessaoAdmin);
- try {
- sessaoAdmin = null;
- Thread.sleep(timeSleep);
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- break;
- }
- }
- }
- }
- public void enviarEmailCobrancaFatInit(Session sessao) throws Exception {
- Criteria ct = sessao.createCriteria(CicloVendaControleEnvio.class);
- // ct.createCriteria(CicloVendaControleEnvio.strCicloVenda).createCriteria(CicloVenda.strPontoVenda).createCriteria(PontoVenda.strCliente);
- // ct.add(Restrictions.eq(CicloVendaControleEnvio.strCicloVenda +
- // "." +
- // CicloVenda.strId, idCicloVenda));
- // Criterion crt1 = Restrictions.in(CicloVendaControleEnvio.strIndStatus, new String[] { CicloVendaControleEnvio.IND_STATUS_PENDENTE, CicloVendaControleEnvio.IND_STATUS_PENDENTE_FATURAMENTO });
- // Criterion crt2 = Restrictions.and(Restrictions.in(CicloVendaControleEnvio.strIndStatus, new String[] { CicloVendaControleEnvio.IND_STATUS_ERRO }), Restrictions.between(CicloVendaControleEnvio.strDthCadastro, DataUtil.getPrimeiraHoraDia(DataUtil.adicionarDias(new Date(), -5)), DataUtil.getUltimaHoraDia(new Date())));
- // ct.add(Restrictions.or(crt1, crt2));
- ct.add(Restrictions.isNull(CicloVendaControleEnvio.strDthEnvio));
- // OU nunca foi enviada (null) ou já tentou a mais de 4 horas (ai tenta
- // novamente)
- ct.add(Restrictions.in(CicloVendaControleEnvio.strIndStatus, new String[] { CicloVendaControleEnvio.IND_STATUS_PENDENTE, CicloVendaControleEnvio.IND_STATUS_PENDENTE_FATURAMENTO }));
- ct.add(Restrictions.ge(CicloVendaControleEnvio.strDthCadastro, DataUtil.getPrimeiraHoraDia(DataUtil.adicionarDias(new Date(), -2))));
- // ct.add(Restrictions.or(Restrictions.isNull(CicloVendaControleEnvio.strDthUltimoProcessamento), Restrictions.le(CicloVendaControleEnvio.strDthUltimoProcessamento, DataUtil.adicionarHoras(new Date(), -60))));
- // Depois de 5 dias tentando... desiste...
- // ct.add(Restrictions.le(CicloVendaControleEnvio.strQtdErro, 30));
- ct.addOrder(Order.asc(CicloVendaControleEnvio.strId));
- // ct.add(Restrictions.eq(CicloVendaControleEnvio.strId, 27400l));
- List<CicloVendaControleEnvio> cicloVendaEnvios = ct.list();
- if (!cicloVendaEnvios.isEmpty()) {
- logger.info("INICIANDO O ENVIO DE EMAIL_COBRANCA_FATURAMENTO para " + cicloVendaEnvios.size() + " PDVs!");
- enviarEmailCobrancaFat(cicloVendaEnvios, sessao);
- } else {
- logger.info("SEM EMAIL_COBRANCA_FATURAMENTO para ser Enviado!");
- }
- }
- public void enviarEmailCobrancaFat(List<CicloVendaControleEnvio> cicloVendaEnvios, Session sessao) throws Exception {
- try {
- for (CicloVendaControleEnvio cicloVendaControleEnvio : cicloVendaEnvios) {
- Criteria ct = sessao.createCriteria(CicloVendaControleEnvio.class);
- ct.createCriteria(CicloVendaControleEnvio.strCicloVenda).createCriteria(CicloVenda.strPontoVenda).createCriteria(PontoVenda.strCliente);
- // ct.add(Restrictions.eq(CicloVendaControleEnvio.strCicloVenda
- // + "." +
- // CicloVenda.strId, idCicloVenda));
- ct.add(Restrictions.eq(CicloVendaControleEnvio.strId, cicloVendaControleEnvio.getId()));
- cicloVendaControleEnvio = (CicloVendaControleEnvio) ct.uniqueResult();
- cicloVendaControleEnvio.setDthUltimoProcessamento(new Timestamp(new Date().getTime()));
- try {
- CicloVenda cicloVenda = cicloVendaControleEnvio.getCicloVenda();
- Integrador integrador = null;
- if (cicloVenda.getIntegradorEmpresa() != null) {
- integrador = cicloVenda.getIntegradorEmpresa().getIntegrador();
- }
- ct = sessao.createCriteria(TituloCicloVenda.class);
- ct.createAlias(TituloCicloVenda.strTitulo,TituloCicloVenda.strTitulo);
- ct.add(Restrictions.ne(TituloCicloVenda.strTitulo+"."+Titulo.strIndStatus, Titulo.STATUS_TITULO_NEGOCIADO));
- ct.add(Restrictions.eq(TituloCicloVenda.strCobranca + "." + CicloVenda.strId, cicloVenda.getId()));
- List<TituloCicloVenda> tituloCicloVendaSet = ct.list();
- List<Titulo> titulosGerados = new ArrayList<Titulo>();
- for (TituloCicloVenda tituloCicloVenda : tituloCicloVendaSet) {
- Titulo bol = tituloCicloVenda.getTitulo();
- titulosGerados.add(bol);
- }
- ct = sessao.createCriteria(TituloCicloVenda.class);
- ct.createCriteria(TituloCicloVenda.strTitulo);
- ct.add(Restrictions.in(TituloCicloVenda.strTitulo, titulosGerados));
- List<TituloCicloVenda> tituloCicloVendaSetGrupoCobranca = ct.list();
- List<CicloVenda> cicloVendaGrupoList = new ArrayList<CicloVenda>();
- for (TituloCicloVenda tituloCicloVenda : tituloCicloVendaSetGrupoCobranca) {
- cicloVendaGrupoList.add(tituloCicloVenda.getCobranca());
- }
- Set<String> emails = new HashSet<String>();
- PontoVenda pontoVendaCiclo = cicloVenda.getPontoVenda();
- PontoVenda pontoVenda = null;
- if (pontoVendaCiclo.getGrupoCobranca() != null) {
- pontoVenda = pontoVendaCiclo.getGrupoCobranca().getPontoVendaResposavel();
- } else {
- pontoVenda = pontoVendaCiclo;
- }
- if (pontoVenda.getTxtEmail() != null && !pontoVenda.getTxtEmail().trim().isEmpty() && pontoVenda.getTxtEmail().contains("@")) {
- emails.add(pontoVenda.getTxtEmail().trim());
- }
- if (pontoVenda.getCliente().getTxtEmailCliente() != null && !pontoVenda.getCliente().getTxtEmailCliente().trim().isEmpty() && pontoVenda.getCliente().getTxtEmailCliente().contains("@")) {
- emails.add(pontoVenda.getCliente().getTxtEmailCliente().trim());
- }
- if (emails.isEmpty()) {
- throw new RestricaoException("[EMAIL] Ponto de venda [" + pontoVenda.getId() + " - " + pontoVenda.getNomPontoVenda() + "] sem E-mail cadastrado!!!");
- }
- Empresa empresa = pontoVenda.getEmpresa();
- // TODO Tratar Grupo Cobranca
- ct = sessao.createCriteria(CicloVendaFaturamentoNotaFiscal.class);
- ct.createAlias(CicloVendaFaturamentoNotaFiscal.strCicloVenda, CicloVendaFaturamentoNotaFiscal.strCicloVenda);
- ct.createAlias(CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strPontoVenda, CicloVenda.strPontoVenda);
- ct.add(Restrictions.eq(CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strId, cicloVenda.getId()));
- CicloVendaFaturamentoNotaFiscal cicloVendaFaturamentoNotaFiscal = (CicloVendaFaturamentoNotaFiscal) ct.uniqueResult();
- ct = sessao.createCriteria(CicloVendaFaturamentoNotaFiscalAutorizacao.class);
- ct.createAlias(CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal, CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal);
- ct.createAlias(CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal + "." + CicloVendaFaturamentoNotaFiscal.strCicloVenda, CicloVendaFaturamentoNotaFiscal.strCicloVenda);
- ct.createAlias(CicloVendaFaturamentoNotaFiscalAutorizacao.strCicloVendaFaturamentoNotaFiscal + "." + CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strPontoVenda, CicloVenda.strPontoVenda);
- ct.add(Restrictions.eq(CicloVendaFaturamentoNotaFiscal.strCicloVenda + "." + CicloVenda.strId, cicloVenda.getId()));
- ct.add(Restrictions.eq(CicloVendaFaturamentoNotaFiscalAutorizacao.strIndStatusEtico, CicloVendaFaturamentoNotaFiscalAutorizacao.IND_STATUS_CONCLUIDO));
- CicloVendaFaturamentoNotaFiscalAutorizacao autorizacao = (CicloVendaFaturamentoNotaFiscalAutorizacao) ct.uniqueResult();
- if (cicloVendaFaturamentoNotaFiscal != null) {
- if (autorizacao == null || !autorizacao.getIndStatusEtico().equals(CicloVendaFaturamentoNotaFiscalAutorizacao.IND_STATUS_CONCLUIDO)) {
- throw new RestricaoException("[FATURAMENTO] Ponto de venda [" + pontoVenda.getId() + " - " + pontoVenda.getNomPontoVenda() + "] ainda não teve seu ciclo faturado !!!");
- }
- }
- FaturamentoEticoArquivo faturamentoArquivo = null;
- byte[] arquivoDanfe = null;
- if (autorizacao != null) {
- ct = sessao.createCriteria(FaturamentoEticoArquivo.class);
- ct.createAlias(FaturamentoEticoArquivo.strFaturamentoEtico, FaturamentoEticoArquivo.strFaturamentoEtico);
- ct.add(Restrictions.eq(FaturamentoEticoArquivo.strFaturamentoEtico + "." + FaturamentoEtico.strCicloVendaFaturamentoNotaFiscalAutorizacao, autorizacao));
- faturamentoArquivo = (FaturamentoEticoArquivo) ct.uniqueResult();
- empresa = faturamentoArquivo.getFaturamentoEtico().getEmpresa();
- arquivoDanfe = CicloVendaBO.geraDanfe(sessao, autorizacao);
- }
- StringBuilder sbAssuntoEmail = new StringBuilder();
- String tituloPrefixo = "";
- InputStream is = null;
- List<Object[]> produtosRepasse = null;
- ct = sessao.createCriteria(CicloVendaRepasse.class);
- ct.add(Restrictions.eq(CicloVendaRepasse.strCicloVenda, cicloVenda));
- ct.setProjection(Projections.projectionList() //
- .add(Projections.sum(CicloVendaRepasse.strQtdVendaDia)) // 0
- .add(Projections.sum(CicloVendaRepasse.strVlrCobrarDia)) // 1
- .add(Projections.groupProperty(CicloVendaRepasse.strNomProduto)) // 3
- );
- ct.addOrder(Order.asc(CicloVendaRepasse.strNomProduto));
- produtosRepasse = ct.list();
- if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
- ct = sessao.createCriteria(PontoVendaCobrancaIntegracaoRepasse.class);
- ct.add(Restrictions.eq(PontoVendaCobrancaIntegracaoRepasse.strPontoVenda + "." + PontoVenda.strId, cicloVenda.getPontoVenda().getId()));
- ct.setMaxResults(1);
- PontoVendaCobrancaIntegracaoRepasse pic = (PontoVendaCobrancaIntegracaoRepasse) ct.uniqueResult();
- if (pic != null && pic.getTxtJsonEmailEnvio() != null && !pic.getTxtJsonEmailEnvio().trim().isEmpty()) {
- JSONObject jsonObject = new JSONObject(pic.getTxtJsonEmailEnvio());
- JSONArray jsonArray = new JSONArray(jsonObject.getString("email"));
- for (int i = 0; i < jsonArray.length(); i++) {
- emails.add(jsonArray.getString(i));
- }
- }
- }
- if (autorizacao != null && faturamentoArquivo != null) {
- if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
- tituloPrefixo = "[REPASSE] ";
- }
- tituloPrefixo += "Cobrança do Ciclo de Vendas Nº " + cicloVenda.getId() + " e NFe Nº" + faturamentoArquivo.getNumDocumentoFiscal() + ". Cliente : " + pontoVenda.getNomPontoVenda();
- is = AncoraEmail.class.getResourceAsStream("modelo_email_nfe_cobranca.html");
- } else {
- tituloPrefixo = "Cobrança do Ciclo de Vendas Nº " + cicloVenda.getId() + ". Cliente : " + pontoVenda.getNomPontoVenda();
- is = AncoraEmail.class.getResourceAsStream("modelo_email_cobranca.html");
- }
- // faturamentoArquivo.getDthFaturamento()
- sbAssuntoEmail.append(tituloPrefixo + " - Emitida por: " + empresa.getNomRazaoSocial() + " (" + FormatadorUtil.formatCpfCnpj(empresa.getNumCpfCnpj()) + ") - Data da emissão: " + DataUtil.dataHoraExtenso(cicloVenda.getDthGeracao()));
- String mensagem = "";
- HashMap<String, byte[]> anexos = new HashMap<String, byte[]>();
- Scanner sc = new Scanner(is, "UTF-8");
- StringBuilder sb = new StringBuilder();
- while (sc.hasNextLine()) {
- sb.append(sc.nextLine());
- }
- List<Object[]> produtos = null;
- StringBuilder sbTabela = new StringBuilder();
- Double vlrTotal = 0D;
- if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
- produtos = produtosRepasse;
- CicloVendaRepasseDS cicloVendaRepasseDS = new CicloVendaRepasseDS();
- cicloVendaRepasseDS.setNomArquivoJasper("cicloVendaRepasseRel");
- cicloVendaRepasseDS.setCicloVenda(cicloVenda);
- cicloVendaRepasseDS.setTitulo(titulosGerados.get(0));
- cicloVendaRepasseDS.executarQuery(sessao);
- UsuarioGerencial usuarioGerencial = (UsuarioGerencial) sessao.get(UsuarioGerencial.class, 18L);
- byte[] detalhamentoRepasse = cicloVendaRepasseDS.downloadRelatorioReturnIS(DataSourcePadrao.TIPO_PDF, "cobranca_repasse", sessao, usuarioGerencial, cicloVenda.getIntegradorEmpresa().getEmpresa());
- Format format = new SimpleDateFormat("ddMMyyyy");
- String datInicioFormatada = format.format(cicloVenda.getDatInicioCobranca());
- String datFimFormatada = format.format(cicloVenda.getDatFimCobranca());
- String datGeracaoFormatada = format.format(new Date());
- String nomArquivo = titulosGerados.get(0).getNumTitulo() + "_" + cicloVenda.getIntegradorEmpresa().getEmpresa().getId() + "_" + datInicioFormatada + "_" + datFimFormatada + "_" + datGeracaoFormatada + ".pdf";
- anexos.put(nomArquivo, detalhamentoRepasse);
- for (Object[] produto : produtos) {
- // Double qtdProduto = new Double((Long) produto[0]);
- // Double vlrUnitario = new
- // Double(produto.getVlrUnitario());
- Double vlrVenda = new Double((Long) produto[1]) / 100.0d;
- sbTabela.append("<tr style=\"font-size:12px;\">");
- sbTabela.append("<td style=\"text-align:left\">").append(produto[2]).append("</td>");
- sbTabela.append("<td style=\"text-align:right\">").append(produto[0]).append("</td>");
- sbTabela.append("<td style=\"text-align:right\">").append(FormatadorUtil.intToReais(vlrVenda, true)).append("</td>");
- sbTabela.append("</tr>");
- vlrTotal += vlrVenda;
- }
- } else {
- ct = sessao.createCriteria(Venda.class);
- ct.add(Restrictions.in(Venda.strCobrancaVinculada, cicloVendaGrupoList));
- ct.createAlias(Venda.strProdutoDistribuidor, Venda.strProdutoDistribuidor);
- ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strProdutoCategoriaDistribuidor, ProdutoDistribuidor.strProdutoCategoriaDistribuidor);
- ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor, ProdutoDistribuidor.strRegionalMarcaDistribuidor);
- ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor + "." + RegionalMarcaDistribuidor.strMarcaDistribuidor, RegionalMarcaDistribuidor.strMarcaDistribuidor);
- ct.setProjection(Projections.projectionList() //
- .add(Projections.count(Venda.strId)) // 0
- .add(Projections.sum(Venda.strVlrVendaAbatidoReal)) // 1
- .add(Projections.groupProperty(ProdutoDistribuidor.strProdutoCategoriaDistribuidor + "." + ProdutoCategoriaDistribuidor.strId)) // 2
- .add(Projections.groupProperty(ProdutoDistribuidor.strProdutoCategoriaDistribuidor + "." + ProdutoCategoriaDistribuidor.strNomCategoria)) // 3
- .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strId)) // 4
- .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca)) // 5
- .add(Projections.groupProperty(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto)) // 6
- );
- ct.add(Restrictions.ne(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca, Marca.NOM_MARCA_PHOENIX));
- ct.addOrder(Order.asc(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca));
- ct.addOrder(Order.asc(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto));
- produtos = ct.list();
- ct = sessao.createCriteria(Venda.class);
- ct.add(Restrictions.in(Venda.strCobrancaVinculada, cicloVendaGrupoList));
- ct.createAlias(Venda.strProdutoDistribuidor, Venda.strProdutoDistribuidor);
- ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strProdutoCategoriaDistribuidor, ProdutoDistribuidor.strProdutoCategoriaDistribuidor);
- ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor, ProdutoDistribuidor.strRegionalMarcaDistribuidor);
- ct.createAlias(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strRegionalMarcaDistribuidor + "." + RegionalMarcaDistribuidor.strMarcaDistribuidor, RegionalMarcaDistribuidor.strMarcaDistribuidor);
- ct.setProjection(Projections.projectionList() //
- .add(Projections.count(Venda.strId)) // 0
- .add(Projections.sum(Venda.strVlrVendaAbatidoReal)) // 1
- .add(Projections.groupProperty(ProdutoDistribuidor.strProdutoCategoriaDistribuidor + "." + ProdutoCategoriaDistribuidor.strId)) // 2
- .add(Projections.groupProperty(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strNomProduto)) // 3
- .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strId)) // 4
- .add(Projections.groupProperty(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca)) // 5
- .add(Projections.groupProperty(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto)) // 6
- );
- ct.add(Restrictions.eq(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca, Marca.NOM_MARCA_PHOENIX));
- ct.addOrder(Order.asc(RegionalMarcaDistribuidor.strMarcaDistribuidor + "." + MarcaDistribuidor.strNomMarca));
- ct.addOrder(Order.asc(Venda.strProdutoDistribuidor + "." + ProdutoDistribuidor.strVlrBrutoProduto));
- List<Object[]> produtosPhoe = ct.list();
- if (produtosPhoe != null) {
- produtos.addAll(produtosPhoe);
- }
- for (Object[] produto : produtos) {
- // Double qtdProduto = new Double((Long) produto[0]);
- // Double vlrUnitario = new
- // Double(produto.getVlrUnitario());
- Double vlrVenda = (Double) produto[1];
- Long vlrProduto = (Long) produto[6];
- sbTabela.append("<tr style=\"font-size:12px;\">");
- if (produto[5].equals(Marca.NOM_MARCA_PHOENIX)) {
- sbTabela.append("<td style=\"text-align:left\">").append(produto[3]).append("</td>");
- } else {
- sbTabela.append("<td style=\"text-align:left\">").append(produto[5] + " " + produto[3] + " " + FormatadorUtil.intToReais(vlrProduto, true)).append("</td>");
- }
- sbTabela.append("<td style=\"text-align:right\">").append(produto[0]).append("</td>");
- sbTabela.append("<td style=\"text-align:right\">").append(FormatadorUtil.intToReais(vlrVenda, true)).append("</td>");
- sbTabela.append("</tr>");
- vlrTotal += vlrVenda;
- }
- }
- boolean temCobranca = false;
- String vencimento = "";
- if (cicloVenda.getIdRV() == null && cicloVenda.getIdTendencia() == null) {
- ByteArrayOutputStream baosBoleto = new ByteArrayOutputStream();
- for (Titulo titulo : titulosGerados) {
- BoletoGerado bol = titulo.getBoletoGerado();
- if (bol != null && (bol.getIndStatus().equals(Titulo.STATUS_TITULO_ABERTO) || bol.getIndStatus().equals(Titulo.STATUS_TITULO_PARCIAL))) {
- JBoletoBean boletoBean = new JBoletoBean();
- boletoBean.criarBoleto(bol, pontoVenda);
- PDFGeneratorCell generator = new PDFGeneratorCell(boletoBean, Integer.parseInt(bol.getConfigBoletoBanco().getTipoBoleto().getId().toString()));
- JBoleto jBoleto = new JBoleto(generator, boletoBean, Integer.parseInt(bol.getConfigBoletoBanco().getTipoBoleto().getId().toString()));
- jBoleto.addBoleto();
- jBoleto.closeBoleto(baosBoleto, null);
- byte[] bytes = baosBoleto.toByteArray();
- anexos.put("boleto_" + bol.getNumTitulo() + ".pdf", bytes);
- vencimento = bol.getDatVencimentoFormatada();
- temCobranca = true;
- }
- }
- }
- mensagem = sb.toString();
- String tabela = sbTabela.toString();
- String periodo = cicloVenda.getDatInicioCobrancaFormatado() + " até " + cicloVenda.getDatFimCobrancaFormatado();
- String prefixo = "Segue abaixo o detalhamento da sua Cobrança referente ao período <b>" + periodo + "</b>.";
- String sufixo = "<b> Caso já tenha realizado o pagamento, favor desconsiderar!</b>";
- if (temCobranca) {
- mensagem = mensagem.replace("#titulo", autorizacao != null ? "Detalhamento de Cobrança e Faturamento" : "Detalhamento de Cobrança");
- // mensagem = mensagem.replace("#corpo_email",
- // autorizacao != null ? "Segue em
- // anexo sua cobrança com o vencimento atualizado sem
- // juros para o dia
- // 12/07/2018, DANFE e XML da nota fiscal eletrônica
- // emitida contra o seu
- // estabelecimento" : "Segue em anexo sua cobrança com o
- // vencimento atualizado
- // sem juros para o dia 12/07/2018 e em anexo o boleto
- // para que possa ser
- // efetuado o pagamento.");
- mensagem = mensagem.replace("#corpo_email", autorizacao != null ? prefixo + " Em anexo o Boleto com o vencimento em <b>" + vencimento + "</b>, DANFE e XML da nota fiscal eletrônica emitida contra o seu estabelecimento." + sufixo : prefixo + " Em anexo o Boleto com o vencimento em <b>" + vencimento + "</b>, para que possa ser efetuado o pagamento." + sufixo);
- } else {
- mensagem = mensagem.replace("#titulo", autorizacao != null ? "Detalhamento de Faturamento" : "Detalhamento de Cobrança");
- mensagem = mensagem.replace("#corpo_email", autorizacao != null ? prefixo + " Em anexo consta o DANFE e XML da nota fiscal eletrônica emitida contra o seu estabelecimento." : "Segue abaixo o detalhamento da sua Cobrança referente ao período <b>" + periodo + "</b>.");
- }
- mensagem = mensagem.replace("#razao_social_destinatario", pontoVenda.getNomRazaoSocial());
- mensagem = mensagem.replace("#lista_produtos", tabela);
- mensagem = mensagem.replace("#vlr_total", FormatadorUtil.intToReais(vlrTotal, true));
- mensagem = mensagem.replace("#dat_aprovacao", autorizacao != null ? "Data da aprovação da emissão: " + autorizacao.getDthAutorizacaoFormatado() : "Cobrança gerada em : " + cicloVenda.getDthGeracaoFormatada());
- mensagem = mensagem.replace("#num_nota", faturamentoArquivo != null ? faturamentoArquivo.getNumDocumentoFiscal() : "-");
- mensagem = mensagem.replace("#num_chave", faturamentoArquivo != null ? faturamentoArquivo.getNumChaveAcesso() : "-");
- mensagem = mensagem.replace("#razao_social_emitente", empresa.getNomRazaoSocial());
- mensagem = mensagem.replace("#num_cnpj_emitente", FormatadorUtil.formatCpfCnpj(empresa.getNumCpfCnpj()));
- mensagem = mensagem.replace("#num_cnpj_destinatario", FormatadorUtil.formatCpfCnpj(pontoVenda.getNumCpfCnpj()));
- mensagem = mensagem.replace("#dat_emissao", faturamentoArquivo != null ? DataUtil.dataHoraExtenso(faturamentoArquivo.getDthFaturamento()) : "-");
- if (arquivoDanfe != null && autorizacao != null) {
- anexos.put(faturamentoArquivo.getNumChaveAcesso() + ".pdf", arquivoDanfe);
- anexos.put(faturamentoArquivo.getNumChaveAcesso() + ".xml", autorizacao.getArquivoRetornoXml());
- }
- EmailAppswareSession email = null;
- if (integrador != null && integrador.getNomIntegrador().equals(Integrador.INTEGRADOR_SE_SULCARD)) {
- String emailRemetente = "n2.boleto@n2.com.br";
- if (getSessoesEmails().containsKey(emailRemetente)) {
- email = getSessoesEmails().get(emailRemetente);
- } else {
- email = new EmailAppswareSession(emailRemetente, "adminn20618");
- getSessoesEmails().put(emailRemetente, email);
- }
- } else {
- String emailRemetente = "nfe@n2.com.br";
- if (getSessoesEmails().containsKey(emailRemetente)) {
- email = getSessoesEmails().get(emailRemetente);
- } else {
- email = new EmailAppswareSession(emailRemetente, "1234@mudar");
- getSessoesEmails().put(emailRemetente, email);
- }
- }
- email.limpar();
- HashSet<String> emailsBCC = new HashSet<String>();
- if (autorizacao != null) {
- if (integrador != null && integrador.getNomIntegrador().equals(Integrador.INTEGRADOR_SE_SULCARD)) {
- emailsBCC.add("nfe.boleto@n2.com.br");
- email.setReplyTo("nfe.boleto@n2.com.br");
- } else {
- emailsBCC.add("nfe.auto@n2.com.br");
- if (produtosRepasse != null && !produtosRepasse.isEmpty()) {
- emailsBCC.add("compras@n2.com.br");
- }
- email.setReplyTo("nfe.auto@n2.com.br");
- }
- } else {
- emailsBCC.add("boleto.auto@n2.com.br");
- email.setReplyTo("boleto.auto@n2.com.br");
- }
- // emailsBCC = new HashSet<String>();
- // emails = new HashSet<String>();
- // emails.add("francisco@appsware.com.br");
- // email.setReplyTo("francisco@appsware.com.br");
- List<String> destinatarios = new ArrayList<>();
- StringBuilder sbDestinatarios = new StringBuilder();
- for (String emailStr : emails) {
- destinatarios.add(emailStr);
- sbDestinatarios.append(emailStr).append(", ");
- }
- List<String> destinatariosBCC = new ArrayList<>();
- for (String emailStr : emailsBCC) {
- destinatariosBCC.add(emailStr);
- }
- email.setDestinatariosBCC(destinatariosBCC);
- email.setDestinatarios(destinatarios);
- if (!anexos.isEmpty()) {
- email.setAnexos(anexos);
- }
- email.enviarEmail(mensagem, sbAssuntoEmail.toString());
- email.limpar();
- if (sbDestinatarios != null && sbDestinatarios.length() > 0) {
- sbDestinatarios.delete(sbDestinatarios.length() - 2, sbDestinatarios.length());
- cicloVendaControleEnvio.setIndStatus(cicloVendaControleEnvio.getIndStatus().equals(CicloVendaControleEnvio.IND_STATUS_PENDENTE_FATURAMENTO) ? CicloVendaControleEnvio.IND_STATUS_OK_FATURAMENTO : CicloVendaControleEnvio.IND_STATUS_OK);
- cicloVendaControleEnvio.setDthEnvio(new Timestamp(new Date().getTime()));
- cicloVendaControleEnvio.setTxtEmailEnviado(mensagem);
- cicloVendaControleEnvio.setTxtJsonEnvio("Anexos :: " + anexos.size());
- cicloVendaControleEnvio.setTxtStatus("Email enviado com sucesso para o(s) destinatário: " + sbDestinatarios.toString());
- sessao.beginTransaction();
- sessao.merge(cicloVendaControleEnvio);
- sessao.getTransaction().commit();
- logger.info("EMAIL_COBRANCA_FATURAMENTO enviado com sucesso para o(s) destinatário: " + sbDestinatarios.toString());
- }
- sc.close();
- Thread.sleep(DataUtil.SEGUNDO * 10);
- } catch (RestricaoException e) {
- cicloVendaControleEnvio.setTxtStatus(e.getMessage());
- cicloVendaControleEnvio.setQtdErro(cicloVendaControleEnvio.getQtdErro() + 1);
- sessao.beginTransaction();
- sessao.merge(cicloVendaControleEnvio);
- sessao.getTransaction().commit();
- e.printStackTrace();
- } catch (Exception e) {
- // cicloVendaControleEnvio.setIndStatus(CicloVendaControleEnvio.IND_STATUS_ERRO);
- cicloVendaControleEnvio.setTxtStatus(e.getMessage());
- cicloVendaControleEnvio.setQtdErro(cicloVendaControleEnvio.getQtdErro() + 1);
- sessao.beginTransaction();
- sessao.merge(cicloVendaControleEnvio);
- sessao.getTransaction().commit();
- e.printStackTrace();
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- for (Entry<String, EmailAppswareSession> es : getSessoesEmails().entrySet()) {
- es.getValue().fechar();
- }
- }
- }
- public HashMap<String, EmailAppswareSession> getSessoesEmails() {
- return sessoesEmails;
- }
- public void setSessoesEmails(HashMap<String, EmailAppswareSession> sessoesEmails) {
- this.sessoesEmails = sessoesEmails;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement