private void btnCotizar_Click(object sender, EventArgs e) { try { #region Validaciones if (String.IsNullOrEmpty(txtPrecio.Text)) { ErrorAplicativo err = new ErrorAplicativo(); err.codigoError = -1; err.descripcionError = "Debe completar el campo Precio Unitario antes de continuar con la cotización"; FrmError frmError = new FrmError(); frmError.Controls["lblMensajeError"].Text = "Código Error: " + err.codigoError + " " + err.descripcionError; frmError.ShowDialog(); } if (String.IsNullOrEmpty(txtCantidad.Text)) { ErrorAplicativo err = new ErrorAplicativo(); err.codigoError = -1; err.descripcionError = "Debe completar el campo Cantidad antes de continuar con la cotización"; FrmError frmError = new FrmError(); frmError.Controls["lblMensajeError"].Text = "Código Error: " + err.codigoError + " " + err.descripcionError; frmError.ShowDialog(); } #endregion (ErrorAplicativo err, decimal precioCotizado)respuesta = expertoCotiz.CalcularPrecioCotizacion(Convert.ToDecimal(txtPrecio.Text), Convert.ToInt32(txtCantidad.Text), calidadPremium); if (respuesta.err.codigoError != 0) { FrmError frmError = new FrmError(); frmError.Controls["lblMensajeError"].Text = "Código Error: " + respuesta.err.codigoError + " " + respuesta.err.descripcionError; frmError.ShowDialog(); } lblPrecioCotizado.Text = String.Format("{0:c}", respuesta.precioCotizado); BorrarCampos(); } catch (Exception) { ErrorAplicativo err = new ErrorAplicativo(); err.codigoError = -1; err.descripcionError = "Ocurrió un error inesperado, compruebe haber ingresado datos correctos en los campos solicitados"; FrmError frmError = new FrmError(); frmError.Controls["lblMensajeError"].Text = "Código Error: " + err.codigoError + " " + err.descripcionError; frmError.ShowDialog(); } }
public (ErrorAplicativo, decimal) CalcularPrecioCotizacion(decimal precioUnitario, int cantidad, bool calidadPremium) { #region Validaciones ErrorAplicativo err = new ErrorAplicativo(); if (cantidad > paramAplicativo.prendas.Count) { err.codigoError = -1; err.descripcionError = "La cantidad indicada supera a la cantidad de stock disponible"; return(err, 0); } #endregion int porcentajeAumentoRebajaAplicar = paramAplicativo.prendas.First().caracteristica.porcentajeAumentoRebaja; int porcentajeAumentoRebajaCalidadAplicar = 0; int aumentoRebajaPrecio = 0; decimal precioCotizado = 0; //Para simplificar el cálculo del ID de la cotización se hará uso de la clase Random que genera un número aleatorio. //Aclaro que en un entorno real esto no es una buena práctica porque puede dar lugar a IDs repetidos. var random = new Random(); if (calidadPremium) { porcentajeAumentoRebajaCalidadAplicar = paramAplicativo.calidades.Where(x => x.nombreCalidadPrenda.Contains("Premium")).First().porcentajeAumentoRebaja; precioCotizado = (precioUnitario + ((precioUnitario * porcentajeAumentoRebajaAplicar) / (100)) + ((precioUnitario * porcentajeAumentoRebajaCalidadAplicar) / (100))) * cantidad; } else { precioCotizado = (precioUnitario + ((precioUnitario * porcentajeAumentoRebajaAplicar) / (100))) * cantidad; } //Se registra la cotización. Cotizacion cotizacion = new Cotizacion { idCotizacion = random.Next(0, Int32.MaxValue), fechaHoraCotizacion = DateTime.Now, cantidadCotizada = cantidad, idVendedor = paramAplicativo.vendedor.idVendedor, precioCotizacion = precioCotizado, }; paramAplicativo.cotizaciones.Add(cotizacion); return(err, precioCotizado); }