public DataTable SaveDataOnPmHeader(PMHeaderEntity item) { using (FacilitiesEntities db = new FacilitiesEntities()) { try { ClientPMHeader CH = new ClientPMHeader(); #region ADD/Update the PM header entries if (item.ClientPMHeaderId != Guid.Empty) { CH = db.ClientPMHeaders.Where(a => a.ClientPMHeaderId == item.ClientPMHeaderId).FirstOrDefault(); } else { CH.ClientPMHeaderId = Guid.NewGuid(); } CH.Client = item.Client; CH.Customer = item.Customer; CH.ProblemClass = item.ProblemClass; CH.ProblemCode = item.ProblemCode; CH.RequestPriority = item.RequestPriority; CH.ServiceRequestType = item.ServiceRequestType; CH.CustomerReference = item.CustomerReference; CH.IssueDescription = item.IssueDescription; CH.Frequency = item.Frequency; CH.BeginDate = item.BeginDate; CH.EndDate = item.EndDate; CH.ArriveDateAndTime = item.ArriveDateAndTime; CH.FinishDateAndTime = item.FinishDateAndTime; CH.WOInAdvance = item.WOInAdvance; CH.CreatedByUser = item.UserId; CH.ActiveFlag = "N"; if (item.ClientPMHeaderId == Guid.Empty) { db.ClientPMHeaders.Add(CH); } db.SaveChanges(); #endregion #region CALCULATE and insert the schedular entries and return DataTable dt = GetWOConfirmationDate(CH.ClientPMHeaderId); DataView view = dt.DefaultView; view.Sort = "WorkOrderCreationDate ASC"; DataTable sortedDate = view.ToTable(); #endregion return(dt); } catch (Exception ex) { throw (ex); } } }
public DataTable GetWOConfirmationDate(Guid clientPMHeaderID) { using (FacilitiesEntities db = new FacilitiesEntities()) { try { DataTable dt = new DataTable(); //1 Get Original Header Data //ClientPMHeader item = db.ClientPMHeaders.Where(a => a.ClientPMHeaderId == clientPMHeaderID).FirstOrDefault(); ClientPMHeader ClientPMHeader = db.ClientPMHeaders.Where(a => a.ClientPMHeaderId == clientPMHeaderID).FirstOrDefault(); if (ClientPMHeader != null) { dt.Columns.Add("WorkOrderCreationDate", typeof(string)); dt.Columns.Add("WorkOrderArrivalDate", typeof(string)); dt.Columns.Add("FinishDateAndTime", typeof(string)); //2) Get the latest Arrvedate-Advance days value (Need to have this calculated everytime) DateTime WorkOrderInitialArrivalDate = ClientPMHeader.ArriveDateAndTime.AddDays(-ClientPMHeader.WOInAdvance); //3) Delete all those existing records having work order creation date greater than equal to current date List <PMWorkOrderCreationDate> pMWorkOrderExistingRecords = (from pm in db.PMWorkOrderCreationDates where pm.ClientPMHeader == ClientPMHeader.ClientPMHeaderId select pm).ToList(); if (pMWorkOrderExistingRecords != null) { pMWorkOrderExistingRecords = pMWorkOrderExistingRecords.Where(a => Convert.ToDateTime(a.WorkOrderCreationDate) > DateTime.Now).ToList(); if (pMWorkOrderExistingRecords.Count > 0) { db.PMWorkOrderCreationDates.RemoveRange(pMWorkOrderExistingRecords); db.SaveChanges(); } } //4) based on frequency, calculate new dates int countEntityAdded = 0; bool ContinueAdding = true; UOWServiceRequest uOWServiceRequest = new UOWServiceRequest(); CGSInterval cGSIntervals = uOWServiceRequest.GetCGSInterval().Where(a => a.IntervalId == ClientPMHeader.Frequency).FirstOrDefault(); DataRow dr = dt.NewRow(); //initial start row dr["WorkOrderCreationDate"] = WorkOrderInitialArrivalDate; dr["WorkOrderArrivalDate"] = ClientPMHeader.ArriveDateAndTime; dr["FinishDateAndTime"] = ClientPMHeader.FinishDateAndTime; dt.Rows.Add(dr); do { //calculate next arrival date from initial arrival date DataRow drNext = dt.NewRow(); //rest of the calculation of rows switch (cGSIntervals.IntervalName) { case "Monthly 30": countEntityAdded += 1; if (!(WorkOrderInitialArrivalDate.AddMonths(countEntityAdded) <= ClientPMHeader.EndDate)) { ContinueAdding = false; break; } drNext["WorkOrderCreationDate"] = WorkOrderInitialArrivalDate.AddMonths(countEntityAdded); drNext["WorkOrderArrivalDate"] = ClientPMHeader.ArriveDateAndTime.AddMonths(countEntityAdded); drNext["FinishDateAndTime"] = ClientPMHeader.FinishDateAndTime.AddMonths(countEntityAdded); dt.Rows.Add(drNext); break; case "Bi-Monthly 60": countEntityAdded += 2; if (!(WorkOrderInitialArrivalDate.AddMonths(countEntityAdded) <= ClientPMHeader.EndDate)) { ContinueAdding = false; break; } drNext["WorkOrderCreationDate"] = WorkOrderInitialArrivalDate.AddMonths(countEntityAdded); drNext["WorkOrderArrivalDate"] = ClientPMHeader.ArriveDateAndTime.AddMonths(countEntityAdded); drNext["FinishDateAndTime"] = ClientPMHeader.FinishDateAndTime.AddMonths(countEntityAdded); dt.Rows.Add(drNext); break; case "Quarterly 90": countEntityAdded += 3; if (!(WorkOrderInitialArrivalDate.AddMonths(countEntityAdded) <= ClientPMHeader.EndDate)) { ContinueAdding = false; break; } drNext["WorkOrderCreationDate"] = WorkOrderInitialArrivalDate.AddMonths(countEntityAdded); drNext["WorkOrderArrivalDate"] = ClientPMHeader.ArriveDateAndTime.AddMonths(countEntityAdded); drNext["FinishDateAndTime"] = ClientPMHeader.FinishDateAndTime.AddMonths(countEntityAdded); dt.Rows.Add(drNext); break; case "Weekly 7": countEntityAdded += 7; if (!(WorkOrderInitialArrivalDate.AddDays(countEntityAdded) <= ClientPMHeader.EndDate)) { ContinueAdding = false; break; } drNext["WorkOrderCreationDate"] = WorkOrderInitialArrivalDate.AddDays(countEntityAdded); drNext["WorkOrderArrivalDate"] = ClientPMHeader.ArriveDateAndTime.AddDays(countEntityAdded); drNext["FinishDateAndTime"] = ClientPMHeader.FinishDateAndTime.AddDays(countEntityAdded); dt.Rows.Add(drNext); break; case "Bi-Weekly 14": countEntityAdded += 14; if (!(WorkOrderInitialArrivalDate.AddDays(countEntityAdded) <= ClientPMHeader.EndDate)) { ContinueAdding = false; break; } drNext["WorkOrderCreationDate"] = WorkOrderInitialArrivalDate.AddDays(countEntityAdded); drNext["WorkOrderArrivalDate"] = ClientPMHeader.ArriveDateAndTime.AddDays(countEntityAdded); drNext["FinishDateAndTime"] = ClientPMHeader.FinishDateAndTime.AddDays(countEntityAdded); dt.Rows.Add(drNext); break; } } while (ContinueAdding); ////3) Delete all those existing records having work order creation date greater than equal to current date //List<PMWorkOrderCreationDate> pMWorkOrderExistingRecordsnew = (from pm in db.PMWorkOrderCreationDates // where pm.ClientPMHeader == ClientPMHeader.ClientPMHeaderId // select pm).ToList(); //if (pMWorkOrderExistingRecordsnew != null && pMWorkOrderExistingRecordsnew.Count > 0) //{ // db.PMWorkOrderCreationDates.RemoveRange(pMWorkOrderExistingRecordsnew); // db.SaveChanges(); //} foreach (DataRow value in dt.Rows) { PMWorkOrderCreationDate PMWCD = new PMWorkOrderCreationDate(); if (Convert.ToDateTime(value["WorkOrderCreationDate"]) > DateTime.Now) { PMWCD.PMWorkOrderCreationDateId = Guid.NewGuid(); PMWCD.ClientPMHeader = clientPMHeaderID; PMWCD.WorkOrderCreationDate = Convert.ToDateTime(value["WorkOrderCreationDate"]); PMWCD.WorkOrderArriveDate = Convert.ToDateTime(value["WorkOrderArrivalDate"]); PMWCD.WorkOrderFinishDate = Convert.ToDateTime(value["FinishDateAndTime"]); db.PMWorkOrderCreationDates.Add(PMWCD); db.SaveChanges(); } } } return(dt); } catch (Exception ex) { throw (ex); } } }