/// <summary> /// Se agregan los productos a la jornada del día y se cambia su estado a Fabricado /// Si no se pueden agrgar más productos a la jornada se agrega otra jornada con la fecha del día siguiente /// </summary> /// <param name="f">Fabrica cuyos productos se fabrican</param> /// <returns>La cantidad de productos que se fabricaron</returns> private static int Fabricar(Fabrica f) { DateTime fecha = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); Jornada j = f + new Jornada(fecha, f.cantidadTrabajadores); int contador = 0; bool agregarJornada = false; foreach (Producto p in f.productos) { if (p.EstadoActual == Producto.Estado.Nuevo) { if (j + p) { p.EstadoActual = Producto.Estado.Fabricado; contador++; } else { agregarJornada = true; } } } if (agregarJornada) { f.ActualizarPendientes(); } return(contador); }
/// <summary> /// Método estático que llama a todos los procesos de la fábrica /// </summary> /// <param name="f">Fábrica de la que se inician los procesos</param> public static void IniciarFabricacion(Fabrica f) { if (f.productos.Count > 0) { int ret = Fabrica.Fabricar(f); Fabrica.Envasar(f); Fabrica.Distribuir(f); } else { throw new NoSeCargaronProductosException("Para iniciar la fabricación debe cargar al menos un producto"); } }
/// <summary> /// Si el producto está envasado cambia el estado a Entregado /// </summary> /// <param name="f"></param> /// <returns>La cantidad de productos que se distribuyeron</returns> private static int Distribuir(Fabrica f) { int contador = 0; foreach (Producto p in f.productos) { if (p.EstadoActual is Producto.Estado.Envasado) { p.EstadoActual = Producto.Estado.Entregado; contador++; } } return(contador); }
/// <summary> /// Si los productos están fabricados les asigna un vencimiento y cambia el estado a Envasado /// </summary> /// <param name="f">Fabrica cuyos productos se envasan</param> /// <returns>La cantidad de productos envasados</returns> private static int Envasar(Fabrica f) { int contador = 0; foreach (Producto p in f.productos) { if (p.EstadoActual is Producto.Estado.Fabricado) { p.Vencimiento = f.AsignarVencimiento(); if (p.Vencimiento > DateTime.Now) { contador++; p.EstadoActual = Producto.Estado.Envasado; } } } return(contador); }