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); }
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")); } }