From 0cf35b19b1f35136fa7a42c61878df4d118c37c0 Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Thu, 21 Nov 2024 09:12:44 +0000 Subject: [PATCH] switched 2 inputs --- .../WarehouseShippingNote/PDF_MAIN.php | 4 + .../WarehouseShippingNoteController.php | 2 +- .../WarehouseShippingNoteModel.php | 2 +- .../20241121100000_warehouse_modify_3.php | 26 ++++++ lib/Helper/Helper.php | 4 + lib/TTCrud/TTCrud.php | 16 +++- .../WarehouseArticle/WarehouseArticle.js | 3 +- .../WarehouseShippingNoteModal.js | 92 +++++++++++++------ 8 files changed, 115 insertions(+), 34 deletions(-) create mode 100644 db/migrations/20241121100000_warehouse_modify_3.php diff --git a/Layout/default/WarehouseShippingNote/PDF_MAIN.php b/Layout/default/WarehouseShippingNote/PDF_MAIN.php index 21ec0c2ec..4615b4861 100644 --- a/Layout/default/WarehouseShippingNote/PDF_MAIN.php +++ b/Layout/default/WarehouseShippingNote/PDF_MAIN.php @@ -148,5 +148,9 @@ TODO: enable option for showing prices +
+ Die Ware bleibt bis zur vollständigen Bezahlung Eigentum der XINON GmbH. +
+ \ No newline at end of file diff --git a/application/WarehouseShippingNote/WarehouseShippingNoteController.php b/application/WarehouseShippingNote/WarehouseShippingNoteController.php index 550292a04..d5a0d9eaf 100644 --- a/application/WarehouseShippingNote/WarehouseShippingNoteController.php +++ b/application/WarehouseShippingNote/WarehouseShippingNoteController.php @@ -498,4 +498,4 @@ class WarehouseShippingNoteController extends TTCrud { self::returnJson(['success' => true, 'distance' => $roundedDistanceKm]); } -} +} \ No newline at end of file diff --git a/application/WarehouseShippingNote/WarehouseShippingNoteModel.php b/application/WarehouseShippingNote/WarehouseShippingNoteModel.php index 374fa7046..20d989cf1 100644 --- a/application/WarehouseShippingNote/WarehouseShippingNoteModel.php +++ b/application/WarehouseShippingNote/WarehouseShippingNoteModel.php @@ -9,7 +9,7 @@ class WarehouseShippingNoteModel extends TTCrudBaseModel { public string $deliveryAddressCity; public string $deliveryAddressEMail; public string $note; - public string $status; // 'new'|'accepted'|'invoiced' + public string $status; // 'new'|'in_progress'|'accepted'|'invoiced' TODO: add to enum / migration public string $positions; public string $textElements; public string $hoursEntries; diff --git a/db/migrations/20241121100000_warehouse_modify_3.php b/db/migrations/20241121100000_warehouse_modify_3.php new file mode 100644 index 000000000..4a30a6d06 --- /dev/null +++ b/db/migrations/20241121100000_warehouse_modify_3.php @@ -0,0 +1,26 @@ +getEnvironment() == "thetool") { + $WarehouseShippingNote = $this->table("WarehouseShippingNote", ["signed" => true]); + $WarehouseShippingNote->changeColumn("status", "enum", ["values" => ["new", "accepted", "invoiced", "in_progress"], "null" => false]); + $WarehouseShippingNote->save(); + } + + if ($this->getEnvironment() == "addressdb") { + + } + } + + public function down(): void { + if ($this->getEnvironment() == "thetool") { + $WarehouseShippingNote = $this->table("WarehouseShippingNote"); + $WarehouseShippingNote->changeColumn("status", "enum", ["values" => ["new", "accepted", "invoiced"], "null" => false]); + $WarehouseShippingNote->save(); + } + } +} diff --git a/lib/Helper/Helper.php b/lib/Helper/Helper.php index 857ad5268..0613c5112 100644 --- a/lib/Helper/Helper.php +++ b/lib/Helper/Helper.php @@ -28,6 +28,10 @@ class Helper { } else if (!empty($filterValue)) { if ($exactMatch) { $sql .= " AND `$columnName` = '" . $filterValue . "'"; + } else if ($filterValue[0] === "%") { + $sql .= " AND `$columnName` LIKE '" . $filterValue . "'"; + } else if ($filterValue[strlen($filterValue) - 1] === "%") { + $sql .= " AND `$columnName` LIKE '" . $filterValue . "'"; } else { $filterItems = explode(" ", $filterValue); foreach ($filterItems as $item) { diff --git a/lib/TTCrud/TTCrud.php b/lib/TTCrud/TTCrud.php index 0ea83b6a2..2c9ee22c4 100644 --- a/lib/TTCrud/TTCrud.php +++ b/lib/TTCrud/TTCrud.php @@ -124,6 +124,10 @@ class TTCrud extends mfBaseController { $page = $this->postData['pagination']['page'] ?? 1; $perPage = $this->postData['pagination']['per_page'] ?? 10; + if ($order['key'] === null && isset($this->defaultOrder)) { + $order = $this->defaultOrder; + } + $rows = $this->model::getAll($filter, $perPage, ($page - 1) * $perPage, $order); $filteredAvailable = $this->model::count($filter); $totalRows = $this->model::count(); @@ -240,11 +244,19 @@ class TTCrud extends mfBaseController { if (strlen($searchedID) > 0) { $filter = ['id' => $searchedID]; + $data = $this->model::getAll($filter, 10); } else { - $filter = [$textKey => $this->request->q]; + $filter = [$textKey => $this->request->q . '%']; + $data = $this->model::getAll($filter, 10); + if (count($data) < 11) { + $filter = [$textKey => $this->request->q]; + $lazyData = $this->model::getAll($filter, 10); + $data = array_merge($data, $lazyData); + $data = array_unique($data, SORT_REGULAR); + $data = array_slice($data, 0, 10); + } } - $data = $this->model::getAll($filter, 10); self::returnJson(array_map(function ($item) use ($textKey) { return ['value' => $item->id, 'text' => $item->$textKey]; diff --git a/public/js/pages/WarehouseArticle/WarehouseArticle.js b/public/js/pages/WarehouseArticle/WarehouseArticle.js index cf7c9d29c..dc1735f2c 100644 --- a/public/js/pages/WarehouseArticle/WarehouseArticle.js +++ b/public/js/pages/WarehouseArticle/WarehouseArticle.js @@ -246,6 +246,7 @@ Vue.component('warehouse-article-price-modal', { }) +// noinspection EqualityComparisonWithCoercionJS Vue.component('warehouse-article', { //language=Vue template: ` @@ -261,7 +262,7 @@ Vue.component('warehouse-article', { diff --git a/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js b/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js index 09d95b9b0..98ad20792 100644 --- a/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js +++ b/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js @@ -57,7 +57,7 @@ Vue.component('warehouse-shipping-note-modal-hours-entry', { - +
@@ -87,6 +87,10 @@ Vue.component('warehouse-shipping-note-modal-hours-entry', { this.updateCarId().then(); }, async updateKilometerCount() { + if (!this.carId) { + this.kilometerCount = ''; + return; + } const delAddr = this.$parent.$parent.$parent.delAddrLine + ' ' + this.$parent.$parent.$parent.delAddrCity + @@ -122,6 +126,8 @@ Vue.component('warehouse-shipping-note-modal-hours-entry', { if (!this.kilometerCount) this.updateKilometerCount().then(); this.$parent.$parent.$parent.$watch('delAddrLine', this.updateKilometerCount); + this.$watch('carId', this.updateKilometerCount); + } }) @@ -429,6 +435,7 @@ Vue.component('warehouse-shipping-note-modal-positions', { }) +// noinspection EqualityComparisonWithCoercionJS Vue.component('warehouse-shipping-note-modal', { props: { id: {type: [String, Number], required: true}, @@ -464,10 +471,12 @@ Vue.component('warehouse-shipping-note-modal', { :del-addr-e-mail.sync="delAddrEMail"/> -
-
-

Textelemente

- +
+
@@ -484,14 +493,21 @@ Vue.component('warehouse-shipping-note-modal', {
-
Bitte füllen Sie die Rechnungs- und Lieferadresse aus
+
Bitte füllen Sie die Rechnungs- und Lieferadresse aus
`, @@ -559,7 +575,8 @@ Vue.component('warehouse-shipping-note-modal', { return this.id === 'create' ? 'Lieferschein erstellen' : `Lieferschein #${this.id} bearbeiten`; }, delAddrFilled() { - return !this.delAddrName || !this.delAddrLine || !this.delAddrPLZ || !this.delAddrCity; + if (this.id !== 'create') return true; + return !!this.delAddrName && !!this.delAddrLine && !!this.delAddrPLZ && !!this.delAddrCity; } } @@ -576,14 +593,14 @@ Vue.component('warehouse-shipping-note-modal-address', { }, data() { return { - window: window, - addressModes: [{text: 'Wie Rechnungsadresse', value: 'billing'}, - {text: 'Bestehende Lieferadresse', value: 'existing'}, - {text: 'Andere Lieferadresse', value: 'new'}], - addressMode: 'existing', - addresses: [], - fetchedBillAddr: null, - selectedAddr: '', + window: window, + addressModes: [{text: 'Wie Rechnungsadresse', value: 'billing'}, + {text: 'Bestehende Lieferadresse', value: 'existing'}, + {text: 'Andere Lieferadresse', value: 'new'}], + addressMode: 'existing', + addresses: [], + fetchedBillAddr: null, + selectedAddr: '', newAddrGeoLatLon: '', } }, @@ -599,31 +616,48 @@ Vue.component('warehouse-shipping-note-modal-address', { `, watch: { - billAddrId: {handler: 'updateBillingMode', immediate: false}, - addressMode: {handler: 'fetchDeliveryAddresses', immediate: false}, - selectedAddr: {handler: 'setSelectedAddrValues', immediate: false}, + billAddrId: {handler: 'updateBillingMode', immediate: false}, + addressMode: {handler: 'fetchDeliveryAddresses', immediate: false}, + selectedAddr: {handler: 'setSelectedAddrValues', immediate: false}, newAddrGeoLatLon: {handler: 'fetchGeoAddress', immediate: false}, }, methods: { async fetchGeoAddress() { - if (!this.newAddrGeoLatLon) return; + if (!this.newAddrGeoLatLon) { + this.$emit('update:delAddrLine', ''); + this.$emit('update:delAddrPLZ', ''); + this.$emit('update:delAddrCity', ''); + return; + } const [lat, lon] = this.newAddrGeoLatLon.split(','); const response = await axios.get(window.TT_CONFIG["BASE_PATH"] + '/WarehouseShippingNote/geoReverse?lat=' + lat + '&lon=' + lon); if (response.data.address.road) { - this.$emit('update:delAddrLine', `${response.data.address.road}${response.data.address.house_number ? ' ' + response.data.address.house_number : ''}`); - } else { - this.$emit('update:delAddrLine', `${response.data.address.village}${response.data.address.house_number ? ' ' + response.data.address.house_number : ''}`); + this.$emit('update:delAddrLine', + `${response.data.address.road}${response.data.address.house_number ? ' ' + response.data.address.house_number : ''}`); + } else if(response.data.address.village) { + this.$emit('update:delAddrLine', + `${response.data.address.village}${response.data.address.house_number ? ' ' + response.data.address.house_number : ''}`); + } else if(response.data.address.hamlet) { + this.$emit('update:delAddrLine', + `${response.data.address.hamlet}${response.data.address.house_number ? ' ' + response.data.address.house_number : ''}`); + } else if(response.data.address.residential) { + this.$emit('update:delAddrLine', + `${response.data.address.residential}${response.data.address.house_number ? ' ' + response.data.address.house_number : ''}`); + } else if(response.data.address.city) { + this.$emit('update:delAddrLine', + `${response.data.address.city}${response.data.address.house_number ? ' ' + response.data.address.house_number : ''}`); } this.$emit('update:delAddrPLZ', response.data.address.postcode);