public IngredienteFactura Add(IngredienteFactura p)
        {
            IngredienteFactura obj = nowBDEntities.IngredienteFactura.Add(p);

            nowBDEntities.SaveChanges();
            return(obj);
        }
        public void Remove(int id)
        {
            IngredienteFactura p = Find(id);

            nowBDEntities.IngredienteFactura.Remove(p);
            nowBDEntities.SaveChanges();
        }
        public void UpdateIngrediente(IngredienteFactura obj, int idTipoMedicion)
        {
            Ingrediente ingrediente          = nowBDEntities.Ingrediente.Find((int)obj.Ingrediente);
            double?     precioPromedioActual = ingrediente.ValorNeto != null ? ingrediente.ValorNeto * ingrediente.Stock : null;
            double      precioTotalFactura   = (double)(obj.Precio * obj.Cantidad);
            double      precioPromedioTotal  = precioPromedioActual != null ? (double)(precioTotalFactura + precioPromedioActual) / ((int)obj.Cantidad + (int)ingrediente.Stock) : (double)obj.Precio;

            if (ingrediente.IdTipoMedicionPorcion != null)
            {
                ingrediente.Stock += tMDAL.GetConvertedStock(idTipoMedicion, ingrediente, obj.Cantidad.Value);
            }
            else
            {
                ingrediente.Stock += obj.Cantidad.Value;
            }

            ingrediente.ValorNeto = Math.Round(precioPromedioTotal, 2);
            nowBDEntities.SaveChanges();
        }
        public IngredienteFactura Find(int id)
        {
            IngredienteFactura m = nowBDEntities.IngredienteFactura.FirstOrDefault(obj => obj.IdIngredienteFactura == id);

            return(m);
        }
        private void SaveIngredients(Factura obj)
        {
            DataTable dt = ViewState["Data"] as DataTable;

            foreach (DataRow row in dt.Rows)
            {
                #region Declaración de variables
                string rowNombre       = row["Nombre"] as string;
                string rowDescripción  = (row["Descripción"] as string);
                string rowCantidad     = row["Cantidad"] as string;
                string rowMarca        = row["Marca"] as string;
                string rowTipoAlimento = row["TipoAlimento"] as string;
                string rowTipoMedicion = row["TipoMedicion"] as string;
                string rowPrecio       = row["Precio"] as string;
                string rowTotal        = row["Total"] as string;
                string rowCantPorPack  = row["CantidadPack"] as string;
                #endregion

                Marca              marca        = mDAL.FindByName(rowMarca);
                TipoAlimento       tipoAlimento = tADAL.FindByName(rowTipoAlimento);
                TipoMedicion       tipoMedicion = tMDAL.FindByName(rowTipoMedicion);
                List <Ingrediente> ingredientesDeMismoNombre = iDAL.FindAllByName(rowNombre);
                DetalleIngrediente detalleIn       = new DetalleIngrediente();
                Ingrediente        ingrediente     = iDAL.FindByName(rowNombre);
                TipoMedicion       tipoMedicionIng = ingrediente != null?tMDAL.Find(ingrediente.IdTipoMedicion.Value) : null;

                int  cantidad   = string.IsNullOrEmpty(rowCantPorPack) ? Convert.ToInt32(rowCantidad) : Convert.ToInt32(rowCantidad) * Convert.ToInt32(rowCantPorPack);
                bool convertido = false;

                marca = marca == null?mDAL.Add(new Marca()
                {
                    Nombre = rowMarca,
                    Estado = 1
                }) : marca;

                tipoAlimento = tipoAlimento == null?tADAL.Add(new TipoAlimento()
                {
                    Descripcion = rowTipoAlimento,
                    Estado      = 1
                }) : tipoAlimento;

                tipoMedicion = tipoMedicion == null?tMDAL.Add(new TipoMedicion()
                {
                    Descripcion = rowTipoMedicion,
                    Estado      = 1
                }) : tipoMedicion;

                //SetEquivalence(cantidad, tipoMedicionIng, tipoMedicion, out cantidad, out convertido);

                //Verificar si ya existe

                //Ingreso del ingrediente y del detalle

                bool existe = ingrediente != null;

                if (ingredientesDeMismoNombre.Count > 1)
                {
                    Ingrediente ingredienteConMismaDescripcion = iDAL.GetAll().FirstOrDefault(x => x.Descripcion == rowDescripción);
                    if (ingredienteConMismaDescripcion != null)
                    {
                        ingrediente = ingredienteConMismaDescripcion;
                    }
                }

                if (!existe)
                {
                    ingrediente = new Ingrediente()
                    {
                        Nombre         = rowNombre,
                        Descripcion    = rowDescripción,
                        Stock          = 0,
                        IdTipoAlimento = tipoAlimento.IdTipoAlimento,
                        IdTipoMedicion = tipoMedicion.IdTipoMedicion
                    };
                    detalleIn = new DetalleIngrediente()
                    {
                        CantidadIngresada = cantidad,
                        Descripcion       = rowDescripción,
                        IdMarca           = marca.IdMarca,
                        Estado            = 1
                    };
                    ingrediente = iDAL.Add(ingrediente, detalleIn);
                }

                IngredienteFactura ingredienteFactura = new IngredienteFactura();
                ingredienteFactura.Factura     = obj.IdFactura;
                ingredienteFactura.Ingrediente = ingrediente.IdIngrediente;
                ingredienteFactura.Precio      = Convert.ToInt32(rowPrecio);
                ingredienteFactura.Cantidad    = cantidad;
                ingredienteFactura.Impuesto    = 0;

                iFDAL.Add(ingredienteFactura);
                iFDAL.UpdateIngrediente(ingredienteFactura, tipoMedicion.IdTipoMedicion);
            }
        }