示例#1
0
        //
        // GET: /Canvas/Copy
        public ActionResult Copy(int id = 0)
        {
            Canvas canvas = db.Canvases.Find(id);
            if (canvas == null)
            {
                return View("Missing", new MissingItem(id));
            }

            ViewBag.PanelCount = canvas.Panels.Count;
            ViewBag.FrameCount = canvas.Panels.Sum(p => p.Frames.Count);
            ViewBag.LocationCount = canvas.Panels.Sum(p => p.Frames.Sum(f => f.Locations.Count));
            CanvasCopy canvasCopy = new CanvasCopy()
            {
                CanvasId = canvas.CanvasId,
                Name = string.Format("{0} - {1}", canvas.Name, Resources.Copy),
                CopyPanels = ViewBag.PanelCount > 0,
                CopyFrames = ViewBag.FrameCount > 0,
                CopyFrameLocations = ViewBag.LocationCount > 0,
            };
            ViewBag.Canvas = canvas;
            return View(canvasCopy);
        }
        public ActionResult Copy(CanvasCopy canvasCopy)
        {
            int id = canvasCopy.CanvasId;
            IQueryable<Canvas> canvasQ = db.Canvases
                .AsQueryable()
                ;

            if (canvasCopy.CopyPanels)
            {
                canvasQ = canvasQ
                    .Include(c => c.Panels.Select(p => p.FullScreens))
                    ;

                if (canvasCopy.CopyFrames)
                {
                    canvasQ = canvasQ
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Clock)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Memo)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.News)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Picture)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Report)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Video).Select(v => v.Contents)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Weather)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Html)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Youtube)))
                        .Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Outlook)))
                        ;

                    if (canvasCopy.CopyFrameLocations)
                        canvasQ = canvasQ.Include(c => c.Panels.Select(p => p.Frames.Select(f => f.Locations)));
                }
            }

            Canvas canvas = canvasQ
                .AsNoTracking()
                .FirstOrDefault(c => c.CanvasId == id)
                ;

            if (canvas == null)
            {
                return View("Missing", new MissingItem(id));
            }

            db.Entry(canvas).State = EntityState.Detached;

            canvas.Name = canvasCopy.Name;
            if (!canvasCopy.CopyPanels)
            {
                canvas.Panels.Clear();
                this.makeFullscreenPanel(canvas);
            }

            if (ModelState.IsValid)
            {
                db.Canvases.Add(canvas);
                db.SaveChanges();

                return RedirectToAction("Details", new { id = canvas.CanvasId });
            }

            ViewBag.PanelCount = canvas.Panels.Count;
            ViewBag.FrameCount = canvas.Panels.Sum(p => p.Frames.Count);
            ViewBag.LocationCount = canvas.Panels.Sum(p => p.Frames.Sum(f => f.Locations.Count));
            canvasCopy.CopyPanels = ViewBag.PanelCount > 0;
            canvasCopy.CopyFrames = ViewBag.FrameCount > 0;
            canvasCopy.CopyFrameLocations = ViewBag.LocationCount > 0;
            ViewBag.Canvas = canvas;
            return View(canvasCopy);
        }