Codeunit 5513 Graph Mgt - Time Registration, source in 29
Source29
src/Layers/W1/BaseApp/Integration/Graph/GraphMgtTimeRegistration.Codeunit.al166 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.Integration.Graph;
using Microsoft.Projects.Project.Job;
using Microsoft.Projects.Resources.Resource;
using Microsoft.Projects.TimeSheet;
using System.Reflection;
using System.Security.User;
codeunit 5513 "Graph Mgt - Time Registration"
{
trigger OnRun()
begin
end;
[Scope('OnPrem')]
procedure InitUserSetup()
var
UserSetup: Record "User Setup";
begin
if not UserSetup.Get(UserId) then begin
UserSetup.Validate("User ID", UserId);
UserSetup.Validate("Time Sheet Admin.", true);
UserSetup.Insert(true);
end;
end;
[Scope('OnPrem')]
procedure ModifyResourceToUseTimeSheet(var Resource: Record Resource)
begin
if SetResourceFieldsToUseTimeSheet(Resource) then
Resource.Modify(true);
end;
[Scope('OnPrem')]
procedure CreateResourceToUseTimeSheet(var Resource: Record Resource)
var
TempFieldSet: Record "Field" temporary;
GraphMgtGeneralTools: Codeunit "Graph Mgt - General Tools";
ResourceRecRef: RecordRef;
begin
Clear(Resource);
Resource.Insert(true);
ResourceRecRef.GetTable(Resource);
GraphMgtGeneralTools.ProcessNewRecordFromAPI(ResourceRecRef, TempFieldSet, CreateDateTime(Resource."Last Date Modified", 0T));
ResourceRecRef.SetTable(Resource);
ModifyResourceToUseTimeSheet(Resource);
end;
[Scope('OnPrem')]
procedure GetTimeSheetHeader(ResouceNo: Code[20]; StartingDate: Date): Code[20]
var
TimeSheetHeader: Record "Time Sheet Header";
begin
TimeSheetHeader.Reset();
TimeSheetHeader.SetRange("Starting Date", StartingDate);
TimeSheetHeader.SetRange("Resource No.", ResouceNo);
if not TimeSheetHeader.FindFirst() then begin
CreateTimeSheetHeader(StartingDate, ResouceNo);
TimeSheetHeader.FindFirst();
end;
exit(TimeSheetHeader."No.");
end;
[Scope('OnPrem')]
procedure GetTimeSheetLineWithEmptyDate(var TimeSheetLine: Record "Time Sheet Line"; TimeSheetHeaderNo: Code[20]; TimeSheetDetailDate: Date)
var
TimeSheetDetail: Record "Time Sheet Detail";
TimeSheetLineNo: Integer;
begin
TimeSheetLine.Reset();
TimeSheetLine.SetRange(Type, TimeSheetDetail.Type::Resource);
TimeSheetLine.SetRange(Status, TimeSheetLine.Status::Open);
TimeSheetLine.SetRange("Time Sheet No.", TimeSheetHeaderNo);
if TimeSheetLine.FindSet() then
repeat
if not TimeSheetDetail.Get(TimeSheetHeaderNo, TimeSheetLine."Line No.", TimeSheetDetailDate) then
exit;
until TimeSheetLine.Next() = 0;
TimeSheetLine.Reset();
TimeSheetLine.SetRange("Time Sheet No.", TimeSheetHeaderNo);
if TimeSheetLine.FindLast() then
TimeSheetLineNo := TimeSheetLine."Line No." + 10000
else
TimeSheetLineNo := 10000;
CreateTimeSheetLine(TimeSheetHeaderNo, TimeSheetLineNo);
TimeSheetLine.Get(TimeSheetHeaderNo, TimeSheetLineNo);
end;
[Scope('OnPrem')]
procedure AddTimeSheetDetail(var TimeSheetDetail: Record "Time Sheet Detail"; TimeSheetLine: Record "Time Sheet Line"; Date: Date; Quantity: Decimal)
begin
Clear(TimeSheetDetail);
TimeSheetDetail.CopyFromTimeSheetLine(TimeSheetLine);
TimeSheetDetail.Date := Date;
TimeSheetDetail.Quantity := Quantity;
TimeSheetDetail.Insert(true);
end;
[Scope('OnPrem')]
procedure AddTimeSheetDetailWithDimensionSetAndJob(var TimeSheetDetail: Record "Time Sheet Detail"; TimeSheetLine: Record "Time Sheet Line"; Date: Date; Quantity: Decimal; DimensionSetID: Integer; JobID: Guid)
var
Job: Record Job;
begin
Clear(TimeSheetDetail);
TimeSheetDetail.CopyFromTimeSheetLine(TimeSheetLine);
TimeSheetDetail.Date := Date;
TimeSheetDetail.Quantity := Quantity;
TimeSheetDetail."Dimension Set ID" := DimensionSetID;
if Job.GetBySystemId(JobID) then begin
TimeSheetDetail."Job Id" := Job.SystemId;
TimeSheetDetail."Job No." := Job."No.";
end;
TimeSheetDetail.Insert(true);
end;
local procedure SetResourceFieldsToUseTimeSheet(var Resource: Record Resource): Boolean
begin
if Resource."Use Time Sheet" and
(Resource."Time Sheet Approver User ID" <> '') and
(Resource."Time Sheet Owner User ID" <> '')
then
exit(false);
if not Resource."Use Time Sheet" then
Resource.Validate("Use Time Sheet", true);
if Resource."Time Sheet Approver User ID" = '' then
Resource.Validate("Time Sheet Approver User ID", UserId);
if Resource."Time Sheet Owner User ID" = '' then
Resource.Validate("Time Sheet Owner User ID", UserId);
exit(true);
end;
local procedure CreateTimeSheetHeader(StartingDate: Date; ResourceNumber: Code[20])
var
CreateTimeSheets: Report "Create Time Sheets";
begin
CreateTimeSheets.InitParameters(StartingDate, 1, ResourceNumber, false, true);
CreateTimeSheets.UseRequestPage(false);
CreateTimeSheets.Run();
end;
local procedure CreateTimeSheetLine(TimeSheetHeaderNo: Code[20]; TimeSheetLineNo: Integer)
var
TimeSheetLine: Record "Time Sheet Line";
begin
TimeSheetLine."Time Sheet No." := TimeSheetHeaderNo;
TimeSheetLine."Line No." := TimeSheetLineNo;
TimeSheetLine.Type := TimeSheetLine.Type::Resource;
TimeSheetLine.Insert(true);
end;
}