From 8aed8dc8ba7553b6bd1c460fb820ec3fb53c8669 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 18 Nov 2021 19:10:38 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- .../Controllers/WorkOrderController.cs | 25 +++++ server/AyaNova/biz/BizRoles.cs | 10 +- server/AyaNova/biz/UserBiz.cs | 2 +- server/AyaNova/biz/WorkOrderBiz.cs | 92 ++++++++++++++++++- 5 files changed, 122 insertions(+), 9 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 1871b4f7..81598112 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -55,7 +55,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", - "AYANOVA_SERVER_TEST_MODE": "true", + "AYANOVA_SERVER_TEST_MODE": "false", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-8", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_14\\bin\\" diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs index c579ed1f..313082d3 100644 --- a/server/AyaNova/Controllers/WorkOrderController.cs +++ b/server/AyaNova/Controllers/WorkOrderController.cs @@ -98,6 +98,31 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(o)); } + /// + /// Get WorkOrder for customer + /// + /// + /// Customer WorkOrder + [HttpGet("customer/{id}")] + public async Task GetCustomerWorkOrder([FromRoute] long id) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + // if (!Authorized.HasReadFullRole(HttpContext.Items, biz.BizType)) + // return StatusCode(403, new ApiNotAuthorizedResponse()); + + //does this user have the right to even fetch a customer view workorder?? + + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + var o = await biz.WorkOrderGetForCustomerAsync(id, true); + if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); + return Ok(ApiOkResponse.Response(o)); + } + + /// /// Update WorkOrder diff --git a/server/AyaNova/biz/BizRoles.cs b/server/AyaNova/biz/BizRoles.cs index 03f3925c..48c10492 100644 --- a/server/AyaNova/biz/BizRoles.cs +++ b/server/AyaNova/biz/BizRoles.cs @@ -430,7 +430,7 @@ namespace AyaNova.Biz { Change = AuthorizationRoles.BizAdmin | AuthorizationRoles.Service | AuthorizationRoles.Tech | AuthorizationRoles.SubContractor | AuthorizationRoles.Accounting, ReadFullRecord = AuthorizationRoles.BizAdminRestricted | AuthorizationRoles.ServiceRestricted | AuthorizationRoles.Sales | - AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted | AuthorizationRoles.CustomerRestricted | AuthorizationRoles.Customer, + AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted, Select = AuthorizationRoles.All }); @@ -441,7 +441,7 @@ namespace AyaNova.Biz { Change = AuthorizationRoles.BizAdmin | AuthorizationRoles.Service | AuthorizationRoles.Tech | AuthorizationRoles.SubContractor | AuthorizationRoles.Accounting, ReadFullRecord = AuthorizationRoles.BizAdminRestricted | AuthorizationRoles.ServiceRestricted | AuthorizationRoles.Sales | - AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted | AuthorizationRoles.CustomerRestricted | AuthorizationRoles.Customer, + AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted, Select = AuthorizationRoles.All }); @@ -452,7 +452,7 @@ namespace AyaNova.Biz { Change = AuthorizationRoles.BizAdmin | AuthorizationRoles.Service | AuthorizationRoles.Tech | AuthorizationRoles.SubContractor | AuthorizationRoles.Accounting, ReadFullRecord = AuthorizationRoles.BizAdminRestricted | AuthorizationRoles.ServiceRestricted | AuthorizationRoles.Sales | - AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted | AuthorizationRoles.CustomerRestricted | AuthorizationRoles.Customer, + AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted , Select = AuthorizationRoles.All }); @@ -463,7 +463,7 @@ namespace AyaNova.Biz { Change = AuthorizationRoles.BizAdmin | AuthorizationRoles.Service | AuthorizationRoles.Tech | AuthorizationRoles.TechRestricted | AuthorizationRoles.SubContractor | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.Accounting, ReadFullRecord = AuthorizationRoles.BizAdminRestricted | AuthorizationRoles.ServiceRestricted | AuthorizationRoles.Sales | - AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted | AuthorizationRoles.CustomerRestricted | AuthorizationRoles.Customer, + AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted , Select = AuthorizationRoles.All }); @@ -471,7 +471,7 @@ namespace AyaNova.Biz { Change = AuthorizationRoles.BizAdmin | AuthorizationRoles.Service | AuthorizationRoles.Tech | AuthorizationRoles.Accounting, ReadFullRecord = AuthorizationRoles.BizAdminRestricted | AuthorizationRoles.ServiceRestricted | AuthorizationRoles.Sales | - AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted | AuthorizationRoles.CustomerRestricted | AuthorizationRoles.Customer, + AuthorizationRoles.SalesRestricted | AuthorizationRoles.SubContractorRestricted | AuthorizationRoles.TechRestricted, Select = AuthorizationRoles.All }); diff --git a/server/AyaNova/biz/UserBiz.cs b/server/AyaNova/biz/UserBiz.cs index 0347e765..a16ba0d3 100644 --- a/server/AyaNova/biz/UserBiz.cs +++ b/server/AyaNova/biz/UserBiz.cs @@ -107,7 +107,7 @@ namespace AyaNova.Biz } } - internal static async Task CustomerUserEffectiveRightsAsync(long userId) + internal static async Task CustomerUserEffectiveRightsAsync(long userId, long? workorderId=null) { using (AyContext ct = ServiceProviderProvider.DBContext) { diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index f1c25107..36ecef30 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -302,6 +302,94 @@ namespace AyaNova.Biz return ret; } + + //////////////////////////////////////////////////////////////////////////////////////////////// + // GET + // + internal async Task WorkOrderGetForCustomerAsync(long id, bool populateDisplayFields, bool logTheGetEvent = true, bool populateForReporting = false) + { + throw new System.NotImplementedException(); + + // var ret = await WorkOrderGetFullAsync(id); + + // if (ret != null) + // { + // var stat = await GetCurrentWorkOrderStatusFromRelatedAsync(BizType, ret.Id); + // ret.IsLockedAtServer = stat.Locked; + + // var userIsTechRestricted = UserIsTechRestricted; + // var userIsSubContractorFull = UserIsSubContractorFull; + // var userIsSubContractorRestricted = UserIsSubContractorRestricted; + // var userIsRestricted = (userIsTechRestricted || userIsSubContractorFull || userIsSubContractorRestricted); + + + // if (userIsRestricted) + // { + // //Restricted users can only work with workorder items they are scheduled on + + // List removeItems = new List(); + // //gather list of items to remove by checking if they are scheduled on them or not + // foreach (WorkOrderItem wi in ret.Items) + // { + // var userIsSelfScheduledOnThisItem = false; + // foreach (WorkOrderItemScheduledUser su in wi.ScheduledUsers) + // { + // if (su.UserId == UserId) + // { + // userIsSelfScheduledOnThisItem = true; + // break; + // } + // } + // if (!userIsSelfScheduledOnThisItem) removeItems.Add(wi); + // } + // foreach (var removeitem in removeItems) + // { + // ret.Items.Remove(removeitem); + // ret.IsCompleteRecord = false; + // } + + // //Restricted users may have further restrictions + // foreach (WorkOrderItem wi in ret.Items) + // { + // //all restricted types + // wi.ScheduledUsers.RemoveAll(x => x.UserId != UserId); + // wi.Labors.RemoveAll(x => x.UserId != UserId); + // wi.Travels.RemoveAll(x => x.UserId != UserId); + + // if (userIsTechRestricted) + // { + // wi.Expenses.RemoveAll(x => x.UserId != UserId); + // } + + // if (userIsSubContractorFull) + // { + // wi.Expenses.RemoveAll(x => true); + // wi.OutsideServices.RemoveAll(x => true); + // } + + // if (userIsSubContractorRestricted) + // { + // wi.Units.RemoveAll(x => true); + // wi.Parts.RemoveAll(x => true); + // wi.PartRequests.RemoveAll(x => true); + // wi.Expenses.RemoveAll(x => true); + // wi.Loans.RemoveAll(x => true); + // wi.OutsideServices.RemoveAll(x => true); + // } + + // //tasks are allowed to be viewed and update the task completion types + // } + // } + + // if (populateDisplayFields) + // await WorkOrderPopulateVizFields(ret, false, populateForReporting); + + // if (logTheGetEvent && ret != null) + // await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Retrieved), ct); + // } + // return ret; + } + //////////////////////////////////////////////////////////////////////////////////////////////// //UPDATE // @@ -464,9 +552,9 @@ namespace AyaNova.Biz private async Task AutoSetAddressAsync(WorkOrder newObj) { - if(!string.IsNullOrWhiteSpace(newObj.PostAddress) || !string.IsNullOrWhiteSpace(newObj.Address)) + if (!string.IsNullOrWhiteSpace(newObj.PostAddress) || !string.IsNullOrWhiteSpace(newObj.Address)) return; - + if (newObj.CustomerId == 0) return;