public static IList <RetornoProcessamentoVO> GeraArquivo(eTipoAviso tipo, String[] operadoraIDs, Int32 mes, Int32 ano) { PersistenceManager pm = new PersistenceManager(); pm.BeginTransactionContext(); try { List <RetornoProcessamentoVO> vos = new List <RetornoProcessamentoVO>(); IList <Cobranca> atrasadas = null; System.Data.DataTable dt = null; foreach (String operadoraId in operadoraIDs) { RetornoProcessamentoVO vo = new RetornoProcessamentoVO(); vo.OperadoraNome = Operadora.CarregarNome(operadoraId, pm); if (tipo != eTipoAviso.BoletoViaEmail) { if (FoiProcessado(operadoraId, tipo, mes, ano, pm)) { vo.OperadoraNome += " (já enviado)"; vo.Processado = true; vo.TipoAviso = Convert.ToInt32(tipo).ToString(); vos.Add(vo); continue; } atrasadas = Cobranca.CarregarAtrasadas(operadoraId, mes, ano, pm); if (atrasadas == null || atrasadas.Count == 0) { vo.OperadoraNome += " (nenhuma ocorrência)"; vo.Processado = true; vo.TipoAviso = Convert.ToInt32(tipo).ToString(); vos.Add(vo); atrasadas = null; continue; } } else { String qry = String.Concat("select cobranca_arquivoUltimoEnvioId, contrato_codcobranca, cobranca_tipo, contrato_contratoAdmId, contrato_admissao, cobranca_id, cobranca_parcela, beneficiario_email,beneficiario_cpf,operadora_nome,beneficiario_nome,cobranca_dataVencimento,cobranca_valor,cobranca_nossoNumero,contrato_numero ", " from beneficiario ", " inner join contrato_beneficiario on beneficiario_id=contratobeneficiario_beneficiarioId and contratobeneficiario_tipo=0 ", " inner join contrato on contrato_id=contratobeneficiario_contratoId and contrato_cancelado <> 1 ", " inner join operadora on operadora_id=contrato_operadoraId ", " inner join cobranca on cobranca_propostaId=contrato_id ", " where ", Contrato.CondicaoBasicaQuery, " AND ", " beneficiario_email IS NOT NULL AND beneficiario_email <> '' AND ", " MONTH(cobranca_dataVencimento)=", mes, " AND ", " YEAR(cobranca_dataVencimento)=", ano, " AND ", " cobranca_pago=0 AND operadora_id=", operadoraId, " ORDER BY cobranca_dataVencimento"); dt = LocatorHelper.Instance.ExecuteQuery(qry, "result", pm).Tables[0]; if (dt == null || dt.Rows.Count == 0) { vo.OperadoraNome += " (nenhuma ocorrência)"; vo.Processado = true; vo.TipoAviso = Convert.ToInt32(tipo).ToString(); vos.Add(vo); continue; } } ArquivoAvisoCobranca arquivo = new ArquivoAvisoCobranca(); arquivo.DataEmissao = DateTime.Now; arquivo.OperadoraID = operadoraId; arquivo.Processado = false; arquivo.TipoAviso = Convert.ToInt32(tipo); arquivo.Mes = mes; arquivo.Ano = ano; int qtd = 0; if (tipo == eTipoAviso.CartaCancelamento) { vo.ArquivoConteudo = GeraArquivoCARTACancelamento(operadoraId, mes, ano, atrasadas, out qtd, pm); } else if (tipo == eTipoAviso.BoletoViaEmail) { vo.ArquivoConteudo = GeraArquivoBoletoViaEmail(operadoraId, mes, ano, dt, out qtd, pm); } else if (tipo == eTipoAviso.SMS) { vo.ArquivoConteudo = GeraArquivoSMS(operadoraId, mes, ano, atrasadas, out qtd, pm); } else if (tipo == eTipoAviso.Voz) { vo.ArquivoConteudo = GeraArquivoVOZ(operadoraId, mes, ano, atrasadas, out qtd, pm); } else { vo.ArquivoConteudo = GeraArquivoCARTAReativacao(operadoraId, mes, ano, atrasadas, out qtd, pm); } vo.QTD = qtd; if (qtd > 0) { ArquivoAvisoCobranca.Salvar(arquivo, pm); vo.ArquivoAvisoID = Convert.ToString(arquivo.ID); vo.Processado = false; } else { vo.OperadoraNome += " (nenhuma ocorrência)"; vo.Processado = true; } vo.OperadoraID = operadoraId; vo.TipoAviso = arquivo.TipoAviso.ToString(); vos.Add(vo); } pm.Commit(); return(vos); } catch (Exception ex) { pm.Rollback(); throw ex; } finally { pm = null; } }