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 NcFamilyModel 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) { NcShankModel shank = toolsManager.FindShank(dtoTool.ShankId.Value); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); } } using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); // Check option if (!ToolManagerConfig.ShankOptIsActive) { // if option is not active create a shank DTONcShankModel newShank = new DTONcShankModel() { Balluf = 0, MagazinePositionType = 0 }; // Add new shank DTONcShankModel ncShank = ncHandler.AddShank(newShank); // Set tool shank id dtoTool.ShankId = ncShank.Id; } // 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); NcToolModel 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 NcFamilyModel fam = toolsManager.FindFamily(dtoTool.FamilyId); if (fam == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); } using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); // Update DTONcToolModel newTool = ncHandler.UpdateTool(toolId, dtoTool); return Ok(newTool); } } } [Route("tool/{toolId:int}"), HttpDelete] public IHttpActionResult DeleteTool(int toolId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { NcToolModel 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 NcShankModel shank = toolsManager.FindShank(tool.ShankId.Value); ncHandler.DeleteNcShank(shank); } 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 (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); DTONcShankModel shank = ncHandler.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 NcShankModel shank = toolsManager.FindShank(shankId); if (shank == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); // Update shank DTONcShankModel newShank = ncHandler.UpdateShank(shankId, dtoShank); return Ok(newShank); } } } [Route("shank/{shankId:int}"), HttpDelete] public IHttpActionResult DeleteShank(int shankId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if shank exists NcShankModel shank = toolsManager.FindShank(shankId); if (shank == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); ncHandler.DeleteNcShank(shank); 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()) { ncHandler.Connect(); 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 NcFamilyModel family = toolsManager.FindFamily(familyId); if (family == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); // Update into db and NC DTONcFamilyModel newFamily = ncHandler.UpdateFamily(familyId, dtoFamily); return Ok(newFamily); } } } [Route("family/{familyId:int}"), HttpDelete] public IHttpActionResult DeleteFamily(int familyId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Find if exists NcFamilyModel family = toolsManager.FindFamily(familyId); if (family == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); //Delete ncHandler.DeleteNcFamily(family); return Ok(); } } } #endregion Families #region Magazine positions [Route("magazines_positions"), HttpGet] public IHttpActionResult GetMagazinesPositions() { using (NcToolManagerController toolsManager = new NcToolManagerController()) { List magazines = toolsManager.FindPositions(); return Ok(magazines); } } [Route("magazine/{magazineId:int}/positions"), HttpGet] public IHttpActionResult GetMagazinesPositions(byte magazineId) { using (NcToolManagerController toolsManager = new NcToolManagerController()) { List magazine = toolsManager.FindMagazinePositions(magazineId); return Ok(magazine); } } [Route("magazine/{magazineId}/position/{positionId}"), HttpPut] public IHttpActionResult PutMagazinePosition([Required]byte magazineId, [Required]byte positionId, [FromBody]DTONcMagazinesPositionsModel dtoPos) { if (!ModelState.IsValid) return BadRequest(ModelState); using (NcToolManagerController toolsManager = new NcToolManagerController()) { // Check if magazine&position exists NcMagazinePositionModel pos = toolsManager.FindMagazinePosition(magazineId, positionId); if (pos == null) return NotFound(); using (NcHandler ncHandler = new NcHandler()) { pos = ncHandler.UpdateMagazinePosition(pos, dtoPos); return Ok(pos); } } } #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); using (NcToolManagerController toolsManager = new NcToolManagerController()) { NcShankModel shank = toolsManager.FindShank(shankId.ToolId); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); DTONcMagazinesPositionsModel magPos = ncHandler.LoadToolInMagazine(magazineId, positionId, shank); return Ok(magPos); } } } [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); using (NcToolManagerController toolsManager = new NcToolManagerController()) { NcShankModel shank = toolsManager.FindShank(shankId.ToolId); if (shank == null) return BadRequest(API_ERROR_KEYS.INCORRECT_PARAMETERS); using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); DTONcShankModel responseShank = ncHandler.UnloadToolInMagazine(magazineId, positionId, shank); return Ok(responseShank); } } } } }