public ActionResult OnPostAutoGen() { // Generate possibly new Tasks based on template add/changes AutoGen ag = new AutoGen(_context); ag.GenTasks(hostEnv); return(this.Content("Success")); }
public ActionResult OnPostSave() { if ((this.Request != null) && (this.Request.Form != null)) { bool IsTemplate = false; /****************** * * public int tid { get; set; } * public int state { get; set; } * [DataMember] * public int reason { get; set; } * [DataMember] * public int PercentComplete { get; set; } * [DataMember] * public string Desc { get; set; } * [DataMember] * public List<Pic> pics { get; set; } * [DataMember] * public List<BOMLine> bom { get; set; } * [DataMember] * public string comments { get; set; } * ******************/ string fStr = "% Comp"; try { uint pctComp = uint.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "pctComp").Value); fStr = "Status"; ulong status = ulong.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskState").Value); fStr = "Reason"; ulong reason = ulong.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskReason").Value); fStr = "Priority"; task.Priority = int.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskPriority").Value); task.SetTaskStatus((CTask.eTaskStatus)status, (CTask.eTaskStatus)reason, (int)pctComp); taskData.state = (int)status; taskData.reason = (int)reason; taskData.PercentComplete = (int)pctComp; fStr = "Title must be filled"; string title = CCommon.UnencodeQuotes(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskTitle").Value).Trim(); if (title.Length == 0) { throw new ArgumentNullException("bad title"); } taskData.Title = task.Description = title; fStr = "Task Id"; taskData.tid = task.Id = int.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskId").Value); fStr = "Parent Task Id"; string ptid = this.Request.Form.FirstOrDefault(kv => kv.Key == "parentTaskId").Value; task.ParentTaskId = ((ptid.Length > 0) ? int.Parse(ptid) : (int?)null); fStr = "Task Type"; task.Type = int.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskType").Value); fStr = "Person Id"; task.PersonId = int.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskPersonId").Value); if (!task.PersonId.HasValue || (task.PersonId <= 0)) { task.PersonId = null; } var oldTask = _context.Task.AsNoTracking().FirstOrDefaultAsync(t => (t.Id == task.Id) && (((int)t.Type & (int)eTaskType.AutoPersonID) != 0)).Result; if (oldTask != null) { if (task.PersonId != oldTask.PersonId) { task.Type &= ~(int)eTaskType.AutoPersonID; // Remove Auto Person state since user change person. } } fStr = "Committed Cost"; String ccostStr = this.Request.Form.FirstOrDefault(kv => kv.Key == "taskCommittedCost").Value; if (ccostStr.Trim().Length > 0) { task.CommittedCost = decimal.Parse(ccostStr); } else { task.CommittedCost = 0; } fStr = "Total Cost"; String tcostStr = this.Request.Form.FirstOrDefault(kv => kv.Key == "taskTotalCost").Value; if (tcostStr.Trim().Length > 0) { task.TotalCost = decimal.Parse(tcostStr); } else { task.TotalCost = 0; } IsTemplate = (task.Type & (int)CTask.eTaskType.Template) != 0; if (IsTemplate) { fStr = "Template Task"; // Make sure to initialize ABOVE and also get these HERE only for a Template Task. int dueType = Int32.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskCreateDue").Value); if (dueType != 0) { // Get Template Type int dueValue = 0; if ((dueType == (int)CTask.eTaskType.Hours_Before_Start) || (dueType == (int)CTask.eTaskType.Hours_After_Start) || (dueType == (int)CTask.eTaskType.Hours_Before_End) || (dueType == (int)CTask.eTaskType.Hours_After_End) || (dueType == (int)CTask.eTaskType.Days_Before_Start) || (dueType == (int)CTask.eTaskType.Days_After_Start) || (dueType == (int)CTask.eTaskType.Days_Before_End) || (dueType == (int)CTask.eTaskType.Days_After_End) || (dueType == (int)CTask.eTaskType.Weeks_Before_Start) || (dueType == (int)CTask.eTaskType.Weeks_After_Start) || (dueType == (int)CTask.eTaskType.Weeks_Before_End) || (dueType == (int)CTask.eTaskType.Weeks_After_End) || (dueType == (int)CTask.eTaskType.Months_Before_Start) || (dueType == (int)CTask.eTaskType.Months_After_Start) || (dueType == (int)CTask.eTaskType.Months_Before_End) || (dueType == (int)CTask.eTaskType.Months_After_End) || (dueType == (int)CTask.eTaskType.Day_Of_Week_SunMon) || (dueType == (int)CTask.eTaskType.Every_Num_Years)) { dueValue = Int32.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskCreateDueVal").Value); } else if (dueType == (int)CTask.eTaskType.Day_Of_Week_SunMon) { String dueStr = this.Request.Form.FirstOrDefault(kv => kv.Key == "taskCreateDueVal").Value; if (dueStr.Length > 0) { dueStr = dueStr.Trim().ToLower(); if (dueStr.IndexOf("su") == 0) { dueValue = 1; } else if ((dueStr.IndexOf("m") == 0)) { dueValue = 2; } else if ((dueStr.IndexOf("tu") == 0)) { dueValue = 3; } else if ((dueStr.IndexOf("w") == 0)) { dueValue = 4; } else if ((dueStr.IndexOf("th") == 0)) { dueValue = 5; } else if ((dueStr.IndexOf("f") == 0)) { dueValue = 6; } else if ((dueStr.IndexOf("sa") == 0)) { dueValue = 7; } else { return(this.Content("Fail: Week Day needs to start with M, Tu, W, Th, Fr, Sa or Su")); // Send back results } } } int eachType = Int32.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskCreateEach").Value); if (eachType == (int)CTask.eTaskType.Day_from_Due_till) { String TillDayStr = this.Request.Form.FirstOrDefault(kv => kv.Key == "TillDay").Value; if (TillDayStr.Trim().Length > 0) { bool TillFail = true; String[] numStr = TillDayStr.Split('/', '.', '-'); if (numStr.Count() == 2) { if (Int32.TryParse(numStr[0], out int TillMo) && Int32.TryParse(numStr[1], out int TillDay)) { try { task.EstimatedDoneDate = new DateTime(2020, TillMo, TillDay); } catch { } TillFail = !task.EstimatedDoneDate.HasValue; } if (TillFail) { return(this.Content("Fail: Day_from_Due_till needs to have a valid Month/Day with a / . or - separator")); // Send back results } } } } if ((eachType == (int)CTask.eTaskType.Due_Day) || (eachType == (int)CTask.eTaskType.Num_Start_Date)) { string mdStr = CCommon.UnencodeQuotes(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskDueDate").Value).Trim(); if (mdStr.Length >= 10) { string dateOnly = mdStr.Substring(0, 10); task.DueDate = DateTime.ParseExact(dateOnly, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture); } else { return(this.Content("Fail: A valid Due Date must be set with Every : Month n Day")); // Send back results } } task.SetTaskType((CTask.eTaskType)dueType, (CTask.eTaskType)eachType, dueValue); } fStr = "Role123"; taskData.Role1 = long.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskRole1").Value); taskData.Role2 = long.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskRole2").Value); taskData.Role3 = long.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskRole3").Value); } fStr = "Task Doc"; task.PlanLink = CCommon.UnencodeQuotes(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskDoc").Value); fStr = "Detail Text"; taskData.Detail = CCommon.UnencodeQuotes(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskDetail").Value); fStr = "Comments"; taskData.comments = CCommon.UnencodeQuotes(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskComments").Value); fStr = "Pics"; string[] pics = Newtonsoft.Json.JsonConvert.DeserializeObject <string[]>(this.Request.Form.FirstOrDefault(kv => kv.Key == "pics").Value); fStr = "Pic Titles"; string[] picTitles = Newtonsoft.Json.JsonConvert.DeserializeObject <string[]>(this.Request.Form.FirstOrDefault(kv => kv.Key == "picTitles").Value); if (pics.Length == picTitles.Length) { for (int i = 0; i < pics.Length; ++i) { Pic pobj = new Pic(task.Id, i + 1, CCommon.UnencodeQuotes(picTitles[i]), pics[i]); taskData.pics.Add(pobj); } } else { return(this.Content("Fail: Pics=" + pics.Length + " DOES NOT MATCH Pic Titles=" + picTitles.Length)); // Send back results } fStr = "Costs /BOM"; var sBOM = this.Request.Form.FirstOrDefault(kv => kv.Key == "bom").Value; taskData.bom = Newtonsoft.Json.JsonConvert.DeserializeObject <List <BOMLine> >(sBOM); fStr = "Due/Est.Done Date"; string msDueStr = CCommon.UnencodeQuotes(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskDueDate").Value).Trim(); DateTime dueDateTime = new DateTime(); if (msDueStr.Length > 0) { //dueDateTime = DateTime.ParseExact(msDueStr, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture); dueDateTime = DateTime.Parse(msDueStr, System.Globalization.CultureInfo.CurrentCulture); } taskData.FixedDueDate = bool.Parse(this.Request.Form.FirstOrDefault(kv => kv.Key == "fixedDueDate").Value); if (taskData.FixedDueDate) { if (msDueStr.Length > 0) { task.DueDate = dueDateTime; } else { task.DueDate = null; } if (!IsTemplate) { task.EstimatedDoneDate = null; } } else { if (!IsTemplate) { if (msDueStr.Length > 0) { task.EstimatedDoneDate = dueDateTime; } else { task.EstimatedDoneDate = null; } task.DueDate = null; } } fStr = "Completed Date"; string msDoneStr = CCommon.UnencodeQuotes(this.Request.Form.FirstOrDefault(kv => kv.Key == "taskDoneDate").Value).Trim(); if (msDoneStr.Length > 0) { int slashIdx = msDoneStr.IndexOf("/"); if ((slashIdx > 0) && (slashIdx <= 2)) { task.ActualDoneDate = DateTime.ParseExact(msDoneStr, "M/d/yyyy h:mm:ss tt", System.Globalization.CultureInfo.CurrentCulture); } else { long msSinceUXEpoc = long.Parse(msDoneStr); task.ActualDoneDate = DateTimeOffset.FromUnixTimeMilliseconds(msSinceUXEpoc).DateTime.ToLocalTime(); } } else { task.ActualDoneDate = null; } task.EstimatedManHours = 0; task.RequiredSkills = ""; if (IsTemplate) { // Remove exist non-done tasks so new ones can be created without task multiplicity Models.Task.RemoveActiveChildTasks(_context, task.Id); } fStr = "Save File Update"; taskData.Write(hostEnv); fStr = "DB Update"; _context.Attach(task).State = Microsoft.EntityFrameworkCore.EntityState.Modified; _context.SaveChanges(); if (IsTemplate) { // Generate possibly new Tasks based on template add/changes AutoGen ag = new AutoGen(_context); ag.GenTasks(hostEnv, task.Id); } if (dueDateTime != DateTime.MinValue) { NotifyUserTaskDue(hostEnv, _config, _userManager, _context, 24); // Send out notications if needed. } } catch (Exception e) { return(this.Content("Fail: " + fStr + " e.msg=" + e.Message)); // Send back results } return(this.Content("Success:" + task.Id)); // Send back results } return(this.Content("Fail: Bad/Missing Request")); // Send back results }