public void AddTaskComment(TaskComment taskComment) { try { string clientName = DataBase.DBService.ExecuteCommandScalar("SELECT COUNT(*) FROM TASKCOMMENT"); DataBase.DBService.BeginTransaction(); DataBase.DBService.ExecuteCommandString(string.Format(INSERT_COMMENTS, taskComment.TaskId, taskComment.CommantedBy, taskComment.Comment, taskComment.IsEdited), true); // Activity.ActivitiesService.Add(ActivityType.CreateTaskProject, EntryStatus.Success, // Source.Server, project.UpdatedByUserName, project.Name, project.MachineName); DataBase.DBService.CommitTransaction(); } catch (Exception ex) { DataBase.DBService.RollbackTransaction(); StackTrace st = new StackTrace(); StackFrame sf = st.GetFrame(0); MethodBase currentMethodName = sf.GetMethod(); LogDebug(currentMethodName.Name, ex); throw ex; } }
public Task CreateAsync( TaskComment comment, Dictionary <string, string> headers = default, CancellationToken ct = default) { return(_factory.PostAsync(_host + "/Tasks/Comments/v1/Create", null, comment, headers, ct)); }
public TaskComment GetTaskComment(int id) { try { Logger.LogInfo("Get: Task comment process start"); TaskComment taskComment = new TaskComment(); DataTable dtAppConfig = DataBase.DBService.ExecuteCommand(string.Format(SELECT_COMMENT_BY_ID, id)); foreach (DataRow dr in dtAppConfig.Rows) { taskComment = convertToTaskComment(dr); } Logger.LogInfo("Get: Task comment process completed."); return(taskComment); } catch (Exception ex) { StackTrace st = new StackTrace(); StackFrame sf = st.GetFrame(0); MethodBase currentMethodName = sf.GetMethod(); LogDebug(currentMethodName.Name, ex); return(null); } }
protected void btnSave_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtComment.Text)) { try { Guid taskid = Guid.Parse(hdnTask_id.Value); SocioBoard.Domain.Team team = (SocioBoard.Domain.Team)Session["GroupName"]; string curdate = DateTime.Now.ToString("yyyy-MM-dd H:mm:ss ").ToString(); TaskCommentRepository objTaskCmtRepo = new TaskCommentRepository(); TaskComment objTaskCmt = new TaskComment(); objTaskCmt.Comment = txtComment.Text; objTaskCmt.CommentDate = DateTime.Now; objTaskCmt.Id = Guid.NewGuid(); objTaskCmt.TaskId = taskid; objTaskCmt.UserId = custid; objTaskCmtRepo.addTaskComment(objTaskCmt); hdnTask_id.Value = ""; TaskRepository taskRepo = new TaskRepository(); ArrayList alst = taskRepo.getAllIncompleteTasksOfUser(custid, team.GroupId); Session["IncomingTasks"] = alst.Count; txtComment.Text = ""; } catch (Exception ex) { logger.Error(ex.Message); } } }
public static void WriteTaskComment(User user, int taskid, string text) { TaskComment comment = new TaskComment(); comment.Content = text; comment.TaskId = taskid; comment.Task = ctx.Tasks.First(p => p.Id == taskid); comment.User = user; comment.UserId = user.Id; if (comment.Task.User.Id != user.Id) { Notification notification = new Notification(); notification.Date = DateTime.Now; notification.Type = NotificationType.TaskComment; notification.User = comment.Task.User; notification.UserId = comment.Task.User.Id; notification.Link = "/Home/Tasks"; notification.Message = "User " + user.Username + " commented your task"; ctx.Notifications.Add(notification); } ctx.TaskComments.Add(comment); ctx.SaveChanges(); }
static void Main(string[] args) { User user = new User("vasea"); var task = new Task(_eventBroker); var taskComment = new TaskComment(_eventBroker); _eventBroker.Command(new CreateTaskCommand(task, "Test title", "this is description...", user.Id)); _eventBroker.Command(new CreateTaskCommentCommand(taskComment, "First")); for (int i = 0; i < 500; i++) { _eventBroker.Command(new ChangeCommentContentCommand(taskComment, $"Description {i}")); _eventBroker.Command(new ChangeTaskDescriptionCommand(task, $"Title {i}")); } string json = JsonConvert.SerializeObject(_eventBroker.AllEvents); File.WriteAllText(@"D:\Programming\master\ADA\ADA-LABS\ADA-LAB3\EventSource\events.json", json); using (var file = File.Create(@"D:\Programming\master\ADA\ADA-LABS\ADA-LAB3\EventSource\events.proto")) { Serializer.Serialize(file, _eventBroker.AllEvents); } Console.ReadKey(); }
public async Task <string> SendComment(AsyncClient Client, TaskComment comm) { try { Message m = new Message { Resource = "comment", Method = "create", Fields = new Fields { Comments = new List <TaskComment> { comm } } }; return(await Client.SendAsync(JsonConvert.SerializeObject(m))); } catch (Exception e) { Console.WriteLine(e); throw; } }
public async Task <IActionResult> Edit(int id, [Bind("TaskCommentId,TaskCommentDescription,TaskCommentTypeId,ReminderDate,TaskEntryId")] TaskComment taskComment) { if (id != taskComment.TaskCommentId) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(taskComment); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TaskCommentExists(taskComment.TaskCommentId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["TaskCommentTypeId"] = new SelectList(_context.TaskCommentTypes, "TaskCommentTypeId", "TaskCommentTypeDescription", taskComment.TaskCommentTypeId); ViewData["TaskEntryId"] = new SelectList(_context.TaskEntries, "TaskEntryId", "TaskEntryDescription", taskComment.TaskEntryId); return(View(taskComment)); }
public TaskCommentCreate(TaskCommentCreateRequest request) { if (request != null) { if (string.IsNullOrWhiteSpace(request.Content)) { Response = new TaskCommentCreateResponse { Type = TaskCommentCreateResponseType.ContentEmpty }; return; } using (var dbContext = new ApplicationDbContext()) { var taskComment = new TaskComment(); taskComment.Set(request); dbContext.TaskComents.Add(taskComment); dbContext.SaveChanges(); Response = new TaskCommentCreateResponse { Type = TaskCommentCreateResponseType.Success }; } } }
public async Task <ActionResult> Card(int?id) { if (!id.HasValue) { return(HttpNotFound()); } var task = await TaskClaim.Get(id.Value); ViewBag.StateHistory = await task.GetStateHistoryAsync(); if (CurUser.Is(AdGroup.TaskTrackerManager, AdGroup.TaskTrackerProg)) { ViewBag.Checkpoints = await TaskCheckpoint.GetListAsync(id.Value); ViewBag.TaskFiles = await TaskFile.GetListAsync(id.Value); ViewBag.TaskComments = await TaskComment.GetListAsync(id.Value); return(View("CardPerf", task)); } else { return(View("CardUser", task)); } }
public async Task <IActionResult> Edit(int id, [Bind("Id,Text_comment,Type_CommentsId,TaskDistributionsId")] TaskComment taskComment) { if (id != taskComment.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(taskComment); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TaskCommentExists(taskComment.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["TaskDistributionsId"] = new SelectList(_context.TaskDistributions, "Id", "View", taskComment.TaskDistributionsId); ViewData["Type_CommentsId"] = new SelectList(_context.TypeComments, "Id", "Name_comment", taskComment.Type_CommentsId); return(View(taskComment)); }
public bool UpdateTaskComment(TaskComment objTaskComment) { try { SqlDatabase database = MSSQLDataBase.Instance.GetDefaultDatabase(); { DbCommand command = database.GetStoredProcCommand("UpdateTaskComment"); command.CommandType = CommandType.StoredProcedure; database.AddInParameter(command, "@Id", DbType.String, objTaskComment.Id); database.AddInParameter(command, "@Comment", DbType.String, objTaskComment.Comment); database.AddInParameter(command, "@TaskId", DbType.Int64, objTaskComment.TaskId); if (objTaskComment.ParentCommentId.HasValue) { database.AddInParameter(command, "@ParentCommentId", DbType.Int64, objTaskComment.ParentCommentId.Value); } else { database.AddInParameter(command, "@ParentCommentId", DbType.Int64, DBNull.Value); } database.AddInParameter(command, "@UserId", DbType.Int32, objTaskComment.UserId); return(database.ExecuteNonQuery(command) > 0); } } catch (Exception ex) { return(false); } }
static void Main(string[] args) { User user = new User("Vadim"); var task = new Task(_eventBroker); var taskComment = new TaskComment(_eventBroker); _eventBroker.Command(new CreateTaskCommand(task, "ADA", "L3", user.Id)); _eventBroker.Command(new CreateTaskCommentCommand(taskComment, "First")); for (int i = 0; i < 1000; i++) { _eventBroker.Command(new ChangeCommentContentCommand(taskComment, $"Descript {i}")); _eventBroker.Command(new ChangeTaskDescriptionCommand(task, $"Title {i}")); } string json = JsonConvert.SerializeObject(_eventBroker.AllEvents); File.WriteAllText(@"C:\Users\Vadim\source\Lab3\events.json", json); using (var file = File.Create(@"C:\Users\Vadim\source\Lab3\events.protoBuf")) { Serializer.Serialize(file, _eventBroker.AllEvents); } Console.ReadKey(); }
public JsonResult AddComment(long userId, long authorId, string key, string comment, int lastShowedComment) { if (IdValidator.IsInvalid(authorId) || string.IsNullOrWhiteSpace(comment) || WebSettingsConfig.Instance.IsSectionForbidden(SectionId.UserTasks)) { return(JsonResultHelper.Error()); } if (comment.Length > UserTasksSettings.COMMENT_MAX_LENGTH) { return(JsonResultHelper.Error()); } RepositoryFactory repositoryFactory = WebSettingsConfig.Instance.GetRepositoryFactory(); BanRepository banRepository = repositoryFactory.GetBanRepository(); var banHelper = new BanHelper(Request); bool isBanned = banHelper.IsBanned(SectionId.UserTasks, userId, banRepository); if (isBanned) { return(JsonResultHelper.Error()); } banHelper.RegisterEvent(SectionId.UserTasks, "AddComment", userId, banRepository); UserTasksRepository userTasksRepository = repositoryFactory.CreateUserRepository(authorId); //TODO: получить пользователя и если у него указано имя, то заполнить Author comment = OurHtmlHelper.PrepareStringFromUser(comment); //TODO: дописывать (автор) к имени пользователя var taskComment = new TaskComment { Author = null, AuthorId = userId, CreationDate = DateTime.Now.Ticks, Text = comment }; bool isAddedComment = userTasksRepository.AddComment(key, taskComment); List <TaskComment> comments = userTasksRepository.GetComments(key, lastShowedComment); SendMail(string.Format("Пользователь {0} оставил комментарий к таску {1} автора {2}:\r\n{3}", userId, key, authorId, comment)); var htmlItems = new StringBuilder(); foreach (TaskComment newComment in comments) { string item = OurHtmlHelper.RenderRazorViewToString(ControllerContext, "PartialTaskComment", newComment); htmlItems.Insert(0, item); } return (JsonResultHelper.GetUnlimitedJsonResult( new { success = isAddedComment, newComments = htmlItems.ToString(), countNewComments = comments.Count })); }
public CreateTaskCommentCommand(TaskComment taskComment, string content) { Target = taskComment; Version = 1; Id = Guid.NewGuid().ToString(); CreatedAt = DateTime.Now; Content = content; }
/**/ /* * NAME: * AddTaskComment - add a comment to a task * SYNOPSIS: * AddTaskComment(TaskComment taskComment) * taskComment --> the taskComment object to be added to the database * DESCRIPTION: * Accesses the database context in order to add a new TaskComment entry * RETURNS * AUTHOR * Biplab Thapa Magar * DATE * 09/12/2020 * / * /**/ public void AddTaskComment(TaskComment taskComment) { if (taskComment == null) { throw new ArgumentNullException(nameof(taskComment)); } _context.Add(taskComment); }
public TaskCommentChangeEvent(TaskComment taskComment, string oldValue, string newValue) { Type = EventType.Change; Target = taskComment; OldComment = oldValue; NewComment = newValue; EntityName = Target.GetType().Name; }
public static TaskCommentAPI From(TaskComment item) { return(new TaskCommentAPI { ID = item.ID, Comment = item.Comment, TaskID = item.TaskID }); }
public async Task <ActionResult> Create(TaskComment comment, CancellationToken ct = default) { var task = await _tasksService.GetAsync(comment.TaskId, false, ct); return(await ActionIfAllowed( () => _taskCommentsService.CreateAsync(_userContext.UserId, comment, ct), Roles.Tasks, task.AccountId)); }
public object GetTaskComments(long intTaskId, long?intParentCommentId, int?intStartIndex, int?intPageSize) { DataSet dsTaskComments = TaskCommentBLL.Instance.GetTaskCommentsDataSet(intTaskId, intParentCommentId, intStartIndex, intPageSize); bool blSuccess = false; int intTotalRecords = 0, intRemainingRecords = 0; List <TaskComment> lstTaskComments = new List <TaskComment>(); if (dsTaskComments != null && dsTaskComments.Tables.Count == 2) { blSuccess = true; intTotalRecords = Convert.ToInt32(dsTaskComments.Tables[1].Rows[0]["TotalRecords"]); foreach (DataRow drTaskComment in dsTaskComments.Tables[0].Rows) { TaskComment objTaskComment = new TaskComment(); objTaskComment.Id = Convert.ToInt64(drTaskComment["Id"]); objTaskComment.Comment = Convert.ToString(drTaskComment["Comment"]); if (!string.IsNullOrEmpty(Convert.ToString(drTaskComment["ParentCommentId"]))) { objTaskComment.ParentCommentId = Convert.ToInt64(drTaskComment["ParentCommentId"]); } else { objTaskComment.ParentCommentId = 0; } objTaskComment.TaskId = Convert.ToInt64(drTaskComment["TaskId"]); objTaskComment.UserId = Convert.ToInt32(drTaskComment["UserId"]); objTaskComment.DateCreated = Convert.ToDateTime(drTaskComment["DateCreated"]); objTaskComment.TotalChildRecords = Convert.ToInt32(drTaskComment["TotalChildRecords"]); objTaskComment.UserInstallId = Convert.ToString(drTaskComment["UserInstallId"]); objTaskComment.UserName = Convert.ToString(drTaskComment["Username"]); objTaskComment.UserFirstName = Convert.ToString(drTaskComment["FirstName"]); objTaskComment.UserLastName = Convert.ToString(drTaskComment["LastName"]); objTaskComment.UserEmail = Convert.ToString(drTaskComment["Email"]); lstTaskComments.Add(objTaskComment); } if (intPageSize.HasValue) { intRemainingRecords = intTotalRecords - intPageSize.Value; } } return(new { Success = blSuccess, TotalRecords = intTotalRecords, RemainingRecords = intRemainingRecords, TaskComments = lstTaskComments }); }
public async Task <JsonResult> AddTaskComment(int taskId, string commentText) { var chk = new TaskComment() { TaskClaimId = taskId, Text = commentText }; int id = await chk.AddAsync(CurUser.Sid); return(Json(new { id = id })); }
public static ChatMessage Convert(TaskComment taskComment, bool send) { return new ChatMessage { DateTime = taskComment?.CreatedAt ?? DateTime.Now, Send = send, SendBy = taskComment?.CreatedBy?.Name ?? string.Empty, Message = taskComment?.Text ?? string.Empty, Empty = taskComment == null }; }
public TaskCommentBuilder( IDefaultRequestHeadersService defaultRequestHeadersService, ITaskCommentsClient taskCommentsClient) { _taskCommentsClient = taskCommentsClient; _defaultRequestHeadersService = defaultRequestHeadersService; _comment = new TaskComment { Id = Guid.NewGuid(), Value = "Test".WithGuid() }; }
private TaskComment convertToTaskComment(DataRow dr) { TaskComment taskComment = new TaskComment(); taskComment.Id = dr.Field <int>("ID"); taskComment.TaskId = dr.Field <int>("TaskId"); taskComment.CommantedBy = dr.Field <int>("CommentedBy"); taskComment.CommentedByName = dr.Field <string>("CommentedByName"); taskComment.Comment = dr.Field <string>("Comment"); taskComment.CommentedOn = dr.Field <DateTime>("CommentedOn"); taskComment.IsEdited = dr.Field <bool>("IsEdited"); return(taskComment); }
public async Task <IActionResult> Create([Bind("Id,Text_comment,Type_CommentsId,TaskDistributionsId")] TaskComment taskComment) { if (ModelState.IsValid) { _context.Add(taskComment); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } ViewData["TaskDistributionsId"] = new SelectList(_context.TaskDistributions, "Id", "View", taskComment.TaskDistributionsId); ViewData["Type_CommentsId"] = new SelectList(_context.TypeComments, "Id", "Name_comment", taskComment.Type_CommentsId); return(View(taskComment)); }
/// <addTaskComment> /// Add Task Comment /// </summary> /// <param name="taskcomment">Set Values in a taskcomment Class Property and Pass the Object of taskcomment Class.(Domein.taskcomment)</param> public void addTaskComment(TaskComment taskcomment) { //Creates a database connection and opens up a session using (NHibernate.ISession session = SessionFactory.GetNewSession()) { //After Session creation, start Transaction. using (NHibernate.ITransaction transaction = session.BeginTransaction()) { //Proceed action, to Save data. session.Save(taskcomment); transaction.Commit(); } //End Transaction } //End Session }
public int CreateComment(TaskCommentModel comment, int userId) { Task task = entities.Tasks.First(t => t.TaskId == comment.TaskId); TaskComment newComment = entities.TaskComments.Create(); newComment.CreatedUserId = userId; newComment.Comment = comment.CommentText; task.TaskComments.Add(newComment); SaveChanges(); return(newComment.CommentId); }
public List <TaskCommentModel> GetNewTaskComments(int taskId, int?taskCommentId) { Task task = ctx.Tasks.First(p => p.Id == taskId); if (taskCommentId == null) { if (task.TaskComments.Any()) { return(task.TaskComments.Select(c => new TaskCommentModel() { Id = c.Id, CreationTime = c.CreationTime, Content = c.Content, TaskId = c.TaskId, Creator = new UserShortModel() { Id = c.Creator.Id, Username = c.Creator.Username, Avatar = c.Creator.Avatar } }).ToList()); } else { return(new List <TaskCommentModel>()); } } else { TaskComment comment = task.TaskComments.First(c => c.Id == taskCommentId); List <TaskComment> comments = task.TaskComments.Where(p => comment.Id < p.Id).ToList(); if (comments.Any()) { return(comments.Select(c => new TaskCommentModel() { Id = c.Id, CreationTime = c.CreationTime, Content = c.Content, TaskId = c.TaskId, Creator = UserShortModel.From(c.Creator.Id, c.Creator.Username, c.Creator.Avatar) }).ToList()); } else { return(new List <TaskCommentModel>()); } } }
public async Task CreateAsync(Guid userId, TaskComment comment, CancellationToken ct) { var newComment = new TaskComment { Id = Guid.NewGuid(), TaskId = comment.TaskId, CommentatorUserId = userId, Value = comment.Value, CreateDateTime = DateTime.UtcNow }; await _storage.AddAsync(newComment, ct); await _storage.SaveChangesAsync(ct); }
private void AddComment() { var comment = new TaskComment { Day = DateTime.Now, Text = this.AddCommentText, Who = this.eventAgg.GetEvent <GetAuthUserEvent>().Get().Return(), }; eventAgg.GetEvent <AddTaskCommentEvent>().Publish(comment, this.TaskItemWithRecord.Id); eventAgg.GetEvent <NavigateInProjectViewEvent>().Publish(ViewNames.PROJECT_IN_TASKITEM , new NavigateParams { { "TaskItemId", this.TaskItemWithRecord.Id } }); }
public Result Update(TaskComment taskComment) { var result = new Result(); try { TaskCommentService taskCommentService = new TaskCommentService(); taskCommentService.UpdateTaskComment(taskComment); result.IsSuccess = true; } catch (Exception exception) { result.IsSuccess = false; result.ExceptionInfo = exception; } return(result); }
private async void ttComents_OnSend(object sender, SendMessageEventArgs e) { var mt = sender as WpTextThread; if (mt == null) return; var mtc = new TaskComment { UserId = WPSuite.ConnectedUserId, TaskId = _taskId, Text = e.Text }; try { Logger.Log($"Send commnet to dispatcher for task {_taskId}"); var mres = await WebCallFactory.PostCommentOnTask(mtc); if (mres.Error) throw mres.Exception; Logger.Log("Comment send with success!"); mt.Messages.Add(Convertors.Convert(mres.TaskComment, true)); } catch (Exception mex) { UIHelper.ShowError(mex); Logger.Log(mex); } }
public DataApiModule(IEventAggregator eventAgg) : base("/api/") { this.RequiresAuthentication(); Get["/users/"] = _ => { return Response.AsJson( eventAgg.GetEvent<GetUserEvent>().Get(p => true) .Select(u => this.AddIconFilePath(this.Request.Url, u)) .ToArray()); }; Get["/projects/"] = _ => { return Response.AsJson(eventAgg.GetEvent<GetProjectEvent>().Get(p => true).ToArray()); }; Get["/project/{id}/report"] = prms => { var id = (int)prms.id; var left = DateTime.MinValue; var right = DateTime.MaxValue; var current = DateTime.Now.AddDays(1); current = current.Date.AddTicks(-1); // 現在日付+1から1ミリ秒引いて23:59:59を生成する var tryGetRangeDate = Fn.New((DateTime d, string s) => { if (string.IsNullOrWhiteSpace(s)) { return d; } var a = DateTime.MinValue; if (DateTime.TryParse(s, out a) == false) return d; return a; }); left = tryGetRangeDate(left, (string)this.Request.Query["startDay"]); right = tryGetRangeDate(right, (string)this.Request.Query["endDay"]); //if (right != DateTime.MaxValue) //{ // current = right; //} var query = from project in eventAgg.GetEvent<GetProjectEvent>().Get(x => x.Id == id).FirstOrNothing() from workdayContext in eventAgg.GetEvent<GetWorkdayContextEvent>().Get(id) let sprintToGraphModel = new SprintToGraphModel(workdayContext) select new { project, sprintToGraphModel }; var view = query.Select(q => { var project = q.project; var sprintToGraphModel = q.sprintToGraphModel; var trendChartModel = MakeTrendChartModel(this.AddIconFilePath(Request.Url,project), sprintToGraphModel); var piChartModel = MakePiChartModel(trendChartModel); var workDaysPV = project.Sprints.Select(sprintToGraphModel.Make) .Aggregate(new GraphModel(), (a, b) => new GraphModel { Pv = sprintToGraphModel.Merge(a.Pv, b.Pv), Ev = sprintToGraphModel.Merge(a.Ev, b.Ev), Ac = sprintToGraphModel.Merge(a.Ac, b.Ac), }).Pv; // workDaysに日付とValueの配列が含まれているので、Valueが0じゃない(非稼働日じゃない) // かつ現在日付以降の日数を計算する var workDays = workDaysPV.Where(x => x.Day > current).Where(x => x.Value != 0).Count(); var spi = piChartModel.Item1.Reverse().FirstOrDefault(x => x.Day <= current); var cpi = piChartModel.Item2.Reverse().FirstOrDefault(x => x.Day <= current); var totalValue = project.Sprints.SelectMany(s => s.Tasks).Where(t => t.Value.HasValue).Sum(t => t.Value.Value); var progressValue = project.Sprints.SelectMany(s => s.Tasks) .OfType<ITaskWithRecord>() .SelectMany(t => t.Records) .Where(x => x.Day <= current) .Sum(r => r.Value); var toDayPv = trendChartModel.Pv.Reverse().Where(x => x.Day <= current) .Select(p => p.Value) .FirstOrDefault(); var progress = progressValue - toDayPv; var remaining = totalValue - progressValue; var average = (totalValue - progressValue) / workDays; var days = trendChartModel.Pv.Where(x=>left<= x.Day && x.Day <= right).Select(x=> x.Day.ToString("yyyy/MM/dd")); var pvx = trendChartModel.Pv.Where(x=>left<= x.Day && x.Day <= right).Select(x => x.Value); var evx = trendChartModel.Ev.Where(x=>left<= x.Day && x.Day <= right).Select(x => x.Value); var acx = trendChartModel.Ac.Where(x => left <= x.Day && x.Day <= right).Select(x => x.Value); var spix = piChartModel.Item1.Where(x=>left<= x.Day && x.Day <= right).Select(x => x.Value); var cpix = piChartModel.Item2.Where(x => left <= x.Day && x.Day <= right).Select(x => x.Value); return Response.AsJson( new { workDays, spi = spi.Value, cpi = cpi.Value, progress, remaining, average = double.IsInfinity(average) ? remaining : average, days, pvx, evx, acx, spix, cpix, }) as object; }); return view.Return(() => HttpStatusCode.InternalServerError); }; Get["/project/{id}/works"] = prms => { var id = (int)prms.id; var query = from project in eventAgg.GetEvent<GetProjectEvent>().Get(x => x.Id == id).FirstOrNothing() let records = from sprint in project.Sprints from task in sprint.Tasks.OfType<ITaskWithRecord>() from record in task.Records select record let dx = project.Sprints.SelectMany(x=>new[] { x.Left, x.Right } ) .Where(x=>x.HasValue) select new { records, minDay = dx.Min(x=>x.Value), maxDay = dx.Max(x=>x.Value) }; var view = query.Select(q => { return Response.AsJson(q) as object; }); return view.Return(() => HttpStatusCode.InternalServerError); }; Get["/tasks/"] = _ => { return Response.AsJson( eventAgg.GetEvent<GetTaskWithRecordEvent>().Get(p => true).Select(t=> { (t as TaskWithRecord).Records = t.Records.Select(r => { (r as TaskRecord).Who = this.AddIconFilePath(this.Request.Url, r.Who); return r; }).ToArray(); return t; }).ToArray()); }; Post["/users/"] = _ => { //var model = this.Bind<User>(); var model = JsonConvert.DeserializeObject<User>(this.Request.Body.ToStreamString()); eventAgg.GetEvent<AddUserEvent>().Publish(model); return Response.AsJson(new { }, HttpStatusCode.OK); }; Post["/users/withIcon/"] = _ => { try { //var model = this.Bind<AddUserWithIcon>(); var model = JsonConvert.DeserializeObject<AddUserWithIcon>(this.Request.Body.ToStreamString()); var targetUser = eventAgg.GetEvent<GetUserEvent>().Get(p => p.Id == model.UserId).FirstOrDefault(); if (targetUser == null) { return HttpStatusCode.BadRequest; } eventAgg.GetEvent<AddUserIconEvent>().Publish(model); return Response.AsJson(new { }, HttpStatusCode.OK); } catch (Exception) { throw; } }; Post["/projects/"] = _ => { var project = Project.FromJson(this.Request.Body.ToStreamString()) .ToMaybe(); project.On(eventAgg.GetEvent<UpdateProjectEvent>().Publish); return Response.AsJson(new { }, project.IsSomething ? HttpStatusCode.OK : HttpStatusCode.InternalServerError); }; Post["/task/comment/"] = _ => { //var model = this.Bind<AddTaskComment>(); var json = this.Request.Body.ToStreamString(); var model = JsonConvert.DeserializeObject<AddTaskComment>(json); eventAgg.GetEvent<AddTaskCommentEvent>().Publish(model.Comment, model.TaskId); return Response.AsJson(json, HttpStatusCode.OK); }; Post["/task/record/"] = _ => { var model = JsonConvert.DeserializeObject<AddTaskRecord>(this.Request.Body.ToStreamString()); eventAgg.GetEvent<AddTaskRecordEvent>().Publish(model.Record, model.TaskId); return Response.AsJson(new { }, HttpStatusCode.OK); }; Delete["/projects/"] = _ => { var res = Response.AsJson(new { }, HttpStatusCode.OK); var json = this.Request.Body.ToStreamString(); var jObj = JObject.Parse(json); var projectId = jObj["projectid"].Value<int>(); var permission = eventAgg.GetEvent<GetDeleteProjectPermissionEvent>().Get().Return(); if (IsEnableUser(eventAgg, permission)) { var project = eventAgg.GetEvent<GetProjectEvent>().Get(x => x.Id == projectId).FirstOrNothing(); project.On(eventAgg.GetEvent<DeleteProjectEvent>().Publish); } else res = HttpStatusCode.Forbidden; return res; }; Delete["/users/"] = _ => { var res = Response.AsJson(new { }, HttpStatusCode.OK); var json = this.Request.Body.ToStreamString(); var jObj = JObject.Parse(json); var userId = jObj["userid"].Value<string>(); var permission = eventAgg.GetEvent<GetDeleteUserPermissionEvent>().Get().Return(); if (IsEnableUser(eventAgg, permission)) { var user = eventAgg.GetEvent<GetUserEvent>().Get(x => x.Id.Equals(userId)).FirstOrNothing(); user.On(eventAgg.GetEvent<DeleteUserEvent>().Publish); } else res = HttpStatusCode.Forbidden; return res; }; Delete["/task/record/"] = _ => { var res = Response.AsJson(new { }, HttpStatusCode.OK); var model = JsonConvert.DeserializeObject<DeleteTaskRecord>(this.Request.Body.ToStreamString()); var permission = eventAgg.GetEvent<GetDeleteTaskRecordPermissionEvent>().Get(Tuple.Create(model.TaskId, model.RecordId)).Return(); var taskWithRecord = eventAgg.GetEvent<GetTaskWithRecordEvent>().Get(x => x.Id.Equals(model.TaskId)).FirstOrNothing(); taskWithRecord.On(task => { if (!IsEnableUser(eventAgg, permission)) { // not permitted res = Response.AsJson(new { }, HttpStatusCode.Forbidden); return; } eventAgg.GetEvent<DeleteTaskRecordEvent>().Publish(task, model.RecordId); }); return res; }; Post["/task/status/save"] = _ => { var res = Response.AsJson(new { }, HttpStatusCode.OK); var model = JsonConvert.DeserializeObject<SaveTasksStatus>(this.Request.Body.ToStreamString()); var query = from task in eventAgg.GetEvent<GetTaskWithRecordEvent>().Get(a => true) from a in model.Tasks where task.Id == a.TaskId where task.StatusCode != a.StatusCode select new { T = task, Status = a.StatusCode }; // todo database のNameを参照する? var toStatusName = Fn.New<int, string>(x => x.ToGuards() .When(3, a => "Done") .When(2, a => "In Progress") .When(1, a => "Ready") .Return("Backlog")); var user = eventAgg.GetEvent<GetUserEvent>().Get(x => x.Id.Equals(Context.CurrentUser.UserName)).First(); var date = DateTime.Now; foreach (var item in query) { var oldStatus = toStatusName(item.T.StatusCode); var newStatus = toStatusName(item.Status); var message = string.Format("Changed status: {0} -> {1}", oldStatus, newStatus); var comment = new TaskComment() { Who = user, Day = date, Text = message, }; eventAgg.GetEvent<AddTaskCommentEvent>().Publish(comment, item.T.Id); item.T.StatusCode = item.Status; eventAgg.GetEvent<UpdateTaskEvent>().Publish(item.T); } return res; }; }
/// <summary> /// Add a comment /// </summary> /// <param name="comment">The comment.</param> public virtual void AddComment(TaskComment comment) { if (!comments.Contains(comment)) { comments.Add(comment); } }
/// <summary> /// Remove a comment /// </summary> /// <param name="comment">The comment.</param> public virtual void RemoveComment(TaskComment comment) { if (comments.Contains(comment)) { comments.Remove(comment); } }
/// <summary> /// Creates the data. /// </summary> public void CreateData() { #region Projecten Project project_JelloScrum = new Project(); project_JelloScrum.Name = "Jello Scrum"; project_JelloScrum.Description = "Scrum project managment tool"; ProjectRepository.Save(project_JelloScrum); Project project_James = new Project(); project_James.Name = "James"; project_James.Description = "Inklok systeem voor Auxilium BV"; ProjectRepository.Save(project_James); #endregion #region Gebruikers User user1 = new User(); user1.Name = "user1"; user1.ChangeUserName("ProductOwner"); user1.FullName = "Gebruiker 1"; GebruikerRepository.Save(user1); User user2 = new User(); user2.Name = "user2"; user2.ChangeUserName("ScrumMaster"); user2.SystemRole = SystemRole.Administrator; user2.FullName = "Gebruiker 2"; GebruikerRepository.Save(user2); User user3 = new User(); user3.Name = "user3"; user3.ChangeUserName("Developer"); user3.SystemRole = SystemRole.User; user3.FullName = "Gebruiker 3"; GebruikerRepository.Save(user3); #endregion #region Stories #region JelloScrum stories for (int i = 0; i < 20; i++) { Story story = new Story(project_JelloScrum, user1, null, StoryType.UserStory); story.HowtoDemo = "uitleg voor de demo " + i.ToString(); story.Note = "notitie " + i.ToString(); story.Description = "omschrijving " + i.ToString(); story.ProductBacklogPriority = (Priority)RandomNumber(0, 3); story.Estimation = new TimeSpan(4, 30, 0); story.Title = "JelloScrum story number: " + i.ToString(); ProjectRepository.Save(project_JelloScrum); } #endregion #region James stories for (int i = 0; i < 20; i++) { Story story = new Story(project_James, user1, null, StoryType.UserStory); story.HowtoDemo = "uitleg voor de demo " + i.ToString(); story.Note = "notitie " + i.ToString(); story.Description = "omschrijving " + i.ToString(); story.ProductBacklogPriority = (Priority)RandomNumber(0, 3); story.Estimation = new TimeSpan(6, 0, 0); story.Title = "James story number: " + i.ToString(); ProjectRepository.Save(project_James); } #endregion #endregion #region Tasks #region JelloScrum foreach (Story story in project_JelloScrum.Stories) { for (int i = RandomNumber(0, 4); i < 6; i++) { Task task = new Task(); task.Description = "Omschrijving voor JelloScrum story " + story.Title + " taak nummer " + i.ToString(); task.Story = story; story.AddTask(task); TaskComment bericht = new TaskComment(task, "blabla comment teskt " + i.ToString()); task.AddComment(bericht); StoryRepository.SaveOrUpdate(story); } story.AddComment("Storycomment James teskt"); StoryRepository.Save(story); } #endregion #region James foreach (Story story in project_James.Stories) { for (int i = RandomNumber(0, 4); i < 5; i++) { Task task = new Task(); task.Description = "Omschrijving voor James story " + story.Title + " taak nummer " + i.ToString(); task.Story = story; story.AddTask(task); TaskComment bericht = new TaskComment(task,"blabla comment teskt " + i.ToString()); task.AddComment(bericht); StoryRepository.Save(story); } story.AddComment("Storycomment James teskt"); StoryRepository.Save(story); } #endregion #endregion #region Sprints #region JelloScrum Sprints int num = 0; for (int i = 0; i < 6; i++) { Sprint sprint = new Sprint(); sprint.Goal = "JelloScrum SprintDoel #" + i.ToString(); sprint.StartDate = DateTime.Now.AddDays((5 * i)); sprint.EndDate = DateTime.Now.AddDays((5 * i) + 20); sprint.Project = project_JelloScrum; SprintRepository.Save(sprint); SprintUser sprintGebruiker = new SprintUser(user1, sprint, SprintRole.ProductOwner); SprintUser sprintGebruiker2 = new SprintUser(user3, sprint, SprintRole.Developer); SprintUser sprintGebruiker3 = new SprintUser(user2, sprint, SprintRole.ScrumMaster); SprintGebruikerRepository.Save(sprintGebruiker); SprintGebruikerRepository.Save(sprintGebruiker2); SprintGebruikerRepository.Save(sprintGebruiker3); SprintRepository.Save(sprint); GebruikerRepository.Save(user1); GebruikerRepository.Save(user3); /*for (int y = 0; y < 3; y++) { SprintStory sprintStory = sprint.MaakSprintStoryVoor(project_JelloScrum.Stories[num]); // retrieve a story sprintStory.SprintBacklogPrioriteit = (Prioriteit)RandomNumber(0, 3); SprintStoryRepository.Save(sprintStory); if (sprintStory.Status != Status.NietOpgepakt) { // ook even wat werkuren toevoegen sprintStory.Story.Tasks[RandomNumber(0, sprintStory.Story.Tasks.Count - 1)].MaakTijdRegistratie(user1, DateTime.Today, sprintStory.Sprint, new TimeSpan(0, 0, RandomNumber(1, 60))); sprintStory.Story.Tasks[RandomNumber(0, sprintStory.Story.Tasks.Count - 1)].MaakTijdRegistratie(user2, DateTime.Today, sprintStory.Sprint, new TimeSpan(0, 0, RandomNumber(1, 60))); SprintStoryRepository.Save(sprintStory); } num++; }*/ SprintRepository.Save(sprint); } #endregion #region James Sprints num = 0; for (int i = 0; i < 4; i++) { Sprint sprint = new Sprint(); sprint.Goal = "James SprintDoel #" + i.ToString(); sprint.StartDate = DateTime.Now.AddDays((4 * i)); sprint.EndDate = DateTime.Now.AddDays((4 * i) + 16); sprint.Project = project_James; SprintRepository.Save(sprint); SprintUser sprintGebruiker = new SprintUser(user1, sprint, SprintRole.ScrumMaster); SprintUser sprintGebruiker2 = new SprintUser(user3, sprint, SprintRole.Developer); SprintGebruikerRepository.Save(sprintGebruiker); SprintGebruikerRepository.Save(sprintGebruiker2); SprintRepository.Save(sprint); GebruikerRepository.Save(user2); GebruikerRepository.Save(user3); for (int y = 0; y < 3; y++) { SprintStory sprintStory = sprint.CreateSprintStoryFor(project_James.Stories[num]); sprintStory.SprintBacklogPriority = (Priority)RandomNumber(0, 3); SprintStoryRepository.Save(sprintStory); if (sprintStory.State != State.Open) { // ook even wat werkuren toevoegen sprintStory.Story.Tasks[RandomNumber(0, sprintStory.Story.Tasks.Count - 1)].RegisterTime(user2, DateTime.Today, sprintStory.Sprint, new TimeSpan(0, 0, RandomNumber(1, 60))); sprintStory.Story.Tasks[RandomNumber(0, sprintStory.Story.Tasks.Count - 1)].RegisterTime(user3, DateTime.Today, sprintStory.Sprint, new TimeSpan(0, 0, RandomNumber(1, 60))); SprintStoryRepository.Save(sprintStory); } num++; } SprintRepository.Save(sprint); } #endregion #endregion #region Impediments #region JelloScrum for (int i = 0; i < 10; i++) { Story impediment = new Story(project_JelloScrum, user3, null, StoryType.Impediment); impediment.Title = "Impediment JelloScrum #" + i.ToString(); impediment.Description = "JelloScrum Impediment omschrijving"; impediment.AddComment("Ahum comment voor....." + i); StoryRepository.Save(impediment); } #endregion #region James for (int i = 0; i < 10; i++) { Story impediment = new Story(project_James, user2, null, StoryType.Impediment); impediment.Title = "Impediment James #" + i.ToString(); impediment.Description = "James Impediment omschrijving"; impediment.AddComment("Ahum comment voor....." + i); StoryRepository.Save(impediment); } #endregion #endregion #region Bugs #region JelloScrum for (int i = 0; i < 10; i++) { Story bug = new Story(project_JelloScrum, user1, (Impact)RandomNumber(0, 4), StoryType.Bug); bug.HowtoDemo = "Bug demo description for JelloScrum #" + i.ToString(); bug.Note = "Note " + i.ToString(); bug.Description = "Description " + i.ToString(); bug.Estimation = new TimeSpan(0); bug.Title = "BUG JelloScrum #" + i.ToString(); StoryRepository.Save(bug); } #endregion #region James for (int i = 0; i < 10; i++) { Story bug = new Story(project_James, user1, (Impact)RandomNumber(0, 4), StoryType.Bug); bug.HowtoDemo = "Bug demo description for James #" + i.ToString(); bug.Note = "Note " + i.ToString(); bug.Description = "Description " + i.ToString(); bug.Estimation = new TimeSpan(0); bug.Title = "BUG James #" + i.ToString(); StoryRepository.Save(bug); } #endregion #endregion PropertyBag.Add("ready", true); RenderView("index"); }