/// <summary> /// Private method that converts the form data to XML /// </summary> /// <param name="vm"></param> /// <returns>An <see cref="XElement"/></returns> private XElement ViewModelToXML(PAFFormViewModel vm) { XElement root = new XElement("SmartPAF"); PropertyInfo[] properties = typeof(PAFFormViewModel).GetProperties(); foreach (PropertyInfo property in properties) { if (property.Name != "Components" && property.Name != "job" && property.Name != "JobList" && property.Name != "Users" && property.Name != "DocumentId" && property.Name != "PAFTypeChoices") { root.Add(new XElement(property.Name, property.GetValue(vm), new XAttribute("id", property.Name))); } } SmartUser author = _repository.Users.FirstOrDefault(x => x.UserId == vm.AuthorUserId); SmartJob smartJob = _repository.Jobs.FirstOrDefault(x => x.JobId == vm.JobId); JobDescription job = new JobDescription(smartJob); root.Add(new XElement("AuthorName", author?.DisplayName ?? "Unknown", new XAttribute("AuthorName", author?.DisplayName ?? "Unknown"))); XElement xJob = new XElement("JobDescription"); xJob.Add(new XElement("ClassTitle", job.ClassTitle, new XAttribute("id", "ClassTitle"))); xJob.Add(new XElement("WorkingTitle", job.WorkingTitle, new XAttribute("id", "WorkingTitle"))); xJob.Add(new XElement("Grade", job.Grade, new XAttribute("id", "Grade"))); xJob.Add(new XElement("WorkingHours", job.WorkingHours, new XAttribute("id", "WorkingHours"))); xJob.Add(new XElement("JobId", job.SmartJobId, new XAttribute("id", "JobId"))); root.Add(xJob); return(root); }
public ActionResult Create([Bind( "SelectedPAFType," + "FirstName," + "LastName," + "DepartmentIdNumber," + "PayrollIdNumber," + "DepartmentIdNumber," + "DepartmentDivision," + "DepartmentDivisionCode," + "WorkPlaceAddress," + "AuthorUserId," + "StartDate," + "EndDate," + "JobId," + "Assessment," + "Recommendation")] PAFFormViewModel form) { if (!ModelState.IsValid) { // next, re-populate the VM drop down lists form.HydrateLists(_repository.Jobs.Select(x => new JobDescriptionListItem(x)).ToList(), _repository.Components.ToList(), _repository.Users.Select(x => new UserListItem(x)).ToList()); // return the View with the validation messages ViewData["Title"] = "Create PAF: Error"; return(View(form)); } else { // validation success, create new generator and pass repo SmartPAFFactory factory = new SmartPAFFactory(_repository); // call generator method to pass form data factory.CreatePAF(form); // redirect to success view with PPA as querystring param return(RedirectToAction("SaveSuccess", new { id = factory.PAF.DocumentId })); } }
/// <summary> /// Shows the view to create a new SmartPAF. /// </summary> /// <returns>An <see cref="ActionResult"/></returns> public ActionResult Create() { // create a new, empty ViewModel int currentUserId = Convert.ToInt32(((ClaimsIdentity)User.Identity).FindFirst("UserId").Value); PAFFormViewModel vm = new PAFFormViewModel(currentUserId); vm.HydrateLists(_repository.Jobs.Select(x => new JobDescriptionListItem(x)).ToList(), _repository.Components.ToList(), _repository.Users.Select(x => new UserListItem(x)).ToList()); ViewData["Title"] = "Create PAF"; return(View(vm)); }
public ActionResult Edit(int id) { // pull the PAF from the repo SmartDocument paf = _repository.PerformanceAssessmentForms.FirstOrDefault(x => x.DocumentId == id); SmartPAFFactory factory = new SmartPAFFactory(_repository, paf); // pass the PPA to the factory method takes a SmartPPA parameter PAFFormViewModel vm = factory.GetViewModelFromXML(); // populate the VM <select> lists vm.HydrateLists(_repository.Jobs.Select(x => new JobDescriptionListItem(x)).ToList(), _repository.Components.ToList(), _repository.Users.Select(x => new UserListItem(x)).ToList()); // return the view ViewData["Title"] = "Edit PAF"; return(View(vm)); }
/// <summary> /// Creates a new <see cref="SmartDocument"/> from the user-provided form data. /// </summary> /// <param name="vm">A <see cref="PAFFormViewModel"/></param> public void CreatePAF(PAFFormViewModel vm) { SmartDocument newDoc = new SmartDocument { AuthorUserId = vm.AuthorUserId, Type = SmartDocument.SmartDocumentType.PAF, Created = DateTime.Now, Edited = DateTime.Now, FileName = $"{vm.LastName}, {vm.FirstName} {vm.SelectedPAFType} {DateTime.Now:MM-dd-yy}.docx", Template = _repository.Templates.FirstOrDefault(x => x.Name == ACTIVE_TEMPLATE_NAME), FormDataXml = ViewModelToXML(vm) }; PAF = _repository.SaveSmartDoc(newDoc); }
public ActionResult Edit(int id, [Bind( "DocumentId," + "SelectedPAFType," + "FirstName," + "LastName," + "DepartmentIdNumber," + "PayrollIdNumber," + "DepartmentIdNumber," + "DepartmentDivision," + "DepartmentDivisionCode," + "WorkPlaceAddress," + "AuthorUserId," + "StartDate," + "EndDate," + "JobId," + "Assessment," + "Recommendation")] PAFFormViewModel form) { // if the querystring parameter id doesn't match the POSTed PAFId, return 404 if (id != form.DocumentId) { return(NotFound()); } if (!ModelState.IsValid) { // next, re-populate the VM drop down lists form.HydrateLists(_repository.Jobs.Select(x => new JobDescriptionListItem(x)).ToList(), _repository.Components.ToList(), _repository.Users.Select(x => new UserListItem(x)).ToList()); ViewData["Title"] = "Edit PAF: Error"; return(View(form)); } else { if (form.JobId != 0) { JobDescription job = new JobDescription(_repository.Jobs.FirstOrDefault(x => x.JobId == form.JobId)); } else { return(NotFound()); } // validation success, create a new PAFGenerator and pass the repo as a parameter SmartPAFFactory factory = new SmartPAFFactory(_repository); // populate the form info into the generator factory.UpdatePAF(form); // redirect to the SaveSuccess view, passing the newly created PPA as a querystring param return(RedirectToAction("SaveSuccess", new { id = factory.PAF.DocumentId })); } }
/// <summary> /// Updates an existing <see cref="SmartDocument"/> PAF from user-provided form data. /// </summary> /// <param name="vm">A <see cref="PAFFormViewModel"/></param> public void UpdatePAF(PAFFormViewModel vm) { SmartDocument toEdit = _repository.PerformanceAssessmentForms.FirstOrDefault(x => x.DocumentId == vm.DocumentId); if (toEdit != null) { toEdit.FormDataXml = ViewModelToXML(vm); toEdit.AuthorUserId = vm.AuthorUserId; toEdit.Edited = DateTime.Now; toEdit.FileName = $"{vm.LastName}, {vm.FirstName} {vm.SelectedPAFType} {DateTime.Now:MM-dd-yy}.docx"; toEdit.FormDataXml = ViewModelToXML(vm); toEdit.Template = _repository.Templates.FirstOrDefault(x => x.Name == ACTIVE_TEMPLATE_NAME); _repository.SaveSmartDoc(toEdit); } PAF = toEdit; }
/// <summary> /// Converts an existing <see cref="SmartDocument"/> /// </summary> /// <returns></returns> public PAFFormViewModel GetViewModelFromXML() { XElement root = PAF.FormDataXml; PAFFormViewModel vm = new PAFFormViewModel() { DocumentId = PAF.DocumentId, SelectedPAFType = root.Element("SelectedPAFType").Value, FirstName = root.Element("FirstName").Value, LastName = root.Element("LastName").Value, DepartmentIdNumber = root.Element("DepartmentIdNumber").Value, PayrollIdNumber = root.Element("PayrollIdNumber").Value, DepartmentDivision = root.Element("DepartmentDivision").Value, DepartmentDivisionCode = root.Element("DepartmentDivisionCode").Value, StartDate = DateTime.Parse(root.Element("StartDate").Value), EndDate = DateTime.Parse(root.Element("EndDate").Value), JobId = Convert.ToInt32(root.Element("JobId").Value), AuthorUserId = Convert.ToInt32(root.Element("AuthorUserId").Value), Assessment = root.Element("Assessment").Value, Recommendation = root.Element("Recommendation").Value, }; vm.HydrateLists(_repository.Jobs.Select(x => new JobDescriptionListItem(x)).ToList(), _repository.Components.ToList(), _repository.Users.Select(x => new UserListItem(x)).ToList()); return(vm); }