public async Task <IActionResult> CloaseCuttingPlanNotFinish([FromBody] CuttingPlanViewModel cuttingPlan) { var Message = "Not been found data."; try { if (cuttingPlan != null) { var ExcludeId = await this.repositoryTask.GetToListAsync(x => x.JobCardDetailId, x => x.JobCardDetail.CuttingPlanId == cuttingPlan.CuttingPlanId); var jobDetails = await this.repositoryJobCardD.GetToListAsync(x => x, x => x.CuttingPlanId == cuttingPlan.CuttingPlanId && x.JobCardDetailStatus == JobCardDetailStatus.Wait && x.JobCardMaster.JobCardMasterStatus != JobCardMasterStatus.Cancel && x.JobCardMaster.JobCardMasterStatus != JobCardMasterStatus.Complete && !ExcludeId.Contains(x.JobCardDetailId)); if (jobDetails.Any()) { foreach (var item in jobDetails) { item.JobCardDetailStatus = JobCardDetailStatus.Cancel; item.ModifyDate = DateTime.Now; item.Modifyer = cuttingPlan.Creator; //update jobcard detail await this.repositoryJobCardD.UpdateAsync(item, item.JobCardDetailId); if (item.JobCardMasterId != null) { var jobCardM = await this.repositoryJobCardM.GetFirstOrDefaultAsync(x => x, x => x.JobCardMasterId == item.JobCardMasterId, null, x => x.Include(z => z.JobCardDetails)); if (jobCardM != null) { jobCardM.JobCardMasterStatus = jobCardM.JobCardDetails.Any(z => z.JobCardDetailStatus == JobCardDetailStatus.Wait) ? JobCardMasterStatus.InProcess : JobCardMasterStatus.Complete; jobCardM.ModifyDate = DateTime.Now; jobCardM.Modifyer = cuttingPlan.Creator; await this.repositoryJobCardM.UpdateAsync(jobCardM, jobCardM.JobCardMasterId); } } } return(new JsonResult(new { Result = true }, this.DefaultJsonSettings)); } return(NoContent()); } } catch (Exception ex) { Message = $"Has error {ex.ToString()}"; } return(BadRequest(new { Error = Message })); }
public async Task <IActionResult> CuttingPlanNotFinish([FromBody] ScrollViewModel Scroll) { var Message = ""; try { if (Scroll == null) { return(BadRequest()); } int TotalRow; var predicate = PredicateBuilder.False <CuttingPlan>(); // Filter var filters = string.IsNullOrEmpty(Scroll.Filter) ? new string[] { "" } : Scroll.Filter.Split(null); foreach (string temp in filters) { string keyword = temp; predicate = predicate.Or(x => x.Description.ToLower().Contains(keyword) || x.CuttingPlanNo.ToLower().Contains(keyword) || x.MaterialSize.ToLower().Contains(keyword) || x.ProjectCodeDetail.ProjectCodeDetailCode.ToLower().Contains(keyword) || x.ProjectCodeDetail.ProjectCodeMaster.ProjectCode.ToLower().Contains(keyword)); } predicate = predicate.And(x => x.JobCardDetails.Any(z => z.JobCardDetailStatus == JobCardDetailStatus.Wait && z.JobCardMaster.JobCardMasterStatus != JobCardMasterStatus.Complete && z.JobCardMaster.JobCardMasterStatus != JobCardMasterStatus.Cancel) && x.TypeCuttingPlan == TypeCuttingPlan.CuttingPlan); // Option ProjectDetailId if (Scroll.WhereId.HasValue) { predicate = predicate.And(x => x.ProjectCodeDetail.ProjectCodeDetailId == Scroll.WhereId); } // Option SDate if (Scroll.SDate.HasValue) { Scroll.SDate = Scroll.SDate.Value.AddHours(7); predicate = predicate.And(x => x.CreateDate.Value.Date >= Scroll.SDate.Value.Date); } // Option EDate if (Scroll.EDate.HasValue) { Scroll.EDate = Scroll.EDate.Value.AddHours(7); predicate = predicate.And(x => x.CreateDate.Value.Date <= Scroll.EDate.Value.Date); } TotalRow = await this.repository.GetLengthWithAsync(predicate); var HasData = await this.repository.GetToListAsync( x => x, predicate, x => x.OrderBy(z => z.CreateDate), x => x.Include(z => z.ProjectCodeDetail.ProjectCodeMaster), Scroll.Skip ?? 0, Scroll.Take ?? 10); if (HasData.Any()) { List <string> Columns = new List <string>(); // PlanDate List <DateTime?> ListDate = new List <DateTime?>() { //START Date HasData.Min(x => x.CreateDate), //END Date HasData.Max(x => x.CreateDate), }; 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 Data in HasData.OrderBy(x => x.CreateDate)) { var JobNumber = $"{Data?.ProjectCodeDetail?.ProjectCodeMaster?.ProjectCode ?? "No-Data"}" + $"/{(Data?.ProjectCodeDetail == null ? "No-Data" : Data.ProjectCodeDetail.ProjectCodeDetailCode)}"; IDictionary <string, object> rowData; bool update = false; if (DataTable.Any(x => (string)x["JobNumber"] == JobNumber)) { 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 Key = Data.CreateDate.Value.ToString("dd/MM/yy"); // New Data var Master = new CuttingPlanViewModel() { CuttingPlanId = Data.CuttingPlanId, // RequireString = $"{EmployeeReq} | No.{Data.RequireNo}", CuttingPlanNo = Data.CuttingPlanNo, }; if (rowData.Any(x => x.Key == Key)) { // New Value var ListMaster = (List <CuttingPlanViewModel>)rowData[Key]; ListMaster.Add(Master); // add to row data rowData[Key] = ListMaster; } else // add new { rowData.Add(Key, new List <CuttingPlanViewModel>() { Master }); } } if (!update) { rowData.Add("JobNumber", JobNumber); 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 })); }