166 lines
7.6 KiB
PHP
166 lines
7.6 KiB
PHP
<?php
|
|
class DeliveryNoteEdiXML
|
|
{
|
|
|
|
private $xml;
|
|
private $id;
|
|
private $wz;
|
|
private $sale;
|
|
|
|
private $ediDeliveryNotesPath = '/var/edi/twinpol/deliveryNotes/';
|
|
|
|
function DeliveryNoteEdiXML ($id)
|
|
{
|
|
$this->id = $id;
|
|
$this->wz = new EcmStockDocOut();
|
|
$this->wz->retrieve($this->id);
|
|
$this->sale = new EcmSale();
|
|
$this->sale->retrieve($this->wz->so_id);
|
|
}
|
|
|
|
public function getXML () {
|
|
$this->xml = $this->createDeliveryNoteXML();
|
|
$this->xml->flush();
|
|
}
|
|
|
|
private function createDeliveryNoteXML () {
|
|
global $timedate;
|
|
$wz = $this->wz;
|
|
$sale = $this->sale;
|
|
$xml = new XMLWriter();
|
|
$name = str_replace('/', '_', $wz->document_no);
|
|
$name = str_replace(' ', '', $name);
|
|
$name = str_replace('DN', '', $name);
|
|
$xml->openURI($this->ediDeliveryNotesPath . $name . '.xml');
|
|
$xml->startDocument('1.0', 'UTF-8');
|
|
$xml->startElement('Document-DespatchAdvice');
|
|
$xml->startElement('DespatchAdvice-Header');
|
|
$xml->writeElement('DespatchAdviceNumber', $wz->document_no); // numer delivery note
|
|
$xml->writeElement('DespatchAdviceDate', $timedate->to_db_date($wz->register_date));
|
|
// create element DeliveryDate with register_date plus one day
|
|
$date = new DateTime($wz->register_date);
|
|
$date->add(new DateInterval('P1D'));
|
|
if ($date->format('N') == 6) { // sobota/niedziela => poniedziałek
|
|
$date->add(new DateInterval('P2D'));
|
|
} elseif ($date->format('N') == 7) {
|
|
$date->add(new DateInterval('P1D'));
|
|
}
|
|
$xml->writeElement('ExpectedDeliveryDate', $date->format('Y-m-d')); // spodziewana data dostawy
|
|
$xml->writeElement('ExpectedDeliveryTime', '10:00'); // spodziewana godzina dostawy
|
|
$xml->writeElement('EstimatedDeliveryDate', $date->format('Y-m-d')); // spodziewana data dostawy
|
|
$xml->writeElement('EstimatedDeliveryTime', '10:00'); // spodziewana godzina dostawy
|
|
$xml->writeElement('EstimatedDeliveryDate', $date->format('Y-m-d')); // spodziewana data dostawy
|
|
$xml->writeElement('EstimatedDeliveryTime', '08:00'); // spodziewana godzina dostawy
|
|
$xml->writeElement('EarliestDeliveryDate', $date->format('Y-m-d'));
|
|
$xml->writeElement('EarliestDeliveryTime', '08:00');
|
|
$date->add(new DateInterval('P3D'));
|
|
if ($date->format('N') == 6) { // sobota/niedziela => poniedziałek
|
|
$date->add(new DateInterval('P2D'));
|
|
} elseif ($date->format('N') == 7) {
|
|
$date->add(new DateInterval('P1D'));
|
|
}
|
|
$xml->writeElement('LatestDeliveryDate', $date->format('Y-m-d'));
|
|
$xml->writeElement('LatestDeliveryTime', '16:00');
|
|
$xml->writeElement('BuyerOrderNumber', $sale->parent_document_no);
|
|
$xml->writeElement('SupplierOrderNumber', $sale->document_no);
|
|
$xml->writeElement('BuyerOrderDate', $timedate->to_db_date($sale->register_date));
|
|
$xml->writeElement('SupplierOrderDate', $timedate->to_db_date($sale->register_date));
|
|
$xml->writeElement('DespatchNumber', $wz->document_no);
|
|
$xml->writeElement('DespatchDate', $timedate->to_db_date($wz->register_date));
|
|
$xml->writeElement('ShipmentDate', $timedate->to_db_date($wz->register_date));
|
|
$xml->writeElement('MessageType', 'DA');
|
|
$xml->writeElement('DocumentFunctionCode', 'O');
|
|
$xml->endElement(); // DespatchAdvice-Header
|
|
$xml->startElement('DespatchAdvice-Parties');
|
|
$xml->startElement('Buyer');
|
|
$a = new Account();
|
|
$a->retrieve($sale->parent_id);
|
|
if (! $sale->parent_iln || $sale->parent_iln == '')
|
|
$sale->parent_iln = $a->iln;
|
|
$xml->writeElement('ILN', $sale->parent_iln);
|
|
$xml->writeElement('TaxID', $sale->parent_nip);
|
|
$xml->writeElement('Name', $sale->parent_name);
|
|
$xml->writeElement('StreetAndNumber', $sale->parent_address_street);
|
|
$xml->writeElement('CityName', $sale->parent_address_city);
|
|
$xml->writeElement('PostalCode', $sale->parent_address_postalcode);
|
|
$xml->writeElement('Country', 'PL');
|
|
$xml->endElement(); // Buyer
|
|
$xml->startElement('Seller');
|
|
$xml->writeElement('ILN', '5909000837119');
|
|
$xml->writeElement('TaxID', '8792676609');
|
|
$xml->writeElement('Name', 'Twinpol Sp. z o.o.');
|
|
$xml->writeElement('StreetAndNumber', 'Al. Lipowa 48');
|
|
$xml->writeElement('CityName', 'Obrowo');
|
|
$xml->writeElement('PostalCode', '87-126');
|
|
$xml->writeElement('Country', 'PL');
|
|
$xml->endElement(); // Seller
|
|
$xml->startElement('DeliveryPoint');
|
|
$xml->writeElement('ILN', $sale->shipping_iln);
|
|
$xml->writeElement('Name', $sale->shipping_address_name);
|
|
$xml->writeElement('StreetAndNumber', $sale->shipping_address_street);
|
|
$xml->writeElement('CityName', $sale->shipping_address_city);
|
|
$xml->writeElement('PostalCode', $sale->shipping_address_postalcode);
|
|
$xml->writeElement('Country', 'PL');
|
|
$xml->endElement(); // DeliveryPoint
|
|
$xml->startElement('SellerHeadquarters');
|
|
$xml->writeElement('ILN', '5909000837119');
|
|
$xml->writeElement('TaxID', '8792676609');
|
|
$xml->writeElement('Name', 'Twinpol Sp. z o.o.');
|
|
$xml->writeElement('StreetAndNumber', 'Al. Lipowa 48');
|
|
$xml->writeElement('CityName', 'Obrowo');
|
|
$xml->writeElement('PostalCode', '87-126');
|
|
$xml->writeElement('Country', 'PL');
|
|
$xml->endElement(); // SellerHeadquarters
|
|
$xml->startElement('ShipFrom');
|
|
$xml->writeElement('ILN', '5909000837119');
|
|
$xml->writeElement('TaxID', '8792676609');
|
|
$xml->writeElement('Name', 'Twinpol Sp. z o.o.');
|
|
$xml->writeElement('StreetAndNumber', 'Al. Lipowa 48');
|
|
$xml->writeElement('CityName', 'Obrowo');
|
|
$xml->writeElement('PostalCode', '87-126');
|
|
$xml->writeElement('Country', 'PL');
|
|
$xml->endElement(); // ShipFrom
|
|
$xml->endElement(); // DespatchAdvice-Parties
|
|
|
|
$xml->startElement('DespatchAdvice-Consignment');
|
|
$xml->startElement('Packing-Sequence');
|
|
$xml->startElement('Packing-Reference');
|
|
$xml->writeElement('PackageId', '1');
|
|
$xml->endElement(); // Packing-Reference
|
|
|
|
$xml->startElement('Line');
|
|
$pl = $wz->getPositionList(true);
|
|
$db = $GLOBALS['db'];
|
|
foreach ($pl as $p) {
|
|
$ean = $db->fetchByAssoc($db->query("SELECT ean as ean FROM ecmproducts WHERE id = '" . $p['product_id'] . "'"));
|
|
if (strlen($p['name']) > 70){
|
|
mb_internal_encoding("UTF-8");
|
|
|
|
$p['name'] = mb_substr($p['name'], 0, 67, "utf-8") . '...';
|
|
|
|
}
|
|
$xml->startElement('Line-Item');
|
|
$xml->writeElement('LineNumber', $p['position']+1);
|
|
$xml->writeElement('EAN', $ean['ean']);
|
|
$xml->writeElement('BuyerItemCode', $p['recipient_code']);
|
|
$xml->writeElement('SupplierItemCode', $p['product_code']);
|
|
$xml->writeElement('ItemDescription', $p['name']);
|
|
$xml->writeElement('QuantityDespatched', $p['quantity']);
|
|
$xml->endElement(); // Line
|
|
}
|
|
$xml->endElement(); // Lines
|
|
$xml->endElement(); // Packing-Sequence
|
|
$xml->endElement(); // DespatchAdvice-Consignment
|
|
$xml->endElement(); // Document-DespatchAdvice
|
|
return $xml;
|
|
}
|
|
}
|
|
|
|
function brecho() {
|
|
echo '<pre>';
|
|
foreach (func_get_args() as $arg) {
|
|
print_r($arg);
|
|
echo "<br>";
|
|
}
|
|
echo '</pre>';
|
|
} |