fix(akquise): Zahl am Menuepunkt Archiv folgte der alten Regel

Die Liste zeigte die zurueckgefallene Bewerbung, der Zaehler am Menue nicht: er
filterte weiter auf "nie uebernommen". Genau der Fehler, den zwei Kopien
derselben Regel machen.

Fristen und Bedingungen stehen jetzt in server/src/acquisitionRules.js und
werden von der Liste, den Zaehlern, dem Aufraeumlauf und der Menuezahl
gemeinsam benutzt.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-08-18 15:54:50 +02:00
co-authored by Claude Opus 5
parent c380d05b42
commit c59115c728
3 changed files with 70 additions and 44 deletions
+13 -9
View File
@@ -2,6 +2,13 @@ import express from 'express';
import { pool } from '../db.js';
import { requireAuth } from '../middleware/auth.js';
import { Match } from '../scanner/models/index.js';
import {
ARCHIVE_AFTER_DAYS,
DELETE_AFTER_DAYS,
IN_ARCHIVE,
IS_OPEN,
NOT_DUE,
} from '../acquisitionRules.js';
const router = express.Router();
router.use(requireAuth);
@@ -19,24 +26,21 @@ router.use(requireAuth);
* ohne Zahl ist besser als ein Menue mit Fehlermeldung.
*/
/** Grenze zwischen Eingang und Archiv der Akquise - wie in routes/acquisitions.js. */
const ACQUISITION_ARCHIVE_AFTER_DAYS = 14;
const ACQUISITION_DELETE_AFTER_DAYS = 90;
// GET /api/badges
router.get('/', async (req, res, next) => {
try {
const [[counts]] = await pool.query(
`SELECT
(SELECT COUNT(*) FROM crm_acquisitions
WHERE converted_at IS NULL
AND found_at < DATE_SUB(CURDATE(), INTERVAL ? DAY)
AND found_at >= DATE_SUB(CURDATE(), INTERVAL ? DAY)) AS acquisition_archive,
/* Dieselbe Regel wie die Liste - sie steht in acquisitionRules.js,
damit Zahl und Liste nicht auseinanderlaufen. */
(SELECT COUNT(*) FROM crm_acquisitions a
LEFT JOIN crm_opportunities opp ON opp.id = a.opportunity_id
WHERE ${IS_OPEN} AND ${IN_ARCHIVE} AND ${NOT_DUE}) AS acquisition_archive,
(SELECT COUNT(*) FROM crm_opportunities
WHERE deleted_at IS NOT NULL) AS opportunity_trash,
(SELECT COUNT(*) FROM crm_mail_messages
WHERE crm_deleted_at IS NOT NULL AND crm_purged = 0) AS mail_trash`,
[ACQUISITION_ARCHIVE_AFTER_DAYS, ACQUISITION_DELETE_AFTER_DAYS]
[ARCHIVE_AFTER_DAYS, DELETE_AFTER_DAYS]
);
let scannerRejected = null;