Files
Webklar-Kundenbereich/server/services/customerActivity.js
T

65 lines
2.3 KiB
JavaScript

import { config } from '../config.js'
import { listDocuments, Query } from './appwriteAdmin.js'
import { worksheetMinutes } from './worksheetMinutes.js'
/**
* Tickets + zugehoerige Worksheets eines Kunden ("was wurde gemacht").
* excludeTypes: Ticket-Typen, die der Kunde nicht sehen soll (z. B. Akquise).
*/
export async function getCustomerActivity(customerId, { ticketLimit = 25, excludeTypes = [] } = {}) {
if (!customerId) return []
let workorders = await listDocuments(config.collections.workorders, [
Query.equal('customerId', customerId),
Query.orderDesc('$createdAt'),
Query.limit(ticketLimit),
])
if (excludeTypes.length) {
const blocked = new Set(excludeTypes.map((t) => t.toLowerCase()))
workorders = workorders.filter((w) => !blocked.has(String(w.type || '').toLowerCase()))
}
const ids = workorders.map((w) => w.$id)
let worksheets = []
if (ids.length) {
worksheets = await listDocuments(config.collections.worksheets, [
Query.equal('workorderId', ids),
Query.orderDesc('$createdAt'),
Query.limit(300),
]).catch(() => [])
}
const sheetsByWorkorder = {}
for (const ws of worksheets) {
// Git-Push-Eintraege dem Kunden sofort zeigen, sonstige reine Kommentare nicht
if (ws.isComment && ws.serviceType !== 'GIT') continue
const list = (sheetsByWorkorder[ws.workorderId] ||= [])
list.push({
wsid: ws.wsid || '',
employeeName: ws.employeeName || ws.employeeShort || '',
serviceType: ws.serviceType || '',
newStatus: ws.newStatus || '',
totalTime: ws.totalTime || '',
// Unterstuetzung (WOMS): Rohliste fuer customerWorkEntries, Summe fuer die Admin-Zeile
supporters: ws.supporters || '',
supportMinutes: worksheetMinutes(ws) - (Number(ws.totalTime) || 0),
date: ws.endDate || ws.startDate || '',
details: ws.details || '',
isGit: ws.serviceType === 'GIT',
pending: ws.serviceType === 'GIT' && !ws.startTime,
createdAt: ws.createdAt || ws.$createdAt || '',
})
}
return workorders.map((w) => ({
id: w.$id,
woid: w.woid || '',
topic: w.topic || w.title || '',
status: w.status || '',
type: w.type || '',
createdAt: w.createdAt || w.$createdAt || '',
worksheets: (sheetsByWorkorder[w.$id] || []).slice(0, 20),
}))
}