🔎 SQL-Basis (UNION der berechneten Termine)
/* aus BESAMUNG → 16w/17w/22w/23w+buf */
SELECT z.schwein_id, z.id AS zucht_id, 'ansetzen' AS todo, DATE_ADD(z.datum, INTERVAL 16 WEEK) AS todo_date
FROM schwein_zucht z WHERE z.status='besamung'
AND DATE_ADD(z.datum, INTERVAL 16 WEEK) BETWEEN :s AND :e
UNION ALL
SELECT z.schwein_id, z.id, 'abferkeln', DATE_ADD(z.datum, INTERVAL 17 WEEK)
FROM schwein_zucht z WHERE z.status='besamung'
AND DATE_ADD(z.datum, INTERVAL 17 WEEK) BETWEEN :s AND :e
UNION ALL
SELECT z.schwein_id, z.id, 'absetzen', DATE_ADD(z.datum, INTERVAL 22 WEEK)
FROM schwein_zucht z WHERE z.status='besamung'
AND DATE_ADD(z.datum, INTERVAL 22 WEEK) BETWEEN :s AND :e
UNION ALL
SELECT z.schwein_id, z.id, 'wieder-besamen', DATE_ADD(DATE_ADD(z.datum, INTERVAL 23 WEEK), INTERVAL 0 DAY)
FROM schwein_zucht z WHERE z.status='besamung'
AND DATE_ADD(DATE_ADD(z.datum, INTERVAL 23 WEEK), INTERVAL 0 DAY) BETWEEN :s AND :e
/* aus ABFERKELN → -1w / +5w / +6w+buf */
UNION ALL
SELECT z.schwein_id, z.id, 'ansetzen', DATE_SUB(z.datum, INTERVAL 1 WEEK)
FROM schwein_zucht z WHERE z.status='abferkeln'
AND DATE_SUB(z.datum, INTERVAL 1 WEEK) BETWEEN :s AND :e
UNION ALL
SELECT z.schwein_id, z.id, 'absetzen', DATE_ADD(z.datum, INTERVAL 5 WEEK)
FROM schwein_zucht z WHERE z.status='abferkeln'
AND DATE_ADD(z.datum, INTERVAL 5 WEEK) BETWEEN :s AND :e
UNION ALL
SELECT z.schwein_id, z.id, 'wieder-besamen', DATE_ADD(DATE_ADD(z.datum, INTERVAL 6 WEEK), INTERVAL 0 DAY)
FROM schwein_zucht z WHERE z.status='abferkeln'
AND DATE_ADD(DATE_ADD(z.datum, INTERVAL 6 WEEK), INTERVAL 0 DAY) BETWEEN :s AND :e
/* aus ANSETZEN → +1w / +6w / +7w+buf */
UNION ALL
SELECT z.schwein_id, z.id, 'abferkeln', DATE_ADD(z.datum, INTERVAL 1 WEEK)
FROM schwein_zucht z WHERE z.status='ansetzen'
AND DATE_ADD(z.datum, INTERVAL 1 WEEK) BETWEEN :s AND :e
UNION ALL
SELECT z.schwein_id, z.id, 'absetzen', DATE_ADD(z.datum, INTERVAL 6 WEEK)
FROM schwein_zucht z WHERE z.status='ansetzen'
AND DATE_ADD(z.datum, INTERVAL 6 WEEK) BETWEEN :s AND :e
UNION ALL
SELECT z.schwein_id, z.id, 'wieder-besamen', DATE_ADD(DATE_ADD(z.datum, INTERVAL 7 WEEK), INTERVAL 0 DAY)
FROM schwein_zucht z WHERE z.status='ansetzen'
AND DATE_ADD(DATE_ADD(z.datum, INTERVAL 7 WEEK), INTERVAL 0 DAY) BETWEEN :s AND :e
/* aus ABSETZEN → +1w+buf */
UNION ALL
SELECT z.schwein_id, z.id, 'wieder-besamen', DATE_ADD(DATE_ADD(z.datum, INTERVAL 1 WEEK), INTERVAL 0 DAY)
FROM schwein_zucht z WHERE z.status='absetzen'
AND DATE_ADD(DATE_ADD(z.datum, INTERVAL 1 WEEK), INTERVAL 0 DAY) BETWEEN :s AND :e
/* Behandlung / sonst direkt */
UNION ALL
SELECT z.schwein_id, z.id, z.status, z.datum
FROM schwein_zucht z WHERE z.status IN ('behandlung','sonst')
AND z.datum BETWEEN :s AND :e
Hinweise: „Buffer“ = zusätzliche Tage bis zur (Wieder-)Besamung nach Absetzen. Einstellbar oben im Filter.