From 22031ffb23ae6de1dc7cfc2cbb6f08452452e72d Mon Sep 17 00:00:00 2001 From: Luca Haid Date: Mon, 8 Sep 2025 08:24:44 +0000 Subject: [PATCH] added oaid/fcp filter --- .../default/VueViews/WorkorderCompanyPWA.php | 105 +++++++++++++++--- 1 file changed, 90 insertions(+), 15 deletions(-) diff --git a/Layout/default/VueViews/WorkorderCompanyPWA.php b/Layout/default/VueViews/WorkorderCompanyPWA.php index 888411b59..b21111438 100644 --- a/Layout/default/VueViews/WorkorderCompanyPWA.php +++ b/Layout/default/VueViews/WorkorderCompanyPWA.php @@ -5,6 +5,7 @@ + Workorders @@ -91,27 +92,51 @@ const missingTasksPopover = reactive({ show: false, tasks: [] }); const installModal = reactive({ show: false }); const isStandalone = ref(false); + const selectedFcp = ref('all'); + const isFcpSelectOpen = ref(false); const API_BASE_URL = window.TT_CONFIG.BASE_PATH || '/WorkorderCompany'; const api = axios.create({ baseURL: API_BASE_URL }); // --- COMPUTED --- + const fcpOptions = computed(() => { + if (!workorders.value || workorders.value.length === 0) { + return [{ value: 'all', text: 'Alle FCPs' }]; + } + const fcps = [...new Set(workorders.value.map(wo => wo.rimo_fcp_name).filter(Boolean))].sort(); + const options = fcps.map(fcp => ({ value: fcp, text: fcp })); + return [{ value: 'all', text: 'Alle FCPs' }, ...options]; + }); + + const selectedFcpText = computed(() => { + const selectedOption = fcpOptions.value.find(opt => opt.value === selectedFcp.value); + return selectedOption ? selectedOption.text : 'Alle FCPs'; + }); + const filteredWorkorders = computed(() => { - let filtered = workorders.value.sort((a,b) => (a.deadlineDate || 0) - (b.deadlineDate || 0)); + let filtered = workorders.value; + + if (selectedFcp.value !== 'all') { + filtered = filtered.filter(wo => wo.rimo_fcp_name === selectedFcp.value); + } + if (searchTerm.value.length > 2) { const lowerSearch = searchTerm.value.toLowerCase(); - return filtered.filter(wo => + filtered = filtered.filter(wo => wo.id.toString().includes(lowerSearch) || (wo.customerName && wo.customerName.toLowerCase().includes(lowerSearch)) || (wo.street && wo.street.toLowerCase().includes(lowerSearch)) || (wo.city && wo.city.toLowerCase().includes(lowerSearch)) || - (wo.oaid && wo.oaid.toLowerCase().includes(lowerSearch)) + (wo.oaid && wo.oaid.toLowerCase().includes(lowerSearch)) || + (wo.rimo_fcp_name && wo.rimo_fcp_name.toLowerCase().includes(lowerSearch)) ); } - return filtered; + + return filtered.sort((a,b) => (a.deadlineDate || 0) - (b.deadlineDate || 0)); }); + const googleMapsLink = computed(() => { if (!selectedWorkorder.value) return '#'; const { street, hausnummer, plz, city } = selectedWorkorder.value; @@ -120,7 +145,6 @@ }); const checklist = computed(() => { - // Correctly use documentationTypes for the main checklist if (!tenantConfig.value?.documentationTypes || !Array.isArray(tenantConfig.value.documentationTypes)) return []; return tenantConfig.value.documentationTypes.map(reqType => { const isCompleted = documentation.docs.some(doc => doc.documentType === reqType.value); @@ -215,6 +239,8 @@ try { await api.post('/updateAdditionalInfo', { workorderId: selectedWorkorder.value.id, additionalInfo: newInfo }); selectedWorkorder.value.additionalInfo = newInfo; + const woInList = workorders.value.find(w => w.id === selectedWorkorder.value.id); + if(woInList) woInList.additionalInfo = newInfo; await fetchDetails(selectedWorkorder.value.id); // to refresh journal } catch(e) { console.error("Failed to save info", e); } finally { isEditingInfo.value = false; } @@ -264,12 +290,11 @@ const submitProblem = async () => { if (problemModal.selectedInterventions.length === 0) return; let journalParts = []; - // Sort to maintain a consistent order const sortedInterventions = [...problemModal.selectedInterventions].sort((a, b) => a.value.localeCompare(b.value)); for (const type of sortedInterventions) { let text = type.text; - if (text.includes('X')) { // Check for 'X' literally, not '[X]' + if (text.includes('X')) { const detail = problemModal.details[type.value] || ''; if (!detail) { alert(`Bitte geben Sie Details für "${type.text}" an.`); @@ -312,6 +337,11 @@ } catch(e) { console.error("Failed to complete workorder", e); } }; + const selectFcp = (fcpValue) => { + selectedFcp.value = fcpValue; + isFcpSelectOpen.value = false; + }; + onMounted(() => { fetchWorkorders(); @@ -322,14 +352,15 @@ isLoading, filteredWorkorders, searchTerm, isDetailsPanelOpen, selectedWorkorder, documentation, tenantConfig, tempAdditionalInfo, isEditingInfo, newJournalEntry, uploadModal, problemModal, isUploading, isChecklistComplete, checklist, fullscreenViewer, missingTasksPopover, translatedDocs, filteredJournals, installModal, isStandalone, + selectedFcp, isFcpSelectOpen, fcpOptions, selectedFcpText, fetchWorkorders, fetchDetails, openDetails, closeDetails, getStatusInfo, formatDate, googleMapsLink, startEditInfo, saveAdditionalInfo, - handleFileSelect, executeUpload, addJournalEntry, submitProblem, handleCompleteClick + handleFileSelect, executeUpload, addJournalEntry, submitProblem, handleCompleteClick, selectFcp }; }, template: `
-
+
@@ -338,7 +369,7 @@ Logo
-
+
+ + +

Lade Aufträge...

-

Keine Aufträge.

+

Keine Aufträge gefunden.

-

{{ wo.customerName || 'N/A' }}

+

#{{ wo.id }} | {{ wo.customerName || 'N/A' }}

{{ wo.street }} {{ wo.hausnummer }}, {{ wo.plz }} {{ wo.city }}

-

ID: {{ wo.id }}

+
+ FCP: {{ wo.rimo_fcp_name || 'N/A' }}
+ OAID: {{ wo.oaid || 'N/A' }} +
{{ getStatusInfo(wo.status).text }} @@ -388,6 +430,16 @@ {{ selectedWorkorder.street }} {{ selectedWorkorder.hausnummer }}, {{ selectedWorkorder.plz }} {{ selectedWorkorder.city }} +
+
+

OAID

+

{{ selectedWorkorder.oaid || 'N/A' }}

+
+
+

FCP

+

{{ selectedWorkorder.rimo_fcp_name || 'N/A' }}

+
+
+ + +
+
+
+

FCP auswählen

+ +
+
    +
  • + {{ option.text }} + + + +
  • +
+
+
+
+ +

Dokumenttyp wählen

@@ -576,4 +651,4 @@ - \ No newline at end of file +