public void crystalReport()
        {
            System.Drawing.Printing.PageSettings pg = new System.Drawing.Printing.PageSettings();
            pg.Margins.Top = 0;
            pg.Margins.Bottom = 0;
            pg.Margins.Left = 0;
            pg.Margins.Right = 0;
            System.Drawing.Printing.PaperSize size = new System.Drawing.Printing.PaperSize();
            size.RawKind = (int)PaperKind.Letter;
            pg.PaperSize = size;
            pg.Landscape = true;

            DSrecibo dsSegundaVia = new DSrecibo();
            ListaSabesp oListLeituraSabesp = new ListaSabesp();
            LeituraSabespBLL oLeituraBussiness = new LeituraSabespBLL();
            ReciboAguaBLL oReciboBLL = new ReciboAguaBLL();
            ReciboAgua oReciboModel = new ReciboAgua();
            Util.RelatorioConfigRecibo oCarregaVariaveisRecibo = new Util.RelatorioConfigRecibo();

            string apartamento = Session["AP"].ToString();
            string bloco = Session["Bloco"].ToString();
            string mes = Session["mes"].ToString();
            string ano = Session["ano"].ToString();

            oReciboModel.bloco = bloco;
            oReciboModel.apartamento = apartamento;
            oReciboModel.ano = Convert.ToInt32(ano);
            oReciboModel.mes = Convert.ToInt32(mes);

            int mesReferenciaSabesp = Convert.ToInt32(mes);

             if (Convert.ToInt32(ano) <= 2015)
            {
                ReciboOld();

            }
            else  if (Convert.ToInt32(mes) == 1 &&  Convert.ToInt32(ano) == 2016)
            {
                ReciboOld();
            }

             else if (Convert.ToInt32(mes) == 2 && Convert.ToInt32(ano) == 2016)
             {
                 ReciboOld();
             }

             else
             {

                 var oListOrdenadoByRegistroJaCalculado = from listaOrdenada in oReciboBLL.buscaTodosRecibosByBlocoAndApto(oReciboModel)
                                                      orderby listaOrdenada.registro ascending
                                                      select listaOrdenada;

                        foreach (var item in oListOrdenadoByRegistroJaCalculado)
                        {

                            DataRow drSegundaVia = dsSegundaVia.Tables[1].NewRow();
                            drSegundaVia["ID-Condomínio"] = item.idCondominio;
                            drSegundaVia["Nome do Condomínio"] = item.nomeCondominio;
                            drSegundaVia["Endereço do Condomínio"] = item.enderecoCondominio;
                            drSegundaVia["Bloco"] = item.bloco;
                            drSegundaVia["Apartamento"] = item.apartamento;
                            drSegundaVia["Registro"] = item.registro;
                            drSegundaVia["Fechamento Atual"] = item.fechamentoAtual;
                            drSegundaVia["Data leitura Anterior"] = item.dataLeituraAnterior;
                            drSegundaVia["Leitura Anterior M³"] = item.leituraAnteriorM3;
                            drSegundaVia["Data leitura Atual"] = item.dataLeituraAtual;
                            drSegundaVia["Leitura Atual M³"] = item.leituraAtualM3;
                            drSegundaVia["Consumo do Mês M³"] = item.consumoMesM3;
                            drSegundaVia["Data da próxima leitura"] = item.dataProximaLeitura;
                            drSegundaVia["Média"] = item.media;
                            drSegundaVia["Histórico descricação mês1"] = item.historicoDescricaoMes1;
                            drSegundaVia["Histórico mês1"] = item.historicoMes1;
                            drSegundaVia["Histórico descricação mês2"] = item.historicoDescricaoMes2;
                            drSegundaVia["Histórico mês2"] = item.historicoMes2;
                            drSegundaVia["Histórico descricação mês3"] = item.historicoDescricaoMes3;
                            drSegundaVia["Histórico mês3"] = item.historicoMes3;
                            drSegundaVia["Histórico descricação mês4"] = item.historicoDescricaoMes4;
                            drSegundaVia["Histórico mês4"] = item.historicoMes4;
                            drSegundaVia["Histórico descricação mês5"] = item.historicoDescricaoMes5;
                            drSegundaVia["Histórico mês5"] = item.historicoMes5;
                            drSegundaVia["Histórico descricação mês6"] = item.historicoDescricaoMes6;
                            drSegundaVia["Histórico mês6"] = item.historicoMes6;
                            drSegundaVia["Consumo Valor"] = item.ConsumoValorPagoCondominio;
                            drSegundaVia["Consumo M³"] = item.consumoM3pagoCondominio;
                            drSegundaVia["Mínimo M³"] = item.minimoM3PagoCondominio;
                            drSegundaVia["Mínimo Valor"] = item.minimoValorPagoCondominio;
                            drSegundaVia["Excedente Valor"] = item.excedenteValorPagoCondominio;
                            drSegundaVia["Tarifa Mínima M³"] = item.tarifaMinimaM3ValorDevido;
                            drSegundaVia["Tarifa Mínima Valor"] = item.tarifaMinimaValorValorDevido;
                            drSegundaVia["ExcedenteValorDevido"] =  item.excedenteValorDevido;
                            drSegundaVia["ExcedentePagoPeloCondominio"] = item.excedenteM3PagoCondominio;
                            drSegundaVia["ExcedenteValorRateio "] = item.excedenteValorRateio;
                            drSegundaVia["a pagar"] = item.valorPagarValorDevido;
                            drSegundaVia["ExcedentePagoPeloCondominio"] = item.excedenteM3PagoCondominio;
                            drSegundaVia["ExcedenteM3Rateio"] = item.excedenteM3Rateio;
                            drSegundaVia["Geral"] = item.avisoGeralAviso;
                            drSegundaVia["Anormal"] = item.AnormalAviso;
                            drSegundaVia["Invididual"] = item.individualAviso;
                            drSegundaVia["ANORMALIDADE"] = item.anormalidadeAviso;
                            drSegundaVia["Imagem"] = item.imagem;
                            drSegundaVia["excedenteM3Diario"] = item.excedenteM3diaria;
                            drSegundaVia["status"] = item.status;
                            dsSegundaVia.Tables[1].Rows.Add(drSegundaVia);

                        }

                        Crystal.Relatorios.ReciboMoradorByApBloco rbSegundaVia = new Crystal.Relatorios.ReciboMoradorByApBloco();

                        rbSegundaVia.SetDataSource(dsSegundaVia);

                 rbSegundaVia.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "Recibo-"+ano+mes);
             }
        }
        public void Recibo()
        {
            string mes = Session["mes"].ToString();
            string ano = Session["ano"].ToString();

            if (Convert.ToInt32(ano) <= 2015)
            {
                ReciboOld();

            }
            else  if (Convert.ToInt32(mes) == 1 &&  Convert.ToInt32(ano) == 2016)
            {
                ReciboOld();
            }

            else if (Convert.ToInt32(mes) == 2 && Convert.ToInt32(ano) == 2016)
            {
                ReciboOld();
            }

            else
            {

                if (Convert.ToBoolean(Convert.ToBoolean(Session["chooseReport"]) == true))
                {

                    System.Drawing.Printing.PageSettings pg = new System.Drawing.Printing.PageSettings();
                    pg.Margins.Top = 0;
                    pg.Margins.Bottom = 0;
                    pg.Margins.Left = 0;
                    pg.Margins.Right = 0;
                    System.Drawing.Printing.PaperSize size = new System.Drawing.Printing.PaperSize();
                    size.RawKind = (int)PaperKind.Letter;
                    pg.PaperSize = size;
                    pg.Landscape = true;

                    //TODO:FicarConfigurável
                    bool IsConsumoCondominio = false;

                    //**********************/

                    int validaPersistCalculoCorreto = 0;
                    ListaSabesp oListLeituraSabesp = new ListaSabesp();
                    LeituraSabespBLL oLeituraBussiness = new LeituraSabespBLL();
                    decimal somatudo = 0;
                    ReciboAguaBLL oReciboBLL = new ReciboAguaBLL();
                    Util.RelatorioConfigRecibo oCarregaVariaveisRecibo = new Util.RelatorioConfigRecibo();
                    double totalExcedenteDinamico = 0;
                    double totalConsumoExcedenteMorador = 0;
                    double consumoMorador = 0;
                    double totalconsumoVariavelDiasAzuli30d = 0;
                    double totalExcedenteConsumoAzuli30d = 0;
                    double valorExcedentePagoCondominio = 0;
                    double totalExdenteAreaComumMorador = 0; // 1014 tt area comum + excedente morador
                    double diasAzuli = 0;
                    double consumoDoCondominio = 0;
                    double valorM3Excedente = 0;
                    DSrecibo dsSegundaVia = new DSrecibo();
                    int diasLeituraSabesp = 0;

                    validaPersistCalculoCorreto =  oReciboBLL.validaPersistenciaAgua(Convert.ToInt32(mes),Convert.ToInt32(ano));

                    // Entra neste if, quando for executado apenas a primeira vez
                    // Neste momento ele faz o cálculo, e cadastra no banco para consultas diretas.
                    if (validaPersistCalculoCorreto <= 0)
                    {

                        int mesReferenciaSabesp = Convert.ToInt32(mes);

                        oListLeituraSabesp = oLeituraBussiness.buscaLeitura(mesReferenciaSabesp.ToString(), ano);

                        foreach (var item in oListLeituraSabesp)
                        {
                            diasLeituraSabesp = item.dias;
                        }

                        var oListOrdenadoByRegistro = from listaOrdenada in oReciboBLL.buscaTodosRecibosByYearAndMonth(Convert.ToInt32(ano), Convert.ToInt32(mes))
                                                      orderby listaOrdenada.registro ascending
                                                      select listaOrdenada;

                        if (Convert.ToBoolean(Session["Excel"]) == true)
                        {
                            listaSegundaViaAgua listExcel = oReciboBLL.buscaTodosRecibosByYearAndMonth(Convert.ToInt32(ano), Convert.ToInt32(mes));
                            Export(mes + "/" + ano, listExcel);
                        }

                        else
                        {
                            try
                            {
                                foreach (var item in oListOrdenadoByRegistro)
                                {
                                    if (!IsConsumoCondominio)
                                    {
                                        TimeSpan date = Convert.ToDateTime(item.dataLeituraAtual.Replace("Leitura Atual (", "").Replace("):", "")) - Convert.ToDateTime(item.dataLeituraAnterior.Replace("Leitura anterior (", "").Replace("):", ""));
                                        diasAzuli = date.Days;

                                        valorExcedentePagoCondominio = Convert.ToDouble(item.ConsumoValorPagoCondominio - item.minimoValorPagoCondominio);
                                        consumoDoCondominio = item.consumoM3pagoCondominio;
                                        IsConsumoCondominio = true;
                                    }

                                    consumoMorador = Math.Round((Convert.ToDouble(item.leituraAtualM3) - Convert.ToDouble(item.leituraAnteriorM3)) / diasAzuli * diasLeituraSabesp, MidpointRounding.AwayFromZero);

                                    if (consumoMorador > 10)
                                    {

                                        totalExcedenteDinamico += consumoMorador - 10;

                                    }
                                    totalConsumoExcedenteMorador += consumoMorador;
                                }

                                /* -------- Calcula Leitura Azuli - Dias de leituras Azuli   */

                                totalconsumoVariavelDiasAzuli30d = Math.Round(((totalConsumoExcedenteMorador / diasLeituraSabesp) * diasAzuli) / diasAzuli * diasLeituraSabesp, MidpointRounding.AwayFromZero);
                                totalExcedenteConsumoAzuli30d = Math.Round(totalExcedenteDinamico / diasLeituraSabesp * diasAzuli / diasAzuli * diasLeituraSabesp, MidpointRounding.AwayFromZero);

                                double areaComumConsumo = consumoDoCondominio - totalconsumoVariavelDiasAzuli30d;

                                if (areaComumConsumo < 0 || consumoDoCondominio <= 2400)
                                {
                                    areaComumConsumo = 0;
                                }

                                totalExdenteAreaComumMorador = Math.Round(totalExcedenteConsumoAzuli30d + areaComumConsumo, MidpointRounding.AwayFromZero);

                                valorM3Excedente = Math.Round(valorExcedentePagoCondominio / totalExdenteAreaComumMorador + 0.001, 4);
                                /* ------------------------------------------------------------------------------------- */

                                foreach (var item in oListOrdenadoByRegistro)
                                {
                                    ReciboAgua oReciboModel = new ReciboAgua();
                                    DataRow drSegundaVia = dsSegundaVia.Tables[1].NewRow();
                                    int consumoIndividualMensal = Convert.ToInt32(Math.Round((Convert.ToDouble(item.leituraAtualM3) - Convert.ToDouble(item.leituraAnteriorM3)) / diasAzuli * diasLeituraSabesp, MidpointRounding.AwayFromZero));

                                    oReciboModel.mes = Convert.ToInt32(mes);
                                    oReciboModel.ano = Convert.ToInt32(ano);

                                    int mesConvertido = Convert.ToInt32(mes) - 1;
                                    int anoConvertido = Convert.ToInt32(ano);

                                    drSegundaVia["ID-Condomínio"] = item.idCondominio;
                                    oReciboModel.idCondominio = item.idCondominio;

                                    drSegundaVia["Nome do Condomínio"] = item.nomeCondominio;
                                    oReciboModel.nomeCondominio = item.nomeCondominio;

                                    drSegundaVia["Endereço do Condomínio"] = item.enderecoCondominio;
                                    oReciboModel.enderecoCondominio = item.enderecoCondominio;

                                    drSegundaVia["Bloco"] = item.bloco;
                                    oReciboModel.bloco = item.bloco;

                                    drSegundaVia["Apartamento"] = item.apartamento;
                                    oReciboModel.apartamento = item.apartamento;

                                    drSegundaVia["Registro"] = item.registro;
                                    oReciboModel.registro = item.registro;

                                    drSegundaVia["Fechamento Atual"] = item.fechamentoAtual;
                                    oReciboModel.fechamentoAtual = item.fechamentoAtual;

                                    drSegundaVia["Data leitura Anterior"] = item.dataLeituraAnterior;
                                    oReciboModel.dataLeituraAnterior = item.dataLeituraAnterior;

                                    drSegundaVia["Leitura Anterior M³"] = item.leituraAnteriorM3;
                                    oReciboModel.leituraAnteriorM3 = item.leituraAnteriorM3;

                                    drSegundaVia["Data leitura Atual"] = item.dataLeituraAtual;
                                    oReciboModel.dataLeituraAtual = item.dataLeituraAtual;

                                    drSegundaVia["Leitura Atual M³"] = item.leituraAtualM3;
                                    oReciboModel.leituraAtualM3 = item.leituraAtualM3;

                                    drSegundaVia["Consumo do Mês M³"] = consumoIndividualMensal;
                                    oReciboModel.consumoMesM3 = consumoIndividualMensal.ToString();

                                    //drSegundaVia["Consumo do Mês M³"] = Math.Round(item.excedenteM3diaria * 30, 0);//item.consumoMesM3;// item.consumoMesM3;
                                    drSegundaVia["Data da próxima leitura"] = item.dataProximaLeitura;
                                    oReciboModel.dataProximaLeitura = item.dataProximaLeitura;

                                    drSegundaVia["status"] = item.status;
                                    oReciboModel.status = item.status;

                                    drSegundaVia["Média"] = item.media;
                                    oReciboModel.media = item.media;

                                    int media = 0;

                                    int consumoHistory = 0;
                                    for (int i = 1; i <= 6; i++)
                                    {

                                        if (mesConvertido == 0)
                                        {
                                            anoConvertido = anoConvertido - 1;
                                            mesConvertido = 12;
                                        }

                                        if (i == 1)
                                        {
                                            drSegundaVia["Histórico descricação mês1"] = item.historicoDescricaoMes1;
                                            oReciboModel.historicoDescricaoMes1 = item.historicoDescricaoMes1;

                                            consumoHistory = oReciboBLL.retornaConsumoHistorico(mesConvertido, anoConvertido, Convert.ToInt32(item.bloco), Convert.ToInt32(item.apartamento));//item.historicoMes1;
                                            drSegundaVia["Histórico mês1"] = consumoHistory;
                                            oReciboModel.historicoMes1 = consumoHistory.ToString() + " m³";
                                            media += consumoHistory;
                                            consumoHistory = 0;

                                            //oReciboModel.historicoMes1 = item.historicoMes1;
                                        }
                                        else if (i == 2)
                                        {
                                            drSegundaVia["Histórico descricação mês2"] = item.historicoDescricaoMes2;
                                            oReciboModel.historicoDescricaoMes2 = item.historicoDescricaoMes2;

                                            consumoHistory = oReciboBLL.retornaConsumoHistorico(mesConvertido, anoConvertido, Convert.ToInt32(item.bloco), Convert.ToInt32(item.apartamento));//item.historicoMes1;
                                            drSegundaVia["Histórico mês2"] = consumoHistory;//item.historicoMes2;
                                            oReciboModel.historicoMes2 = consumoHistory.ToString() + " m³";//item.historicoMes2;
                                            media += consumoHistory;
                                            consumoHistory = 0;
                                        }
                                        else if (i == 3)
                                        {

                                            drSegundaVia["Histórico descricação mês3"] = item.historicoDescricaoMes3;
                                            oReciboModel.historicoDescricaoMes3 = item.historicoDescricaoMes3;

                                            consumoHistory = oReciboBLL.retornaConsumoHistorico(mesConvertido, anoConvertido, Convert.ToInt32(item.bloco), Convert.ToInt32(item.apartamento));//item.historicoMes1;
                                            drSegundaVia["Histórico mês3"] = consumoHistory;// item.historicoMes3;
                                            oReciboModel.historicoMes3 = consumoHistory.ToString() + " m³";// item.historicoMes3;
                                            media += consumoHistory;
                                            consumoHistory = 0;
                                        }
                                        else if (i == 4)
                                        {

                                            drSegundaVia["Histórico descricação mês4"] = item.historicoDescricaoMes4;
                                            oReciboModel.historicoDescricaoMes4 = item.historicoDescricaoMes4;

                                             consumoHistory = oReciboBLL.retornaConsumoHistorico(mesConvertido, anoConvertido, Convert.ToInt32(item.bloco), Convert.ToInt32(item.apartamento));//item.historicoMes1;
                                             drSegundaVia["Histórico mês4"] = consumoHistory;//item.historicoMes4;
                                             oReciboModel.historicoMes4 = consumoHistory.ToString() + " m³"; //item.historicoMes4;
                                             media += consumoHistory;
                                            consumoHistory = 0;
                                        }

                                        else if (i == 5)
                                        {

                                            drSegundaVia["Histórico descricação mês5"] = item.historicoDescricaoMes5;
                                            oReciboModel.historicoDescricaoMes5 = item.historicoDescricaoMes5;
                                            consumoHistory = oReciboBLL.retornaConsumoHistorico(mesConvertido, anoConvertido, Convert.ToInt32(item.bloco), Convert.ToInt32(item.apartamento));//item.historicoMes1;
                                            drSegundaVia["Histórico mês5"] = consumoHistory;//item.historicoMes5;
                                            media += consumoHistory;
                                            oReciboModel.historicoMes5 = consumoHistory.ToString() + " m³";//item.historicoMes5;
                                        }
                                        else if (i == 6)
                                        {

                                            drSegundaVia["Histórico descricação mês6"] = item.historicoDescricaoMes6;
                                            oReciboModel.historicoDescricaoMes6 = item.historicoDescricaoMes6;
                                            consumoHistory = oReciboBLL.retornaConsumoHistorico(mesConvertido, anoConvertido, Convert.ToInt32(item.bloco), Convert.ToInt32(item.apartamento));//item.historicoMes1;
                                            drSegundaVia["Histórico mês6"] = consumoHistory;//item.historicoMes6;
                                            oReciboModel.historicoMes6 =consumoHistory.ToString() + " m³";// item.historicoMes6;
                                            media += consumoHistory;
                                            consumoHistory = 0;

                                        }

                                           mesConvertido--;
                                    }

                                    drSegundaVia["Média"] = media / 6;
                                    oReciboModel.media = (media / 6).ToString();

                                    // Virá do banco quando o consumo - se maior que 2400 fara o valor do rateio
                                    //item.consumoM3pagoCondominio = 2600;
                                    // o Valor pago do condominio virá do banco também...
                                    //item.ConsumoValorPagoCondominio = 7900;

                                    //Isto ficará fixo - Será a diferença paga entre o valor pago do consumo minimo, e o consumo e excedente
                                    item.excedenteValorPagoCondominio = Math.Abs(item.ConsumoValorPagoCondominio - item.minimoValorPagoCondominio);

                                    drSegundaVia["Consumo Valor"] = item.ConsumoValorPagoCondominio;
                                    oReciboModel.ConsumoValorPagoCondominio = item.ConsumoValorPagoCondominio;

                                    drSegundaVia["Consumo M³"] = item.consumoM3pagoCondominio;
                                    oReciboModel.consumoM3pagoCondominio = item.consumoM3pagoCondominio;

                                    drSegundaVia["Mínimo M³"] = item.minimoM3PagoCondominio;
                                    oReciboModel.minimoM3PagoCondominio = item.minimoM3PagoCondominio;

                                    drSegundaVia["Mínimo Valor"] = item.minimoValorPagoCondominio;
                                    oReciboModel.minimoValorPagoCondominio = item.minimoValorPagoCondominio;

                                    drSegundaVia["Excedente Valor"] = item.excedenteValorPagoCondominio;
                                    oReciboModel.excedenteValorPagoCondominio = item.excedenteValorPagoCondominio;

                                    drSegundaVia["Tarifa Mínima M³"] = item.tarifaMinimaM3ValorDevido;
                                    oReciboModel.tarifaMinimaM3ValorDevido = item.tarifaMinimaM3ValorDevido;

                                    drSegundaVia["Tarifa Mínima Valor"] = item.tarifaMinimaValorValorDevido;
                                    oReciboModel.tarifaMinimaValorValorDevido = item.tarifaMinimaValorValorDevido;

                                    //var dir = System.Configuration.ConfigurationManager.AppSettings["relatorioGeral"];

                                    //StreamWriter details = new StreamWriter("D:\\DZHosts\\LocalUser\\edmls34\\www.azulicondominio.com\\relatorio"+mes+ano+".txt",true,Encoding.ASCII);
                                    //Se o valor do consumo do M3 for maior que o minimo M3 do condominio será feito o rateio...

                                    if (item.consumoM3pagoCondominio > item.minimoM3PagoCondominio)
                                    {

                                        /* Calcula consumo estimativa leitura de dias da Sabesp, pegando o valor do m3 por excedente, e também calcula a area comum */

                                        item.excedenteM3PagoCondominio = item.consumoM3pagoCondominio - item.minimoM3PagoCondominio;
                                        //totalExcenteAreaComumMorador = (item.consumoM3pagoCondominio - totalConsumoExcedenteMorador) + totalExcedenteDinamico;
                                        //item.excedenteValorRateio = Convert.ToDecimal(Math.Round(Convert.ToDouble(item.excedenteValorPagoCondominio) / totalExcedenteDinamico + 0.0005, 3));
                                        //M³ incluindo area comum..
                                        //item.excedenteValorRateio = Convert.ToDecimal(Math.Round(Convert.ToDouble(item.excedenteValorPagoCondominio) / totalExdenteAreaComumMorador + 0.0005,MidpointRounding.AwayFromZero));

                                        item.excedenteValorRateio = Convert.ToDecimal(valorM3Excedente);
                                        if (consumoIndividualMensal > 10)
                                        {
                                            drSegundaVia["ExcedenteValorDevido"] = consumoIndividualMensal - 10;
                                            oReciboModel.excedenteValorDevido = Convert.ToDecimal(drSegundaVia["ExcedenteValorDevido"]);

                                            item.valorPagarValorDevido = Math.Round(Convert.ToDecimal(consumoIndividualMensal - 10) * item.excedenteValorRateio - Convert.ToDecimal(0.0005), 3);
                                            somatudo += item.valorPagarValorDevido;
                                        }
                                        else
                                        {
                                            drSegundaVia["ExcedenteValorDevido"] = 0L;
                                            oReciboModel.excedenteValorDevido = 0L;
                                            item.valorPagarValorDevido = 0L;
                                        }

                                        drSegundaVia["ExcedentePagoPeloCondominio"] = item.excedenteM3PagoCondominio;
                                        oReciboModel.excedenteM3PagoCondominio = item.excedenteM3PagoCondominio;

                                        drSegundaVia["ExcedenteValorRateio "] = item.excedenteValorRateio;
                                        oReciboModel.excedenteValorRateio = item.excedenteValorRateio;

                                        drSegundaVia["a pagar"] = Math.Truncate(item.valorPagarValorDevido * 100) / 100;  //Math.Round(item.valorPagarValorDevido, 2);
                                        oReciboModel.valorPagarValorDevido = Math.Truncate(item.valorPagarValorDevido * 100) / 100;

                                        //details.WriteLine(item.bloco + " " + item.apartamento + " " + item.valorPagarValorDevido);

                                    }
                                    //Se não mantêm o valor sem rateio..
                                    else
                                    {
                                        if (consumoIndividualMensal > 10)
                                        {
                                            drSegundaVia["ExcedenteValorDevido"] = consumoIndividualMensal - 10;
                                            oReciboModel.excedenteValorDevido = Convert.ToDecimal(drSegundaVia["ExcedenteValorDevido"]);
                                        }
                                        else
                                        {
                                            drSegundaVia["ExcedenteValorDevido"] = 0L;
                                            oReciboModel.excedenteValorDevido = 0L;
                                        }

                                        drSegundaVia["ExcedentePagoPeloCondominio"] = item.excedenteM3PagoCondominio;
                                        oReciboModel.excedenteM3PagoCondominio = item.excedenteM3PagoCondominio;

                                        drSegundaVia["ExcedenteValorRateio "] = item.excedenteValorRateio;
                                        oReciboModel.excedenteValorRateio = item.excedenteValorRateio;

                                        drSegundaVia["a pagar"] = item.valorPagarValorDevido;
                                        oReciboModel.valorPagarValorDevido = item.valorPagarValorDevido;
                                    }

                                    //details.Close();

                                    drSegundaVia["ExcedenteM3Rateio"] = totalExdenteAreaComumMorador;
                                    oReciboModel.excedenteM3Rateio = Convert.ToInt32(totalExdenteAreaComumMorador);

                                    drSegundaVia["Geral"] = item.avisoGeralAviso;
                                    oReciboModel.avisoGeralAviso = item.avisoGeralAviso;

                                    drSegundaVia["Anormal"] = item.AnormalAviso;
                                    oReciboModel.AnormalAviso = item.AnormalAviso;

                                    drSegundaVia["Invididual"] = item.individualAviso;//"-> O ajuste no sistema foi realizado, haverá desconto na conta de junho/2016, para aqueles que excederam à 10 M³ na conta de maio/2016."; //item.individualAviso;
                                    oReciboModel.individualAviso = item.individualAviso;

                                    drSegundaVia["ANORMALIDADE"] = item.anormalidadeAviso;
                                    oReciboModel.anormalidadeAviso = item.anormalidadeAviso;

                                    drSegundaVia["Imagem"] = item.imagem;
                                    oReciboModel.imagem = item.imagem;

                                    drSegundaVia["excedenteM3Diario"] = Convert.ToDouble(consumoIndividualMensal) / Convert.ToDouble(diasLeituraSabesp);//item.excedenteM3diaria;
                                    oReciboModel.excedenteM3diaria = Convert.ToSingle(Convert.ToDouble(consumoIndividualMensal) / Convert.ToDouble(diasLeituraSabesp));

                                    dsSegundaVia.Tables[1].Rows.Add(drSegundaVia);

                                    oReciboBLL.persisteCalculoFinalBanco(oReciboModel);
                                    oReciboModel = null;
                                }

                                Crystal.Relatorios.ReciboMoradorByApBloco rbSegundaVia = new Crystal.Relatorios.ReciboMoradorByApBloco();

                                rbSegundaVia.SetDataSource(dsSegundaVia);

                                rbSegundaVia.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "Recibo");
                            }

                            catch (Exception ex)
                            {

                                throw ex;
                            }

                        }

                    }
                    else
                    {

                        var oListOrdenadoByRegistroJaCalculado = from listaOrdenada in oReciboBLL.buscaRecibosCalculadosByMesAno(Convert.ToInt32(ano), Convert.ToInt32(mes))
                                                      orderby listaOrdenada.registro ascending
                                                      select listaOrdenada;

                        foreach (var item in oListOrdenadoByRegistroJaCalculado)
                        {

                            DataRow drSegundaVia = dsSegundaVia.Tables[1].NewRow();
                            drSegundaVia["ID-Condomínio"] = item.idCondominio;
                            drSegundaVia["Nome do Condomínio"] = item.nomeCondominio;
                            drSegundaVia["Endereço do Condomínio"] = item.enderecoCondominio;
                            drSegundaVia["Bloco"] = item.bloco;
                            drSegundaVia["Apartamento"] = item.apartamento;
                            drSegundaVia["Registro"] = item.registro;
                            drSegundaVia["Fechamento Atual"] = item.fechamentoAtual;
                            drSegundaVia["Data leitura Anterior"] = item.dataLeituraAnterior;
                            drSegundaVia["Leitura Anterior M³"] = item.leituraAnteriorM3;
                            drSegundaVia["Data leitura Atual"] = item.dataLeituraAtual;
                            drSegundaVia["Leitura Atual M³"] = item.leituraAtualM3;
                            drSegundaVia["Consumo do Mês M³"] = item.consumoMesM3;
                            drSegundaVia["Data da próxima leitura"] = item.dataProximaLeitura;
                            drSegundaVia["Média"] = item.media;
                            drSegundaVia["Histórico descricação mês1"] = item.historicoDescricaoMes1;
                            drSegundaVia["Histórico mês1"] = item.historicoMes1;
                            drSegundaVia["Histórico descricação mês2"] = item.historicoDescricaoMes2;
                            drSegundaVia["Histórico mês2"] = item.historicoMes2;
                            drSegundaVia["Histórico descricação mês3"] = item.historicoDescricaoMes3;
                            drSegundaVia["Histórico mês3"] = item.historicoMes3;
                            drSegundaVia["Histórico descricação mês4"] = item.historicoDescricaoMes4;
                            drSegundaVia["Histórico mês4"] = item.historicoMes4;
                            drSegundaVia["Histórico descricação mês5"] = item.historicoDescricaoMes5;
                            drSegundaVia["Histórico mês5"] = item.historicoMes5;
                            drSegundaVia["Histórico descricação mês6"] = item.historicoDescricaoMes6;
                            drSegundaVia["Histórico mês6"] = item.historicoMes6;
                            drSegundaVia["Consumo Valor"] = item.ConsumoValorPagoCondominio;
                            drSegundaVia["Consumo M³"] = item.consumoM3pagoCondominio;
                            drSegundaVia["Mínimo M³"] = item.minimoM3PagoCondominio;
                            drSegundaVia["Mínimo Valor"] = item.minimoValorPagoCondominio;
                            drSegundaVia["Excedente Valor"] = item.excedenteValorPagoCondominio;
                            drSegundaVia["Tarifa Mínima M³"] = item.tarifaMinimaM3ValorDevido;
                            drSegundaVia["Tarifa Mínima Valor"] = item.tarifaMinimaValorValorDevido;
                            drSegundaVia["ExcedenteValorDevido"] =  item.excedenteValorDevido;
                            drSegundaVia["ExcedentePagoPeloCondominio"] = item.excedenteM3PagoCondominio;
                            drSegundaVia["ExcedenteValorRateio "] = item.excedenteValorRateio;
                            drSegundaVia["a pagar"] = item.valorPagarValorDevido;
                            drSegundaVia["ExcedentePagoPeloCondominio"] = item.excedenteM3PagoCondominio;
                            drSegundaVia["ExcedenteM3Rateio"] = item.excedenteM3Rateio;
                            drSegundaVia["Geral"] = item.avisoGeralAviso;
                            drSegundaVia["Anormal"] = item.AnormalAviso;
                            drSegundaVia["Invididual"] = item.individualAviso;
                            drSegundaVia["ANORMALIDADE"] = item.anormalidadeAviso;
                            drSegundaVia["Imagem"] = item.imagem;
                            drSegundaVia["excedenteM3Diario"] = item.excedenteM3diaria;
                            drSegundaVia["status"] = item.status;

                            dsSegundaVia.Tables[1].Rows.Add(drSegundaVia);

                        }

                        Crystal.Relatorios.ReciboMoradorByApBloco rbSegundaVia = new Crystal.Relatorios.ReciboMoradorByApBloco();

                        rbSegundaVia.SetDataSource(dsSegundaVia);

                        rbSegundaVia.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "Recibo-"+ano+mes);

                    }

                }

                else
                {
                    if (Session["reciboConfirmadoNoAto"] != null && (int)Session["reciboConfirmadoNoAto"] == 1)
                    {

                        oAp.apartamento = Convert.ToInt32(Session["MoradorSemInternetAP"]);
                        oAp.bloco = Convert.ToInt32(Session["MoradorSemInternetBloco"]);
                        oAgendaModel.dataAgendamento = Convert.ToDateTime(Session["dataReservaAdministrador"]);
                        oAgendaModel.ap = oAp;

                    }
                    else
                    {

                        oAp.apartamento = Convert.ToInt32(Session["aptoSession"]);
                        oAp.bloco = Convert.ToInt32(Session["blocoSession"]);
                        oAgendaModel.dataAgendamento = Convert.ToDateTime(Session["dataReservaOnline"]);
                        oAgendaModel.ap = oAp;
                    }

                    try
                    {
                        DSrecibo dsRecibo = new DSrecibo();
                        DataRow drRecibo = dsRecibo.Tables[0].NewRow();

                        foreach (var item in oAgendaBLL.geraReciboPago(oAgendaModel))
                        {
                            drRecibo["DIA"] = DateTime.Now.Day;
                            drRecibo["MES"] = System.Globalization.DateTimeFormatInfo.CurrentInfo.GetMonthName(DateTime.Now.Month);
                            drRecibo["ANO"] = DateTime.Now.Year;
                            if (item.salaoChurrasco == true && item.salaoFesta == true)
                            {
                                foreach (var Desconto in oConfigValor.oListaValorReserva())
                                {
                                    if (Desconto.id_valor == 3)
                                    {
                                        drRecibo["VALOR_POR_EXTENSO"] = new Util.NumeroPorExtenso(Convert.ToDecimal(item.valorReserva - Desconto.valor));
                                        drRecibo["VALOR"] = item.valorReserva - Desconto.valor + ",00";

                                    }

                                }

                            }
                            else
                            {
                                drRecibo["VALOR_POR_EXTENSO"] = new Util.NumeroPorExtenso(Convert.ToDecimal(item.valorReserva));
                                drRecibo["VALOR"] = item.valorReserva + ",00";
                            }

                            drRecibo["PROPRIETARIO"] = "0" + item.ap.bloco + " - " + item.ap.apartamento + " - " + item.ap.oProprietario.proprietario1;
                            drRecibo["Descricao"] = item.observacao;

                        }

                        //string caminhoRelatorio = ConfigurationManager.AppSettings["ReportsPath"] + ConfigurationManager.AppSettings["reciboReserva"];

                        //rpt.Load(caminhoRelatorio);

                        // rpt.SetDataSource(drRecibo);

                        dsRecibo.Tables[0].Rows.Add(drRecibo);

                        Crystal.Relatorios.ReciboReserva rbReserva = new Crystal.Relatorios.ReciboReserva();

                        rbReserva.SetDataSource(dsRecibo);

                        CrystalReportViewer1.ReportSource = rbReserva;

                        rbReserva.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "Recibo");

                    }

                    catch (Exception ex)
                    {

                        throw ex;
                    }

                }
            }
        }