Esempio n. 1
0
        private void LlenarVendedores(int iSemana)
        {
            this.dgvVendedor.Rows.Clear();
            if (iSemana <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametros();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);

            // Se llena el grid de Vendedor
            var oConsulta = oDatos.Where(c => UtilTheos.SemanaSabAVie(c.Fecha) == iSemana).GroupBy(g => new { g.VendedorID, g.Vendedor }).Select(
                c => new { c.Key.VendedorID, c.Key.Vendedor, Actual = c.Sum(s => s.Actual), Anterior = c.Sum(s => s.Anterior) }).OrderByDescending(c => c.Actual);
            decimal mTotal = (oConsulta.Count() > 0 ? oConsulta.Sum(c => c.Actual).Valor() : 0);

            foreach (var oReg in oConsulta)
            {
                this.dgvVendedor.Rows.Add(oReg.VendedorID, oReg.Vendedor, oReg.Actual, oReg.Anterior
                                          , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotal) * 100));
            }

            // Se llenan los totales
            decimal mTotalAnt = (oConsulta.Count() > 0 ? oConsulta.Sum(c => c.Anterior).Valor() : 0);

            this.dgvVendedorT["VendedorT_Actual", 0].Value    = mTotal;
            this.dgvVendedorT["VendedorT_Anterior", 0].Value  = mTotalAnt;
            this.dgvVendedorT["VendedorT_Resultado", 0].Value = Util.DividirONull(mTotal, mTotalAnt);
        }
Esempio n. 2
0
        private void MostrarDetalle(int iCotizacion9500ID)
        {
            this.o9500.ctlComDetalle.LimpiarDetalle();
            ProductoVenta oProductoV;
            var           Detalle = Datos.GetListOf <Cotizaciones9500DetalleView>(q => q.Cotizacion9500ID == iCotizacion9500ID);

            foreach (var Producto in Detalle)
            {
                oProductoV = new ProductoVenta()
                {
                    ParteID        = Producto.ParteID,
                    NumeroDeParte  = Producto.NumeroParte,
                    NombreDeParte  = Producto.NombreParte,
                    Cantidad       = Producto.Cantidad,
                    PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(Producto.PrecioAlCliente, 3),
                    Iva            = UtilTheos.ObtenerIvaDePrecio(Producto.PrecioAlCliente, 3)
                                     // PrecioConIva = Producto.PrecioAlCliente
                };
                this.o9500.ctlComDetalle.AgregarProducto(oProductoV);
            }
            this.o9500.ctlComDetalle.VerExistenciaLista();

            // Se actualiza el Cliente
            this.oCotizacion9500 = Datos.GetEntity <Cotizacion9500>(q => q.Cotizacion9500ID == iCotizacion9500ID && q.Estatus);
            this.ComCliente      = Datos.GetEntity <ClientesDatosView>(q => q.ClienteID == oCotizacion9500.ClienteID);
            this.o9500.ClienteCompletar(this.ComCliente);
            // Se guarda el anticipo
            this.ComAnticipoSel = oCotizacion9500.Anticipo;
        }
Esempio n. 3
0
        protected void LlenarSemanasCompras(int iId)
        {
            this.dgvSemanas.Rows.Clear();
            this.chrSemanas.Series["Actual"].Points.Clear();
            this.chrSemanas.Series["Pasado"].Points.Clear();
            if (iId <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametrosCompras();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlCompras_Result>("pauCuadroDeControlCompras", oParams);

            // Se llena el grid y la gráfica de Semanas
            var oConsulta = oDatos.Where(c => c.ProveedorID == iId).GroupBy(g => UtilTheos.SemanaSabAVie(g.Fecha.Valor())).Select(
                c => new { Semana = c.Key, Actual = c.Sum(s => s.Actual), Anterior = c.Sum(s => s.Anterior) }).OrderBy(c => c.Semana);
            decimal mTotal = (oConsulta.Count() > 0 ? oConsulta.Sum(c => c.Actual).Valor() : 0);

            foreach (var oReg in oConsulta)
            {
                this.dgvSemanas.Rows.Add(oReg.Semana, oReg.Semana, oReg.Actual, oReg.Anterior
                                         , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotal) * 100));
                // Para la gráfica
                this.chrSemanas.Series["Actual"].Points.AddXY(oReg.Semana, oReg.Actual);
                this.chrSemanas.Series["Pasado"].Points.AddXY(oReg.Semana, oReg.Anterior);
            }
        }
Esempio n. 4
0
        private void LlenarGraficaSemanas(int?iVendedorID)
        {
            this.chrSemana.Series["Actual"].Points.Clear();
            this.chrSemana.Series["Anterior"].Points.Clear();
            if (iVendedorID <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametros();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);

            // Se llena la gráfica
            IEnumerable <pauCuadroDeControlGeneralNuevo_Result> oFiltro = oDatos;

            if (iVendedorID.HasValue)
            {
                oFiltro = oDatos.Where(c => c.VendedorID == iVendedorID);
            }
            //
            var oConsulta = oFiltro.GroupBy(g => new { Semana = UtilTheos.SemanaSabAVie(g.Fecha) }).Select(
                c => new { c.Key.Semana, Actual = c.Sum(s => s.Actual), Anterior = c.Sum(s => s.Anterior) }).OrderBy(c => c.Semana);

            foreach (var oReg in oConsulta)
            {
                this.chrSemana.Series["Actual"].Points.AddXY(oReg.Semana, oReg.Actual);
                this.chrSemana.Series["Anterior"].Points.AddXY(oReg.Semana, oReg.Anterior);
            }
        }
Esempio n. 5
0
        private void LlenarColumnasAnio(int iAnio)
        {
            // Se borran las columnas de semanas
            for (int iCol = (this.dgvDatos.Columns.Count - 1); iCol >= this.iColumnasFijas; iCol--)
            {
                this.dgvDatos.Columns.RemoveAt(iCol);
            }

            // Se agregan las nuevas columnas
            DateTime dDia    = new DateTime(iAnio, DateTime.Now.Month, DateTime.Now.Day);
            DateTime dIni    = UtilTheos.InicioSemanaSabAVie(new DateTime(iAnio, 1, 1));
            int      iColSem = 0;

            while (dIni.Year <= iAnio)
            {
                string sEnc = string.Format("{0}\n{1}", dIni.ToString("dd/MMM"), dIni.AddDays(6).ToString("dd/MMM"));
                var    oCol = new DataGridViewTextBoxColumn()
                {
                    Name = dIni.ToShortDateString(), HeaderText = sEnc
                };
                oCol.FormatoMoneda();
                this.dgvDatos.Columns.Add(oCol);

                if (dDia >= dIni && dDia < dIni.AddDays(7))
                {
                    iColSem = this.dgvDatos.Columns.Count;
                }

                dIni = dIni.AddDays(7);
            }

            this.dgvDatos.FirstDisplayedScrollingColumnIndex = (iColSem - 1);

            this.FormatoColumnas();
        }
Esempio n. 6
0
        protected override void LlenarPartes(int iGridFuente, int iIdPrincipal, int iId)
        {
            this.dgvPartes.Rows.Clear();
            if (iId <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametros();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);

            var oConsulta = oDatos.Where(c => c.VendedorID == iIdPrincipal && c.Fecha >= this.dtpDesde.Value.Date);

            switch (iGridFuente)
            {
            case CuadroMultiple.GridFuente.Grupos:
                this.LlenarDetalle(oConsulta, iId);

                /* foreach (var oReg in oConsulta)
                 * {
                 *  var oVentasDetV = General.GetListOf<VentasDetalleView>(c => c.VentaID == oReg.VentaID && c.LineaID == iId);
                 *  foreach (var oDet in oVentasDetV)
                 *      this.dgvPartes.Rows.Add(oReg.Fecha, oReg.Folio, oDet.NumeroParte, oDet.NombreParte,
                 *          ((oDet.PrecioUnitario - oDet.CostoConDescuento) * oDet.Cantidad));
                 * } */
                return;

            case CuadroMultiple.GridFuente.Meses:
            case CuadroMultiple.GridFuente.Semanas:
                DateTime dIni, dFin;
                if (iGridFuente == CuadroMultiple.GridFuente.Semanas)
                {
                    dIni = UtilTheos.InicioSemanaSabAVie(this.dtpDesde.Value.Year, iId);
                    dFin = dIni.AddDays(6).AddDays(1);
                }
                else
                {
                    dIni = new DateTime(this.dtpDesde.Value.Year, iId, 1);
                    dFin = dIni.DiaUltimo().AddDays(1);
                }

                oConsulta = oConsulta.Where(c => (c.Fecha >= dIni && c.Fecha < dFin));
                break;

            case CuadroMultiple.GridFuente.Sucursales:
                oConsulta = oConsulta.Where(c => c.SucursalID == iId);
                break;
            }

            // Se llena el grid
            this.LlenarDetalle(oConsulta, null);

            /* foreach (var oReg in oConsulta)
             * {
             *  var oVentasDetV = General.GetListOf<VentasDetalleView>(c => c.VentaID == oReg.VentaID);
             *  foreach (var oDet in oVentasDetV)
             *      this.dgvPartes.Rows.Add(oReg.Fecha, oReg.Folio, oDet.NumeroParte, oDet.NombreParte, ((oDet.PrecioUnitario - oDet.CostoConDescuento) * oDet.Cantidad));
             * }*/
        }
Esempio n. 7
0
        public GastoCajaAPoliza(decimal mImporte)
        {
            InitializeComponent();

            this.txtImporte.Text  = mImporte.ToString();
            this.txtSubtotal.Text = UtilTheos.ObtenerPrecioSinIva(mImporte).ToString();
            this.txtIva.Text      = UtilTheos.ObtenerIvaDePrecio(mImporte).ToString();
        }
Esempio n. 8
0
        protected void LlenarPartesCompras(int iGridFuente, int iIdPrincipal, int iId)
        {
            this.dgvPartes.Rows.Clear();
            if (iId <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametrosCompras();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlCompras_Result>("pauCuadroDeControlCompras", oParams);

            var oConsulta = oDatos.Where(c => c.ProveedorID == iId);

            switch (iGridFuente)
            {
            case CuadroMultiple.GridFuente.Grupos:
                foreach (var oReg in oConsulta)
                {
                    var oDetV = Datos.GetListOf <MovimientoInventarioDetalleView>(c => c.MovimientoInventarioID == oReg.MovimientoInventarioID && c.LineaID == iId);
                    foreach (var oRegDet in oDetV)
                    {
                        this.dgvPartes.Rows.Add(oReg.Fecha, oReg.FolioFactura, oRegDet.NumeroParte, oRegDet.NombreParte
                                                , (oRegDet.PrecioUnitarioConDescuento * oRegDet.Cantidad));
                    }
                }
                return;

            case CuadroMultiple.GridFuente.Meses:
            case CuadroMultiple.GridFuente.Semanas:
                DateTime dIni, dFin;
                if (iGridFuente == CuadroMultiple.GridFuente.Semanas)
                {
                    dIni = UtilTheos.InicioSemanaSabAVie(this.dtpDesde.Value.Year, iId);
                    dFin = dIni.AddDays(6).AddDays(1);
                }
                else
                {
                    dIni = new DateTime(this.dtpDesde.Value.Year, iId, 1);
                    dFin = dIni.DiaUltimo().AddDays(1);
                }

                oConsulta = oConsulta.Where(c => (c.Fecha >= dIni && c.Fecha < dFin));
                break;
            }

            // Se llena el grid
            foreach (var oReg in oConsulta)
            {
                var oDetV = Datos.GetListOf <MovimientoInventarioDetalleView>(c => c.MovimientoInventarioID == oReg.MovimientoInventarioID);
                foreach (var oRegDet in oDetV)
                {
                    this.dgvPartes.Rows.Add(oReg.Fecha, oReg.FolioFactura, oRegDet.NumeroParte, oRegDet.NombreParte
                                            , (oRegDet.PrecioUnitarioConDescuento * oRegDet.Cantidad));
                }
            }
        }
Esempio n. 9
0
        private void CalcularPrecios()
        {
            // Se obtiene el registro correspondiente para los porcentajes
            var oParteGan = this.ObtenerParteGanancia(this.ParteIDSel);

            decimal mCosto = Util.Decimal(this.txtCosto.Text);

            if (oParteGan == null)
            {
                if (this.chkPrecioAutomatico.Checked)
                {
                    this.txtPrecio.Text = "";
                }
                this.lblPrecio1.Text = "";
                this.lblPrecio2.Text = "";
                this.lblPrecio3.Text = "";
                this.lblPrecio4.Text = "";
                this.lblPrecio5.Text = "";
            }
            else
            {
                decimal[] Precios = new decimal[] {
                    UtilTheos.AplicarRedondeo(mCosto * oParteGan.PorcentajeDeGanancia1)
                    , UtilTheos.AplicarRedondeo(mCosto * oParteGan.PorcentajeDeGanancia2)
                    , UtilTheos.AplicarRedondeo(mCosto * oParteGan.PorcentajeDeGanancia3)
                    , UtilTheos.AplicarRedondeo(mCosto * oParteGan.PorcentajeDeGanancia4)
                    , UtilTheos.AplicarRedondeo(mCosto * oParteGan.PorcentajeDeGanancia5)
                };

                // Se contempla el costo de la paquetería
                if (this.chkPaqueteria.Checked)
                {
                    decimal mPaqueteria = Util.Decimal(this.txtCostoPaqueteria.Text);
                    for (int iCont = 0; iCont < Precios.Length; iCont++)
                    {
                        Precios[iCont] += mPaqueteria;
                    }
                }

                // Se asignan los precios
                this.lblPrecio1.Text = Precios[0].ToString(GlobalClass.FormatoMoneda);
                this.lblPrecio2.Text = Precios[1].ToString(GlobalClass.FormatoMoneda);
                this.lblPrecio3.Text = Precios[2].ToString(GlobalClass.FormatoMoneda);
                this.lblPrecio4.Text = Precios[3].ToString(GlobalClass.FormatoMoneda);
                this.lblPrecio5.Text = Precios[4].ToString(GlobalClass.FormatoMoneda);

                // Se asigna el precio automático, si aplica
                if (this.chkPrecioAutomatico.Checked)
                {
                    this.txtPrecio.Text = Precios[this.Cliente.ListaDePrecios - 1].ToString();
                }
            }
        }
Esempio n. 10
0
        private void CargarPorSemana(List <pauCuadroDeControlCobranza_Result> oDatos)
        {
            var oPorSemana = this.AgruparPorEntero(oDatos.GroupBy(g => UtilTheos.SemanaSabAVie(g.Vencimiento.Valor())));

            this.dgvPorSemana.Rows.Clear();
            this.chrPorSemana.Series["Expectativa"].Points.Clear();
            this.chrPorSemana.Series["Cobrado"].Points.Clear();
            foreach (var oReg in oPorSemana)
            {
                this.dgvPorSemana.Rows.Add(oReg.Llave, oReg.Esperado, oReg.Pagado
                                           , Util.DividirONull(oReg.Pagado, oReg.Esperado), Util.DividirONull(oReg.Pagado, oReg.PagadoAnt));
                this.chrPorSemana.Series["Expectativa"].Points.AddXY(oReg.Llave, oReg.Esperado);
                this.chrPorSemana.Series["Cobrado"].Points.AddXY(oReg.Llave, oReg.Pagado);
            }
            // this.dgvPorSemanaT["SemanaT_Actual", 0].Value = (oPorSemana.Count() > 0 ? oPorSemana.Average(c => c.Actual) : 0);
            // this.dgvPorSemanaT["SemanaT_Anterior", 0].Value = (oPorSemana.Count() > 0 ? oPorSemana.Average(c => c.Anterior) : 0);
        }
Esempio n. 11
0
        protected void LlenarGraficaSemanasTodos()
        {
            // Se limpian los puntos de las series
            foreach (Series oSerie in this.chrSemanas.Series)
            {
                oSerie.Points.Clear();
            }

            var oParams = this.ObtenerParametros();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);

            // Se empieza a llenar el gráfico
            var oConsulta = this.AgruparPorEnteroCadenaEntero(oDatos.GroupBy(g => new AgrupadoPorEnteroCadenaEntero()
            {
                Llave = g.VendedorID, Cadena = g.Vendedor, Entero = UtilTheos.SemanaSabAVie(g.Fecha)
            }));

            foreach (var oReg in oConsulta)
            {
                string sSerie = oReg.Llave.ToString();
                // Si la serie no existe, se crea
                if (this.chrSemanas.Series.Any(c => c.Name == sSerie))
                {
                    this.chrSemanas.Series[sSerie].Points.AddXY(oReg.Entero, oReg.Actual);
                }
                else
                {
                    var oSerie = new Series(sSerie)
                    {
                        ChartType        = SeriesChartType.Line,
                        ToolTip          = oReg.Cadena,
                        Label            = "o",
                        LabelForeColor   = Color.Transparent,
                        LabelToolTip     = "Semana: #VALX\nImporte: $#VAL",
                        CustomProperties = "LabelStyle=Center",
                    };
                    oSerie.Points.AddXY(oReg.Entero, oReg.Actual);
                    this.chrSemanas.Series.Add(oSerie);
                }
            }
        }
Esempio n. 12
0
        private void AplicarPorcentajes()
        {
            var frmCalculo = new MasterCostos();

            frmCalculo.Text        = "Porcentajes";
            frmCalculo.ModoPrecios = false;
            if (frmCalculo.ShowDialog(Principal.Instance) == DialogResult.OK)
            {
                foreach (DataGridViewRow Fila in this.dgvDatos.Rows)
                {
                    if (!Util.Logico(Fila.Cells["Procesar"].Value))
                    {
                        continue;
                    }

                    // Se afectan los porcentajes
                    Fila.Cells["Por1"].Value = frmCalculo.Porcentajes[0];
                    Fila.Cells["Por2"].Value = frmCalculo.Porcentajes[1];
                    Fila.Cells["Por3"].Value = frmCalculo.Porcentajes[2];
                    Fila.Cells["Por4"].Value = frmCalculo.Porcentajes[3];
                    Fila.Cells["Por5"].Value = frmCalculo.Porcentajes[4];

                    // Se actualizan los precios, si aplica
                    if (frmCalculo.ActualizarPrecios)
                    {
                        decimal mCosto = Util.Decimal(Fila.Cells["Costo"].Value);
                        Fila.Cells["Precio1"].Value = UtilTheos.AplicarRedondeo(mCosto * frmCalculo.Porcentajes[0]);
                        Fila.Cells["Precio2"].Value = UtilTheos.AplicarRedondeo(mCosto * frmCalculo.Porcentajes[1]);
                        Fila.Cells["Precio3"].Value = UtilTheos.AplicarRedondeo(mCosto * frmCalculo.Porcentajes[2]);
                        Fila.Cells["Precio4"].Value = UtilTheos.AplicarRedondeo(mCosto * frmCalculo.Porcentajes[3]);
                        Fila.Cells["Precio5"].Value = UtilTheos.AplicarRedondeo(mCosto * frmCalculo.Porcentajes[4]);
                    }
                }
            }
            frmCalculo.Dispose();
        }
Esempio n. 13
0
        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();
        }
Esempio n. 14
0
        private void CargarDatos()
        {
            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 llenan las columnas del año
            int iAnio = Util.Entero(this.cmbAnio.Text);

            this.LlenarColumnasAnio(iAnio);

            // Se agrega la fila de ingresos
            int iFilaIngresos = this.dgvDatos.Rows.Add("+ Ingresos");

            this.dgvDatos.Rows[iFilaIngresos].DefaultCellStyle.Font = oFuenteT;
            decimal mTotal = 0, mPromedio = 0;

            // Se agrega la fila de saldo inicial
            int iFilaSaldoInicial = this.dgvDatos.Rows.Add("Saldo inicial");

            // Se obtienen los datos para las ventas
            // int iSucursalID = Util.ConvertirEntero(this.cmbSucursal.SelectedValue);
            DateTime dDesde       = new DateTime(iAnio, 1, 1);
            DateTime dHasta       = new DateTime(iAnio, 12, 31);
            DateTime dDesdeSemUno = UtilTheos.InicioSemanaSabAVie(dDesde);
            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", dDesdeSemUno);
            oParams.Add("Hasta", dHasta);
            var oDatos   = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);
            var oSemanas = oDatos.Where(c => c.Fecha >= dDesdeSemUno)
                           .GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha) })
                           .Select(c => new { c.Key.Semana, PrecioSinIva = c.Sum(s => s.PrecioSinIvaActual) })
                           .OrderBy(c => c.Semana);

            mTotal    += oSemanas.Sum(c => c.PrecioSinIva).Valor();
            mPromedio += oSemanas.Average(c => c.PrecioSinIva).Valor();
            // Se agrega la fila de ventas
            int iFila = this.dgvDatos.Rows.Add("Ventas", oSemanas.Sum(c => c.PrecioSinIva), oSemanas.Average(c => c.PrecioSinIva));

            foreach (var oReg in oSemanas)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value         = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.PrecioSinIva);
                this.dgvDatos[sSemana, iFilaIngresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaIngresos].Value) + oReg.PrecioSinIva);
            }

            // Se obtienen datos para varios grupos
            DateTime dHastaMas1 = dHasta.AddDays(1);
            // DateTime dDesdeMas1 = dDesde.AddDays(1);
            var oReinversiones = Datos.GetListOf <ContaPolizasDetalleAvanzadoView>(c => c.FechaPoliza >= dDesdeSemUno && 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
                                                                                   )
                                                                                   );

            // Se agrega la fila de préstamos
            var oPrestamos = oReinversiones.Where(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo ||
                                                  c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo)
                             .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor()))
                             .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Abono) });

            mTotal += oPrestamos.Sum(c => c.Importe);
            decimal mPromedioAct = (oPrestamos.Count() > 0 ? oPrestamos.Average(c => c.Importe) : 0);

            mPromedio += mPromedioAct;
            iFila      = this.dgvDatos.Rows.Add("Préstamos", oPrestamos.Sum(c => c.Importe), mPromedioAct);
            foreach (var oReg in oPrestamos)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value         = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaIngresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaIngresos].Value) + oReg.Importe);
            }

            // Se llenan los totales de ingresos
            this.dgvDatos["Total", iFilaIngresos].Value    = mTotal;
            this.dgvDatos["Promedio", iFilaIngresos].Value = (mPromedio / 2);

            // Se agrega la fila de egresos
            int iFilaEgresos = this.dgvDatos.Rows.Add("- Egresos");

            this.dgvDatos.Rows[iFilaEgresos].DefaultCellStyle.Font = oFuenteT;
            mTotal = mPromedio = 0;

            // Se obtienen los datos para los gastos
            oParams.Clear();
            oParams.Add("Desde", dDesdeSemUno);
            oParams.Add("Hasta", dHasta);
            var oGastos    = Datos.ExecuteProcedure <pauContaCuentasPorSemana_Result>("pauContaCuentasPorSemana", oParams);
            var oGastosSem = ContaProc.GastosSemanalizados(oGastos, Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name));

            oGastosSem = oGastosSem.Where(c => c.Semana >= dDesdeSemUno)
                         .GroupBy(c => new { c.Semana }).Select(c => new ContaProc.GastoSem()
            {
                Semana = c.Key.Semana, Importe = c.Sum(s => s.Importe)
            }).ToList();
            mTotal    += oGastosSem.Sum(c => c.Importe);
            mPromedio += oGastosSem.Average(c => c.Importe);
            // Se agrega la fila de los Gastos
            iFila = this.dgvDatos.Rows.Add("Gastos", oGastosSem.Sum(c => c.Importe), oGastosSem.Average(c => c.Importe));
            foreach (var oReg in oGastosSem)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value        = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe);
            }

            // Para las compras
            var oCompras = Datos.GetListOf <ProveedoresPolizasDetalleAvanzadoView>(c => c.Fecha >= dDesdeSemUno && c.Fecha < dHastaMas1 &&
                                                                                   (c.OrigenID == Cat.OrigenesPagosAProveedores.PagoDirecto || c.OrigenID == Cat.OrigenesPagosAProveedores.PagoDeCaja))
                           .GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha.Valor()) })
                           .Select(c => new { c.Key.Semana, Importe = c.Sum(s => s.Subtotal) })
                           .OrderBy(c => c.Semana);

            mTotal      += oCompras.Sum(c => c.Importe);
            mPromedioAct = (oCompras.Count() > 0 ? oCompras.Average(c => c.Importe) : 0);
            mPromedio   += mPromedioAct;
            // Se agrega la fila de compras
            iFila = this.dgvDatos.Rows.Add("Compras", oCompras.Sum(c => c.Importe), mPromedioAct);
            foreach (var oReg in oCompras)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value        = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe);
            }

            // Para las deudas
            var oDeudas = oReinversiones.Where(c => c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarLargoPlazo ||
                                               c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.CuentasPorPagarCortoPlazo || c.ContaCuentaDeMayorID == Cat.ContaCuentasDeMayor.AcreedoresDiversos)
                          .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor()))
                          .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) });

            mTotal      += oDeudas.Sum(c => c.Importe);
            mPromedioAct = (oDeudas.Count() > 0 ? oDeudas.Average(c => c.Importe) : 0);
            mPromedio   += mPromedioAct;
            // Se agrega la fila de deudas
            iFila = this.dgvDatos.Rows.Add("Deudas", oDeudas.Sum(c => c.Importe), mPromedioAct);
            foreach (var oReg in oDeudas)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value        = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe);
            }

            // Para las inversiones
            var oInversiones = oReinversiones.Where(c => c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo)
                               .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor()))
                               .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) });

            mTotal      += oInversiones.Sum(c => c.Importe);
            mPromedioAct = (oInversiones.Count() > 0 ? oInversiones.Average(c => c.Importe) : 0);
            mPromedio   += mPromedioAct;
            // Se agrega la fila de deudas
            iFila = this.dgvDatos.Rows.Add("Inversiones", oInversiones.Sum(c => c.Importe), mPromedioAct);
            foreach (var oReg in oInversiones)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value        = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe);
            }

            // Para lo de Isidro y Don Isidro
            var oGastosSemEsp = ContaProc.GastosSemanalizados(Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesdeSemUno && c.Fecha < dHastaMas1)
                                                              , Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name));

            oGastosSemEsp = oGastosSemEsp.Where(c => c.Semana >= dDesdeSemUno).ToList();
            mTotal       += oGastosSemEsp.Sum(c => c.Importe);
            mPromedioAct  = (oGastosSemEsp.Count() > 0 ? oGastosSemEsp.Average(c => c.Importe) : 0);
            mPromedio    += mPromedioAct;
            // Se agregan las filas
            string sDuenio = "";

            foreach (var oReg in oGastosSemEsp)
            {
                if (sDuenio != oReg.Grupo)
                {
                    sDuenio = oReg.Grupo;
                    iFila   = this.dgvDatos.Rows.Add(sDuenio, oGastosSemEsp.Where(c => c.Grupo == sDuenio).Sum(c => c.Importe)
                                                     , oGastosSemEsp.Where(c => c.Grupo == sDuenio).Average(c => c.Importe));
                }

                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value        = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaEgresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaEgresos].Value) + oReg.Importe);
            }

            // Se llenan los totales de egresos
            this.dgvDatos["Total", iFilaEgresos].Value    = mTotal;
            this.dgvDatos["Promedio", iFilaEgresos].Value = (mPromedio / 2);

            // Ajuste especial para el año 2015, se quitan los datos antes del 01 de Julio
            if (dDesde.Year == 2015)
            {
                DateTime dInicio = new DateTime(2015, 6, 1);
                foreach (DataGridViewRow oFila in this.dgvDatos.Rows)
                {
                    mPromedio = 0;
                    for (int iCol = this.iColumnasFijas; iCol < this.dgvDatos.Columns.Count; iCol++)
                    {
                        DateTime dSem = Util.FechaHora(this.dgvDatos.Columns[iCol].Name);
                        oFila.Cells["Total"].Value = 0;
                        if (dSem >= dInicio)
                        {
                            mPromedio++;
                            oFila.Cells["Total"].Value = (Util.Decimal(oFila.Cells["Total"].Value) + Util.Decimal(oFila.Cells[iCol].Value));
                        }
                        else
                        {
                            oFila.Cells[iCol].Value = null;
                        }
                    }
                    oFila.Cells["Promedio"].Value = (Util.Decimal(oFila.Cells["Total"].Value) / mPromedio);
                }
            }

            // 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;
                }

                // Se modifica el saldo inicial de la semana actual, y se suma a la fila de ingresos
                if (oCol.Index >= this.iColumnasFijas)
                {
                    this.dgvDatos[oCol.Index, iFilaIngresos].Value = (
                        Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos].Value)
                        + Util.Decimal(this.dgvDatos[oCol.Index, iFilaSaldoInicial].Value)
                        );
                }

                decimal mSaldo = (
                    Util.Decimal(this.dgvDatos[oCol.Index, iFilaIngresos].Value)
                    - Util.Decimal(this.dgvDatos[oCol.Index, iFilaEgresos].Value)
                    );
                this.dgvDatos[oCol.Index, iFilaSaldo].Value = mSaldo;

                // Se llena el saldo inicial de la siguiente semana, si hay
                if (oCol.Index >= this.iColumnasFijas && oCol.Index < (this.dgvDatos.Columns.Count - 1))
                {
                    this.dgvDatos[oCol.Index + 1, iFilaSaldoInicial].Value = mSaldo;
                }
            }

            // 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["Ventas"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaIngresos + 1].Value));
                this.chrPorSemana.Series["Prestamos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaIngresos + 2].Value));
                this.chrPorSemana.Series["Gastos"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 1].Value));
                this.chrPorSemana.Series["Compras"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 2].Value));
                this.chrPorSemana.Series["Deudas"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 3].Value));
                this.chrPorSemana.Series["Inversiones"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 4].Value));
                if (this.dgvDatos.Rows.Count > 10)
                {
                    this.chrPorSemana.Series["Isidro"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 5].Value));
                    this.chrPorSemana.Series["DonIsidro"].Points.AddY(Util.Decimal(this.dgvDatos[iCol, iFilaEgresos + 6].Value));
                }
            }

            Cargando.Cerrar();
        }
Esempio n. 15
0
        protected override void LlenarSemanas(int iId)
        {
            this.dgvSemanas.Rows.Clear();
            this.chrSemanas.Series["Actual"].Points.Clear();
            this.chrSemanas.Series["Pasado"].Points.Clear();
            if (iId <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametros();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);

            // Se filtran según el combo de marcas
            if (this.ctlMarcas.ValoresSeleccionados.Count > 0)
            {
                oDatos = oDatos.Where(c => this.ctlMarcas.ValoresSeleccionados.Contains(c.MarcaID.Valor())).ToList();
            }

            // Se llena el grid y la gráfica de Semanas
            IEnumerable <TotalesPorEntero> oConsulta;

            if (this.ActiveControl == this.dgvPrincipal)
            {
                oConsulta = this.AgruparPorEntero(oDatos.Where(c => c.LineaID == iId).GroupBy(g => UtilTheos.SemanaSabAVie(g.Fecha)));
            }
            else
            {
                oConsulta = this.AgruparPorEntero(oDatos.Where(c => c.ClienteID == iId).GroupBy(g => UtilTheos.SemanaSabAVie(g.Fecha)));
            }

            decimal mTotal = (oConsulta.Count() > 0 ? oConsulta.Sum(c => c.Actual) : 0);

            foreach (var oReg in oConsulta)
            {
                this.dgvSemanas.Rows.Add(oReg.Llave, oReg.Llave, oReg.Actual, oReg.Anterior
                                         , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotal) * 100));
                // Para la gráfica
                this.chrSemanas.Series["Actual"].Points.AddXY(oReg.Llave, oReg.Actual);
                this.chrSemanas.Series["Pasado"].Points.AddXY(oReg.Llave, oReg.Anterior);
            }
        }
Esempio n. 16
0
        private void CargarDatos()
        {
            Cargando.Mostrar();

            int iSucursalID = Util.Entero(this.cmbSucursal.SelectedValue);
            var oParams     = new Dictionary <string, object>();

            oParams.Add("SucursalID", (iSucursalID == 0 ? null : (int?)iSucursalID));
            oParams.Add("Pagadas", this.chkPagadas.Checked);
            oParams.Add("Cobradas", this.chkCobradas.Checked);
            oParams.Add("Solo9500", this.chk9500.Checked);
            oParams.Add("OmitirDomingo", this.chkOmitirDomingos.Checked);
            // oParams.Add("CostoConDescuento", this.chkCostoConDescuento.Checked);
            oParams.Add("Desde", this.dtpDesde.Value);
            oParams.Add("Hasta", this.dtpHasta.Value);

            var oDatos   = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);
            var oTotales = this.ObtenerTotales(oDatos);

            // Se llena el grid de por día
            var oPorDia = this.AgruparPorDia(oDatos);

            this.dgvPorDia.Rows.Clear();
            foreach (var oReg in oPorDia)
            {
                this.dgvPorDia.Rows.Add(oReg.Llave, oReg.Actual, oReg.Anterior
                                        , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, oTotales.Actual) * 100));
            }
            this.dgvPorDiaT["DiaT_Actual", 0].Value   = (oPorDia.Count() > 0 ? oPorDia.Average(c => c.Actual) : 0);
            this.dgvPorDiaT["DiaT_Anterior", 0].Value = (oPorDia.Count() > 0 ? oPorDia.Average(c => c.Anterior) : 0);

            // Se llena el grid de por semana
            var oPorSemana = this.AgruparPorEntero(oDatos.GroupBy(g => UtilTheos.SemanaSabAVie(g.Fecha)));

            this.dgvPorSemana.Rows.Clear();
            this.chrPorSemana.Series["Actual"].Points.Clear();
            this.chrPorSemana.Series["Pasado"].Points.Clear();
            foreach (var oReg in oPorSemana)
            {
                this.dgvPorSemana.Rows.Add(oReg.Llave, oReg.Actual, oReg.Anterior
                                           , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, oTotales.Actual) * 100));
                this.chrPorSemana.Series["Actual"].Points.AddXY(oReg.Llave, oReg.Actual);
                this.chrPorSemana.Series["Pasado"].Points.AddXY(oReg.Llave, oReg.Anterior);
            }
            this.dgvPorSemanaT["SemanaT_Actual", 0].Value   = (oPorSemana.Count() > 0 ? oPorSemana.Average(c => c.Actual) : 0);
            this.dgvPorSemanaT["SemanaT_Anterior", 0].Value = (oPorSemana.Count() > 0 ? oPorSemana.Average(c => c.Anterior) : 0);

            // Se llena el grid de por mes
            var oPorMes = this.AgruparPorEntero(oDatos.GroupBy(g => g.Fecha.Month));

            this.dgvPorMes.Rows.Clear();
            this.chrPorMes.Series["Actual"].Points.Clear();
            this.chrPorMes.Series["Pasado"].Points.Clear();
            foreach (var oReg in oPorMes)
            {
                this.dgvPorMes.Rows.Add(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(oReg.Llave).ToUpper(), oReg.Actual, oReg.Anterior
                                        , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, oTotales.Actual) * 100));
                this.chrPorMes.Series["Actual"].Points.AddXY(oReg.Llave, oReg.Actual);
                this.chrPorMes.Series["Pasado"].Points.AddXY(oReg.Llave, oReg.Anterior);
            }

            // Se llena el grid de días
            oParams["Desde"] = this.dtpDesde.Value;
            oParams["Hasta"] = this.dtpHasta.Value;
            oDatos           = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);
            var oPorDiaSem = oDatos.GroupBy(g => g.Fecha.DayOfWeek).Select(c => new { Dia = c.Key, Actual = c.Sum(s => s.Actual), Anterior = c.Sum(s => s.Anterior) })
                             .OrderBy(o => (int)o.Dia);
            decimal mTotalDiaSem = (oDatos.Count > 0 ? oDatos.Sum(c => c.Actual).Valor() : 0);

            this.dgvDias.Rows.Clear();
            this.chrPorDiaSem.Series["Actual"].Points.Clear();
            foreach (var oReg in oPorDiaSem)
            {
                this.dgvDias.Rows.Add(CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(oReg.Dia).ToUpper(), oReg.Actual, oReg.Anterior
                                      , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotalDiaSem) * 100));
                int iPunto = this.chrPorDiaSem.Series["Actual"].Points.AddXY((int)oReg.Dia, oReg.Actual);
                this.chrPorDiaSem.Series["Actual"].Points[iPunto].AxisLabel = CultureInfo.CurrentCulture.DateTimeFormat.GetShortestDayName(oReg.Dia).ToUpper();
            }

            // Se llena el grid de horas
            var oPorHora = this.AgruparPorEntero(oDatos.GroupBy(g => g.Fecha.Hour));

            this.dgvHoras.Rows.Clear();
            this.chrPorHora.Series.Clear();
            foreach (var oReg in oPorHora)
            {
                this.dgvHoras.Rows.Add(string.Format("{0:00}:00", oReg.Llave), oReg.Actual, oReg.Anterior
                                       , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotalDiaSem) * 100));
                this.AgregarSerieCilindro(this.chrPorHora, oReg.Llave, oReg.Actual);
            }

            // Se llena el grid de sucursales
            var oPorSucursal = this.AgruparPorEntero(oDatos.GroupBy(g => g.SucursalID));
            var oSucursales  = oDatos.Select(c => new { c.SucursalID, c.Sucursal }).Distinct();

            this.dgvSucursales.Rows.Clear();
            foreach (var oReg in oPorSucursal)
            {
                string sSucursal = oSucursales.FirstOrDefault(c => c.SucursalID == oReg.Llave).Sucursal;
                this.dgvSucursales.Rows.Add(sSucursal, oReg.Actual, oReg.Anterior
                                            , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotalDiaSem) * 100));
            }

            // Se llena el grid de por año
            oParams.Remove("Desde");
            oParams.Remove("Hasta");
            var oPorAnio = Datos.ExecuteProcedure <pauCuadroDeControlPorAnio_Result>("pauCuadroDeControlPorAnio", oParams);

            this.dgvPorAnio.Rows.Clear();
            foreach (var oReg in oPorAnio)
            {
                decimal mDato = this.ObtenerDatoAnio(oReg);
                this.dgvPorAnio.Rows.Add(oReg.Anio, mDato);
                this.chrPorAnio.Series["Actual"].Points.AddXY(oReg.Anio, mDato);
            }

            // Se configuran columnas del grid
            this.AplicarFormatoColumnas();

            // Se llenan los totales
            this.txtAnioActual.Text   = oTotales.Actual.ToString(GlobalClass.FormatoMoneda);
            this.txtAnioAnterior.Text = oTotales.Anterior.ToString(GlobalClass.FormatoMoneda);
            this.txtResultado.Text    = Util.DividirONull(oTotales.Actual, oTotales.Anterior).Valor().ToString(GlobalClass.FormatoDecimal);

            Cargando.Cerrar();
        }
Esempio n. 17
0
        protected override void LlenarSemanas(int iId)
        {
            this.dgvSemanas.Rows.Clear();

            // Se limpian los puntos de las series
            bool bGraficar = !this.chkGrafSemanas.Checked;

            if (bGraficar)
            {
                foreach (Series oSerie in this.chrSemanas.Series)
                {
                    oSerie.Points.Clear();
                }
            }

            if (iId <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametros();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);

            // Se llena el grid y la gráfica de Semanas
            var     oConsulta = this.AgruparPorEntero(oDatos.Where(c => c.VendedorID == iId).GroupBy(g => UtilTheos.SemanaSabAVie(g.Fecha)));
            decimal mTotal    = (oConsulta.Count() > 0 ? oConsulta.Sum(c => c.Actual) : 0);

            foreach (var oReg in oConsulta)
            {
                this.dgvSemanas.Rows.Add(oReg.Llave, oReg.Llave, oReg.Actual, oReg.Anterior
                                         , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotal) * 100));
                // Para la gráfica
                if (bGraficar)
                {
                    this.chrSemanas.Series["Actual"].Points.AddXY(oReg.Llave, oReg.Actual);
                    this.chrSemanas.Series["Pasado"].Points.AddXY(oReg.Llave, oReg.Anterior);
                }
            }
        }
Esempio n. 18
0
        private void CargarDatos()
        {
            Cargando.Mostrar();

            var oParams  = this.ObtenerParametros();
            var oDatos   = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);
            var oTotales = this.ObtenerTotales(oDatos);

            // Se llena el grid de por semana
            var oPorSemana = this.AgruparPorEntero(oDatos.GroupBy(g => UtilTheos.SemanaSabAVie(g.Fecha)));

            this.dgvSemana.Rows.Clear();
            // this.chrSemana.Series["Actual"].Points.Clear();
            // this.chrSemana.Series["Pasado"].Points.Clear();
            foreach (var oReg in oPorSemana)
            {
                this.dgvSemana.Rows.Add(oReg.Llave, oReg.Llave, oReg.Actual, oReg.Anterior
                                        , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, oTotales.Actual) * 100));
                // this.chrSemana.Series["Actual"].Points.AddXY(oReg.Semana, oReg.Actual);
                // this.chrSemana.Series["Pasado"].Points.AddXY(oReg.Semana, oReg.Anterior);
            }
            this.dgvSemanaT["SemanaT_Actual", 0].Value    = oTotales.Actual;
            this.dgvSemanaT["SemanaT_Anterior", 0].Value  = oTotales.Anterior;
            this.dgvSemanaT["SemanaT_Resultado", 0].Value = Util.DividirONull(oTotales.Actual, oTotales.Anterior);

            // Se llena el grid de Vendedores con semanas
            int iFila;
            Dictionary <string, decimal> oSemanasT = new Dictionary <string, decimal>();
            var oPorVendedor = this.AgruparPorEnteroCadenaEntero(oDatos.GroupBy(g => new AgrupadoPorEnteroCadenaEntero()
            {
                Llave = g.VendedorID, Cadena = g.Vendedor, Entero = UtilTheos.SemanaSabAVie(g.Fecha)
            })).OrderBy(c => c.Entero);

            this.dgvVendedorSem.Rows.Clear();
            foreach (var oReg in oPorVendedor)
            {
                // Se encuentra la fila del vendedor, o se agrega si no existe
                iFila = this.dgvVendedorSem.EncontrarIndiceDeValor("VendedorSem_Id", oReg.Llave);
                if (iFila < 0)
                {
                    var oVendedor = oPorVendedor.Where(c => c.Llave == oReg.Llave);
                    iFila = this.dgvVendedorSem.Rows.Add(oReg.Llave, oReg.Cadena
                                                         , oVendedor.Average(c => c.Actual), oVendedor.Sum(c => c.Actual));
                }

                // Se verifica si existe la columna de la semana, si no, se agrega
                string sColSem = ("VendedorSem_" + oReg.Entero.ToString());
                if (!this.dgvVendedorSem.Columns.Contains(sColSem))
                {
                    this.dgvVendedorSem.Columns.Add(sColSem, ("Sem " + oReg.Entero.ToString()));
                    this.dgvVendedorSem.Columns[sColSem].FormatoMoneda();
                }
                if (!oSemanasT.ContainsKey(sColSem))
                {
                    oSemanasT.Add(sColSem, 0);
                }

                // Se llenan los datos
                this.dgvVendedorSem[sColSem, iFila].Value = oReg.Actual;
                oSemanasT[sColSem] += oReg.Actual;

                // Para el formato de la columna
                // this.dgvVendedorSem.Columns[sColSem].DefaultCellStyle.Format = (this.cmbCalculo.Text == "Ventas" ? "N0" : "C2");
            }
            // Se agrega la fila de total
            // this.dgvVendedorSem.Rows.Add();
            iFila = this.dgvVendedorSem.Rows.Add(0, "Totales", oPorVendedor.Average(c => c.Actual), oPorVendedor.Sum(c => c.Actual));
            this.dgvVendedorSem.Rows[iFila].DefaultCellStyle.Font = new Font(this.dgvVendedorSem.Font, FontStyle.Bold);
            foreach (DataGridViewColumn oCol in this.dgvVendedorSem.Columns)
            {
                if (oCol.Index < 4)
                {
                    continue;
                }
                if (!oSemanasT.ContainsKey(oCol.Name))
                {
                    continue;
                }
                this.dgvVendedorSem[oCol.Name, iFila].Value = oSemanasT[oCol.Name];
            }

            // Se configuran columnas del grid
            this.AplicarFormatoColumnas();

            Cargando.Cerrar();
        }
Esempio n. 19
0
        protected override void LlenarSemanas(int iClienteID)
        {
            this.dgvSemanas.Rows.Clear();
            this.chrSemanas.Series["Actual"].Points.Clear();
            this.chrSemanas.Series["Pasado"].Points.Clear();
            if (iClienteID <= 0)
            {
                return;
            }

            var oParams = this.ObtenerParametros();
            var oDatos  = Datos.ExecuteProcedure <pauCuadroDeControlGeneralNuevo_Result>("pauCuadroDeControlGeneral", oParams);

            if (oDatos == null)
            {
                return;
            }

            // Se llena el grid y la gráfica de Semanas
            var     oConsulta = this.AgruparPorEntero(oDatos.Where(c => c.ClienteID == iClienteID).GroupBy(g => UtilTheos.SemanaSabAVie(g.Fecha)));
            decimal mTotal    = (oConsulta.Count() > 0 ? oConsulta.Sum(c => c.Actual) : 0);

            foreach (var oReg in oConsulta)
            {
                this.dgvSemanas.Rows.Add(oReg.Llave, oReg.Llave, oReg.Actual, oReg.Anterior
                                         , Util.DividirONull(oReg.Actual, oReg.Anterior), (Util.DividirONull(oReg.Actual, mTotal) * 100));
                // Para la gráfica
                this.chrSemanas.Series["Actual"].Points.AddXY(oReg.Llave, oReg.Actual);
                this.chrSemanas.Series["Pasado"].Points.AddXY(oReg.Llave, oReg.Anterior);
            }
        }
Esempio n. 20
0
        public void CargarDatos()
        {
            Cargando.Mostrar();

            var      oParams = new Dictionary <string, object>();
            int      iAnio   = Util.Entero(this.cmbAnio.Text);
            DateTime dDesde  = new DateTime(iAnio, 1, 1);
            DateTime dHasta  = new DateTime(iAnio, 12, 31);

            oParams.Add("Desde", dDesde);
            oParams.Add("Hasta", dHasta);
            oParams.Add("AfectaMetas", this.chkAfectaMetas.Checked);

            // Se llenan los datos
            var oDatos = Datos.ExecuteProcedure <pauContaCuentasPorSemana_Result>("pauContaCuentasPorSemana", oParams);

            this.tgvDatos.Nodes.Clear();
            TreeGridNode oNodoSucursal = null, oNodoCuenta = null, oNodoSubcuenta = null, oNodoCuentaDeMayor = null, oNodoCuentaAuxiliar = null;
            string       sSucursal = "", sCuenta = "", sSubcuenta = "", sCuentaDeMayor = "", sCuentaAuxiliar = "";

            foreach (var oReg in oDatos)
            {
                // Nodo de Sucursal
                if (oReg.Sucursal != sSucursal)
                {
                    sSucursal         = oReg.Sucursal;
                    oNodoSucursal     = this.tgvDatos.Nodes.Add(sSucursal);
                    oNodoSucursal.Tag = false; // Se marca como false para indicar que no es devengado especial
                    sCuenta           = "";
                }
                // Nodo de Cuenta
                if (oReg.Cuenta != sCuenta)
                {
                    sCuenta     = oReg.Cuenta;
                    oNodoCuenta = oNodoSucursal.Nodes.Add(sCuenta);
                    sSubcuenta  = "";
                }
                // Nodo de Subcuenta
                if (oReg.Subcuenta != sSubcuenta)
                {
                    sSubcuenta     = oReg.Subcuenta;
                    oNodoSubcuenta = oNodoCuenta.Nodes.Add(sSubcuenta);
                    sCuentaDeMayor = "";
                }
                // Nodo de Cuenta de mayor
                if (oReg.CuentaDeMayor != sCuentaDeMayor)
                {
                    sCuentaDeMayor     = oReg.CuentaDeMayor;
                    oNodoCuentaDeMayor = oNodoSubcuenta.Nodes.Add(sCuentaDeMayor);
                    sCuentaAuxiliar    = "";
                }
                // Se agrega la cuenta auxiliar
                if (oReg.CuentaAuxiliar != sCuentaAuxiliar)
                {
                    sCuentaAuxiliar     = oReg.CuentaAuxiliar;
                    oNodoCuentaAuxiliar = oNodoCuentaDeMayor.Nodes.Add(oReg.CuentaAuxiliar);
                }
                // Se meten los valores de las semanas, y los totales
                if (oReg.PeriodicidadMes.HasValue)
                {
                    DateTime dInicioPer = oReg.Fecha.DiaPrimero().Date;
                    DateTime dFinPer = dInicioPer.AddMonths(oReg.PeriodicidadMes.Valor()).AddDays(-1);
                    decimal  mImporteDiario = (oReg.ImporteDev.Valor() / ((dFinPer - dInicioPer).Days + 1));
                    decimal  mImporte; int iDias;
                    DateTime dIniSem = UtilTheos.InicioSemanaSabAVie(dInicioPer).Date;
                    for (int iCol = (this.tgvDatos.Columns["Sem" + dIniSem.ToString("d")].Index); iCol < this.tgvDatos.Columns.Count; iCol++)
                    {
                        // Se verifica si se debe de seguir semanalizando
                        if (oReg.FinSemanalizar.HasValue && oReg.FinSemanalizar <= dIniSem)
                        {
                            break;
                        }
                        // Se verifica la fecha final,
                        if (oNodoCuentaAuxiliar.Tag != null && dIniSem > dFinPer)
                        {
                            break;
                        }

                        // Se calcula el importe correspondiente
                        DateTime dFinSem = dIniSem.AddDays(6);
                        if (dIniSem < dInicioPer)
                        {
                            iDias = dFinSem.Day;
                        }
                        else if (dIniSem <= dFinPer && dFinSem > dFinPer)
                        {
                            iDias = ((dIniSem.DiaUltimo().Day - dIniSem.Day) + 1);
                        }
                        else if (dIniSem > dFinPer && (dIniSem - dFinPer).Days < 7)
                        {
                            iDias = (dIniSem.Day - 1);
                            iCol--;
                        }
                        else
                        {
                            iDias = 7;
                            // Se verifica si es

                            /* if (oReg.CuentaAuxiliar == sCuentaAuxiliar)
                             * {
                             *  oNodoCuentaAuxiliar.Cells[iCol].Value = 0;
                             *  oNodoCuentaAuxiliar.Cells[iCol].Tag = null;
                             * } */
                        }
                        // int iDias = (dIniSem < dInicioPer ? dFinSem.Day : (dFinSem > dFinPer ? ((dIniSem.DiaUltimo().Day - dIniSem.Day) + 1) : 7));
                        mImporte = (mImporteDiario * iDias);
                        dIniSem  = dIniSem.AddDays(7);

                        // Para guardar los datos relacionados
                        if (oNodoCuentaAuxiliar.Cells[iCol].Tag == null)
                        {
                            oNodoCuentaAuxiliar.Cells[iCol].Tag = new List <int>();
                        }
                        (oNodoCuentaAuxiliar.Cells[iCol].Tag as List <int>).Add(oReg.ContaEgresoDevengadoID);

                        // Para llenar las celdas
                        oNodoCuentaAuxiliar.Cells[iCol].Value = (Util.Decimal(oNodoCuentaAuxiliar.Cells[iCol].Value) + mImporte); // mImporte;

                        /*
                         * // Para los niveles superiores
                         * oNodoCuentaDeMayor.Cells[iCol].Value = (Util.ConvertirDecimal(oNodoCuentaDeMayor.Cells[iCol].Value) + mImporte);
                         * oNodoSubcuenta.Cells[iCol].Value = (Util.ConvertirDecimal(oNodoSubcuenta.Cells[iCol].Value) + mImporte);
                         * oNodoCuenta.Cells[iCol].Value = (Util.ConvertirDecimal(oNodoCuenta.Cells[iCol].Value) + mImporte);
                         * oNodoSucursal.Cells[iCol].Value = (Util.ConvertirDecimal(oNodoSucursal.Cells[iCol].Value) + mImporte);
                         *
                         * // Para la columna de totales
                         * oNodoCuentaAuxiliar.Cells[1].Value = (Util.ConvertirDecimal(oNodoCuentaAuxiliar.Cells[1].Value) + mImporte); // mImporteTotal;
                         * oNodoCuentaDeMayor.Cells[1].Value = (Util.ConvertirDecimal(oNodoCuentaDeMayor.Cells[1].Value) + mImporte);
                         * oNodoSubcuenta.Cells[1].Value = (Util.ConvertirDecimal(oNodoSubcuenta.Cells[1].Value) + mImporte);
                         * oNodoCuenta.Cells[1].Value = (Util.ConvertirDecimal(oNodoCuenta.Cells[1].Value) + mImporte);
                         * oNodoSucursal.Cells[1].Value = (Util.ConvertirDecimal(oNodoSucursal.Cells[1].Value) + mImporte);
                         */
                    }

                    // Se marca la cuenta, para que ya no se semanalice hasta el final
                    if (oNodoCuentaAuxiliar.Tag == null)
                    {
                        oNodoCuentaAuxiliar.Tag = true;
                    }
                }
                else
                {
                    DateTime dIniSem = UtilTheos.InicioSemanaSabAVie(oReg.Fecha).Date;
                    int      iCol    = this.tgvDatos.Columns["Sem" + dIniSem.ToString("d")].Index;
                    // Para guardar los datos relacionados
                    if (oNodoCuentaAuxiliar.Cells[iCol].Tag == null)
                    {
                        oNodoCuentaAuxiliar.Cells[iCol].Tag = new List <int>();
                    }
                    (oNodoCuentaAuxiliar.Cells[iCol].Tag as List <int>).Add(oReg.ContaEgresoDevengadoID);
                    // Para llenar el importe
                    oNodoCuentaAuxiliar.Cells[iCol].Value = (Util.Decimal(oNodoCuentaAuxiliar.Cells[iCol].Value) + oReg.ImporteDev);
                }
            }

            // Se llenan los datos de devengados especiales
            DateTime dHastaMas1 = dHasta.AddDays(1);
            var      oDevEsp    = Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesde && c.Fecha < dHastaMas1)
                                  .OrderBy(c => c.Duenio).ThenBy(c => c.Cuenta).ThenBy(c => c.Subcuenta).ThenBy(c => c.CuentaDeMayor).ThenBy(c => c.CuentaAuxiliar)
                                  .ThenByDescending(c => c.Fecha);
            TreeGridNode oNodoDuenio = oNodoCuenta = oNodoSubcuenta = oNodoCuentaDeMayor = oNodoCuentaAuxiliar = null;
            string       sDuenio     = sCuenta = sSubcuenta = sCuentaDeMayor = sCuentaAuxiliar = "";

            foreach (var oReg in oDevEsp)
            {
                // Nodo de Sucursal
                if (oReg.Duenio != sDuenio)
                {
                    sDuenio         = oReg.Duenio;
                    oNodoDuenio     = this.tgvDatos.Nodes.Add(sDuenio);
                    oNodoDuenio.Tag = true; // Se marca como true para indicar que es devengado especial
                    sCuenta         = "";
                }
                // Nodo de Cuenta
                if (oReg.Cuenta != sCuenta)
                {
                    sCuenta     = oReg.Cuenta;
                    oNodoCuenta = oNodoDuenio.Nodes.Add(sCuenta);
                    sSubcuenta  = "";
                }
                // Nodo de Subcuenta
                if (oReg.Subcuenta != sSubcuenta)
                {
                    sSubcuenta     = oReg.Subcuenta;
                    oNodoSubcuenta = oNodoCuenta.Nodes.Add(sSubcuenta);
                    sCuentaDeMayor = "";
                }
                // Nodo de Cuenta de mayor
                if (oReg.CuentaDeMayor != sCuentaDeMayor)
                {
                    sCuentaDeMayor     = oReg.CuentaDeMayor;
                    oNodoCuentaDeMayor = oNodoSubcuenta.Nodes.Add(sCuentaDeMayor);
                    sCuentaAuxiliar    = "";
                }
                // Se agrega la cuenta auxiliar
                if (oReg.CuentaAuxiliar != sCuentaAuxiliar)
                {
                    sCuentaAuxiliar     = oReg.CuentaAuxiliar;
                    oNodoCuentaAuxiliar = oNodoCuentaDeMayor.Nodes.Add(oReg.CuentaAuxiliar);
                }

                // Se meten los valores de las semanas, y los totales

                /* DateTime dIniSem = UtilTheos.InicioSemanaSabAVie(oReg.Fecha).Date;
                 * int iCol = this.tgvDatos.Columns["Sem" + dIniSem.ToString("d")].Index;
                 * // Para llenar el importe
                 * oNodoCuentaAuxiliar.Cells[iCol].Value = (Util.ConvertirDecimal(oNodoCuentaAuxiliar.Cells[iCol].Value) + oReg.ImporteDev);
                 */
                if (oReg.PeriodicidadMes.HasValue)
                {
                    DateTime dInicioPer = oReg.Fecha.DiaPrimero().Date;
                    DateTime dFinPer = dInicioPer.AddMonths(oReg.PeriodicidadMes.Valor()).AddDays(-1);
                    decimal  mImporteDiario = (oReg.ImporteDev / ((dFinPer - dInicioPer).Days + 1));
                    decimal  mImporte; int iDias;
                    DateTime dIniSem = UtilTheos.InicioSemanaSabAVie(dInicioPer).Date;
                    for (int iCol = (this.tgvDatos.Columns["Sem" + dIniSem.ToString("d")].Index); iCol < this.tgvDatos.Columns.Count; iCol++)
                    {
                        // Se verifica si se debe de seguir semanalizando
                        if (oReg.FinSemanalizar.HasValue && oReg.FinSemanalizar <= dIniSem)
                        {
                            break;
                        }
                        // Se verifica la fecha final,
                        if (oNodoCuentaAuxiliar.Tag != null && dIniSem > dFinPer)
                        {
                            break;
                        }

                        // Se calcula el importe correspondiente
                        DateTime dFinSem = dIniSem.AddDays(6);
                        if (dIniSem < dInicioPer)
                        {
                            iDias = dFinSem.Day;
                        }
                        else if (dIniSem <= dFinPer && dFinSem > dFinPer)
                        {
                            iDias = ((dIniSem.DiaUltimo().Day - dIniSem.Day) + 1);
                        }
                        else if (dIniSem > dFinPer && (dIniSem - dFinPer).Days < 7)
                        {
                            iDias = (dIniSem.Day - 1);
                            iCol--;
                        }
                        else
                        {
                            iDias = 7;
                        }
                        // int iDias = (dIniSem < dInicioPer ? dFinSem.Day : (dFinSem > dFinPer ? ((dIniSem.DiaUltimo().Day - dIniSem.Day) + 1) : 7));
                        mImporte = (mImporteDiario * iDias);
                        dIniSem  = dIniSem.AddDays(7);

                        // Para guardar los datos relacionados, para el grid de detalle devengado
                        if (oNodoCuentaAuxiliar.Cells[iCol].Tag == null)
                        {
                            oNodoCuentaAuxiliar.Cells[iCol].Tag = new List <int>();
                        }
                        (oNodoCuentaAuxiliar.Cells[iCol].Tag as List <int>).Add(oReg.ContaEgresoDevengadoEspecialID);

                        // Para llenar las celdas
                        oNodoCuentaAuxiliar.Cells[iCol].Value = (Util.Decimal(oNodoCuentaAuxiliar.Cells[iCol].Value) + mImporte); // mImporte;
                    }

                    // Se marca la cuenta, para que ya no se semanalice hasta el final
                    if (oNodoCuentaAuxiliar.Tag == null)
                    {
                        oNodoCuentaAuxiliar.Tag = true;
                    }
                }
                else
                {
                    DateTime dIniSem = UtilTheos.InicioSemanaSabAVie(oReg.Fecha).Date;
                    int      iCol    = this.tgvDatos.Columns["Sem" + dIniSem.ToString("d")].Index;
                    // Para guardar los datos relacionados, para el grid de detalle devengado
                    if (oNodoCuentaAuxiliar.Cells[iCol].Tag == null)
                    {
                        oNodoCuentaAuxiliar.Cells[iCol].Tag = new List <int>();
                    }
                    (oNodoCuentaAuxiliar.Cells[iCol].Tag as List <int>).Add(oReg.ContaEgresoDevengadoEspecialID);
                    // Para llenar el importe
                    oNodoCuentaAuxiliar.Cells[iCol].Value = (Util.Decimal(oNodoCuentaAuxiliar.Cells[iCol].Value) + oReg.ImporteDev);
                }
            }

            // Se llena el nuevo grupo de Empresa (Totales)
            int iColCuenta = ColsCuentas.Cuenta;

            this.tgvDatos.Nodes.Insert(0, new TreeGridNode());
            var oNodEmpresa = this.tgvDatos.Nodes[0];

            oNodEmpresa.Cells[iColCuenta].Value = "EMPRESA";
            foreach (var oNodSucursal in this.tgvDatos.Nodes)
            {
                if (Util.Cadena(oNodSucursal.Cells[iColCuenta].Value) == "EMPRESA")
                {
                    continue;
                }
                foreach (var oNodCuenta in oNodSucursal.Nodes)
                {
                    var oNECuenta = oNodEmpresa.Nodes.FirstOrDefault(c => c.Cells[iColCuenta].Value.ToString() == oNodCuenta.Cells[iColCuenta].Value.ToString());
                    if (oNECuenta == null)
                    {
                        oNECuenta = oNodEmpresa.Nodes.Add(oNodCuenta.Cells[iColCuenta].Value);
                    }
                    foreach (var oNodSubcuenta in oNodCuenta.Nodes)
                    {
                        var oNESubcuenta = oNECuenta.Nodes.FirstOrDefault(c => c.Cells[iColCuenta].Value.ToString() == oNodSubcuenta.Cells[iColCuenta].Value.ToString());
                        if (oNESubcuenta == null)
                        {
                            oNESubcuenta = oNECuenta.Nodes.Add(oNodSubcuenta.Cells[iColCuenta].Value);
                        }
                        foreach (var oNodCuentaDeMayor in oNodSubcuenta.Nodes)
                        {
                            var oNECuentaDeMayor = oNESubcuenta.Nodes.FirstOrDefault(c =>
                                                                                     c.Cells[iColCuenta].Value.ToString() == oNodCuentaDeMayor.Cells[iColCuenta].Value.ToString());
                            if (oNECuentaDeMayor == null)
                            {
                                oNECuentaDeMayor = oNESubcuenta.Nodes.Add(oNodCuentaDeMayor.Cells[iColCuenta].Value);
                            }
                            foreach (var oNodCuentaAuxiliar in oNodCuentaDeMayor.Nodes)
                            {
                                var oNECuentaAuxiliar = oNECuentaDeMayor.Nodes.FirstOrDefault(c =>
                                                                                              c.Cells[iColCuenta].Value.ToString() == oNodCuentaAuxiliar.Cells[iColCuenta].Value.ToString());
                                if (oNECuentaAuxiliar == null)
                                {
                                    oNECuentaAuxiliar = oNECuentaDeMayor.Nodes.Add(oNodCuentaAuxiliar.Cells[iColCuenta].Value);
                                }

                                for (int iCol = 2; iCol < this.tgvDatos.Columns.Count; iCol++)
                                {
                                    decimal mImporte = Util.Decimal(oNodCuentaAuxiliar.Cells[iCol].Value);
                                    oNECuentaAuxiliar.Cells[iCol].Value = (Util.Decimal(oNECuentaAuxiliar.Cells[iCol].Value) + mImporte);
                                }
                            }
                        }
                    }
                }
            }

            // Se llenan los totales
            foreach (var oNodSucursal in this.tgvDatos.Nodes)
            {
                foreach (var oNodCuenta in oNodSucursal.Nodes)
                {
                    foreach (var oNodSubcuenta in oNodCuenta.Nodes)
                    {
                        foreach (var oNodCuentaDeMayor in oNodSubcuenta.Nodes)
                        {
                            foreach (var oNodCuentaAuxiliar in oNodCuentaDeMayor.Nodes)
                            {
                                for (int iCol = 2; iCol < this.tgvDatos.Columns.Count; iCol++)
                                {
                                    decimal mImporte = Util.Decimal(oNodCuentaAuxiliar.Cells[iCol].Value);
                                    // Para los niveles superiores
                                    oNodCuentaDeMayor.Cells[iCol].Value = (Util.Decimal(oNodCuentaDeMayor.Cells[iCol].Value) + mImporte);
                                    oNodSubcuenta.Cells[iCol].Value     = (Util.Decimal(oNodSubcuenta.Cells[iCol].Value) + mImporte);
                                    oNodCuenta.Cells[iCol].Value        = (Util.Decimal(oNodCuenta.Cells[iCol].Value) + mImporte);
                                    oNodSucursal.Cells[iCol].Value      = (Util.Decimal(oNodSucursal.Cells[iCol].Value) + mImporte);
                                    // Para la columna de totales
                                    oNodCuentaAuxiliar.Cells[1].Value = (Util.Decimal(oNodCuentaAuxiliar.Cells[1].Value) + mImporte); // mImporteTotal;
                                    oNodCuentaDeMayor.Cells[1].Value  = (Util.Decimal(oNodCuentaDeMayor.Cells[1].Value) + mImporte);
                                    oNodSubcuenta.Cells[1].Value      = (Util.Decimal(oNodSubcuenta.Cells[1].Value) + mImporte);
                                    oNodCuenta.Cells[1].Value         = (Util.Decimal(oNodCuenta.Cells[1].Value) + mImporte);
                                    oNodSucursal.Cells[1].Value       = (Util.Decimal(oNodSucursal.Cells[1].Value) + mImporte);
                                }
                            }
                        }
                    }
                }
            }

            // Se aplica el formato y el color
            foreach (var oNodSucursal in this.tgvDatos.Nodes)
            {
                // Se aplica el formato
                oNodSucursal.DefaultCellStyle.BackColor = Color.FromArgb(58, 79, 109);
                oNodSucursal.DefaultCellStyle.ForeColor = Color.White;
                oNodSucursal.DefaultCellStyle.Font      = new Font(this.tgvDatos.Font, FontStyle.Bold);
                //
                oNodSucursal.Expand();
                // Si su valor es cero, se pone un guión
                this.PonerGuionCeldas(oNodSucursal);
                foreach (var oNodCuenta in oNodSucursal.Nodes)
                {
                    // Se aplica el formato
                    oNodCuenta.DefaultCellStyle.BackColor = Color.FromArgb(67, 87, 123);
                    oNodCuenta.DefaultCellStyle.ForeColor = Color.White;
                    oNodCuenta.DefaultCellStyle.Font      = new Font(this.tgvDatos.Font, FontStyle.Bold);
                    oNodCuenta.DefaultCellStyle.Font      = new Font(this.tgvDatos.Font.FontFamily, (float)7.75);
                    //
                    oNodCuenta.Expand();
                    // Si su valor es cero, se pone un guión
                    this.PonerGuionCeldas(oNodCuenta);
                    foreach (var oNodSubcuenta in oNodCuenta.Nodes)
                    {
                        // Se aplica el formato
                        oNodSubcuenta.DefaultCellStyle.BackColor = Color.FromArgb(0, 112, 192);
                        oNodSubcuenta.DefaultCellStyle.ForeColor = Color.White;
                        //
                        oNodSubcuenta.Expand();
                        // Si su valor es cero, se pone un guión
                        this.PonerGuionCeldas(oNodSubcuenta);
                        foreach (var oNodCuentaDeMayor in oNodSubcuenta.Nodes)
                        {
                            // Se aplica el formato
                            oNodCuentaDeMayor.DefaultCellStyle.ForeColor = Color.FromArgb(58, 79, 109);
                            oNodCuentaDeMayor.DefaultCellStyle.Font      = new Font(this.tgvDatos.Font, FontStyle.Bold);
                            oNodCuentaDeMayor.DefaultCellStyle.Font      = new Font(this.tgvDatos.Font.FontFamily, (float)7.75);
                            // Si su valor es cero, se pone un guión
                            this.PonerGuionCeldas(oNodCuentaDeMayor);
                            foreach (var oNodCuentaAuxiliar in oNodCuentaDeMayor.Nodes)
                            {
                                oNodCuentaAuxiliar.DefaultCellStyle.ForeColor = Color.FromArgb(58, 79, 109);
                                // Si su valor es cero, se pone un guión
                                this.PonerGuionCeldas(oNodCuentaAuxiliar);
                            }
                        }
                    }
                }
            }

            Cargando.Cerrar();
        }
Esempio n. 21
0
        private void Ncf_CrearNotaDeCreditoFiscal()
        {
            // Se verifica si hay ventas seleccionadas
            if (this.dgvNcf_Facturas.ContarIncidencias("Ncf_Aplicar", true) == 0)
            {
                UtilLocal.MensajeAdvertencia("No hay ninguna venta seleccionada.");
                return;
            }

            // Se obtiene el concepto
            var oConcepto = UtilLocal.ObtenerValor("Concepto de Nota de Crédito:", "", MensajeObtenerValor.Tipo.TextoLargo);

            if (oConcepto == null)
            {
                return;
            }

            // Se valida el permiso
            var oResU = UtilLocal.ValidarObtenerUsuario("Ventas.NotasDeCreditoFiscales.Agregar");

            if (oResU.Error)
            {
                return;
            }
            int iUsuarioID = oResU.Respuesta.UsuarioID;
            // Se solicita la validación de autorización
            var oResA       = UtilLocal.ValidarObtenerUsuario("Autorizaciones.Ventas.NotasDeCreditoFiscales.Agregar", "Autorización");
            int?iAutorizoID = (oResA.Respuesta == null ? null : (int?)oResA.Respuesta.UsuarioID);

            // Se genera el detalle de la nota de crédito, para mandar a hacer la factura
            decimal mTotal       = 0;
            var     oNotaDetalle = new List <ProductoVenta>();

            oNotaDetalle.Add(new ProductoVenta()
            {
                NombreDeParte = Util.Cadena(oConcepto), UnidadDeMedida = "."
            });
            // Se meten las facturas afectadas
            foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows)
            {
                if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value))
                {
                    continue;
                }

                int     iVentaID = Util.Entero(oFila.Cells["Ncf_VentaID"].Value);
                decimal mImporte = Util.Decimal(oFila.Cells["Ncf_Diferencia"].Value);
                mTotal += mImporte;

                var oVenta = Datos.GetEntity <Venta>(c => c.VentaID == iVentaID && c.Estatus);
                oNotaDetalle.Add(new ProductoVenta()
                {
                    NumeroDeParte  = iVentaID.ToString(),                         // Se usa para mete la VentaID
                    NombreDeParte  = string.Format("FACTURA: {0}", oVenta.Folio), // Se usa para mostrar la factura
                    Cantidad       = 1,
                    PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(mImporte),
                    Iva            = UtilTheos.ObtenerIvaDePrecio(mImporte),
                    UnidadDeMedida = "."
                });
            }
            if (mTotal == 0)
            {
                return;
            }

            Cargando.Mostrar();

            // Se manda hacer la nota de crédito fiscal
            var oRes = VentasLoc.GenerarNotaDeCreditoFiscal(oNotaDetalle, this.Cliente.ClienteID, iUsuarioID);

            if (oRes.Error)
            {
                Cargando.Cerrar();
                UtilLocal.MensajeAdvertencia(string.Format("Ocurrió un error al hacer la Nota de Crédito Fiscal\n\n{0}", oRes.Mensaje));
                return;
            }

            // Se modifica el detalle de la Nota de Crédito Fiscal, con datos adicionales de las ventas afectadas
            var oNcVentas = Datos.GetListOf <NotaDeCreditoFiscalDetalle>(c => c.NotaDeCreditoFiscalID == oRes.Respuesta);

            foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows)
            {
                if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value))
                {
                    continue;
                }

                int iVentaID  = Util.Entero(oFila.Cells["Ncf_VentaID"].Value);
                int iListaPre = Util.Entero(oFila.Cells["Ncf_ListaDePrecios"].Value);

                var oVentaV  = Datos.GetEntity <VentasView>(c => c.VentaID == iVentaID);
                var oNcVenta = oNcVentas.FirstOrDefault(c => c.VentaID == iVentaID);
                if (oNcVenta == null)
                {
                    continue;
                }
                oNcVenta.ListaDePreciosUsada = iListaPre;
                oNcVenta.ImporteAntes        = oVentaV.Total;
                Datos.Guardar <NotaDeCreditoFiscalDetalle>(oNcVenta);
            }

            // Se descuenta el importe en cada artículo de las ventas afectadas
            foreach (DataGridViewRow oFila in this.dgvNcf_Facturas.Rows)
            {
                if (!Util.Logico(oFila.Cells["Ncf_Aplicar"].Value))
                {
                    continue;
                }

                int     iVentaID  = Util.Entero(oFila.Cells["Ncf_VentaID"].Value);
                int     iListaPre = Util.Entero(oFila.Cells["Ncf_ListaDePrecios"].Value);
                var     oPartes   = Datos.GetListOf <VentaDetalle>(c => c.VentaID == iVentaID && c.Estatus);
                decimal mPrecio   = 0;
                foreach (var oReg in oPartes)
                {
                    var oPrecio = Datos.GetEntity <PartePrecio>(c => c.ParteID == oReg.ParteID && c.Estatus);
                    switch (iListaPre)
                    {
                    case 1: mPrecio = oPrecio.PrecioUno.Valor(); break;

                    case 2: mPrecio = oPrecio.PrecioDos.Valor(); break;

                    case 3: mPrecio = oPrecio.PrecioTres.Valor(); break;

                    case 4: mPrecio = oPrecio.PrecioCuatro.Valor(); break;

                    case 5: mPrecio = oPrecio.PrecioCinco.Valor(); break;
                    }
                    // Se calcula el Iva
                    oReg.PrecioUnitario = UtilTheos.ObtenerPrecioSinIva(mPrecio);
                    oReg.Iva            = (mPrecio - oReg.PrecioUnitario);
                    Datos.Guardar <VentaDetalle>(oReg);
                }
            }

            // Se crea la póliza contable correspondiente (AfeConta)
            // Una póliza por cada venta afectada
            var oNotaV = Datos.GetEntity <NotasDeCreditoFiscalesView>(c => c.NotaDeCreditoFiscalID == oRes.Respuesta);

            foreach (var oReg in oNcVentas)
            {
                ContaProc.CrearPolizaAfectacion(Cat.ContaAfectaciones.NotaDeCreditoDescuentoVenta, oReg.NotaDeCreditoFiscalDetalleID
                                                , (oNotaV.Serie + oNotaV.Folio), oNotaV.Cliente);
            }

            // Se guarda la autorización
            VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.NotaDeCreditoFiscalCrear, "NotaDeCreditoFiscal", oRes.Respuesta, iAutorizoID);

            Cargando.Cerrar();
            this.NcfLlenarFacturas();
        }
Esempio n. 22
0
        private bool Completar9500()
        {
            // Se validan las partes
            if (!this.ctlComDetalle.Validar())
            {
                return(false);
            }

            //if (Util.ControlAlFrente(this.pnlCompletar) == this.ctlComDetalle)
            //{
            //}

            // Se verifica que se haya hecho el pago del anticipo
            Cotizacion9500 o9500 = this.ctlPartes.oCotizacion9500;

            if (!Datos.Exists <Venta>(c => c.VentaID == o9500.AnticipoVentaID &&
                                      (c.VentaEstatusID == Cat.VentasEstatus.Completada || c.VentaEstatusID == Cat.VentasEstatus.Cobrada)))
            {
                UtilLocal.MensajeAdvertencia("Al parecer no se ha realizado el pago correspondiente al Anticipo. No se puede continuar.");
                return(false);
            }

            // Se confirma la operación
            if (UtilLocal.MensajePregunta(string.Format("¿Estás seguro que deseas completar el 9500 con el folio {0}?\n\n{1}"
                                                        , this.ctlPartes.oCotizacion9500.Cotizacion9500ID, this.ctlPartes.o9500Sel["lisDescripcion"])) != DialogResult.Yes)
            {
                return(false);
            }

            // Se guardan los datos
            DateTime dAhora = DateTime.Now;

            // Se cancela la venta del anticipo

            /* Ya no. Ahora todo esto se hace al cobrar la venta final
             * oVenta.VentaEstatusID = Cat.VentasEstatus.Cancelada;
             * Datos.Guardar<Venta>(oVenta);
             * // Se genera una devolución de efectivo (si se realizó un pago) de la venta cancelada, pues se generará una nueva venta con el importe total
             * if (oVentaPago != null)
             *  VentasProc.GenerarDevolucionDeEfectivo(o9500.AnticipoVentaID.Valor(), o9500.Anticipo);
             */

            // Se genera la venta correspondiente al 9500
            // var o9500Detalle = General.GetListOf<Cotizacion9500Detalle>(q => q.Estatus && q.Cotizacion9500ID == oCotizacion9500.Cotizacion9500ID);
            var oCliente = Datos.GetEntity <Cliente>(q => q.ClienteID == o9500.ClienteID && q.Estatus);
            var oDetalle = this.ctlComDetalle.ProductosSel();
            var oVenta   = new Venta()
            {
                Fecha                 = dAhora,
                ClienteID             = o9500.ClienteID,
                VentaEstatusID        = Cat.VentasEstatus.Realizada,
                RealizoUsuarioID      = o9500.RealizoUsuarioID,
                ComisionistaClienteID = o9500.ComisionistaClienteID
            };
            var oVentaDetalle = new List <VentaDetalle>();

            foreach (var oParte in oDetalle)
            {
                // Se toma el precio de la tabla "PartePrecio", pues pudo haber sido cambiado por el encargado de Compras
                var     oPartePrecio = Datos.GetEntity <PartePrecio>(q => q.ParteID == oParte.ParteID);
                decimal mPrecio      = UtilDatos.PartePrecioDeVenta(oPartePrecio, oCliente.ListaDePrecios);
                // Se agrega la parte al detalle de la venta
                oVentaDetalle.Add(new VentaDetalle()
                {
                    ParteID           = oParte.ParteID,
                    Costo             = oPartePrecio.Costo.Valor(),
                    CostoConDescuento = (oPartePrecio.CostoConDescuento ?? oPartePrecio.Costo.Valor()),
                    Cantidad          = oParte.Cantidad,
                    PrecioUnitario    = UtilTheos.ObtenerPrecioSinIva(mPrecio, 3),
                    Iva = UtilTheos.ObtenerIvaDePrecio(mPrecio, 3)
                });
            }
            // Se guarda la venta
            Guardar.Venta(oVenta, oVentaDetalle);

            // Se modifica el dato de la venta correspondiente al 9500
            o9500.VentaID           = oVenta.VentaID;
            o9500.EstatusGenericoID = Cat.EstatusGenericos.PorCompletar;
            Datos.Guardar <Cotizacion9500>(o9500);

            // Se restaura
            this.ctlPartes.ComCliente = null;
            this.pnlEnTotales.Controls.Remove(this.pnlCompletar);
            this.pnlCompletar.Dispose();
            this.pnlCompletar = null;
            this.CambiarOpcion(eOpcion.Agregar);
            this.ctlPartes.tab9500.SelectedIndex = 0;

            // Se muestra una notifiación con el resultado
            UtilLocal.MostrarNotificacion("Cotización 9500 guardada correctamente.");

            // Se retorna falso para que no se quite la opción de 9500
            return(false);
        }
Esempio n. 23
0
        private void CargarSemanas(int iClienteID)
        {
            if (this.oDatos == null)
            {
                return;
            }

            var     oSemanas  = this.AgruparPorEntero(this.oDatos.Where(c => c.ClienteID == iClienteID).GroupBy(c => UtilTheos.SemanaSabAVie(c.Fecha)));
            decimal mTotal    = (oSemanas.Count() > 0 ? oSemanas.Sum(c => c.Actual) : 0);
            decimal mPromedio = (oSemanas.Count() > 0 ? oSemanas.Average(c => c.Actual) : 0);

            this.dgvSemanas.Rows.Clear();
            this.chrPorSemana.Series["Actual"].Points.Clear();
            this.chrPorSemana.Series["Anterior"].Points.Clear();
            this.chrPorSemana.Series["Promedio"].Points.Clear();
            foreach (var oReg in oSemanas)
            {
                int iFila = this.dgvSemanas.Rows.Add(oReg.Llave, oReg.Llave, oReg.Actual, Util.DividirONull(oReg.Actual, oReg.Anterior)
                                                     , Util.DividirONull(oReg.Actual, mTotal));
                this.chrPorSemana.Series["Actual"].Points.AddXY(oReg.Llave, oReg.Actual);
                this.chrPorSemana.Series["Anterior"].Points.AddXY(oReg.Llave, oReg.Anterior);
                this.chrPorSemana.Series["Promedio"].Points.AddXY(oReg.Llave, mPromedio);
                if (oReg.Actual < mPromedio)
                {
                    this.dgvSemanas.Rows[iFila].DefaultCellStyle.ForeColor = Color.Black;
                }
            }
            this.txtPromedioSemanas.Text = mPromedio.ToString();
        }
Esempio n. 24
0
        private void CargarDatos()
        {
            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 llenan las columnas del año
            int iAnio = Util.Entero(this.cmbAnio.Text);

            this.LlenarColumnasAnio(iAnio);

            // Se obtienen los datos para los ingresos
            int      iSucursalID = Util.Entero(this.cmbSucursal.SelectedValue);
            DateTime dDesde      = new DateTime(iAnio, 1, 1);
            DateTime dHasta      = new DateTime(iAnio, 12, 31);
            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);
            var oSemanas = oDatos.Where(c => c.Fecha >= dDesde)
                           .GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha), c.Sucursal })
                           .Select(c => new { c.Key.Semana, c.Key.Sucursal, PrecioSinIva = c.Sum(s => s.PrecioSinIvaActual), Costo = c.Sum(s => s.CostoDescActual) })
                           .OrderBy(c => c.Sucursal).ThenBy(c => c.Semana);

            // Se agrega la fila de ingresos
            int iFilaIngresos = this.dgvDatos.Rows.Add("+ Ingresos", oSemanas.Sum(c => c.PrecioSinIva), oSemanas.Average(c => c.PrecioSinIva));

            this.dgvDatos.Rows[iFilaIngresos].DefaultCellStyle.Font = oFuenteT;
            // Se llenan los ingresos
            string sSucursal = "";
            int    iFila     = 0;

            foreach (var oReg in oSemanas)
            {
                if (sSucursal != oReg.Sucursal)
                {
                    sSucursal = oReg.Sucursal;
                    iFila     = this.dgvDatos.Rows.Add(sSucursal, oSemanas.Where(c => c.Sucursal == sSucursal).Sum(c => c.PrecioSinIva)
                                                       , oSemanas.Where(c => c.Sucursal == sSucursal).Average(c => c.PrecioSinIva));
                }

                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value         = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.PrecioSinIva);
                this.dgvDatos[sSemana, iFilaIngresos].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaIngresos].Value) + oReg.PrecioSinIva);
            }

            // Se agrega la fila de Costos
            int iFilaCostos = this.dgvDatos.Rows.Add("- Costos", oSemanas.Sum(c => c.Costo), oSemanas.Average(c => c.Costo));

            this.dgvDatos.Rows[iFilaCostos].DefaultCellStyle.Font = oFuenteT;
            // Se llenan los costos
            sSucursal = "";
            foreach (var oReg in oSemanas)
            {
                if (sSucursal != oReg.Sucursal)
                {
                    sSucursal = oReg.Sucursal;
                    iFila     = this.dgvDatos.Rows.Add(sSucursal, oSemanas.Where(c => c.Sucursal == sSucursal).Sum(c => c.Costo)
                                                       , oSemanas.Where(c => c.Sucursal == sSucursal).Average(c => c.Costo));
                }

                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value       = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Costo);
                this.dgvDatos[sSemana, iFilaCostos].Value = (Util.Decimal(this.dgvDatos[sSemana, 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.ExecuteProcedure <pauContaCuentasPorSemana_Result>("pauContaCuentasPorSemana", oParams);
            var oGastosSemFijo = oGastos.GroupBy(c => new { Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha), c.Sucursal })
                                 .Select(c => new ContaProc.GastoSem()
            {
                Semana = c.Key.Semana, Grupo = c.Key.Sucursal, Importe = c.Sum(s => s.ImporteDev).Valor()
            });
            // Se obtiene los datos según el tipo de semanalización
            List <ContaProc.GastoSem> oGastosSem;

            if (this.rdbSemanalizar.Checked)
            {
                oGastosSem = ContaProc.GastosSemanalizados(oGastos, Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name));
            }
            else
            {
                oGastosSem = oGastosSemFijo.OrderBy(c => c.Grupo).ThenBy(c => c.Semana).ToList();
            }

            // Se agrega la fila de los Gastos
            int iFilaGastos = this.dgvDatos.Rows.Add("- Gastos", oGastosSem.Sum(c => c.Importe), oGastosSem.Average(c => c.Importe));

            this.dgvDatos.Rows[iFilaGastos].DefaultCellStyle.Font = oFuenteT;
            // Se llenan los gastos
            sSucursal = "";
            foreach (var oReg in oGastosSem)
            {
                if (sSucursal != oReg.Grupo)
                {
                    sSucursal = oReg.Grupo;
                    iFila     = this.dgvDatos.Rows.Add(sSucursal, oGastosSem.Where(c => c.Grupo == sSucursal).Sum(c => c.Importe)
                                                       , oGastosSem.Where(c => c.Grupo == sSucursal).Average(c => c.Importe));
                }

                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value       = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaGastos].Value = (Util.Decimal(this.dgvDatos[sSemana, 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
            DateTime dHastaMas1 = dHasta.AddDays(1);
            // Se obtiene los datos según el tipo de semanalización
            List <ContaProc.GastoSem> oGastosSemEsp;
            var oGastosSemEspFijo = Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesde && c.Fecha < dHastaMas1)
                                    .GroupBy(c => new { c.Duenio, Semana = UtilTheos.InicioSemanaSabAVie(c.Fecha) })
                                    .Select(c => new ContaProc.GastoSem()
            {
                Semana = c.Key.Semana, Grupo = c.Key.Duenio, Importe = c.Sum(s => s.ImporteDev)
            });

            if (this.rdbSemanalizar.Checked)
            {
                oGastosSemEsp = ContaProc.GastosSemanalizados(Datos.GetListOf <ContaEgresosDevengadoEspecialCuentasView>(c => c.Fecha >= dDesde && c.Fecha < dHastaMas1)
                                                              , Util.FechaHora(this.dgvDatos.Columns[this.dgvDatos.Columns.Count - 1].Name));
            }
            else
            {
                oGastosSemEsp = oGastosSemEspFijo.OrderBy(c => c.Grupo).ThenBy(c => c.Semana).ToList();
            }

            // Se agrega la fila de Especiales
            bool bHay     = (oGastosSemEspFijo.Count() > 0);
            int  iFilaEsp = this.dgvDatos.Rows.Add("- Especiales", (bHay ? oGastosSemEspFijo.Sum(c => c.Importe) : 0)
                                                   , (bHay ? oGastosSemEspFijo.Average(c => c.Importe) : 0));

            this.dgvDatos.Rows[iFilaEsp].DefaultCellStyle.Font = oFuenteT;
            // Se llenan los gastos
            string sDuenio = "";

            foreach (var oReg in oGastosSemEsp)
            {
                if (sDuenio != oReg.Grupo)
                {
                    sDuenio = oReg.Grupo;
                    iFila   = this.dgvDatos.Rows.Add(sDuenio, oGastosSemEspFijo.Where(c => c.Grupo == sDuenio).Sum(c => c.Importe)
                                                     , oGastosSemEspFijo.Where(c => c.Grupo == sDuenio).Average(c => c.Importe));
                }

                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value    = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaEsp].Value = (Util.Decimal(this.dgvDatos[sSemana, 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)
                          .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor()))
                          .Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) });
            var oInversiones = oReinversiones.Where(c => c.ContaSubcuentaID == Cat.ContaSubcuentas.ActivoFijo)
                               .GroupBy(c => UtilTheos.InicioSemanaSabAVie(c.FechaPoliza.Valor())).Select(c => new { Semana = c.Key, Importe = c.Sum(s => s.Cargo) });
            // Se agrega la fila de Reinversión
            decimal mDeudas          = (oDeudas.Count() > 0 ? oDeudas.Sum(c => c.Importe) : 0);
            decimal mDeudasProm      = (oDeudas.Count() > 0 ? oDeudas.Average(c => c.Importe) : 0);
            decimal mInversiones     = (oInversiones.Count() > 0 ? oInversiones.Sum(c => c.Importe) : 0);
            decimal mInversionesProm = (oInversiones.Count() > 0 ? oInversiones.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 oDeudas)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value            = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaReinversion].Value = (Util.Decimal(this.dgvDatos[sSemana, iFilaReinversion].Value) + oReg.Importe);
            }
            // Inversión
            iFila = this.dgvDatos.Rows.Add("Inversiones", mInversiones, mInversionesProm);
            foreach (var oReg in oInversiones)
            {
                string sSemana = oReg.Semana.ToShortDateString();
                this.dgvDatos[sSemana, iFila].Value            = (Util.Decimal(this.dgvDatos[sSemana, iFila].Value) + oReg.Importe);
                this.dgvDatos[sSemana, iFilaReinversion].Value = (Util.Decimal(this.dgvDatos[sSemana, 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();
        }
Esempio n. 25
0
        private void AplicarPrecio(string sColumna)
        {
            var  frmCalculo = new MasterCostos();
            bool bCosto     = (sColumna == "Costo");

            frmCalculo.MostrarActualizarPrecios = bCosto;
            frmCalculo.Text = (bCosto ? "Costo" : ("Precio " + sColumna.Derecha(1)));
            if (frmCalculo.ShowDialog(Principal.Instance) == DialogResult.OK)
            {
                foreach (DataGridViewRow Fila in this.dgvDatos.Rows)
                {
                    if (!Util.Logico(Fila.Cells["Procesar"].Value))
                    {
                        continue;
                    }

                    // Se aplica el nuevo costo / precio, según aplique
                    if (frmCalculo.TipoDePrecio == 1)
                    {
                        Fila.Cells[sColumna].Value = frmCalculo.Importe;
                        if (bCosto)
                        {
                            Fila.Cells["CostoConDescuento"].Value = frmCalculo.Importe;
                            this.dgvDatos.Columns[sColumna].Tag   = ("Importe fijo: " + frmCalculo.Importe.ToString(GlobalClass.FormatoMoneda));
                        }
                    }
                    else if (frmCalculo.TipoDePrecio == 2)
                    {
                        Fila.Cells[sColumna].Value = Math.Round(Util.Decimal(Fila.Cells[sColumna].Value) * (1 + (frmCalculo.Porcentaje / 100)), 2);
                        if (bCosto)
                        {
                            Fila.Cells["CostoConDescuento"].Value =
                                Math.Round(Util.Decimal(Fila.Cells["CostoConDescuento"].Value) * (1 + (frmCalculo.Porcentaje / 100)), 2);
                            this.dgvDatos.Columns[sColumna].Tag = ("Incremento o descuento: " + frmCalculo.Porcentaje.ToString() + "%");
                        }
                    }
                    else
                    {
                        Fila.Cells[sColumna].Value = (Util.Decimal(Fila.Cells[sColumna].Value) + frmCalculo.Importe);
                        if (bCosto)
                        {
                            Fila.Cells["CostoConDescuento"].Value = (Util.Decimal(Fila.Cells["CostoConDescuento"].Value) + frmCalculo.Importe);
                            this.dgvDatos.Columns[sColumna].Tag   = ("Incremento o descuento: " + frmCalculo.Importe.ToString(GlobalClass.FormatoMoneda));
                        }
                    }

                    // Si es un precio, se aplica el redondeo
                    if (!bCosto)
                    {
                        Fila.Cells[sColumna].Value = UtilTheos.AplicarRedondeo(Util.Decimal(Fila.Cells[sColumna].Value));
                    }

                    // Se actualizan los precios, si aplica
                    if (frmCalculo.ActualizarPrecios)
                    {
                        decimal mCosto = Util.Decimal(Fila.Cells["Costo"].Value);
                        Fila.Cells["Precio1"].Value = UtilTheos.AplicarRedondeo(mCosto * Util.Decimal(Fila.Cells["Por1"].Value));
                        Fila.Cells["Precio2"].Value = UtilTheos.AplicarRedondeo(mCosto * Util.Decimal(Fila.Cells["Por2"].Value));
                        Fila.Cells["Precio3"].Value = UtilTheos.AplicarRedondeo(mCosto * Util.Decimal(Fila.Cells["Por3"].Value));
                        Fila.Cells["Precio4"].Value = UtilTheos.AplicarRedondeo(mCosto * Util.Decimal(Fila.Cells["Por4"].Value));
                        Fila.Cells["Precio5"].Value = UtilTheos.AplicarRedondeo(mCosto * Util.Decimal(Fila.Cells["Por5"].Value));
                    }
                }
            }
            frmCalculo.Dispose();
        }
Esempio n. 26
0
        private IEnumerable <TotalesClientesSemanas> ObtenerClientesSemanas(List <pauCuadroDeControlGeneralNuevo_Result> oDatos)
        {
            var oGrupo = oDatos.GroupBy(c => new { c.ClienteID, Semana = UtilTheos.SemanaSabAVie(c.Fecha) });

            string sCalculo = this.cmbCalculo.Text;

            switch (sCalculo)
            {
            case "Utilidad":
                return(oGrupo.Select(c => new TotalesClientesSemanas()
                {
                    ClienteID = c.Key.ClienteID,
                    Semana = c.Key.Semana,
                    Actual = c.Sum(s => s.Actual).Valor()
                }));

            case "Utilidad Desc.":
                return(oGrupo.Select(c => new TotalesClientesSemanas()
                {
                    ClienteID = c.Key.ClienteID,
                    Semana = c.Key.Semana,
                    Actual = c.Sum(s => s.UtilDescActual).Valor()
                }));

            case "Precio":
                return(oGrupo.Select(c => new TotalesClientesSemanas()
                {
                    ClienteID = c.Key.ClienteID,
                    Semana = c.Key.Semana,
                    Actual = c.Sum(s => s.PrecioActual).Valor()
                }));

            case "Costo":
                return(oGrupo.Select(c => new TotalesClientesSemanas()
                {
                    ClienteID = c.Key.ClienteID,
                    Semana = c.Key.Semana,
                    Actual = c.Sum(s => s.CostoActual).Valor()
                }));

            case "Costo Desc.":
                return(oGrupo.Select(c => new TotalesClientesSemanas()
                {
                    ClienteID = c.Key.ClienteID,
                    Semana = c.Key.Semana,
                    Actual = c.Sum(s => s.CostoDescActual).Valor()
                }));

            case "Ventas":
                return(oGrupo.Select(c => new TotalesClientesSemanas()
                {
                    ClienteID = c.Key.ClienteID,
                    Semana = c.Key.Semana,
                    Actual = c.Where(s => s.EsActual == true).Select(s => s.VentaID).Distinct().Count()
                }));

            case "Productos":
                return(oGrupo.Select(c => new TotalesClientesSemanas()
                {
                    ClienteID = c.Key.ClienteID,
                    Semana = c.Key.Semana,
                    Actual = c.Sum(s => s.ProductosActual).Valor()
                }));
            }

            return(null);
        }
Esempio n. 27
0
        private bool Agregar9500()
        {
            // Se valida la parte de "Partes"
            if (!this.ctlPartes.Validar())
            {
                return(false);
            }
            // Se pide el efectivo, si aplica
            if (!this.ctlCobro.CompletarCobro())
            {
                return(false);
            }
            // Se valida que exista una Medida genérica, para las nuevas partes
            if (Datos.GetEntity <Medida>(q => q.MedidaID == Cat.Medidas.Pieza && q.Estatus) == null)
            {
                UtilLocal.MensajeAdvertencia("No existe una Medida genérica para asignarle a las partes nuevas. No se puede continuar.");
                return(false);
            }

            // Se solicitan la autorizaciones, si se requiere
            int iAutorizoID = 0;

            if (this.ctlPartes.AutorizacionRequeridaPrecio || this.ctlPartes.AutorizacionRequeridaAnticipo)
            {
                string sPermiso = (this.ctlPartes.AutorizacionRequeridaPrecio ? "Autorizaciones.Ventas.9500.PrecioFueraDeRango" :
                                   "Autorizaciones.Ventas.9500.NoAnticipo");
                var Res = UtilLocal.ValidarObtenerUsuario(sPermiso, "Autorización");
                iAutorizoID = (Res.Respuesta == null ? 0 : Res.Respuesta.UsuarioID);
            }

            // Se procede a guardar los datos
            DateTime dAhora = DateTime.Now;
            // Se genera la Cotización 9500
            var o9500 = this.ctlPartes.Generar9500();

            o9500.Fecha            = dAhora;
            o9500.RealizoUsuarioID = this.ctlCobro.VendodorID;
            if (this.ctlCobro.ComisionistaID > 0)
            {
                o9500.ComisionistaClienteID = this.ctlCobro.ComisionistaID;
            }
            // Se genera el detalle del 9500
            var oParteGanancia = this.ctlPartes.ObtenerParteGanancia(null);
            var o9500Detalle   = new List <Cotizacion9500Detalle>();

            foreach (var Parte9500 in this.ctlPartes.Detalle)
            {
                // Si la parte no existe, se agrega
                if (Parte9500.Value.ParteID <= 0)
                {
                    int    iFila          = UtilLocal.findRowIndex(this.ctlPartes.dgvPartes, "Llave", Parte9500.Key);
                    string sNumeroDeParte = Util.Cadena(this.ctlPartes.dgvPartes["NumeroDeParte", iFila].Value);
                    string sDescripcion   = Util.Cadena(this.ctlPartes.dgvPartes["Descripcion", iFila].Value);
                    var    oLinea         = Datos.GetEntity <Linea>(q => q.LineaID == Parte9500.Value.LineaID && q.Estatus);
                    Parte  oParte         = new Parte()
                    {
                        NumeroParte  = sNumeroDeParte,
                        LineaID      = Parte9500.Value.LineaID,
                        MarcaParteID = Parte9500.Value.MarcaParteID,
                        ProveedorID  = Parte9500.Value.ProveedorID,
                        NombreParte  = sDescripcion,
                        Es9500       = true,
                        SubsistemaID = oLinea.SubsistemaID.Valor()
                    };

                    // Se agregan los precios
                    PartePrecio oPartePrecio = null;
                    if (oParteGanancia != null)
                    {
                        oPartePrecio = new PartePrecio()
                        {
                            Costo = Parte9500.Value.Costo,
                            PorcentajeUtilidadUno    = oParteGanancia.PorcentajeDeGanancia1,
                            PorcentajeUtilidadDos    = oParteGanancia.PorcentajeDeGanancia2,
                            PorcentajeUtilidadTres   = oParteGanancia.PorcentajeDeGanancia3,
                            PorcentajeUtilidadCuatro = oParteGanancia.PorcentajeDeGanancia4,
                            PorcentajeUtilidadCinco  = oParteGanancia.PorcentajeDeGanancia5,
                            PrecioUno    = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia1),
                            PrecioDos    = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia2),
                            PrecioTres   = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia3),
                            PrecioCuatro = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia4),
                            PrecioCinco  = UtilTheos.AplicarRedondeo(Parte9500.Value.Costo * oParteGanancia.PorcentajeDeGanancia5)
                        };
                    }

                    // Se guarda
                    Guardar.Parte(oParte, oPartePrecio);
                    Parte9500.Value.ParteID = oParte.ParteID;
                }

                // Se agrega la parte al detalle del 9500
                o9500Detalle.Add(Parte9500.Value);
            }

            // Se guardan los datos de 9500
            Guardar.c9500(o9500, o9500Detalle);

            // Se genera la venta con el anticipo
            var oVenta = new Venta()
            {
                ClienteID        = o9500.ClienteID,
                RealizoUsuarioID = o9500.RealizoUsuarioID
            };
            var oPrecioAnticipo = Datos.GetEntity <PartePrecio>(c => c.ParteID == Cat.Partes.AnticipoClientes && c.Estatus);
            var oVentaDetalle   = new VentaDetalle()
            {
                ParteID           = Cat.Partes.AnticipoClientes,
                Cantidad          = 1,
                PrecioUnitario    = o9500.Anticipo,
                Costo             = oPrecioAnticipo.Costo.Valor(),
                CostoConDescuento = (oPrecioAnticipo.CostoConDescuento ?? oPrecioAnticipo.Costo.Valor())
            };

            Guardar.Venta(oVenta, new List <VentaDetalle>()
            {
                oVentaDetalle
            });

            // Se guarda el dato de la venta con el anticipo en el registro de 9500
            o9500.AnticipoVentaID = oVenta.VentaID;
            Datos.Guardar <Cotizacion9500>(o9500);

            // Se guardan las autorizaciones, si hubiera
            if (this.ctlPartes.AutorizacionRequeridaPrecio)
            {
                VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.c9500PrecioFueraDeRango, Cat.Tablas.Tabla9500, o9500.Cotizacion9500ID, iAutorizoID);
            }
            if (this.ctlPartes.AutorizacionRequeridaAnticipo)
            {
                VentasProc.GenerarAutorizacion(Cat.AutorizacionesProcesos.c9500SinAnticipo, Cat.Tablas.Tabla9500, o9500.Cotizacion9500ID, iAutorizoID);
            }

            // Se muestra una notifiación con el resultado
            UtilLocal.MostrarNotificacion("Cotización 9500 guardada correctamente.");

            return(true);
        }