private Dictionary <int, double> GetCargaPorHora(RepeaterItemPedido item) { var total = item.Pedido.Cantidad + item.Pedido.CantidadAjuste; var carga = GetCarga(item.Pedido); var inicio = GetInicioActividad(item.Pedido.BocaDeCarga); var fin = GetFinActividad(item.Pedido.BocaDeCarga); var enObra = item.Pedido.FechaEnObra.ToDisplayDateTime().TimeOfDay; var values = new Dictionary <int, double>(); for (var i = inicio; i <= fin; i = i.Add(TimeSpan.FromHours(1))) { values.Add(Convert.ToInt32(i.Hours), 0); } var proxima = enObra; for (var i = proxima; total > 0; i = i.Add(TimeSpan.FromMinutes(item.Pedido.Frecuencia))) { var cantidad = Math.Min(total, carga); total -= cantidad; if (values.ContainsKey(Convert.ToInt32(i.Hours))) { values[Convert.ToInt32(i.Hours)] += cantidad; } } return(values); }
private void GenerarPedido(RepeaterItemPedido item) { using (var transaction = SmartTransaction.BeginTransaction()) { try { GenerarTickets(item); transaction.Commit(); Search(); } catch (Exception ex) { try { transaction.Rollback(); } catch { ShowError(ex); } ShowError(ex); } } }
protected void BoundFooter(RepeaterItemPedido item) { const string cell = "<td class=\"number {1}\">{0}</td>"; var boca = DAOFactory.BocaDeCargaDAO.FindById(cbBocaDeCarga.Selected); var inicio = GetInicioActividad(boca); var fin = GetFinActividad(boca); var tiempoPromedio = Convert.ToInt32(_tiempoCiclos.Sum() / CantidadTotal); var prev = 0; item.lblCantidad.Text = CantidadTotal.ToString("0.00"); item.lblTiempoCiclo.Text = FormatTimeSpan(TimeSpan.FromMinutes(tiempoPromedio)); for (var i = inicio; i <= fin; i = i.Add(TimeSpan.FromHours(1))) { var hora = Convert.ToInt32(i.Hours); var val = _volumenPorHora.ContainsKey(hora) ? _volumenPorHora[hora] : 0; var mix = (int)Math.Ceiling(1.0 * val / Carga); var equi = Math.Round((prev + mix) * tiempoPromedio / TiempoReferencia); item.litHoras.Text += string.Format(cell, val > 0 ? val.ToString() : "", val > boca.Rendimiento ? "total_mal" : "total_ok"); item.litHoras2.Text += string.Format(cell, mix > 0 ? mix.ToString() : "", ""); item.litHoras3.Text += string.Format(cell, equi > 0 ? equi.ToString() : "", equi > CantidadMixers ? "total_mal" : "total_ok"); prev = mix; } }
private void CambiarHoraCarga(RepeaterItemPedido item) { try { ValidateEmpty(item.DtHoraCarga.SelectedDate, "HORA_CARGA"); var pedido = DAOFactory.PedidoDAO.FindById(item.Id); if (pedido.Estado != Pedido.Estados.Pendiente) { return; } pedido.HoraCarga = item.DtHoraCarga.SelectedDate != null?item.DtHoraCarga.SelectedDate.Value.ToDataBaseDateTime() : DateTime.MinValue; if (pedido.HoraCarga > pedido.FechaEnObra) { pedido.FechaEnObra = pedido.HoraCarga; } DAOFactory.PedidoDAO.SaveOrUpdate(pedido); Search(); } catch (Exception ex) { ShowError(ex); } }
protected override void ExportToCsv() { var separator = Usuario.CsvSeparator; var sb = new StringBuilder(); sb.Append(GetLine(CultureManager.GetMenu(ToolBar.VariableName))); sb.Append(GetLine(DateTime.UtcNow.ToDisplayDateTime().ToString("dd/MM/yyyy HH:mm"))); sb.Append(GetLine()); sb.Append(GetLine(CultureManager.GetEntity("PARENTI01"), cbEmpresa.SelectedItem.Text)); sb.Append(GetLine(CultureManager.GetEntity("PARENTI02"), cbLinea.SelectedItem.Text)); sb.Append(GetLine(CultureManager.GetEntity("BOCADECARGA"), cbBocaDeCarga.SelectedItem.Text)); sb.Append(GetLine(CultureManager.GetEntity("PARENTI63"), cbProducto.SelectedItem.Text)); sb.Append(GetLine(CultureManager.GetLabel("DIA"), dtDia.SelectedDate.Value.ToString("dd/MM/yyyy"))); sb.Append(GetLine(CultureManager.GetLabel("PROGRAMACION_CARGA_MAXIMA"), txtCargaMaxima.Text)); sb.Append(GetLine(CultureManager.GetLabel("PROGRAMACION_CANTIDAD_MIXERS"), txtCantidadMixers.Text)); sb.Append(GetLine()); var bocas = cbBocaDeCarga.Selected > 0 ? new List <BocaDeCarga> { DAOFactory.BocaDeCargaDAO.FindById(cbBocaDeCarga.Selected) } : DAOFactory.BocaDeCargaDAO.GetList(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }); var inicio = bocas.Min(boca => GetInicioActividad(boca)); var fin = bocas.Max(boca => GetFinActividad(boca)); sb.Append(string.Join(separator.ToString(), CsvHeader)); for (var i = inicio; i <= fin; i = i.Add(TimeSpan.FromHours(1))) { sb.Append(string.Concat(separator, FormatTimeSpan(i))); } sb.Append(GetLine()); foreach (RepeaterItem r in repPedidos.Items) { var item = new RepeaterItemPedido(r); if (r.ItemType != ListItemType.Item && r.ItemType != ListItemType.AlternatingItem) { continue; } sb.Append(GetLine(string.Join(separator.ToString(), item.GetCsvLine()))); } sb.Append((string)hidCsvFooter.Value); sb.Append(GetLine()); Session["CSV_EXPORT"] = sb.ToString(); Session["CSV_FILE_NAME"] = "programacion"; OpenWin(string.Concat(ApplicationPath, "Common/exportCSV.aspx"), CultureManager.GetSystemMessage("EXPORT_CSV_DATA")); }
protected void BoundHeader(RepeaterItemPedido item) { const string cell = "<th class=\"hora\">{0}</th>"; var boca = DAOFactory.BocaDeCargaDAO.FindById(cbBocaDeCarga.Selected); var inicio = GetInicioActividad(boca); var fin = GetFinActividad(boca); for (var i = inicio; i <= fin; i = i.Add(TimeSpan.FromHours(1))) { item.litHoras.Text += string.Format(cell, FormatTimeSpan(i)); } }
protected void RepPedidos_ItemCommand(object source, RepeaterCommandEventArgs e) { var item = new RepeaterItemPedido(e.Item); switch (e.CommandName) { case "CambiarEnObra": CambiarEnObra(item); break; case "CambiarHoraCarga": CambiarHoraCarga(item); break; case "GenerarTickets": GenerarPedido(item); break; case "GenerarTodo": GenerarTodos(); break; } }
protected void BoundHeader(RepeaterItemPedido item) { const string cell = "<th class=\"hora\">{0}</th>"; var bocas = cbBocaDeCarga.Selected > 0 ? new List <BocaDeCarga> { DAOFactory.BocaDeCargaDAO.FindById(cbBocaDeCarga.Selected) } : DAOFactory.BocaDeCargaDAO.GetList(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }); var inicio = bocas.Min(boca => GetInicioActividad(boca)); var fin = bocas.Max(boca => GetFinActividad(boca)); for (var i = inicio; i <= fin; i = i.Add(TimeSpan.FromHours(1))) { item.LitHoras.Text += string.Format(cell, FormatTimeSpan(i)); } }
private Dictionary <int, double> GetCargaPorHora(RepeaterItemPedido item) { var total = item.Pedido.Cantidad + item.Pedido.CantidadAjuste; var carga = item.Pedido.CargaViaje; var inicio = GetInicioActividad(item.Pedido.BocaDeCarga); var fin = GetFinActividad(item.Pedido.BocaDeCarga); var enObra = item.Pedido.FechaEnObra.ToDisplayDateTime().TimeOfDay; var entregado = 0.0; var values = new Dictionary <int, double>(); for (var i = inicio; i <= fin; i = i.Add(TimeSpan.FromHours(1))) { var val = 0.0; if (i.Hours < enObra.Hours) { val = 0; } else if (entregado == total) { val = 0; } else if (total < carga) { val = total; } else if (entregado < total) { var val1 = Math.Ceiling(60.0 / item.Pedido.Frecuencia) * carga; var val2 = total - entregado; val = Math.Min(val1, val2); } values.Add(Convert.ToInt32(i.Hours), val); entregado += val; } return(values); }
private void CambiarEnObra(RepeaterItemPedido item) { try { ValidateEmpty(item.DtEnObra.SelectedDate, "FECHA_EN_OBRA"); var pedido = DAOFactory.PedidoDAO.FindById(item.Id); var dif = pedido.FechaEnObra - pedido.HoraCarga; if (pedido.Estado != Pedido.Estados.Pendiente) { return; } pedido.FechaEnObra = item.DtEnObra.SelectedDate != null?item.DtEnObra.SelectedDate.Value.ToDataBaseDateTime() : DateTime.MinValue; pedido.HoraCarga = pedido.FechaEnObra.Add(-dif); DAOFactory.PedidoDAO.SaveOrUpdate(pedido); Search(); } catch (Exception ex) { ShowError(ex); } }
private void GenerarTickets(RepeaterItemPedido item) { var pedido = DAOFactory.PedidoDAO.FindById(item.Id); if (pedido.Estado != Pedido.Estados.Pendiente) { return; } var cantidad = pedido.Cantidad + pedido.CantidadAjuste; double carga = GetCarga(pedido); var estados = DAOFactory.EstadoDAO.GetByPlanta(pedido.Linea.Id); var total = estados.Sum(e => Convert.ToInt32(e.Deltatime)); if (total == 0) { total = pedido.TiempoCiclo; } if (!estados.Any(e => e.EsPuntoDeControl == Estado.Evento.LlegaAObra)) { ThrowError("PROGRAMACION_NO_OBRA"); } var indexEnObra = estados.IndexOf(estados.First(e => e.EsPuntoDeControl == Estado.Evento.LlegaAObra)); var deltas = estados.Select( e => Convert.ToInt32(((e.Deltatime == 0 ? total / estados.Count : e.Deltatime) * pedido.TiempoCiclo * 1.0) / total)).ToList(); var minutos = Convert.ToInt32(deltas.Where((e, i) => i < indexEnObra).Sum()); var inicioServicio = pedido.FechaEnObra.AddMinutes(-minutos); var ticketCount = 1; for (var entregado = 0.0; entregado < cantidad; entregado += carga) { if (entregado + carga > cantidad) { carga = cantidad - entregado; } var ticket = new Ticket { CantidadCarga = carga.ToString(), CantidadCargaReal = "0", CantidadPedido = cantidad.ToString(), Cliente = pedido.Cliente, Codigo = pedido.Codigo + "-" + ticketCount.ToString().PadLeft(2, '0'), CodigoProducto = pedido.Producto != null ? pedido.Producto.Codigo : "", CumulativeQty = (entregado + carga).ToString(), DescripcionProducto = pedido.Producto != null ? pedido.Producto.Descripcion : "", Empresa = pedido.BocaDeCarga.Linea != null ? pedido.BocaDeCarga.Linea.Empresa : null, Linea = pedido.BocaDeCarga.Linea, BaseDestino = pedido.BocaDeCarga.Linea, Estado = Ticket.Estados.Pendiente, FechaTicket = inicioServicio, Pedido = pedido, PuntoEntrega = pedido.PuntoEntrega, SourceFile = "Programacion", SourceStation = "WEB", Unidad = "m3", UserField1 = string.Empty, UserField2 = string.Empty, UserField3 = string.Empty, OrdenDiario = DAOFactory.TicketDAO.FindNextOrdenDiario(pedido.BocaDeCarga.Linea != null ? pedido.BocaDeCarga.Linea.Empresa.Id : -1, pedido.BocaDeCarga.Linea != null ? pedido.BocaDeCarga.Linea.Id : -1, inicioServicio), ASincronizar = true }; var minutosTranscurridos = 0; for (int i = 0; i < estados.Count; i++) { var estado = estados[i]; var detalle = new DetalleTicket { Ticket = ticket, EstadoLogistico = estado, Programado = inicioServicio.AddMinutes(minutosTranscurridos) }; ticket.Detalles.Add(detalle); minutosTranscurridos += deltas[i]; } inicioServicio = inicioServicio.Add(TimeSpan.FromMinutes(pedido.Frecuencia)); ticketCount++; DAOFactory.TicketDAO.SaveOrUpdate(ticket); } pedido.Estado = Pedido.Estados.EnCurso; DAOFactory.PedidoDAO.SaveOrUpdate(pedido); }
protected void BoundFooter(RepeaterItemPedido item) { const string cell = "<td class=\"number {1}\">{0}</td>"; var rendimientoExcedido = false; var mixersExcedidos = false; var carga = GetCarga(item.Pedido); var bocas = cbBocaDeCarga.Selected > 0 ? new List <BocaDeCarga> { DAOFactory.BocaDeCargaDAO.FindById(cbBocaDeCarga.Selected) } : DAOFactory.BocaDeCargaDAO.GetList(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }); var inicio = bocas.Min(boca => GetInicioActividad(boca)); var fin = bocas.Max(boca => GetFinActividad(boca)); var rendimiento = bocas.Sum(boca => boca.Rendimiento); var tiempoPromedio = Convert.ToInt32(_tiempoCiclos.Sum() / CantidadTotal); var prev = 0; item.LblCantidad.Text = CantidadTotal.ToString("0.00"); item.LblTiempoCiclo.Text = FormatTimeSpan(TimeSpan.FromMinutes(tiempoPromedio)); item.BtGenerarTickets.OnClientClick = string.Format("return confirm('{0}');", CultureManager.GetSystemMessage("CONFIRM_OPERATION")); var csv1 = new List <string>(); var csv2 = new List <string>(); var csv3 = new List <string>(); for (var i = inicio; i <= fin; i = i.Add(TimeSpan.FromHours(1))) { var hora = Convert.ToInt32(i.Hours); var val = _volumenPorHora.ContainsKey(hora) ? _volumenPorHora[hora] : 0; var mix = (int)Math.Ceiling(1.0 * val / carga); var equi = Math.Round((prev + mix) * tiempoPromedio / TiempoReferencia); var toShow1 = val > 0 ? val.ToString() : ""; var toShow2 = mix > 0 ? mix.ToString() : ""; var toShow3 = equi > 0 ? equi.ToString() : ""; item.LitHoras.Text += string.Format(cell, toShow1, val > rendimiento ? "total_mal" : "total_ok"); item.LitHoras2.Text += string.Format(cell, toShow2, ""); item.LitHoras3.Text += string.Format(cell, toShow3, equi > CantidadMixers ? "total_mal" : "total_ok"); csv1.Add(toShow1); csv2.Add(toShow2); csv3.Add(toShow3); rendimientoExcedido |= val > rendimiento; mixersExcedidos |= equi > CantidadMixers; prev = mix; } if (rendimientoExcedido || mixersExcedidos) { foreach (RepeaterItem itm in repPedidos.Items) { var it = new RepeaterItemPedido(itm) { BtGenerarTickets = { Enabled = false, OnClientClick = string.Empty } }; } item.BtGenerarTickets.Enabled = false; item.BtGenerarTickets.OnClientClick = string.Empty; } if (rendimientoExcedido || mixersExcedidos || !_algunoPendiente) { item.BtGenerarTickets.Enabled = false; item.BtGenerarTickets.OnClientClick = string.Empty; } var row1 = new[] { string.Empty, //codigo string.Empty, // hora de carga string.Empty, // hora en obra string.Empty, // boca de carga string.Empty, // cliente string.Empty, // punto de entrega string.Empty, // contacto string.Empty, // observacion string.Empty, // nro bomba string.Empty, // is minimixer CultureManager.GetLabel("TOTAL"), //producto item.LblCantidad.Text, // cantidad pedido item.LblTiempoCiclo.Text, // Tiempo de ciclo string.Empty, // frecuencia CultureManager.GetLabel("PROGRAMACION_VOLUMEN_HORA"), // moviles necesarios string.Join(";", csv1.ToArray()) // valores dinamicos }; var row2 = new[] { string.Empty, //codigo string.Empty, // hora de carga string.Empty, // hora en obra string.Empty, // boca de carga string.Empty, // cliente string.Empty, // punto de entrega string.Empty, // contacto string.Empty, // observacion string.Empty, // nro bomba string.Empty, // is minimixer string.Empty, //producto string.Empty, // cantidad pedido string.Empty, // Tiempo de ciclo string.Empty, // frecuencia CultureManager.GetLabel("PROGRAMACION_MIXERS_HORA"), // moviles necesarios string.Join(";", csv2.ToArray()) // valores dinamicos }; var row3 = new[] { string.Empty, //codigo string.Empty, // hora de carga string.Empty, // hora en obra string.Empty, // boca de carga string.Empty, // cliente string.Empty, // punto de entrega string.Empty, // contacto string.Empty, // observacion string.Empty, // nro bomba string.Empty, // is minimixer string.Empty, //producto string.Empty, // cantidad pedido string.Empty, // Tiempo de ciclo string.Empty, // frecuencia CultureManager.GetLabel("PROGRAMACION_MIXERS_EQUIVALENTES"), // moviles necesarios string.Join(";", csv3.ToArray()) // valores dinamicos }; hidCsvFooter.Value = string.Join(";", row1) + "\n" + string.Join(";", row3) + "\n" + string.Join(";", row3) + "\n"; }
protected void BoundItem(RepeaterItemPedido item) { const string cell = "<td class=\"number\">{0}</td>"; var carga = GetCarga(item.Pedido); var cantidad = item.Pedido.Cantidad + item.Pedido.CantidadAjuste; var movilesNecesarios = Math.Ceiling(Math.Min(cantidad / carga, item.Pedido.TiempoCiclo * 1.0 / item.Pedido.Frecuencia)); item.LblPedido.Text = item.Pedido.Codigo; item.LblPedido.Attributes.Add("id", item.Pedido.Id.ToString()); item.LblHoraCarga.Text = item.Pedido.HoraCarga.ToDisplayDateTime().ToString("HH:mm"); item.LblHoraCarga.Attributes.Add("estado", item.Pedido.Estado == Pedido.Estados.Pendiente ? "0" : "1"); item.LblEnObra.Text = item.Pedido.FechaEnObra.ToDisplayDateTime().ToString("HH:mm"); item.LblEnObra.Attributes.Add("estado", item.Pedido.Estado == Pedido.Estados.Pendiente ? "0" : "1"); item.DtEnObra.SelectedDate = item.Pedido.FechaEnObra.ToDisplayDateTime(); item.DtHoraCarga.SelectedDate = item.Pedido.HoraCarga.ToDisplayDateTime(); item.LblBocaDeCarga.Text = EscapeChars(item.Pedido.BocaDeCarga.Descripcion); item.LblCliente.Text = EscapeChars(item.Pedido.Cliente.Descripcion); item.LblPuntoEntrega.Text = EscapeChars(item.Pedido.PuntoEntrega.Descripcion); item.LblContacto.Text = EscapeChars(item.Pedido.Contacto); item.LblObservacion.Text = EscapeChars(item.Pedido.Observacion); item.LblProducto.Text = EscapeChars(item.Pedido.Producto != null ? item.Pedido.Producto.Descripcion : ""); item.LblCantidad.Text = cantidad.ToString("0.00"); item.LblBomba.Text = item.Pedido.NumeroBomba; item.LblEsMinimixer.Text = item.Pedido.EsMinimixer ? CultureManager.GetLabel("SI") : CultureManager.GetLabel("NO"); item.LblTiempoCiclo.Text = FormatTimeSpan(TimeSpan.FromMinutes(item.Pedido.TiempoCiclo)); item.LblFrecuencia.Text = FormatTimeSpan(TimeSpan.FromMinutes(item.Pedido.Frecuencia)); item.LblMovilesNecesarios.Text = movilesNecesarios.ToString("0"); item.HidId.Value = item.Pedido.Id.ToString(); item.LitStyle.Text = item.Pedido.Estado == Pedido.Estados.Pendiente ? "pendiente" : "generado"; item.BtCambiarEnObra.OnClientClick = string.Format("return confirm('{0}');", CultureManager.GetSystemMessage("CONFIRM_OPERATION")); item.BtCambiarHoraCarga.OnClientClick = string.Format("return confirm('{0}');", CultureManager.GetSystemMessage("CONFIRM_OPERATION")); item.BtGenerarTickets.OnClientClick = string.Format("return confirm('{0}');", CultureManager.GetSystemMessage("CONFIRM_OPERATION")); item.BtGenerarTickets.Visible = item.Pedido.Estado == Pedido.Estados.Pendiente; if (item.Pedido.Estado == Pedido.Estados.Pendiente) { _algunoPendiente = true; } var csv = new List <string>(); var cargaPorHora = GetCargaPorHora(item); foreach (var cargaHora in cargaPorHora) { var val = cargaHora.Value; var toShow = val == 0 ? string.Empty : val.ToString(); item.LitHoras.Text += string.Format(cell, toShow); csv.Add(toShow); if (val > 0) { var hora = cargaHora.Key; if (_volumenPorHora.ContainsKey(hora)) { _volumenPorHora[hora] += val; } else { _volumenPorHora.Add(hora, val); } } } _tiempoCiclos.Add(cantidad * item.Pedido.TiempoCiclo); CantidadTotal += cantidad; item.HidCsvLine.Value = string.Join(";", csv.ToArray()); }
protected void BoundItem(RepeaterItemPedido item) { const string cell = "<td class=\"number\">{0}</td>"; var tickets = DAOFactory.TicketDAO.GetByPedido(new[] { cbEmpresa.Selected }, new[] { cbLinea.Selected }, new[] { item.Pedido.Id }) .OrderBy(p => p.Vehiculo); Carga = Convert.ToDouble(tickets.First().CantidadCarga); var cantidad = item.Pedido.Cantidad + item.Pedido.CantidadAjuste; CantidadMixers = 0; var ultimoVehiculo = 0; foreach (var ticket in tickets) { if (ticket.Vehiculo != null && ticket.Vehiculo.Id != ultimoVehiculo) { CantidadMixers++; ultimoVehiculo = ticket.Vehiculo.Id; } } var movilesNecesarios = Math.Ceiling(Math.Min(cantidad / Carga, item.Pedido.TiempoCiclo * 1.0 / item.Pedido.Frecuencia)); item.lblPedido.Text = item.Pedido.Codigo; item.lblPedido.Attributes.Add("id", item.Pedido.Id.ToString("#0")); item.lblHoraCarga.Text = item.Pedido.HoraCarga.ToDisplayDateTime().ToString("HH:mm"); item.lblEnObra.Text = item.Pedido.FechaEnObra.ToDisplayDateTime().ToString("HH:mm"); item.lblEnObra.Attributes.Add("estado", item.Pedido.Estado == Pedido.Estados.Pendiente ? "0" : "1"); item.lblCliente.Text = item.Pedido.Cliente.Descripcion; item.lblPuntoEntrega.Text = item.Pedido.PuntoEntrega.Descripcion; item.LblContacto.Text = item.Pedido.Contacto; item.LblObservacion.Text = item.Pedido.Observacion; item.lblProducto.Text = item.Pedido.Producto != null ? item.Pedido.Producto.Descripcion : ""; item.lblCantidad.Text = cantidad.ToString("0.00"); item.lblBomba.Text = item.Pedido.NumeroBomba; item.LblEsMinimixer.Text = item.Pedido.EsMinimixer ? CultureManager.GetLabel("SI") : CultureManager.GetLabel("NO"); item.lblTiempoCiclo.Text = FormatTimeSpan(TimeSpan.FromMinutes(item.Pedido.TiempoCiclo)); item.lblFrecuencia.Text = FormatTimeSpan(TimeSpan.FromMinutes(item.Pedido.Frecuencia)); item.lblMovilesNecesarios.Text = movilesNecesarios.ToString("0"); item.hidId.Value = item.Pedido.Id.ToString("#0"); item.litStyle.Text = item.Pedido.Estado == Pedido.Estados.Pendiente ? "pendiente" : "generado"; var cargaPorHora = GetCargaPorHora(item); foreach (var cargaHora in cargaPorHora) { var val = cargaHora.Value; item.litHoras.Text += string.Format(cell, val == 0 ? string.Empty : val.ToString()); if (val > 0) { var hora = cargaHora.Key; if (_volumenPorHora.ContainsKey(hora)) { _volumenPorHora[hora] += val; } else { _volumenPorHora.Add(hora, val); } } } _tiempoCiclos.Add(cantidad * item.Pedido.TiempoCiclo); CantidadTotal += cantidad; }