public IResult <ProductionTriggerFacts> GetProductionTriggerFacts(string jobref, string partNumber)
        {
            if (string.IsNullOrEmpty(jobref))
            {
                return(new BadRequestResult <ProductionTriggerFacts>("Must supply a jobref"));
            }

            if (string.IsNullOrEmpty(partNumber))
            {
                return(new BadRequestResult <ProductionTriggerFacts>("Must supply a part number"));
            }

            var trigger = this.repository.FindBy(f => f.Jobref == jobref && f.PartNumber == partNumber);

            if (trigger == null)
            {
                return(new NotFoundResult <ProductionTriggerFacts>("No facts found for that jobref and part number"));
            }

            var facts = new ProductionTriggerFacts(trigger)
            {
                OutstandingWorksOrders =
                    trigger.QtyBeingBuilt > 0
                                        ? this.worksOrderRepository.FilterBy(
                        w => w.PartNumber == partNumber & w.DateCancelled == null
                        & w.Quantity > w.QuantityBuilt).ToList()
                                        : new List <WorksOrder>()
            };

            if (trigger.ReqtForSalesOrdersBE > 0)
            {
                var linn = this.accountingCompaniesRepository.FindById("LINN");
                facts.OutstandingSalesOrders = linn != null
                    ? this.productionBackOrderRepository.FilterBy(o =>
                                                                  o.JobId == linn.LatestSosJobId && o.ArticleNumber == partNumber).ToList() : new List <ProductionBackOrder>();
            }
            else
            {
                facts.OutstandingSalesOrders = new List <ProductionBackOrder>();
            }

            if ((trigger.ReqtForInternalCustomersBI > 0) || (trigger.ReqtForInternalCustomersGBI > 0))
            {
                var parentAssemblies = this.productionTriggerAssemblyRepository.FilterBy(a => a.Jobref == trigger.Jobref && a.PartNumber == trigger.PartNumber);
                facts.WhereUsedAssemblies = parentAssemblies.ToList().Where(a => a.HasReqt());
            }
            else
            {
                facts.WhereUsedAssemblies = new List <ProductionTriggerAssembly>();
            }

            return(new SuccessResult <ProductionTriggerFacts>(facts));
        }
        public void SetUp()
        {
            var facts = new ProductionTriggerFacts(new ProductionTrigger {
                PartNumber = "KYLEGUARD", Description = "A product", Priority = "1"
            })
            {
                OutstandingWorksOrders = new List <WorksOrder>(),
                OutstandingSalesOrders = new List <ProductionBackOrder>(),
                WhereUsedAssemblies    = new List <ProductionTriggerAssembly>()
            };

            this.ProductionTriggersFacadeService.GetProductionTriggerFacts("CJCAIH", "KYLEGUARD")
            .Returns(new SuccessResult <ProductionTriggerFacts>(facts));

            this.Response = this.Browser.Get(
                "/production/reports/triggers/facts",
                with =>
            {
                with.Header("Accept", "application/json");
                with.Query("jobref", "CJCAIH");
                with.Query("partNumber", "KYLEGUARD");
            }).Result;
        }