diff --git a/server/AyaNova/Controllers/UnitController.cs b/server/AyaNova/Controllers/UnitController.cs
index 5911686c..be5ac1f1 100644
--- a/server/AyaNova/Controllers/UnitController.cs
+++ b/server/AyaNova/Controllers/UnitController.cs
@@ -62,6 +62,33 @@ namespace AyaNova.Api.Controllers
return CreatedAtAction(nameof(UnitController.GetUnit), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o));
}
+ ///
+ /// Customer Create Unit
+ ///
+ ///
+ /// From route path
+ /// Id of newly created Unit or error response
+ [HttpPost("customerunit")]
+ public async Task CustomerPostUnit([FromBody] CustomerPostUnit newObject, ApiVersion apiVersion)
+ {
+ if (!serverState.IsOpen)
+ return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
+ UnitBiz biz = UnitBiz.GetBiz(ct, HttpContext);
+ var customerEffectiveRights = await UserBiz.CustomerUserEffectiveRightsAsync(biz.UserId);
+ if (!customerEffectiveRights.CreateUnit)
+ {
+ return StatusCode(403, new ApiNotAuthorizedResponse());
+ }
+
+ if (!ModelState.IsValid)
+ return BadRequest(new ApiErrorResponse(ModelState));
+ long? o = await biz.CustomerCreateAsync(newObject);
+ if (o == null)
+ return BadRequest(new ApiErrorResponse(biz.Errors));
+ else
+ return Ok(ApiOkResponse.Response(o));
+ }
+
///
/// Get Unit
///
@@ -348,7 +375,7 @@ namespace AyaNova.Api.Controllers
}
}
- return Ok(ApiOkResponse.Response(new{contract=retContract,IsMetered=UnitInfo.Metered}));
+ return Ok(ApiOkResponse.Response(new { contract = retContract, IsMetered = UnitInfo.Metered }));
}
diff --git a/server/AyaNova/biz/UnitBiz.cs b/server/AyaNova/biz/UnitBiz.cs
index f0d4af3b..7096dff9 100644
--- a/server/AyaNova/biz/UnitBiz.cs
+++ b/server/AyaNova/biz/UnitBiz.cs
@@ -60,6 +60,35 @@ namespace AyaNova.Biz
}
}
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ //CREATE (Customer version)
+ //
+ internal async Task CustomerCreateAsync(CustomerPostUnit postObject)
+ {
+
+
+ Unit newObject=new Unit();
+ newObject.Serial=postObject.Serial;
+ newObject.Description=postObject.Description;
+ newObject.CustomerId=postObject.CustomerId;
+ newObject.UnitModelId=postObject.UnitModelId;
+ await ValidateAsync(newObject, null);
+ if (HasErrors)
+ return null;
+ else
+ {
+ newObject.Tags = TagBiz.NormalizeTags(newObject.Tags);
+ newObject.CustomFields = JsonUtil.CompactJson(newObject.CustomFields);
+ await ct.Unit.AddAsync(newObject);
+ await ct.SaveChangesAsync();
+ await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, newObject.Id, BizType, AyaEvent.Created), ct);
+ await SearchIndexAsync(newObject, true);
+ await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, newObject.Tags, null);
+ await HandlePotentialNotificationEvent(AyaEvent.Created, newObject);
+ return newObject.Id;
+ }
+ }
+
////////////////////////////////////////////////////////////////////////////////////////////////
//GET
//
diff --git a/server/AyaNova/models/Unit.cs b/server/AyaNova/models/Unit.cs
index dfded60f..6e437252 100644
--- a/server/AyaNova/models/Unit.cs
+++ b/server/AyaNova/models/Unit.cs
@@ -112,6 +112,20 @@ namespace AyaNova.Models
}//eoc
+
+
+ //DTO object used when Customer posts a new unit of their own when using CSR form
+ public class CustomerPostUnit
+ {
+ [Required]
+ public string Serial { get; set; }
+ [Required]
+ public long CustomerId { get; set; }
+ public long? UnitModelId { get; set; }
+ public string Description { get; set; }
+ }//eoc
+
+
}//eons
/*