diff --git a/server/AyaNova/Controllers/PartController.cs b/server/AyaNova/Controllers/PartController.cs index d74dbd33..7328d8ea 100644 --- a/server/AyaNova/Controllers/PartController.cs +++ b/server/AyaNova/Controllers/PartController.cs @@ -317,6 +317,25 @@ namespace AyaNova.Api.Controllers if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return Ok(ApiOkResponse.Response(o)); } + + /// + /// Get list for accounting integrations + /// + /// NameIdActiveChargeCost list + [HttpGet("accounting-list")] + public async Task GetAccountingList() + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + PartBiz biz = PartBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + var o = await biz.GetNameIdActiveChargeCostItemsAsync(); + if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + return Ok(ApiOkResponse.Response(o)); + } //------------ diff --git a/server/AyaNova/Controllers/ServiceRateController.cs b/server/AyaNova/Controllers/ServiceRateController.cs index 743264af..9cef2f34 100644 --- a/server/AyaNova/Controllers/ServiceRateController.cs +++ b/server/AyaNova/Controllers/ServiceRateController.cs @@ -118,7 +118,7 @@ namespace AyaNova.Api.Controllers ServiceRateBiz biz = ServiceRateBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); - var o = await biz.PutAsync(updatedObject); + var o = await biz.PutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) @@ -169,6 +169,24 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(o)); } + /// + /// Get list for accounting integrations + /// + /// NameIdActiveChargeCost list + [HttpGet("accounting-list")] + public async Task GetAccountingList() + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + ServiceRateBiz biz = ServiceRateBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + var o = await biz.GetNameIdActiveChargeCostItemsAsync(); + if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + return Ok(ApiOkResponse.Response(o)); + } //------------ diff --git a/server/AyaNova/Controllers/TravelRateController.cs b/server/AyaNova/Controllers/TravelRateController.cs index 1f2dc952..ea541860 100644 --- a/server/AyaNova/Controllers/TravelRateController.cs +++ b/server/AyaNova/Controllers/TravelRateController.cs @@ -118,7 +118,7 @@ namespace AyaNova.Api.Controllers TravelRateBiz biz = TravelRateBiz.GetBiz(ct, HttpContext); if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); - var o = await biz.PutAsync(updatedObject); + var o = await biz.PutAsync(updatedObject); if (o == null) { if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) @@ -150,7 +150,7 @@ namespace AyaNova.Api.Controllers } - /// + /// /// Get prior rate Units entered /// /// list of Units @@ -169,6 +169,24 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(o)); } + /// + /// Get list for accounting integrations + /// + /// NameIdActiveChargeCost list + [HttpGet("accounting-list")] + public async Task GetAccountingList() + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + TravelRateBiz biz = TravelRateBiz.GetBiz(ct, HttpContext); + if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + var o = await biz.GetNameIdActiveChargeCostItemsAsync(); + if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + return Ok(ApiOkResponse.Response(o)); + } //------------ diff --git a/server/AyaNova/biz/PartBiz.cs b/server/AyaNova/biz/PartBiz.cs index 470917e8..994d3358 100644 --- a/server/AyaNova/biz/PartBiz.cs +++ b/server/AyaNova/biz/PartBiz.cs @@ -60,38 +60,6 @@ namespace AyaNova.Biz } } - // //////////////////////////////////////////////////////////////////////////////////////////////// - // //DUPLICATE - // // - // internal async Task DuplicateAsync(long id) - // { - // Part dbObject = await GetAsync(id, false); - // if (dbObject == null) - // { - // AddError(ApiErrorCode.NOT_FOUND, "id"); - // return null; - // } - // Part newObject = new Part(); - // CopyObject.Copy(dbObject, newObject, "Wiki"); - // string newUniqueName = string.Empty; - // bool NotUnique = true; - // long l = 1; - // do - // { - // newUniqueName = Util.StringUtil.UniqueNameBuilder(dbObject.Name, l++, 255); - // NotUnique = await ct.Part.AnyAsync(m => m.Name == newUniqueName); - // } while (NotUnique); - // newObject.Name = newUniqueName; - // newObject.Id = 0; - // newObject.Concurrency = 0; - // await ct.Part.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; - // } //////////////////////////////////////////////////////////////////////////////////////////////// //GET @@ -104,6 +72,14 @@ namespace AyaNova.Biz return ret; } + //////////////////////////////////////////////////////////////////////////////////////////////// + //GET LIST FOR QBI MAPPING + // + internal async Task> GetNameIdActiveChargeCostItemsAsync() + { + return await ct.Part.AsNoTracking().Select(x => new NameIdActiveChargeCostItem { Name = x.Name, Id = x.Id, Active = x.Active, Cost = x.Cost, Charge = x.Retail }).OrderBy(x => x.Name).ToListAsync(); + } + //////////////////////////////////////////////////////////////////////////////////////////////// //UPDATE // @@ -694,7 +670,7 @@ namespace AyaNova.Biz } - + //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/server/AyaNova/biz/ServiceRateBiz.cs b/server/AyaNova/biz/ServiceRateBiz.cs index 22d540c7..b6fd9aef 100644 --- a/server/AyaNova/biz/ServiceRateBiz.cs +++ b/server/AyaNova/biz/ServiceRateBiz.cs @@ -196,6 +196,14 @@ namespace AyaNova.Biz return await ct.ServiceRate.AsNoTracking().Select(x => x.Unit).Where(x => x != null).Distinct().OrderBy(x => x).ToListAsync(); } + //////////////////////////////////////////////////////////////////////////////////////////////// + //GET LIST FOR QBI MAPPING + // + internal async Task> GetNameIdActiveChargeCostItemsAsync() + { + return await ct.ServiceRate.AsNoTracking().Select(x => new NameIdActiveChargeCostItem { Name = x.Name, Id = x.Id, Active = x.Active, Cost = x.Cost, Charge = x.Charge }).OrderBy(x => x.Name).ToListAsync(); + } + //////////////////////////////////////////////////////////////////////////////////////////////// //SEARCH // diff --git a/server/AyaNova/biz/TravelRateBiz.cs b/server/AyaNova/biz/TravelRateBiz.cs index 0b360118..ad14cdaf 100644 --- a/server/AyaNova/biz/TravelRateBiz.cs +++ b/server/AyaNova/biz/TravelRateBiz.cs @@ -196,6 +196,14 @@ namespace AyaNova.Biz return await ct.TravelRate.AsNoTracking().Select(x => x.Unit).Where(x => x != null).Distinct().OrderBy(x => x).ToListAsync(); } + //////////////////////////////////////////////////////////////////////////////////////////////// + //GET LIST FOR QBI MAPPING + // + internal async Task> GetNameIdActiveChargeCostItemsAsync() + { + return await ct.TravelRate.AsNoTracking().Select(x => new NameIdActiveChargeCostItem { Name = x.Name, Id = x.Id, Active = x.Active, Cost = x.Cost, Charge = x.Charge }).OrderBy(x => x.Name).ToListAsync(); + } + //////////////////////////////////////////////////////////////////////////////////////////////// //SEARCH // diff --git a/server/AyaNova/models/dto/NameIdActiveChargeCostItem.cs b/server/AyaNova/models/dto/NameIdActiveChargeCostItem.cs new file mode 100644 index 00000000..444a1d25 --- /dev/null +++ b/server/AyaNova/models/dto/NameIdActiveChargeCostItem.cs @@ -0,0 +1,13 @@ +namespace AyaNova.Models +{ + //Used by QBI for part and service /travel rate lists for caching and mapping + public class NameIdActiveChargeCostItem + { + public long Id { get; set; } + public string Name { get; set; } + public bool Active { get; set; } + public decimal Cost { get; set; } + public decimal Charge { get; set; } + } + +}