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(); } } }
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(); }
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(); }
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); }