public gsItem_BuscarResult Item_Buscar(int idEmpresa, int codigoUsuario, string idProducto, string idCliente, DateTime?fecha, decimal cantidad, int?idTipoEnlaceContable, decimal?idDireccionOrigen, decimal?idDireccionDestino, decimal idAlmacen, ref decimal?StockDisponible) { using (dmIntranetDataContext dci = new dmIntranetDataContext(ConfigurationManager.ConnectionStrings["genesys"].ConnectionString)) { gsItem_BuscarResult objItem = new gsItem_BuscarResult(); List <VBG00939Result> objStock; try { dmGenesysDataContext dcg = new dmGenesysDataContext(string.Format(ConfigurationManager.ConnectionStrings[dci.Empresa.SingleOrDefault(x => x.idEmpresa == idEmpresa).baseDatos].ConnectionString, "usrGEN" + (10000 + codigoUsuario).ToString().Substring(1, 4))); objItem = dcg.gsItem_Buscar(idProducto, idCliente, fecha, cantidad, idTipoEnlaceContable, idDireccionOrigen, idDireccionDestino).Single(); objStock = dcg.VBG00939(null, objItem.Item_ID, null, null, null, null, null, null, null, null, null, null, null, null, null).ToList().FindAll(x => x.ID_Almacen == idAlmacen); if (objStock.Count == 0) { StockDisponible = 0; } else { StockDisponible = objStock[0].StockDisponible; } return(objItem); } catch (Exception ex) { dci.Excepcion_Registrar(ex.Message, ex.TargetSite.Name); dci.SubmitChanges(); throw new ArgumentException("Error al momento de consultar los items en la base de datos."); } } }
private void Item_Buscar(string idItem, string idCliente, decimal idAlmacen, bool nuevo) { decimal?stockDisponible = null; try { ItemWCFClient objItemWCF = new ItemWCFClient(); gsItem_BuscarResult objProducto = new gsItem_BuscarResult(); gsItem_BuscarResult objProductoActual = new gsItem_BuscarResult(); if (nuevo) { objProducto = objItemWCF.Item_Buscar(((Usuario_LoginResult)Session["Usuario"]).idEmpresa, ((Usuario_LoginResult)Session["Usuario"]).codigoUsuario, idItem, idCliente, DateTime.Now.Date, 0, null, null, null, idAlmacen, ref stockDisponible); PrecioInicial.Text = objProducto.Precio.ToString(); } else { objProducto = ((List <gsItem_BuscarResult>)Session["lstProductos"]).Find(x => x.Item_ID.ToString() == idItem); //((List<gsItem_BuscarResult>)Session["lstProductos"]).Remove(objProducto); objProductoActual = objItemWCF.Item_Buscar(((Usuario_LoginResult)Session["Usuario"]).idEmpresa, ((Usuario_LoginResult)Session["Usuario"]).codigoUsuario, objProducto.Codigo, idCliente, DateTime.Now.Date, 0, null, null, null, idAlmacen, ref stockDisponible); PrecioInicial.Text = objProductoActual.Precio.ToString(); } txtCodigo.Text = objProducto.Codigo; txtNombre.Text = objProducto.Item; txtKardex.Text = objProducto.Item_ID.ToString(); txtPrecio.Text = objProducto.Precio.ToString(); idMoneda.Text = objProducto.ID_Moneda.ToString(); lblMonedaPrecio.Text = objProducto.Signo; txtFactor.Text = objProducto.FactorUnidadInv.ToString(); lblUnidadFactor.Text = objProducto.ID_UnidadInv; txtStock.Text = stockDisponible.ToString(); //txtStock.Text = objProducto.Stock.ToString(); lblUnidadStock.Text = objProducto.UnidadPresentacion; lblUnidadCantidad.Text = objProducto.UnidadPresentacion; lblMonedaImporte.Text = objProducto.Signo; txtImporte.Text = objProducto.Importe.ToString(); txtCantidad.Text = objProducto.Cantidad.ToString(); txtDescuento.Text = objProducto.DctoMax.ToString(); DescuentoInicial.Text = objProducto.DctoMax.ToString(); txtObservacion.Text = objProducto.Observacion; ViewState["objItem"] = JsonHelper.JsonSerializer(objProducto); if (stockDisponible == 0) { throw new ArgumentException("El producto no se encuentra disponible en el almacen"); } } catch (Exception ex) { throw ex; } }
protected void btnGuardar_Click(object sender, EventArgs e) { if (Session["Usuario"] == null) { ScriptManager.RegisterStartupScript(Page, this.GetType(), "mykey", "CancelEdit();", true); } if (!ConnectionHelpers.CheckForInternetConnection()) { throw new ArgumentException("ERROR: Revisar su conexión a internet."); } gsItem_BuscarResult objItem; try { if (txtCantidad.Value <= 0) { throw new ArgumentException("ERROR: La cantidad ingresada debe ser mayor a 0."); } if (!Convert.ToBoolean(Int32.Parse(Request.QueryString["nuevo"]))) { objItem = new gsItem_BuscarResult(); objItem = ((List <gsItem_BuscarResult>)Session["lstProductos"]).Find(x => x.Item_ID.ToString() == Request.QueryString["idItem"]); ((List <gsItem_BuscarResult>)Session["lstProductos"]).Remove(objItem); } objItem = new gsItem_BuscarResult(); objItem = JsonHelper.JsonDeserialize <gsItem_BuscarResult>((string)ViewState["objItem"]); objItem.Precio = Math.Round(decimal.Parse(txtPrecio.Text), 4); objItem.Cantidad = Int32.Parse(txtCantidad.Text); objItem.Importe = Math.Round(objItem.Precio * Int32.Parse(txtCantidad.Text), 4); objItem.Observacion = txtObservacion.Text; objItem.Descuento = Math.Round(decimal.Parse(txtDescuento.Text), 2); objItem.FactorUnidadInv = Math.Round(decimal.Parse(txtFactor.Text), 2); objItem.Stock = Math.Round(decimal.Parse(txtStock.Text), 0);; objItem.Estado = 1; if (Session["lstProductos"] == null) { List <gsItem_BuscarResult> lstProductos = new List <gsItem_BuscarResult>(); Session["lstProductos"] = lstProductos; } ((List <gsItem_BuscarResult>)Session["lstProductos"]).Add(objItem); Impuesto_Guardar(objItem.Codigo, Convert.ToBoolean(Int32.Parse(Request.QueryString["nuevo"]))); ScriptManager.RegisterStartupScript(Page, this.GetType(), "mykey", "CloseAndRebind(" + objItem.Item_ID + ");", true); } catch (Exception ex) { lblMensaje.Text = ex.Message; lblMensaje.CssClass = "mensajeError"; } }
static List <gsOV_BuscarDetalleResult> OrdenVenta_ObtenerDetalle(gsOV_BuscarCabeceraResult objOrdenVentaCab_R, gsOV_BuscarDetalleResult[] objOrdenVentaDet, int idEmpresa, int codigoUsuario) { ImpuestoWCFClient objImpuestoWCF = new ImpuestoWCFClient(); gsOV_BuscarImpuestoResult[] lstImpuestos = null; List <gsOV_BuscarDetalleResult> lstPedidoDet; List <gsItem_BuscarResult> lstProductos = new List <gsItem_BuscarResult>(); // = (List<gsItem_BuscarResult>)Session["lstProductos"]; //List<gsItem_BuscarResult> lstProductosR = new List<gsItem_BuscarResult>(); gsOV_BuscarDetalleResult objProducto; List <gsImpuesto_ListarPorItemResult> lstImpuestoItem = new List <gsImpuesto_ListarPorItemResult>(); DateTime fecha; try { foreach (gsOV_BuscarDetalleResult objDetalle in objOrdenVentaDet) { gsItem_BuscarResult objItem = new gsItem_BuscarResult(); objItem.Codigo = objDetalle.ID_Item; objItem.Cantidad = Convert.ToInt32(objDetalle.Cantidad); objItem.DctoMax = objDetalle.DctoMax; objItem.Descuento = objDetalle.Dcto; objItem.ID_Moneda = objDetalle.ID_Moneda; objItem.ID_UnidadControl = objDetalle.ID_UnidadDoc; objItem.ID_UnidadInv = objDetalle.ID_UnidadInv; objItem.Importe = objDetalle.Importe; objItem.Item = objDetalle.Item; objItem.Item_ID = objDetalle.Item_ID; objItem.NombreMoneda = objDetalle.NombreMoneda; objItem.Observacion = objDetalle.Observaciones; objItem.Precio = objDetalle.Precio; objItem.PrecioInicial = objDetalle.PrecioMinimo; objItem.Signo = objDetalle.Signo; if (objOrdenVentaCab_R.Aprobacion1) { objItem.Stock = objDetalle.Stock + objDetalle.Cantidad; } else { objItem.Stock = objDetalle.Stock; } objItem.FactorUnidadInv = objDetalle.FactorUnidadInv; objItem.UnidadPresentacion = objDetalle.UnidadPresentacion; objItem.ID_Amarre = objDetalle.ID_Amarre; objItem.Estado = 1; objItem.CostoUnitario = objDetalle.CostoUnitario; lstImpuestoItem.AddRange(objImpuestoWCF.Impuesto_ListarPorItem(idEmpresa, codigoUsuario, objDetalle.ID_Item, DateTime.Now)); //ViewState["fecha"] = objOrdenVentaCab.FechaOrden; fecha = objOrdenVentaCab_R.FechaOrden; lstProductos.Add(objItem); } //Session["lstProductos"] = lstProductos; //Session["lstImpuestos"] = lstImpuestoItem; lstPedidoDet = new List <gsOV_BuscarDetalleResult>(); foreach (gsItem_BuscarResult producto in lstProductos) { objProducto = new gsOV_BuscarDetalleResult(); objProducto.ID_Amarre = producto.ID_Amarre; objProducto.TablaOrigen = "OV"; objProducto.ID_Item = producto.Codigo; objProducto.ID_ItemPedido = null; objProducto.Item_ID = producto.Item_ID; objProducto.Cantidad = producto.Cantidad; objProducto.Precio = producto.Precio; objProducto.Dcto = producto.Descuento; //objProducto.DctoValor = Math.Round(producto.Descuento * producto.Precio / 100, 2); objProducto.DctoValor = Math.Round(((producto.Descuento / 100)) * producto.Precio, 4); objProducto.Importe = producto.Importe; objProducto.ID_ItemAnexo = null; objProducto.ID_CCosto = null; objProducto.ID_UnidadGestion = null; objProducto.ID_UnidadProyecto = null; objProducto.ID_UnidadInv = producto.ID_UnidadInv; objProducto.FactorUnidadInv = producto.FactorUnidadInv; objProducto.CantidadUnidadInv = producto.Cantidad; // Consultar como se calcula realmente objProducto.ID_UnidadDoc = producto.ID_UnidadControl; objProducto.CantidadUnidadDoc = producto.Cantidad; // Consultar como se calcula realmente objProducto.Observaciones = producto.Observacion; objProducto.Estado = (int)producto.Estado; objProducto.Stock = producto.Stock; lstPedidoDet.Add(objProducto); } return(lstPedidoDet); } catch (Exception ex) { throw ex; } }
private void Item_Buscar(string idItem, string idProveedor, decimal idAlmacen, bool nuevo, string stridMoneda) { decimal?stockDisponible = null; double? TC_Cambio = null; decimal?precio = null; decimal?TC = null; try { ItemWCFClient objItemWCF = new ItemWCFClient(); gsItem_BuscarResult objProducto = new gsItem_BuscarResult(); gsItem_BuscarResult objProductoActual = new gsItem_BuscarResult(); if (nuevo) { objProducto = objItemWCF.Item_Buscar(((Usuario_LoginResult)Session["Usuario"]).idEmpresa, ((Usuario_LoginResult)Session["Usuario"]).codigoUsuario, idItem, idProveedor, DateTime.Now.Date, 0, 1001, null, null, idAlmacen, ref stockDisponible, ref TC_Cambio); PrecioInicial.Text = objProducto.Precio.ToString(); } else { objProducto = ((List <gsItem_BuscarResult>)Session["lstProductos"]).Find(x => x.Item_ID.ToString() == idItem); objProductoActual = objItemWCF.Item_Buscar(((Usuario_LoginResult)Session["Usuario"]).idEmpresa, ((Usuario_LoginResult)Session["Usuario"]).codigoUsuario, objProducto.Codigo, idProveedor, DateTime.Now.Date, 0, 1001, null, null, idAlmacen, ref stockDisponible, ref TC_Cambio); PrecioInicial.Text = objProductoActual.Precio.ToString(); } idMoneda.Text = objProducto.ID_Moneda.ToString(); txtPrecio.Text = objProducto.Precio.ToString(); lblMonedaPrecio.Text = objProducto.Signo; lblMonedaImporte.Text = objProducto.Signo; TC = Convert.ToDecimal(objProducto.TC.ToString()); if (stridMoneda != idMoneda.Text) { if (stridMoneda == "0") { idMoneda.Text = "0"; precio = Convert.ToDecimal(objProducto.Precio.ToString()); precio = (precio / TC); PrecioInicial.Text = precio.ToString(); txtPrecio.Text = precio.ToString(); lblMonedaPrecio.Text = "US$"; lblMonedaImporte.Text = "US$"; } else { idMoneda.Text = "1"; precio = Convert.ToDecimal(objProducto.Precio.ToString()); precio = (precio * TC); PrecioInicial.Text = precio.ToString(); txtPrecio.Text = precio.ToString(); lblMonedaImporte.Text = "S/."; } } txtCodigo.Text = objProducto.Codigo; txtNombre.Text = objProducto.Item; txtKardex.Text = objProducto.Item_ID.ToString(); txtFactor.Text = objProducto.FactorUnidadInv.ToString(); lblUnidadFactor.Text = objProducto.ID_UnidadInv; txtStock.Text = objProducto.Stock.ToString(); //stockDisponible.ToString(); lblUnidadStock.Text = objProducto.UnidadPresentacion; lblUnidadCantidad.Text = objProducto.UnidadPresentacion; txtImporte.Text = objProducto.Importe.ToString(); txtCantidad.Text = objProducto.Cantidad.ToString(); txtDescuento.Text = objProducto.DctoMax.ToString(); DescuentoInicial.Text = objProducto.DctoMax.ToString(); txtObservacion.Text = objProducto.Observacion; txtTC.Text = objProducto.TC.ToString(); if (objProducto.CostoUnitario == 0 || objProducto.CostoUnitario == null || objProducto.PrecioInicial == 0) { txtRentabilidad.Value = 0; hfCostoUnitario.Value = "0"; } else { txtRentabilidad.Value = (double)((objProducto.PrecioInicial - (decimal)objProducto.CostoUnitario) * 100 / objProducto.PrecioInicial); hfCostoUnitario.Value = objProducto.CostoUnitario.ToString(); } ViewState["objItem"] = JsonHelper.JsonSerializer(objProducto); if (stockDisponible == 0) { throw new ArgumentException("El producto no se encuentra disponible en el almacen"); } } catch (Exception ex) { throw ex; } }
protected void btnAgregar_Click(object sender, EventArgs e) { int correlativo; correlativo = Convert.ToInt32(txtCorrelativo.Text); correlativo = correlativo + 1; txtCorrelativo.Text = correlativo.ToString(); if (Session["Usuario"] == null) { ScriptManager.RegisterStartupScript(Page, this.GetType(), "mykey", "CancelEdit();", true); } List <gsItem_BuscarResult> lstProductosParcial = new List <gsItem_BuscarResult>(); gsItem_BuscarResult objItem; try { if (txtCantidadParcial.Value <= 0) { throw new ArgumentException("La cantidad ingresada debe ser mayor a 0."); } if (txtPrecio.Value <= 0) { throw new ArgumentException("El precio ingresado debe ser mayor a 0."); } if (!Convert.ToBoolean(Int32.Parse(Request.QueryString["nuevo"]))) { objItem = new gsItem_BuscarResult(); objItem = ((List <gsItem_BuscarResult>)Session["lstProductosParcial"]).Find(x => x.Item_ID.ToString() == Request.QueryString["idItem"]); ((List <gsItem_BuscarResult>)Session["lstProductosParcial"]).Remove(objItem); } objItem = new gsItem_BuscarResult(); objItem = JsonHelper.JsonDeserialize <gsItem_BuscarResult>((string)ViewState["objItem"]); objItem.Precio = Math.Round(decimal.Parse(txtPrecio.Text), 2); objItem.Cantidad = Int32.Parse(txtCantidadParcial.Text); objItem.Importe = Math.Round(objItem.Precio * Int32.Parse(txtCantidadParcial.Text), 2); objItem.Observacion = txtObservacion.Text; objItem.Descuento = 0; objItem.FactorUnidadInv = Math.Round(decimal.Parse(txtFactor.Text), 2); objItem.Stock = Math.Round(decimal.Parse(txtStock.Text), 0);; objItem.Estado = 1; objItem.CostoUnitario = decimal.Parse(hfCostoUnitario.Value); objItem.idCCosto = acbCCosto.Entries[0].Text.Split('-')[0]; objItem.CCosto = acbCCosto.Entries[0].Text.Split('-')[1]; objItem.Fecha = dpFechaParcial.SelectedDate.Value; objItem.correlativo = correlativo; if (Session["lstProductosParcial"] == null) { Session["lstProductosParcial"] = lstProductosParcial; } else { lstProductosParcial = ((List <gsItem_BuscarResult>)Session["lstProductosParcial"]); } lstProductosParcial.Add(objItem); Session["lstProductosParcial"] = lstProductosParcial; Impuesto_Guardar(objItem.Codigo, Convert.ToBoolean(Int32.Parse(Request.QueryString["nuevo"]))); ScriptManager.RegisterStartupScript(Page, this.GetType(), "mykey", "CloseAndRebind(" + objItem.Item_ID + ");", true); } catch (Exception ex) { lblMensaje.Text = ex.Message; lblMensaje.CssClass = "mensajeError"; } }
private void Item_Buscar(string idItem, string idCliente, decimal idAlmacen, bool nuevo, string stridMoneda) { decimal?stockDisponible = null; double? TC_Cambio = null; decimal?precio = null; decimal?TC = null; try { ItemWCFClient objItemWCF = new ItemWCFClient(); gsItem_BuscarResult objProducto = new gsItem_BuscarResult(); gsItem_BuscarResult objProductoActual = new gsItem_BuscarResult(); if (nuevo) { objProducto = objItemWCF.Item_Buscar(((Usuario_LoginResult)Session["Usuario"]).idEmpresa, ((Usuario_LoginResult)Session["Usuario"]).codigoUsuario, idItem, idCliente, DateTime.Now.Date, 0, null, null, null, idAlmacen, ref stockDisponible, ref TC_Cambio); precio = Math.Round(Convert.ToDecimal(objProducto.Precio.ToString()), 2); PrecioInicial.Text = precio.ToString(); TC = Convert.ToDecimal(objProducto.TC.ToString()); } else { objProducto = ((List <gsItem_BuscarResult>)Session["lstProductos"]).Find(x => x.Item_ID.ToString() == idItem && x.Estado == 1); objProductoActual = objItemWCF.Item_Buscar(((Usuario_LoginResult)Session["Usuario"]).idEmpresa, ((Usuario_LoginResult)Session["Usuario"]).codigoUsuario, objProducto.Codigo, idCliente, DateTime.Now.Date, 0, null, null, null, idAlmacen, ref stockDisponible, ref TC_Cambio); precio = Math.Round(Convert.ToDecimal(objProductoActual.Precio.ToString()), 2); PrecioInicial.Text = precio.ToString(); TC = Convert.ToDecimal(objProductoActual.TC.ToString()); } txtCodigo.Text = objProducto.Codigo; txtNombre.Text = objProducto.Item; txtKardex.Text = objProducto.Item_ID.ToString(); idMoneda.Text = objProducto.ID_Moneda.ToString(); if (stridMoneda != idMoneda.Text) { if (stridMoneda == "0") { idMoneda.Text = "0"; precio = Convert.ToDecimal(objProducto.Precio.ToString()); precio = (precio / TC); precio = Math.Round(Convert.ToDecimal(precio.ToString()), 4); PrecioInicial.Text = precio.ToString(); txtPrecio.Text = precio.ToString(); objProducto.Precio = decimal.Parse(precio.ToString()); lblMonedaPrecio.Text = "US$"; lblMonedaImporte.Text = "US$"; objProducto.ID_Moneda = 0; objProducto.Signo = "US$"; } else { idMoneda.Text = "1"; precio = Convert.ToDecimal(objProducto.Precio.ToString()); precio = (precio * TC); precio = Math.Round(Convert.ToDecimal(precio.ToString()), 4); PrecioInicial.Text = precio.ToString(); txtPrecio.Text = precio.ToString(); objProducto.Precio = decimal.Parse(precio.ToString()); lblMonedaPrecio.Text = "S/."; lblMonedaImporte.Text = "S/."; objProducto.ID_Moneda = 1; objProducto.Signo = "S/."; } } else { precio = Math.Round(Convert.ToDecimal(objProducto.Precio.ToString()), 4); txtPrecio.Text = precio.ToString(); lblMonedaPrecio.Text = objProducto.Signo; lblMonedaImporte.Text = objProducto.Signo; if (!nuevo) { //precio = Math.Round(Convert.ToDecimal(objProductoActual.Precio.ToString()), 2); PrecioInicial.Text = objProductoActual.Precio.ToString(); idMoneda.Text = objProductoActual.ID_Moneda.ToString(); TC = Convert.ToDecimal(objProductoActual.TC.ToString()); if (stridMoneda != idMoneda.Text) { if (stridMoneda == "0") { idMoneda.Text = "0"; precio = Convert.ToDecimal(objProductoActual.Precio.ToString()); precio = (precio / TC); precio = Math.Round(Convert.ToDecimal(precio.ToString()), 4); PrecioInicial.Text = precio.ToString(); } else { idMoneda.Text = "1"; precio = Convert.ToDecimal(objProductoActual.Precio.ToString()); precio = (precio * TC); precio = Math.Round(Convert.ToDecimal(precio.ToString()), 4); PrecioInicial.Text = precio.ToString(); } } } } txtFactor.Text = objProducto.FactorUnidadInv.ToString(); lblUnidadFactor.Text = objProducto.ID_UnidadInv; txtStock.Text = stockDisponible.ToString(); lblUnidadStock.Text = objProducto.UnidadPresentacion; lblUnidadCantidad.Text = objProducto.UnidadPresentacion; txtImporte.Text = objProducto.Importe.ToString(); txtCantidad.Text = objProducto.Cantidad.ToString(); txtDescuentoMax.Text = objProducto.DctoMax.ToString(); txtDescuentoFinal.Text = objProducto.Descuento.ToString(); DescuentoFinal.Text = objProducto.Descuento.ToString(); DescuentoInicial.Text = objProducto.Descuento.ToString(); DescuentoMaximo.Text = objProducto.DctoMax.ToString(); txtObservacion.Text = objProducto.Observacion; if (objProducto.CostoUnitario == 0 || objProducto.CostoUnitario == null || objProducto.PrecioInicial == 0) { txtRentabilidad.Value = 0; hfCostoUnitario.Value = "0"; } else { txtRentabilidad.Value = (double)((objProducto.PrecioInicial - (decimal)objProducto.CostoUnitario) * 100 / objProducto.PrecioInicial); hfCostoUnitario.Value = objProducto.CostoUnitario.ToString(); } ViewState["objItem"] = JsonHelper.JsonSerializer(objProducto); string Impuesto = Session["Impuestos"].ToString(); string ItemImpuesto = ""; if (objProducto.TieneImpuesto > 0) { ItemImpuesto = "IGV"; } else { ItemImpuesto = "SINIGV"; } if (Impuesto != ItemImpuesto) { if (Impuesto == "") { Session["Impuestos"] = ItemImpuesto; if (stockDisponible <= 0) { lblMensaje.CssClass = "mensajeError"; throw new ArgumentException("El producto no se encuentra disponible en el almacen"); } } else { btnGuardar.Enabled = false; if (ItemImpuesto == "IGV") { ScriptManager.RegisterStartupScript(Page, this.GetType(), "mykey", "Afecto();", true); lblMensaje.CssClass = "mensajeError"; lblMensaje.Text = "El producto es Afecto al IGV, por favor, registrarlo en otro pedido."; throw new ArgumentException("El producto es Afecto al IGV, por favor, registrarlo en otro pedido."); } else { ScriptManager.RegisterStartupScript(Page, this.GetType(), "mykey", "Inafecto();", true); lblMensaje.CssClass = "mensajeError"; lblMensaje.Text = "El producto es Inafecto al IGV, por favor, registrarlo en otro pedido."; throw new ArgumentException("El producto es Inafecto al IGV, por favor, registrarlo en otro pedido."); } } } else { if (stockDisponible <= 0) { lblMensaje.CssClass = "mensajeError"; throw new ArgumentException("El producto no se encuentra disponible en el almacen"); } } } catch (Exception ex) { throw ex; } }