Files
kupshop/admin/class/Export/ExportDataDBF.php
2025-08-02 16:30:27 +02:00

157 lines
8.8 KiB
PHP

<?php
namespace Export;
use XBase\Record;
use XBase\WritableTable;
/**
* Own class for DBF export.
*/
class ExportDataDBF extends ExportData
{
/**
* @var WritableTable
*/
private $table;
public function initialize()
{
global $cfg;
$this->tempFilename = $cfg['Path']['data'].'export_data.dbf';
$this->table = WritableTable::create($this->tempFilename, $this->columnDefs(), $this->tempFilename);
}
public function finalize()
{
$this->sendHttpHeaders();
$this->table->close();
readfile($this->tempFilename);
exit;
}
/**
* @param $order \Order
*/
public function generateRow($order)
{
$row_pointer = $this->table->appendRecord();
$this->appendToRow($row_pointer, $order);
$this->table->writeRecord();
}
public function sendHttpHeaders()
{
header('Content-Type: application/x-dbase; charset='.$this->encoding);
header('Content-Disposition: attachment; filename="'.$this->filename.'"');
header('Expires: 0');
header('Pragma: no-cache');
}
protected function columnDefs()
{
/* FIXME: dodělat zbytek a přesměrovat DBF z export_sracka sem */
return [
['DATUM_VYST', Record::DBFFIELD_TYPE_DATE], // datum vystavení
// ['DATUM_SPL', DBFFIELD_TYPE_DATE], //prázdné
// ['DOKLAD_1', DBFFIELD_TYPE_CHAR, 12], //aby tam bylo fčíslo objednávky např. f11521
// ['TYP_ZAP', DBFFIELD_TYPE_CHAR, 1], //hodnota P
// ['ZNAK_UCT', DBFFIELD_TYPE_CHAR, 5], //prázdné
// ['SYMBOLY', DBFFIELD_TYPE_CHAR, 20], //včísloobjednávky např. v11521
// ['PAR_ZNAK', DBFFIELD_TYPE_CHAR, 12], //to samé jako DOKLAD_1 např. f11521
// ['BANK_UCET', DBFFIELD_TYPE_CHAR, 44], //prázdné
// ['SPEC_SYMB', DBFFIELD_TYPE_CHAR, 10], //prázdné
// ['POPIS_TEXT', DBFFIELD_TYPE_CHAR, 30], //libovolný text - např. prodej eshop-objednávka 11521
// ['DRUH_UCT', DBFFIELD_TYPE_CHAR, 5], //hodnota PZ
// ['MENA', DBFFIELD_TYPE_CHAR, 3], //buď Kč nebo EUR
// ['CELKEM_KC', DBFFIELD_TYPE_NUMERIC, 8, 2], //celková částka dokladu včetně DPH v Kč
// ['CELKEMCIZI', DBFFIELD_TYPE_NUMERIC, 8, 2], //celková částka dokladu v EUR - prodej na Slovensko?
// ['KURZ', DBFFIELD_TYPE_NUMERIC, 5, 3], //kurz pro přepočet
// ['DATUM_DPH', DBFFIELD_TYPE_DATE], //datum DPH = datum vystavení
// ['TYP_DPH', DBFFIELD_TYPE_CHAR, 5], //hodnota U
// ['ZAKL_DPH_Z', DBFFIELD_TYPE_NUMERIC, 8, 2], //Částka bez daně v základní sazbě
// ['DPH_Z', DBFFIELD_TYPE_NUMERIC, 8, 2], //Daň s azba 21 %
// ['ZAKL_DPH_S', DBFFIELD_TYPE_NUMERIC, 8, 2], //Částka bez daně ve snížené sazbě
// ['DPH_S', DBFFIELD_TYPE_NUMERIC, 8, 2], //Daň s azba 15 %
// ['TYPMIMODPH', DBFFIELD_TYPE_CHAR, 1], //prázdné
// ['CASTKAMIMO', DBFFIELD_TYPE_NUMERIC, 8, 2], //prázdné
// ['STREDISKO', DBFFIELD_TYPE_CHAR, 5], //PRÁZDNÉ
// ['vykon', DBFFIELD_TYPE_CHAR, 5], //prázdné
// ['zakazka', DBFFIELD_TYPE_CHAR, 5], //prázdné
// ['POZNAMKA', DBFFIELD_TYPE_CHAR, 150], //sem naimportovat jméno a příjmění a město kupujícího JAN NOVAK TURNOV
// ['FIRMA', DBFFIELD_TYPE_CHAR, 30], // Firma
// ['JMENO', DBFFIELD_TYPE_CHAR, 30], //Jmeno
// ['PRIJMENI', DBFFIELD_TYPE_CHAR, 30], //Prijmeni
// ['ICO', DBFFIELD_TYPE_CHAR, 15], //ICO
// ['DIC', DBFFIELD_TYPE_CHAR, 20], //DIC
//
// ['ZAKAZNIK', DBFFIELD_TYPE_CHAR, 80], //Prijmeni nebo firma
// ['ULICE', DBFFIELD_TYPE_CHAR, 50], //Adresa
// ['MESTO', DBFFIELD_TYPE_CHAR, 30], //Adresa
// ['PSC', DBFFIELD_TYPE_CHAR, 10], //Adresa
// ['ZEME', DBFFIELD_TYPE_CHAR, 30], //Adresa
//
// ['STAV', DBFFIELD_TYPE_CHAR, 10], // STORNO/PRODEJ
// ['DATUM_SPLAT', DBFFIELD_TYPE_DATE], //datum splatnosti
];
}
/**
* @param $row_pointer Record
* @param $order \Order
*/
protected function appendToRow($row_pointer, $order)
{
/* FIXME: dodělat zbytek a přesměrovat DBF z export_sracka sem */
if ($order->date_handle) {
$row_pointer->setObjectByName('DATUM_VYST', $order->date_handle->format('Ymd')); // datum vystavení
}
// $r->setObjectByName("DATUM_SPL", $row['DBFFIELD_TYPE_DATE']); //prázdné
// $row_pointer->setObjectByName('DOKLAD_1', $order['order_no']); //aby tam bylo fčíslo objednávky např. f11521
// $row_pointer->setObjectByName('TYP_ZAP', 'P'); //hodnota P
// $row_pointer->setObjectByName('ZNAK_UCT', ''); //prázdné
// $row_pointer->setObjectByName('SYMBOLY', $order['id']); //včísloobjednávky např. v11521
// $row_pointer->setObjectByName('PAR_ZNAK', $order['order_no']); //to samé jako DOKLAD_1 např. f11521
// $row_pointer->setObjectByName('BANK_UCET', ''); //prázdné
// $row_pointer->setObjectByName('SPEC_SYMB', ''); //prázdné
// $row_pointer->setObjectByName('POPIS_TEXT', $encode('Objednávka: ').$order['id']); //libovolný text - např. prodej eshop-objednávka 11521
// $row_pointer->setObjectByName('DRUH_UCT', 'PZ'); //hodnota PZ
// $row_pointer->setObjectByName('MENA', $encode('Kč')); //buď Kč nebo EUR
// $row_pointer->setObjectByName('CELKEM_KC', $total_price); //celková částka dokladu včetně DPH v Kč
// $row_pointer->setObjectByName('CELKEMCIZI', 0); //celková částka dokladu v EUR - prodej na Slovensko?
// $row_pointer->setObjectByName('KURZ', 0); //kurz pro přepočet
// $row_pointer->setObjectByName('DATUM_DPH', strtotime($order['date_handle'])); //datum DPH = datum vystavení
// $row_pointer->setObjectByName('TYP_DPH', 'U'); //hodnota U
// $row_pointer->setObjectByName('ZAKL_DPH_Z', $taxes['21']); //Částka bez daně v základní sazbě
// $row_pointer->setObjectByName('DPH_Z', $taxes['21']->mul(toDecimal(0.21))); //Daň sazba 21 %
// $row_pointer->setObjectByName('ZAKL_DPH_S', $taxes['15']); //Částka bez daně ve snížené sazbě
// $row_pointer->setObjectByName('DPH_S', $taxes['15']->mul(toDecimal(0.15))); //Částka bez daně ve snížené sazbě
// $row_pointer->setObjectByName('TYPMIMODPH', ''); //prázdné
// $row_pointer->setObjectByName('CASTKAMIMO', $taxes['0']); //prázdné
// $row_pointer->setObjectByName('STREDISKO', ''); //PRÁZDNÉ
// $row_pointer->setObjectByName('vykon', ''); //prázdné
// $row_pointer->setObjectByName('zakazka', ''); //prázdné
// $row_pointer->setObjectByName('POZNAMKA', "{$order['invoice_name']} {$order['invoice_surname']}, {$order['invoice_city']}"); //sem naimportovat jméno a příjmění a město kupujícího JAN NOVAK TURNOV
// $row_pointer->setObjectByName('FIRMA', $order['invoice_firm']); // Firma
// $row_pointer->setObjectByName('JMENO', $order['invoice_name']); //Jmeno
// $row_pointer->setObjectByName('PRIJMENI', $order['invoice_surname']); //Prijmeni
//
// $row_pointer->setObjectByName('ICO', $order['invoice_ico']); //ICO
// $row_pointer->setObjectByName('DIC', $order['invoice_dic']); //DIC
//
// $row_pointer->setObjectByName('ZAKAZNIK', $order['invoice_firm'] ? $order['invoice_firm'] : "{$order['invoice_name']} {$order['invoice_surname']}"); //Prijmeni nebo firma
// $row_pointer->setObjectByName('ULICE', $order['invoice_street']);
// $row_pointer->setObjectByName('MESTO', $order['invoice_city']);
// $row_pointer->setObjectByName('PSC', $order['invoice_zip']);
// $row_pointer->setObjectByName('ZEME', $order['invoice_country']);
//
// $row_pointer->setObjectByName('STAV', $order['status_storno'] ? 'STORNO' : 'PRODEJ'); // STORNO/PRODEJ
// $row_pointer->setObjectByName('DATUM_SPLAT', strtotime($order['date_due']));
}
}