Esempio n. 1
0
        private void NortificationToOutside(Progress progress, TaskModel thisTask, AchievedTask achievedTask, string aSingleWord)
        {
            var wc            = new WebClient();
            var sendStatement = new StringBuilder();

            sendStatement.AppendLine("<!channel>");
            sendStatement.AppendLine($"{progress.UserName}さん");
            sendStatement.AppendLine("以下のurl先で承認作業をお願いします");
            var ownerPageUrl = $"{Request.Scheme}://{Request.Host}/OwnerPage?progressIdString={progress.Id}";

            sendStatement.AppendLine(ownerPageUrl);
            sendStatement.AppendLine("");
            sendStatement.AppendLine("<申請者>");
            sendStatement.AppendLine(achievedTask.UserName);
            sendStatement.AppendLine("");
            sendStatement.AppendLine("<タスク名>");
            sendStatement.AppendLine("■" + progress.Title);
            sendStatement.AppendLine("  -" + thisTask.TaskName);
            if (!String.IsNullOrEmpty(aSingleWord))
            {
                sendStatement.AppendLine("");
                sendStatement.AppendLine("<一言>");
                sendStatement.AppendLine(aSingleWord);
            }
            var sendData = JsonConvert.SerializeObject(new
            {
                text       = sendStatement.ToString(),
                icon_emoji = ":cyclone:",
                username   = "******"
            });

            wc.Headers.Add(HttpRequestHeader.ContentType, "application/json;charset=UTF-8");
            wc.Encoding = Encoding.UTF8;

            wc.UploadString(progress.SlackAppUrl, sendData);
        }
Esempio n. 2
0
        public JsonResult OnPostUpdateProgress()
        {
            try
            {
                int?progressId    = HttpContext.Session.GetInt32(SessionCurrentProgress);
                int?numberOfTasks = HttpContext.Session.GetInt32(SessionNumberOfTasks);

                if (progressId == null || numberOfTasks == null)
                {
                    return(new JsonResult("serverError"));
                }

                var aSingleWord = "";
                var cellId      = "";
                {
                    var stream = new MemoryStream();
                    Request.Body.CopyTo(stream);
                    stream.Position = 0;
                    using (var reader = new StreamReader(stream))
                    {
                        string requestBody = reader.ReadToEnd();
                        if (requestBody.Length <= 0)
                        {
                            return(new JsonResult("failed"));
                        }
                        var receiveData = JsonConvert.DeserializeObject <Dictionary <string, string> >(requestBody);
                        cellId      = receiveData["cellId"];
                        aSingleWord = receiveData["aSingleWord"];
                    }
                }

                var columAlphabet = (ColumAlphaBet)Enum.Parse(typeof(ColumAlphaBet), cellId[0].ToString());
                int rowNumber     = int.Parse(cellId.Substring(1, cellId.Length - 1));
                var clickedTask   = AcquireClickedTask(_context.Tasks, (int)progressId, rowNumber);
                if (clickedTask == null)
                {
                    return(new JsonResult("failed"));
                }
                int clickedTaskId                     = clickedTask.Id;
                var clickedParticipant                = AcquireClickedParticipant(_context.Participants, (int)progressId, columAlphabet);
                var clickedParticipantName            = clickedParticipant.UserName;
                int clickedParticipantCurrentProgress = clickedParticipant.CurrentProgress;

                // 進捗更新申請した人とユーザが一致しなければ処理中断
                if (User.Identity.Name != clickedParticipantName)
                {
                    return(new JsonResult("failed"));
                }
                // ひとつ前のタスクが完了していなければ進捗更新できない
                else if (rowNumber != clickedParticipantCurrentProgress + 1)
                {
                    return(new JsonResult("failed"));
                }
                // すでに登録されている場合も処理中断
                else if (_context.AchievedTasks.Where(a => a.TaskId == clickedTaskId)
                         .Where(a => a.UserName == clickedParticipantName).Count() > 0)
                {
                    return(new JsonResult("failed"));
                }

                var achievdTask = new AchievedTask
                {
                    ProgressId       = (int)progressId,
                    TaskId           = clickedTaskId,
                    UserName         = clickedParticipantName,
                    AchievedDateTime = DateTime.Now.ToLocalTime(),
                    IsAuthorized     = false,
                    Description      = aSingleWord
                };

                var thisProgress = _context.Progresses.Where(p => p.Id == progressId).First();
                if (!String.IsNullOrEmpty(thisProgress.SlackAppUrl))
                {
                    NortificationToOutside(thisProgress, clickedTask, achievdTask, aSingleWord);
                }

                _context.AchievedTasks.Add(achievdTask);
                _context.SaveChanges();

                var result = new Dictionary <string, string>
                {
                    { "dateTime", DateTime.Now.ToString() }
                };
                Redirect($"TaskManager/Index?progressIdString={progressId}");
                return(new JsonResult(JsonConvert.SerializeObject(result)));
            }
            catch
            {
                return(new JsonResult("serverError"));
            }
        }