public static void SetPageTemplates(IConsoleRepository ConsoleRepository, TemplatedPage templatedPage,
                                             Template structureTemplate, Template holdingTemplate, Team team)
        {
            var pageStructureTemplate = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = structureTemplate,
                    PageSectionId = 0
                };
            ConsoleRepository.Add<PageTemplate>(pageStructureTemplate);

            var holdingTempl_1 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 1
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_1);

            var holdingTempl_2 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 2
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_2);

            var holdingTempl_3 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 3
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_3);

            var holdingTempl_4 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 4
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_4);

            var holdingTempl_5 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 5
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_5);

            var holdingTempl_6 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 6
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_6);

            var holdingTempl_7 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 7
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_7);

            var holdingTempl_8 = new PageTemplate
                {
                    IsVisible = true,
                    Team = team,
                    TemplatedPage = templatedPage,
                    Template = holdingTemplate,
                    PageSectionId = 8
                };
            ConsoleRepository.Add<PageTemplate>(holdingTempl_8);
        }
        // ReSharper restore InconsistentNaming
        public override void SetupTeam()
        {
            this.SetUpCob();
            this.SetUpTermsNCondition();
            this.SetUpLinks();
            this.SetUpUser();

            QuoteTemplate01 = _consoleRepository.Query<QuoteTemplate>(qtmpl => qtmpl.Name == "Construction - Indication").SingleOrDefault();
            QuoteTemplate01 = QuoteTemplate01 ?? new QuoteTemplate { Name = "Construction - Indication", RdlPath = "/Underwriting/Console/QuoteSheet_CO" };

            SubmissionType01 = _consoleRepository.Query<SubmissionType>(styp => styp.Id == "CO").SingleOrDefault();
            SubmissionType01 = SubmissionType01 ?? new SubmissionType { Id = "CO", Title = "Construction_Submission" };

            Team01 = _consoleRepository.Query<Team>(team => team.Title == "Construction").SingleOrDefault();

            if (Team01 == null)
            {
                Team01 = new Team
                {
                    Title = "Construction",
                    QuoteExpiryDaysDefault = 30,
                    RelatedCOBs = new List<COB> { COB_AG, COB_CC },
                    Links = new List<Link> { Link_01,Link_02,Link_03,Link_04,Link_05,Link_06,Link_07,Link_08,Link_09,Link_10,Link_11,Link_12,Link_13,Link_14,Link_15,Link_16,Link_17,Link_18,Link_19 },
                    RelatedQuoteTemplates = new List<QuoteTemplate> { QuoteTemplate01 },
                    Memberships = new Collection<TeamMembership> { new TeamMembership { StartDate = DateTime.Now, User = User01 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User02 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User03 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User04 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User05 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User06 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User07 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User08 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User09 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User10 },
                    },
                    RelatedOffices = new List<Office>
                        {
                            _consoleRepository.Query<Office>(off => off.Id == "LON").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "MIA").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "LAB").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "NYC").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "SNG").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "DUB").Single(),
                        },
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now,
                    SubmissionTypeId = SubmissionType01.Id,
                    DefaultPolicyType = "NONMARINE"
                };
               
                //filters
                foreach (var teamMembership in Team01.Memberships)
                {
                    var membershipLocal = teamMembership;
                    _consoleRepository.Query<User>(u => u.Id == membershipLocal.User.Id, u => u.FilterMembers,
                                                   u => u.FilterCOBs, u => u.FilterOffices).FirstOrDefault();

                    if (teamMembership.User.FilterMembers == null) teamMembership.User.FilterMembers = new Collection<User>();
                    foreach (var membership in Team01.Memberships)
                    {
                        if (teamMembership.User.FilterMembers.All(fm => fm.DomainLogon != membership.User.DomainLogon))
                            teamMembership.User.FilterMembers.Add(membership.User);
                    }

                    if (teamMembership.User.FilterCOBs == null) teamMembership.User.FilterCOBs = new Collection<COB>();
                    foreach (var relatedCoB in Team01.RelatedCOBs)
                    {
                        if (teamMembership.User.FilterCOBs.All(fc => fc.Id != relatedCoB.Id))
                            teamMembership.User.FilterCOBs.Add(relatedCoB);
                    }

                    if (teamMembership.User.FilterOffices == null) teamMembership.User.FilterOffices = new Collection<Office>();
                    foreach (var relatedOffice in Team01.RelatedOffices)
                    {
                        if (teamMembership.User.FilterOffices.All(fo => fo.Id != relatedOffice.Id))
                            teamMembership.User.FilterOffices.Add(relatedOffice);
                    }

                }
                _consoleRepository.Add(Team01);
            }
            _consoleRepository.SaveChanges();
        }
        //public TeamDto CreateTeam(TeamDto teamDto)
        //{
        //    using (ConsoleRepository)
        //    {
        //        var existingTeam = ConsoleRepository.Query<Team>().FirstOrDefault(t => t.Title == teamDto.Title);

        //        if (existingTeam != null)
        //            throw new ArgumentException("Team already exists, please use another Title.");

        //        var submissionType = SetSubmissionType(teamDto);

        //        var team = new Team
        //            {
        //                Title = teamDto.Title,
                        
        //            };

        //        if (teamDto.Links != null)
        //        {
        //            var linkList = new List<Link>();
        //            foreach (var newLink in teamDto.Links)
        //            {
        //                var link = ConsoleRepository.Query<Link>().FirstOrDefault(l => l.Id == newLink.Id);
        //                linkList.Add(link);
        //            }
        //            team.Links = linkList;
        //        }

                

        //        if (teamDto.Users != null)
        //        {
        //            var teamMembershipList = new List<TeamMembership>();
        //            var userList = new List<User>();
        //            foreach (var newUser in teamDto.Users)
        //            {
        //                var user = ConsoleRepository.Query<User>().FirstOrDefault(u => u.Id == newUser.Id);
        //                userList.Add(user);
        //                teamMembershipList.Add(new TeamMembership
        //                    {
        //                        User = user,
        //                        Team = team,
        //                        StartDate = DateTime.Now,
        //                        EndDate = null
        //                    });
        //            }
        //            team.Memberships = teamMembershipList;

        //            // Add Team FilterCOBs and FilterOffices to added users
        //            foreach (var user in userList)
        //            {
        //                AddTeamFilters(teamMembershipList.Select(tm => tm.TeamId).Distinct(), user, team);
        //            }
        //        }

        //        ConsoleRepository.Add<Team>(team);
        //        ConsoleRepository.SaveChanges();


        //        // Add Page Templates for new Team
        //        var structureTemplate = ConsoleRepository.Query<Template>().FirstOrDefault(t => t.Title.Equals("8 Section Template"));
        //        var holdingTemplate = ConsoleRepository.Query<Template>().FirstOrDefault(t => t.Title.Equals("Holding Template"));

        //        foreach (var templatedPage in ConsoleRepository.Query<TemplatedPage>().ToList())
        //        {
        //            TemplatesModule.SetPageTemplates(ConsoleRepository, templatedPage, structureTemplate, holdingTemplate, team);
        //        }
        //        ConsoleRepository.SaveChanges();

        //        teamDto.Id = team.Id;
        //        return teamDto;
        //    }
        //}

        //public TeamDto EditTeam(TeamDto teamDto)
        //{
        //    using (ConsoleRepository)
        //    {
        //        var team =
        //            ConsoleRepository.Query<Team>(t => t.Links).FirstOrDefault(t => t.Id == teamDto.Id);

        //        if (team == null)
        //            throw new Exception("Team to Edit does not exist"); // TODO: throw new NullReferenceException(team);

        //        var submissionType = SetSubmissionType(teamDto);

        //        ConsoleRepository.Attach<Team>(team);

        //        team.Title = teamDto.Title;
                

        //        if (teamDto.Links != null)
        //        {
        //            if (team.Links != null)
        //                team.Links.Clear();

        //            var linkList = new List<Link>();
        //            foreach (var newLink in teamDto.Links)
        //            {
        //                var link = ConsoleRepository.Query<Link>().FirstOrDefault(l => l.Id == newLink.Id);
        //                if (link != null)
        //                    linkList.Add(link);
        //            }
        //            team.Links = linkList;
        //        }

                
        //        //  TeamMembership
        //        if (teamDto.AllUsers != null)
        //        {
        //            foreach (var membership in teamDto.AllUsers)
        //            {
        //                var teamMembership = team.Memberships.FirstOrDefault(tm => tm.UserId == membership.Id);
        //                if (teamMembership != null)
        //                {
        //                    if (!membership.IsCurrentMembership)
        //                    {
        //                        teamMembership.IsCurrent = false;
        //                        teamMembership.EndDate = DateTime.Now;

        //                        // Remove team filters from user
        //                        var user =
        //                            team.Memberships.Where(
        //                                tm => tm.UserId == teamMembership.UserId && tm.IsCurrent == false)
        //                                .Select(t => t.User)
        //                                .FirstOrDefault();

                                
        //                    }
        //                    else
        //                    {
        //                        teamMembership.IsCurrent = true;
        //                        teamMembership.EndDate = null;
        //                    }
        //                }
        //            }
        //        }

        //        if (teamDto.Users != null)
        //        {
        //            var userList = new List<User>();
        //            foreach (var newMem in teamDto.Users)
        //            {
        //                var currentMem = team.Memberships.FirstOrDefault(m => m.UserId == newMem.Id);
        //                var user = ConsoleRepository.Query<User>().FirstOrDefault(u => u.Id == newMem.Id);

        //                if (currentMem == null)
        //                {
        //                    team.Memberships.Add(new TeamMembership
        //                        {
        //                            TeamId = team.Id,
        //                            UserId = newMem.Id,
        //                            StartDate = DateTime.Now,
        //                            EndDate = null
        //                        });
        //                }
        //                else
        //                {
        //                    userList.Add(user);

        //                    currentMem.IsCurrent = true;
        //                    currentMem.EndDate = null;
        //                }
        //            }

        //            // Add Team FilterCOBs and FilterOffices to added users
        //            foreach (var user in userList)
        //            {
        //                AddTeamFilters(team.Memberships.Select(tm => tm.TeamId).Distinct(), user, team);
        //            }
        //        }

        //        ConsoleRepository.SaveChanges();

        //        return teamDto;
        //    }
        //}

        public string DeleteTeam(Team team)
        {
            using (ConsoleRepository)
            {
                ConsoleRepository.Attach<Team>(team);
                ConsoleRepository
                    .Query<Team>(t => t.Id == team.Id,
                                                
                                                t => t.Links,
                                                t=>t.Memberships
                                              ).FirstOrDefault();
               

               

                ConsoleRepository.Delete<Team>(team);
                ConsoleRepository.SaveChanges();
                return "Successfully Deleted Team";
            }
        }
        public ActionResult DeleteTeam(Team team)
        {
            try
            {
                var result = AdminModuleManager.DeleteTeam(team);

                return new JsonNetResult
                {
                    Data = result
                };
            }
			catch (Exception ex) // TODO: Remove
            {
                LogHandler.WriteLog(ex.ToString(), LogSeverity.Error, LogCategory.BusinessComponent);
                throw new HttpException(500, "Server Error");
            }

        }
        private static void SetSectionTemplates(string pageTitle, List<Template> allTemplates,
                                                List<TemplatedPage> templatedPages, List<PageTemplate> pageTemplates,
                                                Team team)
        {
            // - Section 1 
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 1,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });

            // Section 2 
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 2,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });

            // Section 3
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 3,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });

            // Section 4
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 4,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });

            // Section 5
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 5,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });

            // Section 6
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 6,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });

            // Section 7
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 7,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });

            // Section 8
            pageTemplates.Add(new PageTemplate
                {
                    TemplatedPage = templatedPages.FirstOrDefault(s => s.PageTitle == pageTitle),
                    Template = allTemplates.FirstOrDefault(t => t.Title == "Holding Template"),
                    PageSectionId = 8,
                    Team = team,
                    IsVisible = true,
                    IsReadOnly = false,
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now
                });
        }
        public string DeleteTeam(Team team)
        {
            using (ConsoleRepository)
            {
                ConsoleRepository.Attach<Team>(team);
                ConsoleRepository
                    .Query<Team>(t => t.Id == team.Id,
                                                t=>t.AppAccelerators,
                                                t=>t.RelatedCOBs,
                                                t => t.RelatedOffices,
                                                t => t.RelatedQuoteTemplates,
                                                t => t.RelatedRisks,
                                                t => t.Links,
                                                t=>t.Memberships,
                                              t => t.TeamOfficeSettings.Select(tos => tos.MarketWordingSettings),
                                              t => t.TeamOfficeSettings.Select(tos => tos.TermsNConditionWordingSettings),
                                              t => t.TeamOfficeSettings.Select(tos => tos.SubjectToClauseWordingSettings)
                                              ).FirstOrDefault();
                foreach (var teamOfficeSetting in team.TeamOfficeSettings.ToList())
                {
                    foreach (var marketWordingSetting in teamOfficeSetting.MarketWordingSettings.ToList())
                    {
                        ConsoleRepository.Delete(marketWordingSetting);
                    }
                    foreach (var termsNConditionWordingSetting in teamOfficeSetting.TermsNConditionWordingSettings.ToList())
                    {
                        ConsoleRepository.Delete(termsNConditionWordingSetting);
                    }
                    foreach (var subjectToClauseWordingSetting in teamOfficeSetting.SubjectToClauseWordingSettings.ToList())
                    {
                        ConsoleRepository.Delete(subjectToClauseWordingSetting);
                    }
                    ConsoleRepository.Delete(teamOfficeSetting);
                }

                var teamUnderwriterSettings =
                    ConsoleRepository.Query<TeamUnderwriterSetting>(tuw => tuw.TeamId == team.Id).ToList();
                foreach (var teamUnderwriterSetting in teamUnderwriterSettings)
                {
                    ConsoleRepository.Detach(teamUnderwriterSetting);
                }

                ConsoleRepository.Delete<Team>(team);
                ConsoleRepository.SaveChanges();
                return "Successfully Deleted Team";
            }
        }
        public void AddTeamFilters(IEnumerable<int> teamIds, User user, Team team)
        {
            if (teamIds == null) return;

            bool teamPassedIn = team != null;

            foreach (var teamId in teamIds)
            {

                if (!teamPassedIn) // Has a new team been passed in?

                    team = ConsoleRepository.Query<Team>(t => t.RelatedCOBs, t => t.RelatedOffices)
                                            .FirstOrDefault(t => t.Id == teamId);

                if (team == null) continue; // Cannot find team in DB

                var relatedCOBs = team.RelatedCOBs;
                if (relatedCOBs != null && relatedCOBs.Count > 0)
                {
                    var cobsToAdd = (user.FilterCOBs != null && user.FilterCOBs.Count > 0)
                                        ? relatedCOBs.Except(user.FilterCOBs)
                                        : relatedCOBs;

                    if (user.FilterCOBs == null)
                        user.FilterCOBs = new Collection<COB>();
                    foreach (var cob in cobsToAdd)
                    {
                        user.FilterCOBs.Add(cob);
                    }
                }

                var relatedOffices = team.RelatedOffices;
                if (relatedOffices == null || relatedOffices.Count <= 0) continue;

                var officesToAdd = (user.FilterOffices != null && user.FilterOffices.Count > 0)
                                       ? relatedOffices.Except(user.FilterOffices)
                                       : relatedOffices;

                if (user.FilterOffices == null)
                    user.FilterOffices = new Collection<Office>();
                foreach (var office in officesToAdd)
                {
                    user.FilterOffices.Add(office);
                }


            }
        }
        public TeamDto CreateTeam(TeamDto teamDto)
        {
            using (ConsoleRepository)
            {
                var existingTeam = ConsoleRepository.Query<Team>().FirstOrDefault(t => t.Title == teamDto.Title);

                if (existingTeam != null)
                    throw new ArgumentException("Team already exists, please use another Title.");

                var team = new Team
                    {
                        Title = teamDto.Title,
                        DefaultDomicile = teamDto.DefaultDomicile,
                        DefaultMOA = teamDto.DefaultMOA,
                        QuoteExpiryDaysDefault = teamDto.QuoteExpiryDaysDefault,
                        DefaultPolicyType = (string.IsNullOrEmpty(teamDto.DefaultPolicyType)) ? "MARINE" : teamDto.DefaultPolicyType
                    };

                if (teamDto.Links != null)
                {
                    var linkList = new List<Link>();
                    foreach (var newLink in teamDto.Links)
                    {
                        var link = ConsoleRepository.Query<Link>().FirstOrDefault(l => l.Id == newLink.Id);
                        linkList.Add(link);
                    }
                    team.Links = linkList;
                }

                if (teamDto.RelatedCOBs != null)
                {
                    var cobList = new List<COB>();
                    foreach (var newCOB in teamDto.RelatedCOBs)
                    {
                        var cob = ConsoleRepository.Query<COB>().FirstOrDefault(c => c.Id == newCOB.Id);
                        cobList.Add(cob);
                    }
                    team.RelatedCOBs = cobList;
                }

                if (teamDto.RelatedOffices != null)
                {
                    var officeList = new List<Office>();
                    foreach (var newOffice in teamDto.RelatedOffices)
                    {
                        var office = ConsoleRepository.Query<Office>().FirstOrDefault(c => c.Id == newOffice.Id);
                        officeList.Add(office);
                    }
                    team.RelatedOffices = officeList;
                }

                if (teamDto.Users != null)
                {
                    var teamMembershipList = new List<TeamMembership>();
                    var userList = new List<User>();
                    foreach (var newUser in teamDto.Users)
                    {
                        var user = ConsoleRepository.Query<User>().FirstOrDefault(u => u.Id == newUser.Id);
                        userList.Add(user);
                        teamMembershipList.Add(new TeamMembership
                            {
                                User = user,
                                Team = team,
                                StartDate = DateTime.Now,
                                EndDate = null
                            });
                    }
                    team.Memberships = teamMembershipList;

                    // Add Team FilterCOBs and FilterOffices to added users
                    foreach (var user in userList)
                    {
                        AddTeamFilters(teamMembershipList.Select(tm => tm.TeamId).Distinct(), user, team);
                    }
                }

                ConsoleRepository.Add<Team>(team);
                ConsoleRepository.SaveChanges();

                teamDto.Id = team.Id;
                return teamDto;
            }
        }
        // ReSharper restore InconsistentNaming
        public override void SetupTeam()
        {
            this.SetUpCob();
            this.SetUpTermsNCondition();
            this.SetUpLinks();
            this.SetUpUser();

            QuoteTemplate01 = _consoleRepository.Query<QuoteTemplate>(qtmpl => qtmpl.Name == "Marine&Energy").SingleOrDefault();
            QuoteTemplate01 = QuoteTemplate01 ?? new QuoteTemplate { Name = "Marine&Energy", RdlPath = "/Underwriting/Console/QuoteSheet_ME" };

            SubmissionType01 = _consoleRepository.Query<SubmissionType>(styp => styp.Id == "ME").SingleOrDefault();
            SubmissionType01 = SubmissionType01 ?? new SubmissionType { Id = "ME", Title = "Marine&EnergyLiabilities_Submission" };

            Team01 = _consoleRepository.Query<Team>(team => team.Title == "Marine & Energy Liability").SingleOrDefault();
            if (Team01 == null)
            {
                Team01 = new Team
                {
                    Title = "Marine & Energy Liability",
                    QuoteExpiryDaysDefault = 30,
                    RelatedCOBs = new List<COB> { COB_CL, COB_CR},
                    Links = new List<Link> { Link_01, Link_02, Link_03, Link_04, Link_05, Link_06, Link_07, Link_08, Link_09, Link_10, Link_11, Link_12, Link_13, Link_14, Link_15 },
                    RelatedQuoteTemplates = new List<QuoteTemplate> { QuoteTemplate01 },
                    Memberships = new Collection<TeamMembership> { new TeamMembership { StartDate = DateTime.Now, User = User01 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User02 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User03 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User04 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User05 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User06 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User07 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User08 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User09 }, 
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User10 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User11 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User12 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User13 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User14 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User15 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User16 },
                                                                   new TeamMembership { StartDate = DateTime.Now, User = User17 },
                    },
                    RelatedOffices = new List<Office>
                        {
                            _consoleRepository.Query<Office>(off => off.Id == "LON").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "MIA").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "LAB").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "NYC").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "SNG").Single(),
                            _consoleRepository.Query<Office>(off => off.Id == "DUB").Single(),
                        },
                    CreatedBy = "InitialSetup",
                    CreatedOn = DateTime.Now,
                    ModifiedBy = "InitialSetup",
                    ModifiedOn = DateTime.Now,
                    SubmissionTypeId = SubmissionType01.Id,
                    DefaultPolicyType = "MARINE"
                };
                var teamOfficeSetting01 = new TeamOfficeSetting
                {
                    Team = Team01,
                    Office = _consoleRepository.Query<Office>(off => off.Id == "LON").Single(),
                    TermsNConditionWordingSettings =
                        new Collection<TermsNConditionWordingSetting>
                                {
                                    new TermsNConditionWordingSetting {DisplayOrder = 1, TermsNConditionWording = TnC01},
                                    new TermsNConditionWordingSetting {DisplayOrder = 2, TermsNConditionWording = TnC02},
                                    new TermsNConditionWordingSetting {DisplayOrder = 3, TermsNConditionWording = TnC03},
                                    new TermsNConditionWordingSetting {DisplayOrder = 4, TermsNConditionWording = TnC04},
                                    new TermsNConditionWordingSetting {DisplayOrder = 5, TermsNConditionWording = TnC05}
                                }
                };
                var teamOfficeSetting02 = new TeamOfficeSetting
                {
                    Team = Team01,
                    Office = _consoleRepository.Query<Office>(off => off.Id == "MIA").Single(),
                    TermsNConditionWordingSettings =
                        new Collection<TermsNConditionWordingSetting>
                                {
                                    new TermsNConditionWordingSetting {DisplayOrder = 1, TermsNConditionWording = TnC01},
                                    new TermsNConditionWordingSetting {DisplayOrder = 2, TermsNConditionWording = TnC02},
                                    new TermsNConditionWordingSetting {DisplayOrder = 3, TermsNConditionWording = TnC03},
                                    new TermsNConditionWordingSetting {DisplayOrder = 4, TermsNConditionWording = TnC04},
                                    new TermsNConditionWordingSetting {DisplayOrder = 5, TermsNConditionWording = TnC05}
                                }
                };
                var teamOfficeSetting03 = new TeamOfficeSetting
                {
                    Team = Team01,
                    Office = _consoleRepository.Query<Office>(off => off.Id == "LAB").Single(),
                    TermsNConditionWordingSettings =
                        new Collection<TermsNConditionWordingSetting>
                                {
                                    new TermsNConditionWordingSetting {DisplayOrder = 1, TermsNConditionWording = TnC01},
                                    new TermsNConditionWordingSetting {DisplayOrder = 2, TermsNConditionWording = TnC02},
                                    new TermsNConditionWordingSetting {DisplayOrder = 3, TermsNConditionWording = TnC03},
                                    new TermsNConditionWordingSetting {DisplayOrder = 4, TermsNConditionWording = TnC04},
                                    new TermsNConditionWordingSetting {DisplayOrder = 5, TermsNConditionWording = TnC05}
                                }
                };
                var teamOfficeSetting04 = new TeamOfficeSetting
                {
                    Team = Team01,
                    Office = _consoleRepository.Query<Office>(off => off.Id == "NYC").Single(),
                    TermsNConditionWordingSettings =
                        new Collection<TermsNConditionWordingSetting>
                                {
                                    new TermsNConditionWordingSetting {DisplayOrder = 1, TermsNConditionWording = TnC01},
                                    new TermsNConditionWordingSetting {DisplayOrder = 2, TermsNConditionWording = TnC02},
                                    new TermsNConditionWordingSetting {DisplayOrder = 3, TermsNConditionWording = TnC03},
                                    new TermsNConditionWordingSetting {DisplayOrder = 4, TermsNConditionWording = TnC04},
                                    new TermsNConditionWordingSetting {DisplayOrder = 5, TermsNConditionWording = TnC05}
                                }
                };
                var teamOfficeSetting05 = new TeamOfficeSetting
                {
                    Team = Team01,
                    Office = _consoleRepository.Query<Office>(off => off.Id == "SNG").Single(),
                    TermsNConditionWordingSettings =
                        new Collection<TermsNConditionWordingSetting>
                                {
                                    new TermsNConditionWordingSetting {DisplayOrder = 1, TermsNConditionWording = TnC01},
                                    new TermsNConditionWordingSetting {DisplayOrder = 2, TermsNConditionWording = TnC02},
                                    new TermsNConditionWordingSetting {DisplayOrder = 3, TermsNConditionWording = TnC03},
                                    new TermsNConditionWordingSetting {DisplayOrder = 4, TermsNConditionWording = TnC04},
                                    new TermsNConditionWordingSetting {DisplayOrder = 5, TermsNConditionWording = TnC05}
                                }
                };
                var teamOfficeSetting06 = new TeamOfficeSetting
                {
                    Team = Team01,
                    Office = _consoleRepository.Query<Office>(off => off.Id == "DUB").Single(),
                    TermsNConditionWordingSettings =
                        new Collection<TermsNConditionWordingSetting>
                                {
                                    new TermsNConditionWordingSetting {DisplayOrder = 1, TermsNConditionWording = TnC01},
                                    new TermsNConditionWordingSetting {DisplayOrder = 2, TermsNConditionWording = TnC02},
                                    new TermsNConditionWordingSetting {DisplayOrder = 3, TermsNConditionWording = TnC03},
                                    new TermsNConditionWordingSetting {DisplayOrder = 4, TermsNConditionWording = TnC04},
                                    new TermsNConditionWordingSetting {DisplayOrder = 5, TermsNConditionWording = TnC05}
                                }
                };

                Team01.TeamOfficeSettings = new Collection<TeamOfficeSetting> { teamOfficeSetting01, 
                    teamOfficeSetting02, 
                    teamOfficeSetting03, 
                    teamOfficeSetting04, 
                    teamOfficeSetting05, 
                    teamOfficeSetting06};
                //filters
                foreach (var teamMembership in Team01.Memberships)
                {
                    var membershipLocal = teamMembership;
                    _consoleRepository.Query<User>(u => u.Id == membershipLocal.User.Id, u => u.FilterMembers,
                                                   u => u.FilterCOBs, u => u.FilterOffices).FirstOrDefault();

                    if (teamMembership.User.FilterMembers == null) teamMembership.User.FilterMembers = new Collection<User>();
                    foreach (var membership in Team01.Memberships.Where(membership => membershipLocal.User.DomainLogon != membership.User.DomainLogon))
                    {
                        if (teamMembership.User.FilterMembers.All(fm => fm.DomainLogon != membership.User.DomainLogon))
                            teamMembership.User.FilterMembers.Add(membership.User);
                    }

                    if (teamMembership.User.FilterCOBs == null) teamMembership.User.FilterCOBs = new Collection<COB>();
                    foreach (var relatedCoB in Team01.RelatedCOBs)
                    {
                        if (teamMembership.User.FilterCOBs.All(fc => fc.Id != relatedCoB.Id))
                            teamMembership.User.FilterCOBs.Add(relatedCoB);
                    }

                    if (teamMembership.User.FilterOffices == null) teamMembership.User.FilterOffices = new Collection<Office>();
                    foreach (var relatedOffice in Team01.RelatedOffices)
                    {
                        if (teamMembership.User.FilterOffices.All(fo => fo.Id != relatedOffice.Id))
                            teamMembership.User.FilterOffices.Add(relatedOffice);
                    }

                }
                _consoleRepository.Add(Team01);
            }
            _consoleRepository.SaveChanges();
        }