public JsonResult LlenaGridDocumento(DateTime periodo, int start, int limit)
        {
            object respuesta = null;
            var    listDev   = new List <object>();
            var    total     = 0;

            try {
                var lista = db.sp_DevengoIngresoLDIGET(1, periodo).ToList();
                lista.ForEach(devengo =>
                {
                    listDev.Add(new
                    {
                        CuentaPiv         = $"{devengo.Cuenta}-{devengo.Servicio}",
                        Cuenta            = devengo.Cuenta,
                        Servicio          = devengo.Servicio,
                        Deudor            = devengo.Deudor,
                        SoGL              = devengo.SoGL,
                        Grupo             = devengo.Grupo,
                        NombreCorto       = devengo.NombreCorto,
                        Moneda            = devengo.Moneda,
                        FechaConsumo      = devengo.FechaConsumo,
                        FechaSolicitud    = devengo.FechaSolicitud,
                        TipoCambio        = devengo.TipoCambio,
                        TipoCambioFactura = devengo.TipoCambioFactura,
                        CancelProvision   = devengo.CancelProvision,
                        CancelProvNCR     = devengo.CancelProvNCR,
                        Facturacion       = devengo.Facturacion,
                        NCREmitidas       = devengo.NCREmitidas,
                        Provision         = devengo.Provision,
                        ProvisionNCR      = devengo.ProvisionNCR,
                        Exceso            = devengo.Exceso,
                        TotalDevengo      = devengo.TotalDevengo
                    });
                });
                total     = listDev.Count();
                listDev   = listDev.Skip(start).Take(limit).ToList();
                respuesta = new { results = listDev, start, limit, total, success = true };
            } catch (Exception ex) {
                respuesta = new { results = ex, success = false };
            }
            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }
        public static void HojaDevengoLocal(ref ExcelWorksheet worksheet, DateTime Periodo, int tabla, ICPruebaEntities db)
        {
            decimal[] listaSubtotales = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            var       lista           = new List <sp_DevengoIngresoLDIGET_Result>();
            var       dtDocumento     = new DataTable();

            lista = db.sp_DevengoIngresoLDIGET(tabla, Periodo).ToList();
            dtDocumento.Columns.Add("Cuenta");
            dtDocumento.Columns.Add("Servicio");
            dtDocumento.Columns.Add("Deudor");
            dtDocumento.Columns.Add("SoGL");
            dtDocumento.Columns.Add("Grupo");
            dtDocumento.Columns.Add("NombreCorto");
            dtDocumento.Columns.Add("Moneda");
            dtDocumento.Columns.Add("FechaConsumo");
            dtDocumento.Columns.Add("FechaSolicitud");
            dtDocumento.Columns.Add("TipoCambio");
            dtDocumento.Columns.Add("TipoCambioFactura");
            dtDocumento.Columns.Add("CancelProvision");
            dtDocumento.Columns.Add("CancelProvNCR");
            dtDocumento.Columns.Add("Facturacion");
            dtDocumento.Columns.Add("NCREmitidas");
            dtDocumento.Columns.Add("Provision");
            dtDocumento.Columns.Add("ProvisionNCR");
            dtDocumento.Columns.Add("Exceso");
            dtDocumento.Columns.Add("TotalDevengo");
            dtDocumento.Columns.Add("Fluctuacion");
            dtDocumento.Columns.Add("TotalDevengoFluctuacion");

            foreach (var elemento in lista)
            {
                DataRow rowdt = default(DataRow);
                rowdt                            = dtDocumento.NewRow();
                rowdt["Cuenta"]                  = elemento.Cuenta;
                rowdt["Servicio"]                = elemento.Servicio;
                rowdt["Deudor"]                  = elemento.Deudor;
                rowdt["SoGL"]                    = elemento.SoGL;
                rowdt["Grupo"]                   = elemento.Grupo;
                rowdt["NombreCorto"]             = elemento.NombreCorto;
                rowdt["Moneda"]                  = elemento.Moneda;
                rowdt["FechaConsumo"]            = elemento.FechaConsumo;
                rowdt["FechaSolicitud"]          = elemento.FechaSolicitud;
                rowdt["TipoCambio"]              = elemento.TipoCambio;
                rowdt["TipoCambioFactura"]       = elemento.TipoCambioFactura;
                rowdt["CancelProvision"]         = elemento.CancelProvision;
                rowdt["CancelProvNCR"]           = elemento.CancelProvNCR;
                rowdt["Facturacion"]             = elemento.Facturacion;
                rowdt["NCREmitidas"]             = elemento.NCREmitidas;
                rowdt["Provision"]               = elemento.Provision;
                rowdt["ProvisionNCR"]            = elemento.ProvisionNCR;
                rowdt["Exceso"]                  = elemento.Exceso;
                rowdt["TotalDevengo"]            = elemento.TotalDevengo;
                rowdt["Fluctuacion"]             = elemento.Fluctuacion;
                rowdt["TotalDevengoFluctuacion"] = elemento.TotalDevengoFluctuacion;
                dtDocumento.Rows.Add(rowdt);
            }

            worksheet.Cells[("A3")].Value = DateTime.Now.ToString("dd-MM-yyyy");

            int    lFila = 7;
            long   lCuentaPrimaria = 0, lCuentaSecundaria = 0;
            string lServicioPrincipal = string.Empty, lServicioSecundario = string.Empty;

            for (int lIteracion = 0; lIteracion < dtDocumento.Rows.Count;)
            {
                if (lIteracion == 0 || lIteracion <= dtDocumento.Rows.Count - 2)
                {
                    lCuentaPrimaria = Convert.ToInt64(dtDocumento.Rows[lIteracion]["Cuenta"]);

                    lServicioPrincipal = dtDocumento.Rows[lIteracion]["Servicio"].ToString();

                    if (dtDocumento.Rows.Count > 1)
                    {
                        lCuentaSecundaria   = Convert.ToInt64(dtDocumento.Rows[lIteracion + 1]["Cuenta"]);
                        lServicioSecundario = dtDocumento.Rows[lIteracion + 1]["Servicio"].ToString();
                    }

                    if (lIteracion == 0)
                    {
                        ColocarDatosCuenta(ref worksheet, dtDocumento.Rows[lIteracion], lFila, false);
                        AcumularSubtotales(dtDocumento.Rows[lIteracion], listaSubtotales, false);

                        if (lServicioPrincipal != lServicioSecundario)
                        {
                            ColocarEstilos(worksheet, lFila, lCuentaPrimaria, false);
                            ColocarSubtotales(ref worksheet, lFila, lCuentaPrimaria, listaSubtotales, false);
                            lFila++;
                        }

                        lCuentaPrimaria    = lCuentaSecundaria;
                        lServicioPrincipal = lServicioSecundario;

                        lIteracion++;
                        lFila++;
                    }
                    else
                    {
                        ColocarDatosCuenta(ref worksheet, dtDocumento.Rows[lIteracion], lFila, false);
                        AcumularSubtotales(dtDocumento.Rows[lIteracion], listaSubtotales, false);

                        if (lCuentaPrimaria != lCuentaSecundaria)
                        {
                            ColocarEstilos(worksheet, lFila, lCuentaPrimaria, false);
                            ColocarSubtotales(ref worksheet, lFila, lCuentaPrimaria, listaSubtotales, false);
                            lFila++;
                        }
                        else if (lServicioPrincipal != lServicioSecundario)
                        {
                            ColocarEstilos(worksheet, lFila, lCuentaPrimaria, false);
                            ColocarSubtotales(ref worksheet, lFila, lCuentaPrimaria, listaSubtotales, false);
                            lFila++;
                        }

                        lCuentaPrimaria    = lCuentaSecundaria;
                        lServicioPrincipal = lServicioSecundario;

                        lIteracion++;
                        lFila++;
                    }
                }
                else
                {
                    if (lCuentaPrimaria != lCuentaSecundaria)
                    {
                        ColocarSubtotales(ref worksheet, lFila, lCuentaPrimaria, listaSubtotales, false);
                        ColocarEstilos(worksheet, lFila, lCuentaPrimaria, false);
                        lFila++;
                    }
                    else if (lServicioPrincipal != lServicioSecundario)
                    {
                        ColocarSubtotales(ref worksheet, lFila, lCuentaPrimaria, listaSubtotales, false);
                        ColocarEstilos(worksheet, lFila, lCuentaPrimaria, false);
                        lFila++;
                    }

                    ColocarDatosCuenta(ref worksheet, dtDocumento.Rows[lIteracion], lFila, false);
                    AcumularSubtotales(dtDocumento.Rows[lIteracion], listaSubtotales, false);

                    ColocarEstilos(worksheet, lFila, lCuentaPrimaria, false);
                    ColocarSubtotales(ref worksheet, lFila, lCuentaPrimaria, listaSubtotales, false);

                    lIteracion++;
                }
            }
            worksheet.Cells["A7:U" + lFila].Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;
        }