diff --git a/src/System Application/App/User Settings/src/UserSettingsImpl.Codeunit.al b/src/System Application/App/User Settings/src/UserSettingsImpl.Codeunit.al index 960690758d..d74c200125 100644 --- a/src/System Application/App/User Settings/src/UserSettingsImpl.Codeunit.al +++ b/src/System Application/App/User Settings/src/UserSettingsImpl.Codeunit.al @@ -130,10 +130,16 @@ codeunit 9175 "User Settings Impl." UserSettingsRec."Locale ID" := UserPersonalization."Locale ID"; UserSettingsRec."Time Zone" := UserPersonalization."Time Zone"; - if (UserPersonalization.Company = '') and (CompanyName() <> '') then - UserSettingsRec.Company := CopyStr(CompanyName(), 1, 30) - else - UserSettingsRec.Company := UserPersonalization.Company; + if UserSecurityID = UserSecurityId() then begin + if CompanyName() <> '' then + UserSettingsRec.Company := CopyStr(CompanyName(), 1, MaxStrLen(UserSettingsRec.Company)) + else + UserSettingsRec.Company := UserPersonalization.Company; + end else + if (UserPersonalization.Company = '') and (CompanyName() <> '') then + UserSettingsRec.Company := CopyStr(CompanyName(), 1, MaxStrLen(UserSettingsRec.Company)) + else + UserSettingsRec.Company := UserPersonalization.Company; UserSettingsRec."Last Login" := UserLoginTimeTracker.GetPenultimateLoginDateTime(UserSecurityID); UserSettingsRec."Work Date" := WorkDate(); diff --git a/src/System Application/Test/User Settings/src/UserSettingsTests.Codeunit.al b/src/System Application/Test/User Settings/src/UserSettingsTests.Codeunit.al index c410681b61..2a2de1fc2a 100644 --- a/src/System Application/Test/User Settings/src/UserSettingsTests.Codeunit.al +++ b/src/System Application/Test/User Settings/src/UserSettingsTests.Codeunit.al @@ -24,6 +24,7 @@ codeunit 132905 "User Settings Tests" PermissionsMock: Codeunit "Permissions Mock"; LibraryVariableStorage: Codeunit "Library - Variable Storage"; CompanyDisplayNameTxt: Label 'Company display name'; + IsInitialized: Boolean; [Test] [TransactionModel(TransactionModel::AutoRollback)] @@ -248,6 +249,38 @@ codeunit 132905 "User Settings Tests" Assert.IsFalse(TempUserSettingsRec."Teaching Tips", 'Teaching Tips should have been disabled.'); end; + [Test] + [TransactionModel(TransactionModel::AutoRollback)] + procedure CurrentUserSettingsShowSessionCompany() + var + TempUserSettingsRec: Record "User Settings"; + UserPersonalization: Record "User Personalization"; + UserSettings: Codeunit "User Settings"; + OtherCompanyName: Text[30]; + begin + // [FEATURE] [AI test 0.3] + // [SCENARIO 630234] My Settings shows session company for current user even when persisted company differs + Initialize(); + + // [GIVEN] UserPersonalization has a company that differs from the current session company + OtherCompanyName := CopyStr('Other Company Tab', 1, MaxStrLen(OtherCompanyName)); + if not UserPersonalization.Get(UserSecurityId()) then begin + UserPersonalization.Init(); + UserPersonalization."User SID" := UserSecurityId(); + UserPersonalization.Insert(); + end; + UserPersonalization.Company := OtherCompanyName; + UserPersonalization.Modify(); + + PermissionsMock.Set('User Settings View'); + + // [WHEN] GetUserSettings is called for the current user + UserSettings.GetUserSettings(UserSecurityId(), TempUserSettingsRec); + + // [THEN] The company in settings matches the current session company, not the persisted one + Assert.AreEqual(CompanyName(), TempUserSettingsRec.Company, 'Company should match session CompanyName, not persisted UserPersonalization.Company'); + end; + [Test] procedure TestUpdateSettingsOK() var @@ -287,6 +320,14 @@ codeunit 132905 "User Settings Tests" LibraryVariableStorage.AssertEmpty(); end; + local procedure Initialize() + begin + if IsInitialized then + exit; + + IsInitialized := true; + end; + [EventSubscriber(ObjectType::Codeunit, Codeunit::"User Settings", 'OnUpdateUserSettings', '', true, true)] local procedure OnUpdateUserSettings(OldSettings: Record "User Settings"; NewSettings: Record "User Settings") begin