protected void GenerarSolicitud() { DataView dv; String TipoNegado = "0"; String script = String.Empty; String TallasOtras = String.Empty; String TallaMensaje = String.Empty; String TiendaSeleccionada = String.Empty; String strDescripcion = "Par Negado en Tienda"; dv = (DataView)AVE_StockEnTiendaObtener.Select(new DataSourceSelectArguments()); dv.RowFilter = "idArticulo=" + Request.QueryString[Constantes.QueryString.IdArticulo].ToString() + " and Talla='" + Request.QueryString["Talla"].ToString() + "' and cantidad>0 and idTienda='" + Request.QueryString["idTienda"].ToString() + "'"; if (dv.Count > 0) { SDSPedido.InsertParameters["IdArticulo"].DefaultValue = Request["IdArticulo"].ToString(); SDSPedido.InsertParameters["Talla"].DefaultValue = Request.QueryString["Talla"].ToString(); SDSPedido.InsertParameters["Unidades"].DefaultValue = "1"; SDSPedido.InsertParameters["Precio"].DefaultValue = hiddenTallas.Value.ToString(); SDSPedido.InsertParameters["Usuario"].DefaultValue = Contexto.Usuario; SDSPedido.InsertParameters["IdEmpleado"].DefaultValue = Contexto.IdEmpleado; SDSPedido.InsertParameters["IdTienda"].DefaultValue = Request.QueryString["idTienda"].ToString(); SDSPedido.InsertParameters["Stock"].DefaultValue = dv[0]["Cantidad"].ToString(); if (SDSPedido.Insert() > 0) { if (Contexto.IdTienda == Request.QueryString["idTienda"].ToString()) { script += "Solicitud a Bodega con el Nº" + IdPedido.ToString() + "."; script = "alert('" + script + "');"; script += "document.location.href = '" + ResolveClientUrl(Constantes.Paginas.StockEnTienda + "?Talla=&IdArticulo=" + Request["IdArticulo"].ToString()) + "';"; // HttpContext.Current.Session[Constantes.Session.FechaUltimoPedido] = DateTime.Now.AddSeconds(5); } else { TipoNegado = "0"; //pares negados Comun.InsertarProductoNegado(Request["IdArticulo"].ToString(), Request.QueryString["Talla"].ToString(), "Par Negado en Tienda", ref TipoNegado, TiendaSeleccionada); if (TipoNegado == "1") { script = "Solicitud de Traspaso con el Nº " + IdPedido.ToString() + " en la tienda " + Request.QueryString["idTienda"].ToString() + "."; script += " Par Negado en Tienda de la talla " + Request.QueryString["Talla"].ToString() + "."; } script = "alert('" + script + "');"; script += "document.location.href = '" + ResolveClientUrl(Constantes.Paginas.StockEnTienda + "?Talla=&IdArticulo=" + Request["IdArticulo"].ToString()) + "';"; HttpContext.Current.Session[Constantes.Session.FechaUltimoPedido] = DateTime.Now.AddSeconds(5); } } } else { TipoNegado = "0"; //pares negados if (Contexto.IdTienda != Request.QueryString["idTienda"].ToString() && Request.QueryString["Stock"].ToString().Equals("-")) { dv.RowFilter = "idArticulo=" + Request.QueryString[Constantes.QueryString.IdArticulo].ToString() + " and Talla='" + Request.QueryString["Talla"].ToString() + "' and cantidad>0 and idTienda='" + Contexto.IdTienda + "'"; if (dv.Count > 0) { script += " No se tienen existencias en la talla seleccionada, en la Tienda foránea " + Request.QueryString["idTienda"].ToString(); script = "alert('" + script + "');"; script += "document.location.href = '" + ResolveClientUrl(Constantes.Paginas.StockEnTienda + "?Talla=&IdArticulo=" + Request["IdArticulo"].ToString()) + "';"; } else { Comun.InsertarProductoNegado(Request["IdArticulo"].ToString(), Request.QueryString["Talla"].ToString(), strDescripcion, ref TipoNegado, TiendaSeleccionada); if (TipoNegado == "2") { script += " Par Negado en todas las Tiendas de la talla " + Request.QueryString["Talla"].ToString() + "."; script = "alert('" + script + "');"; script += "document.location.href = '" + ResolveClientUrl(Constantes.Paginas.StockEnTienda + "?Talla=&IdArticulo=" + Request["IdArticulo"].ToString()) + "';"; } else { script += " Par Negado en Tienda de la talla " + Request.QueryString["Talla"].ToString() + "."; script = "alert('" + script + "');"; script += "document.location.href = '" + ResolveClientUrl(Constantes.Paginas.StockEnTienda + "?Talla=&IdArticulo=" + Request["IdArticulo"].ToString()) + "';"; } } } else { Comun.InsertarProductoNegado(Request["IdArticulo"].ToString(), Request.QueryString["Talla"].ToString(), strDescripcion, ref TipoNegado, TiendaSeleccionada); if (TipoNegado == "2") { script += " Par Negado en todas las Tiendas de la talla " + Request.QueryString["Talla"].ToString() + "."; script = "alert('" + script + "');"; script += "document.location.href = '" + ResolveClientUrl(Constantes.Paginas.StockEnTienda + "?Talla=&IdArticulo=" + Request["IdArticulo"].ToString()) + "';"; } else { script += " Par Negado en Tienda de la talla " + Request.QueryString["Talla"].ToString() + "."; script = "alert('" + script + "');"; script += "document.location.href = '" + ResolveClientUrl(Constantes.Paginas.StockEnTienda + "?Talla=&IdArticulo=" + Request["IdArticulo"].ToString()) + "';"; } } } ClientScript.RegisterStartupScript(typeof(string), "", script, true); hiddenTallas.Value = String.Empty; hiddenTallasNo.Value = String.Empty; }
protected void CargarNuevoGrid() { DataView dvORderTalla; String StrCadena = String.Empty; //Tablas de resultados de BD DataTable dtTallas = ((DataView)SqlDataTallajes.Select(new DataSourceSelectArguments())).ToTable(true, new string[] { "Talla" }); DataTable dtStock = ((DataView)AVE_StockEnTiendaObtener.Select(new DataSourceSelectArguments())).Table.DataSet.Tables[0]; //se ha metido en un dataview para poder ordenar las tallas y pasar al datatable Inicial dvORderTalla = dtTallas.DefaultView; dvORderTalla.Sort = "Talla"; dtTallas = dvORderTalla.ToTable(); //---------------------------------- //Añadimos las columnas dinámicas al grid. Es una por cada talla devuelta BoundField bf; foreach (DataRow dr in dtTallas.Rows) { bf = new BoundField(); bf.DataField = dr["Talla"].ToString(); //El campo de la columna corresponde al nombre de la talla bf.HeaderText = dr["Talla"].ToString(); bf.HeaderStyle.Width = Unit.Pixel(50); bf.ItemStyle.HorizontalAlign = HorizontalAlign.Center; GridStock.Columns.Insert(GridStock.Columns.Count - 1, bf); } //Tabla de datos con el formato correcto DataTable dtResultado = new DataTable(); //Columnas de resultados. Son dos fijas, una por talla y la de totales dtResultado.Columns.Add("IdTienda", typeof(string)); dtResultado.Columns.Add("Tienda", typeof(string)); foreach (DataRow dr in dtTallas.Rows) { dtResultado.Columns.Add(dr["Talla"].ToString(), typeof(string)); //Es un entero pues albergará la cantidad de stock } dtResultado.Columns.Add("Total", typeof(int)); //Filas DataRow nuevaFila = dtResultado.NewRow(); string prevIdTienda = string.Empty; //Para controlar cual es la fila que se comprobó en la iteración anterior string idTienda; //Para contener la fila que se está comprobando en esta iteración int acumulado = 0; //Para ir sumando los totales por tienda int auxCantidad; //Auxiliar para tratar con las cantidades pasadas a entero //Recorremos la tabla de stock devuelto. Como los resultados vienen ordenados por idtienda el procedimiento será: //Insertamos una fila con el primer registro y guardamos la tienda que es; en el siguiente registro comprobamos si //seguimos con la misma tienda, en cuyo caso no creamos fila nueva sino que solo incluimos el dato de stock para la //talla que sea; si el registro es de una tienda distinta, entonces sí creamos una fila nueva y además añadimos el //stock de la talla. Finalmente solo insertamos la fila si no está ya insertada. foreach (DataRow dr in dtStock.Rows) { idTienda = dr["IdTienda"].ToString(); if (idTienda != prevIdTienda) //Si la fila anterior era de una tienda distinta entonces tenemos que crear una nueva fila para la tienda actual { nuevaFila = dtResultado.NewRow(); nuevaFila["IdTienda"] = dr["IdTienda"]; nuevaFila["Tienda"] = dr["Tienda"]; acumulado = 0; nuevaFila["Total"] = acumulado; //Metemos el valor a 0 para que no quede en blanco si no hay ninguna columna que sume } nuevaFila[dr["Talla"].ToString()] = dr["Cantidad"]; //Siempre insertamos el stock de la talla en la fila que se está manejando, que puede ser nueva o la de la iteración anterior //Acumulamos para el total solo si es una cantidad positiva if (int.TryParse(dr["Cantidad"].ToString(), out auxCantidad)) { acumulado += auxCantidad; //Como no sé cual será la última cantidad a sumar en la fila para poner el valor en la columna, lo que hago es actualizar el valor de Total cada vez que varía el acumulado nuevaFila["Total"] = acumulado; } if (dtResultado.Rows.IndexOf(nuevaFila) == -1) //Si la fila no está insertada ya, la insertamos { dtResultado.Rows.Add(nuevaFila); } prevIdTienda = idTienda; //Guardamos el idtienda para que en la próxima iteración sepamos si es una fila nueva o no } nuevaFila = dtResultado.NewRow(); nuevaFila[1] = "Total"; int TotalTalla = 0; for (int i = 2; i <= dtResultado.Columns.Count - 2; i++) { for (int index = 0; index <= dtResultado.Rows.Count - 1; index++) { if (dtResultado.Rows[index][i].ToString() == String.Empty) { dtResultado.Rows[index][i] = "-"; } else { TotalTalla += Int16.Parse(dtResultado.Rows[index][i].ToString()); } } nuevaFila[i] = TotalTalla.ToString(); TotalTalla = 0; } dtResultado.Rows.Add(nuevaFila); dtResultado.AcceptChanges(); //Cargamos el grid GridStock.DataSource = dtResultado; GridStock.DataBind(); //controlar para ver las fotos de otras if (GridStock.Rows.Count > 0) { btnFoto.Enabled = true; } }
protected void Page_Load(object sender, EventArgs e) { //Registramos en javascript el control de la caja de texto para usarlo desde otras funciones jscript; string script = "var Talla_Selecionada = document.getElementById('" + hiddenTallas.ClientID + "');"; script += "var Talla_SelecionadaNo = document.getElementById('" + hiddenTallasNo.ClientID + "');"; Page.ClientScript.RegisterStartupScript(typeof(string), "Talla_Selecionada", script, true); btnFoto.Visible = false; if (!Page.IsPostBack) { DataView dv = null; string tallaBuscada = string.Empty; if (Request.QueryString["Talla"] != null) { tallaBuscada = Request.QueryString["Talla"].ToUpper().Trim(); } // Obtenemos la información del producto if (Request.QueryString[Constantes.QueryString.IdArticulo] != null && Request.QueryString["Tipo"] == null) { //Búsqueda normal AVE_StockEnTiendaObtener.SelectParameters["IdTienda"].DefaultValue = AVE.Contexto.IdTienda; dv = (DataView)AVE_StockEnTiendaObtener.Select(new DataSourceSelectArguments()); FotoArticulo.ImageUrl = this.ResolveUrl(ObtenerURL()); } else if (Request.QueryString["Tipo"] != null && Request.QueryString["IdArticulo"] != null) { //Búsqueda de C o S AVE_StockEnTiendaCSObtener.SelectParameters["IdTienda"].DefaultValue = AVE.Contexto.IdTienda; dv = (DataView)AVE_StockEnTiendaCSObtener.Select(new DataSourceSelectArguments()); } if (dv != null && dv.Count > 0) { //// Almacenamos toda la información del producto en dtProductos DataTable dtProductos = dv.Table; //// Almacenamos las tallas en dtTallas. que tieen stock ////DataTable dtTallas = dtProductos.DefaultView.ToTable(true, new string[] { "Talla" }); //DataTable dtTallas = ((DataView)SqlDataTallajes.Select(new DataSourceSelectArguments())).ToTable(true, new string[] { "Talla" }); // //vamos a eliminar Tallas que no son necesarias vamos a visualizar solo 3 tallajes // if (tallaBuscada.Length > 0 && dtTallas.Rows.Count>3) // { // Int32 CounTalla= dtTallas.Rows.Count; // for (int i=0; i < dtTallas.Rows.Count; i++) // { // if (tallaBuscada == dtTallas.Rows[i]["Talla"].ToString().ToUpper()) // { // if (i == 0) // { // //eliminar a partir del indice del 4 tallaje // RemoveTallas(ref dtTallas, 2, (dtTallas.Rows.Count - 1)); // } // else // { // if (i == (dtTallas.Rows.Count - 1)) // { // //eliminamos los tallajes anteriores cuando es el ultimo // RemoveTallas(ref dtTallas, 0, (dtTallas.Rows.Count - 3)); // } // else // { // //esta en medio del tallaje // //eliminamos las posteriores // RemoveTallas(ref dtTallas, i + 1, (dtTallas.Rows.Count - 1)); // //eliminamos las primeras // if (i > 1) // { // if ((i - 2) == 0) // { // RemoveTallas(ref dtTallas, -1, 0); // } // else // { // RemoveTallas(ref dtTallas, -1, (i - 2)); // } // } // } // } // } // } //} //Añadimos las columnas dinámicas al grid. Es una por cada talla devuelta //BoundField bf; //foreach (DataRow dr in dtTallas.Rows) //{ // bf = new BoundField(); // bf.DataField = dr["Talla"].ToString(); //El campo de la columna corresponde al nombre de la talla // bf.HeaderText = dr["Talla"].ToString(); // bf.HeaderStyle.Width = Unit.Pixel(50); // bf.ItemStyle.HorizontalAlign = HorizontalAlign.Center; // //Resaltamos la columna si es la talla buscada // if (tallaBuscada == dr["Talla"].ToString().ToUpper()) // { // //bf.HeaderStyle.CssClass = "GridItemTallaBuscada"; // bf.ItemStyle.CssClass += " GridItemTallaBuscada"; // } // GridView2.Columns.Add(bf); //} //// Añadimos las columnas con articulo, color y tallas a la tabla auxiliar //DataTable dtAux = new DataTable(); //dtAux.Columns.Add("Articulo"); //dtAux.Columns.Add("Color"); //for (int i = 0; i < dtTallas.Rows.Count; i++) //{ // dtAux.Columns.Add(dtTallas.Rows[i][0].ToString()); //} ////Establecemos las cantidades en las filas correspondientes //for (int i = 0; i < dtProductos.Rows.Count; i++) //{ // int Fila = Esta(dtAux, dtProductos.Rows[i]["idArticulo"].ToString()); // // Si se encuentra ya el producto, me indica la fila donde tengo que escribir el valor // if (Fila >= 0) // { // for (int j = 0; j < dtAux.Columns.Count; j++) // if (dtProductos.Rows[i]["Talla"].ToString() == dtAux.Columns[j].ColumnName.ToString()) // dtAux.Rows[Fila][dtAux.Columns[j].ColumnName] = dtProductos.Rows[i]["Cantidad"]; // } // else // { // // Si no encuentra el producto, añadimos una nueva fila // DataRow dr = dtAux.NewRow(); // dr["Articulo"] = dtProductos.Rows[i]["idArticulo"]; // dr["Color"] = dtProductos.Rows[i]["Color"]; // for (int j = 0; j < dtAux.Columns.Count; j++) // if (dtProductos.Rows[i]["Talla"].ToString() == dtAux.Columns[j].ColumnName.ToString()) // dr[dtAux.Columns[j].ColumnName] = dtProductos.Rows[i]["Cantidad"]; // dtAux.Rows.Add(dr); // } //} // Escribimos en las labels, la descripción y el precio lblDescripcion.Text = dtProductos.Rows[0]["Descripcion"].ToString(); lblPrecioValor.Text = string.Format(" Precio : {0:C}", Decimal.Parse(dtProductos.Rows[0]["Precio"].ToString())); hiddenTallas.Value = dtProductos.Rows[0]["Precio"].ToString(); //// Cargamos en el GridView los datos del DataTable //GridView2.DataSource = dtAux; //GridView2.DataBind(); //Si es un ean o codigoalfa no lo encontraremos así; si es un Compl o susti, menos. ////// Seleccionamos la fila donde se encuentra el producto exacto que hemos buscado ////for (int i = 0; i < GridView2.Rows.Count; i++) ////{ //// if (GridView2.Rows[i].Cells[1].Text == Request.QueryString["Producto"] | GridView2.Rows[i].Cells[1].Text == Request.QueryString["IdArticulo"]) //// GridView2.SelectedIndex = i; ////} // Seleccionamos la primera fila. // GridView2.SelectedIndex = 0; //Establecemos los enlaces // EvaluarEnlaces(); CargarNuevoGrid(); if (GridStock.Rows.Count > 0) { if (GridStock.Rows[0].Cells[0].Text.Equals(Contexto.IdTienda)) { GridStock.SelectedIndex = 0; } } CargarColoresModelo(); if (Request.QueryString["Stock"] != null) { GenerarSolicitud(); } } else if (Request.QueryString[Constantes.QueryString.IdArticulo] != null) { //Response.Redirect("~/StockOtras.aspx?IdArticulo=" + Request.QueryString[Constantes.QueryString.IdArticulo].ToString()); } else { this.lblDescripcion.Text = Resources.Resource.NoInfoProducto; } } else { CargarColoresModelo(); } //Ejecutamos la rutina para montar los enlaces en los valores de stock. No puede hacerse en el RowDataBound porque los //controles que añadimos dinámicamente se pierden en los postbacks (por ejemplo al seleccionar otro producto) //this.MontarEnlacesGrid(); // CargarTabladeTallaje(); }