Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
 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));
 }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 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);
         }
     }
 }
Ejemplo n.º 5
0
        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();
        }
Ejemplo n.º 6
0
        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;
            }
        }
Ejemplo n.º 8
0
        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));
        }
Ejemplo n.º 9
0
        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
                    };
                }
            }
        }
Ejemplo n.º 10
0
        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));
            }
        }
Ejemplo n.º 11
0
        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));
        }
Ejemplo n.º 12
0
        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);
            }
        }
Ejemplo n.º 13
0
        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();
        }
Ejemplo n.º 14
0
        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
            }));
        }
Ejemplo n.º 15
0
 public CreateTaskCommentCommand(TaskComment taskComment, string content)
 {
     Target    = taskComment;
     Version   = 1;
     Id        = Guid.NewGuid().ToString();
     CreatedAt = DateTime.Now;
     Content   = content;
 }
Ejemplo n.º 16
0
        /**/

        /*
         * 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);
        }
Ejemplo n.º 17
0
 public TaskCommentChangeEvent(TaskComment taskComment, string oldValue, string newValue)
 {
     Type       = EventType.Change;
     Target     = taskComment;
     OldComment = oldValue;
     NewComment = newValue;
     EntityName = Target.GetType().Name;
 }
Ejemplo n.º 18
0
 public static TaskCommentAPI From(TaskComment item)
 {
     return(new TaskCommentAPI
     {
         ID = item.ID,
         Comment = item.Comment,
         TaskID = item.TaskID
     });
 }
Ejemplo n.º 19
0
        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));
        }
Ejemplo n.º 20
0
        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
            });
        }
Ejemplo n.º 21
0
        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 }));
        }
Ejemplo n.º 22
0
 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
     };
 }
Ejemplo n.º 23
0
 public TaskCommentBuilder(
     IDefaultRequestHeadersService defaultRequestHeadersService,
     ITaskCommentsClient taskCommentsClient)
 {
     _taskCommentsClient           = taskCommentsClient;
     _defaultRequestHeadersService = defaultRequestHeadersService;
     _comment = new TaskComment
     {
         Id    = Guid.NewGuid(),
         Value = "Test".WithGuid()
     };
 }
Ejemplo n.º 24
0
        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);
        }
Ejemplo n.º 25
0
        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));
        }
Ejemplo n.º 26
0
 /// <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
 }
Ejemplo n.º 27
0
        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);
        }
Ejemplo n.º 28
0
        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>());
                }
            }
        }
Ejemplo n.º 29
0
        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);
        }
Ejemplo n.º 30
0
        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);
        }
Ejemplo n.º 32
0
        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);
            }
        }
Ejemplo n.º 33
0
        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;
            };
        }
Ejemplo n.º 34
0
 /// <summary>
 /// Add a comment
 /// </summary>
 /// <param name="comment">The comment.</param>
 public virtual void AddComment(TaskComment comment)
 {
     if (!comments.Contains(comment))
     {
         comments.Add(comment);
     }
 }
Ejemplo n.º 35
0
 /// <summary>
 /// Remove a comment
 /// </summary>
 /// <param name="comment">The comment.</param>
 public virtual void RemoveComment(TaskComment comment)
 {
     if (comments.Contains(comment))
     {
         comments.Remove(comment);
     }
 }
Ejemplo n.º 36
0
        /// <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");
        }