/** * GET /api/admin/users/leads/followups?date=YYYY-MM-DD * Leads whose FollowUpDate is due: today (the given local date) or earlier (overdue), * active sales/vendor leads that are not Expired / Recycled. Dashboard "Wiedervorlagen" * card. Bounded ($top 60), oldest follow-up first. */ import { string } from 'alga-js' import refreshTokenHelper from '../../../../utils/refreshTokenHelper' import errorHandlingHelper from '../../../../utils/errorHandlingHelper' const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const q = getQuery(event) const today = /^\d{4}-\d{2}-\d{2}$/.test(String(q.date || '')) ? String(q.date) : new Date().toISOString().slice(0, 10) const filter = `FollowUpDate le '${today}' AND IsActive eq true AND (isSalesLead eq true OR isVendorLead eq true)` const res: any = await event.context.fetch( `models/ad_user?$filter=${string.urlEncode(filter)}&$orderby=${string.urlEncode('FollowUpDate asc')}&$top=60`, 'GET', token, null ) const records = (res?.records ?? []) .filter((r: any) => !['E', 'R'].includes(String(r?.LeadStatus?.id || ''))) .map((r: any) => { const due = String(r.FollowUpDate || '').slice(0, 10) const diff = Math.round((Date.parse(due) - Date.parse(today)) / 86400000) return { id: r.id, name: r.Name || '', companyname: r.companyname || '', phone: r.Phone || '', eMail: r.EMail || '', followUpDate: due, followUpNote: r.FollowUpNote || '', leadRating: Number(r.LeadRating) || 0, overdueDays: diff < 0 ? Math.abs(diff) : 0 } }) return { today, records, todayCount: records.filter((r: any) => r.overdueDays === 0).length, overdueCount: records.filter((r: any) => r.overdueDays > 0).length } } export default defineEventHandler(async (event) => { let firstError: any = null try { return await handleFunc(event) } catch (err: any) { firstError = err } try { return await handleFunc(event, await refreshTokenHelper(event)) } catch (error: any) { return errorHandlingHelper(firstError?.data ?? firstError, error?.data ?? error) } })