Files
crm.twinpol.com/modules/EcmStockDocOuts/edi/createDeliveryNoteXML.php
2025-05-12 15:44:39 +00:00

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>';
}