Skip to content

Commit

Permalink
Merge branch 'main' into dev/gga/exportInvoicesTests
Browse files Browse the repository at this point in the history
  • Loading branch information
JesperSchulz authored Nov 11, 2024
2 parents 66972f9 + 85ab17a commit 92ed18c
Show file tree
Hide file tree
Showing 194 changed files with 4,738 additions and 7,500 deletions.
2 changes: 1 addition & 1 deletion .github/AL-Go-Settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"runs-on": "windows-latest",
"cacheImageName": "",
"UsePsSession": false,
"artifact": "https://bcinsider-fvh2ekdjecfjd6gk.b02.azurefd.net/sandbox/26.0.25774.0/base",
"artifact": "https://bcinsider-fvh2ekdjecfjd6gk.b02.azurefd.net/sandbox/26.0.26183.0/base",
"country": "base",
"useProjectDependencies": true,
"repoVersion": "26.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ codeunit 31247 "Calc. Normal Depr. Handler CZF"
#endregion Use FA Ledger Check

[EventSubscriber(ObjectType::Codeunit, Codeunit::"Depreciation Calculation", 'OnBeforeCalcRounding', '', false, false)]
local procedure RoundUpOnBeforeCalcRounding(DeprBook: Record "Depreciation Book"; var DeprAmount: Decimal; var IsHandled: Boolean)
local procedure RoundUpOnBeforeCalcRounding(DeprBook: Record "Depreciation Book"; OrigDeprAmount: Decimal; var DeprAmount: Decimal; var IsHandled: Boolean)
begin
if DeprBook."Use Rounding in Periodic Depr." then begin
DeprAmount := Round(DeprAmount, 1, '>');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ codeunit 31235 "FA Disposal Handler CZF"
CalculateDisposal.CalcGainLoss(FANo, DeprBookCode, EntryAmounts);
for i := 1 to 14 do
if EntryAmounts[i] <> 0 then begin
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFAPostingCategory(i);
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFALedgerPostingCategory(i);
FALedgEntry."FA Posting Type" := "FA Ledger Entry FA Posting Type".FromInteger(CalculateDisposal.SetFAPostingType(i));
FALedgEntry.Amount := EntryAmounts[i];
if i = 1 then
Expand Down Expand Up @@ -324,12 +324,12 @@ codeunit 31235 "FA Disposal Handler CZF"
10:
FAPostingType := FAPostingType::BookVal;
end;
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFAPostingCategory(4);
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFALedgerPostingCategory(4);
FALedgEntry."FA Posting Type" := CalculateDisposal.SetFAPostingType(4);
FALedgEntry.Amount := -EntryAmounts[i];
FAInsertLedgEntry.InsertFA(FALedgEntry);
if i in [3, 5, 6, 10] then begin
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFAPostingCategory(i);
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFALedgerPostingCategory(i);
FALedgEntry."FA Posting Type" := CalculateDisposal.SetFAPostingType(i);
FALedgEntry.Amount := EntryAmounts[i];
end;
Expand All @@ -345,7 +345,7 @@ codeunit 31235 "FA Disposal Handler CZF"
CalculateDisposal.CalcSecondGainLoss(FANo, DeprBookCode, FALedgEntry.Amount, EntryAmounts);
for i := 1 to 2 do
if EntryAmounts[i] <> 0 then begin
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFAPostingCategory(i);
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFALedgerPostingCategory(i);
FALedgEntry."FA Posting Type" := "FA Ledger Entry FA Posting Type".FromInteger(CalculateDisposal.SetFAPostingType(i));
FALedgEntry.Amount := EntryAmounts[i];
if i = 1 then
Expand All @@ -372,7 +372,7 @@ codeunit 31235 "FA Disposal Handler CZF"
if EntryNumbers[i] <> 0 then begin
FALedgEntry.Amount := EntryAmounts[i];
FALedgEntry."Entry No." := EntryNumbers[i];
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFAPostingCategory(i);
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFALedgerPostingCategory(i);
FALedgEntry."FA Posting Type" := "FA Ledger Entry FA Posting Type".FromInteger(CalculateDisposal.SetFAPostingType(i));
if i = 1 then
FALedgEntry."Result on Disposal" := FALedgEntry."Result on Disposal"::Gain;
Expand Down Expand Up @@ -406,13 +406,13 @@ codeunit 31235 "FA Disposal Handler CZF"
10:
FAPostingType := FAPostingType::BookVal;
end;
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFAPostingCategory(4);
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFALedgerPostingCategory(4);
FALedgEntry."FA Posting Type" := CalculateDisposal.SetFAPostingType(4);
FALedgEntry.Amount := -EntryAmounts[i];
FALedgEntry."Entry No." := EntryNumbers[i] + 1;
FAInsertLedgEntry.InsertFA(FALedgEntry);
if i in [3, 5, 6, 10] then begin
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFAPostingCategory(i);
FALedgEntry."FA Posting Category" := CalculateDisposal.SetFALedgerPostingCategory(i);
FALedgEntry."FA Posting Type" := CalculateDisposal.SetFAPostingType(i);
FALedgEntry.Amount := EntryAmounts[i];
end;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,11 @@ codeunit 10538 "MTD OAuth 2.0 Mgt"
CannotGetScopeFromKeyVaultErr: Label 'Cannot get Scope from Azure Key Vault using key %1', Locked = true;
CannotGetEndpointTextFromKeyVaultErr: Label 'Cannot get Endpoint from Azure Key Vault using key %1 ', Locked = true;
GetPublicIPAddressRequestFailedErr: Label 'Getting server public IP address from Azure Function failed.', Locked = true;
EmptyPublicIPAddressErr: Label 'Azure Function returned empty server public IP address.', Locked = true;
NonEmptyPublicIPAddressTxt: Label 'Non-empty server public IP address was returned by Azure Function', Locked = true;
EmptyPublicIPAddressAzFuncErr: Label 'Azure Function returned empty server public IP address.', Locked = true;
NonEmptyPublicIPAddressAzFuncTxt: Label 'Non-empty server public IP address was returned by Azure Function', Locked = true;
EmptyPublicIPAddressErr: Label 'Tenant settings returned empty server public IP address.', Locked = true;
NonEmptyPublicIPAddressTxt: Label 'Non-empty server public IP address was returned by tenant settings', Locked = true;
IPAddressNotMatchPatternErr: Label 'IP address from tenant settings does not match validation pattern %1. ', Locked = true;
IPv4LoopbackIPAddressTxt: Label '127.0.0.1', Locked = true;
IPv6LoopbackIPAddressTxt: Label '::1', Locked = true;

Expand Down Expand Up @@ -507,9 +510,9 @@ codeunit 10538 "MTD OAuth 2.0 Mgt"
end;
AzureFunctionsResponse.GetResultAsText(ServerIPAddress);
if ServerIPAddress = '' then
FeatureTelemetry.LogError('0000NRP', HMRCFraudPreventHeadersTok, '', EmptyPublicIPAddressErr)
FeatureTelemetry.LogError('0000NRP', HMRCFraudPreventHeadersTok, '', EmptyPublicIPAddressAzFuncErr)
else
FeatureTelemetry.LogUsage('0000NRW', HMRCFraudPreventHeadersTok, NonEmptyPublicIPAddressTxt);
FeatureTelemetry.LogUsage('0000NRW', HMRCFraudPreventHeadersTok, NonEmptyPublicIPAddressAzFuncTxt);
end;

[NonDebuggable]
Expand Down Expand Up @@ -551,6 +554,34 @@ codeunit 10538 "MTD OAuth 2.0 Mgt"
end;
end;

[TryFunction]
internal procedure GetServerPublicIPFromTenantSettings(var ServerIPAddress: Text)
var
TenantSettings: DotNet NavTenantSettingsHelper;
RegEx: DotNet Regex;
IPAddressRegExPattern: Text;
begin
if not EnvironmentInformation.IsSaaS() then
exit;

ServerIPAddress := TenantSettings.GetPublicIpAddress();

if ServerIPAddress = '' then begin
FeatureTelemetry.LogError('0000O1D', HMRCFraudPreventHeadersTok, '', EmptyPublicIPAddressErr);
exit;
end;

IPAddressRegExPattern := '[0-9]{1,3}(\.[0-9]{1,3}){3}|([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4})'; // IPv4 or IPv6
RegEx := RegEx.Regex(IPAddressRegExPattern);
if not RegEx.IsMatch(ServerIPAddress) then begin
FeatureTelemetry.LogError('0000O1E', HMRCFraudPreventHeadersTok, '', StrSubstNo(IPAddressNotMatchPatternErr, IPAddressRegExPattern));
ServerIPAddress := '';
exit;
end;

FeatureTelemetry.LogUsage('0000O1F', HMRCFraudPreventHeadersTok, NonEmptyPublicIPAddressTxt);
end;

local procedure CheckJsonTokenValidity(var JsonObject: JsonObject; TokenKey: Text; ValidationRegExPattern: Text) ErrorText: Text
var
JsonToken: JsonToken;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ codeunit 10541 "MTD Fraud Prevention Mgt."
ClientWindowTxt: Label 'width=%1&height=%2', Locked = true;
HMRCFraudPreventHeadersTok: label 'HMRC Fraud Prevention Headers', Locked = true;
NoFPHeadersFromJSErr: Label 'No FP headers were returned from JS.', Locked = true;
GetPublicIPAddressRequestFailedErr: Label 'Getting server public IP address from public service failed.', Locked = true;

internal procedure AddFraudPreventionHeaders(var RequestJSON: Text; ConfirmHeaders: Boolean)
var
Expand Down Expand Up @@ -89,7 +88,7 @@ codeunit 10541 "MTD Fraud Prevention Mgt."
Commit();
MTDWebClientFPHeaders.RunModal();

if GetVendorIP(vendorIP, VATReportSetup."MTD FP Public IP Service URL") then;
if GetVendorIP(vendorIP) then;
MTDSessionFraudPrevHdr.SafeInsert('Gov-Vendor-Public-IP', vendorIP);

if MTDSessionFraudPrevHdr.Get('Gov-Client-Public-IP') then
Expand Down Expand Up @@ -221,48 +220,21 @@ codeunit 10541 "MTD Fraud Prevention Mgt."
end;

[TryFunction]
internal procedure GetVendorIP(var Result: Text; url: Text)
var
Matches: Record Matches;
Regex: Codeunit Regex;
HttpClient: HttpClient;
HttpResponseMessage: HttpResponseMessage;
CustomDimensions: Dictionary of [Text, Text];
Content: Text;
RegExString: Text;
internal procedure GetVendorIP(var Result: Text)
begin
Result := '';
if MTDOAuth20Mgt.GetServerPublicIPFromAzureFunction(Result) then
if MTDOAuth20Mgt.GetServerPublicIPFromTenantSettings(Result) then
if Result <> '' then
exit;

HttpClient.Get(url, HttpResponseMessage);
if not HttpResponseMessage.IsSuccessStatusCode() then begin
CustomDimensions.Add('url', url);
CustomDimensions.Add('HttpStatusCode', Format(HttpResponseMessage.HttpStatusCode()));
CustomDimensions.Add('ReasonPhrase', HttpResponseMessage.ReasonPhrase);
CustomDimensions.Add('IsBlockedByEnvironment', Format(HttpResponseMessage.IsBlockedByEnvironment()));
FeatureTelemetry.LogError('0000NRN', HMRCFraudPreventHeadersTok, '', GetPublicIPAddressRequestFailedErr, '', CustomDimensions);
end;
HttpResponseMessage.Content().ReadAs(Content);
RegExString := '([0-9]{1,3}(\.[0-9]{1,3}){3})|(([0-9A-Fa-f]{0,4}:){2,7}([0-9A-Fa-f]{1,4}))';
Regex.Match(Content, RegExString, 0, Matches);
if Matches.FindFirst() then
Result := Matches.ReadValue();
if MTDOAuth20Mgt.GetServerPublicIPFromAzureFunction(Result) then;
end;

internal procedure TestPublicIPServiceURL(url: Text)
var
MTDSessionFraudPrevHdr: Record "MTD Session Fraud Prev. Hdr";
MTDWebClientFPHeaders: Page "MTD Web Client FP Headers";
Result: Text;
begin
if not GetVendorIP(Result, url) then
Error(IPAddressErr);

if Result = '' then
Error(IPAddressErr);

MTDSessionFraudPrevHdr.DeleteAll();
MTDWebClientFPHeaders.SetPublicIPServiceURL(url);
Commit();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ codeunit 18017 "GST Tax Configuration"
UseCases.Add('{AFA9BC82-6757-44E3-B5E4-00029DACDA64}', 4);
UseCases.Add('{8EECE1FD-4BDB-4A37-92ED-00380C170CFC}', 3);
UseCases.Add('{38583B1E-682C-4B06-BB69-005849014E82}', 1);
UseCases.Add('{46054EB7-3CE7-421C-B047-00658AC5C150}', 2);
UseCases.Add('{46054EB7-3CE7-421C-B047-00658AC5C150}', 3);
UseCases.Add('{D2457D2F-2B0E-4F56-BF93-007E245C4FF8}', 1);
UseCases.Add('{E9E7486C-DBFB-432C-886F-017AD828CE5E}', 6);
UseCases.Add('{6D031AA1-2009-4D4A-A8E7-01D9116EDC5C}', 3);
Expand All @@ -77,7 +77,7 @@ codeunit 18017 "GST Tax Configuration"
UseCases.Add('{BBD37D0A-E328-4544-B5E1-03FCF65399D5}', 6);
UseCases.Add('{1C2FBFBD-A18B-4A5D-819E-043993E5510C}', 6);
UseCases.Add('{4684DF92-D578-4978-B4EC-04ACC07C8206}', 4);
UseCases.Add('{668C2032-DD90-4A23-8F30-04B69FE7C99E}', 2);
UseCases.Add('{668C2032-DD90-4A23-8F30-04B69FE7C99E}', 3);
UseCases.Add('{C89845E0-C8B1-45B1-9C1B-04EC264B7AC7}', 5);
UseCases.Add('{76F9EC4B-C6F3-4DBE-B1CA-04EFC5AD609E}', 5);
UseCases.Add('{4AC1A712-CC9B-4CB7-91EA-05245C1D7211}', 4);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ codeunit 18467 "Subcontracting Post Batch"
Item: Record Item;
ItemTrackingCode: Record "Item Tracking Code";
ItemTrackingSetup: Record "Item Tracking Setup";
TempTrackingSpecification: Record "Tracking Specification" temporary;
ItemTrackingManagement: Codeunit "Item Tracking Management";
ItemJnlPostBatch: Codeunit "Item Jnl.-Post Batch";

Inbound: Boolean;
SNRequired: Boolean;
Expand Down Expand Up @@ -193,7 +195,12 @@ codeunit 18467 "Subcontracting Post Batch"
if Item."Item Tracking Code" <> '' then
SubcontractingPost.TransferTrackingToItemJnlLine(SubOrderCompList, ItemJnlLine, SubOrderCompList."Quantity To Send", 0);

ItemJnlPostLine.RunWithCheck(ItemJnlLine);
if ItemJnlLine."Value Entry Type" <> ItemJnlLine."Value Entry Type"::Revaluation then begin
if not ItemJnlPostLine.RunWithCheck(ItemJnlLine) then
ItemJnlPostLine.CheckItemTracking();
ItemJnlPostLine.CollectTrackingSpecification(TempTrackingSpecification);
ItemJnlPostBatch.PostWhseJnlLine(ItemJnlLine, ItemJnlLine.Quantity, ItemJnlLine."Quantity (Base)", TempTrackingSpecification);
end;
end;

procedure PostPurchOrder(MultiSubOrderDet: Record "Multiple Subcon. Order Details")
Expand Down
14 changes: 12 additions & 2 deletions Apps/IN/INGST/app/Translations/India GST.en-GB.xlf

Large diffs are not rendered by default.

14 changes: 12 additions & 2 deletions Apps/IN/INGST/app/Translations/India GST.en-US.xlf

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ codeunit 10684 "Elec. VAT Create Content"
VATReportHeader: Record "VAT Report Header";
VATReportingCode: Record "VAT Reporting Code";
VATSpecification: Record "VAT Specification";
VATNote: Record "VAT Note";
ElecVATXMLHelper: Codeunit "Elec. VAT XML Helper";
ElecVATDataMgt: Codeunit "Elec. VAT Data Mgt.";
OriginalVATCode: Code[20];
Expand Down Expand Up @@ -106,16 +105,7 @@ codeunit 10684 "Elec. VAT Create Content"
ElecVATXMLHelper.AppendXMLNode('sats', Format(VATReportingCode."VAT Rate For Reporting", 0, '<Integer><Decimals><Comma,,>'));
end;
ElecVATXMLHelper.AppendXMLNode('merverdiavgift', GetAmountTextRounded(GetReportingVATAmountFromVATStatementReportLine(TempVATStatementReportLine, VATReportingCode)));
if (VATReportingCode."VAT Note Code" <> '') or (TempVATStatementReportLine.Note <> '') then begin
ElecVATXMLHelper.AddNewXMLNode('merknad', '');
if VATReportingCode."VAT Note Code" = '' then
ElecVATXMLHelper.AppendXMLNode('beskrivelse', TempVATStatementReportLine.Note)
else begin
VATNote.Get(VATReportingCode."VAT Note Code");
ElecVATXMLHelper.AppendXMLNode('utvalgtMerknad', VATNote."VAT Report Value");
end;
ElecVATXMLHelper.FinalizeXMLNode();
end;
AddNoteToXML(ElecVATXMLHelper, VATReportingCode, TempVATStatementReportLine);
ElecVATXMLHelper.FinalizeXMLNode();
if IsReverseCharge then begin
ElecVATXMLHelper.AddNewXMLNode('mvaSpesifikasjonslinje', '');
Expand All @@ -126,12 +116,7 @@ codeunit 10684 "Elec. VAT Create Content"
end;
ElecVATXMLHelper.AppendXMLNode('mvaKodeRegnskapsystem', TempVATStatementReportLine.Description);
ElecVATXMLHelper.AppendXMLNode('merverdiavgift', GetAmountTextRounded(-TempVATStatementReportLine.Amount));
if VATReportingCode."VAT Note Code" <> '' then begin
VATNote.Get(VATReportingCode."VAT Note Code");
ElecVATXMLHelper.AddNewXMLNode('merknad', '');
ElecVATXMLHelper.AppendXMLNode('utvalgtMerknad', VATNote."VAT Report Value");
ElecVATXMLHelper.FinalizeXMLNode();
end;
AddNoteToXML(ElecVATXMLHelper, VATReportingCode, TempVATStatementReportLine);
ElecVATXMLHelper.FinalizeXMLNode();
end;
until TempVATStatementReportLine.Next() = 0;
Expand Down Expand Up @@ -312,4 +297,20 @@ codeunit 10684 "Elec. VAT Create Content"
exit(VATStatementReportLine.Amount);
exit(VATStatementReportLine.Amount + VATStatementReportLine."Non-Deductible Amount");
end;

local procedure AddNoteToXML(var ElecVATXMLHelper: Codeunit "Elec. VAT XML Helper"; VATReportingCode: Record "VAT Reporting Code"; VATStatementReportLine: Record "VAT Statement Report Line")
var
VATNote: Record "VAT Note";
begin
if (VATReportingCode."VAT Note Code" <> '') or (VATStatementReportLine.Note <> '') then begin
ElecVATXMLHelper.AddNewXMLNode('merknad', '');
if VATReportingCode."VAT Note Code" = '' then
ElecVATXMLHelper.AppendXMLNode('beskrivelse', VATStatementReportLine.Note)
else begin
VATNote.Get(VATReportingCode."VAT Note Code");
ElecVATXMLHelper.AppendXMLNode('utvalgtMerknad', VATNote."VAT Report Value");
end;
ElecVATXMLHelper.FinalizeXMLNode();
end;
end;
}
Loading

0 comments on commit 92ed18c

Please sign in to comment.