/// <summary> /// Receives the prior items to a given ProductionOrderWorkSchedule /// </summary> /// <param name="productionOrderWorkSchedule"></param> /// <returns>List<ProductionOrderWorkSchedule></returns> public Task <List <ProductionOrderWorkSchedule> > GetFollowerProductionOrderWorkSchedules(ProductionOrderWorkSchedule productionOrderWorkSchedule) { var rs = Task.Run(() => { var priorItems = new List <ProductionOrderWorkSchedule>(); // If == min Hierarchy --> get Pevious Article -> Highest Hierarchy Workschedule Item var maxHierarchy = ProductionOrderWorkSchedules.Where(x => x.ProductionOrderId == productionOrderWorkSchedule.ProductionOrderId) .Max(x => x.HierarchyNumber); if (maxHierarchy == productionOrderWorkSchedule.HierarchyNumber) { // get Previous Article priorItems.AddRange(GetParents(productionOrderWorkSchedule)); } else { // get Previous Workschedule var previousPows = ProductionOrderWorkSchedules.Where( x => x.ProductionOrderId == productionOrderWorkSchedule.ProductionOrderId && x.HierarchyNumber > productionOrderWorkSchedule.HierarchyNumber) .OrderBy(x => x.HierarchyNumber).FirstOrDefault(); priorItems.Add(previousPows); } return(priorItems); }); return(rs); }
/*public ProductionOrder CreateBomForProductionOrder(decimal quantity, ProductionOrder mainProductionOrder) * { * var article = Articles.Include(a => a.ArticleBoms).ThenInclude(c => c.ArticleChild).Single(a => a.Id == mainProductionOrder.ArticleId); * foreach (var item in article.ArticleBoms) * { * var thisQuantity = quantity * item.Quantity; * * var prodOrder = new ProductionOrder * { * ArticleId = item.ArticleChildId, * Name = "Prod. Auftrag: " + article.Name, * Quantity = thisQuantity, * }; * ProductionOrders.Add(prodOrder); * * var prodOrderBom = new ProductionOrderBom * { * Quantity = thisQuantity, * ProductionOrderParentId = mainProductionOrder.Id, * * }; * mainProductionOrder.ProductionOrderBoms.Add(prodOrderBom); * * CreateDemandProductionOrderBom(item.ArticleChildId, thisQuantity); * } * SaveChanges(); * return mainProductionOrder; * }*/ public void CreateProductionOrderWorkSchedules(ProductionOrder productionOrder) { var abstractWorkSchedules = WorkSchedules.Where(a => a.ArticleId == productionOrder.ArticleId).ToList(); foreach (var abstractWorkSchedule in abstractWorkSchedules) { //add specific workSchedule var workSchedule = new ProductionOrderWorkSchedule(); abstractWorkSchedule.CopyPropertiesTo <IWorkSchedule>(workSchedule); workSchedule.ProductionOrderId = productionOrder.Id; workSchedule.MachineId = null; workSchedule.ProducingState = ProducingState.Created; workSchedule.Duration *= (int)productionOrder.Quantity; ProductionOrderWorkSchedules.Add(workSchedule); SaveChanges(); } }
/// <summary> /// returns the Production Order Work Schedules for a given Order /// </summary> /// <param name="orderId"></param> /// <returns></returns> public Task <List <ProductionOrderWorkSchedule> > GetProductionOrderWorkScheduleByOrderId(int orderId) { return(Task.Run(() => { // get the corresponding Order Parts to Order var demands = Demands.OfType <DemandOrderPart>() .Include(x => x.OrderPart) .Where(o => o.OrderPart.OrderId == orderId) .ToList(); // ReSharper Linq var demandboms = demands.SelectMany(demand => Demands.OfType <DemandProductionOrderBom>() .Where(a => a.DemandRequesterId == demand.Id)).ToList(); // get Demand Providers for this Order var demandProviders = new List <DemandProviderProductionOrder>(); foreach (var order in (Demands.OfType <DemandProviderProductionOrder>() .Join(demands, c => c.DemandRequesterId, d => ((IDemandToProvider)d).Id, (c, d) => c))) { demandProviders.Add(order); } var demandBomProviders = (Demands.OfType <DemandProviderProductionOrder>() .Join(demandboms, c => c.DemandRequesterId, d => d.Id, (c, d) => c)).ToList(); // get ProductionOrderWorkSchedule for var pows = ProductionOrderWorkSchedules.Include(x => x.ProductionOrder).Include(x => x.Machine).Include(x => x.MachineGroup).AsNoTracking(); var powDetails = pows.Join(demandProviders, p => p.ProductionOrderId, dp => dp.ProductionOrderId, (p, dp) => p).ToList(); var powBoms = (from p in pows join dbp in demandBomProviders on p.ProductionOrderId equals dbp.ProductionOrderId select p).ToList(); powDetails.AddRange(powBoms); return powDetails; })); }