// // 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)); }