using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using EnVisage.Code; using System.Linq; using EnVisage.Code.BLL; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using System.Web.Mvc; namespace EnVisage.Models { public class TeamModel : IBaseModel { public Guid Id { get; set; } [Required] [MaxLength(100, ErrorMessage = "Team name should not exceed 100 characters")] [Display(Name = "Team Name")] public string Name { get; set; } [Required] [Display(Name = "Company")] public Guid? CompanyId { get; set; } [Required] [Display(Name = "Cost Center")] public Guid? CostCenterId { get; set; } [Display(Name = "Report To")] public Guid? ReportToId { get; set; } public Guid? PlannedCapacityScenarioId { get; set; } public Guid? ActualCapacityScenarioId { get; set; } public CompanyModel Company { get; set; } public CreditDepartmentModel CostCenter { get; set; } public ContactModel ReportTo { get; set; } [UIHint("MultipleSelect")] [Display(Name = "Contributors")] public IList UserId { get; set; } [Display(Name = "Inherit Capacity From")] public Guid? CapacityTeamId { get; set; } [Display(Name = "Capacity Type")] public bool CopyPlanned { get; set; } public IEnumerable Users { get { EnVisageEntities DbContext = new EnVisageEntities(); return DbContext.AspNetUsers; } } public String TeamUsers { get { string result = ""; EnVisageEntities DbContext = new EnVisageEntities(); var ac = new ApplicationDbContext(); var usermanager = new UserManager(new UserStore(ac)); var users = DbContext.User2Team.Where(x => x.TeamId == Id).ToList(); foreach (var user in users) { ApplicationUser u = usermanager.FindById(user.UserId); if (u != null) { if (!string.IsNullOrEmpty(result)) result += ", "; result += u.UserName; } } return result; } } /// /// Casts a obect to the object of type . /// /// A object. /// A object filled with data from db. public static explicit operator TeamModel(Team obj) { if (obj == null) return null; var model = new TeamModel { Id = obj.Id, Name = obj.Name, CompanyId = obj.CompanyId, CostCenterId = obj.CostCenterId, ReportToId = obj.ReportsTo, Company = (CompanyModel)obj.Company, CostCenter = (CreditDepartmentModel)obj.CreditDepartment, ReportTo = (ContactModel)obj.Contact, PlannedCapacityScenarioId = obj.PlannedCapacityScenarioId, ActualCapacityScenarioId = obj.ActualCapacityScenarioId }; model.TrimStringProperties(); return model; } public static explicit operator TeamModel(MixTeamModel mixTeam) { if (mixTeam == null) return null; var team = new TeamModel() { Name = mixTeam.Name, CompanyId = mixTeam.CompanyId, CostCenterId = mixTeam.CostCenterId, UserId = mixTeam.UserId }; if (!string.IsNullOrWhiteSpace(mixTeam.Id)) { Guid teamId; if (Guid.TryParse(mixTeam.Id, out teamId) && !Guid.Empty.Equals(teamId)) team.Id = teamId; } return team; } /// /// Copies data from model to DAL object. /// /// A target DAL object. public void CopyTo(Team dbObj) { if (dbObj == null) throw new ArgumentNullException(); dbObj.Name = Name; dbObj.CostCenterId = CostCenterId; dbObj.CompanyId = CompanyId; dbObj.ReportsTo = ReportToId; dbObj.PlannedCapacityScenarioId = PlannedCapacityScenarioId; dbObj.ActualCapacityScenarioId = ActualCapacityScenarioId; } } public class TeamInfoModel { public Guid Id { get; set; } public string Name { get; set; } public int Allocation { get; set; } public bool CanBeDeleted { get; set; } public Guid? PlannedCapacityScenarioId { get; set; } public ICollection Resources { get; set; } public bool IsAccessible { get; set; } } }