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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
+ 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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 @@
+