Skip to content

Commit

Permalink
ZUGFeRD 2.3.2 Delphi 6
Browse files Browse the repository at this point in the history
  • Loading branch information
landrix committed Nov 29, 2024
1 parent 1d93d6f commit 81a8a74
Show file tree
Hide file tree
Showing 6 changed files with 356 additions and 80 deletions.
22 changes: 12 additions & 10 deletions Delphi6/Samples/XRechnungUnit2TestCases.pas
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ TInvoiceTestCases = class(TObject)
public
class procedure Gesamtbeispiel(inv : TInvoice; Zahlungsbedingung : Integer;
NachlaesseZuschlaegeVerwenden, AbschlagsrechnungAbziehen,
AnhaengeVerwenden, LieferanschriftAusgeben : Boolean);
AnhaengeVerwenden, LieferanschriftAusgeben : Boolean;
XRechnungCII : Boolean = false);
class procedure Kleinunternehmerregelung(inv : TInvoice);
class procedure Paragr13b(inv : TInvoice);
class procedure Austauschteilesteuer(inv : TInvoice);
Expand Down Expand Up @@ -301,7 +302,7 @@ class procedure TInvoiceTestCases.Differenzbesteuerung(inv: TInvoice);
class procedure TInvoiceTestCases.Gesamtbeispiel(inv: TInvoice;
Zahlungsbedingung: Integer; NachlaesseZuschlaegeVerwenden,
AbschlagsrechnungAbziehen, AnhaengeVerwenden,
LieferanschriftAusgeben: Boolean);
LieferanschriftAusgeben: Boolean; XRechnungCII : Boolean = false);
var
suc : Boolean;
begin
Expand Down Expand Up @@ -400,17 +401,17 @@ class procedure TInvoiceTestCases.Gesamtbeispiel(inv: TInvoice;
inv.PaymentTermsType := iptt_CashDiscount1;
inv.PaymentTermCashDiscount1Days := 7;
inv.PaymentTermCashDiscount1Percent := 4.25;
inv.PaymentTermCashDiscount1Base := 0;
inv.PaymentTermCashDiscount1Base := 0; //optional auf welchen Betrag bezieht sich Skonto
end;
3 :
begin
inv.PaymentTermsType := iptt_CashDiscount2;
inv.PaymentTermCashDiscount1Days := 7;
inv.PaymentTermCashDiscount1Percent := 4.25;
inv.PaymentTermCashDiscount1Base := 0;
inv.PaymentTermCashDiscount1Base := 0; //optional auf welchen Betrag bezieht sich Skonto
inv.PaymentTermCashDiscount2Days := 14;
inv.PaymentTermCashDiscount2Percent := 3;
inv.PaymentTermCashDiscount2Base := 0;
inv.PaymentTermCashDiscount2Base := 0; //optional auf welchen Betrag bezieht sich Skonto
end;
else
inv.PaymentTermsType := iptt_None;
Expand Down Expand Up @@ -685,11 +686,12 @@ class procedure TInvoiceTestCases.Gesamtbeispiel(inv: TInvoice;
ID := 'R2020-0001';
IssueDate := Date-100; //Rechnungsdatum
end;
//with inv.PrecedingInvoiceReferences.AddPrecedingInvoiceReference do
//begin
// ID := 'R2020-0002';
// IssueDate := Date-50; //Rechnungsdatum
//end;
if not XRechnungCII then
with inv.PrecedingInvoiceReferences.AddPrecedingInvoiceReference do
begin
ID := 'R2020-0002';
IssueDate := Date-50; //Rechnungsdatum
end;
inv.PrepaidAmount := 100.00; //Euro angezahlt
inv.PayableAmount := inv.PayableAmount - inv.PrepaidAmount; //Vom Zahlbetrag abziehen
end;
Expand Down
3 changes: 2 additions & 1 deletion Delphi6/intfInvoice.pas
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,11 @@ interface
ipmc_InstrumentNotDefined, //1 Keine Angaben
ipmc_InCash, //10 Barzahlung
ipmc_Cheque, //20 Scheck
ipmc_CreditTransfer, //30 Ueberweisung nicht SEPA (nicht SEPA,PayPal, etc.)
ipmc_CreditTransfer, //30 Ueberweisung nicht SEPA (nicht SEPA)
ipmc_CreditCard, //54 Kreditkarte
ipmc_SEPACreditTransfer, //58 Ueberweisung (SEPA)
ipmc_SEPADirectDebit, //59 Lastschrift (SEPA)
ipmc_OnlinePaymentService, //68 Online Payment Service PayPal, etc.
ipmc_MutuallyDefined //ZZZ Gegenseitig definiert (PayPal, etc.)
);

Expand Down
18 changes: 15 additions & 3 deletions Delphi6/intfXRechnung.pas
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ TXRechnungHelper = class(TObject)
XRechnungVersion_230_UNCEFACT_Deprecated,
XRechnungVersion_30x_UBL,
XRechnungVersion_30x_UNCEFACT,
ZUGFeRDExtendedVersion_232,
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX);

TXRechnungValidationHelper = class(TObject)
Expand Down Expand Up @@ -331,6 +332,7 @@ class function TXRechnungInvoiceAdapter.LoadFromXMLDocument(
XRechnungVersion_230_UNCEFACT_Deprecated : Result := TXRechnungInvoiceAdapter230.LoadDocumentUNCEFACT(_Invoice,_XmlDocument,_Error);
XRechnungVersion_30x_UNCEFACT : Result := TXRechnungInvoiceAdapter301.LoadDocumentUNCEFACT(_Invoice,_XmlDocument,_Error);
{$IFNDEF ZUGFeRD_Support}
ZUGFeRDExtendedVersion_232,
XRechnungVersion_ReadingSupport_ZUGFeRDFacturX : Result := TXRechnungInvoiceAdapter301.LoadDocumentUNCEFACT(_Invoice,_XmlDocument,_Error);
else exit;
{$ELSE}
Expand Down Expand Up @@ -368,7 +370,8 @@ class procedure TXRechnungInvoiceAdapter.SaveDocument(_Invoice: TInvoice;
XRechnungVersion_230_UBL_Deprecated : TXRechnungInvoiceAdapter230.SaveDocumentUBL(_Invoice,_Xml);
XRechnungVersion_30x_UBL : TXRechnungInvoiceAdapter301.SaveDocumentUBL(_Invoice,_Xml);
XRechnungVersion_230_UNCEFACT_Deprecated : TXRechnungInvoiceAdapter230.SaveDocumentUNCEFACT(_Invoice,_Xml);
XRechnungVersion_30x_UNCEFACT : TXRechnungInvoiceAdapter301.SaveDocumentUNCEFACT(_Invoice,_Xml);
XRechnungVersion_30x_UNCEFACT : TXRechnungInvoiceAdapter301.SaveDocumentUNCEFACT(_Invoice,_Xml,true);
ZUGFeRDExtendedVersion_232 : TXRechnungInvoiceAdapter301.SaveDocumentUNCEFACT(_Invoice,_Xml,false);
else raise Exception.Create('XRechnung - wrong version');
end;
end;
Expand Down Expand Up @@ -713,6 +716,9 @@ class function TXRechnungHelper.InvoicePaymentMeansCodeFromStr(
if SameText(_Val,'59') then
Result := ipmc_SEPADirectDebit
else
if SameText(_Val,'68') then
Result := ipmc_OnlinePaymentService
else
if SameText(_Val,'ZZZ') then
Result := ipmc_MutuallyDefined
else
Expand All @@ -731,6 +737,7 @@ class function TXRechnungHelper.InvoicePaymentMeansCodeToStr(_Val: TInvoicePayme
ipmc_CreditCard: Result := '54';
ipmc_SEPACreditTransfer: Result := '58';
ipmc_SEPADirectDebit: Result := '59';
ipmc_OnlinePaymentService: Result := '68';
ipmc_MutuallyDefined: Result := 'ZZZ';
else Result := '1'; //ipmc_InstrumentNotDefined
end;
Expand Down Expand Up @@ -1071,7 +1078,8 @@ class function TXRechnungValidationHelper.GetXRechnungVersion(
if Pos('xrechnung_3.0',AnsiLowerCase(node.Text))>0 then
Result := XRechnungVersion_30x_UBL;
end else
if (SameText(_XML.DocumentElement.NodeName,'CrossIndustryInvoice') or SameText(_XML.DocumentElement.NodeName,'rsm:CrossIndustryInvoice')) then
if (SameText(_XML.DocumentElement.NodeName,'CrossIndustryInvoice') or
SameText(_XML.DocumentElement.NodeName,'rsm:CrossIndustryInvoice')) then
begin
if not (TXRechnungXMLHelper.FindChild(_XML.DocumentElement,'rsm:ExchangedDocumentContext',node) or
TXRechnungXMLHelper.FindChild(_XML.DocumentElement,'ExchangedDocumentContext',node)) then
Expand All @@ -1086,7 +1094,10 @@ class function TXRechnungValidationHelper.GetXRechnungVersion(
if Pos('xrechnung_3.0',AnsiLowerCase(node.Text))>0 then
Result := XRechnungVersion_30x_UNCEFACT
else
if Pos('urn:cen.eu:en16931:2017',AnsiLowerCase(node.Text))=1 then
if SameText(node.Text,'urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended') then
Result := ZUGFeRDExtendedVersion_232
else
if Pos('urn:cen.eu:en16931:2017',AnsiLowerCase(node.Text))>0 then
Result := XRechnungVersion_ReadingSupport_ZUGFeRDFacturX;
end;
end;
Expand Down Expand Up @@ -1459,6 +1470,7 @@ class function TZUGFeRDInvoiceAdapter.LoadFromInvoiceDescriptor(
SEPACreditTransfer: lPaymentMeansCode := ipmc_SEPACreditTransfer;
SEPADirectDebit: lPaymentMeansCode := ipmc_SEPADirectDebit;
NotDefined: lPaymentMeansCode := ipmc_InstrumentNotDefined;
//TODO Fehlt 68
// AutomatedClearingHouseDebit: ;
// DebitTransfer: ;
// PaymentToBankAccount: ;
Expand Down
Loading

0 comments on commit 81a8a74

Please sign in to comment.