/// <summary> /// Actualiza la informacion de una entrada en el listado de precios /// Pueden actualizarse el precio del ingrediente, su cantidad o su unidad /// </summary> /// <param name="precioIngrediente">Unidad dentro la lista de precios a actualizar</param> public void Actualizar(PrecioIngrediente precioIngrediente) { ValidarPrecioIngrediente(precioIngrediente); Datos.PreciosIngredientesDAL dalPreciosIngredientes = dal.ObtenerPreciosIngredientesDAL(); Datos.PrecioIngrediente precioIngredienteDAL = dalPreciosIngredientes.Obtener(precioIngrediente.Id); if (precioIngredienteDAL == null) { throw new OBMCateringException(Resources.PreciosIngredientesBL_Validaciones_ItemInvalido); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.UnidadMedida unidadDAL = dalRecetas.ObtenerUnidad(precioIngrediente.Unidad.ToString()); if (unidadDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_UnidadMedidaInvalida, precioIngrediente.Unidad)); } precioIngredienteDAL.Precio = precioIngrediente.Precio; precioIngredienteDAL.Cantidad = precioIngrediente.Cantidad; precioIngredienteDAL.Unidad = unidadDAL; dalPreciosIngredientes.Actualizar(precioIngredienteDAL); dal.Guardar(); }
/// <summary> /// Obtiene el listado de recetas segun su estado /// </summary> /// <param name="estado">Estado de las recetas a obtener</param> /// <returns>Listado de recetas</returns> public IEnumerable <Receta> Obtener(EstadoReceta estado) { Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); IEnumerable <Datos.Receta> recetasDAL = dalRecetas.Obtener(estado.ToString()); return(Obtener(recetasDAL)); }
/// <summary> /// Obtiene el listado completo de recetas del sistema /// </summary> /// <returns>Listado de recetas</returns> public IEnumerable <Receta> Obtener() { Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); IEnumerable <Datos.Receta> recetasDAL = dalRecetas.Obtener(); return(Obtener(recetasDAL)); }
/// <summary> /// Determina si existe una receta segun su nombre /// </summary> /// <param name="nombre">Nombre de la receta a buscar</param> /// <returns>Valor que determina si la receta fue encontrada o no</returns> public bool Existe(string nombre) { if (string.IsNullOrEmpty(nombre)) { throw new OBMCateringException(Resources.RecetasBL_Validaciones_NombreNull); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.Receta recetaDAL = dalRecetas.ObtenerPorNombre(nombre); return(recetaDAL != null); }
/// <summary> /// Crea una nueva receta dentro del sistema /// </summary> /// <param name="receta">Receta a crear</param> public void Crear(Receta receta) { ValidarReceta(receta); Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.EstadoReceta estadoDAL = dalRecetas.ObtenerEstado(EstadoReceta.SinIngredientes.ToString()); Datos.Receta recetaDAL = new Datos.Receta { Nombre = receta.Nombre, Detalle = receta.Detalle, Estado = estadoDAL }; dalRecetas.Crear(recetaDAL); dal.Guardar(); }
/// <summary> /// Crea una nueva orden de venta o pedido en el sistema /// Las ordenes de venta son la informacion central del sistema ya que a partir de ellas se mueve el negocio, /// se preparan recetas, se generan ordenes de compra, facturas, ordenes de pago, etc. /// </summary> /// <param name="ordenVenta">Orden de venta a crear</param> public void Crear(OrdenVenta ordenVenta) { ValidarOrdenVenta(ordenVenta); Datos.ClientesDAL dalClientes = dal.ObtenerClientesDAL(); Datos.Cliente clienteDAL = dalClientes.Obtener(ordenVenta.Cliente.CUIT); if (clienteDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_ClienteInvalido, ordenVenta.Cliente.CUIT)); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); List <Datos.Receta> recetasDAL = new List <Datos.Receta>(); foreach (Receta receta in ordenVenta.Recetas) { Datos.Receta recetaDAL = dalRecetas.Obtener(receta.Id); if (recetaDAL == null) { throw new OBMCateringException(string.Format(Resources.OrdenesVentaBL_Validaciones_RecetaInvalida, receta.Nombre)); } recetasDAL.Add(recetaDAL); } Datos.OrdenVenta ordenVentaDAL = new Datos.OrdenVenta { FechaInicio = ordenVenta.FechaInicio, FechaFin = ordenVenta.FechaFin, Comensales = ordenVenta.Comensales, Precio = ordenVenta.Precio, Aprobada = ordenVenta.Aprobada, Cliente = clienteDAL, Recetas = recetasDAL }; Datos.OrdenesVentaDAL dalOrdenesVenta = dal.ObtenerOrdenesVentaDAL(); dalOrdenesVenta.Crear(ordenVentaDAL); dal.Guardar(); }
/// <summary> /// Obtiene todas las recetas que contengan determinado ingrediente en su composicion /// </summary> /// <param name="ingrediente">Ingrediente a buscar dentro de las recetas</param> /// <returns>Listado de recetas</returns> public IEnumerable <Receta> Obtener(Ingrediente ingrediente) { if (ingrediente == null) { throw new OBMCateringException(Resources.BL_Validaciones_IngredienteNull); } Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingrediente.Nombre); if (ingredienteDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_IngredienteInvalido, ingrediente.Nombre)); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); IEnumerable <Datos.Receta> recetasDAL = dalRecetas.Obtener(ingredienteDAL); return(Obtener(recetasDAL)); }
/// <summary> /// Analiza todas las recetas cuyo estado es "Sin Precio", /// y recorre nuevamente todos sus ingredientes para saber si ya fueron actualizados y si se les ha asignado un precio /// A cada receta que ahora contenga un precio calculable, se le actualizara su estado a "Activa" /// Mediante este metodo se activaran las recetas que se encontraban inactivas por falta de precio calculable /// </summary> public void ActualizarRecetasSinPrecio() { Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); IEnumerable <Receta> recetasSinPrecio = Obtener(EstadoReceta.SinPrecio); foreach (Receta receta in recetasSinPrecio) { bool preciosFaltantes = preciosIngredientesBL.HayFaltantes(receta); if (!preciosFaltantes) { Datos.Receta recetaDAL = dalRecetas.Obtener(receta.Id); Datos.EstadoReceta estadoDAL = dalRecetas.ObtenerEstado(EstadoReceta.Activa.ToString()); recetaDAL.Estado = estadoDAL; dalRecetas.Actualizar(recetaDAL); } } dal.Guardar(); }
/// <summary> /// Crea entradas en el listado de precios para los ingredientes que aun no figuren en el mismo, /// es decir para nuevos ingredientes de una receta. /// Las entradas se crearan con el precio como faltante, ya que solo los usuarios autorizados podran asignar precios a los ingredientes /// </summary> /// <param name="receta">Receta para analizar sus ingredientes y crear precios faltantes si es necesario</param> public void CrearFaltantes(Receta receta) { if (receta == null) { throw new OBMCateringException(Resources.BL_Validaciones_RecetaNull); } Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.PreciosIngredientesDAL dalPreciosIngredientes = dal.ObtenerPreciosIngredientesDAL(); foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingredienteReceta.Ingrediente.Nombre); Datos.PrecioIngrediente precioIngredienteDAL = dalPreciosIngredientes.Obtener(ingredienteDAL); if (precioIngredienteDAL == null) { Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.UnidadMedida unidadMedidaDAL = dalRecetas.ObtenerUnidad(ingredienteReceta.Unidad.ToString()); if (unidadMedidaDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_UnidadMedidaInvalida, ingredienteReceta.Unidad)); } precioIngredienteDAL = new Datos.PrecioIngrediente { Ingrediente = ingredienteDAL, Unidad = unidadMedidaDAL }; dalPreciosIngredientes.Crear(precioIngredienteDAL); } } dal.Guardar(); }
/// <summary> /// Actualiza la informacion de una receta dentro del sistema /// Los datos que podran actualizarse son su estado, sus detalles o informacion y sus ingredientes /// </summary> /// <param name="receta">Receta a actualizar</param> public void Actualizar(Receta receta) { ValidarReceta(receta); if (receta.Ingredientes == null || receta.Ingredientes.Count == 0) { throw new OBMCateringException(Resources.RecetasBL_Validaciones_SinIngredientes); } EstadoReceta estado; if (receta.Ingredientes.Count == 0) { estado = EstadoReceta.SinIngredientes; } else { bool preciosFaltantes = preciosIngredientesBL.HayFaltantes(receta); if (preciosFaltantes) { estado = EstadoReceta.SinPrecio; } else { estado = EstadoReceta.Activa; } } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.Receta recetaDAL = dalRecetas.ObtenerPorNombre(receta.Nombre); if (recetaDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_RecetaInvalida, receta.Nombre)); } Datos.EstadoReceta estadoDAL = dalRecetas.ObtenerEstado(estado.ToString()); if (estadoDAL == null) { throw new OBMCateringException(string.Format(Resources.OrdenesCompraBL_Validaciones_EstadoInvalido, estado)); } recetaDAL.Detalle = receta.Detalle; recetaDAL.Estado = estadoDAL; foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Datos.IngredienteReceta ingredienteRecetaDAL = BuscarIngredienteReceta(ingredienteReceta.Ingrediente, recetaDAL); Datos.UnidadMedida unidadMedidaDAL = dalRecetas.ObtenerUnidad(ingredienteReceta.Unidad.ToString()); if (ingredienteRecetaDAL == null) { Datos.Ingrediente ingredienteDAL = PrepararIngrediente(ingredienteReceta.Ingrediente); ingredienteRecetaDAL = new Datos.IngredienteReceta { Ingrediente = ingredienteDAL, Cantidad = ingredienteReceta.Cantidad, Unidad = unidadMedidaDAL }; recetaDAL.Ingredientes.Add(ingredienteRecetaDAL); } else { ingredienteRecetaDAL.Cantidad = ingredienteReceta.Cantidad; ingredienteRecetaDAL.Unidad = unidadMedidaDAL; } } dalRecetas.Actualizar(recetaDAL); dal.Guardar(); if (estado == EstadoReceta.SinPrecio) { preciosIngredientesBL.CrearFaltantes(receta); } }
/// <summary> /// Crea una nueva orden de compra en el sistema, lo que implica que una determinada orden de venta ha sido aprobada /// Por cada orden de venta o pedido debera crearse una orden de compra que la respalde /// </summary> /// <param name="ordenVenta">Orden de venta necesaria para poder crear la orden de compra</param> public void Crear(OrdenVenta ordenVenta) { if (ordenVenta == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaNull); } if (ordenVenta.Comensales <= 0) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaSinComensales); } Datos.OrdenCompra ordenCompraDAL = new Datos.OrdenCompra(); Dictionary <string, Datos.ItemOrdenCompra> itemsDALPorIngrediente = new Dictionary <string, Datos.ItemOrdenCompra>(); foreach (Receta receta in ordenVenta.Recetas) { foreach (IngredienteReceta ingredienteReceta in receta.Ingredientes) { Datos.ItemOrdenCompra itemOrdenCompraDAL; Ingrediente ingrediente = ingredienteReceta.Ingrediente; if (ingredienteReceta.Cantidad <= 0) { throw new OBMCateringException(string.Format(Resources.OrdenesCompraBL_Validaciones_RecetaSinIngredientes, ingrediente.Nombre, receta.Nombre)); } decimal cantidad = ingredienteReceta.Cantidad * ordenVenta.Comensales; if (itemsDALPorIngrediente.ContainsKey(ingrediente.Nombre)) { itemOrdenCompraDAL = itemsDALPorIngrediente[ingrediente.Nombre]; itemOrdenCompraDAL.Cantidad = itemOrdenCompraDAL.Cantidad + cantidad; } else { itemOrdenCompraDAL = new Datos.ItemOrdenCompra(); Datos.IngredientesDAL dalIngredientes = dal.ObtenerIngredientesDAL(); Datos.Ingrediente ingredienteDAL = dalIngredientes.Obtener(ingrediente.Nombre); if (ingredienteDAL == null) { throw new OBMCateringException(string.Format(Resources.OrdenesCompraBL_Validaciones_IngredienteInvalido, ingrediente.Nombre, receta.Nombre)); } Datos.RecetasDAL dalRecetas = dal.ObtenerRecetasDAL(); Datos.UnidadMedida unidadDAL = dalRecetas.ObtenerUnidad(ingredienteReceta.Unidad.ToString()); if (unidadDAL == null) { throw new OBMCateringException(string.Format(Resources.BL_Validaciones_UnidadMedidaInvalida, ingredienteReceta.Unidad)); } itemOrdenCompraDAL.Ingrediente = ingredienteDAL; itemOrdenCompraDAL.Cantidad = cantidad; itemOrdenCompraDAL.Unidad = unidadDAL; } itemsDALPorIngrediente[ingrediente.Nombre] = itemOrdenCompraDAL; } } Datos.OrdenesVentaDAL dalOrdenesVenta = dal.ObtenerOrdenesVentaDAL(); Datos.OrdenVenta ordenVentaDAL = dalOrdenesVenta.Obtener(ordenVenta.Id); if (ordenVentaDAL == null) { throw new OBMCateringException(Resources.BL_Validaciones_OrdenVentaInvalida); } Datos.OrdenesCompraDAL dalOrdenesCompra = dal.ObtenerOrdenesCompraDAL(); Datos.EstadoOrdenCompra estadoDAL = dalOrdenesCompra.ObtenerEstado(EstadoOrdenCompra.Generada.ToString()); ordenCompraDAL.Fecha = DateTime.Now; ordenCompraDAL.Estado = estadoDAL; ordenCompraDAL.OrdenVenta = ordenVentaDAL; foreach (Datos.ItemOrdenCompra itemOrdenCompra in itemsDALPorIngrediente.Values) { ordenCompraDAL.ItemsOrdenesCompra.Add(itemOrdenCompra); } dalOrdenesCompra.Crear(ordenCompraDAL); dal.Guardar(); }