From: Raphael Michel Date: Mon, 15 Oct 2018 18:51:43 +0000 (+0200) Subject: Fix wrong namespaces X-Git-Tag: 1.0.0~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=efcf1d9918547ed494450fe78e9cd5419f5926b7;p=thirdparty%2Fpython-drafthorse.git Fix wrong namespaces --- diff --git a/drafthorse/models/accounting.py b/drafthorse/models/accounting.py index 253941b..f2c5653 100644 --- a/drafthorse/models/accounting.py +++ b/drafthorse/models/accounting.py @@ -1,110 +1,110 @@ -from . import NS_FERD_1p0, COMFORT, EXTENDED, BASIC +from . import NS_RAM, COMFORT, EXTENDED, BASIC from .elements import Element from .fields import DateTimeField, StringField, CurrencyField, DecimalField, MultiField, IndicatorField class LineApplicableTradeTax(Element): - calculated_amount = CurrencyField(NS_FERD_1p0, "CalculatedAmount", required=True, + calculated_amount = CurrencyField(NS_RAM, "CalculatedAmount", required=True, profile=BASIC, _d="Steuerbetrag") - type_code = StringField(NS_FERD_1p0, "TypeCode", required=True, profile=BASIC, + type_code = StringField(NS_RAM, "TypeCode", required=True, profile=BASIC, _d="Steuerart (Code)") - exemption_reason = StringField(NS_FERD_1p0, "ExemptionReason", required=False, + exemption_reason = StringField(NS_RAM, "ExemptionReason", required=False, profile=COMFORT, _d="Grund der Steuerbefreiung (Freitext)") - category_code = StringField(NS_FERD_1p0, "CategoryCode", required=False, + category_code = StringField(NS_RAM, "CategoryCode", required=False, profile=COMFORT, _d="Steuerkategorie (Wert)") - applicable_percent = DecimalField(NS_FERD_1p0, "ApplicablePercent", + applicable_percent = DecimalField(NS_RAM, "ApplicablePercent", required=True, profile=BASIC) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ApplicableTradeTax" class ApplicableTradeTax(LineApplicableTradeTax): - basis_amount = CurrencyField(NS_FERD_1p0, "BasisAmount", required=True, + basis_amount = CurrencyField(NS_RAM, "BasisAmount", required=True, profile=BASIC, _d="Basisbetrag der Steuerberechnung") - line_total_basis_amount = CurrencyField(NS_FERD_1p0, "LineTotalBasisAmount", + line_total_basis_amount = CurrencyField(NS_RAM, "LineTotalBasisAmount", required=False, profile=EXTENDED, _d="Warenbetrag des Steuersatzes") - allowance_charge_basis_amount = CurrencyField(NS_FERD_1p0, "AllowanceChargeBasisAmount", + allowance_charge_basis_amount = CurrencyField(NS_RAM, "AllowanceChargeBasisAmount", required=False, profile=EXTENDED, _d="Gesamtbetrag Zu- und Abschläge des Steuersatzes") class AccountingAccount(Element): - id = StringField(NS_FERD_1p0, "ID", required=True, profile=EXTENDED, _d="Buchungsreferenz") + id = StringField(NS_RAM, "ID", required=True, profile=EXTENDED, _d="Buchungsreferenz") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ReceivableSpecifiedTradeAccount" class MonetarySummation(Element): - line_total = CurrencyField(NS_FERD_1p0, "LineTotalAmount", required=True, + line_total = CurrencyField(NS_RAM, "LineTotalAmount", required=True, profile=BASIC, _d="Gesamtbetrag der Positionen") - charge_total = CurrencyField(NS_FERD_1p0, "ChargeTotalAmount", required=True, + charge_total = CurrencyField(NS_RAM, "ChargeTotalAmount", required=True, profile=BASIC, _d="Gesamtbetrag der Zuschläge") - allowance_total = CurrencyField(NS_FERD_1p0, "AllowanceTotalAmount", required=True, + allowance_total = CurrencyField(NS_RAM, "AllowanceTotalAmount", required=True, profile=BASIC, _d="Gesamtbetrag der Abschläge") - tax_basis_total = CurrencyField(NS_FERD_1p0, "TaxBasisTotalAmount", required=True, + tax_basis_total = CurrencyField(NS_RAM, "TaxBasisTotalAmount", required=True, profile=BASIC, _d="Steuerbasisbetrag") - tax_total = CurrencyField(NS_FERD_1p0, "TaxTotalAmount", required=True, + tax_total = CurrencyField(NS_RAM, "TaxTotalAmount", required=True, profile=BASIC, _d="Steuergesamtbetrag") - grand_total = CurrencyField(NS_FERD_1p0, "GrandTotalAmount", required=True, + grand_total = CurrencyField(NS_RAM, "GrandTotalAmount", required=True, profile=BASIC, _d="Bruttosumme") - prepaid_total = CurrencyField(NS_FERD_1p0, "TotalPrepaidAmount", required=False, + prepaid_total = CurrencyField(NS_RAM, "TotalPrepaidAmount", required=False, profile=COMFORT, _d="Anzahlungsbetrag") - due_amount = CurrencyField(NS_FERD_1p0, "DuePayableAmount", required=False, + due_amount = CurrencyField(NS_RAM, "DuePayableAmount", required=False, profile=COMFORT, _d="Zahlbetrag") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedTradeSettlementMonetarySummation" class BillingSpecifiedPeriod(Element): - start = DateTimeField(NS_FERD_1p0, "StartDateTime", required=True, profile=COMFORT) - end = DateTimeField(NS_FERD_1p0, "EndDateTime", required=True, profile=COMFORT) + start = DateTimeField(NS_RAM, "StartDateTime", required=True, profile=COMFORT) + end = DateTimeField(NS_RAM, "EndDateTime", required=True, profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "BillingSpecifiedPeriod" class AppliedTradeTax(Element): - type_code = StringField(NS_FERD_1p0, "TypeCode", required=True, profile=COMFORT) - category_code = StringField(NS_FERD_1p0, "CategoryCode", required=True, profile=COMFORT) - applicable_percent = StringField(NS_FERD_1p0, "ApplicablePercent", required=True, profile=COMFORT) + type_code = StringField(NS_RAM, "TypeCode", required=True, profile=COMFORT) + category_code = StringField(NS_RAM, "CategoryCode", required=True, profile=COMFORT) + applicable_percent = StringField(NS_RAM, "ApplicablePercent", required=True, profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "AppliedTradeTax" class CategoryTradeTax(AppliedTradeTax): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "CategoryTradeTax" class TradeAllowanceCharge(Element): - indicator = IndicatorField(NS_FERD_1p0, "ChargeIndicator", required=False, profile=COMFORT, + indicator = IndicatorField(NS_RAM, "ChargeIndicator", required=False, profile=COMFORT, _d="Schalter für Zu-/Abschlag") - sequence_numeric = DecimalField(NS_FERD_1p0, "SequenceNumeric", required=False, profile=EXTENDED, + sequence_numeric = DecimalField(NS_RAM, "SequenceNumeric", required=False, profile=EXTENDED, _d="Berechnungsreihenfolge") - calculation_percent = DecimalField(NS_FERD_1p0, "CalculationPercent", + calculation_percent = DecimalField(NS_RAM, "CalculationPercent", required=False, profile=EXTENDED, _d="Rabatt in Prozent") - basis_amount = CurrencyField(NS_FERD_1p0, "BasisAmount", required=False, + basis_amount = CurrencyField(NS_RAM, "BasisAmount", required=False, profile=EXTENDED, _d="Basisbetrag des Rabatts") - basis_quantity = CurrencyField(NS_FERD_1p0, "BasisQuantity", required=False, + basis_quantity = CurrencyField(NS_RAM, "BasisQuantity", required=False, profile=EXTENDED, _d="Basismenge des Rabatts") - actual_amount = CurrencyField(NS_FERD_1p0, "ActualAmount", required=True, + actual_amount = CurrencyField(NS_RAM, "ActualAmount", required=True, profile=COMFORT, _d="Betrag des Zu-/Abschlags") - reason_code = StringField(NS_FERD_1p0, "ReasonCode", required=False, profile=EXTENDED) - reason = StringField(NS_FERD_1p0, "Reason", required=False, profile=COMFORT) + reason_code = StringField(NS_RAM, "ReasonCode", required=False, profile=EXTENDED) + reason = StringField(NS_RAM, "Reason", required=False, profile=COMFORT) trade_tax = MultiField(CategoryTradeTax, required=False, profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedTradeAllowanceCharge" diff --git a/drafthorse/models/delivery.py b/drafthorse/models/delivery.py index 83d6214..aaf071c 100644 --- a/drafthorse/models/delivery.py +++ b/drafthorse/models/delivery.py @@ -1,4 +1,4 @@ -from . import NS_FERD_1p0, BASIC, EXTENDED +from . import NS_RAM, BASIC, EXTENDED from .elements import Element from .fields import DateTimeField, StringField, IDField, Field from .party import ShipToTradeParty, ShipFromTradeParty, UltimateShipToTradeParty @@ -6,21 +6,21 @@ from .references import DespatchAdviceReferencedDocument, DeliveryNoteReferenced class SupplyChainEvent(Element): - occurrence = DateTimeField(NS_FERD_1p0, "OccurenceDateTime", + occurrence = DateTimeField(NS_RAM, "OccurenceDateTime", required=False, profile=BASIC, _d="Tatsächlicher Lieferungszeitpunkt") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ActualDeliverySupplyChainEvent" class LogisticsTransportMovement(Element): - mode_code = StringField(NS_FERD_1p0, "ModeCode", required=False, profile=EXTENDED) - id = IDField(NS_FERD_1p0, "ID", required=False, profile=EXTENDED) + mode_code = StringField(NS_RAM, "ModeCode", required=False, profile=EXTENDED) + id = IDField(NS_RAM, "ID", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedLogisticsTransportMovement" @@ -28,7 +28,7 @@ class SupplyChainConsignment(Element): movement = Field(LogisticsTransportMovement, required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "RelatedSupplyChainConsignment" @@ -45,5 +45,5 @@ class TradeDelivery(Element): profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ApplicableSupplyChainTradeDelivery" diff --git a/drafthorse/models/document.py b/drafthorse/models/document.py index 6104b49..ea212c4 100644 --- a/drafthorse/models/document.py +++ b/drafthorse/models/document.py @@ -1,30 +1,30 @@ import xml.etree.cElementTree as ET from drafthorse.models.note import IncludedNote -from . import NS_RAM, NS_UDT, NS_FERD_1p0, EXTENDED, BASIC +from . import NS_FERD_1p0, NS_UDT, NS_RAM, EXTENDED, BASIC from .elements import Element from .fields import DateTimeField, Field, MultiField, StringField, IndicatorField, MultiStringField from .trade import TradeTransaction class GuidelineDocumentContextParameter(Element): - id = StringField(NS_FERD_1p0, "ID") + id = StringField(NS_RAM, "ID") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "GuidelineSpecifiedDocumentContextParameter" class BusinessDocumentContextParameter(Element): - id = StringField(NS_FERD_1p0, "ID") + id = StringField(NS_RAM, "ID") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "BusinessSpecifiedDocumentContextParameter" class DocumentContext(Element): - test_indicator = IndicatorField(NS_FERD_1p0, "TestIndicator", required=False, + test_indicator = IndicatorField(NS_RAM, "TestIndicator", required=False, profile=BASIC, _d="Testkennzeichen") guideline_parameter = Field(GuidelineDocumentContextParameter, required=True, profile=BASIC, _d="Anwendungsempfehlung") @@ -37,28 +37,28 @@ class DocumentContext(Element): class EffectivePeriod(Element): - complete = DateTimeField(NS_FERD_1p0, "CompleteDateTime") + complete = DateTimeField(NS_RAM, "CompleteDateTime") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "EffectiveSpecifiedPeriod" class Header(Element): - id = StringField(NS_FERD_1p0, "ID", required=True, profile=BASIC, + id = StringField(NS_RAM, "ID", required=True, profile=BASIC, _d="Rechnungsnummer") - name = StringField(NS_FERD_1p0, "Name", required=True, profile=BASIC, + name = StringField(NS_RAM, "Name", required=True, profile=BASIC, _d="Dokumentenart (Freitext)") - type_code = StringField(NS_FERD_1p0, "TypeCode", required=True, profile=BASIC, + type_code = StringField(NS_RAM, "TypeCode", required=True, profile=BASIC, _d="Dokumentenart (Code)") - issue_date_time = DateTimeField(NS_FERD_1p0, "IssueDateTime", required=True, + issue_date_time = DateTimeField(NS_RAM, "IssueDateTime", required=True, profile=BASIC, _d="Rechnungsdatum") - copy_indicator = IndicatorField(NS_FERD_1p0, "CopyIndicator", required=False, + copy_indicator = IndicatorField(NS_RAM, "CopyIndicator", required=False, profile=EXTENDED, _d="Indikator Original/Kopie") + languages = MultiStringField(NS_RAM, "LanguageID", required=False, profile=EXTENDED) effective_period = Field(EffectivePeriod, required=False, profile=EXTENDED, _d="Vertragliches Fälligkeitsdatum der Rechnung") notes = MultiField(IncludedNote) - languages = MultiStringField(NS_FERD_1p0, "LanguageID", required=False, profile=EXTENDED) class Meta: namespace = NS_FERD_1p0 diff --git a/drafthorse/models/elements.py b/drafthorse/models/elements.py index 564986c..404be1b 100644 --- a/drafthorse/models/elements.py +++ b/drafthorse/models/elements.py @@ -2,6 +2,7 @@ import sys import xml.etree.cElementTree as ET from collections import OrderedDict +from drafthorse.utils import validate_xml from . import NS_UDT from .fields import Field @@ -45,7 +46,11 @@ class Element(metaclass=BaseElementMeta): node.append(self.to_etree()) def serialize(self): - return b"" + ET.tostring(self.to_etree(), "utf-8") + xml = b"" + ET.tostring(self.to_etree(), "utf-8") + print(xml) + validate_xml(xmlout=xml, schema="ZUGFeRD1p0") + return xml + class StringElement(Element): diff --git a/drafthorse/models/note.py b/drafthorse/models/note.py index 21a101c..0be9225 100644 --- a/drafthorse/models/note.py +++ b/drafthorse/models/note.py @@ -1,16 +1,16 @@ -from . import NS_FERD_1p0, BASIC, COMFORT, EXTENDED +from . import NS_RAM, BASIC, COMFORT, EXTENDED from .elements import Element from .fields import StringField, MultiStringField class IncludedNote(Element): - content = MultiStringField(NS_FERD_1p0, "Content", required=False, + content = MultiStringField(NS_RAM, "Content", required=False, profile=BASIC) - content_code = StringField(NS_FERD_1p0, "ContentCode", required=False, + content_code = StringField(NS_RAM, "ContentCode", required=False, profile=EXTENDED) - subject_code = StringField(NS_FERD_1p0, "SubjectCode", required=False, + subject_code = StringField(NS_RAM, "SubjectCode", required=False, profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "IncludedNote" diff --git a/drafthorse/models/party.py b/drafthorse/models/party.py index c636fd4..ae15492 100644 --- a/drafthorse/models/party.py +++ b/drafthorse/models/party.py @@ -1,75 +1,75 @@ -from . import NS_FERD_1p0, COMFORT, BASIC, EXTENDED +from . import NS_RAM, COMFORT, BASIC, EXTENDED from .elements import Element from .fields import StringField, Field, IDField, MultiField, MultiIDField class PostalTradeAddress(Element): - postcode = StringField(NS_FERD_1p0, "PostcodeCode", required=False, profile=BASIC) - line_one = StringField(NS_FERD_1p0, "LineOne", required=False, profile=BASIC) - line_two = StringField(NS_FERD_1p0, "LineTwo", required=False, profile=BASIC) - city_name = StringField(NS_FERD_1p0, "CityName", required=False, profile=BASIC) - country_id = StringField(NS_FERD_1p0, "CountryID", required=False, profile=BASIC) + postcode = StringField(NS_RAM, "PostcodeCode", required=False, profile=BASIC) + line_one = StringField(NS_RAM, "LineOne", required=False, profile=BASIC) + line_two = StringField(NS_RAM, "LineTwo", required=False, profile=BASIC) + city_name = StringField(NS_RAM, "CityName", required=False, profile=BASIC) + country_id = StringField(NS_RAM, "CountryID", required=False, profile=BASIC) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "PostalTradeAddress" class TaxRegistration(Element): - id = IDField(NS_FERD_1p0, "ID") + id = IDField(NS_RAM, "ID") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedTaxRegistration" class PhoneNumber(Element): - number = StringField(NS_FERD_1p0, "CompleteNumber", required=False, + number = StringField(NS_RAM, "CompleteNumber", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "TelephoneUniversalCommunication" class FaxNumber(Element): - number = StringField(NS_FERD_1p0, "CompleteNumber", required=False, + number = StringField(NS_RAM, "CompleteNumber", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "FaxUniversalCommunication" class EmailURI(Element): - address = StringField(NS_FERD_1p0, "URIID", required=False, + address = StringField(NS_RAM, "URIID", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "EmailURICommunication" class TradeContact(Element): - person_name = StringField(NS_FERD_1p0, "PersonName", required=False, + person_name = StringField(NS_RAM, "PersonName", required=False, profile=EXTENDED) - department_name = StringField(NS_FERD_1p0, "DepartmentName", required=False, + department_name = StringField(NS_RAM, "DepartmentName", required=False, profile=EXTENDED) telephone = Field(PhoneNumber, required=False, profile=EXTENDED) fax = Field(FaxNumber, required=False, profile=EXTENDED) email = Field(EmailURI, required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "DefinedTradeContact" class TradeParty(Element): - id = StringField(NS_FERD_1p0, "ID", required=False, profile=COMFORT, + id = StringField(NS_RAM, "ID", required=False, profile=COMFORT, _d="Identifier des Verkäufers") - global_id = MultiIDField(NS_FERD_1p0, "GlobalID", required=False, profile=COMFORT, + global_id = MultiIDField(NS_RAM, "GlobalID", required=False, profile=COMFORT, _d="Globaler Identifier des Verkäufers") - name = StringField(NS_FERD_1p0, "Name", required=False, profile=BASIC) + name = StringField(NS_RAM, "Name", required=False, profile=BASIC) contact = Field(TradeContact, required=False, profile=EXTENDED, _d="Ansprechpartner des Käufers") address = Field(PostalTradeAddress, required=False, profile=BASIC, @@ -79,47 +79,47 @@ class TradeParty(Element): class PayeeTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "PayeeTradeParty" class InvoiceeTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "InvoiceeTradeParty" class BuyerTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "BuyerTradeParty" class SellerTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SellerTradeParty" class EndUserTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ProductEndUserTradeParty" class ShipToTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ShipToTradeParty" class ShipFromTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ShipFromTradeParty" class UltimateShipToTradeParty(TradeParty): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "UltimateShipToTradeParty" diff --git a/drafthorse/models/payment.py b/drafthorse/models/payment.py index 88bcbd6..2028db5 100644 --- a/drafthorse/models/payment.py +++ b/drafthorse/models/payment.py @@ -1,94 +1,94 @@ -from . import NS_FERD_1p0, COMFORT, BASIC, EXTENDED +from . import NS_RAM, COMFORT, BASIC, EXTENDED from .elements import Element from .fields import Field, StringField, IDField, DateTimeField, DecimalField, CurrencyField, MultiStringField, \ MultiCurrencyField class PayerFinancialAccount(Element): - iban = StringField(NS_FERD_1p0, "IBANID") - proprietary_id = StringField(NS_FERD_1p0, "ProprietaryID") + iban = StringField(NS_RAM, "IBANID") + proprietary_id = StringField(NS_RAM, "ProprietaryID") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "PayerPartyDebtorFinancialAccount" class PayerFinancialInstitution(Element): - bic = StringField(NS_FERD_1p0, "BICID") - german_blz = StringField(NS_FERD_1p0, "GermanBankleitzahlID") - name = StringField(NS_FERD_1p0, "Name") + bic = StringField(NS_RAM, "BICID") + german_blz = StringField(NS_RAM, "GermanBankleitzahlID") + name = StringField(NS_RAM, "Name") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "PayerSpecifiedDebtorFinancialInstitution" class PayeeFinancialAccount(Element): - iban = StringField(NS_FERD_1p0, "IBANID") - account_name = StringField(NS_FERD_1p0, "AccountName") - proprietary_id = StringField(NS_FERD_1p0, "ProprietaryID") + iban = StringField(NS_RAM, "IBANID") + account_name = StringField(NS_RAM, "AccountName") + proprietary_id = StringField(NS_RAM, "ProprietaryID") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "PayeePartyCreditorFinancialAccount" class PayeeFinancialInstitution(Element): - bic = StringField(NS_FERD_1p0, "BICID") - german_blz = StringField(NS_FERD_1p0, "GermanBankleitzahlID") - name = StringField(NS_FERD_1p0, "Name") + bic = StringField(NS_RAM, "BICID") + german_blz = StringField(NS_RAM, "GermanBankleitzahlID") + name = StringField(NS_RAM, "Name") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "PayeeSpecifiedCreditorFinancialInstitution" class PaymentMeans(Element): - type_code = StringField(NS_FERD_1p0, "TypeCode", required=False, profile=COMFORT) - information = MultiStringField(NS_FERD_1p0, "Information", required=False, profile=COMFORT) - id = IDField(NS_FERD_1p0, "ID", required=False, profile=BASIC) + type_code = StringField(NS_RAM, "TypeCode", required=False, profile=COMFORT) + information = MultiStringField(NS_RAM, "Information", required=False, profile=COMFORT) + id = IDField(NS_RAM, "ID", required=False, profile=BASIC) payer_account = Field(PayerFinancialAccount) payer_institution = Field(PayerFinancialInstitution) payee_account = Field(PayeeFinancialAccount) payee_institution = Field(PayeeFinancialInstitution) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedTradeSettlementPaymentMeans" class PaymentPenaltyTerms(Element): - basis_date_time = DateTimeField(NS_FERD_1p0, "BasisDateTime", required=False, + basis_date_time = DateTimeField(NS_RAM, "BasisDateTime", required=False, profile=EXTENDED, _d="Bezugsdatum der Fälligkeit") - basis_period_measure = StringField(NS_FERD_1p0, "BasisPeriodMeasure", required=False, + basis_period_measure = StringField(NS_RAM, "BasisPeriodMeasure", required=False, profile=EXTENDED, _d="Fälligkeitszeitraum") - basis_amount = CurrencyField(NS_FERD_1p0, "BasisAmount", required=False, + basis_amount = CurrencyField(NS_RAM, "BasisAmount", required=False, profile=EXTENDED, _d="Basisbetrag des Zahlungszuschlags") - calculation_percent = DecimalField(NS_FERD_1p0, "CalculationPercent", required=False, + calculation_percent = DecimalField(NS_RAM, "CalculationPercent", required=False, profile=EXTENDED, _d="Prozentwert des Zahlungszuschlags") - actual_amount = CurrencyField(NS_FERD_1p0, "ActualPenaltyAmount", required=False, + actual_amount = CurrencyField(NS_RAM, "ActualPenaltyAmount", required=False, profile=EXTENDED, _d="Betrag des Zahlungszuschlags") class PaymentDiscountTerms(Element): - basis_date_time = DateTimeField(NS_FERD_1p0, "BasisDateTime", required=False, + basis_date_time = DateTimeField(NS_RAM, "BasisDateTime", required=False, profile=EXTENDED, _d="Bezugsdatum der Fälligkeit") - basis_period_measure = StringField(NS_FERD_1p0, "BasisPeriodMeasure", required=False, + basis_period_measure = StringField(NS_RAM, "BasisPeriodMeasure", required=False, profile=EXTENDED, _d="Fälligkeitszeitraum") - basis_amount = CurrencyField(NS_FERD_1p0, "BasisAmount", required=False, + basis_amount = CurrencyField(NS_RAM, "BasisAmount", required=False, profile=EXTENDED, _d="Basisbetrag des Zahlungsabschlags") - calculation_percent = DecimalField(NS_FERD_1p0, "CalculationPercent", required=False, + calculation_percent = DecimalField(NS_RAM, "CalculationPercent", required=False, profile=EXTENDED, _d="Prozentwert des Zahlungsabschlags") - actual_amount = CurrencyField(NS_FERD_1p0, "ActualDiscountAmount", required=False, + actual_amount = CurrencyField(NS_RAM, "ActualDiscountAmount", required=False, profile=EXTENDED, _d="Betrag des Zahlungsabschlags") class PaymentTerms(Element): - description = StringField(NS_FERD_1p0, "Description", required=True, profile=COMFORT, + description = StringField(NS_RAM, "Description", required=True, profile=COMFORT, _d="Freitext der Zahlungsbedingungen") - due = DateTimeField(NS_FERD_1p0, "DueDateDateTime", required=False, profile=COMFORT, + due = DateTimeField(NS_RAM, "DueDateDateTime", required=False, profile=COMFORT, _d="Fälligkeitsdatum") - partial_amount = MultiCurrencyField(NS_FERD_1p0, "PartialPaymentAmount", profile=EXTENDED, + partial_amount = MultiCurrencyField(NS_RAM, "PartialPaymentAmount", profile=EXTENDED, required=False, _d="Betrag der Teilzahlung") penalty_terms = Field(PaymentPenaltyTerms, required=False, profile=EXTENDED, _d="Detailinformationen zu Zahlungszuschlägen") @@ -96,5 +96,5 @@ class PaymentTerms(Element): _d="Detailinformationen zu Zahlungsabschlägen") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedTradePaymentTerms" diff --git a/drafthorse/models/product.py b/drafthorse/models/product.py index 1ba1171..47a83b9 100644 --- a/drafthorse/models/product.py +++ b/drafthorse/models/product.py @@ -1,47 +1,47 @@ -from . import NS_FERD_1p0, EXTENDED, COMFORT +from . import NS_RAM, EXTENDED, COMFORT from .elements import Element from .fields import StringField, QuantityField, IDField, MultiField, ClassificationField class ProductCharacteristic(Element): - type_code = StringField(NS_FERD_1p0, "TypeCode", required=True, profile=EXTENDED, + type_code = StringField(NS_RAM, "TypeCode", required=True, profile=EXTENDED, _d="Art der Produkteigenschaft") - description = StringField(NS_FERD_1p0, "Description", required=True, profile=EXTENDED) - value_measure = QuantityField(NS_FERD_1p0, "ValueMeasure", required=False, + description = StringField(NS_RAM, "Description", required=True, profile=EXTENDED) + value_measure = QuantityField(NS_RAM, "ValueMeasure", required=False, profile=EXTENDED, _d="Numerische Messgröße") - value = StringField(NS_FERD_1p0, "Value", required=False, profile=EXTENDED) + value = StringField(NS_RAM, "Value", required=False, profile=EXTENDED) class ProductClassification(Element): - class_code = ClassificationField(NS_FERD_1p0, "ClassCode", required=True, + class_code = ClassificationField(NS_RAM, "ClassCode", required=True, profile=EXTENDED) - value = StringField(NS_FERD_1p0, "ClassName", required=True, profile=EXTENDED) + value = StringField(NS_RAM, "ClassName", required=True, profile=EXTENDED) class OriginCountry(Element): - id = StringField(NS_FERD_1p0, "ID", required=True, profile=EXTENDED, + id = StringField(NS_RAM, "ID", required=True, profile=EXTENDED, _d="Land der Produktherkunft") class ReferencedProduct(Element): - name = StringField(NS_FERD_1p0, "Name", required=False, profile=EXTENDED) - description = StringField(NS_FERD_1p0, "Description", required=False, profile=EXTENDED) - global_id = IDField(NS_FERD_1p0, "GlobalID", required=False, profile=EXTENDED) - seller_assigned_id = StringField(NS_FERD_1p0, "SellerAssignedID", required=False, + name = StringField(NS_RAM, "Name", required=False, profile=EXTENDED) + description = StringField(NS_RAM, "Description", required=False, profile=EXTENDED) + global_id = IDField(NS_RAM, "GlobalID", required=False, profile=EXTENDED) + seller_assigned_id = StringField(NS_RAM, "SellerAssignedID", required=False, profile=EXTENDED) - buyer_assigned_id = StringField(NS_FERD_1p0, "BuyerAssignedID", required=False, + buyer_assigned_id = StringField(NS_RAM, "BuyerAssignedID", required=False, profile=EXTENDED) - unit_quantity = QuantityField(NS_FERD_1p0, "UnitQuantity", required=False, + unit_quantity = QuantityField(NS_RAM, "UnitQuantity", required=False, profile=EXTENDED) class TradeProduct(Element): - name = StringField(NS_FERD_1p0, "Name", required=False, profile=COMFORT) - description = StringField(NS_FERD_1p0, "Description", required=False, profile=COMFORT) - global_id = IDField(NS_FERD_1p0, "GlobalID", required=False, profile=COMFORT) - seller_assigned_id = StringField(NS_FERD_1p0, "SellerAssignedID", required=False, + name = StringField(NS_RAM, "Name", required=False, profile=COMFORT) + description = StringField(NS_RAM, "Description", required=False, profile=COMFORT) + global_id = IDField(NS_RAM, "GlobalID", required=False, profile=COMFORT) + seller_assigned_id = StringField(NS_RAM, "SellerAssignedID", required=False, profile=COMFORT) - buyer_assigned_id = StringField(NS_FERD_1p0, "BuyerAssignedID", required=False, + buyer_assigned_id = StringField(NS_RAM, "BuyerAssignedID", required=False, profile=COMFORT) characteristics = MultiField(ProductCharacteristic, required=False, profile=EXTENDED) classifications = MultiField(ProductClassification, required=False, profile=EXTENDED) diff --git a/drafthorse/models/references.py b/drafthorse/models/references.py index 02e1110..b9a09a3 100644 --- a/drafthorse/models/references.py +++ b/drafthorse/models/references.py @@ -1,103 +1,103 @@ -from . import COMFORT, EXTENDED, NS_FERD_1p0 +from . import COMFORT, EXTENDED, NS_RAM from .elements import Element from .fields import DateTimeField, StringField class ReferencedDocument(Element): - issue_date_time = DateTimeField(NS_FERD_1p0, "IssueDateTime", required=False, + issue_date_time = DateTimeField(NS_RAM, "IssueDateTime", required=False, profile=COMFORT) - id = StringField(NS_FERD_1p0, "ID", required=False, + id = StringField(NS_RAM, "ID", required=False, profile=COMFORT) class BuyerOrderReferencedDocument(ReferencedDocument): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "BuyerOrderReferencedDocument" class ContractReferencedDocument(ReferencedDocument): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ContractReferencedDocument" class AdditionalReferencedDocument(ReferencedDocument): - type_code = StringField(NS_FERD_1p0, "ReferenceTypeCode", profile=EXTENDED, required=True) + type_code = StringField(NS_RAM, "ReferenceTypeCode", profile=EXTENDED, required=True) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "AdditionalReferencedDocument" class CustomerOrderReferencedDocument(ReferencedDocument): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "CustomerOrderReferencedDocument" class DespatchAdviceReferencedDocument(ReferencedDocument): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "DespatchAdviceReferencedDocument" class LineCustomerOrderReferencedDocument(ReferencedDocument): - line_id = StringField(NS_FERD_1p0, "LineID", required=False, profile=EXTENDED) + line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "CustomerOrderReferencedDocument" class LineBuyerOrderReferencedDocument(ReferencedDocument): - line_id = StringField(NS_FERD_1p0, "LineID", required=False, profile=EXTENDED) + line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "BuyerOrderReferencedDocument" class LineContractReferencedDocument(ReferencedDocument): - line_id = StringField(NS_FERD_1p0, "LineID", required=False, profile=EXTENDED) + line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ContractReferencedDocument" class LineDespatchAdviceReferencedDocument(ReferencedDocument): - line_id = StringField(NS_FERD_1p0, "LineID", required=False, profile=EXTENDED) + line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "DespatchAdviceReferencedDocument" class LineReceivingAdviceReferencedDocument(ReferencedDocument): - line_id = StringField(NS_FERD_1p0, "LineID", required=False, profile=EXTENDED) + line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ReceivingAdviceReferencedDocument" class LineAdditionalReferencedDocument(ReferencedDocument): - line_id = StringField(NS_FERD_1p0, "LineID", required=False, profile=EXTENDED) - type_code = StringField(NS_FERD_1p0, "ReferenceTypeCode", profile=EXTENDED, required=True) + line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED) + type_code = StringField(NS_RAM, "ReferenceTypeCode", profile=EXTENDED, required=True) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "AdditionalReferencedDocument" class DeliveryNoteReferencedDocument(ReferencedDocument): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "DeliveryNoteReferencedDocument" class LineDeliveryNoteReferencedDocument(ReferencedDocument): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "LineDeliveryNoteReferencedDocument" diff --git a/drafthorse/models/trade.py b/drafthorse/models/trade.py index d4287d4..b1536c7 100644 --- a/drafthorse/models/trade.py +++ b/drafthorse/models/trade.py @@ -1,4 +1,4 @@ -from . import NS_FERD_1p0, COMFORT, EXTENDED, BASIC +from . import NS_RAM, COMFORT, EXTENDED, BASIC, NS_FERD_1p0 from .accounting import ApplicableTradeTax, BillingSpecifiedPeriod, MonetarySummation, \ AccountingAccount from .accounting import TradeAllowanceCharge @@ -14,12 +14,12 @@ from .tradelines import LineItem class TradeAgreement(Element): - buyer_reference = StringField(NS_FERD_1p0, "BuyerReference", required=False, + buyer_reference = StringField(NS_RAM, "BuyerReference", required=False, profile=COMFORT, _d="Referenz des Käufers") seller = Field(SellerTradeParty, required=True, _d="Detailinformationen zum Verkäufer") buyer = Field(BuyerTradeParty, required=True) end_user = Field(EndUserTradeParty, required=False, _d="Abweichender Endverbraucher") - delivery_type_code = StringField(NS_FERD_1p0, "DeliveryTypeCode", required=False, + delivery_type_code = StringField(NS_RAM, "DeliveryTypeCode", required=False, profile=EXTENDED, _d="Lieferbedingung (Code)") buyer_order = BuyerOrderReferencedDocument(required=False, profile=COMFORT) customer_order = CustomerOrderReferencedDocument(required=False, profile=COMFORT) @@ -28,25 +28,25 @@ class TradeAgreement(Element): profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ApplicableSupplyChainTradeAgreement" class LogisticsServiceCharge(Element): - description = StringField(NS_FERD_1p0, "Description", required=True, profile=COMFORT, + description = StringField(NS_RAM, "Description", required=True, profile=COMFORT, _d="Identifikation der Servicegebühr") - applied_amount = CurrencyField(NS_FERD_1p0, "AppliedAmount", required=True, + applied_amount = CurrencyField(NS_RAM, "AppliedAmount", required=True, profile=COMFORT, _d="Betrag der Servicegebühr") trade_tax = MultiField(ApplicableTradeTax, required=False, profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedLogisticsServiceCharge" class TradeSettlement(Element): - payment_reference = StringField(NS_FERD_1p0, "PaymentReference") - currency_code = StringField(NS_FERD_1p0, "InvoiceCurrencyCode") + payment_reference = StringField(NS_RAM, "PaymentReference") + currency_code = StringField(NS_RAM, "InvoiceCurrencyCode") invoicee = Field(InvoiceeTradeParty, required=False, profile=COMFORT, _d="Rechnungsempfänger") payee = Field(PayeeTradeParty, required=False, profile=COMFORT, @@ -64,7 +64,7 @@ class TradeSettlement(Element): _d="Detailinformationen zur Buchungsreferenz") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "ApplicableSupplyChainTradeSettlement" diff --git a/drafthorse/models/tradelines.py b/drafthorse/models/tradelines.py index b8e55f0..c79a8e8 100644 --- a/drafthorse/models/tradelines.py +++ b/drafthorse/models/tradelines.py @@ -1,5 +1,5 @@ from drafthorse.models.delivery import SupplyChainEvent -from . import NS_FERD_1p0, BASIC, COMFORT, EXTENDED +from . import NS_RAM, BASIC, COMFORT, EXTENDED from .accounting import TradeAllowanceCharge, BillingSpecifiedPeriod, AccountingAccount from .elements import Element from .fields import CurrencyField, QuantityField, Field, MultiField, StringField @@ -13,38 +13,38 @@ from .references import LineReceivingAdviceReferencedDocument, LineDespatchAdvic class AllowanceCharge(TradeAllowanceCharge): class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "AppliedTradeAllowanceCharge" class GrossPrice(Element): - amount = CurrencyField(NS_FERD_1p0, "ChargeAmount", required=True, profile=COMFORT, + amount = CurrencyField(NS_RAM, "ChargeAmount", required=True, profile=COMFORT, _d="Bruttopreis") - basis_quantity = QuantityField(NS_FERD_1p0, "BasisQuantity", required=False, + basis_quantity = QuantityField(NS_RAM, "BasisQuantity", required=False, profile=COMFORT, _d="Preisbasismenge") charge = Field(AllowanceCharge, required=False, profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "GrossPriceProductTradePrice" class NetPrice(Element): - amount = CurrencyField(NS_FERD_1p0, "ChargeAmount", required=True, profile=COMFORT) - basis_quantity = QuantityField(NS_FERD_1p0, "BasisQuantity", required=False, + amount = CurrencyField(NS_RAM, "ChargeAmount", required=True, profile=COMFORT) + basis_quantity = QuantityField(NS_RAM, "BasisQuantity", required=False, profile=COMFORT, _d="Preisbasismenge") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "NetPriceProductTradePrice" class LineDocument(Element): - line_id = StringField(NS_FERD_1p0, "LineID") + line_id = StringField(NS_RAM, "LineID") notes = MultiField(IncludedNote) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "AssociatedDocumentLineDocument" @@ -58,16 +58,16 @@ class LineAgreement(Element): net = Field(NetPrice) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedSupplyChainTradeAgreement" class LineDelivery(Element): - billed_quantity = QuantityField(NS_FERD_1p0, "BilledQuantity", required=True, + billed_quantity = QuantityField(NS_RAM, "BilledQuantity", required=True, profile=BASIC, _d="Menge, berechnet") - charge_free_quantity = QuantityField(NS_FERD_1p0, "ChargeFreeQuantity", required=False, + charge_free_quantity = QuantityField(NS_RAM, "ChargeFreeQuantity", required=False, profile=EXTENDED, _d="Menge, ohne Berechnung") - package_quantity = QuantityField(NS_FERD_1p0, "ChargeFreeQuantity", required=False, + package_quantity = QuantityField(NS_RAM, "ChargeFreeQuantity", required=False, profile=EXTENDED, _d="Anzahl Packstücke") ship_to = Field(ShipToTradeParty, required=False, profile=EXTENDED) ultimate_ship_to = Field(UltimateShipToTradeParty, required=False, profile=EXTENDED) @@ -81,18 +81,18 @@ class LineDelivery(Element): profile=EXTENDED) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedSupplyChainTradeDelivery" class LineSummation(Element): - total_amount = CurrencyField(NS_FERD_1p0, "LineTotalAmount", required=True, + total_amount = CurrencyField(NS_RAM, "LineTotalAmount", required=True, profile=COMFORT) - total_allowance_charge = CurrencyField(NS_FERD_1p0, "TotalAllowanceChargeAmount", + total_allowance_charge = CurrencyField(NS_RAM, "TotalAllowanceChargeAmount", required=False, profile=EXTENDED, _d="Gesamtbetrag der Zu- und Abschläge") class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedTradeSettlementMonetarySummation" @@ -104,7 +104,7 @@ class LineSettlement(Element): monetary_summation = Field(LineSummation, required=False, profile=COMFORT) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "SpecifiedSupplyChainTradeSettlement" @@ -116,5 +116,5 @@ class LineItem(Element): product = Field(TradeProduct) class Meta: - namespace = NS_FERD_1p0 + namespace = NS_RAM tag = "IncludedSupplyChainTradeLineItem" diff --git a/drafthorse/utils.py b/drafthorse/utils.py index 0f7d76a..1e190c8 100644 --- a/drafthorse/utils.py +++ b/drafthorse/utils.py @@ -1,6 +1,23 @@ +import logging +import os + from xml.dom import minidom +logger = logging.getLogger("drafthorse") + def prettify(xml): reparsed = minidom.parseString(xml) return reparsed.toprettyxml(indent="\t") + + +def validate_xml(xmlout, schema): + try: + from lxml import etree + except ImportError: + logger.warning("Could not validate output as LXML is not installed.") + return xmlout + schema = etree.XMLSchema(file=os.path.join(os.path.dirname(__file__), 'schema', schema + '.xsd')) + parser = etree.XMLParser(schema=schema) + xml_root = etree.fromstring(xmlout, parser) + return etree.tostring(xml_root, pretty_print=True) diff --git a/tests/utils.py b/tests/utils.py deleted file mode 100644 index 5b3acb4..0000000 --- a/tests/utils.py +++ /dev/null @@ -1,15 +0,0 @@ -import os - -from lxml import etree - -import drafthorse - - -def validate_xml(xmlout, schema): - with open(os.path.join(os.path.dirname(drafthorse.__file__), 'schema', schema + '.xsd'), 'rb') as schema_file: - schema_xml = schema_file.read() - schema_root = etree.XML(schema_xml) - schema = etree.XMLSchema(schema_root) - parser = etree.XMLParser(schema=schema) - xml_root = etree.fromstring(xmlout, parser) - return etree.tostring(xml_root, pretty_print=True)