Example #1
0
        public async Task <IActionResult> CancelJobMaster([FromBody] JobCardMasterViewModel model)
        {
            var Message = "Data not been found.";

            try
            {
                var jobMaster = await this.repository.GetFirstOrDefaultAsync(x => x,
                                                                             x => x.JobCardMasterId == model.JobCardMasterId, null,
                                                                             x => x.Include(z => z.JobCardDetails));

                if (jobMaster != null)
                {
                    if (!jobMaster.JobCardDetails.Any() || jobMaster.JobCardDetails.
                        Any(x => x.JobCardDetailStatus != JobCardDetailStatus.Task ||
                            x.JobCardDetailStatus != JobCardDetailStatus.Change))
                    {
                        jobMaster.JobCardMasterStatus = JobCardMasterStatus.Cancel;
                        jobMaster.ModifyDate          = DateTime.Now;
                        jobMaster.Modifyer            = model.Modifyer;
                        jobMaster.Remark = model.Remark;

                        var result = await this.repository.UpdateAsync(jobMaster, jobMaster.JobCardMasterId);

                        if (result != null)
                        {
                            await this.SendMailAsync(result);
                        }

                        return(Ok());
                    }
                }
            }
            catch (Exception ex)
            {
                Message = $"Has error {ex.ToString()}";
            }

            return(BadRequest(new { Message }));
        }
Example #2
0
        public async Task <IActionResult> GetWaitJobCardScheduleOnlyLmSm([FromBody] OptionScheduleViewModel Schedule)
        {
            if (Schedule == null)
            {
                return(BadRequest());
            }

            var Message = "";

            try
            {
                int TotalRow;
                var predicate = PredicateBuilder.False <JobCardMaster>();
                // Filter
                var filters = string.IsNullOrEmpty(Schedule.Filter) ? new string[] { "" }
                                    : Schedule.Filter.ToLower().Split(null);
                foreach (var keyword in filters)
                {
                    string temp = keyword;
                    predicate = predicate.Or(x => x.EmployeeRequire.NameThai.ToLower().Contains(temp) ||
                                             x.EmployeeWrite.NameThai.ToLower().Contains(temp) ||
                                             x.EmployeeGroup.Description.ToLower().Contains(temp) ||
                                             x.ProjectCodeDetail.ProjectCodeDetailCode.ToLower().Contains(temp) ||
                                             x.ProjectCodeDetail.ProjectCodeMaster.ProjectCode.ToLower().Contains(temp) ||
                                             x.Description.ToLower().Contains(temp));
                }

                predicate = predicate.And(x => (x.JobCardMasterStatus == JobCardMasterStatus.Wait ||
                                                x.JobCardMasterStatus == JobCardMasterStatus.InProcess));

                // Option ProjectCodeMaster
                if (Schedule.ProjectMasterId.HasValue)
                {
                    predicate = predicate.And(x => x.ProjectCodeDetail.ProjectCodeMasterId == Schedule.ProjectMasterId);
                }

                if (Schedule.ProjectDetailId.HasValue)
                {
                    predicate = predicate.And(x => x.ProjectCodeDetailId == Schedule.ProjectDetailId);
                }

                // Option Status
                if (Schedule.TypeMachineId.HasValue)
                {
                    predicate = predicate.And(x => x.TypeMachineId == Schedule.TypeMachineId);
                }
                else
                {
                    predicate = predicate.And(x => x.TypeMachine.TypeMachineCode.Contains("LM") ||
                                              x.TypeMachine.TypeMachineCode.Contains("SM"));
                }

                TotalRow = await this.repository.GetLengthWithAsync(predicate);


                var HasData = await this.repository.GetToListAsync(
                    selector : x => x,
                    predicate : predicate,
                    include : x => x.Include(z => z.EmployeeRequire)
                    .Include(z => z.EmployeeWrite)
                    .Include(z => z.EmployeeGroup)
                    .Include(z => z.TypeMachine)
                    .Include(z => z.ProjectCodeDetail.ProjectCodeMaster),
                    skip : Schedule.Skip ?? 0,
                    take : Schedule.Take ?? 10,
                    orderBy : x => x.OrderByDescending(z => z.JobCardDate));

                if (HasData.Any())
                {
                    List <string> Columns = new List <string>();
                    // PlanDate
                    List <DateTime?> ListDate = new List <DateTime?>()
                    {
                        //START Date
                        HasData.Min(x => x.CreateDate),
                        HasData.Min(x => x.JobCardDate) ?? null,
                        HasData.Min(x => x.DueDate) ?? null,
                        //END Date
                        HasData.Max(x => x.CreateDate),
                        HasData.Max(x => x.JobCardDate) ?? null,
                        HasData.Max(x => x.DueDate) ?? null,
                    };

                    DateTime?MinDate = ListDate.Min();
                    DateTime?MaxDate = ListDate.Max();

                    if (MinDate == null && MaxDate == null)
                    {
                        return(BadRequest(new { Error = Message }));
                    }
                    // EachDay
                    var EachDate = new Helper.LoopEachDate();

                    foreach (DateTime day in EachDate.EachDate(MinDate.Value, MaxDate.Value.AddDays(1)).OrderByDescending(x => x.Value))
                    {
                        if (HasData.Any(x => x.CreateDate.Value.Date == day.Date))
                        {
                            Columns.Add(day.Date.ToString("dd/MM/yy"));
                        }
                    }

                    var DataTable = new List <IDictionary <string, object> >();
                    foreach (var machineGroup in HasData.GroupBy(z => z.TypeMachine))
                    {
                        foreach (var Data in machineGroup.OrderBy(x => x.CreateDate))
                        {
                            var JobNumber = $"{Data?.ProjectCodeDetail?.ProjectCodeMaster?.ProjectCode ?? "No-Data"}" +
                                            $"/{(Data?.ProjectCodeDetail == null ? "No-Data" : Data?.ProjectCodeDetail?.ProjectCodeDetailCode)}";

                            var WorkGroup = Data?.TypeMachine?.TypeMachineCode ?? "";
                            IDictionary <string, object> rowData;
                            bool update = false;
                            if (DataTable.Any(x => (string)x["JobNumber"] == JobNumber &&
                                              (string)x["GroupMachine"] == WorkGroup &&
                                              (string)x["Employee"] == Data?.EmployeeWrite?.NameThai))
                            {
                                var FirstData = DataTable.FirstOrDefault(x => (string)x["JobNumber"] == JobNumber);
                                if (FirstData != null)
                                {
                                    rowData = FirstData;
                                    update  = true;
                                }
                                else
                                {
                                    rowData = new ExpandoObject();
                                }
                            }
                            else
                            {
                                rowData = new ExpandoObject();
                            }

                            if (Data.CreateDate != null)
                            {
                                //Get Employee Name
                                // var Employee = await this.repositoryEmp.GetAsync(Data.RequireEmp);
                                // var EmployeeReq = Employee != null ? $"คุณ{(Employee?.NameThai ?? "")}" : "No-Data";

                                var Key = Data.CreateDate.Value.ToString("dd/MM/yy");
                                // New Data
                                var Master = new JobCardMasterViewModel()
                                {
                                    JobCardMasterId = Data.JobCardMasterId,
                                    JobCardMasterNo = Data.JobCardMasterNo
                                };

                                if (rowData.Any(x => x.Key == Key))
                                {
                                    // New Value
                                    var ListMaster = (List <JobCardMasterViewModel>)rowData[Key];
                                    ListMaster.Add(Master);
                                    // add to row data
                                    rowData[Key] = ListMaster;
                                }
                                else // add new
                                {
                                    rowData.Add(Key, new List <JobCardMasterViewModel>()
                                    {
                                        Master
                                    });
                                }
                            }

                            if (!update)
                            {
                                rowData.Add("GroupMachine", Data?.TypeMachine?.TypeMachineCode);
                                rowData.Add("JobNumber", JobNumber);
                                rowData.Add("Employee", Data?.EmployeeWrite?.NameThai);
                                DataTable.Add(rowData);
                            }
                        }
                    }
                    return(new JsonResult(new
                    {
                        TotalRow,
                        Columns,
                        DataTable
                    }, this.DefaultJsonSettings));
                }
                else
                {
                    return(NoContent());
                }
            }
            catch (Exception ex)
            {
                Message = $"Has error {ex.ToString()}";
            }
            return(BadRequest(new { Error = Message }));
        }