From fbaeebb384f6980bdae4a0d3f9f3a4e93e51a46d Mon Sep 17 00:00:00 2001 From: Lucio Maranta Date: Fri, 25 Jan 2019 11:54:06 +0100 Subject: [PATCH] Added maxRight/Left --- .../Controllers/NcToolManagerController.cs | 34 ++++++++++++++++--- .../DTOModels/ToolModels/DTONcShankModel.cs | 4 +++ Step.NC/NcHandler.cs | 8 ++--- 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/Step.Database/Controllers/NcToolManagerController.cs b/Step.Database/Controllers/NcToolManagerController.cs index d286e847..f42a6403 100644 --- a/Step.Database/Controllers/NcToolManagerController.cs +++ b/Step.Database/Controllers/NcToolManagerController.cs @@ -142,8 +142,8 @@ namespace Step.Database.Controllers .Shanks .Include("Tools") .ToList(); - - // Populate db shanks + + // Populate dto shanks List dtoShanks = dbShanks .Select(x => (DTONcShankModel)x) .ToList(); @@ -151,6 +151,23 @@ namespace Step.Database.Controllers return dtoShanks; } + public List GetShanksWithSpace() + { + // Populate nks + List dtoShanks = GetShanks(); + + // Calculate & set space occupied for each shank + foreach(var shank in dtoShanks) + { + GetShankMaxSpaceOccupied(shank.Id, out int maxRight, out int maxLeft); + + shank.MaxRight = maxRight; + shank.MaxLeft = maxLeft; + } + + return dtoShanks; + } + public DTONcShankModel GetShank(int shankId) { // Get shank from database @@ -183,6 +200,15 @@ namespace Step.Database.Controllers .ToList(); } + public void GetShankMaxSpaceOccupied(int shankId, out int maxRight, out int maxLeft) + { + // Get families + List families = FindFamiliesByShankId(shankId); + // Find max + maxRight = families.Max(x => x.RightSize); + maxLeft = families.Max(x => x.LeftSize); + } + public List GetMagazinePositions(byte magId) { // Get only magazine positions that match with magazineId @@ -214,7 +240,7 @@ namespace Step.Database.Controllers public List GetMountedShanks(int magazineId) { - List dtoShanks = GetShanks() + List dtoShanks = GetShanksWithSpace() .Where(x => x.MagazineId != null) .ToList(); @@ -232,7 +258,7 @@ namespace Step.Database.Controllers public List GetAvailableShanks() { - List dtoShanks = GetShanks() + List dtoShanks = GetShanksWithSpace() .Where(x => x.MagazineId == null) .ToList(); diff --git a/Step.Model/DTOModels/ToolModels/DTONcShankModel.cs b/Step.Model/DTOModels/ToolModels/DTONcShankModel.cs index 03ce7fc5..613d7ffb 100644 --- a/Step.Model/DTOModels/ToolModels/DTONcShankModel.cs +++ b/Step.Model/DTOModels/ToolModels/DTONcShankModel.cs @@ -46,6 +46,10 @@ namespace Step.Model.DTOModels.ToolModels [Range(1, ushort.MaxValue)] public int? OriginPositionId { get; set; } + + public int MaxLeft { get; set; } + + public int MaxRight { get; set; } public List ChildsTools { get; set; } diff --git a/Step.NC/NcHandler.cs b/Step.NC/NcHandler.cs index fb7f2f66..af5bc3d7 100644 --- a/Step.NC/NcHandler.cs +++ b/Step.NC/NcHandler.cs @@ -2324,11 +2324,9 @@ namespace Step.NC if (toolAlreadyMounted != null) return MAGAZINE_POSITION_OCCUPIED_ERROR; - List families = toolsManager.FindFamiliesByShankId(shankToBeLoaded.ShankId); - - int maxRight = families.Max(x => x.RightSize); - int maxLeft = families.Max(x => x.LeftSize); - + // Get shank occupied space + toolsManager.GetShankMaxSpaceOccupied(shankToBeLoaded.ShankId, out int maxRight, out int maxLeft); + // Check if tool can fit in the position considering other tools foreach (var mountedTool in magazineMountedTools) {