public bool IsScheduleReadyBySequencingStationId(int id) { PartSequencingDataContext dbSeq = new PartSequencingDataContext(); SequencingScheduleFactory maker = new SequencingScheduleFactory(); MesDataContext dbMes = new MesDataContext(); var seqStations = dbSeq.SequencingStationSettings.Where(i => i.SequencingLocationId == id).ToList(); if (seqStations.Count() > 0) { var seqStation = seqStations.FirstOrDefault(); if (seqStation != null) { var station = maker.UpdateNextBoxBySequencingId(seqStation.Id); if (!station.Status) { if (station.ItemsWaiting != 0) return false; } var scheduleStatus = dbSeq.SequencingStationLookups.Where(s => s.SequenceStationSettingsId == station.Id).FirstOrDefault(); var tokens = MessageTokensCacheManager.MessageTokens.Where(s => s.LineId == station.Line.Id || s.LineId == 4).ToList(); var lineBuffer = maker.GetSequencingBuffer(station); SequencingTrackingItem lastItem = null; var tracking = maker.GetSequencingHistory(station); if (tracking.Any()) lastItem = tracking.OrderByDescending(i => i.OrderId).First(); var lastJobId = Int32.MinValue; if (lastItem != null) lastJobId = lastItem.OrderId; if (lineBuffer != null) { var itemsinbox = station.PartsPerBox; var boxperschedule = station.BoxPerSchedule; var itemsinschedule = itemsinbox * boxperschedule; var jobs = lineBuffer.Where(i => i.OrderId >= station.NextBox.OrderId).Take(itemsinschedule).ToList(); if (itemsinschedule == jobs.Count()) return true; } } } return false; }
public void CompleteTrimSchedule(TrimScheduleInfo schedule, int id, int employeeId) { PartSequencingDataContext dbSeq = new PartSequencingDataContext(); EmployeeDatabase dbEmp = new EmployeeDatabase(); SequencingScheduleFactory factory = new SequencingScheduleFactory(); var employee = dbEmp.GetEmployeeInfo(employeeId); var seqStations = dbSeq.SequencingStationSettings.Where(i => i.SequencingLocationId == id).ToList(); if (seqStations.Count() > 0) { var seqStation = seqStations.FirstOrDefault(); if (seqStation != null) { var station = factory.UpdateNextBoxBySequencingId(seqStation.Id); var statusLookup = dbSeq.SequencingStationLookups.Where(i => i.SequenceStationSettingsId == seqStation.Id).FirstOrDefault(); int boxNum = schedule.ScheduleStatus.CurrentBoxNumber; int scheduleNum = schedule.ScheduleStatus.CurrentScheduleNumber; //check if job completed already bool isComplete = false; var isCompleteResult = dbSeq.IsSequencingScheduleComplete(seqStation.Id, boxNum, scheduleNum); if (isCompleteResult.HasValue == true) // it's null isComplete = (bool)isCompleteResult; if (isComplete) { throw new HttpResponseException( HttpErrorResponse.GetHttpErrorResponse( HttpStatusCode.NotFound, "Trim Schedule Already Completed", string.Format("Trim Schedule {0} Already Completed", scheduleNum))); } if (schedule.ScheduleStatus.CurrentBoxNumber == statusLookup.NextBoxNum && schedule.ScheduleStatus.CurrentScheduleNumber == statusLookup.NextScheduleNum) { var lastjob = schedule.SeatSchedule.Last(); var firstjob = schedule.SeatSchedule.First(); //get schedule parameters by station var itemsinbox = station.PartsPerBox; var boxperschedule = station.BoxPerSchedule; var itemsinschedule = itemsinbox * boxperschedule; //get sequencing buffer var lineBuffer = factory.GetSequencingBuffer(station); //filter sequencing buffer by last job and first job var validBuffer = lineBuffer.Where(i => i.OrderId <= lastjob.OrderId && i.OrderId >= firstjob.OrderId).OrderBy(s => s.OrderId).ToList(); if (validBuffer.Count() == itemsinschedule) //check if there is enough seats to fulfill schedule { if (schedule.OffsetSeats != null) { if (schedule.OffsetSeats.Count() > 0) { } } //save history SequencingTrackingHistoryDetail histDetail = new SequencingTrackingHistoryDetail { BoxNum = schedule.ScheduleStatus.CurrentBoxNumber, DTM = DateTime.Now, ScheduleNum = schedule.ScheduleStatus.CurrentScheduleNumber, SequencingStationSettingsId = station.Id, Type = 1 }; dbSeq.SequencingTrackingHistoryDetails.InsertOnSubmit(histDetail); foreach (var seat in schedule.SeatSchedule) { SequencingTrackingHistory hist = new SequencingTrackingHistory { Position = seat.Index + 1, OrderId = seat.OrderId, ItemNumber = seat.ItemNumber, OrderNumber = seat.OrderNumber, ItemType = seat.ItemType, JobId = seat.JobId, SequencingTrackingHistoryDetail = histDetail, }; dbSeq.SequencingTrackingHistories.InsertOnSubmit(hist); } //queue station items if ((bool)station.SequencingLocation.QueueItems) { var queueStations = dbSeq.SequencingLocations.Where(l => l.ParentId == station.SequencingLocation.Id).ToList(); if (queueStations.Count() > 0) { foreach (var st in queueStations) { var queueItems = (from s in schedule.SeatSchedule select new SequencingStationQueue { OrderNumber = s.OrderNumber == null ? "" : s.OrderNumber.Trim(), BoxNum = schedule.ScheduleStatus.CurrentBoxNumber, InsertedDTM = DateTime.Now, UpdatedDTM = DateTime.Now, ItemNumber = s.ItemNumber.Trim(), ItemType = s.ItemType.Trim(), JobId = s.JobId, OrderId = s.OrderId, Region = "", ScheduleNum = schedule.ScheduleStatus.CurrentScheduleNumber, SequencingLocationId = st.Id, OrderStatus = (byte)s.OrderStatus, }).ToList(); dbSeq.SequencingStationQueues.InsertAllOnSubmit(queueItems); dbSeq.SubmitChanges(); } } } //no parent station delete from the queue table if (station.SequencingLocation.ParentId != null) { var deleteSeats = dbSeq.SequencingStationQueues.Where(i => i.OrderId <= lastjob.OrderId && i.OrderId >= firstjob.OrderId && i.SequencingLocationId == station.SequencingLocation.Id).OrderBy(s => s.OrderId).ToList(); dbSeq.SequencingStationQueues.DeleteAllOnSubmit(deleteSeats); dbSeq.SubmitChanges(); } var scheduleHist = new SequencingStationScheduleHistory { EmployeeId = employeeId, EmployeeName = employee == null ? "Unknown Employee" : employee.Name.Trim(), ScheduleNum = schedule.ScheduleStatus.CurrentScheduleNumber, SequencingLocationId = id, DateCompleted = DateTime.Now, }; dbSeq.SequencingStationScheduleHistories.InsertOnSubmit(scheduleHist); var nextjob = lineBuffer.Where(i => i.OrderId > lastjob.OrderId).OrderBy(s => s.OrderId).FirstOrDefault(); statusLookup.NextBoxNum = schedule.ScheduleStatus.CurrentBoxNumber + 1; statusLookup.NextOrderId = nextjob == null ? statusLookup.NextOrderId + 1 : nextjob.OrderId; statusLookup.NextScheduleNum = schedule.ScheduleStatus.CurrentScheduleNumber + 1; dbSeq.SubmitChanges(); //if (id == 7) //first row complete schedule //{ // CompleteTrimSchedule(schedule, 8, employeeId); //} } } } } }
public TrimSchedule GetTrimSchedule(int id) { PartSequencingDataContext dbSeq = new PartSequencingDataContext(); SequencingScheduleFactory factory = new SequencingScheduleFactory(); MesDataContext dbMes = new MesDataContext(); ItemDetailsModel itemDetailsModel = new ItemDetailsModel(); TrimSchedule trimSchedule = null; List<Seat> offsetSeats = null; List<Seat> currentjobs = null; var seqStations = dbSeq.SequencingStationSettings.Where(i => i.SequencingLocationId == id).ToList(); if (seqStations.Count() > 0) { var seqStation = seqStations.FirstOrDefault(); if (seqStation != null) { var station = factory.UpdateNextBoxBySequencingId(seqStation.Id); var scheduleStatus = dbSeq.SequencingStationLookups.Where(s => s.SequenceStationSettingsId == station.Id).FirstOrDefault(); var tokens = MessageTokensCacheManager.MessageTokens.Where(s => s.LineId == station.Line.Id || s.LineId == 4).ToList(); var lineBuffer = factory.GetSequencingBuffer(station); if (lineBuffer != null) { var itemsinbox = station.PartsPerBox; var boxperschedule = station.BoxPerSchedule; var itemsinschedule = itemsinbox * boxperschedule; var boxqty = station.BoxQty; trimSchedule = new TrimSchedule { }; //trimSchedule.PreviousSchedule = new TrimScheduleInfo(); //SequencingTrackingItem lastItem = null; //var tracking = factory.GetSequencingHistory(station); //if (tracking.Any()) //{ // lastItem = tracking.OrderByDescending(i => i.OrderId).First(); // if (lastItem != null) // { // int previousScheduleNum = lastItem.ScheduleNum; // var previousjobs = (from t in tracking.Where(i=>i.ScheduleNum == previousScheduleNum) // select new Seat { // OrderNumber = t.OrderNumber, // OrderStatus = t.OrderStatus, // Complete = false, // TrimStyle = GetOptionValue(t.ItemNumber.Trim(), 100), // Colour = GetOptionValue(t.ItemNumber.Trim(), 101), // ItemNumber = t.ItemNumber.Trim(), // ItemType = t.ItemType.Trim(), // DescLine1 = t.ItemNumber.Trim(), // DescLine2 = factory.GetSequencingMessage(station, t.ItemNumber.Trim(), tokens), // JobId = (int)t.JobId, // OrderId = t.OrderId, // Item = itemDetailsModel.GetItemInfoByLineId(t.ItemNumber.Trim(), station.Line.Id) // }).ToList(); // trimSchedule.PreviousSchedule.SeatSchedule = previousjobs; // trimSchedule.PreviousSchedule.SummaryList = GetSummaryHeaderItems(previousjobs, station.Line.Id); // trimSchedule.PreviousSchedule.ScheduleStatus = new TrimScheduleStatus // { // CurrentBoxNumber = lastItem.BoxNum, // CurrentScheduleNumber = lastItem.ScheduleNum // }; // } //} //else //{ // trimSchedule.PreviousSchedule = null; //} var tracking = factory.GetSequencingHistory(station); if (tracking.Any()) { var lastTrackItem = tracking.LastOrDefault(); if (lastTrackItem != null) { if (lastTrackItem.Type == 2) { var lastRealJob = tracking.Where(o => o.OrderId < lastTrackItem.OrderId).OrderByDescending(f => f.OrderId).Where(x => x.ScheduleNum > 0).FirstOrDefault(); if (lastRealJob != null) { var unassignedBuffer = tracking.Where(o => o.OrderId <= lastTrackItem.OrderId && o.OrderId >lastRealJob.OrderId).OrderBy(f => f.OrderId).ToList(); if (unassignedBuffer.Count() > 0) { var offsetjobs = (from j in unassignedBuffer select new Seat { OrderStatus = (int)j.OrderStatus, Complete = false, TrimStyle = GetOptionValue(j.ItemNumber.Trim(), 100), Colour = GetOptionValue(j.ItemNumber.Trim(), 101), OrderNumber = j.OrderNumber == null ? "" : j.OrderNumber.Trim(), ItemNumber = j.ItemNumber.Trim(), ItemType = j.ItemType.Trim(), DescLine1 = j.ItemNumber.Trim(), DescLine2 = factory.GetSequencingMessage(station, j.ItemNumber.Trim(), tokens), JobId = (int)j.JobId, OrderId = j.OrderId, Item = itemDetailsModel.GetItemInfoByLineId(j.ItemNumber.Trim(), station.Line.Id) }).ToList(); offsetSeats = offsetjobs; } } } } } if (station.SequencingLocation.ParentId == null) { currentjobs = (from j in lineBuffer.Where(i => i.OrderId >= station.NextBox.OrderId).Take(itemsinschedule).ToList() select new Seat { OrderStatus = (int)j.OrderStatus, Complete = false, TrimStyle = GetOptionValue(j.ItemNumber.Trim(), 100), Colour = GetOptionValue(j.ItemNumber.Trim(), 101), OrderNumber = j.OrderNumber == null ? "" : j.OrderNumber.Trim(), ItemNumber = j.ItemNumber.Trim(), ItemType = j.ItemType.Trim(), DescLine1 = j.ItemNumber.Trim(), DescLine2 = factory.GetSequencingMessage(station, j.ItemNumber.Trim(), tokens), JobId = (int)j.JobId, OrderId = j.OrderId, Item = itemDetailsModel.GetItemInfoByLineId(j.ItemNumber.Trim(), station.Line.Id), }).OrderBy(s => s.OrderId).ToList(); } else //from queue { currentjobs = (from j in lineBuffer.Where(i => i.OrderId >= station.NextBox.OrderId).Take(itemsinschedule).ToList() select new Seat { ScheduleNum = j.ScheduleNum, BoxNum = j.BoxNum, OrderStatus = (int)j.OrderStatus, Complete = false, TrimStyle = GetOptionValue(j.ItemNumber.Trim(), 100), Colour = GetOptionValue(j.ItemNumber.Trim(), 101), OrderNumber = j.OrderNumber == null ? "" : j.OrderNumber.Trim(), ItemNumber = j.ItemNumber.Trim(), ItemType = j.ItemType.Trim(), DescLine1 = j.ItemNumber.Trim(), DescLine2 = factory.GetSequencingMessage(station, j.ItemNumber.Trim(), tokens), JobId = (int)j.JobId, OrderId = j.OrderId, Item = itemDetailsModel.GetItemInfoByLineId(j.ItemNumber.Trim(), station.Line.Id), }).OrderBy(s => s.OrderId).ToList(); } //var currentjobs = (from j in lineBuffer.Where(i => i.OrderId >= station.NextBox.OrderId).Take(itemsinschedule).ToList() // select new Seat { // OrderStatus = (int)j.OrderStatus, // Complete = false, // TrimStyle = GetOptionValue(j.ItemNumber.Trim(), 100), // Colour = GetOptionValue(j.ItemNumber.Trim(), 101), // OrderNumber = j.OrderNumber == null ? "" : j.OrderNumber.Trim(), // ItemNumber = j.ItemNumber.Trim(), // ItemType = j.ItemType.Trim(), // DescLine1 = j.ItemNumber.Trim(), // DescLine2 = factory.GetSequencingMessage(station, j.ItemNumber.Trim(), tokens), // JobId = (int)j.JobId, // OrderId = j.OrderId, // Item = itemDetailsModel.GetItemInfoByLineId(j.ItemNumber.Trim(), station.Line.Id), // }).OrderBy(s=>s.OrderId).ToList(); if (currentjobs.Count() != itemsinschedule) return null; //var lastcurrentjob = currentjobs.Last(); //var nextjobs = (from j in lineBuffer.Where(i => i.OrderId > lastcurrentjob.OrderId).Take(itemsinschedule).ToList() // select new Seat // { // OrderStatus = (int)j.OrderStatus, // Complete = false, // TrimStyle = GetOptionValue(j.ItemNumber.Trim(), 100), // Colour = GetOptionValue(j.ItemNumber.Trim(), 101), // OrderNumber = j.OrderNumber == null ? "" : j.OrderNumber.Trim(), // ItemNumber = j.ItemNumber.Trim(), // ItemType = j.ItemType.Trim(), // DescLine1 = j.ItemNumber.Trim(), // DescLine2 = factory.GetSequencingMessage(station, j.ItemNumber.Trim(), tokens), // JobId = (int)j.JobId, // OrderId = j.OrderId, // Item = itemDetailsModel.GetItemInfoByLineId(j.ItemNumber.Trim(), station.Line.Id) // }).OrderBy(s => s.OrderId).ToList(); //if (nextjobs.Count() == itemsinschedule) //{ // trimSchedule.NextSchedule = new TrimScheduleInfo // { // Complete = false, // SeatSchedule = nextjobs, // SummaryList = GetSummaryHeaderItems(nextjobs, station.Line.Id), // ScheduleStatus = new TrimScheduleStatus // { // CurrentBoxNumber = (scheduleStatus.NextBoxNum + 1) > boxqty ? 1 : scheduleStatus.NextBoxNum + 1, // CurrentScheduleNumber = scheduleStatus.NextScheduleNum + 1 // } // }; //} //else //{ // trimSchedule.NextSchedule = null; //} //for (int i = 0; i < nextjobs.Count(); i++) // nextjobs[i].Index = i; for(int i=0; i<currentjobs.Count(); i++) currentjobs[i].Index = i; trimSchedule.CurrentSchedule = new TrimScheduleInfo { Complete = false, SeatSchedule = currentjobs, SummaryList = GetSummaryHeaderItems(currentjobs, station.Line.Id), ScheduleStatus = GetTrimScheduleStatus(station, scheduleStatus, currentjobs), OffsetSeats = offsetSeats }; return trimSchedule; } } } return null; }
public TrimScheduleInfo GetNextTrimSchedule(int locationId) { PartSequencingDataContext dbSeq = new PartSequencingDataContext(); SequencingScheduleFactory factory = new SequencingScheduleFactory(); MesDataContext dbMes = new MesDataContext(); ItemDetailsModel itemDetailsModel = new ItemDetailsModel(); TrimScheduleInfo nextTrimScheduleInfo = null; var seqStations = dbSeq.SequencingStationSettings.Where(i => i.SequencingLocationId == locationId).ToList(); if (seqStations.Count() > 0) { var seqStation = seqStations.FirstOrDefault(); if (seqStation != null) { var station = factory.UpdateNextBoxBySequencingId(seqStation.Id); var scheduleStatus = dbSeq.SequencingStationLookups.Where(s => s.SequenceStationSettingsId == station.Id).FirstOrDefault(); var tokens = MessageTokensCacheManager.MessageTokens.Where(s => s.LineId == station.Line.Id || s.LineId == 4).ToList(); var lineBuffer = factory.GetSequencingBuffer(station); if (lineBuffer != null) { var itemsinbox = station.PartsPerBox; var boxperschedule = station.BoxPerSchedule; var itemsinschedule = itemsinbox * boxperschedule; var boxqty = station.BoxQty; var currentjobs = (from j in lineBuffer.Where(i => i.OrderId >= station.NextBox.OrderId).Take(itemsinschedule).ToList() select new Seat { OrderStatus = (int)j.OrderStatus, Complete = false, TrimStyle = GetOptionValue(j.ItemNumber.Trim(), 100), Colour = GetOptionValue(j.ItemNumber.Trim(), 101), OrderNumber = j.OrderNumber == null ? "" : j.OrderNumber.Trim(), ItemNumber = j.ItemNumber.Trim(), ItemType = j.ItemType.Trim(), DescLine1 = j.ItemNumber.Trim(), DescLine2 = factory.GetSequencingMessage(station, j.ItemNumber.Trim(), tokens), JobId = (int)j.JobId, OrderId = j.OrderId, Item = itemDetailsModel.GetItemInfoByLineId(j.ItemNumber.Trim(), station.Line.Id), }).OrderBy(s => s.OrderId).ToList(); if (currentjobs.Count() != itemsinschedule) return null; var lastcurrentjob = currentjobs.Last(); var nextjobs = (from j in lineBuffer.Where(i => i.OrderId > lastcurrentjob.OrderId).Take(itemsinschedule).ToList() select new Seat { OrderStatus = (int)j.OrderStatus, Complete = false, TrimStyle = GetOptionValue(j.ItemNumber.Trim(), 100), Colour = GetOptionValue(j.ItemNumber.Trim(), 101), OrderNumber = j.OrderNumber == null ? "" : j.OrderNumber.Trim(), ItemNumber = j.ItemNumber.Trim(), ItemType = j.ItemType.Trim(), DescLine1 = j.ItemNumber.Trim(), DescLine2 = factory.GetSequencingMessage(station, j.ItemNumber.Trim(), tokens), JobId = (int)j.JobId, OrderId = j.OrderId, Item = itemDetailsModel.GetItemInfoByLineId(j.ItemNumber.Trim(), station.Line.Id) }).OrderBy(s => s.OrderId).ToList(); if (nextjobs.Count() == itemsinschedule) { nextTrimScheduleInfo = new TrimScheduleInfo { Complete = false, SeatSchedule = nextjobs, SummaryList = GetSummaryHeaderItems(nextjobs, station.Line.Id), ScheduleStatus = new TrimScheduleStatus { CurrentBoxNumber = (scheduleStatus.NextBoxNum + 1) > boxqty ? 1 : scheduleStatus.NextBoxNum + 1, CurrentScheduleNumber = scheduleStatus.NextScheduleNum + 1 } }; } else { return null; } for (int i = 0; i < nextjobs.Count(); i++) nextjobs[i].Index = i; return nextTrimScheduleInfo; } } } return null; }