Exemple #1
0
        public ActionResult OnPostAutoGen()
        {
            // Generate possibly new Tasks based on template add/changes
            AutoGen ag = new AutoGen(_context);

            ag.GenTasks(hostEnv);
            return(this.Content("Success"));
        }
Exemple #2
0
        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
        }