protected DataTable PrepararDtUbicaciones(string codUbi) { dtUbicaciones = new DataTable(); DataTable colspan = PrepararTablaColspan(); int nivel = Ubicacion.DeterminarNivel(codUbi); int numFilas = 0, numCols = 0, i = 0, j = 0; switch (nivel) { case 1: { numFilas = Convert.ToInt32(DBFunctions.SingleData("SELECT cinv_filmatbod FROM cinventario")); numCols = Convert.ToInt32(DBFunctions.SingleData("SELECT cinv_colmatbod FROM cinventario")); lbMaxFilas.Text = numFilas.ToString(); lbMaxCols.Text = numCols.ToString(); //Primero debemos agregar la columna que nos indique las filas dtUbicaciones.Columns.Add(new DataColumn("FILA/ESTANTE", System.Type.GetType("System.String"))); //0 //Ahora agregamos las columnas que tenemos configuradas en cinventario for (i = 0; i < numCols; i++) { dtUbicaciones.Columns.Add(new DataColumn("Estante " + (i + 1), System.Type.GetType("System.String"))); } //Ahora agregamos las filas que tenemos configuradas en cinventario for (i = 0; i < numFilas; i++) { DataRow fila = dtUbicaciones.NewRow(); fila[0] = "Fila " + (i + 1); dtUbicaciones.Rows.Add(fila); } } break; case 2: { #region Revisar el procedimiento que muestra los ítems y las ubicaciones de un estante. //Si no existe ninguna ubicacion dependiente codUbi se coloca un aviso que diga que no se ha configurado if (!DBFunctions.RecordExist("SELECT pubi_codpad FROM pubicacionitem WHERE pubi_codpad=" + codUbi + "")) { Utils.MostrarAlerta(Response, "No se ha configurado el estante : " + DBFunctions.SingleData("SELECT pubi_nombre FROM pubicacionitem WHERE pubi_codigo=" + codUbi + "") + "!"); lbFilas.Text = "0"; } else { //Se realiza una consulta de los items almacenados dentro de las ubicaciones DataSet dsItemsUbicaciones = new DataSet(); DBFunctions.Request(dsItemsUbicaciones, IncludeSchema.NO, "SELECT PUBI.pubi_codigo as codigo_ubicacion,PUBI.pubi_nombre as nombre_ubicacion,PUBI.pubi_ubicespacial as ubicacion_espacial, cast(RTRIM(SUBSTR(pubi_ubicespacial,1,LOCATE('-',pubi_ubicespacial,1)-1)) as integer) as parametro_busqueda, cast(RTRIM(SUBSTR(pubi_ubicespacial,LOCATE('-',pubi_ubicespacial,1)+1,LENGTH(pubi_ubicespacial)-LOCATE('-',pubi_ubicespacial,1)+1)) as integer) as numero_columna, MUBI.mite_codigo as referencia_original, DBXSCHEMA.EDITARREFERENCIAS(MUBI.mite_codigo,PLIN.plin_tipo) as referencia_modificada " + "FROM pubicacionitem PUBI INNER JOIN mubicacionitem MUBI ON PUBI.pubi_codigo = MUBI.pubi_codigo INNER JOIN mitems MIT ON MUBI.mite_codigo = MIT.mite_codigo INNER JOIN plineaitem PLIN ON MIT.plin_codigo = PLIN.plin_codigo " + "WHERE PUBI.pubi_codpad = " + codUbi + " ORDER BY pubi_ubicespacial, PUBI_NOMBRE ;" + "SELECT pubi_codigo as codigo_ubicacion, pubi_nombre as nombre_ubicacion, cast(RTRIM(SUBSTR(pubi_ubicespacial,1,LOCATE('-',pubi_ubicespacial,1)-1)) as integer) as parametro_filas, cast(RTRIM(SUBSTR(pubi_ubicespacial,LOCATE('-',pubi_ubicespacial,1)+1,LENGTH(pubi_ubicespacial)-LOCATE('-',pubi_ubicespacial,1)+1)) as integer) as numero_columna " + "FROM pubicacionitem " + "WHERE pubi_codpad = " + codUbi + " ORDER BY pubi_ubicespacial, PUBI_NOMBRE ;"); ArrayList elemFilas = new ArrayList(); //Primero debemos agregar la columna que nos indique las filas dtUbicaciones.Columns.Add(new DataColumn("FILAS", System.Type.GetType("System.String"))); //0 //Ahora miramos el numero de columnas que debemos agregar que siempre es el maximo int maxColumns = CalculoDimensionUbiNiv2(codUbi, ref elemFilas); maximoSpan = maxColumns; //dgUbicaciones.Width = maxColumns * pixelesCeldas; lbFilas.Text = elemFilas.Count.ToString(); //Creamos la cantidad de columnas que nos indica el maxColumns for (i = 1; i <= maxColumns; i++) { dtUbicaciones.Columns.Add(new DataColumn(i.ToString(), System.Type.GetType("System.String"))); //i } //Ahora creamos el numero de filas de acuerdo que nos indica elemFilas for (i = 0; i < elemFilas.Count; i++) { DataRow fila = dtUbicaciones.NewRow(); // fila[0] = (dsItemsUbicaciones.Tables[1].Select("parametro_filas="+elemFilas[i].ToString()+""))[0][1].ToString(); // mostar solo titulo de la fila fila[0] = (dsItemsUbicaciones.Tables[1].Select("parametro_filas=" + (elemFilas[i].ToString() + ""))[0][1].ToString().Split('-'))[0]; DataRow[] nombrePosiciones = dsItemsUbicaciones.Tables[1].Select("parametro_filas=" + elemFilas[i].ToString() + ""); DataRow[] select = dsItemsUbicaciones.Tables[0].Select("parametro_busqueda=" + elemFilas[i].ToString() + "", "referencia_original asc"); for (j = 0; j < nombrePosiciones.Length; j++) { // fila[Convert.ToInt32(nombrePosiciones[j][3])] = fila[Convert.ToInt32(nombrePosiciones[j][3])].ToString() + "<span style='color: #FF0000'>"+(nombrePosiciones[j][1].ToString().Split('-'))[0]+"</span> <p><a style='cursor:pointer' onclick=\"__doPostBack('_ctl1$lnkAgregarItem','"+nombrePosiciones[j][0]+"');\">Agregar Item</a></p><p><a style='cursor:pointer' onclick=\"__doPostBack('_ctl1$lnkEliminarUbicacion','"+nombrePosiciones[j][0]+"');\">Eliminar Ubicación</a></p>" + ConstruirHTMLCeldaReferencias(select,Convert.ToInt32(nombrePosiciones[j][3])); fila[Convert.ToInt32(nombrePosiciones[j][3])] = fila[Convert.ToInt32(nombrePosiciones[j][3])].ToString() + "<span style='color: #FF0000'>" + nombrePosiciones[j][1].ToString() + "</span> <p><a style='cursor:pointer' onclick=\"__doPostBack('_ctl1$lnkAgregarItem','" + nombrePosiciones[j][0] + "');\">Agregar Item</a></p><p><a style='cursor:pointer' onclick=\"__doPostBack('_ctl1$lnkEliminarUbicacion','" + nombrePosiciones[j][0] + "');\">Eliminar Ubicación</a></p>" + ConstruirHTMLCeldaReferencias(select, Convert.ToInt32(nombrePosiciones[j][3])); } #region Código candidato a eliminación //Se consulta que items estan relacionados en a la ubicacion configurada dependiendo de la fila /*if(select.Length > 0) * fila[Convert.ToInt32((select[0][2].ToString().Split('-'))[1].Trim())] = fila[Convert.ToInt32((select[0][2].ToString().Split('-'))[1].Trim())].ToString()+ ConstruirHTMLCeldaReferencias(select,Convert.ToInt32((select[0][2].ToString().Split('-'))[1].Trim()));*/ //Se determina el colspan de las columnas dependiendo de la cantidad de columans especificadas para esa fila #endregion int colspanInst = maxColumns; int cantidadColumnasFila = maxColumns; try { cantidadColumnasFila = Convert.ToInt32(dsItemsUbicaciones.Tables[1].Compute("MAX(numero_columna)", "parametro_filas=" + elemFilas[i].ToString() + "")); colspanInst = (int)((double)maxColumns / (double)cantidadColumnasFila); } catch { } DataRow dr = colspan.NewRow(); dr[0] = Convert.ToInt32(elemFilas[i]); dr[1] = colspanInst; dr[2] = cantidadColumnasFila; colspan.Rows.Add(dr); //Ahora vamos a determinar el colspan de la columna determinado dtUbicaciones.Rows.Add(fila); } } #endregion } break; } return(colspan); }
protected void LlenarGrilla(string codUbi) { DataTable colspan = PrepararDtUbicaciones(codUbi); int nivel = Ubicacion.DeterminarNivel(codUbi); DataSet ds = new DataSet(); switch (nivel) { case 1: { int i, j; //Traemos la cantidad de filas y columnas maximas permitidas int numFilas = Convert.ToInt32(DBFunctions.SingleData("SELECT cinv_filmatbod FROM cinventario")); int numCols = Convert.ToInt32(DBFunctions.SingleData("SELECT cinv_colmatbod FROM cinventario")); //Debemos traer las ubicaciones que tienen como ubicacion padre la de codigo codUbi DBFunctions.Request(ds, IncludeSchema.NO, "SELECT pubi_nombre, TRIM(pubi_ubicespacial) FROM pubicacionitem WHERE pubi_codpad=" + codUbi + " AND pubi_ubicespacial is not null"); //dentro de dtUbicaciones, guardamos las ubicaciones que existen //La ubicacion espacial se almacen Filas-Columnas if (ds.Tables[0].Rows.Count > dtUbicaciones.Rows.Count * (dtUbicaciones.Columns.Count - 1)) { Utils.MostrarAlerta(Response, "La configuracion de filas es menor a la generada !"); return; } for (i = 0; i < ds.Tables[0].Rows.Count; i++) { string[] ubicEspacial = ds.Tables[0].Rows[i][1].ToString().Split('-'); dtUbicaciones.Rows[Convert.ToInt32(ubicEspacial[0].Trim()) - 1][Convert.ToInt32(ubicEspacial[1].Trim())] = ds.Tables[0].Rows[i][0].ToString(); } BindDgUbicaciones(); //Ahora revisamos que ubicaciones estan libres y podemos asignar una ubicacion de nivel 2 for (i = 0; i < numFilas; i++) { for (j = 1; j <= numCols; j++) { if (dtUbicaciones.Rows[i][j].ToString() == "") { dgUbicaciones.Items[i].Cells[j].BackColor = Color.LightGreen; LinkButton lnkCrear = new LinkButton(); lnkCrear.Text = "Crear"; lnkCrear.BackColor = Color.Transparent; lnkCrear.CommandArgument = (i + 1) + "-" + j; lnkCrear.Command += new CommandEventHandler(CrearUbicacionNivel2); dgUbicaciones.Items[i].Cells[j].Controls.Add(lnkCrear); } else { dgUbicaciones.Items[i].Cells[j].BackColor = Color.Orange; //Contenedor de los objetos dentro de la tabla y grafica de la bodega. Panel contenedor = new Panel(); contenedor.CssClass = "imgBodega"; //Label de la sección. Panel contSeccion = new Panel(); contSeccion.CssClass = "seccion"; Label literal = new Label(); literal.Text = dtUbicaciones.Rows[i][j].ToString(); contSeccion.Controls.Add(literal); contenedor.Controls.Add(contSeccion); //Link para ubicar configuración. Panel contConfigurar = new Panel(); contConfigurar.CssClass = "configurar"; LinkButton lnkConfigurar = new LinkButton(); lnkConfigurar.Text = "Configurar"; lnkConfigurar.Attributes.Add("onclick", "espera()"); lnkConfigurar.CommandArgument = (i + 1) + "-" + j; lnkConfigurar.Command += new CommandEventHandler(ConfigurarUbicacionNivel2); contConfigurar.Controls.Add(lnkConfigurar); contenedor.Controls.Add(contConfigurar); //Link para ubicar la eliminación. Panel contEliminar = new Panel(); contEliminar.CssClass = "eliminar"; LinkButton lnkEliminar = new LinkButton(); lnkEliminar.Text = "Eliminar"; lnkEliminar.CommandArgument = (i + 1) + "-" + j; lnkEliminar.Command += new CommandEventHandler(EliminarUbicacionNivel2); contEliminar.Controls.Add(lnkEliminar); contenedor.Controls.Add(contEliminar); dgUbicaciones.Items[i].Cells[j].Controls.Add(contenedor); } dgUbicaciones.Items[i].Cells[j].HorizontalAlign = HorizontalAlign.Center; dgUbicaciones.Items[i].Cells[j].ForeColor = Color.Black; } } } break; case 2: { int i, j; if (DBFunctions.RecordExist("SELECT pubi_codpad FROM pubicacionitem WHERE pubi_codpad=" + codUbi + "")) { BindDgUbicaciones(); for (i = 0; i < dgUbicaciones.Items.Count; i++) { int contSpan = 0; for (j = 1; j < dgUbicaciones.Items[i].Cells.Count; j++) { if (contSpan < maximoSpan && j < Convert.ToInt32(colspan.Rows[i][2])) { FormatoCeldaNivel3(i, j, Convert.ToInt32(colspan.Rows[i][1])); contSpan += Convert.ToInt32(colspan.Rows[i][1]); } else if (contSpan < maximoSpan && j >= Convert.ToInt32(colspan.Rows[i][2])) { FormatoCeldaNivel3(i, j, maximoSpan - contSpan); contSpan = maximoSpan; } else { FormatoCeldaNivel3(i, j, 0); } } } } } break; } }
//Metodo que permite mostrar la información de la ubicación que vamos a configurar. protected void PublicarInfoUbicacion(string codUbi) { int nivel = Ubicacion.DeterminarNivel(codUbi); int filas = 0, columnas = 3; if (nivel == 1) { filas = 2; } else if (nivel == 2) { filas = 4; } for (int i = 0; i < filas; i++) { TableRow tr = new TableRow(); for (int j = 0; j < columnas; j++) { TableCell tc = new TableCell(); if (i == 0 && j == 0) { tc.ColumnSpan = 3; tc.ForeColor = Color.RoyalBlue; tc.Text = "INFORMACIÓN DE LA BODEGA :"; } if (i == 1 && j == 0) { if (nivel == 1) { tc.Text = "Código Ubicación : " + codUbi; } else if (nivel == 2) { tc.Text = "Código Ubicación : " + DBFunctions.SingleData("SELECT pubi_codigo FROM pubicacionitem WHERE pubi_codigo=(SELECT pubi_codpad FROM pubicacionitem WHERE pubi_codigo=" + codUbi + ")"); } } if (i == 1 && j == 1) { if (nivel == 1) { tc.Text = "Nombre Ubicación : " + DBFunctions.SingleData("SELECT pubi_nombre FROM pubicacionitem WHERE pubi_codigo=" + codUbi + ""); } else if (nivel == 2) { tc.Text = "Código Ubicación : " + DBFunctions.SingleData("SELECT pubi_nombre FROM pubicacionitem WHERE pubi_codigo=(SELECT pubi_codpad FROM pubicacionitem WHERE pubi_codigo=" + codUbi + ")"); } } if (i == 1 && j == 2) { if (nivel == 1) { tc.Text = "Almacen Relacionado : " + DBFunctions.SingleData("SELECT palm_descripcion FROM palmacen WHERE tvig_vigencia='V' and palm_almacen=(SELECT palm_almacen FROM pubicacionitem WHERE pubi_codigo=" + codUbi + ")"); } else if (nivel == 2) { tc.Text = "Almacen Relacionado : " + DBFunctions.SingleData("SELECT palm_descripcion FROM palmacen WHERE tvig_vigencia='V' and palm_almacen=(SELECT palm_almacen FROM pubicacionitem WHERE pubi_codigo=(SELECT pubi_codpad FROM pubicacionitem WHERE pubi_codigo=" + codUbi + "))"); } } if (i == 2 && j == 0) { tc.ColumnSpan = 3; tc.ForeColor = Color.RoyalBlue; tc.Text = "INFORMACIÓN DEL ESTANTE :"; } if (i == 3 && j == 0) { tc.Text = "Código Ubicación : " + codUbi; } if (i == 3 && j == 1) { tc.Text = "Nombre Ubicación : " + DBFunctions.SingleData("SELECT pubi_nombre FROM pubicacionitem WHERE pubi_codigo=" + codUbi + ""); } if (i == 3 && j == 2) { tc.Text = "Ubicación Espacial : " + DBFunctions.SingleData("SELECT pubi_ubicespacial FROM pubicacionitem WHERE pubi_codigo=" + codUbi + ""); } tr.Cells.Add(tc); } if (itemubicacion != "") { tbCodigoItem.Text = itemubicacion; btnVolver.Visible = false; btnretubi.Visible = true; } tblInfo.Rows.Add(tr); } }