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);
        }
Ejemplo n.º 2
0
 public void SetUpContext()
 {
     this.Sut = new ShortageResult();
 }