public JsonResult CreateOneToOne(OneToOneViewModel model) { //remove Id from modelstate if tehre. ModelState.Remove("Id"); ModelState.Remove("CreatedById"); ModelState.Remove("CreatedBy"); if (ModelState.IsValid) { using (var orgSession = OrgStore.OpenSession()) { var target = orgSession.Load<User>(model.InviteeId); var invitee = Invitee.FromUser(target); var invitees = new List<Invitee> {invitee}; var meeting = new Meeting { CreatedBy = OrgUser.ToSimpleUser(), AssignedUsers = new List<SimpleUser> { OrgUser.ToSimpleUser() }, DueDate = model.EventDate, ConsolidatedCompletionDate = model.EventDate, DurationMinutes = model.DurationMinutes, Title = model.Title, Description = model.Description, Invitees = invitees, Id = IlluminateDatabase.GenerateId<Meeting>() }; orgSession.Store(meeting); meeting.UpdateAssignees(orgSession); var notification = meeting.ToNotification(); orgSession.Store(notification); orgSession.SaveChanges(); return JsonSuccess(meeting.ToTimelineItems(), "One To One created"); } } return JsonError("Invalid data"); }
/// <summary> /// perform an action on the leave process /// </summary> /// <param name="documentStore">The RavenDB document store to be used</param> /// <param name="triggerprocess">The initiator process - e.g. leave or sickness</param> /// <param name="action">The action to be performed</param> public override void PerformAction(IDocumentStore documentStore, WorkflowInitiator triggerprocess, WorkflowHandlerAction action) { //we know its a Leave so cast it to the correct type var leave = (Leave) triggerprocess; switch (action.Action) //depending on the type of action do different things { case WorkflowHandlerAction.Actions.AddTask: //add a task //what am I creating? var actionmodel = action.DeserialiseObject<CreateProcessTaskActionModel>(); //need to convert the actionmodel into an event. var newtask = new Task { Id = IlluminateDatabase.GenerateId<Task>(), Type = new TaskType {Name = actionmodel.TaskName}, AssignedRoles = (from role in actionmodel.AssignedRoles select Role.GetRole(role)).ToList(), DueDate = actionmodel.DueDate, ConsolidatedCompletionDate = actionmodel.DueDate, CreatedBy = leave.UserCreatedProcess, Title = actionmodel.Title, Description = actionmodel.Description, ParentItemId = leave.Id }; using (var session = documentStore.OpenSession()) { session.Store(newtask); newtask.UpdateAssignees(session, leave.Subject.UserId); session.SaveChanges(); } break; case WorkflowHandlerAction.Actions.AddMeeting: //add a meeting var meetingactionmodel = action.DeserialiseObject<CreateProcessMeetingActionModel>(); //need to convert the actionmodel into an event. but problem is looking up user? var newMeeting = new Meeting { Id = IlluminateDatabase.GenerateId<Meeting>(), Type = new TaskType {Name = meetingactionmodel.TaskName}, AssignedRoles = (from role in meetingactionmodel.AssignedRoles select Role.GetRole(role)).ToList(), Invitees = new List<Invitee> {Invitee.FromSimpleUser(leave.Subject)}, DueDate = meetingactionmodel.DueDate, ConsolidatedCompletionDate = meetingactionmodel.DueDate, CreatedBy = leave.UserCreatedProcess, Title = meetingactionmodel.Title, Description = meetingactionmodel.Description, ParentItemId = leave.Id, DurationMinutes = 30 }; //now save the new mmeeting using (var session = documentStore.OpenSession()) { session.Store(newMeeting); newMeeting.UpdateAssignees(session, leave.Subject.UserId); session.SaveChanges(); } break; case WorkflowHandlerAction.Actions.DeleteTask: //delete scheduled a task using (var session = documentStore.OpenSession()) { var task = session.Load<Task>(action.Value); session.Delete(task); session.SaveChanges(); } break; case WorkflowHandlerAction.Actions.DeleteMeeting: //delete a scheduled meeting using (var session = documentStore.OpenSession()) { var meeting = session.Load<Meeting>(action.Value); session.Delete(meeting); session.SaveChanges(); } break; } }
/// <summary> /// Perform an action on the default sickness workflow /// </summary> /// <param name="documentStore">The document store to use</param> /// <param name="triggerprocess">The workflow initiator that triggered this</param> /// <param name="action">The action to be performed</param> public override void PerformAction(IDocumentStore documentStore, WorkflowInitiator triggerprocess, WorkflowHandlerAction action) { var sickness = (Sickness) triggerprocess; //we know its a sickness so cast to it switch (action.Action) //depending on the action type act accordingly { case WorkflowHandlerAction.Actions.AddTask: //what am I creating? - deserialise the contents of the action var actionModel = action.DeserialiseObject<CreateProcessTaskActionModel>(); //need to convert the actionmodel into an event - in this case a task var newtask = new Task { Id = IlluminateDatabase.GenerateId<Task>(), Type = new TaskType {Name = actionModel.TaskName}, AssignedRoles = (from role in actionModel.AssignedRoles select Role.GetRole(role)).ToList(), DueDate = actionModel.DueDate, ConsolidatedCompletionDate = actionModel.DueDate>=DateTime.Now ? actionModel.DueDate : DateTime.Now, CreatedBy = sickness.UserCreatedProcess, Title =string.Format( actionModel.Title,sickness.Subject.FullName), Description = string.Format( actionModel.Description,sickness.Subject.FullName), ParentItemId = sickness.Id }; //store the task in the db using (var session = documentStore.OpenSession()) { session.Store(newtask); newtask.UpdateAssignees(session, sickness.Subject.UserId); session.SaveChanges(); } break; case WorkflowHandlerAction.Actions.AddMeeting: var meetingactionmodel = action.DeserialiseObject<CreateProcessMeetingActionModel>(); //need to convert the actionmodel into an event. but problem is looking up user? var newmeeting = new Meeting { Id = IlluminateDatabase.GenerateId<Meeting>(), Type = new TaskType { Name = meetingactionmodel.TaskName }, AssignedRoles = (from role in meetingactionmodel.AssignedRoles select Role.GetRole(role)).ToList(), Invitees = new List<Invitee> { Invitee.FromSimpleUser(sickness.Subject)}, DueDate = meetingactionmodel.DueDate, ConsolidatedCompletionDate = meetingactionmodel.DueDate >= DateTime.Now ? meetingactionmodel.DueDate : DateTime.Now, CreatedBy = sickness.UserCreatedProcess, Title = meetingactionmodel.Title, Description = meetingactionmodel.Description, ParentItemId = sickness.Id }; //save the meeting in the DB using (var session = documentStore.OpenSession()) { session.Store(newmeeting); newmeeting.UpdateAssignees(session, sickness.Subject.UserId); session.SaveChanges(); } break; case WorkflowHandlerAction.Actions.DeleteTask: //delete the task from the DB using (var session = documentStore.OpenSession()) { var task = session.Load<Task>(action.Value); session.Delete(task); session.SaveChanges(); } break; case WorkflowHandlerAction.Actions.DeleteMeeting: //delete the meeting from the DB using (var session = documentStore.OpenSession()) { var meeting = session.Load<Meeting>(action.Value); session.Delete(meeting); session.SaveChanges(); } break; case WorkflowHandlerAction.Actions.NotifyActorsOfCreation: using (var session = documentStore.OpenSession()) { var managerCreatedSickness=sickness.UserCreatedProcess.UserId==sickness.CurrentProcessOwner.UserId; //if the manager created the sickness notify the employee Notification notification; if (managerCreatedSickness) { notification = new Notification { NotificationRecipients = new[] { new NotificationRecipient { NotificationDeliveryTypes = NotificationDeliveryTypes .Email | NotificationDeliveryTypes .Toast, Users = new[] { sickness .Subject } } }, Body = string.Format( "You have been registered as off sick for {0} by {1}", sickness.SicknessReason.Name, sickness.CurrentProcessOwner.FullName) }; } else { notification = new Notification { NotificationRecipients = new[] { new NotificationRecipient { NotificationDeliveryTypes = NotificationDeliveryTypes .Email | NotificationDeliveryTypes .Toast| NotificationDeliveryTypes.Sms, Users = new[] { sickness.CurrentProcessOwner } } }, Body = string.Format( "{0} has registered themselves as off sick for {1}.", sickness.Subject.FullName, sickness.SicknessReason.Name) }; } notification.Title = string.Format("Sickness for {0}", sickness.Subject.FullName); notification.About = sickness.Subject; notification.Id = IlluminateDatabase.GenerateId<Notification>(); notification.SendDate = DateTime.Now; session.Store(notification); session.SaveChanges(); } break; } }