From 5e5feb3ce6dbfd895f282bd1fb53f9ccb4c39aa7 Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Mon, 9 Dec 2024 13:14:44 +0100 Subject: [PATCH] changed shipping note --- .../WarehouseShippingNote/PDF_MAIN.php | 6 +- .../WarehouseShippingNoteController.php | 59 +++++++++++++++---- .../20241209130000_warehouse_modify_5.php | 33 +++++++++++ .../WarehouseShippingNote.css | 4 ++ .../WarehouseShippingNoteModal.js | 22 +++++-- 5 files changed, 105 insertions(+), 19 deletions(-) create mode 100644 db/migrations/20241209130000_warehouse_modify_5.php diff --git a/Layout/default/WarehouseShippingNote/PDF_MAIN.php b/Layout/default/WarehouseShippingNote/PDF_MAIN.php index 4615b4861..6db5cd503 100644 --- a/Layout/default/WarehouseShippingNote/PDF_MAIN.php +++ b/Layout/default/WarehouseShippingNote/PDF_MAIN.php @@ -101,7 +101,7 @@ TODO: enable option for showing prices Position Menge Einheit - Artikel + Artikel Preis @@ -112,7 +112,7 @@ TODO: enable option for showing prices - + € @@ -123,7 +123,7 @@ TODO: enable option for showing prices - + diff --git a/application/WarehouseShippingNote/WarehouseShippingNoteController.php b/application/WarehouseShippingNote/WarehouseShippingNoteController.php index 592826bf8..abe8beadb 100644 --- a/application/WarehouseShippingNote/WarehouseShippingNoteController.php +++ b/application/WarehouseShippingNote/WarehouseShippingNoteController.php @@ -13,7 +13,7 @@ class WarehouseShippingNoteController extends TTCrud { ['key' => 'deliveryAddressPLZ', 'text' => 'L.-Adr. PLZ', 'required' => true], ['key' => 'deliveryAddressEMail', 'text' => 'L.-Adr. EMail', 'required' => false, 'table' => false], ['key' => 'note', 'text' => 'Art der Arbeit', 'required' => true, 'table' => false], - ['key' => 'status', 'text' => 'Status', 'required' => true, 'table' => ['filter' => 'select'], 'modal' => ['type' => 'select', 'items' => [['value' => 'new', 'text' => 'Neu'], ['value' => 'inProgress', 'text' => 'In Bearbeitung'], ['value' => 'accepted', 'text' => 'Akzeptiert'], ['value' => 'invoiced', 'text' => 'In Rechnung gestellt'],]]], + ['key' => 'status', 'text' => 'Status', 'required' => true, 'table' => ['filter' => 'select'], 'modal' => ['type' => 'select', 'items' => [['value' => 'new', 'text' => 'Neu'], ['value' => 'in_progress', 'text' => 'In Bearbeitung'], ['value' => 'accepted', 'text' => 'Akzeptiert'], ['value' => 'invoiced', 'text' => 'In Rechnung gestellt'],]]], ['key' => 'positions', 'text' => 'Positionen', 'required' => true, 'table' => false, 'modal' => false], ['key' => 'create', 'text' => 'Erstellt', 'required' => false, 'modal' => false, 'table' => ['filter' => 'date']], ['key' => 'createBy', 'text' => 'Erstellt von', 'required' => true, 'type' => 'autocomplete', 'table' => ['class' => 'text-nowrap', 'filter' => 'select'], 'modal' => ['items' => [], 'type' => 'select',]], @@ -247,18 +247,20 @@ class WarehouseShippingNoteController extends TTCrud { $articleTitle = "Arbeitsstunden (100% Zuschlag)"; } - $positions[] = [ - 'articleTitle' => $articleTitle, - 'articleDescription' => "Datum: ". date("d.m.Y", strtotime($hoursEntry['date'])) . " | Mitarbeiter: " . UserModel::getOne($hoursEntry['userId'])->name, - 'articleUnit' => 'Std.', - 'amount' => $hoursEntry['hourCount'], - 'price' => $hoursEntry['hourlyPrice'] * $hoursEntry['hourCount'] ?? 0, - ]; + if (intval($hoursEntry['hourCount']) > 0) { + $positions[] = [ + 'articleTitle' => $articleTitle, + 'articleDescription' => "Datum: ". date("d.m.Y", strtotime($hoursEntry['date'])) . " | Mitarbeiter: " . UserModel::getOne($hoursEntry['userId'])->name, + 'articleUnit' => 'Std.', + 'amount' => $hoursEntry['hourCount'], + 'price' => $hoursEntry['hourlyPrice'] * $hoursEntry['hourCount'] ?? 0, + ]; + } if ($hoursEntry['carId']) { $positions[] = [ - 'articleTitle' => "Fahrkostenpauschale", - 'articleDescription' => "Fahrzeug: " . TimerecordingCarModel::getOne($hoursEntry['carId'])->number_plate, + 'articleTitle' => "Fahrkostenpauschale (hin und retour)", + 'articleDescription' => "Datum: ". date("d.m.Y", strtotime($hoursEntry['date'])) . " | Fahrzeug: " . TimerecordingCarModel::getOne($hoursEntry['carId'])->number_plate, 'articleUnit' => 'Km', 'amount' => $hoursEntry['kilometerCount'], 'price' => 1 * $hoursEntry['kilometerCount'] ?? 0, @@ -268,6 +270,21 @@ class WarehouseShippingNoteController extends TTCrud { } + usort($positions, function ($a, $b) { + $aHasMitarbeiter = str_contains($a['articleDescription'], 'Mitarbeiter'); + $bHasMitarbeiter = str_contains($b['articleDescription'], 'Mitarbeiter'); + $aHasFahrzeug = str_contains($a['articleDescription'], 'Fahrzeug'); + $bHasFahrzeug = str_contains($b['articleDescription'], 'Fahrzeug'); + + if ($aHasMitarbeiter && !$bHasMitarbeiter) return -1; + if (!$aHasMitarbeiter && $bHasMitarbeiter) return 1; + if ($aHasFahrzeug && !$bHasFahrzeug) return -1; + if (!$aHasFahrzeug && $bHasFahrzeug) return 1; + return 0; + }); + + + $textElements = []; // parse shippingNote.textElements ({"1":true,"2":true}) to array, fetch each text element and put content into array $shippingNoteTextElements = json_decode($shippingNote->textElements, true); @@ -356,6 +373,28 @@ class WarehouseShippingNoteController extends TTCrud { self::returnJson(array_values($out)); } + protected function changeStatusAction() { + ini_set('display_errors', 1); + ini_set('display_startup_errors', 1); + $json = json_decode(file_get_contents('php://input'), true); + $id = $json['id']; + $status = $json['status']; + if (strlen($id) < 1) { + http_response_code(500); + self::returnJson(['success' => false, 'message' => 'Lieferschein wurde nicht gefunden']); + } + + $shippingNote = (array) WarehouseShippingNoteModel::get($id); + if ($shippingNote['status'] === 'accepted' || $shippingNote['status'] === 'invoiced') { + http_response_code(500); + self::returnJson(['success' => false, 'message' => 'Status kann nicht geändert werden']); + } + + $shippingNote['status'] = $status; + WarehouseShippingNoteModel::update($shippingNote); + self::returnJson(['success' => true, 'message' => 'Status wurde geändert']); + } + //TODO: either move this to TimerecordingCarController or make it better protected function timerecordingCarAutoCompleteAction() { $timerecordingCars = array_map(function ($timerecordingCar) { diff --git a/db/migrations/20241209130000_warehouse_modify_5.php b/db/migrations/20241209130000_warehouse_modify_5.php new file mode 100644 index 000000000..cc5f9a9ba --- /dev/null +++ b/db/migrations/20241209130000_warehouse_modify_5.php @@ -0,0 +1,33 @@ +getEnvironment() == "thetool") { + $WarehouseHistory = $this->table("WarehouseHistory", ["signed" => true]); + $WarehouseHistory->changeColumn("old_value", "text", ["null" => true]); + $WarehouseHistory->changeColumn("new_value", "text", ["null" => true]); + $WarehouseHistory->save(); + + } + + if ($this->getEnvironment() == "addressdb") { + + } + } + + public function down(): void { + if ($this->getEnvironment() == "thetool") { + $WarehouseHistory = $this->table("WarehouseHistory", ["signed" => true]); + $WarehouseHistory->changeColumn("old_value", "string", ["null" => true, "limit" => 255]); + $WarehouseHistory->changeColumn("new_value", "string", ["null" => true, "limit" => 255]); + $WarehouseHistory->save(); + } + + if ($this->getEnvironment() == "addressdb") { + + } + } +} diff --git a/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css b/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css index ff8a58f38..4be936e76 100644 --- a/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css +++ b/public/js/pages/WarehouseShippingNote/WarehouseShippingNote.css @@ -21,6 +21,10 @@ grid-template-columns: 2fr 1fr 1fr 1fr 2fr 1fr 1fr; } +.warehouse-shipping-note-modal-hours-entry-container.hideHourlyPrice.hideKilometer { + grid-template-columns: 2fr 1fr 1fr 1fr 2fr 1fr; +} + @media (min-width: 992px) { .modal-lg, .modal-xl { /*max width either 90% or 1120px*/ diff --git a/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js b/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js index 81cd0a585..9e8f164b1 100644 --- a/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js +++ b/public/js/pages/WarehouseShippingNote/WarehouseShippingNoteModal.js @@ -52,14 +52,14 @@ Vue.component('warehouse-shipping-note-modal-hours-entry', { }, //language=Vue template: ` -
+
- +
@@ -168,7 +168,7 @@ Vue.component('warehouse-shipping-note-modal-hours-view', { {{ userNames[entry.userId] }} {{ window.moment(entry.date).format('DD.MM.YYYY') }} {{ entry.hourCount }} - {{ entry.kilometerCount }} + {{ entry.kilometerCount }} {{ entry.hourlyPrice }} @@ -500,13 +500,13 @@ Vue.component('warehouse-shipping-note-modal', {