Codeunit 1449 Start Trial, source in 29

Source29

src/Layers/W1/BaseApp/RoleCenters/StartTrial.Codeunit.al83 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.RoleCenters;

using Microsoft.Finance.RoleCenters;
using System.Environment;
using System.Environment.Configuration;
using System.Reflection;

codeunit 1449 "Start Trial"
{
    Access = Public;

    trigger OnRun()
    begin
        StartTrial()
    end;

    local procedure StartTrial()
    var
        RoleCenterNotifications: Record "Role Center Notifications";
        RoleCenterNotificationMgt: Codeunit "Role Center Notification Mgt.";
        CompanyName: Text;
    begin
        if not FindNonEvaluationCompany(CompanyName) then
            error('');

        RoleCenterNotifications.SetEvaluationNotificationState(RoleCenterNotifications."Evaluation Notification State"::Clicked);
        Commit();
        RoleCenterNotificationMgt.DisableEvaluationNotification();
        ChangeCompanyAndRestartSession(CompanyName);
    end;

    local procedure ChangeCompanyAndRestartSession(CompanyName: Text)
    var
        SessionSetting: SessionSettings;
    begin
        SessionSetting.Init();
        SessionSetting.Company(CompanyName);
        SetProfileForNewSession(SessionSetting);
        SessionSetting.RequestSessionUpdate(true)
    end;

    local procedure FindNonEvaluationCompany(var CompanyName: Text): Boolean
    var
        Company: Record Company;
    begin
        Company.SetRange("Evaluation Company", false);

        if Company.FindFirst() then begin
            CompanyName := Company.Name;
            exit(true);
        end;

        exit(false);
    end;

    local procedure SetProfileForNewSession(var SessionSettings: SessionSettings)
    var
        UserPersonalization: Record "User Personalization";
        AllProfile: Record "All Profile";
    begin
        // if the user is starting the trial from an evaluation company where they were currently on the 'Business Manager Evaluation' 
        // role center, they should be redirected to the Business Manager role center in the production company
        if not UserPersonalization.Get(UserSecurityId()) then
            exit;

        if UserPersonalization."Profile ID" <> 'BUSINESS MANAGER EVALUATION' then
            exit;

        AllProfile.SetRange("Role Center ID", Page::"Business Manager Role Center");
        if AllProfile.FindFirst() then begin
            SessionSettings.ProfileId := AllProfile."Profile ID";
            SessionSettings.ProfileAppId := AllProfile."App ID";
#pragma warning disable AL0667
            SessionSettings.ProfileSystemScope := (AllProfile.Scope = AllProfile.Scope::System);
#pragma warning restore AL0667
        end;
    end;
}