//Metodo usado para calcular el peso base(1 unidad) para Lanzamiento(Planificacion) /// <summary> /// Ejecuta un procedimiento de cálculo para hallar el peso base en tallas por unidad de un contrato. Este proceso /// es usado por el área de Planificación para el lanzamiento de prendas. /// </summary> /// <param name="_contratoDetalle">Objeto de tipo ContratoDetalleDTO con el detalle del contrato</param> /// <returns>Diccionario de tipo (string, decimal) con los pesos por talla.</returns> public Dictionary <string, decimal> CalcularPesosBasePorContratoTalla(ContratoDetalleDTO _contratoDetalle) { Dictionary <string, decimal> dicKilos = new Dictionary <string, decimal>(); string modelo = _contratoDetalle.ModeloAA; for (int x = 0; x < 9; x++) { string talla = _contratoDetalle.Tallas[x]; if (talla != "") { dicKilos.Add(talla, PesosPorPieza(talla, 1, modelo, 0).Sum()); } } return(dicKilos); }
/// <summary> /// Ejecuta un procedimiento de cálculo para hallar el peso correcto por cada modelo/color a lanzar. Este /// proceso es usado por el área de Abastecimiento para el cálculo de materia prima. /// </summary> /// <param name="_contratoDetalle">Objeto de tipo ContratoDetalleDTO con el detalle del contrato</param> /// <returns>Variable de tipo decimal con el peso en kilos del contrato.</returns> public decimal CalcularKilosPorContrato(ContratoDetalleDTO _contratoDetalle) { decimal kilosNecesarios = 0; string modelo = _contratoDetalle.ModeloAA; int[] cantAlanzar = _contratoDetalle.Cantidades; for (int x = 0; x < cantAlanzar.Length; x++) { string talla = _contratoDetalle.Tallas[x]; int cantidad = cantAlanzar[x]; if (cantidad != 0) { kilosNecesarios += PesosPorPieza(talla, cantidad, modelo, 0).Sum(); } } return(kilosNecesarios); }
/// <summary> /// Ejecuta un procedimiento DAL de Detalle de Contrato y el resultado es agrupado por los siguientes campos: /// [numero_contrato, Tipo_Contrato, Cod_Modelo_AA, Cod_Modelo_CLiente, c_codmat, Cod_Producto, c_codcol, Cod_Color_Cliente, /// cod_grupo_tallas, talla1, talla2, talla3, talla4, talla5, talla6, talla7, talla8, talla9, Cod_Proveedor, Cod_Proveedor_2, /// Linea, Galga, Titulo] /// Luego con el resultado agrupado se pobla un objeto de tipo ContratoDetalleDTO. /// </summary> /// <param name="_contrato">Número de Contrato</param> /// <param name="_agrupacion">Flag de Agrupación</param> /// <returns>Lista Genérica de tipo ContratoDetalleDTO con los datos del grupo</returns> public List <ContratoDetalleDTO> ListarDetalleContrato(int _contrato, bool _agrupacion) { DataTable dtReturn = _contratoDal.SelectDetalleContrato(_contrato); //Linq to DataTable para agrupar el resultado if (_agrupacion) { var dtAgrupado = from cd in dtReturn.AsEnumerable() group cd by new { numero_contrato = cd.Field <int>("numero_contrato"), Tipo_Contrato = cd.Field <string>("Tipo_Contrato"), Cod_Modelo_AA = cd.Field <string>("Cod_Modelo_AA"), Cod_Modelo_Cliente = cd.Field <string>("Cod_Modelo_Cliente"), c_codmat = cd.Field <string>("c_codmat"), Cod_Producto = cd.Field <string>("Cod_Producto"), c_codcol = cd.Field <string>("c_codcol"), Cod_Color_Cliente = cd.Field <string>("Cod_Color_Cliente"), cod_grupo_tallas = cd.Field <string>("cod_grupo_tallas"), talla1 = cd.Field <string>("talla1"), talla2 = cd.Field <string>("talla2"), talla3 = cd.Field <string>("talla3"), talla4 = cd.Field <string>("talla4"), talla5 = cd.Field <string>("talla5"), talla6 = cd.Field <string>("talla6"), talla7 = cd.Field <string>("talla7"), talla8 = cd.Field <string>("talla8"), talla9 = cd.Field <string>("talla9"), Cod_Proveedor = cd.Field <double>("Cod_Proveedor"), Cod_proveeedor_2 = cd.Field <double>("Cod_proveedor_2"), Linea = cd.Field <string>("Linea"), Galga = cd.Field <string>("Galga"), Titulo = cd.Field <string>("Titulo") } into grupo select new { Item = grupo.Max(x => x.Field <short>("Item")), numero_contrato = grupo.Key.numero_contrato, Tipo_Contrato = grupo.Key.Tipo_Contrato, Cod_Modelo_AA = grupo.Key.Cod_Modelo_AA, Cod_Modelo_Cliente = grupo.Key.Cod_Modelo_Cliente, c_codmat = grupo.Key.c_codmat, Cod_Producto = grupo.Key.Cod_Producto, c_codcol = grupo.Key.c_codcol, Cod_Color_Cliente = grupo.Key.Cod_Color_Cliente, cod_grupo_tallas = grupo.Key.cod_grupo_tallas, talla1 = grupo.Key.talla1 == null ? "" : grupo.Key.talla1, talla2 = grupo.Key.talla2 == null ? "" : grupo.Key.talla2, talla3 = grupo.Key.talla3 == null ? "" : grupo.Key.talla3, talla4 = grupo.Key.talla4 == null ? "" : grupo.Key.talla4, talla5 = grupo.Key.talla5 == null ? "" : grupo.Key.talla5, talla6 = grupo.Key.talla6 == null ? "" : grupo.Key.talla6, talla7 = grupo.Key.talla7 == null ? "" : grupo.Key.talla7, talla8 = grupo.Key.talla8 == null ? "" : grupo.Key.talla8, talla9 = grupo.Key.talla9 == null ? "" : grupo.Key.talla9, C1 = grupo.Sum(x => x.Field <int>("C1")), C2 = grupo.Sum(x => x.Field <int>("C2")), C3 = grupo.Sum(x => x.Field <int>("C3")), C4 = grupo.Sum(x => x.Field <int>("C4")), C5 = grupo.Sum(x => x.Field <int>("C5")), C6 = grupo.Sum(x => x.Field <int>("C6")), C7 = grupo.Sum(x => x.Field <int>("C7")), C8 = grupo.Sum(x => x.Field <int>("C8")), C9 = grupo.Sum(x => x.Field <int>("C9")), Precio_Total = grupo.Sum(x => x.Field <double>("Precio_Total")), Adicional = grupo.Sum(x => x.Field <Single>("Adicional")), Cod_Proveedor = grupo.Key.Cod_Proveedor, Cod_Proveedor_2 = grupo.Key.Cod_proveeedor_2, Linea = grupo.Key.Linea, Galga = grupo.Key.Galga, Titulo = grupo.Key.Titulo, Cant_Contramuestra = int.Parse(grupo.Sum(x => x.Field <int?>("Cant_Contramuestra")).Value.ToString()), Peso_Estimado = double.Parse(grupo.Sum(x => x.Field <double?>("Peso_Estimado")).Value.ToString()), obs1 = grupo.Max(x => x.Field <string>("obs1")).ToString() }; var ans = dtAgrupado.ToList(); dtReturn = Helper.ToDataTable(ans); } List <ContratoDetalleDTO> listContratoDetalle = new List <ContratoDetalleDTO>(); foreach (DataRow dr in dtReturn.Rows) { object[] tallas = dr.ItemArray.Skip(10).Take(9).ToArray(); object[] cantidades = dr.ItemArray.Skip(19).Take(9).ToArray(); for (int i = 0; i < tallas.Length; i++) { if (tallas[i].Equals(DBNull.Value)) { tallas[i] = ""; } } ContratoDetalleDTO contratoDetalle = new ContratoDetalleDTO() { Item = int.Parse(dr["Item"].ToString()), Numero = int.Parse(dr["numero_contrato"].ToString()), Tipo = dr["Tipo_Contrato"].ToString(), ModeloAA = dr["Cod_Modelo_AA"].ToString(), ModeloCliente = dr["Cod_Modelo_Cliente"].ToString(), CodMaterial = dr["c_codmat"].ToString(), CodProducto = dr["Cod_Producto"].ToString(), CodColor = dr["c_codcol"].ToString(), ColorCliente = dr["Cod_Color_Cliente"].ToString(), GrupoTallas = dr["cod_grupo_Tallas"].ToString(), Tallas = tallas.Cast <string>().ToArray(), Cantidades = cantidades.Cast <int>().ToArray(), PrecioTotal = float.Parse(dr["Precio_Total"].ToString()), Adicional = double.Parse(dr["Adicional"].ToString()), CodProveedor = float.Parse(dr["Cod_Proveedor"].ToString()), CodProveedor2 = float.Parse(dr["Cod_Proveedor_2"].ToString()), Linea = dr["Linea"].ToString(), Galga = dr["Galga"].ToString(), Titulo = dr["Titulo"].ToString(), CantContramuestra = dr["Cant_Contramuestra"].Equals(DBNull.Value) ? 0 : int.Parse(dr["Cant_Contramuestra"].ToString()), PesoEstimado = dr["Peso_Estimado"].Equals(DBNull.Value) ? 0 : float.Parse(dr["Peso_Estimado"].ToString()), Observaciones = dr["obs1"].Equals(DBNull.Value) ? "" : dr["Peso_Estimado"].ToString() }; listContratoDetalle.Add(contratoDetalle); } return(listContratoDetalle); }
protected void rblColores_SelectedIndexChanged(object sender, EventArgs e) { List <ContratoDetalleDTO> _listaContratoDetModelo = ((List <ContratoDetalleDTO>)Session["ListaContratoDetModelo"]) .Where(x => x.CodColor.Equals(rblColores.SelectedValue)).ToList(); ContratoDetalleDTO _lanzado = new ContratoDetalleDTO { Cantidades = _lanzamientoBll.ListarCantidadesLanzadas(int.Parse(hidContrato.Value), lblModelo.Text, rblColores.SelectedValue) }; _listaContratoDetModelo.Add(_lanzado); gridCantSolicitadas.DataSource = _listaContratoDetModelo; gridCantSolicitadas.DataBind(); //RECORRER GRID PARA EVALUAR CANTIDADES FALTANTES POR LANZAR int[] _cantidadesLanzadas = new int[9]; int[] _cantidadesSolicitadas = new int[9]; int indice = 1; foreach (GridViewRow row in gridCantSolicitadas.Rows) { if (indice == 1) { for (int c = 0; c < 9; c++) { _cantidadesSolicitadas[c] += int.Parse(((Label)row.FindControl("lblCant" + (c + 1))).Text); } } else if (indice == 2) { for (int c = 0; c < 9; c++) { _cantidadesLanzadas[c] += int.Parse(((Label)row.FindControl("lblCant" + (c + 1))).Text); } break; } indice++; } txtCant1.Text = (int.Parse(_cantidadesSolicitadas[0].ToString()) - int.Parse(_cantidadesLanzadas[0].ToString())).ToString(); txtCant2.Text = (int.Parse(_cantidadesSolicitadas[1].ToString()) - int.Parse(_cantidadesLanzadas[1].ToString())).ToString(); txtCant3.Text = (int.Parse(_cantidadesSolicitadas[2].ToString()) - int.Parse(_cantidadesLanzadas[2].ToString())).ToString(); txtCant4.Text = (int.Parse(_cantidadesSolicitadas[3].ToString()) - int.Parse(_cantidadesLanzadas[3].ToString())).ToString(); txtCant5.Text = (int.Parse(_cantidadesSolicitadas[4].ToString()) - int.Parse(_cantidadesLanzadas[4].ToString())).ToString(); txtCant6.Text = (int.Parse(_cantidadesSolicitadas[5].ToString()) - int.Parse(_cantidadesLanzadas[5].ToString())).ToString(); txtCant7.Text = (int.Parse(_cantidadesSolicitadas[6].ToString()) - int.Parse(_cantidadesLanzadas[6].ToString())).ToString(); txtCant8.Text = (int.Parse(_cantidadesSolicitadas[7].ToString()) - int.Parse(_cantidadesLanzadas[7].ToString())).ToString(); txtCant9.Text = (int.Parse(_cantidadesSolicitadas[8].ToString()) - int.Parse(_cantidadesLanzadas[8].ToString())).ToString(); //Guardar Cantidades Solicitadas en Variable Global, para luego validar Session["arrayCantidadesSolicitadas"] = _cantidadesSolicitadas; //CALCULAR KILOS NECESARIOS int[] cantidadesAlanzar = new int[] { int.Parse(txtCant1.Text), int.Parse(txtCant2.Text), int.Parse(txtCant3.Text), int.Parse(txtCant4.Text), int.Parse(txtCant5.Text), int.Parse(txtCant6.Text), int.Parse(txtCant7.Text), int.Parse(txtCant8.Text), int.Parse(txtCant9.Text) }; Dictionary <string, decimal> pesosBase = Session["dicPesosBase"] as Dictionary <string, decimal>; decimal pesoFinal = 0; int ind = 0; foreach (string talla in _listaContratoDetModelo[0].Tallas) { if (talla != "") { pesoFinal = pesoFinal + (pesosBase[talla] * cantidadesAlanzar[ind]); } ind++; } lblKgNecesarios.Text = pesoFinal.ToString(); //EVALUAR SI EL COLOR TIENE COMBINACION string color = rblColores.SelectedValue.ToString(); if (color.Substring(0, 2) == "C0") { //Limpiar grid de Combinaciones gridMaterialColor.DataSource = new DataTable(); gridMaterialColor.DataBind(); string correlativoCol = color.Substring(1, color.Length - 1); gridMaterialColor.DataSource = _hojaCombinacionesBll.ListarColoresCombinacion(lblModelo.Text, correlativoCol.Trim(), decimal.Parse(lblKgNecesarios.Text)); gridMaterialColor.DataBind(); btnMaterialColor.Visible = true; } else { btnMaterialColor.Visible = false; } txtMaterial.Text = lblCodMaterial.Text.Trim() + "-HC-" + lblTitulo.Text.Trim() + "-" + rblColores.SelectedValue.ToString().Trim(); }