Page 9060 SO Processor Activities
- App
- Base Application
- Namespace
- Microsoft.Sales.RoleCenters
- Versions
- 17-28
- Source table
- 9053
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Sales/RoleCenters/SOProcessorActivities.Page.al346 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.Sales.RoleCenters;
using Microsoft.EServices.EDocument;
using Microsoft.Foundation.Navigate;
using Microsoft.RoleCenters;
using Microsoft.Sales.Document;
using System;
using System.Environment;
using System.Environment.Configuration;
#if not CLEAN28
using System.Feedback;
#endif
using System.Visualization;
/// <summary>
/// Displays sales order activity cues and key metrics for the Sales Order Processor Role Center.
/// </summary>
page 9060 "SO Processor Activities"
{
Caption = 'Activities';
PageType = CardPart;
RefreshOnActivate = true;
SourceTable = "Sales Cue";
Permissions = tabledata "Sales Cue" = rm;
layout
{
area(content)
{
cuegroup("For Release")
{
Caption = 'For Release';
field("Sales Quotes - Open"; Rec."Sales Quotes - Open")
{
ApplicationArea = Basic, Suite;
DrillDownPageID = "Sales Quotes";
}
field("Sales Orders - Open"; Rec."Sales Orders - Open")
{
ApplicationArea = Basic, Suite;
DrillDownPageID = "Sales Order List";
}
field(SalesOrdersReservedFromStock; SalesOrdersReservedFromStock)
{
ApplicationArea = Basic, Suite;
Caption = 'Completely Reserved from Stock';
ToolTip = 'Specifies the number of sales orders that are completely reserved from stock.';
trigger OnDrillDown()
begin
Rec.DrillDownNoOfReservedFromStockSalesOrders();
end;
}
actions
{
action("New Sales Quote")
{
ApplicationArea = Basic, Suite;
Caption = 'New Sales Quote';
RunObject = Page "Sales Quote";
RunPageMode = Create;
ToolTip = 'Offer items or services to a customer.';
}
action("New Sales Order")
{
ApplicationArea = Basic, Suite;
Caption = 'New Sales Order';
RunObject = Page "Sales Order";
RunPageMode = Create;
ToolTip = 'Create a new sales order for items or services that require partial posting.';
}
}
}
cuegroup("Sales Orders Released Not Shipped")
{
Caption = 'Sales Orders Released Not Shipped';
field(ReadyToShip; ReadyToShip)
{
ApplicationArea = Basic, Suite;
Caption = 'Ready To Ship';
DrillDownPageID = "Sales Order List";
ToolTip = 'Specifies the number of sales documents that are ready to ship.';
StyleExpr = ReadyToShipStyle;
trigger OnDrillDown()
begin
Rec.ShowOrders(Rec.FieldNo("Ready to Ship"));
end;
}
field(PartiallyShipped; PartiallyShipped)
{
ApplicationArea = Basic, Suite;
Caption = 'Partially Shipped';
DrillDownPageID = "Sales Order List";
ToolTip = 'Specifies the number of sales documents that are partially shipped.';
StyleExpr = PartiallyShippedStyle;
trigger OnDrillDown()
begin
Rec.ShowOrders(Rec.FieldNo("Partially Shipped"));
end;
}
field(DelayedOrders; DelayedOrders)
{
ApplicationArea = Basic, Suite;
Caption = 'Delayed';
DrillDownPageID = "Sales Order List";
ToolTip = 'Specifies the number of sales documents where your delivery is delayed.';
StyleExpr = DelayedOrdersStyle;
trigger OnDrillDown()
begin
Rec.ShowOrders(Rec.FieldNo(Delayed));
end;
}
field("Average Days Delayed"; AverageDaysDelayed)
{
AutoFormatType = 0;
ApplicationArea = Basic, Suite;
Caption = 'Average Days Delayed';
DecimalPlaces = 0 : 1;
Image = Calendar;
ToolTip = 'Specifies the number of days that your order deliveries are delayed on average.';
StyleExpr = AverageDaysDelayedStyle;
}
actions
{
action(Navigate)
{
ApplicationArea = Basic, Suite;
Caption = 'Find entries...';
RunObject = Page Navigate;
ShortCutKey = 'Ctrl+Alt+Q';
ToolTip = 'Find entries and documents that exist for the document number and posting date on the selected document. (Formerly this action was named Navigate.)';
}
}
}
cuegroup(Returns)
{
Caption = 'Returns';
field("Sales Return Orders - Open"; Rec."Sales Return Orders - Open")
{
ApplicationArea = SalesReturnOrder;
DrillDownPageID = "Sales Return Order List";
}
field("Sales Credit Memos - Open"; Rec."Sales Credit Memos - Open")
{
ApplicationArea = Basic, Suite;
DrillDownPageID = "Sales Credit Memos";
}
actions
{
action("New Sales Return Order")
{
ApplicationArea = SalesReturnOrder;
Caption = 'New Sales Return Order';
RunObject = Page "Sales Return Order";
RunPageMode = Create;
ToolTip = 'Process a return or refund that requires inventory handling by creating a new sales return order.';
}
action("New Sales Credit Memo")
{
ApplicationArea = Basic, Suite;
Caption = 'New Sales Credit Memo';
RunObject = Page "Sales Credit Memo";
RunPageMode = Create;
ToolTip = 'Process a return or refund by creating a new sales credit memo.';
}
}
}
cuegroup("Document Exchange Service")
{
Caption = 'Document Exchange Service';
Visible = ShowDocumentsPendingDodExchService;
field("Sales Inv. - Pending Doc.Exch."; Rec."Sales Inv. - Pending Doc.Exch.")
{
ApplicationArea = Suite;
Visible = ShowDocumentsPendingDodExchService;
}
field("Sales CrM. - Pending Doc.Exch."; Rec."Sales CrM. - Pending Doc.Exch.")
{
ApplicationArea = Suite;
Visible = ShowDocumentsPendingDodExchService;
}
}
#if not CLEAN28
usercontrol(SATAsyncLoader; SatisfactionSurveyAsync)
{
ApplicationArea = Basic, Suite;
Visible = false;
ObsoleteReason = 'The Satisfaction Survey feature will be removed in a future release.';
ObsoleteState = Pending;
ObsoleteTag = '28.0';
}
#endif
}
}
actions
{
area(processing)
{
action("Set Up Cues")
{
ApplicationArea = Basic, Suite;
Caption = 'Set Up Cues';
Image = Setup;
ToolTip = 'Set up the cues (status tiles) related to the role.';
trigger OnAction()
var
CueRecordRef: RecordRef;
begin
CueRecordRef.GetTable(Rec);
CuesAndKpis.OpenCustomizePageForCurrentUser(CueRecordRef.Number);
end;
}
}
}
trigger OnAfterGetCurrRecord()
var
TaskParameters: Dictionary of [Text, Text];
begin
TaskParameters.Add('View', Rec.GetView());
if CalcTaskId <> 0 then
if CurrPage.CancelBackgroundTask(CalcTaskId) then;
CurrPage.EnqueueBackgroundTask(CalcTaskId, Codeunit::"SO Activities Calculate", TaskParameters, 120000, PageBackgroundTaskErrorLevel::Warning);
end;
trigger OnAfterGetRecord()
var
DocExchServiceSetup: Record "Doc. Exch. Service Setup";
begin
ShowDocumentsPendingDodExchService := false;
DocExchServiceSetup.SetLoadFields("Enabled");
if DocExchServiceSetup.Get() then
ShowDocumentsPendingDodExchService := DocExchServiceSetup.Enabled;
end;
trigger OnOpenPage()
var
RoleCenterNotificationMgt: Codeunit "Role Center Notification Mgt.";
ConfPersonalizationMgt: Codeunit "Conf./Personalization Mgt.";
begin
Rec.Reset();
if not Rec.Get() then begin
Rec.Init();
Rec.Insert();
end;
Rec.SetRespCenterFilter();
Rec.SetRange("Date Filter", 0D, WorkDate());
Rec.SetFilter("Date Filter2", '>=%1', WorkDate());
Rec.SetRange("User ID Filter", UserId());
RoleCenterNotificationMgt.ShowNotifications();
ConfPersonalizationMgt.RaiseOnOpenRoleCenterEvent();
if PageNotifier.IsAvailable() then begin
PageNotifier := PageNotifier.Create();
PageNotifier.NotifyPageReady();
end;
end;
trigger OnPageBackgroundTaskCompleted(TaskId: Integer; Results: Dictionary of [Text, Text])
var
SOActivitiesCalculate: Codeunit "SO Activities Calculate";
UIHelperTriggers: Codeunit "UI Helper Triggers";
PrevUpdatedOn: DateTime;
IsHandled: Boolean;
begin
OnBeforeOnPageBackgroundTaskCompleted(TaskId, CalcTaskId, Results, IsHandled);
if IsHandled then
exit;
if TaskId <> CalcTaskId then
exit;
CalcTaskId := 0;
if Rec.Get() then;
PrevUpdatedOn := Rec."Avg. Days Delayed Updated On";
SOActivitiesCalculate.EvaluateResults(Results, Rec);
ReadyToShip := Rec."Ready to Ship";
AverageDaysDelayed := Rec."Average Days Delayed";
DelayedOrders := Rec.Delayed;
PartiallyShipped := Rec."Partially Shipped";
SalesOrdersReservedFromStock := Rec."S. Ord. - Reserved From Stock";
UIHelperTriggers.GetCueStyle(Database::"Sales Cue", Rec.FieldNo("Ready to Ship"), ReadyToShip, ReadyToShipStyle);
UIHelperTriggers.GetCueStyle(Database::"Sales Cue", Rec.FieldNo("Average Days Delayed"), AverageDaysDelayed, AverageDaysDelayedStyle);
UIHelperTriggers.GetCueStyle(Database::"Sales Cue", Rec.FieldNo(Delayed), DelayedOrders, DelayedOrdersStyle);
UIHelperTriggers.GetCueStyle(Database::"Sales Cue", Rec.FieldNo("Partially Shipped"), PartiallyShipped, PartiallyShippedStyle);
if Rec.WritePermission() and (Rec."Avg. Days Delayed Updated On" > PrevUpdatedOn) then begin
PrevUpdatedOn := Rec."Avg. Days Delayed Updated On";
Rec.LockTable();
Rec.Get();
Rec."Avg. Days Delayed Updated On" := PrevUpdatedOn;
Rec."Average Days Delayed" := AverageDaysDelayed;
if Rec.Modify() then;
Commit();
end;
CurrPage.Update();
end;
var
CuesAndKpis: Codeunit "Cues And KPIs";
[RunOnClient]
[WithEvents]
PageNotifier: DotNet PageNotifier;
AverageDaysDelayed: Decimal;
ReadyToShip: Integer;
PartiallyShipped: Integer;
DelayedOrders: Integer;
CalcTaskId: Integer;
SalesOrdersReservedFromStock: Integer;
ShowDocumentsPendingDodExchService: Boolean;
AverageDaysDelayedStyle: Text;
ReadyToShipStyle: Text;
PartiallyShippedStyle: Text;
DelayedOrdersStyle: Text;
/// <summary>
/// Raised before processing the results of a completed page background task.
/// </summary>
/// <param name="TaskId">The ID of the completed background task.</param>
/// <param name="CalcTaskId">The calculation task ID for comparison.</param>
/// <param name="Results">The results dictionary from the background task.</param>
/// <param name="IsHandled">Set to true to prevent default result processing.</param>
[IntegrationEvent(true, false)]
procedure OnBeforeOnPageBackgroundTaskCompleted(TaskId: Integer; CalcTaskId: Integer; var Results: Dictionary of [Text, Text]; var IsHandled: Boolean)
begin
end;
}