/// <summary> /// Recorre el detalle de lanzamiento para ejecutar el procedimiento DAL de Insert Lanzamiento Detalle. /// Agrupa el detalle de lanzamiento para generar una lista de tipo LanzamientoCabDTO, para recorrerla junto al /// compuesto de lanzamiento en el caso haya datos, e ir llamando al procedimiento DAL de Insert Lanzamiento Compuesto /// por cada objeto de tipo LanzamientoCompDTO creado. /// </summary> /// <param name="listLanzamientoDet">Lista genérica de tipo LanzamientoDetDTO con el detalle del lanzamiento</param> /// <param name="listMaterialPorColor">Lista genérica de tipo MaterialPorColorDTO con el compuesto del lanzamiento</param> /// <param name="_user">Nombre de Usuario</param> /// <returns>Variable de tipo int con el conteo de ingresos realizados.</returns> public int IngresarLanzamiento(List <LanzamientoDetDTO> listLanzamientoDet, List <MaterialPorColorDTO> listMaterialPorColor, string _user) { int nroRegistros = 0; foreach (LanzamientoDetDTO det in listLanzamientoDet) { if (_lanzamientoDal.InsertLanzamientoDet(det) > 0) { nroRegistros++; } } List <LanzamientoCabDTO> listLanzamientoCab = listLanzamientoDet .GroupBy(x => x.NumLanzamiento) .Select(g => new LanzamientoCabDTO { NumDocumento = g.Max(x => x.NumDocumento), NumLanzamiento = g.Key, Fecha = g.Max(x => x.FechaIngreso), Usuario = g.Max(x => x.Usuario) }).ToList(); foreach (LanzamientoCabDTO cab in listLanzamientoCab) { _lanzamientoDal.InsertLanzamientoCab(cab); } //Evaluar si hay colores combinados agregados if (listMaterialPorColor.Count > 0) { //Agrupar LanzamientoDetalle por Orden var AgrupadoOrdenLanzDet = from data in listLanzamientoDet.AsEnumerable() group data by new { orden = data.Orden, } into grupo select new { NumDocumento = grupo.Max(x => x.NumDocumento), NumLanzamiento = grupo.Max(x => x.NumLanzamiento), Orden = grupo.Key.orden, Maquina = grupo.Max(x => x.Maquina), Color = grupo.Max(x => x.Color), Modelo = grupo.Max(x => x.Modelo), CodProducto = grupo.Max(x => x.CodProducto), FechaIngreso = grupo.Max(x => x.FechaIngreso), HoraIngreso = grupo.Max(x => x.HoraIngreso), FechaSolicitud = grupo.Max(x => x.FechaSolicitud) }; //Agrupar LanzamientoDetalle por Color y Sumar pesos para Lanzamiento Compuesto var AgrupadoColorLanzDet = from ld in listLanzamientoDet.AsEnumerable() group ld by new { color = ld.Color } into grupo select new { color = grupo.Key.color, kilos = grupo.Sum(x => x.KilosTot) }; foreach (var item in AgrupadoOrdenLanzDet) { int secuencia = 1; var listFiltroMaterialPorColor = listMaterialPorColor.Where(x => x.ColorBase == item.Color).ToList(); var kilosPorColor = AgrupadoColorLanzDet .FirstOrDefault(x => x.color == item.Color).kilos.ToString(); foreach (MaterialPorColorDTO matCol in listFiltroMaterialPorColor) { decimal calculoKilos = (decimal.Parse(kilosPorColor) / 100) * matCol.Porcentaje; LanzamientoCompDTO lanzComp = new LanzamientoCompDTO() { NumContrato = item.NumDocumento, NumLanzamiento = item.NumLanzamiento, Orden = item.Orden, Maquina = char.Parse(item.Maquina), Color = matCol.Color, Calidad = matCol.Calidad, Secuencia = secuencia, Modelo = item.Modelo, CodProducto = matCol.CodProducto, Usuario = _user, FechaIngreso = item.FechaIngreso, FechaAtencion = item.FechaSolicitud, HoraIngreso = item.HoraIngreso, CodProductoSolicitado = item.CodProducto, Porcentaje = matCol.Porcentaje, Kilos = Math.Round(calculoKilos, 6) }; //Insertar Lanzamiento Compuesto en BD _lanzamientoDal.InsertLanzamientoComp(lanzComp); secuencia++; } } } return(nroRegistros); }
/// <summary> /// Ejecuta una consulta de sinserción en la tabla Lanzamiento_Compuesto. /// </summary> /// <param name="_lanzComp">Objeto LanzamientoCompDTO</param> /// <returns>Variable de tipo int con la cantidad de registros ingresados.</returns> public int InsertLanzamientoComp(LanzamientoCompDTO _lanzComp) { List <SqlParameter> _sqlParam = new List <SqlParameter>(); string query = @" insert into Lanzamiento_Compuesto( almacen, tipo_movimiento, numero_documento, No_Lanzamiento, Orden, contrato, Color, Calidad, secuencia, grupo_talla, modelo, Cod_Producto, kilos9, unidmin, jornal, usuario, fecha_ingreso, hora_ingreso, costohora, Cod_Producto_Solicitado, Kilos, Porcentaje, Fecha_Solicitud, Fecha_Atencion ) values( 0, 'LAN', @NumContrato, @NumLanzamiento, @Orden, @Maquina, @Color, @Calidad, @Secuencia, '', @Modelo, @CodProducto, 0, 0, 0, @Usuario, convert(date, @FechaIngreso), @HoraIngreso, 0, @CodProductoSol, @Kilos, @Porcentaje, convert(date, @FechaSolicitud), convert(date, @FechaAtencion) )"; _sqlParam.Add(new SqlParameter("@NumContrato", SqlDbType.Int) { Value = _lanzComp.NumContrato }); _sqlParam.Add(new SqlParameter("@NumLanzamiento", SqlDbType.SmallInt) { Value = _lanzComp.NumLanzamiento }); _sqlParam.Add(new SqlParameter("@Orden", SqlDbType.VarChar) { Value = _lanzComp.Orden }); _sqlParam.Add(new SqlParameter("@Maquina", SqlDbType.Char) { Value = _lanzComp.Maquina }); _sqlParam.Add(new SqlParameter("@Color", SqlDbType.VarChar) { Value = _lanzComp.Color }); _sqlParam.Add(new SqlParameter("@Calidad", SqlDbType.VarChar) { Value = _lanzComp.Calidad }); _sqlParam.Add(new SqlParameter("@Secuencia", SqlDbType.SmallInt) { Value = _lanzComp.Secuencia }); _sqlParam.Add(new SqlParameter("@Modelo", SqlDbType.VarChar) { Value = _lanzComp.Modelo }); _sqlParam.Add(new SqlParameter("@CodProducto", SqlDbType.VarChar) { Value = _lanzComp.CodProducto }); _sqlParam.Add(new SqlParameter("@Usuario", SqlDbType.VarChar) { Value = _lanzComp.Usuario }); _sqlParam.Add(new SqlParameter("@FechaIngreso", SqlDbType.DateTime) { Value = _lanzComp.FechaIngreso }); _sqlParam.Add(new SqlParameter("@HoraIngreso", SqlDbType.VarChar) { Value = _lanzComp.HoraIngreso }); _sqlParam.Add(new SqlParameter("@CodProductoSol", SqlDbType.VarChar) { Value = _lanzComp.CodProductoSolicitado }); _sqlParam.Add(new SqlParameter("@Kilos", SqlDbType.Float) { Value = _lanzComp.Kilos }); _sqlParam.Add(new SqlParameter("@Porcentaje", SqlDbType.Real) { Value = _lanzComp.Porcentaje }); _sqlParam.Add(new SqlParameter("@FechaSolicitud", SqlDbType.DateTime) { Value = _lanzComp.FechaAtencion }); _sqlParam.Add(new SqlParameter("@FechaAtencion", SqlDbType.DateTime) { Value = _lanzComp.FechaAtencion }); return(_trans.ExecuteQuery(query, _sqlParam)); }