public async Task ShowShiftOrder(int? orderId) { var order = _dataManagersFactory.GetDataManager<Order>().GetDocument(orderId); var madeForm = new ShiftsOrderForm(_controllersFactory); var task = new Task(() => { var topParentId = order.DrawingId; var techRoutes = _dataManagersFactory.GetDataManager<TechRoute>().GetListCollection(); var shifts = _dataManagersFactory.GetDataManager<BillInnerShift>().GetListCollection(); var dm = _dataManagersFactory.GetFilteredDrawingsByContainsId(topParentId); var header = _dataManagersFactory.GetDataManager<Drawing>().GetDocument(topParentId); var drawings = dm.GetListCollection(); var taskCreateHierarchy = new Task<List<HierarchyNumberDrawing>>(() => { var hierarchy = CreateHierarchyNumbers(drawings, header); return hierarchy.OrderBy(x => x.HierarchyNumber, new HierarchyNumberDrawingComparer()).ToList(); }); taskCreateHierarchy.Start(); var listMaded = new List<MadeDrawingByTechOper>(); var techOperations = new List<TechOperation>(); foreach (var hierarchyNumberDrawing in drawings.AsParallel()) { var techRoute = techRoutes.FirstOrDefault(x => x.Id == hierarchyNumberDrawing.TechRouteId); if (techRoute != null) { techOperations.AddRange(techRoute.TechOperations); foreach (var techOperation in techRoute.TechOperations) { var shiftsMaded = shifts.Where( x => x.OrderId == orderId && x.NextTechOperationId == techOperation.Id && x.Positions.Any(y => y.DrawingId == hierarchyNumberDrawing.Id)).ToList(); if (shiftsMaded.Any()) { var allPositions = shiftsMaded.Select(x => x.Positions) .Where(x => x != null && x.Count > 0) .Aggregate(new List<PositionTaskToDept>(), (x, y) => { x.AddRange(y); return x; }).ToList(); var maded = new MadeDrawingByTechOper(); maded.Drawing = hierarchyNumberDrawing; maded.TechOperation = techOperation; maded.CountPlaced = allPositions.Where(x => x.DrawingId == hierarchyNumberDrawing.Id) .Sum(x => x.CountDetails); maded.CountProduced = maded.CountPlaced; listMaded.Add(maded); } else { var maded = new MadeDrawingByTechOper { Drawing = hierarchyNumberDrawing, TechOperation = techOperation, CountProduced = 0, CountPlaced = 0 }; listMaded.Add(maded); } } } } taskCreateHierarchy.Wait(); LinkFileInfoToChildrens(taskCreateHierarchy.Result); madeForm.Drawings = taskCreateHierarchy.Result; madeForm.Madeds = listMaded; madeForm.TechRoutes = techRoutes; madeForm.TechOperations = techOperations.Distinct(new ComparerTechOperation()).OrderBy(x => x.OrderInPrint).ToList(); var documentSelectionController = _controllersFactory.GetDocumentSelectionController<TechOperation>(); documentSelectionController.Filter = operation => madeForm.TechOperations.Any(x => x.Id == operation.Id); var visibleTechOpers = documentSelectionController.ShowViewToSelectManyDialog(); madeForm.VisibleTechOperations = visibleTechOpers ?? new List<TechOperation>(); }); task.Start(); await task; madeForm.Show(); }
public async Task PrintMadeOrder(int? orderId) { var order = _dataManagersFactory.GetDataManager<Order>().GetDocument(orderId); var taskSelectedTechOperation = new Task<List<TechOperation>>(() => { var documentSelectionController = _controllersFactory.GetDocumentSelectionController<TechOperation>(); return documentSelectionController.ShowViewToSelectManyDialog(); }); taskSelectedTechOperation.Start(); var task = new Task<bool>(() => { var topParentId = order.DrawingId; var techRoutes = _dataManagersFactory.GetDataManager<TechRoute>().GetListCollection(); var tasks = _dataManagersFactory.GetDataManager<TaskToDistrict>().GetListCollection(); var shifts = _dataManagersFactory.GetDataManager<BillShift>().GetListCollection(); if (taskSelectedTechOperation.IsCompleted && (taskSelectedTechOperation.Result == null || taskSelectedTechOperation.Result.Count == 0)) return false; var dm = _dataManagersFactory.GetFilteredDrawingsByContainsId(topParentId); var header = _dataManagersFactory.GetDataManager<Drawing>().GetDocument(topParentId); if (taskSelectedTechOperation.IsCompleted && (taskSelectedTechOperation.Result == null || taskSelectedTechOperation.Result.Count == 0)) return false; var hierarchy = CreateHierarchyNumbers(dm.GetListCollection(), header); hierarchy = hierarchy.OrderBy(x => x.HierarchyNumber, new HierarchyNumberDrawingComparer()).ToList(); if (taskSelectedTechOperation.IsCompleted && (taskSelectedTechOperation.Result == null || taskSelectedTechOperation.Result.Count == 0)) return false; var listMaded = new List<MadeDrawingByTechOper>(); var selected = taskSelectedTechOperation.Result; foreach (var hierarchyNumberDrawing in hierarchy) { var techRoute = techRoutes.FirstOrDefault(x => x.Id == hierarchyNumberDrawing.TechRouteId); if (techRoute != null) { foreach ( var techOperation in techRoute.TechOperations.Where(x => selected != null && selected.Any(y => y.Id == x.Id)) ) { var taskMaded = tasks.Where( x => x.OrderId == orderId && x.TechOperationId == techOperation.Id && x.Positions.Any(y => y.DrawingId == hierarchyNumberDrawing.Id)).ToList(); if (taskMaded.Any()) { var allPositions = taskMaded.Select(x => x.Positions) .Where(x => x != null && x.Count > 0) .Aggregate(new List<PositionTaskToDept>(), (x, y) => { x.AddRange(y); return x; }).ToList(); var maded = new MadeDrawingByTechOper(); maded.Drawing = hierarchyNumberDrawing; maded.TechOperation = techOperation; maded.CountProduced = allPositions.Where(x => x.DrawingId == hierarchyNumberDrawing.Id) .Sum(x => x.CountProduced); maded.CountPlaced = allPositions.Where(x => x.DrawingId == hierarchyNumberDrawing.Id) .Sum(x => x.CountDetails); listMaded.Add(maded); } else { var maded = new MadeDrawingByTechOper(); maded.Drawing = hierarchyNumberDrawing; maded.TechOperation = techOperation; maded.CountProduced = 0; maded.CountPlaced = 0; listMaded.Add(maded); } } } } if (selected == null || selected.Count == 0) return false; _dataExport.CreateReportMadeOrder(order, hierarchy, listMaded); return true; }); task.Start(); await task; if (task.Result) _dataExport.SaveReport(); }