feat: permettre la correction des soins antiparasitaires

This commit is contained in:
Alexandre NOEL 2026-09-15 22:15:59 +02:00
commit f20d7cc965
14 changed files with 233 additions and 33 deletions

View file

@ -17,6 +17,7 @@ final class DewormingController
}
$db = DB::pdo();
$animalId = (int) ($_POST['animal_id'] ?? 0);
$entryId = (int) ($_POST['entry_id'] ?? 0);
$date = trim((string) ($_POST['administered_on'] ?? ''));
$dewormer = (int) ($_POST['dewormer_id'] ?? 0);
if (!$animalId || !self::date($date)) {
@ -31,6 +32,15 @@ final class DewormingController
echo h(t('error.animal_not_found'));
return;
}
if ($entryId > 0) {
$s = $db->prepare('SELECT 1 FROM dewormings WHERE id=? AND animal_id=?');
$s->execute([$entryId, $animalId]);
if (!$s->fetchColumn()) {
http_response_code(404);
echo h(t('error.not_found'));
return;
}
}
if (isset($_POST['create_dewormer'])) {
$name = trim((string) ($_POST['new_dewormer_name'] ?? ''));
if ($name === '') {
@ -59,7 +69,7 @@ final class DewormingController
}
$ids = [$animalId];
$litterId = null;
if (isset($_POST['apply_litter'])) {
if ($entryId === 0 && isset($_POST['apply_litter'])) {
$s = $db->prepare(
'SELECT l.id FROM litters l LEFT JOIN litter_kittens lk ON lk.litter_id=l.id WHERE l.mother_id=? OR lk.animal_id=? ORDER BY l.id DESC LIMIT 1',
);
@ -85,8 +95,36 @@ final class DewormingController
'INSERT INTO dewormings(animal_id,dewormer_id,administered_on,dose_text,weight_kg,next_due_date,notes,source_litter_id,created_by) VALUES(?,?,?,?,?,?,?,?,?)',
);
$history = $db->prepare(
"INSERT INTO animal_history(animal_id,action,type,label,details,user_id) VALUES(?,'deworming','deworming','Vermifuge administré',?,?)",
"INSERT INTO animal_history(animal_id,action,type,label,details,user_id) VALUES(?,'deworming','deworming','Vermifuge / anti-puce administré',?,?)",
);
if ($entryId > 0) {
$s = $db->prepare('SELECT birth_date FROM animals WHERE id=?');
$s->execute([$animalId]);
$birthDate = $s->fetchColumn() ?: null;
$next = $manual ?: self::nextDue(is_string($birthDate) ? $birthDate : null, $date);
$db->prepare(
"UPDATE dewormings SET dewormer_id=?,administered_on=?,dose_text=?,weight_kg=?,next_due_date=?,notes=?,updated_at=datetime('now') WHERE id=? AND animal_id=?",
)->execute([
$dewormer ?: null,
$date,
trim((string) ($_POST['dose_text'] ?? '')) ?: null,
($_POST['weight_kg'] ?? '') !== '' ? (float) $_POST['weight_kg'] : null,
$next,
trim((string) ($_POST['notes'] ?? '')) ?: null,
$entryId,
$animalId,
]);
$db->prepare(
"INSERT INTO animal_history(animal_id,action,type,label,details,user_id) VALUES(?,'deworming_updated','deworming','Vermifuge / anti-puce corrigé',?,?)",
)->execute([
$animalId,
'Administration : ' . self::fr($date) . ($next ? ' · Prochaine échéance : ' . self::fr($next) : ''),
Auth::id(),
]);
$db->commit();
header('Location: /animal?id=' . $animalId . '#tab-med');
exit();
}
foreach ($ids as $id) {
$s = $db->prepare('SELECT name,birth_date FROM animals WHERE id=? AND deleted_at IS NULL');
$s->execute([$id]);
@ -117,7 +155,7 @@ final class DewormingController
(int) ($_POST['inventory_batch_id'] ?? 0),
$perAnimal * count($ids),
$animalId,
'Vermifuge du ' . $date . ($litterId ? ' · portée #' . $litterId : ''),
'Vermifuge / anti-puce du ' . $date . ($litterId ? ' · portée #' . $litterId : ''),
);
$db->commit();
header('Location: /animal?id=' . $animalId . '#tab-med');