diff --git a/application/RMLWorkorder/RMLWorkorderModel.php b/application/RMLWorkorder/RMLWorkorderModel.php index 53e934eda..020d7cca5 100644 --- a/application/RMLWorkorder/RMLWorkorderModel.php +++ b/application/RMLWorkorder/RMLWorkorderModel.php @@ -77,6 +77,9 @@ class RMLWorkorderModel extends TTCrudBaseModel { if (!empty($filters['preorderInfo'])) { $searchColumns = "p.firstname|p.lastname|p.company|p.oaid|p.street|p.housenumber|p.zip|p.city|str.name|ort.name"; $sql .= Helper::generateFilterCondition($filters['preorderInfo'], $searchColumns); + } if (!empty($filters['rimo_fcp_name'])) { + $searchColumns = "hn.rimo_fcp_name"; + $sql .= Helper::generateFilterCondition($filters['rimo_fcp_name'], $searchColumns); } return "WHERE " . ltrim(trim($sql), 'AND'); @@ -89,8 +92,8 @@ class RMLWorkorderModel extends TTCrudBaseModel { $sql = " SELECT - w.id, w.status, w.deadlineDate, w.companyId, p.preordercampaign_id, - CONCAT_WS(' ', p.firstname, p.lastname) as customerName, + w.id, w.status, w.deadlineDate, w.companyId, p.preordercampaign_id, hn.rimo_fcp_name, + CONCAT_WS(' ', p.firstname, p.lastname) as customerName, p.ucode, p.company as customerCompany, p.oaid, c.name as companyName, str.name as street, hn.hausnummer, hn.stiege, we.bezeichner as apartment, plz.plz, ort.name as city FROM `$fronkDbName`.`RMLWorkorder` w @@ -167,6 +170,9 @@ class RMLWorkorderModel extends TTCrudBaseModel { if (!empty($filters['preorderInfo'])) { $searchColumns = "p.firstname|p.lastname|p.company|p.oaid|p.street|p.housenumber|p.zip|p.city|str.name|ort.name|p.phone|p.email"; $sql .= Helper::generateFilterCondition($filters['preorderInfo'], $searchColumns); + } if (!empty($filters['rimo_fcp_name'])) { + $searchColumns = "hn.rimo_fcp_name"; + $sql .= Helper::generateFilterCondition($filters['rimo_fcp_name'], $searchColumns); } return "WHERE " . $sql; @@ -180,7 +186,7 @@ class RMLWorkorderModel extends TTCrudBaseModel { $sql = " SELECT - w.id, w.status, w.deadlineDate, w.appointmentDate, + w.id, w.status, w.deadlineDate, w.appointmentDate, hn.rimo_fcp_name, CONCAT_WS(' ', p.firstname, p.lastname) as customerName, p.company as customerCompany, p.oaid, p.phone, p.email, str.name as street, hn.hausnummer, hn.stiege, we.bezeichner as apartment, plz.plz, ort.name as city diff --git a/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php b/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php index d60efe631..a905c3744 100644 --- a/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php +++ b/application/RMLWorkorderAdmin/RMLWorkorderAdminController.php @@ -8,10 +8,11 @@ class RMLWorkorderAdminController extends TTCrud protected array $permissionCheck = ['RMLAdmin']; protected array $columns = [ - ['key' => 'id', 'text' => 'Auftrag-Nr.', 'table' => ['sortable' => true]], - ['key' => 'preorderInfo', 'text' => 'Kunde / Projekt', 'modal' => false, 'table' => ['sortable' => false, 'filter' => 'search']], +// ['key' => 'id', 'text' => 'Auftrag-Nr.', 'table' => ['sortable' => true]], ['key' => 'preordercampaign_id', 'text' => 'Cluster', 'modal' => false, 'table' => ['filter' => 'select']], - ['key' => 'companyName', 'text' => 'Zuständige Firma', 'modal' => false, 'table' => ['filter' => 'search']], + ['key' => 'preorderInfo', 'text' => 'Kunde / Projekt', 'modal' => false, 'table' => ['sortable' => false]], + ['key' => 'rimo_fcp_name', 'text' => 'FCP', 'modal' => false, 'table' => ['sortable' => false]], + ['key' => 'companyName', 'text' => 'Zuständige Firma', 'modal' => false], ['key' => 'status', 'text' => 'Status', 'modal' => false, 'table' => ['filter' => 'iconSelect', 'filterOptions' => [ ['value' => 'new', 'text' => 'Neu', 'icon' => 'fas fa-star text-primary'], ['value' => 'assigned', 'text' => 'Zugewiesen', 'icon' => 'fas fa-user-check text-info'], @@ -63,23 +64,10 @@ class RMLWorkorderAdminController extends TTCrud $rows = array_map(function($workorder) { $row = (array)$workorder; - $anschlussadresse = "{$row['street']} {$row['hausnummer']}"; - if ($row['stiege']) $anschlussadresse .= "/{$row['stiege']}"; - if ($row['apartment']) $anschlussadresse .= " / WE: {$row['apartment']}"; - $anschlussadresse .= ", {$row['plz']} {$row['city']}"; - - $kunde = $row['customerCompany'] ?: $row['customerName']; - - $row['preorderInfo'] = "Kunde: {$kunde}" . - "Anschluss: {$anschlussadresse}" . - "OAID: {$row['oaid']}"; - $row['companyName'] ??= 'Nicht zugewiesen'; $row['deadlineDateFormatted'] = $row['deadlineDate'] ? date('d.m.Y', $row['deadlineDate']) : 'Keine Deadline'; $row['daysUntilDeadline'] = $row['deadlineDate'] ? ceil(($row['deadlineDate'] - time()) / (60 * 60 * 24)) : null; - unset($row['customerName'], $row['customerCompany'], $row['street'], $row['hausnummer'], $row['stiege'], $row['oaid'], $row['apartment'], $row['plz'], $row['city']); - return $row; }, $workorders); diff --git a/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php b/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php index deee5d3e8..7342952a0 100644 --- a/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php +++ b/application/RMLWorkorderCompany/RMLWorkorderCompanyController.php @@ -8,7 +8,8 @@ class RMLWorkorderCompanyController extends TTCrud protected array $columns = [ ['key' => 'id', 'text' => 'Auftrag-Nr.', 'table' => ['sortable' => true]], - ['key' => 'preorderInfo', 'text' => 'Kunde / Projekt', 'modal' => false, 'table' => ['sortable' => false, 'filter' => 'search']], + ['key' => 'preorderInfo', 'text' => 'Kunde / Projekt', 'modal' => false, 'table' => ['sortable' => false]], + ['key' => 'rimo_fcp_name', 'text' => 'FCP', 'modal' => false, 'table' => ['sortable' => false]], ['key' => 'status', 'text' => 'Status', 'modal' => false, 'table' => ['filter' => 'iconSelect', 'filterOptions' => [ ['value' => 'new', 'text' => 'Neu', 'icon' => 'fas fa-star text-primary'], ['value' => 'assigned', 'text' => 'Zugewiesen', 'icon' => 'fas fa-user-check text-info'], diff --git a/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.css b/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.css index dbd2f788f..5a01d28bc 100644 --- a/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.css +++ b/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.css @@ -8,6 +8,12 @@ background-color: #f8d7da !important; /* Balanced Red */ } +/* 🟠 High Priority: Deadline less than 2 weeks away */ +.table-hover .tt-rml-workorder-high:hover, +.tt-rml-workorder-high { + background-color: #ffd5a1 !important; /* Balanced Orange */ +} + /* 🟡 Medium: Deadline less than 3 weeks away */ .table-hover .tt-rml-workorder-medium:hover, .tt-rml-workorder-medium { diff --git a/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js b/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js index 2a04d5311..837c80506 100644 --- a/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js +++ b/public/js/pages/RMLWorkorderAdmin/RMLWorkorderAdmin.js @@ -22,7 +22,26 @@ Vue.component('r-m-l-workorder-admin', { :crud-config="crudConfig" > - + + + Kunde: {{ row.customerCompany || row.customerName }} + + + Anschluss: + {{ row.street }} {{ row.hausnummer }}/{{ row.stiege }} / WE: {{ row.apartment }}, {{ row.plz }} {{ row.city }} + + + OAID: {{ row.oaid }} + + + + + @@ -106,6 +125,7 @@ Vue.component('r-m-l-workorder-admin', { `, data() { return { + window, workordersToAssign: [], editingWorkorderId: null, companies: [], @@ -121,6 +141,10 @@ Vue.component('r-m-l-workorder-admin', { if (['completed', 'new'].includes(row.status) || !deadlineDate.isValid()) { return 'tt-rml-workorder-irrelevant'; } + // if status is correction_requested, return tt-rml-workorder-high + if (row.status === 'correction_requested') { + return 'tt-rml-workorder-high'; + } const daysLeft = deadlineDate.diff(moment(), 'days'); diff --git a/public/js/pages/RMLWorkorderCompany/RMLWorkorderAdmin.css b/public/js/pages/RMLWorkorderCompany/RMLWorkorderAdmin.css index ff603857e..91b69d6ca 100644 --- a/public/js/pages/RMLWorkorderCompany/RMLWorkorderAdmin.css +++ b/public/js/pages/RMLWorkorderCompany/RMLWorkorderAdmin.css @@ -27,4 +27,8 @@ } .tt-file-gallery-item.border.border-danger { border: 4px solid #f1556c!important; +} + +.RMLWorkorderCompany-table .modal-body { + overflow-y: hidden; } \ No newline at end of file diff --git a/public/plugins/vue/tt-components/tt-file-gallery.js b/public/plugins/vue/tt-components/tt-file-gallery.js index 019e6ead0..7b5c8941b 100644 --- a/public/plugins/vue/tt-components/tt-file-gallery.js +++ b/public/plugins/vue/tt-components/tt-file-gallery.js @@ -120,8 +120,6 @@ Vue.component('tt-file-gallery', { this.editingFile = { ...file }; // create a copy for editing }, cancelEdit(event) { - console.log('Edit cancelled'); - event?.stopPropagation(); this.editingFile = null; }, saveEdit(event) { @@ -174,14 +172,14 @@ Vue.component('tt-file-gallery', { {{ file.fileName }} - - + + - + diff --git a/public/plugins/vue/tt-components/tt-modal.js b/public/plugins/vue/tt-components/tt-modal.js index de8eaff7d..b37625c99 100644 --- a/public/plugins/vue/tt-components/tt-modal.js +++ b/public/plugins/vue/tt-components/tt-modal.js @@ -7,6 +7,7 @@ Vue.component('tt-modal', { save: {type: Boolean, default: true}, saveLoading: {type: Boolean, default: false}, saveText: {type: String, default: 'Speichern'}, + disableMinHeight: {type: Boolean, default: false}, }, watch: { show(newVal) { if (!newVal) { @@ -58,7 +59,7 @@ Vue.component('tt-modal', { @keydown.esc="$emit('update:show', false)" v-if="show"> - + {{title}} diff --git a/public/plugins/vue/tt-components/tt-table.js b/public/plugins/vue/tt-components/tt-table.js index ecfede3fe..8d811adcb 100644 --- a/public/plugins/vue/tt-components/tt-table.js +++ b/public/plugins/vue/tt-components/tt-table.js @@ -581,7 +581,6 @@ Vue.component('tt-table', { filters: { handler: function () { if (!this.isInitialised) return; - console.log('Filters changed:', this.filters); // go through filters and if there is a set value in filters and the filter of the column is select or autocomplete then parse the value to int for (const key in this.filters) {