added csv export for triotronik for e shop orders

This commit is contained in:
2024-08-02 10:28:19 +02:00
parent e31c240f76
commit 2c0ee7e83e
3 changed files with 95 additions and 11 deletions

View File

@@ -6,15 +6,20 @@ class WarehouseEShopOrderController extends TTCrud {
protected array $columns = [
['key' => 'id', 'text' => 'ID', 'modal' => false],
['key' => 'status', 'text' => 'Status', 'required' => true],
['key' => 'status', 'text' => 'Status', 'required' => true, 'modal' => ['type' => 'select', 'items' => [
['value' => 'new', 'text' => 'Neu'],
['value' => 'accepted', 'text' => 'An Lieferant übergeben'],
['value' => 'sent', 'text' => 'Gesendet'],
['value' => 'done', 'text' => 'Erledigt'],
]], 'table' => ['filter' => 'select']],
['key' => 'deliveryMode', 'text' => 'Liefermodus', 'required' => true, 'modal' => ['type' => 'select', 'items' => [
['value' => 'singleAddress', 'text' => 'Einzelne Adresse'],
// ['value' => 'multipleAddresses', 'text' => 'Mehrere Adressen'],
]]],
['key' => 'deliveryAddressName', 'text' => 'Lieferadresse Name', 'required' => true, 'table' => false],
['key' => 'deliveryAddressLine', 'text' => 'Lieferadresse', 'required' => true, 'required_length' => 4],
['key' => 'deliveryAddressPLZ', 'text' => 'Lieferadresse PLZ', 'required' => true, 'regex' => '/^\d{4}$/', 'table' => false],
['key' => 'deliveryAddressCity', 'text' => 'Lieferadresse Stadt', 'required' => true, 'required_length' => 3, 'table' => false],
['key' => 'deliveryAddressName', 'text' => 'Name', 'required' => true],
['key' => 'deliveryAddressLine', 'text' => 'Adresse', 'required' => true, 'required_length' => 4],
['key' => 'deliveryAddressPLZ', 'text' => 'PLZ', 'required' => true, 'regex' => '/^\d{4}$/'],
['key' => 'deliveryAddressCity', 'text' => 'Stadt', 'required' => true, 'required_length' => 3],
['key' => 'create', 'text' => 'Erstellt', 'required' => true, 'modal' => false, 'filter' => 'datetime'],
['key' => 'createBy', 'text' => 'Erstellt von', 'required' => true,'modal' => ['type' => 'select', 'items' => []]],
['key' => 'actions', 'text' => 'Aktionen', 'required' => false, 'modal' => false, 'table' => ['filter' => false, 'sortable' => false, 'class' => 'text-center']],
@@ -43,7 +48,7 @@ class WarehouseEShopOrderController extends TTCrud {
$this->columns[8]['modal']['items'] = $users;
}
protected function getAllItemsPerOrderAction() {
protected function getAllOrderItemsPerOrder(): array {
$items = WarehouseEShopOrderItemModel::getAll();
$articles = WarehouseArticleModel::getAll();
$articlePackets = WarehouseArticlePacketModel::getAll();
@@ -68,6 +73,11 @@ class WarehouseEShopOrderController extends TTCrud {
];
}
return $orderItems;
}
protected function getAllItemsPerOrderAction() {
$orderItems = $this->getAllOrderItemsPerOrder();
self::returnJson($orderItems);
}
@@ -125,6 +135,50 @@ class WarehouseEShopOrderController extends TTCrud {
die(json_encode($json));
}
protected function CSVExportNewOrdersMarkAcceptedAction() {
$orders = WarehouseEShopOrderModel::getAll(['status' => 'new']);
$orders = array_map(function($order) {
return (array) $order;
}, $orders);
if (empty($orders)) {
self::returnJson(['success' => false, 'message' => 'Keine neuen Bestellungen']);
die();
}
$ordersItems = $this->getAllOrderItemsPerOrder();
// Create CSV with these Headers: Adressnummer, Name, Straße, Postleitzahl, Ort, Land, Anschriftenzusatz 1
$csv = "Adressnummer,Name,Straße,Postleitzahl,Ort,Land,Anschriftenzusatz 1,Produkte\n";
foreach ($orders as $order) {
$orderItems = $ordersItems[$order['id']];
$orderItemsStr = join(' : ', array_map(function($item) {
$articleTitle = $item['articleTitle'] ?? $item['articlePacketTitle'];
$quantity = $item['quantity'];
return "$quantity x $articleTitle";
}, $orderItems));
$csv .= '23000539,' . $order['deliveryAddressName'] . ',' . $order['deliveryAddressLine'] . ',' . $order['deliveryAddressPLZ'] . ',' . $order['deliveryAddressCity'] . ',AT,,'. $orderItemsStr . "\n";
WarehouseHistoryModel::create([
'table' => 'WarehouseEShopOrder',
'row_id' => $order['id'],
'key' => 'status',
'old_value' => 'new',
'new_value' => 'accepted',
'note' => 'CSV Export',
'user_id' => $this->user->id,
'create' => time()
]);
$order['status'] = 'accepted';
WarehouseEShopOrderModel::update($order);
}
die($csv);
}
protected function beforeUpdate($postData): bool {
(new WarehouseHistoryController)->create($postData, $this->mod);
return true;

View File

@@ -24,18 +24,19 @@ class WarehouseHistoryController {
public function getHistory($id, string $mod, $columns): array {
$history = WarehouseHistoryModel::getByRowId($id, $mod);
return array_map(function ($item) use ($columns) {
$item = (array) $item;
if (isset($this->columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'])) {
if (isset($columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'])) {
if($this->columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'] === 'checkbox') {
if($columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'] === 'checkbox') {
$item['old_value'] = $item['old_value'] === '1' ? 'Ja' : 'Nein';
$item['new_value'] = $item['new_value'] === '1' ? 'Ja' : 'Nein';
}
if($this->columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'] === 'select') {
$column = $this->columns[array_search($item['key'], array_column($columns, 'key'))];
if($columns[array_search($item['key'], array_column($columns, 'key'))]['modal']['type'] === 'select') {
$column = $columns[array_search($item['key'], array_column($columns, 'key'))];
$item['old_value'] = $column['modal']['items'][array_search($item['old_value'], array_column($column['modal']['items'], 'value'))]['text'];
$item['new_value'] = $column['modal']['items'][array_search($item['new_value'], array_column($column['modal']['items'], 'value'))]['text'];
}

View File

@@ -3,7 +3,14 @@ Vue.component('warehouse-e-shop-order', {
//language=Vue
template: `
<tt-card>
<tt-table-crud @openHistory="historyModal = true; historyModalId = $event.id">
<tt-table-crud @openHistory="historyModal = true; historyModalId = $event.id" ref="table">
<template v-slot:table-top-buttons>
<button @click="createCSVExportAndMarkAsAccepted" type="button" class="btn btn-outline-success">
<i class="fas fa-file-excel"></i>
CSV Export für neue Bestellungen
</button>
</template>
<template v-slot:create="{ row }">
{{ window.moment(row.create * 1000).format('DD.MM.YYYY HH:mm:ss') }}
@@ -31,6 +38,28 @@ Vue.component('warehouse-e-shop-order', {
const response = await axios.get(`${window['TT_CONFIG']['BASE_PATH']}/WarehouseEShopOrder/getAllItemsPerOrder`);
console.log(response.data);
this.articleItems = response.data;
},
methods: {
async createCSVExportAndMarkAsAccepted() {
const response = await axios.post(`${window['TT_CONFIG']['BASE_PATH']}/WarehouseEShopOrder/CSVExportNewOrdersMarkAccepted`);
if (response.data.message) {
window.notify('info', response.data.message);
return;
}
const blob = new Blob([response.data], {type: 'text/csv charset=utf-8;'});
const url = window.URL.createObjectURL(blob);
const link = document.createElement("a");
link.setAttribute("href", url);
link.setAttribute("download", "Export.csv");
document.body.appendChild(link); // Required for FF
link.click(); // This will download the data file named "my_data.csv".
link.remove();
await this.$refs.table.$refs.table.fetchData();
}
}
})