public async void ModificarProductoTerminado()
        {
            var formProductoTerminado                     = new FormProductoTerminado(context, ProductoTerminadoSeleccionado);
            var formProductoTerminadoDataContext          = formProductoTerminado.DataContext as FormProductoTerminadoViewModel;
            var productosTerminadosComposicionesIniciales = formProductoTerminadoDataContext.ProductosTerminadosComposiciones.ToList();
            var historialHuecosAlmacenajesIniciales       = formProductoTerminadoDataContext.HistorialHuecosAlmacenajes.ToList();

            if ((bool)await DialogHost.Show(formProductoTerminado, "RootDialog"))
            {
                ProductoTerminadoSeleccionado.TipoId        = formProductoTerminadoDataContext.TipoProductoTerminado.TipoProductoTerminadoId;
                ProductoTerminadoSeleccionado.Unidades      = formProductoTerminadoDataContext.Unidades;
                ProductoTerminadoSeleccionado.Volumen       = formProductoTerminadoDataContext.Volumen;
                ProductoTerminadoSeleccionado.Observaciones = formProductoTerminadoDataContext.Observaciones;
                if (formProductoTerminadoDataContext.FechaBaja != null)
                {
                    ProductoTerminadoSeleccionado.FechaBaja = new DateTime(
                        formProductoTerminadoDataContext.FechaBaja.Value.Year,
                        formProductoTerminadoDataContext.FechaBaja.Value.Month,
                        formProductoTerminadoDataContext.FechaBaja.Value.Day,
                        formProductoTerminadoDataContext.HoraBaja.Value.Hour,
                        formProductoTerminadoDataContext.HoraBaja.Value.Minute,
                        formProductoTerminadoDataContext.HoraBaja.Value.Second);
                }
                else
                {
                    ProductoTerminadoSeleccionado.FechaBaja = null;
                }
                if (!context.ProductosTerminadosComposiciones.Any(ptc => ptc.ProductoId == ProductoTerminadoSeleccionado.ProductoTerminadoId))
                {
                    // Se borran todos los productos terminados comosiciones antiguos y se añaden los nuevos
                    context.ProductosTerminadosComposiciones.RemoveRange(productosTerminadosComposicionesIniciales);
                    var productosTerminadosComposiciones = new List <ProductoTerminadoComposicion>();
                    foreach (var ptc in formProductoTerminadoDataContext.ProductosTerminadosComposiciones)
                    {
                        var hhrId = ptc.HistorialHuecoRecepcion.HistorialHuecoRecepcionId;
                        // Los huecos que no se ha añadido ninguna cantidad no se añaden
                        if (ptc.Unidades != 0 && ptc.Volumen != 0)
                        {
                            // Hay que asegurarse que la cantidad de materia prima escogida es como máximo la disponible en el hueco
                            if (ptc.HistorialHuecoRecepcion.MateriaPrima.TipoMateriaPrima.MedidoEnUnidades == true)
                            {
                                ptc.Unidades = (ptc.Unidades > ptc.HistorialHuecoRecepcion.UnidadesRestantes) ? (ptc.HistorialHuecoRecepcion.UnidadesRestantes) : (ptc.Unidades);
                            }
                            else
                            {
                                ptc.Volumen = (ptc.Volumen > ptc.HistorialHuecoRecepcion.VolumenRestante) ? (ptc.HistorialHuecoRecepcion.UnidadesRestantes) : (ptc.Volumen);
                            }
                            ptc.HistorialHuecoRecepcion = null;
                            ptc.HistorialHuecoId        = hhrId;
                            ptc.ProductoTerminado       = ProductoTerminadoSeleccionado;
                            productosTerminadosComposiciones.Add(ptc);
                        }
                    }
                    context.ProductosTerminadosComposiciones.AddRange(productosTerminadosComposiciones);

                    // Se borran todos los historiales huecos almacenajes antiguos y se añaden los nuevos
                    context.HistorialHuecosAlmacenajes.RemoveRange(historialHuecosAlmacenajesIniciales);
                    var historialHuecosAlmacenajes = new List <HistorialHuecoAlmacenaje>();
                    foreach (var hha in formProductoTerminadoDataContext.HistorialHuecosAlmacenajes)
                    {
                        var haId = hha.HuecoAlmacenaje.HuecoAlmacenajeId;
                        // Los huecos que no se ha añadido ninguna cantidad no se añaden
                        if (hha.Unidades != 0 && hha.Volumen != 0)
                        {
                            hha.HuecoAlmacenaje   = null;
                            hha.HuecoAlmacenajeId = haId;
                            hha.ProductoTerminado = ProductoTerminadoSeleccionado;
                            historialHuecosAlmacenajes.Add(hha);
                        }
                    }
                    context.HistorialHuecosAlmacenajes.AddRange(historialHuecosAlmacenajes);
                }

                context.SaveChanges();
                ProductosTerminadosView.Refresh();
            }
        }
        private async void AnadirProductoTerminado()
        {
            var formProductoTerminado = new FormProductoTerminado(context);

            if ((bool)await DialogHost.Show(formProductoTerminado, "RootDialog"))
            {
                var formProductoTerminadoDataContext = formProductoTerminado.DataContext as FormProductoTerminadoViewModel;
                var productoTerminado = new ProductoTerminado()
                {
                    OrdenId       = OrdenElaboracionSeleccionada.OrdenElaboracionId,
                    TipoId        = (formProductoTerminado.cbTiposProductosTerminados.SelectedItem as TipoProductoTerminado).TipoProductoTerminadoId,
                    Volumen       = formProductoTerminadoDataContext.Volumen,
                    Unidades      = formProductoTerminadoDataContext.Unidades,
                    Observaciones = formProductoTerminadoDataContext.Observaciones
                };

                if (formProductoTerminadoDataContext.FechaBaja != null)
                {
                    productoTerminado.FechaBaja = new DateTime(
                        formProductoTerminadoDataContext.FechaBaja.Value.Year,
                        formProductoTerminadoDataContext.FechaBaja.Value.Month,
                        formProductoTerminadoDataContext.FechaBaja.Value.Day,
                        formProductoTerminadoDataContext.HoraBaja.Value.Hour,
                        formProductoTerminadoDataContext.HoraBaja.Value.Minute,
                        formProductoTerminadoDataContext.HoraBaja.Value.Second);
                }
                context.ProductosTerminados.Add(productoTerminado);

                var productosTerminadosComposiciones = new List <ProductoTerminadoComposicion>();
                foreach (var ptc in formProductoTerminadoDataContext.ProductosTerminadosComposiciones)
                {
                    var hhrId = ptc.HistorialHuecoRecepcion.HistorialHuecoRecepcionId;
                    // Los huecos que no se ha añadido ninguna cantidad no se añaden
                    if (ptc.Unidades != 0 && ptc.Volumen != 0)
                    {
                        // Hay que asegurarse que la cantidad de materia prima escogida es como máximo la disponible en el hueco
                        if (ptc.HistorialHuecoRecepcion.MateriaPrima.TipoMateriaPrima.MedidoEnUnidades == true)
                        {
                            ptc.Unidades = (ptc.Unidades > ptc.HistorialHuecoRecepcion.UnidadesRestantes) ? (ptc.HistorialHuecoRecepcion.UnidadesRestantes) : (ptc.Unidades);
                        }
                        else
                        {
                            ptc.Volumen = (ptc.Volumen > ptc.HistorialHuecoRecepcion.VolumenRestante) ? (ptc.HistorialHuecoRecepcion.UnidadesRestantes) : (ptc.Volumen);
                        }
                        ptc.HistorialHuecoRecepcion = null;
                        ptc.HistorialHuecoId        = hhrId;
                        ptc.ProductoTerminado       = productoTerminado;
                        productosTerminadosComposiciones.Add(ptc);
                    }
                }
                context.ProductosTerminadosComposiciones.AddRange(productosTerminadosComposiciones);

                var historialHuecosAlmacenajes = new List <HistorialHuecoAlmacenaje>();
                foreach (var hha in formProductoTerminadoDataContext.HistorialHuecosAlmacenajes)
                {
                    var haId = hha.HuecoAlmacenaje.HuecoAlmacenajeId;
                    // Los huecos que no se ha añadido ninguna cantidad no se añaden
                    if (hha.Unidades != 0 && hha.Volumen != 0)
                    {
                        hha.HuecoAlmacenaje   = null;
                        hha.HuecoAlmacenajeId = haId;
                        hha.ProductoTerminado = productoTerminado;
                        historialHuecosAlmacenajes.Add(hha);
                    }
                }
                context.HistorialHuecosAlmacenajes.AddRange(historialHuecosAlmacenajes);
                context.SaveChanges();

                CargarProductosTerminados();
            }
        }