public void RemoveProject(int projectId)
        {
            p1p.Data.Project proj;
            using (p1p.Data.P1PContext ctx = new p1p.Data.P1PContext())
            {
                proj = ctx.Projects.Single(p => p.Id == projectId);
                try
                {
                    List <OrderTeamXREF> matchingxref = ctx.OrderTeamXREFs.Where(x => x.OrderId == projectId).ToList <OrderTeamXREF>();
                    if (matchingxref.Count > 0)
                    {
                        OrderTeamXREF xref = matchingxref[0];
                        ctx.OrderTeamXREFs.Remove(xref);
                        ctx.SaveChanges();
                    }

                    ctx.Projects.Remove(proj);
                    ctx.SaveChanges();
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateException ex)
                {
                    if ("The DELETE statement conflicted with the REFERENCE constraint \"FK_dbo.LandingPages_dbo.Projects_ProjectId\". The conflict occurred in database \"p1pLinkTracker\", table \"dbo.LandingPages\", column 'ProjectId'.\r\nThe statement has been terminated.".Equals(ex.InnerException.InnerException.Message))
                    {
                        throw new Exception("You can't delete a project that has targets assigned to it.");
                    }
                    else
                    {
                        throw new Exception("Could not delete Project.");
                    }
                }
            }
        }
        public void UpdateProject(ProjectDTO item)
        {
            p1p.Data.Project mdlProject = (p1p.Data.Project)P1PObjectMapper.Convert(item, typeof(p1p.Data.Project));
            p1p.Data.Project match;
            using (p1p.Data.P1PContext ctx = new p1p.Data.P1PContext())
            {
                match = ctx.Projects.Single(p => item.Id == p.Id);
                if (match.IsActive && !mdlProject.IsActive)
                {
                    List <Link> killLinks = ctx.Links.Where(l => l.ProjectId == item.Id &&
                                                            l.LinkStatusId != 5 &&
                                                            l.LinkStatusId != 8 &&
                                                            l.LinkStatusId != 9 &&
                                                            l.LinkStatusId != 10 &&
                                                            l.LinkStatusId != 11 &&
                                                            l.LinkStatusId != 12).ToList <Link>();
                    foreach (Link link in killLinks)
                    {
                        Link deadLink = link;
                        deadLink.LinkStatusId = 8;
                        ctx.Entry(link).CurrentValues.SetValues(deadLink);
                    }
                    ctx.SaveChanges();
                }

                ctx.Entry(match).CurrentValues.SetValues(mdlProject);
                ctx.SaveChanges();

                List <OrderTeamXREF> matchingxref = ctx.OrderTeamXREFs.Where(x => x.OrderId == item.Id).ToList <OrderTeamXREF>();
                if (matchingxref.Count > 0)
                {
                    DateTime      InsertDate = DateTime.Now;
                    OrderTeamXREF xref       = matchingxref[0];
                    ctx.OrderTeamXREFs.Remove(xref);
                    OrderTeamXREF newxref = new OrderTeamXREF()
                    {
                        TeamId = item.Team.Id, OrderId = item.Id, InsertDate = InsertDate
                    };
                    ctx.OrderTeamXREFs.Add(newxref);
                    ctx.SaveChanges();
                }
                else
                {
                    if (item.Team.Id > 0)
                    {
                        DateTime      InsertDate = DateTime.Now;
                        OrderTeamXREF newxref    = new OrderTeamXREF()
                        {
                            TeamId = item.Team.Id, OrderId = item.Id, InsertDate = InsertDate
                        };
                        ctx.OrderTeamXREFs.Add(newxref);
                        ctx.SaveChanges();
                    }
                }
            }
        }
        public void AddProject(ProjectDTO item)
        {
            p1p.Data.Project mdlProject = (p1p.Data.Project)P1PObjectMapper.Convert(item, typeof(p1p.Data.Project));
            using (p1p.Data.P1PContext ctx = new p1p.Data.P1PContext())
            {
                if (!IsDuplicate(mdlProject.Name))
                {
                    mdlProject.DateCreated = DateTime.Now;
                    mdlProject.InsertDate  = DateTime.Now;
                    Project newproject = ctx.Projects.Add(mdlProject);
                    ctx.SaveChanges();
                    DateTime insertDate = DateTime.Now;
                    if (item.Team != null && item.Team.Id != 0)
                    {
                        OrderTeamXREF xref = new OrderTeamXREF()
                        {
                            TeamId     = item.Team.Id,
                            OrderId    = newproject.Id,
                            InsertDate = insertDate
                        };

                        ctx.OrderTeamXREFs.Add(xref);
                    }
                    if (item.Categories != null && item.Categories.Count > 0)
                    {
                        foreach (KeyValueDTO c in item.Categories)
                        {
                            ctx.OrderCategoryXREFs.Add(new OrderCategoryXREF()
                            {
                                ProjectId  = newproject.Id,
                                CategoryId = c.Id
                            });
                        }
                    }
                    ctx.SaveChanges();
                }
                else
                {
                    throw new Exception("A project already exists with this name");
                }
            }
        }
 public List <ProjectDTO> GetAll()
 {
     using (p1p.Data.P1PContext ctx = new p1p.Data.P1PContext())
     {
         List <ProjectDTO> projects = (from p in ctx.Projects orderby p.Name select p)
                                      .AsEnumerable()
                                      .Select(p => (ProjectDTO)P1PObjectMapper.Convert(p, typeof(ProjectDTO))).ToList <ProjectDTO>();
         List <OrderTeamXREF> xrefs = (from x in ctx.OrderTeamXREFs select x).ToList <OrderTeamXREF>();
         foreach (ProjectDTO project in projects)
         {
             List <OrderTeamXREF> matchingxref = xrefs.Where(x => x.OrderId == project.Id).ToList <OrderTeamXREF>();
             if (matchingxref.Count > 0)
             {
                 OrderTeamXREF xref = matchingxref[0];
                 project.Team.Id   = xref.Team.Id;
                 project.Team.Name = xref.Team.Name;
             }
         }
         return(projects);
     }
 }