public static SafetyDiscussionViewModel GetViewModel(SafetyDiscussionInfo safetyDiscussionInfo, bool resolveIDs) { if (safetyDiscussionInfo != null) { var safetyDiscViewModel = new SafetyDiscussionViewModel { SafetyDiscussionID = safetyDiscussionInfo.SafetyDiscussionID, Date = safetyDiscussionInfo.SafetyDiscussionDate, Subject = safetyDiscussionInfo.SafetyDiscussionSubject, Outcomes = safetyDiscussionInfo.SafetyDiscussionOutcomes, Observer = safetyDiscussionInfo.SafetyDiscussionObserver, Colleagues = safetyDiscussionInfo.SafetyDiscussionColleagues.Split('|'), Location = safetyDiscussionInfo.SafetyDiscussionLocation }; if (resolveIDs) { var observerUser = UserInfo.Provider.Get(safetyDiscussionInfo.SafetyDiscussionObserver); safetyDiscViewModel.ObserverFullName = observerUser != null ? observerUser.FullName : ""; var colleaguesIDs = safetyDiscussionInfo.SafetyDiscussionColleagues; var colleagueNames = new List <string>(); if (!string.IsNullOrEmpty(colleaguesIDs)) { var splitIDs = colleaguesIDs.Split('|'); if (splitIDs != null && splitIDs.Length > 0) { foreach (var colleagueID in splitIDs) { if (int.TryParse(colleagueID, out int userId)) { var userInfo = UserInfo.Provider.Get(userId); if (userInfo != null && !string.IsNullOrEmpty(userInfo.FullName)) { colleagueNames.Add(userInfo.FullName); } } } } } safetyDiscViewModel.ColleagueNames = colleagueNames.Count > 0 ? colleagueNames.Join(", ") : ""; var location = LocationInfo.Provider.Get(safetyDiscussionInfo.SafetyDiscussionLocation); safetyDiscViewModel.LocationString = location != null ? $"{location.LocationDisplayName} - {location.LocationAddress}" : ""; } return(safetyDiscViewModel); } return(null); }
public ActionResult Create(SafetyDiscussionViewModel sdvm) { if (!ModelState.IsValid) { return(View(sdvm)); } try { var userInfo = UserInfo.Provider.Get(User.Identity.Name); //Technically we should also do validation on the user ids passed in to make //sure they are all associated with users who have the appropriate role. We //should also do some extra validation on date/location - and potentially //do sanitization on Subject/Outcomes (although there are issues associated //with allowing rich text input and then trying to clean out undesirable //elements - markdown would probably be a better option) var newDiscussion = new SafetyDiscussionInfo { SafetyDiscussionCreatedBy = userInfo.UserID, SafetyDiscussionObserver = sdvm.Observer, SafetyDiscussionDate = sdvm.Date, SafetyDiscussionLocation = sdvm.Location, SafetyDiscussionSubject = sdvm.Subject, SafetyDiscussionOutcomes = sdvm.Outcomes }; if (sdvm.Colleagues != null && sdvm.Colleagues.Length > 0) { newDiscussion.SafetyDiscussionColleagues = sdvm.Colleagues.Join("|"); } newDiscussion.Insert(); return(RedirectToAction(nameof(Index))); } catch { return(View(sdvm)); } }