diff --git a/application/WarehouseEShopOrder/WarehouseEShopOrderController.php b/application/WarehouseEShopOrder/WarehouseEShopOrderController.php index 41e1b5bb5..2226d90d9 100644 --- a/application/WarehouseEShopOrder/WarehouseEShopOrderController.php +++ b/application/WarehouseEShopOrder/WarehouseEShopOrderController.php @@ -4,45 +4,53 @@ class WarehouseEShopOrderController extends TTCrud { protected string $headerTitle = 'Energie Steiermark Bestellungen'; protected bool $createText = false; - protected array $columns = [ - ['key' => 'id', 'text' => 'ID', 'modal' => false], - ['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' => '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,'table' => ['filter' => 'select'], 'modal' => ['type' => 'select', 'items' => []]], - ['key' => 'actions', 'text' => 'Aktionen', 'required' => false, 'modal' => false, 'table' => ['filter' => false, 'sortable' => false, 'class' => 'text-center']], - ]; + protected array $columns = [['key' => 'id', 'text' => 'ID', 'modal' => false], + ['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' => '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, + 'table' => ['filter' => 'select'], + 'modal' => ['type' => 'select', 'items' => []]], + ['key' => 'actions', + 'text' => 'Aktionen', + 'required' => false, + 'modal' => false, + 'table' => ['filter' => false, 'sortable' => false, 'class' => 'text-center']],]; - protected array $additionalActions = [ - ['key' => 'openHistory', 'title' => 'Historie', 'class' => 'fas fa-history text-primary'], - ['key' => 'openSingleOrderEmail', 'title' => 'Bestellbestätigung', 'class' => 'fas fa-envelope text-primary'], - ]; + protected array $additionalActions = [['key' => 'openHistory', 'title' => 'Historie', 'class' => 'fas fa-history text-primary'], + ['key' => 'openSingleOrderEmail', 'title' => 'Bestellbestätigung', 'class' => 'fas fa-envelope text-primary'],]; - protected array $infoMessages = [ - 'create' => 'Bestellung wurde erfolgreich erstellt, sie erhalten in Kürze eine Bestätigungsmail', - 'update' => 'Lagerort wurde aktualisiert', - 'delete' => 'Lagerort wurde gelöscht', - 'noChanges' => 'Keine Änderungen', - ]; + protected array $infoMessages = ['create' => 'Bestellung wurde erfolgreich erstellt, sie erhalten in Kürze eine Bestätigungsmail', + 'update' => 'Lagerort wurde aktualisiert', + 'delete' => 'Lagerort wurde gelöscht', + 'noChanges' => 'Keine Änderungen',]; public function permissionCheck(): bool { return $this->user->can(["WarehouseEShop"]); } protected function prepareCrudConfig() { - $users = array_map(function($user) { + $users = array_map(function ($user) { return ['value' => intval($user->id), 'text' => $user->name]; }, UserModel::search()); @@ -81,19 +89,91 @@ class WarehouseEShopOrderController extends TTCrud { if ($isDryRun) { self::returnJson(['success' => true, 'message' => 'E-Mail Body wurde erstellt', 'body' => $body]); } else { - $email = new Emailnotification(); - $email->setSubject("Bestellbestätigung Bestellung #$paddedId"); - $email->setBody($body); - $email->setFrom(TT_OUTGOING_EMAIL_2FA, TT_OUTGOING_EMAIL_2FA); -// $email->setTo('ftth-versand@triotronik.com'); - $email->setTo('luca.haid@xinon.eu'); - $csvContent = $this->CSVExportNewOrdersMarkAcceptedAction(true, [$id]); - $email->addAttachment(null, $csvContent, "Bestellung_$paddedId.csv", "text/csv"); - $email->send(); + foreach (["ftth-versand@triotronik.com", "einkauf@xinon.at"] as $emailAddr) { + $email = new Emailnotification(); + $email->setSubject("Bestellbestätigung Bestellung #$paddedId"); + $email->setBody($body); + $email->setFrom(TT_OUTGOING_EMAIL_2FA, TT_OUTGOING_EMAIL_2FA); + $email->setTo($emailAddr); + $csvContent = $this->CSVExportNewOrdersMarkAcceptedAction(true, [$id]); + $csvContent = utf8_decode($csvContent); + $email->addAttachment(null, $csvContent, "Bestellung_$paddedId.csv", "text/csv", "attachment", "base64", "utf-8"); + $email->send(); + + } self::returnJson(['success' => true, 'message' => 'E-Mail wurde versendet']); } } + protected function CSVExportNewOrdersMarkAcceptedAction($returnCSV = false, $orderIds = []) { + $orders = WarehouseEShopOrderModel::getAll(['status' => 'new']); + $orders = array_map(function ($order) { + return (array) $order; + }, $orders); + + if (!empty($orderIds)) { + $orders = array_filter($orders, function ($order) use ($orderIds) { + return in_array($order['id'], $orderIds); + }); + } + + if (empty($orders)) { + $msg = ''; + switch (count($orderIds)) { + case 0: + $msg = 'Keine neuen Bestellungen'; + break; + case 1: + $msg = 'Keine neue Bestellung mit dieser ID gefunden'; + break; + default: + $msg = 'Keine neuen Bestellungen mit diesen IDs gefunden'; + break; + } + self::returnJson(['success' => false, 'message' => $msg]); + die(); + } + + $ordersItems = $this->getAllOrderItemsPerOrder(); + $rows = []; + + 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)); + + $rows[] = ['AddressNumber' => '23000539', + 'Name' => $order['deliveryAddressName'], + 'Straße' => $order['deliveryAddressLine'], + 'Postleitzahl' => $order['deliveryAddressPLZ'], + 'Ort' => $order['deliveryAddressCity'], + 'Land' => 'AT', + 'Anschriftenzusatz 1' => '', + 'Produkte' => $orderItemsStr]; + + 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); + } + + if ($returnCSV) { + return Helper::arrayToCsv($rows); + } + + self::returnJson($rows); + } + protected function getAllOrderItemsPerOrder(): array { $items = WarehouseEShopOrderItemModel::getAll(); $articles = WarehouseArticleModel::getAll(); @@ -109,14 +189,12 @@ class WarehouseEShopOrderController extends TTCrud { $article = $item['articleId'] ? array_search($item['articleId'], array_column($articles, 'id')) : null; $articlePacket = $item['articlePacketId'] ? array_search($item['articlePacketId'], array_column($articlePackets, 'id')) : null; - $orderItems[$item['orderId']][] = [ - 'id' => $item['id'], - 'articleId' => $item['articleId'], - 'articleTitle' => isset($articles[$article]) ? $articles[$article]->title : null, - 'articlePacketId' => $item['articlePacketId'], - 'articlePacketTitle' => isset($articlePackets[$articlePacket]) ? $articlePackets[$articlePacket]->title : null, - 'quantity' => $item['quantity'] - ]; + $orderItems[$item['orderId']][] = ['id' => $item['id'], + 'articleId' => $item['articleId'], + 'articleTitle' => isset($articles[$article]) ? $articles[$article]->title : null, + 'articlePacketId' => $item['articlePacketId'], + 'articlePacketTitle' => isset($articlePackets[$articlePacket]) ? $articlePackets[$articlePacket]->title : null, + 'quantity' => $item['quantity']]; } return $orderItems; @@ -140,33 +218,27 @@ class WarehouseEShopOrderController extends TTCrud { Helper::validateArray($json, $this->getCheckArray()); - $id = WarehouseEShopOrderModel::create([ - 'status' => 'new', - 'deliveryMode' => $json['deliveryMode'], - 'deliveryAddressName' => $json['deliveryAddressName'], - 'deliveryAddressLine' => $json['deliveryAddressLine'], - 'deliveryAddressPLZ' => $json['deliveryAddressPLZ'], - 'deliveryAddressCity' => $json['deliveryAddressCity'], - 'create' => $json['create'], - 'createBy' => $json['createBy'], - ]); + $id = WarehouseEShopOrderModel::create(['status' => 'new', + 'deliveryMode' => $json['deliveryMode'], + 'deliveryAddressName' => $json['deliveryAddressName'], + 'deliveryAddressLine' => $json['deliveryAddressLine'], + 'deliveryAddressPLZ' => $json['deliveryAddressPLZ'], + 'deliveryAddressCity' => $json['deliveryAddressCity'], + 'create' => $json['create'], + 'createBy' => $json['createBy'],]); // now create WarehouseEShopOrderItems for each item in the shopping cart foreach ($shoppingCart as $item) { // itemId can either be P-[PACKETID] or I-[ARTICLEID] // parse this and either fill articleId or articlePacketId for warehouseEShopOrderItem if (strpos($item['itemId'], 'P-') === 0) { - WarehouseEShopOrderItemModel::create([ - 'orderId' => $id, - 'articlePacketId' => intval(substr($item['itemId'], 2)), - 'quantity' => intval($item['amount']), - ]); + WarehouseEShopOrderItemModel::create(['orderId' => $id, + 'articlePacketId' => intval(substr($item['itemId'], 2)), + 'quantity' => intval($item['amount']),]); } else if (strpos($item['itemId'], 'I-') === 0) { - WarehouseEShopOrderItemModel::create([ - 'orderId' => $id, - 'articleId' => intval(substr($item['itemId'], 2)), - 'quantity' => intval($item['amount']), - ]); + WarehouseEShopOrderItemModel::create(['orderId' => $id, + 'articleId' => intval(substr($item['itemId'], 2)), + 'quantity' => intval($item['amount']),]); } else { self::returnJson(['success' => false, 'message' => 'Invalid item id']); die(); @@ -209,67 +281,6 @@ class WarehouseEShopOrderController extends TTCrud { die(json_encode($json)); } - protected function CSVExportNewOrdersMarkAcceptedAction($returnCSV = false, $orderIds = []) { - $orders = WarehouseEShopOrderModel::getAll(['status' => 'new']); - $orders = array_map(function($order) { - return (array) $order; - }, $orders); - - if (!empty($orderIds)) { - $orders = array_filter($orders, function($order) use ($orderIds) { - return in_array($order['id'], $orderIds); - }); - } - - if (empty($orders)) { - self::returnJson(['success' => false, 'message' => 'Keine neuen Bestellungen']); - die(); - } - - $ordersItems = $this->getAllOrderItemsPerOrder(); - $rows = []; - - 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)); - - $rows[] = [ - 'AddressNumber' => '23000539', - 'Name' => $order['deliveryAddressName'], - 'Straße' => $order['deliveryAddressLine'], - 'Postleitzahl' => $order['deliveryAddressPLZ'], - 'Ort' => $order['deliveryAddressCity'], - 'Land' => 'AT', - 'Anschriftenzusatz 1' => '', - 'Produkte' => $orderItemsStr - ]; - - 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); - } - - if ($returnCSV) { - return Helper::arrayToCsv($rows); - } - - self::returnJson($rows); - } - protected function beforeUpdate($postData): bool { (new WarehouseHistoryController)->create($postData, $this->mod); return true; diff --git a/public/js/pages/WarehouseEShopOrder/WarehouseEShopOrder.js b/public/js/pages/WarehouseEShopOrder/WarehouseEShopOrder.js index adda88c16..c284c63b8 100644 --- a/public/js/pages/WarehouseEShopOrder/WarehouseEShopOrder.js +++ b/public/js/pages/WarehouseEShopOrder/WarehouseEShopOrder.js @@ -69,6 +69,7 @@ Vue.component('warehouse-e-shop-order', { } else { window.notify('error', 'Ein Fehler ist aufgetreten'); } + await this.$refs.table.$refs.table.fetchData(); }, async createCSVExportAndMarkAsAccepted() { const response = await axios.post(`${window['TT_CONFIG']['BASE_PATH']}/WarehouseEShopOrder/CSVExportNewOrdersMarkAccepted`);