/// <summary> /// Create a new sickness absence /// </summary> /// <param name="data"></param> /// <returns></returns> public JsonResult Create(SicknessAbsenceViewModel data) { if (ModelState.IsValid) { using (var orgSession = OrgStore.OpenSession()) { var classification = orgSession.Query<SicknessClassification>().FirstOrDefault(); var subject = orgSession.Load<User>(data.UserId); var reason = classification.GetReason(data.SicknessReasonId); var sickness = new Sickness { Subject = subject.ToSimpleUser(), SicknessReason = SicknessReasonSimple.Create(reason), StartOfProcess = data.StartOfProcess, EndOfProcess = data.EndOfProcess, ConsolidatedCompletionDate = data.EndOfProcess ?? DateTime.Now, Title = data.Title, Summary = data.Summary, UserCreatedProcess = OrgUser.ToSimpleUser(), CurrentProcessOwner = OrgUser.ToSimpleUser(), //TODO: What if self created? Should be manager. Id = IlluminateDatabase.GenerateId<Sickness>() }; orgSession.Store(sickness); //update the user state. if (sickness.StartOfProcess.Date <= DateTime.Today && sickness.ConsolidatedCompletionDate.Date >= DateTime.Today) { subject.CurrentState = "onsick"; } //get the workflow config var config = SicknessWorkflowConfiguration.Generate(orgSession); //definition should already exist //create a new default sickness workflow and assign it to the sickness var workflow = new DefaultSicknessWorkflow(config); sickness.Workflow = workflow; //handle the created event of the sickness sickness.HandleEvent(OrgStore,"Sickness", "Create", sickness); orgSession.SaveChanges(); return JsonSuccess(sickness.ToTimelineItems(), "Sickness item created"); } } return JsonError("Invalid data: " + ViewData.ModelState.Values.Any(x => x.Errors.Count >= 1)); }
/// <summary> /// Update a sickness /// </summary> /// <param name="data"></param> /// <returns></returns> public JsonResult Update(SicknessAbsenceViewModel data) { //find task/process from the tasks. using (var session = OrgStore.OpenSession()) { var sickness = session.Load<Sickness>(data.Id); var classification = session.Query<SicknessClassification>().FirstOrDefault(); var reason = classification.GetReason(data.SicknessReasonId); var subject = session.Load<User>(sickness.Subject.UserId); var originaldata = new { start = sickness.StartOfProcess, end = sickness.EndOfProcess, consolidatedend = sickness.ConsolidatedCompletionDate }; //set values if (data.StartOfProcess != DateTime.MinValue) sickness.StartOfProcess = data.StartOfProcess; sickness.EndOfProcess = data.EndOfProcess; sickness.ConsolidatedCompletionDate = data.EndOfProcess ?? DateTime.Now; if ( data.EndOfProcess != null) { //handle the sickness complete event for this sickness sickness.HandleEvent(OrgStore,"Sickness", "Complete", sickness); } if (sickness.EndOfProcess != null && data.EndOfProcess == null) { //handle the sickness reopen event for this sickness sickness.HandleEvent(OrgStore, "Sickness", "Reopen", sickness); } if(reason!=null) sickness.SicknessReason = SicknessReasonSimple.Create(reason); if (!string.IsNullOrEmpty(data.Title)) sickness.Title = data.Title; if (!string.IsNullOrEmpty(data.Summary)) sickness.Summary = data.Summary; //update the user state. if (sickness.StartOfProcess.Date <= DateTime.Today && sickness.ConsolidatedCompletionDate.Date >= DateTime.Today) { subject.CurrentState = "onsick"; } if (data.EndOfProcess != null) { subject.CurrentState = string.Empty; } session.SaveChanges(); //TODO: what if new things created as part of the completion? return JsonSuccess(sickness.ToTimelineItems(), "Sickness Updated"); } }