Exemplo n.º 1
0
        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;
            }
        }