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