using Step.Database.Controllers; using Step.Model.DatabaseModels; using Step.Model.DTOModels.ToolModels; using Step.NC; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Web.Http; using static CMS_CORE_Library.DataStructures; using static Step.Config.ServerConfig; using static Step.Model.Constants; namespace Step.Controllers.WebApi { [RoutePrefix("api/tool_manager/nc")] public class NcToolManagerApiController : ApiController { #region Tools [Route("tools"), HttpGet] public IHttpActionResult GetNcToolTable() { using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.GetToolsData(out List tools); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(tools); } } [Route("tool"), HttpPost] public IHttpActionResult AddTool([FromBody][Required]DTONewNcToolModel dtoTool) { if (!ModelState.IsValid) return BadRequest(ModelState); using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if family exists DbNcFamilyModel fam = toolsManager.FindFamily(dtoTool.FamilyId); if (fam == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // If option is active check if shank exists if (ToolManagerConfig.ShankOptIsActive) { DbNcShankModel shank = toolsManager.FindShankWithTools(dtoTool.ShankId.Value); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); } else { // If option is not active create a shank DTONewNcShankModel newShank = new DTONewNcShankModel() { Balluf = 0, MagazinePositionType = 0 }; // Create a new shank DbNcShankModel ncShank = toolsManager.AddShank(newShank); // Connect tool to new shank dtoTool.ShankId = ncShank.ShankId; } } using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); // Add tool DTONcToolModel newTool = ncHandler.AddTool(dtoTool); return Ok(newTool); } } [Route("tool/{toolId:int}"), HttpPut] public IHttpActionResult PutTool(int toolId, [FromBody][Required]DTONewNcToolModel dtoTool) { if (!ModelState.IsValid) return BadRequest(ModelState); DbNcToolModel tool = null; using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if tool exists tool = toolsManager.FindTool(toolId); if (tool == null) return NotFound(); if (tool.FamilyId != dtoTool.FamilyId) { // Check if family exists DbNcFamilyModel fam = toolsManager.FindFamily(dtoTool.FamilyId); if (fam == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); } using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); // Update CmsError cmsError = ncHandler.UpdateTool(toolId, dtoTool, out DTONcToolModel newTool); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(newTool); } } } [Route("tool/{toolId:int}"), HttpDelete] public IHttpActionResult DeleteTool(int toolId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { DbNcToolModel tool = toolsManager.FindTool(toolId); if (tool == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); if (!ToolManagerConfig.ShankOptIsActive && tool.ShankId != null) { // If option is active find & delete tool shank DbNcShankModel shank = toolsManager.FindShankWithTools(tool.ShankId.Value); CmsError cmsError = ncHandler.DeleteNcShank(shank.ShankId); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); } ncHandler.DeleteNcTool(tool); return Ok(); } } } #endregion Tools #region Shanks [Route("shanks"), HttpGet] public IHttpActionResult GetShanks() { using (NcToolManagerController toolsManager = new NcToolManagerController()) { return Ok(toolsManager.GetShanks()); } } [Route("shank"), HttpPost] public IHttpActionResult AddShank([FromBody][Required] DTONewNcShankModel dtoShank) { if (!ModelState.IsValid) return BadRequest(ModelState); if (!ToolManagerConfig.ShankOptIsActive) return BadRequest(API_ERROR_KEYS.OPTION_NOT_ACTIVE); using (NcToolManagerController toolsManager = new NcToolManagerController()) { DTONcShankModel shank = (DTONcShankModel)toolsManager.AddShank(dtoShank); return Ok(shank); } } [Route("shank/{shankId:int}"), HttpPut] public IHttpActionResult PutShank(int shankId, [FromBody][Required]DTONewNcShankModel dtoShank) { if (!ModelState.IsValid) return BadRequest(ModelState); using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if shank exists DbNcShankModel shank = toolsManager.FindShankWithTools(shankId); if (shank == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { CmsError cmsError = ncHandler.Connect(); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); // Update shank cmsError = ncHandler.UpdateShank(shankId, dtoShank, out DTONcShankModel newShank); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(newShank); } } } [Route("shank/{shankId:int}"), HttpDelete] public IHttpActionResult DeleteShank(int shankId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if shank exists DbNcShankModel shank = toolsManager.FindShankWithTools(shankId); if (shank == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { CmsError cmsError = ncHandler.Connect(); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); cmsError = ncHandler.DeleteNcShank(shank.ShankId); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(); } } } #endregion Shanks #region Families [Route("family"), HttpPost] public IHttpActionResult AddFamily([FromBody][Required]DTONewNcFamilyModel dtoFamily) { if (!ModelState.IsValid) return BadRequest(ModelState); using (NcHandler ncHandler = new NcHandler()) { CmsError cmsError = ncHandler.Connect(); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); DTONcFamilyModel newFamily = ncHandler.AddFamily(dtoFamily); return Ok(newFamily); } } [Route("families"), HttpGet] public IHttpActionResult GetFamilies() { using (NcToolManagerController toolsManager = new NcToolManagerController()) { List families = toolsManager.GetFamilies(); return Ok(families); } } [Route("family/{familyId:int}"), HttpPut] public IHttpActionResult PutFamily(int familyId, [FromBody][Required]DTONewNcFamilyModel dtoFamily) { if (!ModelState.IsValid) return BadRequest(ModelState); using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if family exists DbNcFamilyModel family = toolsManager.FindFamily(familyId); if (family == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { CmsError cmsError = ncHandler.Connect(); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); // Update into db and NC cmsError = ncHandler.UpdateFamily(familyId, dtoFamily, out DTONcFamilyModel newFamily); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(newFamily); } } } [Route("family/{familyId:int}"), HttpDelete] public IHttpActionResult DeleteFamily(int familyId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Find if exists DbNcFamilyModel family = toolsManager.FindFamily(familyId); if (family == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { CmsError cmsError = ncHandler.Connect(); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); //Delete cmsError = ncHandler.DeleteNcFamily(family); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(); } } } #endregion Families #region Magazine positions [Route("magazines_positions"), HttpGet] public IHttpActionResult GetMagazinesPositions() { using (NcToolManagerController toolsManager = new NcToolManagerController()) { List magazines = toolsManager.FindMagazinesPositions(); return Ok(magazines); } } [Route("magazine/{magazineId:int}/positions"), HttpGet] public IHttpActionResult GetMagazinesPositions(byte magazineId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { List magazine = toolsManager.GetMagazinePositions(magazineId); return Ok(magazine); } } [Route("magazine/{magazineId}/position/{positionId}"), HttpPut] public IHttpActionResult PutMagazinePosition([Required]byte magazineId, [Required]byte positionId, [FromBody]DTONcMagazinePositionModel dtoPos) { if (!ModelState.IsValid) return BadRequest(ModelState); using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if magazine&position exists DbNcMagazinePositionModel pos = toolsManager.FindMagazinePosition(magazineId, positionId); if (pos == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.UpdateMagazinePosition(pos, dtoPos, out DTONcMagazinePositionModel newPos); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(newPos); } } } #endregion Magazine positions [Route("magazine/{magazineId:int}/mounted_shanks"), HttpGet] public IHttpActionResult GetMagazineTools(byte magazineId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if magazine exists List pos = toolsManager.FindMagazinePositions(magazineId); if (pos.Count <= 0) return NotFound(); List mountedShank = toolsManager.GetMountedShanks(magazineId); return Ok(mountedShank); } } [Route("magazine/available_shanks"), HttpGet] public IHttpActionResult GetAvailableTools() { using (NcToolManagerController toolsManager = new NcToolManagerController()) { List shanks = toolsManager.GetAvailableShanks(); return Ok(shanks); } } [Route("magazine/{magazineId:int}/load/position/{positionId:int}"), HttpPut] public IHttpActionResult LoadToolInToMagazine(byte magazineId, byte positionId, [FromBody][Required] DTOUpdateMagazineModel shankId) { if (!ModelState.IsValid) return BadRequest(ModelState); if (shankId.ToolId == 0) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // Check data DbNcShankModel shank; using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if shank exists shank = toolsManager.FindShankWithTools(shankId.ToolId); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // Check if shank is already loaded somewhere if (shank.MagazineId != null) return BadRequest(API_ERROR_KEYS.TOOL_IS_MOUNTED); // Check if magazine position exists DbNcMagazinePositionModel magPos = toolsManager.FindMagazinePosition(magazineId, positionId); if (magPos == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // Check if the mag pos is disabled if (magPos.Disabled == true) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); using (NcHandler ncHandler = new NcHandler()) { // Get Configuration ncHandler.Connect(); // Check if shank can fit CmsError cmsError = ncHandler.CheckIfShankCanFit( magazineId, positionId, shank // Get mounted tools ); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); } // Update shank data DTONcMagazinePositionModel magazinePos = (DTONcMagazinePositionModel)toolsManager.LoadShankInMagazine(magazineId, positionId, shank); // Set shankId magazinePos.ShankId = shank.ShankId; return Ok(magazinePos); } } [Route("magazine/{magazineId:int}/unload/position/{positionId:int}"), HttpPut] public IHttpActionResult UnloadToolInToMagazine(byte magazineId, byte positionId, [FromBody][Required] DTOUpdateMagazineModel shankId) { if (!ModelState.IsValid) return BadRequest(ModelState); if (shankId.ToolId == 0) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // Check data DbNcShankModel shank; using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if shank exists shank = toolsManager.FindShankWithTools(shankId.ToolId); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // Check if magazine position exists DbNcMagazinePositionModel magPos = toolsManager.FindMagazinePosition(magazineId, positionId); if (magPos == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // Check if the mag pos is disabled if (magPos.Disabled == true) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); // Check if magazine position is not occupied DbNcShankModel shankMounted = toolsManager.FindShanksByPositions(magazineId, positionId); if (shankMounted == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); DTONcMagazinePositionModel magazinePos = (DTONcMagazinePositionModel)toolsManager.UnloadShankInMagazine(magazineId, positionId, shank); return Ok(magazinePos); } } [Route("shank/{shankId:int}/load/tool/{toolId:int}"), HttpPut] public IHttpActionResult LoadToolIntoShank(int shankId, int toolId) { if (!ModelState.IsValid) return BadRequest(ModelState); DbNcToolModel tool; using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if shank exists DbNcShankModel shank = toolsManager.FindShankWithTools(shankId); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); tool = toolsManager.FindTool(toolId); if (tool == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); } using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); DTONcShankModel shank = ncHandler.LoadIntoShank(tool, shankId); return Ok(shank); } } [Route("shank/{shankId:int}/unload/tool/{toolId:int}"), HttpPut] public IHttpActionResult UnloadToolIntoShank(int shankId, int toolId) { if (!ModelState.IsValid) return BadRequest(ModelState); DbNcToolModel tool; using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if shank exists DbNcShankModel shank = toolsManager.FindShankWithTools(shankId); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); tool = toolsManager.FindTool(toolId); if (tool == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); } using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); DTONcShankModel shank = ncHandler.UnloadFromShank(tool); return Ok(shank); } } [Route("start_edit_tooling/{magazineId:int}"), HttpPut] public IHttpActionResult StartEditTooling(int magazineId) { using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.StartEditTooling(magazineId); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(); } } [Route("stop_edit_tooling/{magazineId:int}"), HttpPut] public IHttpActionResult StopEditTooling(int magazineId) { using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); CmsError cmsError = ncHandler.StopEditTooling(magazineId); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(); } } } }