public DataSet GetMateriasPrimasHistorico(DataTable DtProductosBatch, int MateriaPrimaHistoricoID, string EmpresaID, string SedeID) { CD_Produccion objCD_Produccion = new CD_Produccion(AppSettings.GetConnectionString); string Cadena = "'"; foreach (DataRow Dr in DtProductosBatch.Rows) { Cadena += Dr["ProductoID"].ToString() + "', '"; } Cadena = "(" + Cadena.Substring(0, Cadena.Length - 3) + ")"; DataTable Temp = new DataTable(); DataTable DtMAI = new DataTable(); DataTable DtMII = new DataTable(); //traer la tabla con formulas Temp = objCD_Produccion.GetMateriasPrimasHistorico(Cadena, MateriaPrimaHistoricoID); Temp.TableName = "Temp"; //crear tablas DataTable DtStockLocalSede = new DataTable(); DataTable DtPlanProduccionMAI = new DataTable(); DtPlanProduccionMAI.TableName = "DtPlanProduccionMAI"; DataTable DtPlanProduccionMII = new DataTable(); DtPlanProduccionMII.TableName = "DtPlanProduccionMII"; //crear tabla para almacenar la sumatoria de columnas con el batch DataTable DtSumatoria = new DataTable(); DtSumatoria.Columns.Add("NomProducto", typeof(string)); DtSumatoria.Columns.Add("Cantidad", typeof(decimal)); //traer el stock local string Cadena2 = "'"; foreach (DataRow Dr in Temp.Rows) { Cadena2 += Dr["ProductoIDMateria"].ToString() + "', '"; } Cadena2 = "(" + Cadena2.Substring(0, Cadena2.Length - 3) + ")"; DtStockLocalSede = objCD_Produccion.GetStockProductosSede(Cadena2, EmpresaID + SedeID); DtStockLocalSede.TableName = "DtStockLocalSede"; //filtrar macro y micro DataView Dv1 = new DataView(Temp); Dv1.RowFilter = "AlmacenMateria = 'MAI'"; DtMAI = Dv1.ToTable(); DataView Dv2 = new DataView(Temp); Dv2.RowFilter = "AlmacenMateria = 'MII'"; DtMII = Dv2.ToTable(); #region Macroinsumos //filtrar todos los productos para que se conviertan en columnas DataTable DtFiltro1 = new DataTable(); DtFiltro1 = new BaseFunctions().SelectDistinct(DtMAI, "ProductoIDMateria", "NomProducto"); //crear las columnas DtPlanProduccionMAI.Columns.Add("Batch", typeof(string)); DtPlanProduccionMAI.Columns.Add("ProductoID", typeof(string)); DtPlanProduccionMAI.Columns.Add("NomProducto", typeof(string)); foreach (DataRow Dr in DtFiltro1.Rows) { DtPlanProduccionMAI.Columns.Add(Dr["NomProducto"].ToString(), typeof(decimal)); } //filtrar e ir agregando foreach (DataRow dr2 in DtProductosBatch.Rows) { DataRow DR = DtPlanProduccionMAI.NewRow(); DR["Batch"] = dr2["Batch"]; DR["ProductoID"] = dr2["ProductoID"]; DR["NomProducto"] = dr2["NomProducto"]; foreach (DataRow dr3 in DtFiltro1.Rows) { //filtrar e ir agregando DataView Dv = new DataView(DtMAI); Dv.RowFilter = "ProductoID = '" + dr2["ProductoID"] + "' and NomProducto = '" + dr3["NomProducto"] + "'"; if (Dv.Count > 0) { DR[dr3["NomProducto"].ToString()] = Convert.ToDecimal(Dv[0]["Cantidad"]) * Convert.ToDecimal(dr2["Batch"]); } else { DR[dr3["NomProducto"].ToString()] = 0; } } DtPlanProduccionMAI.Rows.Add(DR); } //agregar las sumatorias de columnas DataRow DRs = DtPlanProduccionMAI.NewRow(); DRs["Batch"] = null; DRs["ProductoID"] = null; DRs["NomProducto"] = "Totales: "; for (int x = 3; x < DtPlanProduccionMAI.Columns.Count; x++) { decimal Valor = 0; foreach (DataRow dr3 in DtPlanProduccionMAI.Rows) { Valor += Convert.ToDecimal(dr3[x]); } DRs[DtPlanProduccionMAI.Columns[x].ColumnName] = Valor; //agregar a la tabla DtSumatoria lo recien sumado DataRow DrSum = DtSumatoria.NewRow(); DrSum["NomProducto"] = DtPlanProduccionMAI.Columns[x].ColumnName; DrSum["Cantidad"] = Valor; DtSumatoria.Rows.Add(DrSum); } DtPlanProduccionMAI.Rows.Add(DRs); //agregar el stock Disponible Local DataRow DrStockDMAI = DtPlanProduccionMAI.NewRow(); DrStockDMAI["Batch"] = null; DrStockDMAI["ProductoID"] = null; DrStockDMAI["NomProducto"] = "Disponible local: "; for (int x = 3; x < DtPlanProduccionMAI.Columns.Count; x++) { //buscar el valor y agregarlo DataView DvS = new DataView(DtStockLocalSede); DvS.RowFilter = "NomProducto = '" + DtPlanProduccionMAI.Columns[x].ColumnName + "'"; if (DvS.Count == 1) { DrStockDMAI[DtPlanProduccionMAI.Columns[x].ColumnName] = DvS[0]["StockDisponible"]; } else { DrStockDMAI[DtPlanProduccionMAI.Columns[x].ColumnName] = 0; } } DtPlanProduccionMAI.Rows.Add(DrStockDMAI); //agregar el stock Local DataRow DrStockLMAI = DtPlanProduccionMAI.NewRow(); DrStockLMAI["Batch"] = null; DrStockLMAI["ProductoID"] = null; DrStockLMAI["NomProducto"] = "Stock local: "; for (int x = 3; x < DtPlanProduccionMAI.Columns.Count; x++) { //buscar el valor y agregarlo DataView DvS = new DataView(DtStockLocalSede); DvS.RowFilter = "NomProducto = '" + DtPlanProduccionMAI.Columns[x].ColumnName + "'"; if (DvS.Count == 1) { DrStockLMAI[DtPlanProduccionMAI.Columns[x].ColumnName] = DvS[0]["StockActual"]; } else { DrStockLMAI[DtPlanProduccionMAI.Columns[x].ColumnName] = 0; } } DtPlanProduccionMAI.Rows.Add(DrStockLMAI); #endregion #region Microinsumos //filtrar todos los productos para que se conviertan en columnas DataTable DtFiltro2 = new DataTable(); DtFiltro2 = new BaseFunctions().SelectDistinct(DtMII, "ProductoIDMateria", "NomProducto"); //crear las columnas DtPlanProduccionMII.Columns.Add("Batch", typeof(string)); DtPlanProduccionMII.Columns.Add("ProductoID", typeof(string)); DtPlanProduccionMII.Columns.Add("NomProducto", typeof(string)); foreach (DataRow Dr in DtFiltro2.Rows) { DtPlanProduccionMII.Columns.Add(Dr["NomProducto"].ToString(), typeof(decimal)); } //filtrar e ir agregando foreach (DataRow dr2 in DtProductosBatch.Rows) { DataRow DR = DtPlanProduccionMII.NewRow(); DR["Batch"] = dr2["Batch"]; DR["ProductoID"] = dr2["ProductoID"]; DR["NomProducto"] = dr2["NomProducto"]; foreach (DataRow dr3 in DtFiltro2.Rows) { //filtrar e ir agregando DataView Dv = new DataView(DtMII); Dv.RowFilter = "ProductoID = '" + dr2["ProductoID"] + "' and NomProducto = '" + dr3["NomProducto"] + "'"; if (Dv.Count > 0) { DR[dr3["NomProducto"].ToString()] = Convert.ToDecimal(Dv[0]["Cantidad"]) * Convert.ToDecimal(dr2["Batch"]); } else { DR[dr3["NomProducto"].ToString()] = 0; } } DtPlanProduccionMII.Rows.Add(DR); } //agregar las sumatorias de columnas DataRow DRs2 = DtPlanProduccionMII.NewRow(); DRs2["Batch"] = null; DRs2["ProductoID"] = null; DRs2["NomProducto"] = "Totales: "; for (int x = 3; x < DtPlanProduccionMII.Columns.Count; x++) { decimal Valor = 0; foreach (DataRow dr3 in DtPlanProduccionMII.Rows) { Valor += Convert.ToDecimal(dr3[x]); } DRs2[DtPlanProduccionMII.Columns[x].ColumnName] = Valor; //agregar a la tabla DtSumatoria lo recien sumado DataRow DrSum = DtSumatoria.NewRow(); DrSum["NomProducto"] = DtPlanProduccionMII.Columns[x].ColumnName; DrSum["Cantidad"] = Valor; DtSumatoria.Rows.Add(DrSum); } DtPlanProduccionMII.Rows.Add(DRs2); //agregar el stock Disponible Local DataRow DrStockDMII = DtPlanProduccionMII.NewRow(); DrStockDMII["Batch"] = null; DrStockDMII["ProductoID"] = null; DrStockDMII["NomProducto"] = "Disponible local: "; for (int x = 3; x < DtPlanProduccionMII.Columns.Count; x++) { //buscar el valor y agregarlo DataView DvS = new DataView(DtStockLocalSede); DvS.RowFilter = "NomProducto = '" + DtPlanProduccionMII.Columns[x].ColumnName + "'"; if (DvS.Count == 1) { DrStockDMII[DtPlanProduccionMII.Columns[x].ColumnName] = DvS[0]["StockDisponible"]; } else { DrStockDMII[DtPlanProduccionMII.Columns[x].ColumnName] = 0; } } DtPlanProduccionMII.Rows.Add(DrStockDMII); //agregar el stock Local DataRow DrStockLMII = DtPlanProduccionMII.NewRow(); DrStockLMII["Batch"] = null; DrStockLMII["ProductoID"] = null; DrStockLMII["NomProducto"] = "Stock local: "; for (int x = 3; x < DtPlanProduccionMII.Columns.Count; x++) { //buscar el valor y agregarlo DataView DvS = new DataView(DtStockLocalSede); DvS.RowFilter = "NomProducto = '" + DtPlanProduccionMII.Columns[x].ColumnName + "'"; if (DvS.Count == 1) { DrStockLMII[DtPlanProduccionMII.Columns[x].ColumnName] = DvS[0]["StockActual"]; } else { DrStockLMII[DtPlanProduccionMII.Columns[x].ColumnName] = 0; } } DtPlanProduccionMII.Rows.Add(DrStockLMII); #endregion #region Crear Dataset y devolverlo DataSet Ds = new DataSet(); Ds.Tables.Add(DtPlanProduccionMAI); Ds.Tables.Add(DtPlanProduccionMII); Ds.Tables.Add(Temp); Ds.Tables.Add(DtStockLocalSede); DtSumatoria.TableName = "DtSumatoria"; Ds.Tables.Add(DtSumatoria); return(Ds); #endregion }