Skip to content

Commit cebc94e

Browse files
committed
2.2 support removed
1 parent 9b018f5 commit cebc94e

File tree

7 files changed

+158
-31
lines changed

7 files changed

+158
-31
lines changed

.gitignore

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,15 @@
2626
#*.obj
2727
#
2828

29-
Documentation
29+
Documentation/*/*.zip
30+
Documentation/*/*.xml
31+
Documentation/*.txt
32+
Documentation/*.bat
33+
Documentation/*.rc
34+
Documentation/*.res
35+
Documentation/*.eml
36+
Documentation/*.md
37+
Documentation/More
3038
Samples/Win32
3139
Samples/Win64
3240
SaxonHE-Unmanaged

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ https://github.com/itplr-kosit/validator-configuration-xrechnung/issues/41
2222

2323
Aktuelle XRechnung-Version
2424

25-
- 2.3.1 gültig ab 1.8.2023
25+
- 2.3.1 gültig ab 1.8.2023 https://github.com/LandrixSoftware/XRechnung-for-Delphi/releases
26+
27+
Nächste XRechnung-Version
28+
29+
- 3.0.0 gültig ab 1.2.2024 im aktuellen Branch in Arbeit
2630

2731
## Weitere Informationen zu XRechnung
2832

Samples/XRechnungUnit1.dfm

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ object Form1: TForm1
177177
end
178178
object Button3: TButton
179179
Left = 8
180-
Top = 624
180+
Top = 592
181181
Width = 130
182182
Height = 25
183183
Caption = 'XRechnung validieren'
@@ -186,11 +186,21 @@ object Form1: TForm1
186186
end
187187
object Button5: TButton
188188
Left = 8
189-
Top = 655
189+
Top = 623
190190
Width = 130
191191
Height = 25
192-
Caption = 'XRechnung visualisieren'
192+
Caption = 'XRechnung als HTML'
193193
TabOrder = 15
194194
OnClick = Button5Click
195195
end
196+
object Button6: TButton
197+
Left = 8
198+
Top = 654
199+
Width = 130
200+
Height = 25
201+
Caption = 'XRechnung als PDF'
202+
Enabled = False
203+
TabOrder = 16
204+
OnClick = Button6Click
205+
end
196206
end

Samples/XRechnungUnit1.pas

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ TForm1 = class(TForm)
4545
Panel1: TPanel;
4646
Button3: TButton;
4747
Button5: TButton;
48+
Button6: TButton;
4849
procedure btCreateInvoiceClick(Sender: TObject);
4950
procedure FormCreate(Sender: TObject);
5051
procedure Button4Click(Sender: TObject);
@@ -53,6 +54,7 @@ TForm1 = class(TForm)
5354
procedure Button2Click(Sender: TObject);
5455
procedure Button3Click(Sender: TObject);
5556
procedure Button5Click(Sender: TObject);
57+
procedure Button6Click(Sender: TObject);
5658
private
5759
procedure Generate231(inv : TInvoice);
5860
public
@@ -721,7 +723,7 @@ procedure TForm1.Button4Click(Sender: TObject);
721723
procedure TForm1.Button5Click(Sender: TObject);
722724
var
723725
od : TOpenDialog;
724-
cmdoutput,xmlresult,htmlresult : String;
726+
cmdoutput,htmlresult : String;
725727
Doc : Variant;
726728
begin
727729
btX2ConvertHTML.Visible := false;
@@ -736,7 +738,7 @@ procedure TForm1.Button5Click(Sender: TObject);
736738
GetXRechnungValidationHelperJava.SetJavaRuntimeEnvironmentPath(JavaRuntimeEnvironmentPath)
737739
.SetValidatorLibPath(ValidatorLibPath)
738740
.SetVisualizationLibPath(VisualizationLibPath)
739-
.VisualizeFile(od.FileName, (TXRechnungValidationHelper.GetXRechnungVersion(od.FileName) in [XRechnungVersion_220_UBL,XRechnungVersion_230_UBL]),cmdoutput,htmlresult);
741+
.VisualizeFile(od.FileName, (TXRechnungValidationHelper.GetXRechnungVersion(od.FileName) in [XRechnungVersion_230_UBL]),cmdoutput,htmlresult);
740742

741743
Memo3.Lines.Text := cmdoutput;
742744

@@ -752,6 +754,44 @@ procedure TForm1.Button5Click(Sender: TObject);
752754
end;
753755
end;
754756

757+
procedure TForm1.Button6Click(Sender: TObject);
758+
var
759+
od : TOpenDialog;
760+
cmdoutput : String;
761+
Doc : Variant;
762+
pdfresult : TMemoryStream;
763+
begin
764+
//Experimental - it does not work
765+
766+
btX2ConvertHTML.Visible := false;
767+
WebBrowser2.Navigate2('about:blank');
768+
769+
od := TOpenDialog.Create(nil);
770+
try
771+
if not od.Execute then
772+
exit;
773+
774+
GetXRechnungValidationHelperJava.SetJavaRuntimeEnvironmentPath(JavaRuntimeEnvironmentPath)
775+
.SetValidatorLibPath(ValidatorLibPath)
776+
.SetVisualizationLibPath(VisualizationLibPath)
777+
.VisualizeFileAsPdf(od.FileName, (TXRechnungValidationHelper.GetXRechnungVersion(od.FileName) in [XRechnungVersion_230_UBL]),cmdoutput,pdfresult);
778+
779+
Memo3.Lines.Text := cmdoutput;
780+
781+
Doc := WebBrowser2.Document;
782+
Doc.Clear;
783+
if pdfresult <> nil then
784+
begin
785+
//pdfresult.SaveToFile();
786+
pdfresult.Free;
787+
end else
788+
Doc.Write('<html><body>Visualisierung nicht erfolgreich. Siehe Verzeichnis ./Distribution/Read.Me</body></html>');
789+
Doc.Close;
790+
finally
791+
od.Free;
792+
end;
793+
end;
794+
755795
procedure TForm1.Generate231(inv: TInvoice);
756796
var
757797
xml,cmdoutput,xmlresult,htmlresult,error : String;

intf.Invoice.pas

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ TInvoiceAttachmentList = class(TObjectList<TInvoiceAttachment>)
112112

113113
TInvoiceUnitCodeHelper = class(TObject)
114114
public
115-
class function MapUnitOfMeasure(const _UnitOfMeasure : String; out _Success : Boolean; _DefaultOnFailure : TInvoiceUnitCode = TInvoiceUnitCode.iuc_piece) : TInvoiceUnitCode;
115+
class function MapUnitOfMeasure(_UnitOfMeasure : String; out _Success : Boolean; _DefaultOnFailure : TInvoiceUnitCode = TInvoiceUnitCode.iuc_piece) : TInvoiceUnitCode;
116116
end;
117117

118118
{$region 'TInvoiceAllowanceOrChargeIdentCode'}
@@ -529,12 +529,13 @@ destructor TInvoiceLine.Destroy;
529529

530530
{ TInvoiceUnitCodeHelper }
531531

532-
class function TInvoiceUnitCodeHelper.MapUnitOfMeasure(const _UnitOfMeasure: String; out _Success: Boolean;
532+
class function TInvoiceUnitCodeHelper.MapUnitOfMeasure(_UnitOfMeasure: String; out _Success: Boolean;
533533
_DefaultOnFailure: TInvoiceUnitCode): TInvoiceUnitCode;
534534
begin
535535
Result := _DefaultOnFailure;
536536
_Success := false;
537-
if Trim(_UnitOfMeasure) = '' then
537+
_UnitOfMeasure := Trim(_UnitOfMeasure);
538+
if _UnitOfMeasure = '' then
538539
begin
539540
_Success := true;
540541
exit;

intf.XRechnung.pas

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ TXRechnungHelper = class(TObject)
7474
end;
7575

7676
TXRechnungVersion = (XRechnungVersion_Unknown,
77-
XRechnungVersion_220_UBL,
7877
XRechnungVersion_230_UBL,
79-
XRechnungVersion_220_UNCEFACT,
8078
XRechnungVersion_230_UNCEFACT,
8179
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX_2xx);
8280

@@ -982,9 +980,7 @@ class function TXRechnungInvoiceAdapter.LoadFromFile(_Invoice: TInvoice;
982980
try
983981
xml.LoadFromFile(_Filename);
984982
case TXRechnungValidationHelper.GetXRechnungVersion(xml) of
985-
XRechnungVersion_220_UBL,
986-
XRechnungVersion_230_UBL : Result := LoadDocumentUBL(_Invoice,XRechnungVersion_220_UBL,xml,_Error);
987-
XRechnungVersion_220_UNCEFACT,
983+
XRechnungVersion_230_UBL : Result := LoadDocumentUBL(_Invoice,XRechnungVersion_230_UBL,xml,_Error);
988984
XRechnungVersion_230_UNCEFACT,
989985
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX_2xx : Result := LoadDocumentUNCEFACT(_Invoice,xml,_Error);
990986
else exit;
@@ -1009,9 +1005,7 @@ class function TXRechnungInvoiceAdapter.LoadFromStream(_Invoice: TInvoice;
10091005
try
10101006
xml.LoadFromStream(_Stream);
10111007
case TXRechnungValidationHelper.GetXRechnungVersion(xml) of
1012-
XRechnungVersion_220_UBL,
1013-
XRechnungVersion_230_UBL : Result := LoadDocumentUBL(_Invoice,XRechnungVersion_220_UBL,xml,_Error);
1014-
XRechnungVersion_220_UNCEFACT,
1008+
XRechnungVersion_230_UBL : Result := LoadDocumentUBL(_Invoice,XRechnungVersion_230_UBL,xml,_Error);
10151009
XRechnungVersion_230_UNCEFACT,
10161010
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX_2xx : Result := LoadDocumentUNCEFACT(_Invoice,xml,_Error);
10171011
else exit;
@@ -1036,9 +1030,7 @@ class function TXRechnungInvoiceAdapter.LoadFromXMLStr(_Invoice: TInvoice;
10361030
try
10371031
xml.LoadFromXML(_XML);
10381032
case TXRechnungValidationHelper.GetXRechnungVersion(xml) of
1039-
XRechnungVersion_220_UBL,
1040-
XRechnungVersion_230_UBL : Result := LoadDocumentUBL(_Invoice,XRechnungVersion_220_UBL,xml,_Error);
1041-
XRechnungVersion_220_UNCEFACT,
1033+
XRechnungVersion_230_UBL : Result := LoadDocumentUBL(_Invoice,XRechnungVersion_230_UBL,xml,_Error);
10421034
XRechnungVersion_230_UNCEFACT,
10431035
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX_2xx : Result := LoadDocumentUNCEFACT(_Invoice,xml,_Error);
10441036
else exit;
@@ -1052,9 +1044,7 @@ class procedure TXRechnungInvoiceAdapter.SaveDocument(_Invoice: TInvoice;
10521044
_Version : TXRechnungVersion; _Xml: IXMLDocument);
10531045
begin
10541046
case _Version of
1055-
XRechnungVersion_220_UBL,
10561047
XRechnungVersion_230_UBL : SaveDocumentUBL(_Invoice,_Version,_Xml);
1057-
XRechnungVersion_220_UNCEFACT,
10581048
XRechnungVersion_230_UNCEFACT : SaveDocumentUNCEFACT(_Invoice,_Xml);
10591049
else raise Exception.Create('XRechnung - wrong version');
10601050
end;
@@ -1398,7 +1388,7 @@ class procedure TXRechnungInvoiceAdapter.SaveDocumentUBL(_Invoice: TInvoice;
13981388
TXRechnungHelper.FloatToStr(_Invoice.PaymentTermCashDiscount1Percent)])+
13991389
IfThen(_Invoice.PaymentTermCashDiscount1Base <> 0,'BASISBETRAG='+
14001390
TXRechnungHelper.AmountToStr(_Invoice.PaymentTermCashDiscount1Base)+'#','')+
1401-
IfThen(_Version in [XRechnungVersion_220_UBL,XRechnungVersion_230_UBL],#13#10,'');
1391+
IfThen(_Version in [XRechnungVersion_230_UBL],#13#10,'');
14021392
end;
14031393
iptt_CashDiscount2:
14041394
begin
@@ -1415,7 +1405,7 @@ class procedure TXRechnungInvoiceAdapter.SaveDocumentUBL(_Invoice: TInvoice;
14151405
TXRechnungHelper.FloatToStr(_Invoice.PaymentTermCashDiscount2Percent)])+
14161406
IfThen(_Invoice.PaymentTermCashDiscount2Base <> 0,'BASISBETRAG='+
14171407
TXRechnungHelper.AmountToStr(_Invoice.PaymentTermCashDiscount2Base)+'#','')+
1418-
IfThen(_Version in [XRechnungVersion_220_UBL,XRechnungVersion_230_UBL],#13#10,'');
1408+
IfThen(_Version in [XRechnungVersion_230_UBL],#13#10,'');
14191409
end;
14201410
end;
14211411
end;
@@ -2569,9 +2559,9 @@ class function TXRechnungValidationHelper.GetXRechnungVersion(
25692559
begin
25702560
if not TXRechnungXMLHelper.FindChild(_XML.DocumentElement,'cbc:CustomizationID',node) then
25712561
exit;
2572-
if node.Text.EndsWith('xrechnung_2.2',true) then
2573-
Result := XRechnungVersion_220_UBL
2574-
else
2562+
//if node.Text.EndsWith('xrechnung_2.2',true) then
2563+
// Result := XRechnungVersion_220_UBL
2564+
//else
25752565
if node.Text.EndsWith('xrechnung_2.3',true) then
25762566
Result := XRechnungVersion_230_UBL;
25772567
end else
@@ -2583,9 +2573,9 @@ class function TXRechnungValidationHelper.GetXRechnungVersion(
25832573
exit;
25842574
if not TXRechnungXMLHelper.FindChild(node2,'ram:ID',node) then
25852575
exit;
2586-
if node.Text.EndsWith('xrechnung_2.2',true) then
2587-
Result := XRechnungVersion_220_UNCEFACT
2588-
else
2576+
//if node.Text.EndsWith('xrechnung_2.2',true) then
2577+
// Result := XRechnungVersion_220_UNCEFACT
2578+
//else
25892579
if node.Text.EndsWith('xrechnung_2.3',true) then
25902580
Result := XRechnungVersion_230_UNCEFACT
25912581
else

intf.XRechnungValidationHelperJava.pas

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ interface
3131
function ValidateFile(const _InvoiceXMLFilename : String; out _CmdOutput,_ValidationResultAsXML,_ValidationResultAsHTML : String) : Boolean;
3232
function Visualize(const _InvoiceXMLData : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput,_VisualizationAsHTML : String) : Boolean;
3333
function VisualizeFile(const _InvoiceXMLFilename : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput,_VisualizationAsHTML : String) : Boolean;
34+
function VisualizeFileAsPdf(const _InvoiceXMLFilename : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput : String; out _VisualizationAsPdf : TMemoryStream) : Boolean;
3435
end;
3536

3637
function GetXRechnungValidationHelperJava : IXRechnungValidationHelperJava;
@@ -58,6 +59,7 @@ TXRechnungValidationHelperJava = class(TInterfacedObject,IXRechnungValidationH
5859
function ValidateFile(const _InvoiceXMLFilename : String; out _CmdOutput,_ValidationResultAsXML,_ValidationResultAsHTML : String) : Boolean;
5960
function Visualize(const _InvoiceXMLData : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput,_VisualizationAsHTML : String) : Boolean;
6061
function VisualizeFile(const _InvoiceXMLFilename : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput,_VisualizationAsHTML : String) : Boolean;
62+
function VisualizeFileAsPdf(const _InvoiceXMLFilename : String; _TrueIfUBL_FalseIfCII : Boolean; out _CmdOutput : String; out _VisualizationAsPdf : TMemoryStream) : Boolean;
6163
end;
6264

6365
function GetXRechnungValidationHelperJava : IXRechnungValidationHelperJava;
@@ -430,6 +432,78 @@ function TXRechnungValidationHelperJava.VisualizeFile(
430432
end;
431433
end;
432434

435+
function TXRechnungValidationHelperJava.VisualizeFileAsPdf(
436+
const _InvoiceXMLFilename: String; _TrueIfUBL_FalseIfCII: Boolean;
437+
out _CmdOutput: String; out _VisualizationAsPdf: TMemoryStream): Boolean;
438+
var
439+
hstrl,cmd: TStringList;
440+
begin
441+
//Experimental - it does not work
442+
Result := false;
443+
if _InvoiceXMLFilename = '' then
444+
exit;
445+
if not FileExists(_InvoiceXMLFilename) then
446+
exit;
447+
if not FileExists(JavaRuntimeEnvironmentPath+'bin\java.exe') then
448+
exit;
449+
if not FileExists(ValidatorLibPath+'libs\Saxon-HE-11.4.jar') then
450+
exit;
451+
if _TrueIfUBL_FalseIfCII then
452+
if not FileExists(VisualizationLibPath+'xsl\ubl-invoice-xr.xsl') then
453+
exit;
454+
if not _TrueIfUBL_FalseIfCII then
455+
if not FileExists(VisualizationLibPath+'xsl\cii-xr.xsl') then
456+
exit;
457+
458+
if not FileExists(VisualizationLibPath+'xsl\xrechnung-html.xsl') then
459+
exit;
460+
461+
hstrl := TStringList.Create;
462+
cmd := TStringList.Create;
463+
try
464+
cmd.Add('pushd '+QuoteIfContainsSpace(ExtractFilePath(_InvoiceXMLFilename)));
465+
if _TrueIfUBL_FalseIfCII then
466+
cmd.Add(QuoteIfContainsSpace(JavaRuntimeEnvironmentPath+'bin\java.exe')+' -cp '+
467+
QuoteIfContainsSpace(ValidatorLibPath+'libs\Saxon-HE-11.4.jar;'+ValidatorLibPath+'libs\xmlresolver-4.4.3.jar')+
468+
' net.sf.saxon.Transform'+' -s:'+QuoteIfContainsSpace(_InvoiceXMLFilename)+
469+
' -xsl:'+QuoteIfContainsSpace(VisualizationLibPath+'xsl\ubl-invoice-xr.xsl')+
470+
' -o:'+QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-xr.xml')))
471+
else
472+
cmd.Add(QuoteIfContainsSpace(JavaRuntimeEnvironmentPath+'bin\java.exe')+' -cp '+
473+
QuoteIfContainsSpace(ValidatorLibPath+'libs\Saxon-HE-11.4.jar;'+ValidatorLibPath+'libs\xmlresolver-4.4.3.jar')+
474+
' net.sf.saxon.Transform'+' -s:'+QuoteIfContainsSpace(_InvoiceXMLFilename)+
475+
' -xsl:'+QuoteIfContainsSpace(VisualizationLibPath+'xsl\cii-xr.xsl')+
476+
' -o:'+QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-xr.xml')));
477+
cmd.Add(QuoteIfContainsSpace(JavaRuntimeEnvironmentPath+'bin\java.exe')+' -cp '+
478+
QuoteIfContainsSpace(ValidatorLibPath+'libs\Saxon-HE-11.4.jar;'+ValidatorLibPath+'libs\xmlresolver-4.4.3.jar')+
479+
' net.sf.saxon.Transform'+' -s:'+QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-xr.xml'))+
480+
' -xsl:'+QuoteIfContainsSpace(VisualizationLibPath+'xsl\xr-pdf.xsl')+
481+
' -o:'+QuoteIfContainsSpace(ChangeFileExt(_InvoiceXMLFilename,'-.pdf')));
482+
483+
cmd.SaveToFile(_InvoiceXMLFilename+'.bat',TEncoding.ANSI);
484+
485+
Result := ExecAndWait(_InvoiceXMLFilename+'.bat','');
486+
487+
_CmdOutput := CmdOutput.Text;
488+
489+
DeleteFile(_InvoiceXMLFilename+'.bat');
490+
//DeleteFile(ChangeFileExt(_InvoiceXMLFilename,'-xr.xml'));
491+
492+
if FileExists(ChangeFileExt(_InvoiceXMLFilename,'-.pdf')) then
493+
begin
494+
_VisualizationAsPdf := TMemoryStream.Create;
495+
_VisualizationAsPdf.LoadFromFile(ChangeFileExt(_InvoiceXMLFilename,'-.pdf'));
496+
_VisualizationAsPdf.Position := 0;
497+
//DeleteFile(ChangeFileExt(_InvoiceXMLFilename,'-.pdf'));
498+
end else
499+
Result := false;
500+
501+
finally
502+
hstrl.Free;
503+
cmd.Free;
504+
end;
505+
end;
506+
433507
function TXRechnungValidationHelperJava.QuoteIfContainsSpace(const _Value: String): String;
434508
begin
435509
if Pos(' ',_Value)>0 then

0 commit comments

Comments
 (0)