private async void AnadirProductoEnvasado()
        {
            var formProductoEnvasado = new FormProductoEnvasado(context);

            if ((bool)await DialogHost.Show(formProductoEnvasado, "RootDialog"))
            {
                var formProductoEnvasadoDataContext = formProductoEnvasado.DataContext as FormProductoEnvasadoViewModel;
                var productoEnvasado = new ProductoEnvasado()
                {
                    OrdenId = OrdenEnvasadoSeleccionada.OrdenEnvasadoId,
                    TipoProductoEnvasadoId = (formProductoEnvasado.cbTiposProductosEnvasados.SelectedItem as TipoProductoEnvasado).TipoProductoEnvasadoId,
                    Volumen       = formProductoEnvasadoDataContext.Volumen,
                    Unidades      = formProductoEnvasadoDataContext.Unidades,
                    PickingId     = (formProductoEnvasado.cbPicking.SelectedItem as Picking).PickingId,
                    Observaciones = formProductoEnvasadoDataContext.Observaciones
                };


                context.ProductosEnvasados.Add(productoEnvasado);

                var productosEnvasadosComposiciones = new List <ProductoEnvasadoComposicion>();
                foreach (var pec in formProductoEnvasadoDataContext.ProductosEnvasadosComposiciones)
                {
                    var hhaId = pec.HistorialHuecoAlmacenaje.HistorialHuecoAlmacenajeId;
                    // Los huecos que no se ha añadido ninguna cantidad no se añaden
                    if (pec.Unidades != 0 && pec.Volumen != 0)
                    {
                        // Hay que asegurarse que la cantidad de materia prima escogida es como máximo la disponible en el hueco
                        if (pec.HistorialHuecoAlmacenaje.ProductoTerminado.TipoProductoTerminado.MedidoEnUnidades == true)
                        {
                            pec.Unidades = (pec.Unidades > pec.HistorialHuecoAlmacenaje.UnidadesRestantes) ? (pec.HistorialHuecoAlmacenaje.UnidadesRestantes) : (pec.Unidades);
                        }
                        else
                        {
                            pec.Volumen = (pec.Volumen > pec.HistorialHuecoAlmacenaje.VolumenRestante) ? (pec.HistorialHuecoAlmacenaje.UnidadesRestantes) : (pec.Volumen);
                        }
                        pec.HistorialHuecoAlmacenaje = null;
                        pec.HistorialHuecoId         = hhaId;
                        pec.ProductoEnvasado         = productoEnvasado;
                        productosEnvasadosComposiciones.Add(pec);
                    }
                }
                context.ProductosEnvasadosComposiciones.AddRange(productosEnvasadosComposiciones);
                context.SaveChanges();

                CargarProductosEnvasados();
            }
        }
        public async void ModificarProductoEnvasado()
        {
            var formProductoEnvasado                     = new FormProductoEnvasado(context, ProductoEnvasadoSeleccionado);
            var formProductoEnvasadoDataContext          = formProductoEnvasado.DataContext as FormProductoEnvasadoViewModel;
            var productosEnvasadosComposicionesIniciales = formProductoEnvasadoDataContext.ProductosEnvasadosComposiciones.ToList();

            if ((bool)await DialogHost.Show(formProductoEnvasado, "RootDialog"))
            {
                ProductoEnvasadoSeleccionado.TipoProductoEnvasadoId = formProductoEnvasadoDataContext.TipoProductoEnvasado.TipoProductoEnvasadoId;
                ProductoEnvasadoSeleccionado.Unidades      = formProductoEnvasadoDataContext.Unidades;
                ProductoEnvasadoSeleccionado.Volumen       = formProductoEnvasadoDataContext.Volumen;
                ProductoEnvasadoSeleccionado.Observaciones = formProductoEnvasadoDataContext.Observaciones;

                if (!context.ProductosEnvasadosComposiciones.Any(pec => pec.ProductoId == ProductoEnvasadoSeleccionado.ProductoEnvasadoId))
                {
                    // Se borran todos los productos envasados composiciones antiguos y se añaden los nuevos
                    context.ProductosEnvasadosComposiciones.RemoveRange(productosEnvasadosComposicionesIniciales);
                    var productosEnvasadosComposiciones = new List <ProductoEnvasadoComposicion>();
                    foreach (var pec in formProductoEnvasadoDataContext.ProductosEnvasadosComposiciones)
                    {
                        var hhaId = pec.HistorialHuecoAlmacenaje.HistorialHuecoAlmacenajeId;
                        // Los huecos que no se ha añadido ninguna cantidad no se añaden
                        if (pec.Unidades != 0 && pec.Volumen != 0)
                        {
                            // Hay que asegurarse que la cantidad de materia prima escogida es como máximo la disponible en el hueco
                            if (pec.HistorialHuecoAlmacenaje.ProductoTerminado.TipoProductoTerminado.MedidoEnUnidades == true)
                            {
                                pec.Unidades = (pec.Unidades > pec.HistorialHuecoAlmacenaje.UnidadesRestantes) ? (pec.HistorialHuecoAlmacenaje.UnidadesRestantes) : (pec.Unidades);
                            }
                            else
                            {
                                pec.Volumen = (pec.Volumen > pec.HistorialHuecoAlmacenaje.VolumenRestante) ? (pec.HistorialHuecoAlmacenaje.UnidadesRestantes) : (pec.Volumen);
                            }
                            pec.HistorialHuecoAlmacenaje = null;
                            pec.HistorialHuecoId         = hhaId;
                            pec.ProductoEnvasado         = ProductoEnvasadoSeleccionado;
                            productosEnvasadosComposiciones.Add(pec);
                        }
                    }
                    context.ProductosEnvasadosComposiciones.AddRange(productosEnvasadosComposiciones);
                }

                context.SaveChanges();
                ProductosEnvasadosView.Refresh();
            }
        }