@@ -428,29 +428,69 @@ procedure TZUGFeRDInvoiceDescriptor1Writer.Save(
428
428
Writer.WriteEndElement();
429
429
end ;
430
430
431
- for var PaymentTerms: TZUGFeRDPaymentTerms in Descriptor.PaymentTermsList do
432
- begin
433
- Writer.WriteStartElement( ' ram:SpecifiedTradePaymentTerms ' ) ;
434
- Writer.WriteOptionalElementString( ' ram:Description ' , PaymentTerms.Description);
435
- if (PaymentTerms.DueDate.HasValue) then
431
+ case Descriptor.Profile of
432
+ TZUGFeRDProfile.Unknown,
433
+ TZUGFeRDProfile.Minimum: { do nothing } ;
434
+
435
+ TZUGFeRDProfile.Extended:
436
436
begin
437
- Writer.WriteStartElement(' ram:DueDateDateTime' );
438
- _writeElementWithAttribute(Writer, ' udt:DateTimeString' , ' format' , ' 102' , _formatDate(PaymentTerms.DueDate.Value ));
439
- Writer.WriteEndElement(); // !ram:DueDateDateTime
437
+ for var PaymentTerms: TZUGFeRDPaymentTerms in Descriptor.PaymentTermsList do
438
+ begin
439
+ Writer.WriteStartElement(' ram:SpecifiedTradePaymentTerms' );
440
+ Writer.WriteOptionalElementString(' ram:Description' , PaymentTerms.Description);
441
+ if (PaymentTerms.DueDate.HasValue) then
442
+ begin
443
+ Writer.WriteStartElement(' ram:DueDateDateTime' );
444
+ _writeElementWithAttribute(Writer, ' udt:DateTimeString' , ' format' , ' 102' , _formatDate(PaymentTerms.DueDate.Value ));
445
+ Writer.WriteEndElement(); // !ram:DueDateDateTime
446
+ end ;
447
+ Writer.WriteOptionalElementString(' ram:DirectDebitMandateID' , _descriptor.PaymentMeans.SEPAMandateReference);
448
+ _writeOptionalAmount(Writer, ' ram:PartialPaymentAmount' , paymentTerms.PartialPaymentAmount);
449
+ if PaymentTerms.PaymentTermsType.HasValue then
450
+ begin
451
+ if PaymentTerms.PaymentTermsType = TZUGFeRDPaymentTermsType.Skonto then
452
+ Writer.WriteStartElement(' ram:ApplicableTradePaymentDiscountTerms' )
453
+ else
454
+ Writer.WriteStartElement(' ram:ApplicableTradePaymentPenaltyTerms' );
455
+ if PaymentTerms.MaturityDate.HasValue then
456
+ begin
457
+ Writer.WriteStartElement(' ram:BasisDateTime' );
458
+ _writeElementWithAttribute(Writer, ' udt:DateTimeString' , ' format' , ' 102' , _formatDate(PaymentTerms.MaturityDate.Value ));
459
+ Writer.WriteEndElement(); // !ram:BasisDateTime
460
+ end ;
461
+ if paymentTerms.DueDays.HasValue then
462
+ _writeElementWithAttribute(Writer, ' ram:BasisPeriodMeasure' , ' unitCode' , TZUGFeRDQuantityCodesExtensions.EnumToString(TZUGFeRDQuantityCodes.DAY), IntToStr(paymentTerms.DueDays.Value ));
463
+ _writeOptionalAmount(Writer, ' ram:BasisAmount' , paymentTerms.BaseAmount); // forceCurrency false by default
464
+ Writer.WriteOptionalElementString(' ram:CalculationPercent' , _formatDecimal(paymentTerms.Percentage));
465
+ if PaymentTerms.PaymentTermsType = TZUGFeRDPaymentTermsType.Skonto then
466
+ _writeOptionalAmount(Writer, ' ram:ActualDiscountAmount' , paymentTerms.ActualAmount)
467
+ else
468
+ _writeOptionalAmount(Writer, ' ram:ActualPenaltyAmount' , paymentTerms.ActualAmount);
469
+ Writer.WriteEndElement(); // !ram:ApplicableTradePaymentDiscountTerms or !ram:ApplicableTradePaymentPenaltyTerms
470
+ end ;
471
+ Writer.WriteEndElement();
472
+ end ;
473
+ if (_descriptor.PaymentTermsList.Count=0 ) and (_descriptor.PaymentMeans.SEPAMandateReference<>' ' ) then
474
+ begin
475
+ Writer.WriteStartElement(' ram:SpecifiedTradePaymentTerms' );
476
+ Writer.WriteOptionalElementString(' ram:DirectDebitMandateID' , _descriptor.PaymentMeans.SEPAMandateReference);
477
+ Writer.WriteEndElement();
478
+ end ;
440
479
end ;
441
- Writer.WriteOptionalElementString(' ram:DirectDebitMandateID' , PaymentTerms.DirectDebitMandateID);
442
- // TODO PaymentTerms.PartialPaymentAmount
443
- // TODO PaymentTerms.ApplicableTradePaymentPenaltyTerms
444
- if (PaymentTerms.ApplicableTradePaymentDiscountTerms.BasisAmount <> 0.0 ) and
445
- (PaymentTerms.ApplicableTradePaymentDiscountTerms.CalculationPercent <> 0.0 ) then
480
+ else
481
+ for var PaymentTerms: TZUGFeRDPaymentTerms in Descriptor.PaymentTermsList do
446
482
begin
447
- Writer.WriteStartElement(' ram:ApplicableTradePaymentDiscountTerms' );
448
- _writeOptionalAmount(Writer, ' ram:BasisAmount' , PaymentTerms.ApplicableTradePaymentDiscountTerms.BasisAmount);
449
- _writeOptionalAmount(Writer, ' ram:CalculationPercent' , PaymentTerms.ApplicableTradePaymentDiscountTerms.CalculationPercent,4 );
450
- Writer.WriteEndElement();
451
- // TODO PaymentTerms.ApplicableTradePaymentDiscountTerms.ActualPenaltyAmount
483
+ Writer.WriteStartElement(' ram:SpecifiedTradePaymentTerms' );
484
+ Writer.WriteOptionalElementString(' ram:Description' , PaymentTerms.Description);
485
+ if (PaymentTerms.DueDate.HasValue) then
486
+ begin
487
+ Writer.WriteStartElement(' ram:DueDateDateTime' );
488
+ _writeElementWithAttribute(Writer, ' udt:DateTimeString' , ' format' , ' 102' , _formatDate(PaymentTerms.DueDate.Value ));
489
+ Writer.WriteEndElement(); // !ram:DueDateDateTime
490
+ end ;
491
+ Writer.WriteOptionalElementString(' ram:DirectDebitMandateID' , _descriptor.PaymentMeans.SEPAMandateReference);
492
+ Writer.WriteEndElement(); // !ram:SpecifiedTradePaymentTerms
452
493
end ;
453
- Writer.WriteEndElement();
454
494
end ;
455
495
456
496
Writer.WriteStartElement(' ram:SpecifiedTradeSettlementMonetarySummation' );
0 commit comments