duesentrieb26/edifact-generator

EDIFACT message generators

0.0.34 2021-03-18 20:27 UTC

README

The classes provided by this package give a fluent interface which simplifies the encoding of an EDI (mainly UN/EDIFACT) message.

The resulting array can be encoded in a valid message with EDI\Encoder class provided by https://github.com/PHPEdifact/edifact.

Each message type extends a generic Message class which provides common helpers.

See SAMPLES.md for code examples using this library.

Generator for ediFACT messages

Message types

  • DESADV
  • ORDERS
  • ORDRSP
  • INVOIC
  • CALINF
  • CODECO
  • COPARN
  • COPINO
  • COPRAR
  • VERMAS
  • WESTIM

Messages can be generated in object style

<?php

use EDI\Encoder;
use EDI\Generator\Interchange;
use EDI\Generator\Invoic\Item;

$interchange = new Interchange(
    'UNB-Identifier-Sender',
    'UNB-Identifier-Receiver'
);
$interchange->setCharset('UNOC')
    ->setCharsetVersion('3');

$invoice
    ->setInvoiceNumber('INV12345')
    ->setInvoiceDate($this->getDateTime())
    ->setDeliveryDate($this->getDateTime())
    ->setReductionOfFeesText('reduction')
    ->setExcludingVatText('excluding Vat text with more as 70 characters used for testing')
    ->setInvoiceDescription('invoiceDescription')
    ->setManufacturerAddress(
        'Name 1',
        'Name 2',
        'Name 3',
        'Street',
        '99999',
        'city',
        'DE'
    )->setWholesalerAddress(
        'Name 1',
        'Name 2',
        'Name 3',
        'Street',
        '99999',
        'city',
        'DE'
    )->setDeliveryAddress(
        'Name 1',
        'Name 2',
        'Name 3',
        'Street',
        '99999',
        'city',
        'DE'
    )->setContactPerson('John Doe')
    ->setMailAddress('john.doe@company.com')
    ->setPhoneNumber('+49123456789')
    ->setFaxNumber('+49123456789-11')
    ->setVatNumber('DE 123456789')
    ->setCurrency('EUR');
$item = new Item();
$item
    ->setPosition(1, 'articleId')
    ->setQuantity(5)
    ->setAdditionalText('additionalText')
    ->setInvoiceDescription('this is a longer description for testing inside item position')
    ->setNetPrice(22.50)
    ->setGrossPrice(26.775)
    ->setOrderNumberWholeSaler('545.SWEB-05622249-002')
    ->setOrderDate($this->getDateTime())
    ->setDeliveryNotePosition(20)
    ->setDeliveryNoteNumber('deliverNoteNumber')
    ->setDeliveryNoteDate($this->getDateTime());
$item->addDiscount(-20.34, Item::DISCOUNT_TYPE_ABSOLUTE);
$item->addDiscount(3);

$invoice->addItem($item);


$invoice
    ->setTotalPositionsAmount(100.22)
    ->setBasisAmount(80)
    ->setTaxableAmount(80)
    ->setPayableAmount(100.22)
    ->setTax(19, 19.11);

$invoice->compose();

$encoder = new Encoder($interchange->addMessage($invoice)->getComposed(), true);
$encoder->setUNA(":+,? '");

$message = $encoder->get();