private void CargarDatosPorTipo() { Cargando.Mostrar(); var oFuenteT = new Font(FontFamily.GenericSansSerif, 9, FontStyle.Bold); // Se limpian los datos this.dgvDatos.Rows.Clear(); foreach (var oSerie in this.chrPorSemana.Series) { oSerie.Points.Clear(); } // Se borran las columnas de semanas for (int iCol = (this.dgvDatos.Columns.Count - 1); iCol >= this.iColumnasFijas; iCol--) { this.dgvDatos.Columns.RemoveAt(iCol); } // Se llenan las columnas string sPrefijo = ""; switch (this.cmbTipo.Text) { case "Mensual": sPrefijo = "Mes"; for (int iMes = 1; iMes <= 12; iMes++) { this.dgvDatos.Columns.Add((sPrefijo + iMes.ToString()), DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(iMes).PrimeraMayus()); } break; case "Trimestral": sPrefijo = "Tri"; for (int iMes = 1; iMes <= 12; iMes += 3) { this.dgvDatos.Columns.Add((sPrefijo + iMes.ToString()), DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(iMes).PrimeraMayus()); } break; case "Semestral": sPrefijo = "Sem"; for (int iMes = 1; iMes <= 12; iMes += 6) { this.dgvDatos.Columns.Add((sPrefijo + iMes.ToString()), DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(iMes).PrimeraMayus()); } break; } this.FormatoColumnas(); // Se obtienen los datos para los ingresos int iAnio = Util.Entero(this.cmbAnio.Text); int iSucursalID = Util.Entero(this.cmbSucursal.SelectedValue); DateTime dDesde = new DateTime(iAnio, 1, 1); DateTime dHasta = new DateTime(iAnio, 12, 31); DateTime dHastaMas1 = dHasta.AddDays(1); var oParams = new Dictionary <string, object>(); oParams.Add("SucursalID", (iSucursalID == 0 ? null : (int?)iSucursalID)); oParams.Add("Pagadas", true); oParams.Add("Cobradas", false); oParams.Add("Solo9500", false); oParams.Add("OmitirDomingo", false); oParams.Add("Desde", dDesde); oParams.Add("Hasta", dHasta); var oDatos = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams); oDatos = oDatos.Where(c => c.Fecha >= dDesde).ToList(); List <ConsultaEdr> oConsulta = null; switch (this.cmbTipo.Text) { case "Mensual": oConsulta = oDatos.GroupBy(c => new { Mes = c.Fecha.Month, c.Sucursal }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Sucursal , PrecioSinIva = c.Sum(s => s.PrecioSinIvaActual).Valor(), Costo = c.Sum(s => s.CostoDescActual).Valor() }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; case "Trimestral": oConsulta = oDatos.GroupBy(c => new { Mes = UtilTheos.ObtenerTrimestre(c.Fecha), Sucursal = c.Sucursal }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Sucursal , PrecioSinIva = c.Sum(s => s.PrecioSinIvaActual).Valor(), Costo = c.Sum(s => s.CostoDescActual).Valor() }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; case "Semestral": oConsulta = oDatos.GroupBy(c => new { Mes = UtilTheos.ObtenerSemestre(c.Fecha), Sucursal = c.Sucursal }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Sucursal , PrecioSinIva = c.Sum(s => s.PrecioSinIvaActual).Valor(), Costo = c.Sum(s => s.CostoDescActual).Valor() }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; } // Se agrega la fila de ingresos int iFilaIngresos = this.dgvDatos.Rows.Add("+ Ingresos", oConsulta.Sum(c => c.PrecioSinIva), oConsulta.Average(c => c.PrecioSinIva)); this.dgvDatos.Rows[iFilaIngresos].DefaultCellStyle.Font = oFuenteT; // Se llenan los ingresos string sSucursal = ""; int iFila = 0; foreach (var oReg in oConsulta) { if (sSucursal != oReg.Sucursal) { sSucursal = oReg.Sucursal; iFila = this.dgvDatos.Rows.Add(sSucursal, oConsulta.Where(c => c.Sucursal == sSucursal).Sum(c => c.PrecioSinIva) , oConsulta.Where(c => c.Sucursal == sSucursal).Average(c => c.PrecioSinIva)); } string sColumna = (sPrefijo + oReg.Mes.ToString()); this.dgvDatos[sColumna, iFila].Value = (Util.Decimal(this.dgvDatos[sColumna, iFila].Value) + oReg.PrecioSinIva); this.dgvDatos[sColumna, iFilaIngresos].Value = (Util.Decimal(this.dgvDatos[sColumna, iFilaIngresos].Value) + oReg.PrecioSinIva); } // Se agrega la fila de Costos int iFilaCostos = this.dgvDatos.Rows.Add("- Costos", oConsulta.Sum(c => c.Costo), oConsulta.Average(c => c.Costo)); this.dgvDatos.Rows[iFilaCostos].DefaultCellStyle.Font = oFuenteT; // Se llenan los costos sSucursal = ""; foreach (var oReg in oConsulta) { if (sSucursal != oReg.Sucursal) { sSucursal = oReg.Sucursal; iFila = this.dgvDatos.Rows.Add(sSucursal, oConsulta.Where(c => c.Sucursal == sSucursal).Sum(c => c.Costo) , oConsulta.Where(c => c.Sucursal == sSucursal).Average(c => c.Costo)); } string sColumna = (sPrefijo + oReg.Mes.ToString()); this.dgvDatos[sColumna, iFila].Value = (Util.Decimal(this.dgvDatos[sColumna, iFila].Value) + oReg.Costo); this.dgvDatos[sColumna, iFilaCostos].Value = (Util.Decimal(this.dgvDatos[sColumna, iFilaCostos].Value) + oReg.Costo); } // Se agrega la fila de margen bruto int iFilaMargen = this.dgvDatos.Rows.Add("= Margen Bruto"); this.dgvDatos.Rows[iFilaMargen].DefaultCellStyle.Font = oFuenteT; foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } this.dgvDatos[oCol.Index, iFilaMargen].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaCostos].Value) ); } // Se obtienen los datos para los gastos oParams.Clear(); oParams.Add("Desde", dDesde); oParams.Add("Hasta", dHasta); var oGastos = Datos.GetListOf <ContaEgresosView>(c => c.Fecha >= dDesde && c.Fecha < dHastaMas1); oConsulta = null; switch (this.cmbTipo.Text) { case "Mensual": oConsulta = oGastos.GroupBy(c => new { Mes = c.Fecha.Month, c.Sucursal }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Sucursal, Importe = c.Sum(s => s.ImporteDev).Valor() }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; case "Trimestral": oConsulta = oGastos.GroupBy(c => new { Mes = UtilTheos.ObtenerTrimestre(c.Fecha), c.Sucursal }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Sucursal, Importe = c.Sum(s => s.ImporteDev).Valor() }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; case "Semestral": oConsulta = oGastos.GroupBy(c => new { Mes = UtilTheos.ObtenerSemestre(c.Fecha), c.Sucursal }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Sucursal, Importe = c.Sum(s => s.ImporteDev).Valor() }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; } // Se agrega la fila de los Gastos int iFilaGastos = this.dgvDatos.Rows.Add("- Gastos", oConsulta.Sum(c => c.Importe), oConsulta.Average(c => c.Importe)); this.dgvDatos.Rows[iFilaGastos].DefaultCellStyle.Font = oFuenteT; // Se llenan los gastos sSucursal = ""; foreach (var oReg in oConsulta) { if (sSucursal != oReg.Sucursal) { sSucursal = oReg.Sucursal; iFila = this.dgvDatos.Rows.Add(sSucursal, oConsulta.Where(c => c.Sucursal == sSucursal).Sum(c => c.Importe) , oConsulta.Where(c => c.Sucursal == sSucursal).Average(c => c.Importe)); } string sColumna = (sPrefijo + oReg.Mes.ToString()); this.dgvDatos[sColumna, iFila].Value = (Util.Decimal(this.dgvDatos[sColumna, iFila].Value) + oReg.Importe); this.dgvDatos[sColumna, iFilaGastos].Value = (Util.Decimal(this.dgvDatos[sColumna, iFilaGastos].Value) + oReg.Importe); } // Se agrega la fila de utilidad, con cada una de las sucursales int iFilaUtilidad = this.dgvDatos.Rows.Add("= Utilidad"); this.dgvDatos.Rows[iFilaUtilidad].DefaultCellStyle.Font = oFuenteT; // Sucursales var oSucursales = Datos.GetListOf <Sucursal>(c => c.Estatus).OrderBy(c => c.NombreSucursal).ToList(); foreach (var oReg in oSucursales) { this.dgvDatos.Rows.Add(oReg.NombreSucursal); } // Se llenan los datos foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } // Utilidad total this.dgvDatos[oCol.Index, iFilaUtilidad].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaMargen].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaGastos].Value) ); // Sucursales for (int i = 1; i <= oSucursales.Count; i++) { this.dgvDatos[oCol.Index, iFilaUtilidad + i].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos + i].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaCostos + i].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaGastos + i].Value) ); } } // Se obtienen los datos de gastos especiales var oGastosEsp = Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesde && c.Fecha < dHastaMas1); oConsulta = null; switch (this.cmbTipo.Text) { case "Mensual": oConsulta = oGastosEsp.GroupBy(c => new { Mes = c.Fecha.Month, c.Duenio }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Duenio, Importe = c.Sum(s => s.ImporteDev) }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; case "Trimestral": oConsulta = oGastosEsp.GroupBy(c => new { Mes = UtilTheos.ObtenerTrimestre(c.Fecha), c.Duenio }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Duenio, Importe = c.Sum(s => s.ImporteDev) }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; case "Semestral": oConsulta = oGastosEsp.GroupBy(c => new { Mes = UtilTheos.ObtenerSemestre(c.Fecha), c.Duenio }) .Select(c => new ConsultaEdr() { Mes = c.Key.Mes, Sucursal = c.Key.Duenio, Importe = c.Sum(s => s.ImporteDev) }) .OrderBy(c => c.Sucursal).ThenBy(c => c.Mes).ToList(); break; } // Se agrega la fila de Especiales bool bHay = (oConsulta.Count() > 0); int iFilaEsp = this.dgvDatos.Rows.Add("- Especiales", (bHay ? oConsulta.Sum(c => c.Importe) : 0), (bHay ? oConsulta.Average(c => c.Importe) : 0)); this.dgvDatos.Rows[iFilaEsp].DefaultCellStyle.Font = oFuenteT; // Se llenan los gastos string sDuenio = ""; foreach (var oReg in oConsulta) { if (sDuenio != oReg.Sucursal) { sDuenio = oReg.Sucursal; iFila = this.dgvDatos.Rows.Add(sDuenio, oConsulta.Where(c => c.Sucursal == sDuenio).Sum(c => c.Importe) , oConsulta.Where(c => c.Sucursal == sDuenio).Average(c => c.Importe)); } string sColumna = (sPrefijo + oReg.Mes.ToString()); this.dgvDatos[sColumna, iFila].Value = (Util.Decimal(this.dgvDatos[sColumna, iFila].Value) + oReg.Importe); this.dgvDatos[sColumna, iFilaEsp].Value = (Util.Decimal(this.dgvDatos[sColumna, iFilaEsp].Value) + oReg.Importe); } // Se agrega la fila de utilidad neta int iFilaDividendos = this.dgvDatos.Rows.Add("= Dividendos"); this.dgvDatos.Rows[iFilaDividendos].DefaultCellStyle.Font = oFuenteT; foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } this.dgvDatos[oCol.Index, iFilaDividendos].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaMargen].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaGastos].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaEsp].Value) ); } // Se obtienen los datos para lo de reinversión var oReinversiones = Datos.GetListOf <ContaPolizasDetalleAvanzadoView>(c => c.FechaPoliza >= dDesde && c.FechaPoliza < dHastaMas1 && ( c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo || (c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo && c.ContaCuentaAuxiliarID != Cat.ContaCuentasAuxiliares.TarjetaDeCredito) || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.AcreedoresDiversos || (c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo && c.ContaCuentaDeMayorID != Cat.ContaCuentasDeMayor.Edificios) )); var oDeudas = oReinversiones.Where(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.AcreedoresDiversos); var oInversiones = oReinversiones.Where(c => c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo); List <ConsultaEdr> oDeudasGr = null; List <ConsultaEdr> oInversionesGr = null; switch (this.cmbTipo.Text) { case "Mensual": oDeudasGr = oDeudas.GroupBy(c => c.FechaPoliza.Valor().Month).Select(c => new ConsultaEdr() { Mes = c.Key, Importe = c.Sum(s => s.Cargo) }).ToList(); oInversionesGr = oInversiones.GroupBy(c => c.FechaPoliza.Valor().Month).Select(c => new ConsultaEdr() { Mes = c.Key, Importe = c.Sum(s => s.Cargo) }).ToList(); break; case "Trimestral": oDeudasGr = oDeudas.GroupBy(c => UtilTheos.ObtenerTrimestre(c.FechaPoliza.Valor())) .Select(c => new ConsultaEdr() { Mes = c.Key, Importe = c.Sum(s => s.Cargo) }).ToList(); oInversionesGr = oInversiones.GroupBy(c => UtilTheos.ObtenerTrimestre(c.FechaPoliza.Valor())) .Select(c => new ConsultaEdr() { Mes = c.Key, Importe = c.Sum(s => s.Cargo) }).ToList(); break; case "Semestral": oDeudasGr = oDeudas.GroupBy(c => UtilTheos.ObtenerSemestre(c.FechaPoliza.Valor())) .Select(c => new ConsultaEdr() { Mes = c.Key, Importe = c.Sum(s => s.Cargo) }).ToList(); oInversionesGr = oInversiones.GroupBy(c => UtilTheos.ObtenerSemestre(c.FechaPoliza.Valor())) .Select(c => new ConsultaEdr() { Mes = c.Key, Importe = c.Sum(s => s.Cargo) }).ToList(); break; } // Se agrega la fila de Reinversión decimal mDeudas = (oDeudasGr.Count() > 0 ? oDeudasGr.Sum(c => c.Importe) : 0); decimal mDeudasProm = (oDeudasGr.Count() > 0 ? oDeudasGr.Average(c => c.Importe) : 0); decimal mInversiones = (oInversionesGr.Count() > 0 ? oInversionesGr.Sum(c => c.Importe) : 0); decimal mInversionesProm = (oInversionesGr.Count() > 0 ? oInversionesGr.Average(c => c.Importe) : 0); int iFilaReinversion = this.dgvDatos.Rows.Add("- Reinversión", (mDeudas + mInversiones), ((mDeudasProm + mInversionesProm) / 2)); this.dgvDatos.Rows[iFilaReinversion].DefaultCellStyle.Font = oFuenteT; // Se llenan los datos de reinversión // Deudas iFila = this.dgvDatos.Rows.Add("Deudas", mDeudas, mDeudasProm); foreach (var oReg in oDeudasGr) { string sColumna = (sPrefijo + oReg.Mes.ToString()); this.dgvDatos[sColumna, iFila].Value = (Util.Decimal(this.dgvDatos[sColumna, iFila].Value) + oReg.Importe); this.dgvDatos[sColumna, iFilaReinversion].Value = (Util.Decimal(this.dgvDatos[sColumna, iFilaReinversion].Value) + oReg.Importe); } // Inversión iFila = this.dgvDatos.Rows.Add("Inversiones", mInversiones, mInversionesProm); foreach (var oReg in oInversionesGr) { string sColumna = (sPrefijo + oReg.Mes.ToString()); this.dgvDatos[sColumna, iFila].Value = (Util.Decimal(this.dgvDatos[sColumna, iFila].Value) + oReg.Importe); this.dgvDatos[sColumna, iFilaReinversion].Value = (Util.Decimal(this.dgvDatos[sColumna, iFilaReinversion].Value) + oReg.Importe); } // Se agrega el saldo final int iFilaSaldo = this.dgvDatos.Rows.Add("= Saldo final"); this.dgvDatos.Rows[iFilaSaldo].DefaultCellStyle.Font = oFuenteT; foreach (DataGridViewColumn oCol in this.dgvDatos.Columns) { if (oCol.Index == 0) { continue; } this.dgvDatos[oCol.Index, iFilaSaldo].Value = ( Util.Decimal(this.dgvDatos[oCol.Index, iFilaDividendos].Value) - Util.Decimal(this.dgvDatos[oCol.Index, iFilaReinversion].Value) ); } // Se llena la gráfica, en base al grid ya cargado for (int iCol = this.iColumnasFijas; iCol < this.dgvDatos.Columns.Count; iCol++) { this.chrPorSemana.Series["Ingresos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaIngresos].Value)); this.chrPorSemana.Series["Costos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaCostos].Value)); this.chrPorSemana.Series["Margen"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaMargen].Value)); this.chrPorSemana.Series["Gastos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaGastos].Value)); this.chrPorSemana.Series["Utilidad"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaUtilidad].Value)); this.chrPorSemana.Series["Especiales"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEsp].Value)); this.chrPorSemana.Series["Dividendos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaDividendos].Value)); } Cargando.Cerrar(); }