Exemplo n.º 1
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();
                }
            }
        }
Exemplo n.º 2
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();
        }
Exemplo n.º 3
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();
        }
Exemplo n.º 4
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);
        }