diff --git a/force-app/main/default/queues/HOT_Tolk_Admin.queue-meta.xml b/force-app/main/default/queues/HOT_Tolk_Admin.queue-meta.xml index f672a4827f..dd3408c7c8 100644 --- a/force-app/main/default/queues/HOT_Tolk_Admin.queue-meta.xml +++ b/force-app/main/default/queues/HOT_Tolk_Admin.queue-meta.xml @@ -1,10 +1,13 @@ - + false HoT Tolk Admin HOT_Request__c + + SMS__c + ServiceAppointment @@ -12,9 +15,9 @@ Task - WorkOrder + Thread__c - Thread__c + WorkOrder - \ No newline at end of file + diff --git a/force-app/main/freelanceCommunity/classes/HOT_WantedSRListControllerTest.cls b/force-app/main/freelanceCommunity/classes/HOT_WantedSRListControllerTest.cls index 3b28eb431e..144f8e5ab8 100644 --- a/force-app/main/freelanceCommunity/classes/HOT_WantedSRListControllerTest.cls +++ b/force-app/main/freelanceCommunity/classes/HOT_WantedSRListControllerTest.cls @@ -254,12 +254,12 @@ private class HOT_WantedSRListControllerTest { WorkType workType = HOT_TestDataFactory.createWorkType(); insert workType; + Test.startTest(); HOT_Request__c request = HOT_TestDataFactory.createRequest('TEST', workType); insert request; WorkOrder workOrder = HOT_TestDataFactory.createWorkOrder(request, workType); insert workOrder; - Test.startTest(); WorkOrderLineItem WorkOrderLineItem = HOT_TestDataFactory.createWorkOrderLineItem(workOrder, workType); insert WorkOrderLineItem; ServiceAppointment ServiceAppointment = HOT_TestDataFactory.createServiceAppointment(WorkOrderLineItem); @@ -282,6 +282,7 @@ private class HOT_WantedSRListControllerTest { insert workOrder2; WorkOrderLineItem WorkOrderLineItem2 = HOT_TestDataFactory.createWorkOrderLineItem(workOrder2, workType); insert WorkOrderLineItem2; + Test.stopTest(); ServiceAppointment ServiceAppointment2 = HOT_TestDataFactory.createServiceAppointment(WorkOrderLineItem2); ServiceAppointment2.EarliestStartTime = Datetime.now().addDays(52); @@ -296,7 +297,6 @@ private class HOT_WantedSRListControllerTest { System.runAs(user1) { List availableSA = HOT_wantedSRListController.checkForOverlap(saToCheck); System.assertEquals(1, availableSA.size(), 'Should return 1 because available sa'); - Test.stopTest(); } } @@ -316,6 +316,7 @@ private class HOT_WantedSRListControllerTest { timezonesidkey = 'Europe/Paris', username = 'HOT_testaccount@nav.hot.no' ); + Test.startTest(); insert user1; ServiceResource resource1 = HOT_TestDataFactory.createServiceResource(user1.Id); insert resource1; @@ -325,7 +326,6 @@ private class HOT_WantedSRListControllerTest { HOT_Request__c request = HOT_TestDataFactory.createRequest('TEST', workType); insert request; - Test.startTest(); WorkOrder workOrder = HOT_TestDataFactory.createWorkOrder(request, workType); insert workOrder; WorkOrderLineItem WorkOrderLineItem = HOT_TestDataFactory.createWorkOrderLineItem(workOrder, workType); @@ -361,6 +361,7 @@ private class HOT_WantedSRListControllerTest { ServiceAppointment2.SchedStartTime = Datetime.now().addDays(52); ServiceAppointment2.SchedEndTime = ServiceAppointment2.SchedStartTime.addHours(4); insert ServiceAppointment2; + Test.stopTest(); List saToCheck = new List(); saToCheck.add(ServiceAppointment2); @@ -369,7 +370,6 @@ private class HOT_WantedSRListControllerTest { List availableSA = HOT_wantedSRListController.checkForOverlap(saToCheck); System.assertEquals(0, availableSA.size(), 'Should return 0 because no available sa'); } - Test.stopTest(); } @IsTest static void hasOverlapTestExisting() { @@ -387,6 +387,7 @@ private class HOT_WantedSRListControllerTest { timezonesidkey = 'Europe/Paris', username = 'HOT_testaccount@nav.hot.no' ); + Test.startTest(); insert user1; ServiceResource resource1 = HOT_TestDataFactory.createServiceResource(user1.Id); insert resource1; @@ -396,7 +397,6 @@ private class HOT_WantedSRListControllerTest { HOT_Request__c request = HOT_TestDataFactory.createRequest('TEST', workType); insert request; - Test.startTest(); WorkOrder workOrder = HOT_TestDataFactory.createWorkOrder(request, workType); insert workOrder; WorkOrderLineItem WorkOrderLineItem = HOT_TestDataFactory.createWorkOrderLineItem(workOrder, workType); @@ -419,6 +419,7 @@ private class HOT_WantedSRListControllerTest { resource1.Id ); insert assignedResource; + Test.stopTest(); HOT_wantedSRListController.Request req = new HOT_wantedSRListController.Request(); req.saID = ServiceAppointment.Id; @@ -445,6 +446,7 @@ private class HOT_WantedSRListControllerTest { timezonesidkey = 'Europe/Paris', username = 'HOT_testaccount@nav.hot.no' ); + Test.startTest(); insert user1; ServiceResource resource1 = HOT_TestDataFactory.createServiceResource(user1.Id); insert resource1; @@ -454,7 +456,6 @@ private class HOT_WantedSRListControllerTest { HOT_Request__c request = HOT_TestDataFactory.createRequest('TEST', workType); insert request; - Test.startTest(); WorkOrder workOrder = HOT_TestDataFactory.createWorkOrder(request, workType); insert workOrder; WorkOrderLineItem WorkOrderLineItem = HOT_TestDataFactory.createWorkOrderLineItem(workOrder, workType); @@ -474,7 +475,7 @@ private class HOT_WantedSRListControllerTest { HOT_wantedSRListController.Request req = new HOT_wantedSRListController.Request(); req.saID = ServiceAppointment.Id; req.srID = resource1.Id; - + Test.stopTest(); List result = HOT_wantedSRListController.checkForOverlapOrExisting( new List{ req } ); diff --git a/force-app/main/notification/classes/HOT_IncomingSMSNotification.cls b/force-app/main/notification/classes/HOT_IncomingSMSNotification.cls index cfd3d5ccf2..4505b77366 100644 --- a/force-app/main/notification/classes/HOT_IncomingSMSNotification.cls +++ b/force-app/main/notification/classes/HOT_IncomingSMSNotification.cls @@ -29,11 +29,7 @@ public with sharing class HOT_IncomingSMSNotification { } Map smsRecords = new Map( - [ - SELECT Account__c, Domain__c, Type__c, Recipient__c, Message__c - FROM SMS__c - WHERE Id IN :smsIds - ] + [SELECT Account__c, Domain__c, Type__c, Recipient__c, Message__c FROM SMS__c WHERE Id IN :smsIds] ); for (SMS__c sms : messages) { diff --git a/force-app/main/notification/classes/HOT_IncomingSMSNotificationTest.cls b/force-app/main/notification/classes/HOT_IncomingSMSNotificationTest.cls index 35f3d88370..3834f67de1 100644 --- a/force-app/main/notification/classes/HOT_IncomingSMSNotificationTest.cls +++ b/force-app/main/notification/classes/HOT_IncomingSMSNotificationTest.cls @@ -15,6 +15,8 @@ private class HOT_IncomingSMSNotificationTest { account.Name = 'Gunnar Gunn Gundersen'; insert account; + TestDataFactory.getPublicGroup('HMS Troms og Finmark', 'group_4719'); + TestDataFactory.getQueue('HMS Troms og Finmark', 'queue_4719', 'SMS__c'); TestDataFactory.getPublicGroup('HMS Oslo', 'group_4703'); TestDataFactory.getQueue('HMS Oslo', 'queue_4703', 'Person__c'); TestDataFactory.getPublicGroup('HMS Trøndelag', 'group_4716'); diff --git a/force-app/main/triggers/classes/HOT_SMSHandler.cls b/force-app/main/triggers/classes/HOT_SMSHandler.cls index a3e5654011..71fbb923bf 100644 --- a/force-app/main/triggers/classes/HOT_SMSHandler.cls +++ b/force-app/main/triggers/classes/HOT_SMSHandler.cls @@ -1,4 +1,7 @@ public without sharing class HOT_SMSHandler extends MyTriggers { + public override void onBeforeInsert() { + routeSMSToQueue((List) records); + } public override void onBeforeUpdate(Map triggerOldMap) { List SMSToChangeOwnerToArchive = new List(); for (SMS__c sms : (List) records) { @@ -18,4 +21,48 @@ public without sharing class HOT_SMSHandler extends MyTriggers { public override void onAfterInsert() { HOT_IncomingSMSNotification.notifyDispatchersOnIncomingSMS((List) records); } + + public void routeSMSToQueue(List messages) { + Set sendersAccountId = new Set(); + for (SMS__c message : messages) { + if (message.Account__c != null) { + sendersAccountId.add(message.Account__c); + } + } + List senders = [ + SELECT Id, CRM_Account__c, INT_RegionNumber__c, INT_MunicipalityNumber__c, CRM_FullName__c + FROM Person__c + WHERE CRM_Account__c IN :sendersAccountId + ]; + List wrappers = new List(); + Integer senderIndex = 0; + + for (Person__c sender : senders) { + SobjectWrapper wrapper = new SobjectWrapper( + senderIndex, + sender.INT_MunicipalityNumber__c, + sender.INT_RegionNumber__c + ); + wrapper.confidential = 'Ugradert'; + wrappers.add(wrapper); + senderIndex++; + } + + Map ruleByPersonId = RecordOwnerService.getQueuesAndNavUnits( + wrappers, + 'Person__c' + ); + + Integer i = 0; + Group adminGroup = [SELECT Id FROM Group WHERE Type = 'Queue' AND DeveloperName = 'HOT_Tolk_Admin' LIMIT 1]; + for (SMS__c sms : messages) { + ApexSharingRuleWrapper rule = ruleByPersonId.get(i); + if (rule == null) { + sms.OwnerId = adminGroup.Id; + } else { + sms.OwnerId = rule.queueId; + i++; + } + } + } } diff --git a/force-app/main/triggers/customMetadata/MyTriggerSetting.HOT_SMS_onBeforeInsert.md-meta.xml b/force-app/main/triggers/customMetadata/MyTriggerSetting.HOT_SMS_onBeforeInsert.md-meta.xml new file mode 100644 index 0000000000..9e28ca7808 --- /dev/null +++ b/force-app/main/triggers/customMetadata/MyTriggerSetting.HOT_SMS_onBeforeInsert.md-meta.xml @@ -0,0 +1,45 @@ + + + + false + + Active__c + true + + + ClassNamespacePrefix__c + + + + Class__c + HOT_SMSHandler + + + Description__c + + + + Event__c + BEFORE_INSERT + + + IsBypassAllowed__c + false + + + Order__c + 0.0 + + + sObjectAPIName__c + + + + sObject__c + SMS__c + + diff --git a/force-app/scratch-org/queues/queue_4718.queue-meta.xml b/force-app/scratch-org/queues/queue_4718.queue-meta.xml index 962cfb1e0b..677b3b84a9 100644 --- a/force-app/scratch-org/queues/queue_4718.queue-meta.xml +++ b/force-app/scratch-org/queues/queue_4718.queue-meta.xml @@ -1,10 +1,13 @@ - + false NAV Tolketjeneste Nordland HOT_Request__c + + SMS__c + ServiceAppointment @@ -12,9 +15,9 @@ Task - WorkOrder + Thread__c - Thread__c + WorkOrder - \ No newline at end of file + diff --git a/force-app/scratch-org/queues/queue_4719.queue-meta.xml b/force-app/scratch-org/queues/queue_4719.queue-meta.xml index ce75aaddfe..6fb8c05c87 100644 --- a/force-app/scratch-org/queues/queue_4719.queue-meta.xml +++ b/force-app/scratch-org/queues/queue_4719.queue-meta.xml @@ -1,10 +1,13 @@ - + false NAV Tolketjeneste Troms og Finnmark HOT_Request__c + + SMS__c + ServiceAppointment @@ -12,9 +15,9 @@ Task - WorkOrder + Thread__c - Thread__c + WorkOrder - \ No newline at end of file +