From d09b0a75d42694431e1709a50e109b31968c5a8e Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Wed, 20 Aug 2025 14:24:02 +0200 Subject: [PATCH] added new features --- .../RMLWorkorderAdminController.php | 120 ++++++++++++++---- .../RMLWorkorderCompanyController.php | 1 + .../RMLWorkorderAdmin/RMLWorkorderAdmin.js | 34 ++++- .../RMLWorkorderCompany.js | 23 +++- 4 files changed, 146 insertions(+), 32 deletions(-) diff --git a/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php b/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php index a5ea1c0fb..adf46352f 100644 --- a/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php +++ b/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php @@ -19,6 +19,7 @@ class RMLWorkorderAdminController extends TTCrud ['value' => 'scheduled', 'text' => 'Terminiert', 'icon' => 'fas fa-calendar-check text-warning'], ['value' => 'correction_requested', 'text' => 'Korrektur angefordert', 'icon' => 'fas fa-exclamation-triangle text-danger'], ['value' => 'intervention_required', 'text' => 'Eingriff benötigt', 'icon' => 'fas fa-times-circle text-danger'], + ['value' => 'problem_solved', 'text' => 'Problem behoben', 'icon' => 'fas fa-check-circle text-success'], ['value' => 'documented', 'text' => 'Dokumentiert', 'icon' => 'fas fa-file-alt text-success'], ['value' => 'completed', 'text' => 'Abgeschlossen', 'icon' => 'fas fa-check-double text-secondary'], ]]], @@ -101,23 +102,6 @@ class RMLWorkorderAdminController extends TTCrud } } - protected function assignWorkorderAction() { - $post = json_decode(file_get_contents('php://input'), true); - if (empty($post['workorderId']) || empty($post['companyId'])) self::sendError("Required fields are missing."); - - $workorder = RMLWorkorderModel::get($post['workorderId']); - if (!$workorder) self::sendError("Workorder not found."); - - $workorder->companyId = $post['companyId']; - $workorder->status = 'assigned'; - $workorder->assignmentDate = time(); - $workorder->deadlineDate = $post['deadlineDate'] ?? strtotime('+6 weeks'); - - RMLWorkorderModel::update((array)$workorder); - - self::returnJson(['success' => true, 'message' => 'Auftrag erfolgreich zugewiesen.']); - } - protected function getDocumentationAction() { if(empty($this->request->workorderId)) self::sendError("Workorder ID missing."); @@ -137,20 +121,66 @@ class RMLWorkorderAdminController extends TTCrud self::returnJson(['docs' => $docs, 'journals' => $journals]); } + private function assignSingleWorkorder($workorderId, $companyId, $deadline, $userId) { + $workorder = RMLWorkorderModel::get($workorderId); + if (!$workorder) { + return false; + } + + $company = RMLWorkorderCompanyModel::get($companyId); + if (!$company) { + return false; + } + + $workorder->companyId = $companyId; + $workorder->status = 'assigned'; + $workorder->assignmentDate = time(); + $workorder->deadlineDate = $deadline; + RMLWorkorderModel::update((array)$workorder); + + RMLWorkorderJournalModel::create([ + 'workorderId' => $workorder->id, + 'text' => "Firma '{$company->name}' wurde zugewiesen.", + 'create' => time(), + 'createBy' => $userId, + ]); + + $preorder = new Preorder($workorder->preorderId); + if ($preorder) { + $preorder->status_id = 10; // Assuming 10 is the status for "assigned" + $preorder->edit_by = $this->user->id; + $preorder->save(); + } + + return true; + } + + protected function assignWorkorderAction() { + $post = json_decode(file_get_contents('php://input'), true); + if (empty($post['workorderId']) || empty($post['companyId'])) { + self::sendError("Erforderliche Felder fehlen."); + } + + $deadline = !empty($post['deadlineDate']) ? $post['deadlineDate'] : strtotime('+6 weeks'); + $success = $this->assignSingleWorkorder($post['workorderId'], $post['companyId'], $deadline, $this->user->id); + + if ($success) { + self::returnJson(['success' => true, 'message' => 'Auftrag erfolgreich zugewiesen.']); + } else { + self::sendError("Auftrag konnte nicht zugewiesen werden. Möglicherweise wurde er bereits bearbeitet oder existiert nicht."); + } + } + protected function massAssignWorkordersAction() { $post = json_decode(file_get_contents('php://input'), true); - if (empty($post['workorderIds']) || empty($post['companyId'])) self::sendError("Required fields are missing."); + if (empty($post['workorderIds']) || empty($post['companyId'])) { + self::sendError("Erforderliche Felder fehlen."); + } $deadline = strtotime($post['deadlineDate'] ?? '+6 weeks'); $count = 0; foreach ($post['workorderIds'] as $workorderId) { - $workorder = RMLWorkorderModel::get($workorderId); - if ($workorder && $workorder->status === 'new') { - $workorder->companyId = $post['companyId']; - $workorder->status = 'assigned'; - $workorder->assignmentDate = time(); - $workorder->deadlineDate = $deadline; - RMLWorkorderModel::update((array)$workorder); + if ($this->assignSingleWorkorder($workorderId, $post['companyId'], $deadline, $this->user->id)) { $count++; } } @@ -260,4 +290,44 @@ class RMLWorkorderAdminController extends TTCrud self::returnJson(['success' => true, 'message' => 'Dokumentation akzeptiert und Auftrag abgeschlossen.']); } + + protected function setToProblemSolvedAction() { +// const response = await axios.post(`${window.TT_CONFIG.BASE_PATH}/RMLWorkorderAdmin/setToProblemSolved`, { +// workorderId: row.id, +// text: text +// }); + + $post = json_decode(file_get_contents('php://input'), true); + + if (empty($post['workorderId']) || empty($post['text'])) { + self::sendError("Workorder ID und Text sind erforderlich."); + } + + $workorder = RMLWorkorderModel::get($post['workorderId']); + + if (!$workorder) { + self::sendError("Workorder nicht gefunden."); + } + + if ($workorder->status !== 'intervention_required') { + self::sendError("Der Auftrag muss den Status 'Eingriff benötigt' haben, um als Problem gelöst markiert zu werden."); + } + + $oldStatus = $workorder->status; + $workorder->status = 'problem_solved'; + RMLWorkorderModel::update((array)$workorder); + + $oldStatusText = $oldStatus === 'intervention_required' ? 'Eingriff benötigt' : $oldStatus; + $problem_solved = 'Problem gelöst'; + + RMLWorkorderJournalModel::create([ + 'workorderId' => $workorder->id, + 'text' => $post['text'], + 'statusChange' => "$oldStatusText -> $problem_solved", + 'create' => time(), + 'createBy' => $this->user->id, + ]); + + self::returnJson(['success' => true, 'message' => 'Auftrag als Problem gelöst markiert.']); + } } \ No newline at end of file diff --git a/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php b/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php index e5b8182da..65435b536 100644 --- a/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php +++ b/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php @@ -16,6 +16,7 @@ class RMLWorkorderCompanyController extends TTCrud ['value' => 'scheduled', 'text' => 'Terminiert', 'icon' => 'fas fa-calendar-check text-warning'], ['value' => 'correction_requested', 'text' => 'Korrektur angefordert', 'icon' => 'fas fa-exclamation-triangle text-danger'], ['value' => 'intervention_required', 'text' => 'Eingriff benötigt', 'icon' => 'fas fa-times-circle text-danger'], + ['value' => 'problem_solved', 'text' => 'Problem behoben', 'icon' => 'fas fa-check-circle text-success'], ['value' => 'documented', 'text' => 'Dokumentiert', 'icon' => 'fas fa-file-alt text-success'], ['value' => 'completed', 'text' => 'Abgeschlossen', 'icon' => 'fas fa-check-double text-secondary'], ]]], diff --git a/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js b/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js index 515f0224c..3e1e23aac 100644 --- a/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js +++ b/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js @@ -48,6 +48,14 @@ Vue.component('r-m-l-workorder-admin', { {{ getStatusColumn(row.status).text }} + +