diff --git a/src/Apps/W1/ExpenseAgent/app/app.json b/src/Apps/W1/ExpenseAgent/app/app.json index 671964cf276..b29b5b69bb2 100644 --- a/src/Apps/W1/ExpenseAgent/app/app.json +++ b/src/Apps/W1/ExpenseAgent/app/app.json @@ -39,7 +39,7 @@ }, { "from": 7073, - "to": 7137 + "to": 7147 } ], "features": [ diff --git a/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpAccPayableAdminRCExt.PageExt.al b/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpAccPayableAdminRCExt.PageExt.al new file mode 100644 index 00000000000..39ddd9bae87 --- /dev/null +++ b/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpAccPayableAdminRCExt.PageExt.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.ExpenseAgent; + +using Microsoft.Finance.RoleCenters; + +pageextension 6905 "Exp. Acc. Payable Admin RC Ext" extends "Acc. Payable Administrator RC" +{ + layout + { + addlast(rolecenter) + { + part("Expense Activities"; "Expense Activities") + { + AccessByPermission = tabledata Expense = R; + ApplicationArea = Basic, Suite; + } + } + } +} diff --git a/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpAccountantRCExt.PageExt.al b/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpAccountantRCExt.PageExt.al new file mode 100644 index 00000000000..41b531e613f --- /dev/null +++ b/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpAccountantRCExt.PageExt.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.ExpenseAgent; + +using Microsoft.Finance.RoleCenters; + +pageextension 6904 "Exp. Accountant RC Ext" extends "Accountant Role Center" +{ + layout + { + addlast(rolecenter) + { + part("Expense Activities"; "Expense Activities") + { + AccessByPermission = tabledata Expense = R; + ApplicationArea = Basic, Suite; + } + } + } +} diff --git a/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpBusinessManagerRCExt.PageExt.al b/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpBusinessManagerRCExt.PageExt.al new file mode 100644 index 00000000000..0d0ecf01684 --- /dev/null +++ b/src/Apps/W1/ExpenseAgent/app/src/Common/Extensions/ExpBusinessManagerRCExt.PageExt.al @@ -0,0 +1,22 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.ExpenseAgent; + +using Microsoft.Finance.RoleCenters; + +pageextension 6906 "Exp. Business Manager RC Ext" extends "Business Manager Role Center" +{ + layout + { + addlast(rolecenter) + { + part("Expense Activities"; "Expense Activities") + { + AccessByPermission = tabledata Expense = R; + ApplicationArea = Basic, Suite; + } + } + } +} diff --git a/src/Apps/W1/ExpenseAgent/app/src/Common/Pages/ExpenseActivities.Page.al b/src/Apps/W1/ExpenseAgent/app/src/Common/Pages/ExpenseActivities.Page.al new file mode 100644 index 00000000000..e856d1fa2b1 --- /dev/null +++ b/src/Apps/W1/ExpenseAgent/app/src/Common/Pages/ExpenseActivities.Page.al @@ -0,0 +1,143 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.ExpenseAgent; + +page 7140 "Expense Activities" +{ + Caption = 'Expense Activities'; + PageType = CardPart; + RefreshOnActivate = true; + SourceTable = "Expense Activities Cue"; + + layout + { + area(Content) + { + cuegroup("Expense Reports") + { + Caption = 'Expense Reports'; + + field("Opened Expense Reports"; Rec."Opened Expense Reports") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of open expense reports.'; + + trigger OnDrillDown() + begin + DrillDownExpenseReports("Expense Report Status"::Open); + end; + } + field("Released Expense Reports"; Rec."Released Expense Reports") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of released expense reports.'; + + trigger OnDrillDown() + begin + DrillDownExpenseReports("Expense Report Status"::Released); + end; + } + field("Pending Approval Exp. Reports"; Rec."Pending Approval Exp. Reports") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of expense reports that are pending approval.'; + + trigger OnDrillDown() + begin + DrillDownExpenseReports("Expense Report Status"::"Pending Approval"); + end; + } + field("Approved Expense Reports"; Rec."Approved Expense Reports") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of approved expense reports.'; + + trigger OnDrillDown() + begin + DrillDownExpenseReports("Expense Report Status"::Approved); + end; + } + field("Rejected Expense Reports"; Rec."Rejected Expense Reports") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of rejected expense reports.'; + + trigger OnDrillDown() + begin + DrillDownExpenseReports("Expense Report Status"::Rejected); + end; + } + field("Processed for Payment Exp."; Rec."Processed for Payment Exp.") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of expense reports that are processed for payment.'; + + trigger OnDrillDown() + begin + DrillDownExpenseReports("Expense Report Status"::"Processed for Payment"); + end; + } + field("Completed Expense Reports"; Rec."Completed Expense Reports") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of completed expense reports.'; + + trigger OnDrillDown() + begin + DrillDownExpenseReports("Expense Report Status"::Completed); + end; + } + } + cuegroup(Expenses) + { + Caption = 'Expenses'; + + field("Released Expenses"; Rec."Released Expenses") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of released expenses.'; + + trigger OnDrillDown() + var + Expense: Record Expense; + begin + Expense.SetRange(Status, "Expense Status"::Released); + Page.Run(Page::Expenses, Expense); + end; + } + field("Policy Violated Expenses"; Rec."Policy Violated Expenses") + { + ApplicationArea = Basic, Suite; + ToolTip = 'Specifies the number of expenses with policy violations.'; + + trigger OnDrillDown() + var + Expense: Record Expense; + begin + Expense.SetRange("Rule Violations", true); + Page.Run(Page::Expenses, Expense); + end; + } + } + } + } + + trigger OnOpenPage() + begin + Rec.Reset(); + if not Rec.Get() then begin + Rec.Init(); + Rec.Insert(); + end; + end; + + local procedure DrillDownExpenseReports(ReportStatus: Enum "Expense Report Status") + var + ExpenseReportHeader: Record "Expense Report Header"; + begin + ExpenseReportHeader.SetRange(Status, ReportStatus); + Page.Run(Page::"Expense Reports", ExpenseReportHeader); + end; +} diff --git a/src/Apps/W1/ExpenseAgent/app/src/Common/Tables/ExpenseActivitiesCue.Table.al b/src/Apps/W1/ExpenseAgent/app/src/Common/Tables/ExpenseActivitiesCue.Table.al new file mode 100644 index 00000000000..473c9468a95 --- /dev/null +++ b/src/Apps/W1/ExpenseAgent/app/src/Common/Tables/ExpenseActivitiesCue.Table.al @@ -0,0 +1,93 @@ +// ------------------------------------------------------------------------------------------------ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for license information. +// ------------------------------------------------------------------------------------------------ +namespace Microsoft.ExpenseAgent; + +table 6940 "Expense Activities Cue" +{ + Access = Internal; + Caption = 'Expense Activities Cue'; + DataClassification = CustomerContent; + ReplicateData = false; + + fields + { + field(1; "Primary Key"; Code[10]) + { + Caption = 'Primary Key'; + DataClassification = SystemMetadata; + } + field(2; "Opened Expense Reports"; Integer) + { + Caption = 'Opened Expense Reports'; + FieldClass = FlowField; + CalcFormula = count("Expense Report Header" where(Status = const(Open))); + Editable = false; + } + field(3; "Released Expense Reports"; Integer) + { + Caption = 'Released Expense Reports'; + FieldClass = FlowField; + CalcFormula = count("Expense Report Header" where(Status = const(Released))); + Editable = false; + } + field(4; "Pending Approval Exp. Reports"; Integer) + { + Caption = 'Expense Reports Pending Approvals'; + FieldClass = FlowField; + CalcFormula = count("Expense Report Header" where(Status = const("Pending Approval"))); + Editable = false; + } + field(5; "Approved Expense Reports"; Integer) + { + Caption = 'Approved Expense Reports'; + FieldClass = FlowField; + CalcFormula = count("Expense Report Header" where(Status = const(Approved))); + Editable = false; + } + field(6; "Rejected Expense Reports"; Integer) + { + Caption = 'Rejected Expense Reports'; + FieldClass = FlowField; + CalcFormula = count("Expense Report Header" where(Status = const(Rejected))); + Editable = false; + } + field(7; "Processed for Payment Exp."; Integer) + { + Caption = 'Processed for Payment Exp. Rep.'; + FieldClass = FlowField; + CalcFormula = count("Expense Report Header" where(Status = const("Processed for Payment"))); + Editable = false; + } + field(8; "Completed Expense Reports"; Integer) + { + Caption = 'Completed Expense Reports'; + FieldClass = FlowField; + CalcFormula = count("Expense Report Header" where(Status = const(Completed))); + Editable = false; + } + field(9; "Released Expenses"; Integer) + { + Caption = 'Released Expenses'; + FieldClass = FlowField; + CalcFormula = count(Expense where(Status = const(Released))); + Editable = false; + } + field(10; "Policy Violated Expenses"; Integer) + { + Caption = 'Policy Violated Expenses'; + FieldClass = FlowField; + CalcFormula = count(Expense where("Rule Violations" = const(true))); + Editable = false; + } + } + + keys + { + key(PK; "Primary Key") + { + Clustered = true; + } + } +} diff --git a/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseManagementObjects.permissionset.al b/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseManagementObjects.permissionset.al index 3b3336be608..647c5ed626a 100644 --- a/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseManagementObjects.permissionset.al +++ b/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseManagementObjects.permissionset.al @@ -66,6 +66,7 @@ permissionset 6904 "Expense Management - Objects" table Traveler = X, table "Expense Activity Log Entry" = X, table "Expense Project Buf" = X, + table "Expense Activities Cue" = X, table "Expense Vehicle Type" = X, table "Mileage Rate Setup" = X, page "EA Billing Overview" = X, @@ -111,6 +112,7 @@ permissionset 6904 "Expense Management - Objects" page "Expense Report SubPage" = X, page "Expense Reports" = X, page "Expense Management Role Center" = X, + page "Expense Activities" = X, page "Manager Expense Reports" = X, page "Expense Subcategories" = X, page "Expense Vendors" = X, diff --git a/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtEdit.PermissionSet.al b/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtEdit.PermissionSet.al index 939426e518c..a0605e86431 100644 --- a/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtEdit.PermissionSet.al +++ b/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtEdit.PermissionSet.al @@ -46,5 +46,6 @@ permissionset 6906 "Expense Mgmt. Edit" tabledata Traveler = IMD, tabledata "Expense VAT Specification" = IMD, tabledata "Expense Report Line VAT Spec." = IMD, + tabledata "Expense Activities Cue" = IMD, tabledata "Expense Vendor" = RIMD; } \ No newline at end of file diff --git a/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtRead.PermissionSet.al b/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtRead.PermissionSet.al index 412ac0f0ee6..72d68736c7a 100644 --- a/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtRead.PermissionSet.al +++ b/src/Apps/W1/ExpenseAgent/app/src/Permissions/ExpenseMgmtRead.PermissionSet.al @@ -64,5 +64,6 @@ permissionset 6907 "Expense Mgmt. Read" tabledata "Expense VAT Specification" = R, tabledata "Expense Report Line VAT Spec." = R, tabledata "Expense Activity Log Entry" = R, + tabledata "Expense Activities Cue" = RIMD, tabledata "Posted Exp. Rep. Line VAT Spec" = R; } \ No newline at end of file