示例#1
0
        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();
        }
示例#2
0
        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();
        }