public IResult <ProductionTriggersReport> GetProductionTriggerReport(string jobref, string citCode) { var ptlMaster = this.masterRepository.GetRecord(); if (ptlMaster == null) { return(new ServerFailureResult <ProductionTriggersReport>("Could not find PTL Master record")); } var reportJobref = string.IsNullOrEmpty(jobref) ? ptlMaster.LastFullRunJobref : jobref; // if no cit then just pick the first production one you can find var cit = string.IsNullOrEmpty(citCode) ? this.citRepository.FilterBy(c => c.BuildGroup == "PP" && c.DateInvalid == null).ToList() .OrderBy(c => c.SortOrder).FirstOrDefault() : this.citRepository.FindById(citCode); if (cit == null) { return(new NotFoundResult <ProductionTriggersReport>($"cit {citCode} not found")); } var report = new ProductionTriggersReport(reportJobref, ptlMaster, cit, this.repository); return(new SuccessResult <ProductionTriggersReport>(report)); }
public void SetUp() { var report = new ProductionTriggersReport { Cit = new Cit { Code = "A", Name = "Army of the Undead" }, PtlMaster = new PtlMaster { LastFullRunJobref = "CJCAIH", LastFullRunDateTime = new DateTime(2019, 1, 1) }, Triggers = new List <ProductionTrigger> { new ProductionTrigger { PartNumber = "A", Description = "A product", Priority = "1" }, new ProductionTrigger { PartNumber = "B", Description = "B nice", Priority = "2" }, new ProductionTrigger { PartNumber = "C", Description = "C", Priority = "3" } } }; this.ProductionTriggersFacadeService.GetProductionTriggerReport("CJCAIH", "A") .Returns(new SuccessResult <ProductionTriggersReport>(report)); this.Response = this.Browser.Get( "/production/reports/triggers", with => { with.Header("Accept", "application/json"); with.Query("jobref", "CJCAIH"); with.Query("citCode", "A"); }).Result; }
public ShortageSummary ShortageSummaryByCit(string citCode, string ptlJobref) { var ptlMaster = this.masterRepository.GetRecord(); if (ptlMaster == null) { throw new DomainException("Could not find PTL Master record"); } var cit = this.citRepository.FindById(citCode); if (cit == null) { throw new DomainException($"Could not find CIT with code {citCode}"); } var linnCompany = this.accountingCompaniesRepository.FindById("LINN"); if (linnCompany == null) { throw new DomainException($"Could not find Linn Accounting Company"); } var report = new ProductionTriggersReport(ptlJobref, ptlMaster, cit, this.triggerRepository); var backOrders = this.backOrderRepository.FilterBy(b => b.JobId == linnCompany.LatestSosJobId && b.CitCode == citCode).ToList(); var wswShortages = this.shortageRepository.FilterBy(s => s.Jobref == ptlJobref && s.CitCode == citCode).ToList(); var wswShortagesStories = this.shortageStoryRepository.FilterBy(s => s.Jobref == ptlJobref && s.CitCode == citCode).ToList(); var summary = new ShortageSummary(); var shortages = new List <ShortageResult>(); summary.CitName = cit.Name; foreach (var trigger in report.Triggers.Where(t => t.Priority == "1" || t.Priority == "2")) { summary.OnesTwos++; if (trigger.IsShortage()) { var shortage = new ShortageResult(); shortage.Priority = trigger.Priority; shortage.PartNumber = trigger.PartNumber; shortage.Build = trigger.ReqtForInternalAndTriggerLevelBT; if (trigger.QtyBeingBuilt > 0) { shortage.Build += trigger.QtyBeingBuilt; } shortage.CanBuild = trigger.CanBuild; shortage.Kanban = trigger.KanbanSize; var shortageBackOrders = backOrders.Where(o => o.ArticleNumber == shortage.PartNumber).ToList(); if (shortageBackOrders.Any()) { shortage.BackOrderQty = shortageBackOrders.Sum(o => o.BackOrderQty); shortage.EarliestRequestedDate = shortageBackOrders.Min(o => o.RequestedDeliveryDate); } var details = wswShortages.Where(w => w.PartNumber == shortage.PartNumber).GroupBy(w => w.ShortPartNumber).Select(w => w.First()); foreach (var detail in details) { shortage.AddWswShortage(detail); var stories = wswShortagesStories.Where(w => w.ShortPartNumber == detail.ShortPartNumber && w.PartNumber == detail.PartNumber); foreach (var story in stories) { shortage.AddWswShortageStory(story); } } shortages.Add(shortage); } } summary.Shortages = shortages; return(summary); }