Skip to content

Commit

Permalink
0.2.0 (#4)
Browse files Browse the repository at this point in the history
* Add missing fields in UBL and CII
* Add various enums to reflect on EN16931 code list
* Add testcases to marshal example XMLs to the data structures and back to XML
  • Loading branch information
BolZer authored Aug 16, 2024
1 parent 470b055 commit 18301b8
Show file tree
Hide file tree
Showing 119 changed files with 24,546 additions and 1,044 deletions.
10 changes: 10 additions & 0 deletions .task/dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,13 @@ tasks:
desc: Fixes the PHP files with PHP-CS-Fixer
cmds:
- ./vendor/bin/php-cs-fixer fix

generators:
desc: Runs the code generators (Enums etc.)
cmds:
- php ./tools/Generators/CountryCodeEnumGenerator.php
- php ./tools/Generators/CurrencyCodeEnumGenerator.php
- php ./tools/Generators/DocumentTypeEnumGenerator.php
- php ./tools/Generators/ReferenceQualifierEnumGenerator.php
- php ./tools/Generators/UnitCodeEnumGenerator.php
- ./vendor/bin/php-cs-fixer fix
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,16 @@ In this example we generate a CIUS (XRechnung 3.0) as UBL document
```PHP
use easybill\eInvoicing\Transformer;
use easybill\eInvoicing\UBL\Documents\UblInvoice;
use easybill\eInvoicing\Enums\CurrencyCode;
use easybill\eInvoicing\Enums\DocumentType;

$document = new UblInvoice();
$document->customizationId = 'urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0';
$document->profileId = 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0';
$document->id = '123456XX';
$document->issueDate = '2016-04-04';
$document->invoiceTypeCode = 380;
$document->documentCurrencyCode = 'EUR';
$document->invoiceTypeCode = DocumentType::COMMERCIAL_INVOICE;
$document->documentCurrencyCode = CurrencyCode::EUR;
$document->buyerReference = '04011000-12345-03';
// etc...
$xml = Transformer::create()->transformToXml($document)
Expand Down
4 changes: 3 additions & 1 deletion phpstan.neon
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
parameters:
level: 9
excludePaths:
- tests/*
paths:
- 'src'
- src
7 changes: 4 additions & 3 deletions src/CII/Models/Amount.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace easybill\eInvoicing\CII\Models;

use easybill\eInvoicing\Enums\CurrencyCode;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlAttribute;
Expand All @@ -15,12 +16,12 @@ final class Amount
#[XmlValue(cdata: false)]
public string $value;

#[Type('string')]
#[Type(CurrencyCode::class)]
#[XmlAttribute]
#[SerializedName('currencyID')]
public ?string $currency = null;
public ?CurrencyCode $currency = null;

public static function create(string $amount, ?string $currency = null): self
public static function create(string $amount, ?CurrencyCode $currency = null): self
{
$self = new self();
$self->value = $amount;
Expand Down
5 changes: 3 additions & 2 deletions src/CII/Models/BinaryObject.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@

namespace easybill\eInvoicing\CII\Models;

use easybill\eInvoicing\Enums\MimeType;
use JMS\Serializer\Annotation as JMS;

final class BinaryObject
{
#[JMS\Type('string')]
#[JMS\Type(MimeType::class)]
#[JMS\XmlAttribute]
#[JMS\SerializedName('mimeCode')]
public string $mimeCode;
public MimeType $mimeCode;

#[JMS\Type('string')]
#[JMS\XmlAttribute]
Expand Down
30 changes: 30 additions & 0 deletions src/CII/Models/ClassCode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

namespace easybill\eInvoicing\CII\Models;

use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlAttribute;
use JMS\Serializer\Annotation\XmlValue;

final class ClassCode
{
#[Type('string')]
#[XmlAttribute]
#[SerializedName('listID')]
public ?string $listID = null;

#[Type('string')]
#[XmlValue(cdata: false)]
public string $value;

public static function create(string $id, ?string $listID = null): self
{
$self = new self();
$self->value = $id;
$self->listID = $listID;
return $self;
}
}
5 changes: 3 additions & 2 deletions src/CII/Models/ExchangedDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace easybill\eInvoicing\CII\Models;

use easybill\eInvoicing\Enums\DocumentType;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlElement;
Expand All @@ -21,10 +22,10 @@ final class ExchangedDocument
#[SerializedName('Name')]
public ?string $name = null;

#[Type('string')]
#[Type(DocumentType::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('TypeCode')]
public string $typeCode;
public DocumentType $typeCode;

#[Type(DateTime::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
Expand Down
6 changes: 6 additions & 0 deletions src/CII/Models/HeaderTradeAgreement.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
'buyerTradeParty',
'sellerTaxRepresentativeTradeParty',
'buyerTaxRepresentativeTradeParty',
'sellerOrderReferencedDocument',
'buyerOrderReferencedDocument',
'contractReferencedDocument',
'additionalReferencedDocuments',
Expand Down Expand Up @@ -48,6 +49,11 @@ final class HeaderTradeAgreement
#[SerializedName('BuyerTaxRepresentativeTradeParty')]
public ?TradeParty $buyerTaxRepresentativeTradeParty = null;

#[Type(ReferencedDocument::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('SellerOrderReferencedDocument')]
public ?ReferencedDocument $sellerOrderReferencedDocument = null;

#[Type(ReferencedDocument::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('BuyerOrderReferencedDocument')]
Expand Down
10 changes: 10 additions & 0 deletions src/CII/Models/HeaderTradeDelivery.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@ final class HeaderTradeDelivery
#[SerializedName('ActualDeliverySupplyChainEvent')]
public ?SupplyChainEvent $chainEvent = null;

#[Type(ReferencedDocument::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('DespatchAdviceReferencedDocument')]
public ?ReferencedDocument $despatchAdviceReferencedDocument = null;

#[Type(ReferencedDocument::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('ReceivingAdviceReferencedDocument')]
public ?ReferencedDocument $receivingAdviceReferencedDocument = null;

#[Type(ReferencedDocument::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('DeliveryNoteReferencedDocument')]
Expand Down
15 changes: 13 additions & 2 deletions src/CII/Models/HeaderTradeSettlement.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace easybill\eInvoicing\CII\Models;

use easybill\eInvoicing\Enums\CurrencyCode;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlElement;
Expand All @@ -21,10 +22,15 @@ final class HeaderTradeSettlement
#[SerializedName('PaymentReference')]
public ?string $paymentReference = null;

#[Type('string')]
#[Type(CurrencyCode::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('TaxCurrencyCode')]
public ?CurrencyCode $taxCurrency = null;

#[Type(CurrencyCode::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('InvoiceCurrencyCode')]
public string $currency;
public CurrencyCode $invoiceCurrency;

#[Type(TradeParty::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
Expand Down Expand Up @@ -80,4 +86,9 @@ final class HeaderTradeSettlement
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('InvoiceReferencedDocument')]
public ?ReferencedDocument $invoiceReferencedDocument = null;

/** @var TradeAccountingAccount[] */
#[Type('array<easybill\eInvoicing\CII\Models\TradeAccountingAccount>')]
#[XmlList(entry: 'ReceivableSpecifiedTradeAccountingAccount', inline: true, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
public array $tradeAccountingAccount = [];
}
19 changes: 10 additions & 9 deletions src/CII/Models/LineTradeSettlement.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,21 @@

namespace easybill\eInvoicing\CII\Models;

use JMS\Serializer\Annotation\AccessorOrder;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlElement;
use JMS\Serializer\Annotation\XmlList;

#[AccessorOrder(order: 'custom', custom: ['tradeTax', 'billingSpecifiedPeriod', 'specifiedTradeAllowanceCharge', 'name', 'description', 'tradeCountry', 'monetarySummation', 'additionalReferencedDocument', 'tradeAccountingAccount'])]
final class LineTradeSettlement
{
/**
* @var TradeTax[]
*/
/** @var TradeTax[] */
#[Type('array<easybill\eInvoicing\CII\Models\TradeTax>')]
#[XmlList(entry: 'ApplicableTradeTax', inline: true, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
public array $tradeTax = [];

/**
* @var TradeAllowanceCharge[]
*/
/** @var TradeAllowanceCharge[] */
#[Type('array<easybill\eInvoicing\CII\Models\TradeAllowanceCharge>')]
#[XmlList(entry: 'SpecifiedTradeAllowanceCharge', inline: true, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
public array $specifiedTradeAllowanceCharge = [];
Expand All @@ -35,10 +33,13 @@ final class LineTradeSettlement
#[SerializedName('SpecifiedTradeSettlementLineMonetarySummation')]
public TradeSettlementLineMonetarySummation $monetarySummation;

/**
* @var TradeAccountingAccount[]
*/
/** @var TradeAccountingAccount[] */
#[Type('array<easybill\eInvoicing\CII\Models\TradeAccountingAccount>')]
#[XmlList(entry: 'ReceivableSpecifiedTradeAccountingAccount', inline: true, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
public array $tradeAccountingAccount = [];

/** @var ReferencedDocument[] */
#[Type('array<easybill\eInvoicing\CII\Models\ReferencedDocument>')]
#[XmlList(entry: 'AdditionalReferencedDocument', inline: true, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
public array $additionalReferencedDocument = [];
}
22 changes: 22 additions & 0 deletions src/CII/Models/ProductCharacteristic.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

namespace easybill\eInvoicing\CII\Models;

use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlElement;

final class ProductCharacteristic
{
#[Type('string')]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('Description')]
public string $description;

#[Type('string')]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('Value')]
public string $value;
}
17 changes: 17 additions & 0 deletions src/CII/Models/ProductClassification.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php

declare(strict_types=1);

namespace easybill\eInvoicing\CII\Models;

use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlElement;

final class ProductClassification
{
#[Type(ClassCode::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('ClassCode')]
public ?ClassCode $classCode = null;
}
7 changes: 4 additions & 3 deletions src/CII/Models/Quantity.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,24 @@

namespace easybill\eInvoicing\CII\Models;

use easybill\eInvoicing\Enums\UnitCode;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlAttribute;
use JMS\Serializer\Annotation\XmlValue;

final class Quantity
{
#[Type('string')]
#[Type(UnitCode::class)]
#[XmlAttribute]
#[SerializedName('unitCode')]
public string $unitCode;
public UnitCode $unitCode;

#[Type('string')]
#[XmlValue(cdata: false)]
public string $value;

public static function create(string $value, string $unitCode): self
public static function create(string $value, UnitCode $unitCode): self
{
$self = new self();
$self->value = $value;
Expand Down
11 changes: 9 additions & 2 deletions src/CII/Models/ReferencedDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

namespace easybill\eInvoicing\CII\Models;

use easybill\eInvoicing\Enums\DocumentType;
use easybill\eInvoicing\Enums\ReferenceQualifier;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlElement;
Expand All @@ -20,10 +22,10 @@ final class ReferencedDocument
#[SerializedName('URIID')]
public ?Id $uriid = null;

#[Type('string')]
#[Type(DocumentType::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('TypeCode')]
public ?string $typeCode = null;
public ?DocumentType $typeCode = null;

#[Type('string')]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
Expand All @@ -45,6 +47,11 @@ final class ReferencedDocument
#[SerializedName('LineID')]
public ?string $lineId = null;

#[Type(ReferenceQualifier::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('ReferenceTypeCode')]
public ?ReferenceQualifier $referenceTypeCode = null;

public static function create(string $issuerAssignedID): self
{
$self = new self();
Expand Down
5 changes: 3 additions & 2 deletions src/CII/Models/TradeAddress.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace easybill\eInvoicing\CII\Models;

use easybill\eInvoicing\Enums\CountryCode;
use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\XmlElement;
Expand Down Expand Up @@ -35,10 +36,10 @@ final class TradeAddress
#[SerializedName('CityName')]
public ?string $city = null;

#[Type('string')]
#[Type(CountryCode::class)]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[SerializedName('CountryID')]
public ?string $countryCode = null;
public ?CountryCode $countryCode = null;

#[Type('string')]
#[XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
Expand Down
5 changes: 5 additions & 0 deletions src/CII/Models/TradeAllowanceCharge.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ final class TradeAllowanceCharge
#[JMS\SerializedName('ActualAmount')]
public Amount $actualAmount;

#[JMS\Type('string')]
#[JMS\XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[JMS\SerializedName('ReasonCode')]
public ?string $reasonCode = null;

#[JMS\Type('string')]
#[JMS\XmlElement(cdata: false, namespace: 'urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100')]
#[JMS\SerializedName('Reason')]
Expand Down
Loading

0 comments on commit 18301b8

Please sign in to comment.