diff --git a/Prototyping/PVSProductionAnalysisInstall.Codeunit.al b/Prototyping/PVSProductionAnalysisInstall.Codeunit.al new file mode 100644 index 0000000..14ee030 --- /dev/null +++ b/Prototyping/PVSProductionAnalysisInstall.Codeunit.al @@ -0,0 +1,29 @@ +codeunit 50102 "PVS Prod. Analysis Install" +{ + Subtype = Install; + + trigger OnInstallAppPerCompany() + var + AppInfo: ModuleInfo; + begin + NavApp.GetCurrentModuleInfo(AppInfo); + if AppInfo.DataVersion() <> Version.Create('0.0.0.0') then + exit; + + BackfillSellToFields(); + end; + + local procedure BackfillSellToFields() + var + ProductionAnalysis: Record "PrintVis Production Analysis"; + ProductionAnalysisSellTo: Codeunit "PVS Prod. Analysis SellTo"; + begin + if not ProductionAnalysis.FindSet() then + exit; + + repeat + if ProductionAnalysisSellTo.SyncSellToFields(ProductionAnalysis) then + ProductionAnalysis.Modify(false); + until ProductionAnalysis.Next() = 0; + end; +} diff --git a/Prototyping/PVSProductionAnalysisSellTo.Codeunit.al b/Prototyping/PVSProductionAnalysisSellTo.Codeunit.al new file mode 100644 index 0000000..493d56c --- /dev/null +++ b/Prototyping/PVSProductionAnalysisSellTo.Codeunit.al @@ -0,0 +1,85 @@ +codeunit 50101 "PVS Prod. Analysis SellTo" +{ + EventSubscriberInstance = StaticAutomatic; + + [EventSubscriber(ObjectType::Table, Database::"PrintVis Production Analysis", 'OnBeforeInsertEvent', '', false, false)] + local procedure OnBeforeInsertProductionAnalysis(var Rec: Record "PrintVis Production Analysis"; RunTrigger: Boolean) + begin + if not RunTrigger then + exit; + + ApplySellToFields(Rec); + end; + + [EventSubscriber(ObjectType::Table, Database::"PrintVis Production Analysis", 'OnBeforeModifyEvent', '', false, false)] + local procedure OnBeforeModifyProductionAnalysis(var Rec: Record "PrintVis Production Analysis"; var xRec: Record "PrintVis Production Analysis"; RunTrigger: Boolean) + begin + if not RunTrigger then + exit; + + if not OrderNoChanged(Rec) then + exit; + + ApplySellToFields(Rec); + end; + + procedure ApplySellToFields(var ProductionAnalysis: Record "PrintVis Production Analysis") + begin + SyncSellToFields(ProductionAnalysis); + end; + + procedure SyncSellToFields(var ProductionAnalysis: Record "PrintVis Production Analysis"): Boolean + var + PVSCase: Record "PVS Case"; + SellToNo: Code[20]; + SellToName: Text[100]; + begin + if FindUniqueCaseByOrderNo(ProductionAnalysis."PrintVis Order No.", PVSCase) then begin + SellToNo := PVSCase."Sell-To No."; + SellToName := PVSCase."Sell-To Name"; + end; + + if (ProductionAnalysis."Sell-to No." = SellToNo) and (ProductionAnalysis."Sell-to Name" = SellToName) then + exit(false); + + ProductionAnalysis."Sell-to No." := SellToNo; + ProductionAnalysis."Sell-to Name" := SellToName; + exit(true); + end; + + local procedure FindUniqueCaseByOrderNo(PrintVisOrderNo: Code[20]; var PVSCase: Record "PVS Case"): Boolean + var + FirstPVSCase: Record "PVS Case"; + SellToNo: Code[20]; + SellToName: Text[100]; + begin + if PrintVisOrderNo = '' then + exit(false); + + PVSCase.SetCurrentKey("Order No."); + PVSCase.SetRange("Order No.", PrintVisOrderNo); + if not PVSCase.FindFirst() then + exit(false); + + FirstPVSCase := PVSCase; + SellToNo := PVSCase."Sell-To No."; + SellToName := PVSCase."Sell-To Name"; + + while PVSCase.Next() <> 0 do + if (PVSCase."Sell-To No." <> SellToNo) or (PVSCase."Sell-To Name" <> SellToName) then + exit(false); + + PVSCase := FirstPVSCase; + exit(true); + end; + + local procedure OrderNoChanged(ProductionAnalysis: Record "PrintVis Production Analysis"): Boolean + var + PersistedProductionAnalysis: Record "PrintVis Production Analysis"; + PersistedProductionAnalysisRef: RecordRef; + begin + PersistedProductionAnalysisRef.Get(ProductionAnalysis.RecordId); + PersistedProductionAnalysisRef.SetTable(PersistedProductionAnalysis); + exit(ProductionAnalysis."PrintVis Order No." <> PersistedProductionAnalysis."PrintVis Order No."); + end; +} diff --git a/Prototyping/PVSProductionAnalysisSellTo.TableExt.al b/Prototyping/PVSProductionAnalysisSellTo.TableExt.al new file mode 100644 index 0000000..e689f4b --- /dev/null +++ b/Prototyping/PVSProductionAnalysisSellTo.TableExt.al @@ -0,0 +1,27 @@ +tableextension 50100 "PVS Production Analysis SellTo" extends "PrintVis Production Analysis" +{ + fields + { + field(50100; "Sell-to No."; Code[20]) + { + Caption = 'Sell-to No.'; + DataClassification = CustomerContent; + Editable = false; + } + field(50101; "Sell-to Name"; Text[100]) + { + Caption = 'Sell-to Name'; + DataClassification = CustomerContent; + Editable = false; + } + modify("PrintVis Order No.") + { + trigger OnAfterValidate() + var + ProductionAnalysisSellTo: Codeunit "PVS Prod. Analysis SellTo"; + begin + ProductionAnalysisSellTo.ApplySellToFields(Rec); + end; + } + } +} diff --git a/Prototyping/PVSProductionAnalysisUpgrade.Codeunit.al b/Prototyping/PVSProductionAnalysisUpgrade.Codeunit.al new file mode 100644 index 0000000..eeaadb1 --- /dev/null +++ b/Prototyping/PVSProductionAnalysisUpgrade.Codeunit.al @@ -0,0 +1,23 @@ +codeunit 50103 "PVS Prod. Analysis Upgrade" +{ + Subtype = Upgrade; + + trigger OnUpgradePerCompany() + begin + BackfillSellToFields(); + end; + + local procedure BackfillSellToFields() + var + ProductionAnalysis: Record "PrintVis Production Analysis"; + ProductionAnalysisSellTo: Codeunit "PVS Prod. Analysis SellTo"; + begin + if not ProductionAnalysis.FindSet() then + exit; + + repeat + if ProductionAnalysisSellTo.SyncSellToFields(ProductionAnalysis) then + ProductionAnalysis.Modify(false); + until ProductionAnalysis.Next() = 0; + end; +} diff --git a/Prototyping/app.json b/Prototyping/app.json index 1e78a2d..10ede88 100644 --- a/Prototyping/app.json +++ b/Prototyping/app.json @@ -1,8 +1,8 @@ { "id": "b7d23e82-11ae-4172-9289-6e9584df4759", "name": "Prototyping", - "publisher": "PrintVis", - "version": "1.0.0.0", + "publisher": "PrintVis A/S", + "version": "1.0.0.1", "brief": "", "description": "", "privacyStatement": "", @@ -15,7 +15,7 @@ "id": "5452f323-059e-499a-9753-5d2c07eef904", "name": "PrintVis", "publisher": "PrintVis A/S", - "version": "28.0.0.0" + "version": "28.1.2.9" } ], "screenshots": [],