diff --git a/Step.Config/Config/maintenancesConfig.xml b/Step.Config/Config/maintenancesConfig.xml index a8b15265..e59f5331 100644 --- a/Step.Config/Config/maintenancesConfig.xml +++ b/Step.Config/Config/maintenancesConfig.xml @@ -23,7 +23,7 @@ 15/07/2018 13:00 MACHINE_INTERVAL Description - m + mm 1 \ No newline at end of file diff --git a/Step.Config/Config/maintenancesConfigValidator.xsd b/Step.Config/Config/maintenancesConfigValidator.xsd index 111b6bb7..61852034 100644 --- a/Step.Config/Config/maintenancesConfigValidator.xsd +++ b/Step.Config/Config/maintenancesConfigValidator.xsd @@ -63,7 +63,7 @@ - + diff --git a/Step.Database/Controllers/MachinesUsersController.cs b/Step.Database/Controllers/MachinesUsersController.cs index 7f392597..dae8cbe3 100644 --- a/Step.Database/Controllers/MachinesUsersController.cs +++ b/Step.Database/Controllers/MachinesUsersController.cs @@ -30,7 +30,7 @@ namespace Step.Database.Controllers .FirstOrDefault(); } - public MachineUserModel FindById(int id) + public MachineUserModel FindByIdWithData(int id) { return dbCtx .MachinesUsers @@ -60,7 +60,7 @@ namespace Step.Database.Controllers return machine; } - public DTORoleModel GetUserRole(int machineId, int userId) + public DTORoleModel GetUserRoleData(int machineId, int userId) { RoleModel role = dbCtx .MachinesUsers @@ -74,5 +74,18 @@ namespace Step.Database.Controllers Name = role.Name }; } + + public int CompareUsersRole(int firstUserId, int secondUserId, int machineId) + { + MachineUserModel firstUser = FindByUserId(machineId, firstUserId); + MachineUserModel secondUser = FindByUserId(machineId, secondUserId); + + if (firstUser.Role.Level == secondUser.Role.Level) + return 0; + else if (firstUser.Role.Level > secondUser.Role.Level) + return 1; + else + return -1; + } } } \ No newline at end of file diff --git a/Step.Database/Controllers/MaintenancesController.cs b/Step.Database/Controllers/MaintenancesController.cs index f672a22e..d3604d70 100644 --- a/Step.Database/Controllers/MaintenancesController.cs +++ b/Step.Database/Controllers/MaintenancesController.cs @@ -58,7 +58,7 @@ namespace Step.Database.Controllers { CreationDate = DateTime.Now, CounterId = 0, - Interval = newMaint.Interval != null ? (double)newMaint.Interval : 0, + Interval = newMaint.Interval, Deadline = newMaint.Deadline, Description = newMaint.Description, Title = newMaint.Title, @@ -75,7 +75,26 @@ namespace Step.Database.Controllers return dbMaint; } - + + public MaintenanceModel Update(int maintenanceId, DTOUpdateMaintenanceModel newMaint) + { + MaintenanceModel dbMaint = FindById(maintenanceId); + + if(dbMaint != null) + { + dbMaint.Title = newMaint.Title; + dbMaint.Description = newMaint.Description; + dbMaint.Deadline = newMaint.Deadline; + dbMaint.Interval = newMaint.Interval; + dbMaint.UnitOfMeasure = newMaint.UnitOfMeasure; + + // Commit changes + dbCtx.SaveChanges(); + } + + return dbMaint; + } + public void CheckDifferencesFromDbAndXml() { List dbMaintenances = dbCtx @@ -111,7 +130,7 @@ namespace Step.Database.Controllers old.MaintenanceId = x.Id; old.Deadline = x.Deadline; old.Interval = x.Intervall.TotalMinutes; - old.Type = x.Type; + old.Type = (MAINTENANCE_TYPE) Enum.Parse(typeof(MAINTENANCE_TYPE), x.Type); old.CounterId = x.CouterId; old.Description = x.Description; old.UnitOfMeasure = (MAINTENANCE_UNIT_OF_MEASURE)Enum.Parse(typeof(MAINTENANCE_UNIT_OF_MEASURE), x.UnitOfMeasure); @@ -129,7 +148,7 @@ namespace Step.Database.Controllers MaintenanceId = x.Id, Deadline = x.Deadline, Interval = x.Intervall.TotalMinutes, - Type = x.Type, + Type = (MAINTENANCE_TYPE)Enum.Parse(typeof(MAINTENANCE_TYPE), x.Type), CounterId = x.CouterId, CreationDate = DateTime.Now, Description = x.Description, diff --git a/Step.Database/Controllers/UsersController.cs b/Step.Database/Controllers/UsersController.cs index 67c4b31b..4e95b95a 100644 --- a/Step.Database/Controllers/UsersController.cs +++ b/Step.Database/Controllers/UsersController.cs @@ -62,7 +62,7 @@ namespace Step.Database.Controllers // Find user role through machineUser table using (MachinesUsersController machinesUsersControler = new MachinesUsersController()) { - roleModel = machinesUsersControler.GetUserRole(MachineConfig.MachineId, userId); + roleModel = machinesUsersControler.GetUserRoleData(MachineConfig.MachineId, userId); } return new DTOUserModel() // Return DTOUserModel diff --git a/Step.Database/Migrations/201806111536482_InitMigration.Designer.cs b/Step.Database/Migrations/201806120921204_InitMigration.Designer.cs similarity index 92% rename from Step.Database/Migrations/201806111536482_InitMigration.Designer.cs rename to Step.Database/Migrations/201806120921204_InitMigration.Designer.cs index 6483a4fb..bcb21d1f 100644 --- a/Step.Database/Migrations/201806111536482_InitMigration.Designer.cs +++ b/Step.Database/Migrations/201806120921204_InitMigration.Designer.cs @@ -13,7 +13,7 @@ namespace Step.Database.Migrations string IMigrationMetadata.Id { - get { return "201806111536482_InitMigration"; } + get { return "201806120921204_InitMigration"; } } string IMigrationMetadata.Source diff --git a/Step.Database/Migrations/201806111536482_InitMigration.cs b/Step.Database/Migrations/201806120921204_InitMigration.cs similarity index 96% rename from Step.Database/Migrations/201806111536482_InitMigration.cs rename to Step.Database/Migrations/201806120921204_InitMigration.cs index 353d40b9..61f85ae9 100644 --- a/Step.Database/Migrations/201806111536482_InitMigration.cs +++ b/Step.Database/Migrations/201806120921204_InitMigration.cs @@ -76,14 +76,14 @@ namespace Step.Database.Migrations "dbo.maintenance", c => new { - id = c.Int(nullable: false), - intervall = c.Double(nullable: false), + id = c.Int(nullable: false, identity: true), + intervall = c.Double(), deadline = c.DateTime(nullable: false, precision: 0), - type = c.String(unicode: false), + type = c.Int(nullable: false), counter_id = c.Int(nullable: false), title = c.String(unicode: false), description = c.String(unicode: false), - unit_of_measure = c.Int(nullable: false), + unit_of_measure = c.Int(), creation_date = c.DateTime(nullable: false, precision: 0), last_expiration_date = c.DateTime(precision: 0), user_id = c.Int(), diff --git a/Step.Database/Migrations/201806111536482_InitMigration.resx b/Step.Database/Migrations/201806120921204_InitMigration.resx similarity index 56% rename from Step.Database/Migrations/201806111536482_InitMigration.resx rename to Step.Database/Migrations/201806120921204_InitMigration.resx index 30f35672..81fbbc51 100644 --- a/Step.Database/Migrations/201806111536482_InitMigration.resx +++ b/Step.Database/Migrations/201806120921204_InitMigration.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 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 dbo diff --git a/Step.Database/Step.Database.csproj b/Step.Database/Step.Database.csproj index a80b46f3..635e6ee4 100644 --- a/Step.Database/Step.Database.csproj +++ b/Step.Database/Step.Database.csproj @@ -77,9 +77,9 @@ - - - 201806111536482_InitMigration.cs + + + 201806120921204_InitMigration.cs @@ -115,8 +115,8 @@ - - 201806111536482_InitMigration.cs + + 201806120921204_InitMigration.cs diff --git a/Step.Model/Constants.cs b/Step.Model/Constants.cs index 759899ca..259ac72d 100644 --- a/Step.Model/Constants.cs +++ b/Step.Model/Constants.cs @@ -37,10 +37,18 @@ namespace Step.Model public enum MAINTENANCE_UNIT_OF_MEASURE { - m = 0, - M = 1, - D = 2, - H = 3 + mm = 0, + D = 1, + H = 2, + M = 3 + } + + // Maintenances types + public enum MAINTENANCE_TYPE + { + EXP_DATE = 0, + MACHINE_INTERVAL = 1, + TIME_INTERVAL = 2 } public static class NC_VENDOR @@ -141,15 +149,6 @@ namespace Step.Model public const string SOFTKEY_PREFIX_ID = "softkey_"; public const string ALARM_PREFIX = "alarm_"; - // Maintenances types - public static class MAINTENANCES_TYPE - { - public const string MAINT_MACHINE_INTERVAL_TYPE = "MACHINE_INTERVAL"; - public const string MAINT_TIME_INTERVAL_TYPE = "TIME_INTERVAL"; - public const string MAINT_EXPIRATION_DATE_TYPE = "EXP_DATE"; - } - - public static class FUNCTIONALITY_NAMES { public const string GENERAL = "general"; diff --git a/Step.Model/DTOModels/MaintenanceModels/DTOMaintenanceModel.cs b/Step.Model/DTOModels/MaintenanceModels/DTOMaintenanceModel.cs index e5b9369a..72cfbeed 100644 --- a/Step.Model/DTOModels/MaintenanceModels/DTOMaintenanceModel.cs +++ b/Step.Model/DTOModels/MaintenanceModels/DTOMaintenanceModel.cs @@ -1,5 +1,6 @@ using Step.Model.DatabaseModels; using System; +using static Step.Model.Constants; namespace Step.Model.DTOModels.MaintenanceModels { @@ -7,7 +8,7 @@ namespace Step.Model.DTOModels.MaintenanceModels { public int Id { get; set; } - public double Interval { get; set; } + public double? Interval { get; set; } public DateTime Deadline { get; set; } diff --git a/Step.Model/DTOModels/MaintenanceModels/DTONewMaintenanceModel.cs b/Step.Model/DTOModels/MaintenanceModels/DTONewMaintenanceModel.cs index 59d046fc..150e2a93 100644 --- a/Step.Model/DTOModels/MaintenanceModels/DTONewMaintenanceModel.cs +++ b/Step.Model/DTOModels/MaintenanceModels/DTONewMaintenanceModel.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -9,16 +10,36 @@ namespace Step.Model.DTOModels.MaintenanceModels { public class DTONewMaintenanceModel { + [Required] public string Title { get; set; } public string Description { get; set; } + [Range(0, double.MaxValue)] public double? Interval { get; set; } + [Required] public DateTime Deadline { get; set; } - public string Type { get; set; } + [Required] + public MAINTENANCE_TYPE Type { get; set; } - public MAINTENANCE_UNIT_OF_MEASURE UnitOfMeasure { get; set; } + public MAINTENANCE_UNIT_OF_MEASURE? UnitOfMeasure { get; set; } + } + + public class DTOUpdateMaintenanceModel + { + [Required] + public string Title { get; set; } + + public string Description { get; set; } + + [Range(0, double.MaxValue)] + public double? Interval { get; set; } + + [Required] + public DateTime Deadline { get; set; } + + public MAINTENANCE_UNIT_OF_MEASURE? UnitOfMeasure { get; set; } } } diff --git a/Step.Model/DatabaseModels/MaintenanceModel.cs b/Step.Model/DatabaseModels/MaintenanceModel.cs index ead8d2a9..a321a31d 100644 --- a/Step.Model/DatabaseModels/MaintenanceModel.cs +++ b/Step.Model/DatabaseModels/MaintenanceModel.cs @@ -10,18 +10,18 @@ namespace Step.Model.DatabaseModels public class MaintenanceModel { [Key] - [DatabaseGenerated(DatabaseGeneratedOption.None)] + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Column("id")] public int MaintenanceId { get; set; } [Column("intervall")] - public double Interval { get; set; } + public double? Interval { get; set; } [Column("deadline")] public DateTime Deadline { get; set; } [Column("type")] - public string Type { get; set; } + public MAINTENANCE_TYPE Type { get; set; } [Column("counter_id")] public int CounterId { get; set; } @@ -33,7 +33,7 @@ namespace Step.Model.DatabaseModels public string Description { get; set; } [Column("unit_of_measure")] - public MAINTENANCE_UNIT_OF_MEASURE UnitOfMeasure { get; set; } + public MAINTENANCE_UNIT_OF_MEASURE? UnitOfMeasure { get; set; } [Column("creation_date")] public DateTime CreationDate { get; set; } diff --git a/Step.NC/NcHandler.cs b/Step.NC/NcHandler.cs index be4b3139..65d47648 100644 --- a/Step.NC/NcHandler.cs +++ b/Step.NC/NcHandler.cs @@ -391,7 +391,7 @@ namespace Step.NC TimeSpan missingDays = new TimeSpan(); switch (currMaintenance.Type) { - case MAINTENANCES_TYPE.MAINT_MACHINE_INTERVAL_TYPE: + case MAINTENANCE_TYPE.MACHINE_INTERVAL: { // Get matching counter for the current maintenance var counter = counters.Find(x => x.Id == currMaintenance.CounterId); @@ -400,11 +400,11 @@ namespace Step.NC if (performed != null) perfVal = performed.CounterValue; // Calc percentage = PLC - PERFORMED VALUE * 100 / interval - percentage = (counter.Value - perfVal * 100) / SupportFunctions.ConvertInMinutes(currMaintenance.Interval, currMaintenance.UnitOfMeasure); - missingDays = TimeSpan.FromMinutes(counter.Value - perfVal - SupportFunctions.ConvertInMinutes(currMaintenance.Interval, currMaintenance.UnitOfMeasure)); + percentage = (counter.Value - perfVal * 100) / SupportFunctions.ConvertInMinutes(currMaintenance.Interval.Value, currMaintenance.UnitOfMeasure.Value); + missingDays = TimeSpan.FromMinutes(counter.Value - perfVal - SupportFunctions.ConvertInMinutes(currMaintenance.Interval.Value, currMaintenance.UnitOfMeasure.Value)); } break; - case MAINTENANCES_TYPE.MAINT_EXPIRATION_DATE_TYPE: + case MAINTENANCE_TYPE.EXP_DATE: { // Already performed if (performed != null) @@ -416,7 +416,7 @@ namespace Step.NC } } break; - case MAINTENANCES_TYPE.MAINT_TIME_INTERVAL_TYPE: + case MAINTENANCE_TYPE.TIME_INTERVAL: { // Get last performed, default value is maintenance creation date DateTime perfDate = currMaintenance.CreationDate; @@ -429,8 +429,8 @@ namespace Step.NC double minutesPassedFromLastMaint = timePassedFromLastMaint.TotalMinutes; // percentage = Passed minutes since last maintenance * 100 / Interval - percentage = (minutesPassedFromLastMaint * 100) / SupportFunctions.ConvertInMinutes(currMaintenance.Interval, currMaintenance.UnitOfMeasure); - missingDays = TimeSpan.FromMinutes(minutesPassedFromLastMaint - SupportFunctions.ConvertInMinutes(currMaintenance.Interval, currMaintenance.UnitOfMeasure)); + percentage = (minutesPassedFromLastMaint * 100) / SupportFunctions.ConvertInMinutes(currMaintenance.Interval.Value, currMaintenance.UnitOfMeasure.Value); + missingDays = TimeSpan.FromMinutes(minutesPassedFromLastMaint - SupportFunctions.ConvertInMinutes(currMaintenance.Interval.Value, currMaintenance.UnitOfMeasure.Value)); } break; } @@ -444,9 +444,9 @@ namespace Step.NC Description = currMaintenance.Description, Interval = currMaintenance.Interval, LastExpirationDate = currMaintenance.LastExpirationDate, - Type = currMaintenance.Type, + Type = currMaintenance.Type.ToString(), UnitOfMeasure = currMaintenance.UnitOfMeasure.ToString(), - PercentageOfCompletion = (int)percentage, + PercentageOfCompletion = percentage >= 0 ? Convert.ToInt32(percentage) : 100, MissingDays = missingDays, CreatedByCms = currMaintenance.UserId == null }); @@ -481,7 +481,7 @@ namespace Step.NC switch (currMaintenance.Type) { - case MAINTENANCES_TYPE.MAINT_MACHINE_INTERVAL_TYPE: + case MAINTENANCE_TYPE.MACHINE_INTERVAL: { // Get matching counter for the current maintenance var counter = counters.Find(x => x.Id == currMaintenance.CounterId); @@ -491,7 +491,7 @@ namespace Step.NC perfVal = performed.CounterValue; // MAINTENANCE_INTERVAL <= PLC - LASTPERFORMED - if (SupportFunctions.ConvertInMinutes(currMaintenance.Interval, currMaintenance.UnitOfMeasure) <= counter.Value - perfVal) + if (SupportFunctions.ConvertInMinutes(currMaintenance.Interval.Value, currMaintenance.UnitOfMeasure.Value) <= counter.Value - perfVal) { // Update last expiration date if null if (currMaintenance.LastExpirationDate == null) @@ -510,7 +510,7 @@ namespace Step.NC } break; - case MAINTENANCES_TYPE.MAINT_EXPIRATION_DATE_TYPE: + case MAINTENANCE_TYPE.EXP_DATE: { // Already performed if (performed != null) @@ -526,7 +526,7 @@ namespace Step.NC } break; - case MAINTENANCES_TYPE.MAINT_TIME_INTERVAL_TYPE: + case MAINTENANCE_TYPE.TIME_INTERVAL: { // Get last performed, default value is maintenance creation date DateTime perfDate = currMaintenance.CreationDate; @@ -539,13 +539,13 @@ namespace Step.NC double minutesPassedFromLastMaint = timePassedFromLastMaint.TotalMinutes; // Interval - passed minutes since last maintenance - if (SupportFunctions.ConvertInMinutes(currMaintenance.Interval, currMaintenance.UnitOfMeasure) <= minutesPassedFromLastMaint) + if (SupportFunctions.ConvertInMinutes(currMaintenance.Interval.Value, currMaintenance.UnitOfMeasure.Value) <= minutesPassedFromLastMaint) { // Update last expiration date if (currMaintenance.LastExpirationDate == null) { // Exp date = now - ( expiration intervall) - DateTime expirationDate = DateTime.Now.Subtract(TimeSpan.FromMinutes(minutesPassedFromLastMaint - currMaintenance.Interval)); + DateTime expirationDate = DateTime.Now.Subtract(TimeSpan.FromMinutes(minutesPassedFromLastMaint - currMaintenance.Interval.Value)); maintenancesController.UpdateLastExpirationDate(currMaintenance.MaintenanceId, expirationDate); currMaintenance.LastExpirationDate = expirationDate; diff --git a/Step.Utils/supportFunctions.cs b/Step.Utils/supportFunctions.cs index 2164e01c..08613588 100644 --- a/Step.Utils/supportFunctions.cs +++ b/Step.Utils/supportFunctions.cs @@ -65,7 +65,7 @@ namespace Step.Utils { switch (unit) { - case MAINTENANCE_UNIT_OF_MEASURE.m: + case MAINTENANCE_UNIT_OF_MEASURE.mm: return number; case MAINTENANCE_UNIT_OF_MEASURE.H: return number * 60; diff --git a/Step/Attributes/PositiveNumberAttribute.cs b/Step/Attributes/PositiveNumberAttribute.cs new file mode 100644 index 00000000..d3653a5f --- /dev/null +++ b/Step/Attributes/PositiveNumberAttribute.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Step.Attributes +{ + public class PositiveNumberAttribute : ValidationAttribute + { + private double _val; + + public PositiveNumberAttribute(double val) + { + _val = val; + } + + protected override ValidationResult IsValid(object value, ValidationContext validationContext) + { + + + return ValidationResult.Success; + } + } +} diff --git a/Step/Attributes/WebApiAuthorizeAttribute.cs b/Step/Attributes/WebApiAuthorizeAttribute.cs index ba222d40..68369299 100644 --- a/Step/Attributes/WebApiAuthorizeAttribute.cs +++ b/Step/Attributes/WebApiAuthorizeAttribute.cs @@ -60,7 +60,7 @@ namespace Step using (MachinesUsersController machineUsersController = new MachinesUsersController()) { // Find machineUser data and joined to user data, role data, machine data - machineUser = machineUsersController.FindById(session.MachineUserId); + machineUser = machineUsersController.FindByIdWithData(session.MachineUserId); } using (FunctionsAccessController acController = new FunctionsAccessController()) diff --git a/Step/Controllers/WebApi/MaintenanceController.cs b/Step/Controllers/WebApi/MaintenanceController.cs index a180a186..93497fd4 100644 --- a/Step/Controllers/WebApi/MaintenanceController.cs +++ b/Step/Controllers/WebApi/MaintenanceController.cs @@ -1,9 +1,16 @@ using Step.Database.Controllers; +using Step.Model.DatabaseModels; using Step.Model.DTOModels.MaintenanceModels; using Step.NC; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Security.Claims; using System.Web.Http; +using static CMS_CORE_Library.DataStructures; +using static Step.Model.Constants; +using static Step.Config.ServerConfig; namespace Step.Controllers.WebApi { @@ -16,17 +23,86 @@ namespace Step.Controllers.WebApi using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); - ncHandler.GetMaintenances(out List maintenances); + CmsError cmsError = ncHandler.GetMaintenances(out List maintenances); + if (cmsError.IsError()) + return BadRequest(cmsError.localizationKey); + return Ok(maintenances); } } [Route("maintenance"), HttpPost] + + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] public IHttpActionResult AddMaintenance([Required]DTONewMaintenanceModel newMaint) { + if (!ModelState.IsValid) + return BadRequest(ModelState); + + var identity = User.Identity as ClaimsIdentity; + // Find user id from the bearer token + var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); + if (userId == null) + return Unauthorized(); + using (MaintenancesController maintenancesController = new MaintenancesController()) { - return Ok(maintenancesController.Create(newMaint, 1)); + MaintenanceModel dbMaint = maintenancesController.Create(newMaint, Convert.ToInt32(userId.Value)); + + using (NcHandler ncHandler = new NcHandler()) + { + ncHandler.Connect(); + CmsError cmsError = ncHandler.GetMaintenances(out List maintenances); + if (cmsError.IsError()) + return BadRequest(cmsError.localizationKey); + + return Ok(maintenances.Where(x => x.Id == dbMaint.MaintenanceId).FirstOrDefault()); + } + } + } + + [Route("maintenance/{maintenanceId:int}"), HttpPut] + + [WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.USER_FUNCTIONS, Action = ACTIONS.WRITE)] + public IHttpActionResult AddMaintenance(int maintenanceId, [Required]DTOUpdateMaintenanceModel newMaint) + { + if (!ModelState.IsValid) + return BadRequest(ModelState); + + var identity = User.Identity as ClaimsIdentity; + // Find user id from the bearer token + var userId = identity.Claims.Where(c => c.Type == USER_ID_KEY).FirstOrDefault(); + if (userId == null) + return Unauthorized(); + + using (MaintenancesController maintenancesController = new MaintenancesController()) + { + // Check if user can update + MaintenanceModel dbMaint = maintenancesController.FindById(maintenanceId); + if (dbMaint == null) + return NotFound(); + if (dbMaint.UserId == null) + return Unauthorized(); + + using (MachinesUsersController machineUsersController = new MachinesUsersController()) + { + // Check if user can edit the maintenance + int comparision = machineUsersController.CompareUsersRole(Convert.ToInt32(userId.Value), dbMaint.UserId.Value, MachineConfig.MachineId); + if (comparision < 0) + return Unauthorized(); + } + + // Update data + maintenancesController.Update(maintenanceId, newMaint); + using (NcHandler ncHandler = new NcHandler()) + { + ncHandler.Connect(); + CmsError cmsError = ncHandler.GetMaintenances(out List maintenances); + if (cmsError.IsError()) + return BadRequest(cmsError.localizationKey); + + return Ok(maintenances.Where(x => x.Id == dbMaint.MaintenanceId).FirstOrDefault()); + } } } } diff --git a/Step/Step.csproj b/Step/Step.csproj index 4a02a4fb..0096cbf9 100644 --- a/Step/Step.csproj +++ b/Step/Step.csproj @@ -165,6 +165,7 @@ +