From 77fd40dd9d0a3487d0586f7bff665b9321707540 Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Tue, 10 Dec 2024 13:49:24 +0100 Subject: [PATCH] added articlenumber for article and shipping note --- .../WarehouseArticleController.php | 43 +++++++++++++++++++ .../WarehouseArticleModel.php | 1 + .../WarehouseShippingNoteController.php | 2 +- .../20241210120000_warehouse_modify_6.php | 31 +++++++++++++ .../WarehouseShippingNote.css | 4 +- .../WarehouseShippingNoteModal.js | 5 +++ .../plugins/vue/tt-components/tt-checkbox.js | 1 + 7 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 db/migrations/20241210120000_warehouse_modify_6.php diff --git a/application/WarehouseArticle/WarehouseArticleController.php b/application/WarehouseArticle/WarehouseArticleController.php index af64a5dbc..77c80a59e 100644 --- a/application/WarehouseArticle/WarehouseArticleController.php +++ b/application/WarehouseArticle/WarehouseArticleController.php @@ -7,6 +7,7 @@ class WarehouseArticleController extends TTCrud { // @formatter:off protected array $columns = [ ['key' => 'title', 'text' => 'Titel', 'required' => true, 'table' => ['priority' => 9]], + ['key' => 'articleNumber', 'text' => 'Nr.', 'required' => true], ['key' => 'description', 'text' => 'Beschreibung', 'required' => true], ['key' => 'category', 'text' => 'Kategorie', 'required' => true], ['key' => 'unit', 'text' => 'Einheit', 'required' => true,'table' => false], // Boolean value @@ -253,6 +254,48 @@ class WarehouseArticleController extends TTCrud { } } + protected function provArticleNumberImportAction() { + // if method is post and file is set read the csv and var dump json and die + // if method is get return basic html with a form to upload a file and a submit button + + if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_FILES['file'])) { + $file = fopen($_FILES['file']['tmp_name'], 'r'); + $data = []; + // parse csv as object with first row as keys as header and use key => value + $firstRow = true; + while (($row = fgetcsv($file)) !== false) { + if ($firstRow) { + $header = $row; + $firstRow = false; + continue; + } + $data[] = array_combine($header, $row); + } + + // loop through all the data and if PRODUKT 1.ZEILE is set and articleNumber is not set push the last 4 numbers of "EAN 13 Code" to articleNumber of the found article + + foreach ($data as $item) { + if (isset($item['PRODUKT 1.ZEILE'])) { + $articles = WarehouseArticleModel::getAll(['title' => $item['PRODUKT 1.ZEILE']]); + if (!empty($articles)) { + $article = (array) WarehouseArticleModel::get($articles[0]->id); + + $article['articleNumber'] = substr($item['EAN 13 Code'], -4); + WarehouseArticleModel::update($article); + } + } + } + + fclose($file); + die(json_encode(['success' => true])); + } + + $html = '
'; + echo $html; + die(); + + } + protected function prepareOrderAction() { // inside post json it will look like // [ diff --git a/application/WarehouseArticle/WarehouseArticleModel.php b/application/WarehouseArticle/WarehouseArticleModel.php index 2a6a14cf3..cb2c6da23 100644 --- a/application/WarehouseArticle/WarehouseArticleModel.php +++ b/application/WarehouseArticle/WarehouseArticleModel.php @@ -3,6 +3,7 @@ class WarehouseArticleModel extends TTCrudBaseModel { public int $id; public string $title; + public string $articleNumber; public string $description; public string $category; public ?float $cheapestPurchasePrice; diff --git a/application/WarehouseShippingNote/WarehouseShippingNoteController.php b/application/WarehouseShippingNote/WarehouseShippingNoteController.php index fba149387..a4bcee79a 100644 --- a/application/WarehouseShippingNote/WarehouseShippingNoteController.php +++ b/application/WarehouseShippingNote/WarehouseShippingNoteController.php @@ -218,7 +218,7 @@ class WarehouseShippingNoteController extends TTCrud { foreach (json_decode($shippingNote->positions, true) as $position) { if (isset($position['article'])) { $article = WarehouseArticleModel::get($position['article']); - $position['articleTitle'] = $article->title; + $position['articleTitle'] = $article->articleNumber . " | " .$article->title; $position['articleDescription'] = $article->description === $article->title ? "" : $article->description; $position['articleUnit'] = $article->unit; $positions[] = $position; diff --git a/db/migrations/20241210120000_warehouse_modify_6.php b/db/migrations/20241210120000_warehouse_modify_6.php new file mode 100644 index 000000000..c953bc38d --- /dev/null +++ b/db/migrations/20241210120000_warehouse_modify_6.php @@ -0,0 +1,31 @@ +getEnvironment() == "thetool") { + // add articleNumber varchar 255 to the table WarehouseArticle + $WarehouseArticle = $this->table("WarehouseArticle", ["signed" => true]); + $WarehouseArticle->addColumn("articleNumber", "string", ["null" => false, "limit" => 255]); + $WarehouseArticle->save(); + } + + if ($this->getEnvironment() == "addressdb") { + + } + } + + public function down(): void { + if ($this->getEnvironment() == "thetool") { + $WarehouseArticle = $this->table("WarehouseArticle", ["signed" => true]); + $WarehouseArticle->removeColumn("articleNumber"); + $WarehouseArticle->save(); + } + + if ($this->getEnvironment() == "addressdb") { + + } + } +} diff --git a/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css b/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css index f89d7ac8f..be92707e7 100644 --- a/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css +++ b/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css @@ -1,11 +1,11 @@ .warehouse-shipping-note-modal-positions-entry-container { display: grid; - grid-template-columns: 2fr 1fr 1fr 1fr; + grid-template-columns: 2fr 1fr 0.5fr 1fr 1fr; grid-gap: 10px; } .warehouse-shipping-note-modal-positions-entry-container.hidePrice { - grid-template-columns: 2fr 1fr 1fr; + grid-template-columns: 2fr 1fr 0.5fr 1fr; } .warehouse-shipping-note-modal-positions-entry-actions, .warehouse-shipping-note-modal-hours-entry-actions { diff --git a/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js b/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js index 126e0624d..206f0b15c 100644 --- a/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js +++ b/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js @@ -264,6 +264,7 @@ Vue.component('warehouse-shipping-note-modal-positions-entry', { articlePacketId: '', amount: '', price: '', + isEnergieMaterial: false, } }, //language=Vue @@ -272,6 +273,7 @@ Vue.component('warehouse-shipping-note-modal-positions-entry', { +
@@ -284,6 +286,7 @@ Vue.component('warehouse-shipping-note-modal-positions-entry', { if (!this.amount) return this.window.notify('error', 'Bitte füllen sie die Menge aus'); const data = { amount: this.amount, + isEnergieMaterial: this.isEnergieMaterial, price: parseFloat(this.price) ?? '' } if (isNaN(data.price)) data.price = ''; @@ -335,6 +338,7 @@ Vue.component('warehouse-shipping-note-modal-positions-view', { Artikel Menge + Energie Material Preis Aktionen @@ -348,6 +352,7 @@ Vue.component('warehouse-shipping-note-modal-positions-view', { position.articleText }} {{ position.amount }} + {{ position?.isEnergieMaterial ? 'Ja' : 'Nein' }} {{ (position.price?.toFixed(2)) }} € diff --git a/public/plugins/vue/tt-components/tt-checkbox.js b/public/plugins/vue/tt-components/tt-checkbox.js index 764684b02..edb308081 100644 --- a/public/plugins/vue/tt-components/tt-checkbox.js +++ b/public/plugins/vue/tt-components/tt-checkbox.js @@ -25,6 +25,7 @@ Vue.component('tt-checkbox', {