Skip to content

Commit 81a8a74

Browse files
committed
ZUGFeRD 2.3.2 Delphi 6
1 parent 1d93d6f commit 81a8a74

File tree

6 files changed

+356
-80
lines changed

6 files changed

+356
-80
lines changed

Delphi6/Samples/XRechnungUnit2TestCases.pas

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ TInvoiceTestCases = class(TObject)
2424
public
2525
class procedure Gesamtbeispiel(inv : TInvoice; Zahlungsbedingung : Integer;
2626
NachlaesseZuschlaegeVerwenden, AbschlagsrechnungAbziehen,
27-
AnhaengeVerwenden, LieferanschriftAusgeben : Boolean);
27+
AnhaengeVerwenden, LieferanschriftAusgeben : Boolean;
28+
XRechnungCII : Boolean = false);
2829
class procedure Kleinunternehmerregelung(inv : TInvoice);
2930
class procedure Paragr13b(inv : TInvoice);
3031
class procedure Austauschteilesteuer(inv : TInvoice);
@@ -301,7 +302,7 @@ class procedure TInvoiceTestCases.Differenzbesteuerung(inv: TInvoice);
301302
class procedure TInvoiceTestCases.Gesamtbeispiel(inv: TInvoice;
302303
Zahlungsbedingung: Integer; NachlaesseZuschlaegeVerwenden,
303304
AbschlagsrechnungAbziehen, AnhaengeVerwenden,
304-
LieferanschriftAusgeben: Boolean);
305+
LieferanschriftAusgeben: Boolean; XRechnungCII : Boolean = false);
305306
var
306307
suc : Boolean;
307308
begin
@@ -400,17 +401,17 @@ class procedure TInvoiceTestCases.Gesamtbeispiel(inv: TInvoice;
400401
inv.PaymentTermsType := iptt_CashDiscount1;
401402
inv.PaymentTermCashDiscount1Days := 7;
402403
inv.PaymentTermCashDiscount1Percent := 4.25;
403-
inv.PaymentTermCashDiscount1Base := 0;
404+
inv.PaymentTermCashDiscount1Base := 0; //optional auf welchen Betrag bezieht sich Skonto
404405
end;
405406
3 :
406407
begin
407408
inv.PaymentTermsType := iptt_CashDiscount2;
408409
inv.PaymentTermCashDiscount1Days := 7;
409410
inv.PaymentTermCashDiscount1Percent := 4.25;
410-
inv.PaymentTermCashDiscount1Base := 0;
411+
inv.PaymentTermCashDiscount1Base := 0; //optional auf welchen Betrag bezieht sich Skonto
411412
inv.PaymentTermCashDiscount2Days := 14;
412413
inv.PaymentTermCashDiscount2Percent := 3;
413-
inv.PaymentTermCashDiscount2Base := 0;
414+
inv.PaymentTermCashDiscount2Base := 0; //optional auf welchen Betrag bezieht sich Skonto
414415
end;
415416
else
416417
inv.PaymentTermsType := iptt_None;
@@ -685,11 +686,12 @@ class procedure TInvoiceTestCases.Gesamtbeispiel(inv: TInvoice;
685686
ID := 'R2020-0001';
686687
IssueDate := Date-100; //Rechnungsdatum
687688
end;
688-
//with inv.PrecedingInvoiceReferences.AddPrecedingInvoiceReference do
689-
//begin
690-
// ID := 'R2020-0002';
691-
// IssueDate := Date-50; //Rechnungsdatum
692-
//end;
689+
if not XRechnungCII then
690+
with inv.PrecedingInvoiceReferences.AddPrecedingInvoiceReference do
691+
begin
692+
ID := 'R2020-0002';
693+
IssueDate := Date-50; //Rechnungsdatum
694+
end;
693695
inv.PrepaidAmount := 100.00; //Euro angezahlt
694696
inv.PayableAmount := inv.PayableAmount - inv.PrepaidAmount; //Vom Zahlbetrag abziehen
695697
end;

Delphi6/intfInvoice.pas

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,11 @@ interface
113113
ipmc_InstrumentNotDefined, //1 Keine Angaben
114114
ipmc_InCash, //10 Barzahlung
115115
ipmc_Cheque, //20 Scheck
116-
ipmc_CreditTransfer, //30 Ueberweisung nicht SEPA (nicht SEPA,PayPal, etc.)
116+
ipmc_CreditTransfer, //30 Ueberweisung nicht SEPA (nicht SEPA)
117117
ipmc_CreditCard, //54 Kreditkarte
118118
ipmc_SEPACreditTransfer, //58 Ueberweisung (SEPA)
119119
ipmc_SEPADirectDebit, //59 Lastschrift (SEPA)
120+
ipmc_OnlinePaymentService, //68 Online Payment Service PayPal, etc.
120121
ipmc_MutuallyDefined //ZZZ Gegenseitig definiert (PayPal, etc.)
121122
);
122123

Delphi6/intfXRechnung.pas

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ TXRechnungHelper = class(TObject)
9090
XRechnungVersion_230_UNCEFACT_Deprecated,
9191
XRechnungVersion_30x_UBL,
9292
XRechnungVersion_30x_UNCEFACT,
93+
ZUGFeRDExtendedVersion_232,
9394
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX);
9495

9596
TXRechnungValidationHelper = class(TObject)
@@ -331,6 +332,7 @@ class function TXRechnungInvoiceAdapter.LoadFromXMLDocument(
331332
XRechnungVersion_230_UNCEFACT_Deprecated : Result := TXRechnungInvoiceAdapter230.LoadDocumentUNCEFACT(_Invoice,_XmlDocument,_Error);
332333
XRechnungVersion_30x_UNCEFACT : Result := TXRechnungInvoiceAdapter301.LoadDocumentUNCEFACT(_Invoice,_XmlDocument,_Error);
333334
{$IFNDEF ZUGFeRD_Support}
335+
ZUGFeRDExtendedVersion_232,
334336
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX : Result := TXRechnungInvoiceAdapter301.LoadDocumentUNCEFACT(_Invoice,_XmlDocument,_Error);
335337
else exit;
336338
{$ELSE}
@@ -368,7 +370,8 @@ class procedure TXRechnungInvoiceAdapter.SaveDocument(_Invoice: TInvoice;
368370
XRechnungVersion_230_UBL_Deprecated : TXRechnungInvoiceAdapter230.SaveDocumentUBL(_Invoice,_Xml);
369371
XRechnungVersion_30x_UBL : TXRechnungInvoiceAdapter301.SaveDocumentUBL(_Invoice,_Xml);
370372
XRechnungVersion_230_UNCEFACT_Deprecated : TXRechnungInvoiceAdapter230.SaveDocumentUNCEFACT(_Invoice,_Xml);
371-
XRechnungVersion_30x_UNCEFACT : TXRechnungInvoiceAdapter301.SaveDocumentUNCEFACT(_Invoice,_Xml);
373+
XRechnungVersion_30x_UNCEFACT : TXRechnungInvoiceAdapter301.SaveDocumentUNCEFACT(_Invoice,_Xml,true);
374+
ZUGFeRDExtendedVersion_232 : TXRechnungInvoiceAdapter301.SaveDocumentUNCEFACT(_Invoice,_Xml,false);
372375
else raise Exception.Create('XRechnung - wrong version');
373376
end;
374377
end;
@@ -713,6 +716,9 @@ class function TXRechnungHelper.InvoicePaymentMeansCodeFromStr(
713716
if SameText(_Val,'59') then
714717
Result := ipmc_SEPADirectDebit
715718
else
719+
if SameText(_Val,'68') then
720+
Result := ipmc_OnlinePaymentService
721+
else
716722
if SameText(_Val,'ZZZ') then
717723
Result := ipmc_MutuallyDefined
718724
else
@@ -731,6 +737,7 @@ class function TXRechnungHelper.InvoicePaymentMeansCodeToStr(_Val: TInvoicePayme
731737
ipmc_CreditCard: Result := '54';
732738
ipmc_SEPACreditTransfer: Result := '58';
733739
ipmc_SEPADirectDebit: Result := '59';
740+
ipmc_OnlinePaymentService: Result := '68';
734741
ipmc_MutuallyDefined: Result := 'ZZZ';
735742
else Result := '1'; //ipmc_InstrumentNotDefined
736743
end;
@@ -1071,7 +1078,8 @@ class function TXRechnungValidationHelper.GetXRechnungVersion(
10711078
if Pos('xrechnung_3.0',AnsiLowerCase(node.Text))>0 then
10721079
Result := XRechnungVersion_30x_UBL;
10731080
end else
1074-
if (SameText(_XML.DocumentElement.NodeName,'CrossIndustryInvoice') or SameText(_XML.DocumentElement.NodeName,'rsm:CrossIndustryInvoice')) then
1081+
if (SameText(_XML.DocumentElement.NodeName,'CrossIndustryInvoice') or
1082+
SameText(_XML.DocumentElement.NodeName,'rsm:CrossIndustryInvoice')) then
10751083
begin
10761084
if not (TXRechnungXMLHelper.FindChild(_XML.DocumentElement,'rsm:ExchangedDocumentContext',node) or
10771085
TXRechnungXMLHelper.FindChild(_XML.DocumentElement,'ExchangedDocumentContext',node)) then
@@ -1086,7 +1094,10 @@ class function TXRechnungValidationHelper.GetXRechnungVersion(
10861094
if Pos('xrechnung_3.0',AnsiLowerCase(node.Text))>0 then
10871095
Result := XRechnungVersion_30x_UNCEFACT
10881096
else
1089-
if Pos('urn:cen.eu:en16931:2017',AnsiLowerCase(node.Text))=1 then
1097+
if SameText(node.Text,'urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended') then
1098+
Result := ZUGFeRDExtendedVersion_232
1099+
else
1100+
if Pos('urn:cen.eu:en16931:2017',AnsiLowerCase(node.Text))>0 then
10901101
Result := XRechnungVersion_ReadingSupport_ZUGFeRDFacturX;
10911102
end;
10921103
end;
@@ -1459,6 +1470,7 @@ class function TZUGFeRDInvoiceAdapter.LoadFromInvoiceDescriptor(
14591470
SEPACreditTransfer: lPaymentMeansCode := ipmc_SEPACreditTransfer;
14601471
SEPADirectDebit: lPaymentMeansCode := ipmc_SEPADirectDebit;
14611472
NotDefined: lPaymentMeansCode := ipmc_InstrumentNotDefined;
1473+
//TODO Fehlt 68
14621474
// AutomatedClearingHouseDebit: ;
14631475
// DebitTransfer: ;
14641476
// PaymentToBankAccount: ;

0 commit comments

Comments
 (0)