Publier Globinours 1.0.0-rc.3
This commit is contained in:
parent
ea8c24d622
commit
9a2b4068da
325 changed files with 38230 additions and 20 deletions
488
app/Views/animal_show.php
Normal file
488
app/Views/animal_show.php
Normal file
|
|
@ -0,0 +1,488 @@
|
|||
<?php
|
||||
/** @var array $animal */
|
||||
/** @var array $medical_notes */
|
||||
/** @var array $treatments */
|
||||
/** @var array $vaccinations */
|
||||
/** @var array $weights */
|
||||
/** @var array adoption */
|
||||
|
||||
require_once __DIR__ . '/../Services/IcadService.php';
|
||||
$isCat = SpeciesService::isCat((string)($animal['species'] ?? ''));
|
||||
include __DIR__ . '/animal_adoption.php';
|
||||
$canViewMedical = PermissionService::can('medical');
|
||||
$isArchived = !empty($animal['archived_at']);
|
||||
|
||||
$icadSvc = new IcadService(DB::pdo());
|
||||
|
||||
$cached = $icadSvc->getCachedByAnimal((int)$animal['id']);
|
||||
$stale = $icadSvc->isStale($cached, 86400);
|
||||
|
||||
// variable attendue par ta vue
|
||||
$icad = [
|
||||
'cached' => $cached,
|
||||
'stale' => $stale,
|
||||
];
|
||||
|
||||
$statusClass = [
|
||||
'refuge' => 'bg-blue-lt text-blue',
|
||||
'fa' => 'bg-cyan-lt text-cyan',
|
||||
'fa_permanente' => 'bg-indigo-lt text-indigo',
|
||||
'chat_libre' => 'bg-green-lt text-green',
|
||||
'reserve' => 'bg-purple-lt text-purple',
|
||||
'adopte' => 'bg-green-lt text-green',
|
||||
'fugue' => 'bg-orange-lt text-orange',
|
||||
'decede' => 'bg-dark-lt text-dark',
|
||||
'quarantaine' => 'bg-yellow-lt text-yellow',
|
||||
'soin' => 'bg-red-lt text-red',
|
||||
][$animal['status']] ?? 'bg-secondary-lt text-secondary';
|
||||
|
||||
$statusLabel = status_badge((string)($animal['status'] ?? ''))[1];
|
||||
|
||||
$historyStyles = [
|
||||
'create' => ['bg' => 'bg-green', 'icon' => 'plus'],
|
||||
'update' => ['bg' => 'bg-blue', 'icon' => 'edit'],
|
||||
'status' => ['bg' => 'bg-purple', 'icon' => 'refresh'],
|
||||
'medical' => ['bg' => 'bg-red', 'icon' => 'heart'],
|
||||
'vaccine' => ['bg' => 'bg-yellow', 'icon' => 'shield-check'],
|
||||
'deworming' => ['bg' => 'bg-lime', 'icon' => 'pill'],
|
||||
'treatment' => ['bg' => 'bg-orange', 'icon' => 'pill'],
|
||||
'care_round' => ['bg' => 'bg-red', 'icon' => 'alert-triangle'],
|
||||
'death' => ['bg' => 'bg-dark', 'icon' => 'rainbow'],
|
||||
'photo' => ['bg' => 'bg-teal', 'icon' => 'camera'],
|
||||
];
|
||||
|
||||
switch ($animal['sex']) {
|
||||
case 'M': $animal['sex'] = t('sex.male');
|
||||
$sex_color = '367EB3';
|
||||
break;
|
||||
case 'F': $animal['sex'] = t('sex.female');
|
||||
$sex_color = 'A736B3';
|
||||
break;
|
||||
default: $animal['sex'] = t('common.unknown');
|
||||
$sex_color = '36B362';
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<style>
|
||||
.animal-actions-menu form {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.animal-actions-menu .dropdown-item {
|
||||
width: 100%;
|
||||
min-height: 34px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: .45rem 1rem;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
color: var(--tblr-body-color, #1d273b) !important;
|
||||
background: transparent;
|
||||
font-family: inherit;
|
||||
font-size: .875rem;
|
||||
font-weight: 400;
|
||||
line-height: 1.4;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.animal-actions-menu .dropdown-item:hover,
|
||||
.animal-actions-menu .dropdown-item:focus {
|
||||
color: var(--tblr-body-color, #1d273b) !important;
|
||||
background: var(--tblr-dropdown-link-hover-bg, #f1f3f5);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
<div class="row row-cards">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<?php if ($isArchived): ?><div
|
||||
class="alert alert-important alert-secondary rounded-0 mb-0 d-flex flex-wrap align-items-center gap-2"
|
||||
role="status"><span>📦</span>
|
||||
<div><strong><?= h(t('animal.archived_record')) ?></strong>
|
||||
<div class="small">
|
||||
<?= h(t('animal.archived_help', ['date' => !empty($animal['archived_at']) ? t('animal.archived_on', ['date' => date('d/m/Y H:i', strtotime((string)$animal['archived_at']))]) : ''])) ?>
|
||||
</div>
|
||||
</div>
|
||||
</div><?php endif; ?>
|
||||
<?php
|
||||
$fivStatus = (string)(($animal['fiv_status'] ?? '') ?: ((int)($animal['fiv'] ?? 0) === 1 ? 'pos' : 'neg'));
|
||||
$felvStatus = (string)(($animal['felv_status'] ?? '') ?: ((int)($animal['felv'] ?? 0) === 1 ? 'pos' : 'neg'));
|
||||
$fivPos = $fivStatus === 'pos';
|
||||
$felvPos = $felvStatus === 'pos';
|
||||
$testStatusMeta = [
|
||||
'unknown' => [t('animals.test_unknown'), 'bg-secondary-lt'],
|
||||
'neg' => [t('animals.test_negative'), 'bg-green-lt'],
|
||||
'pos' => [t('animals.test_positive'), 'bg-red-lt'],
|
||||
'doubtful' => [t('animals.test_doubtful'), 'bg-yellow-lt'],
|
||||
];
|
||||
|
||||
$alertText = [];
|
||||
if ($fivPos) {
|
||||
$alertText[] = 'FIV+';
|
||||
}
|
||||
if ($felvPos) {
|
||||
$alertText[] = 'FeLV+';
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if ($fivPos || $felvPos): ?>
|
||||
<div class="alert alert-important alert-danger d-flex align-items-center mb-3" role="alert">
|
||||
<div class="me-3">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon alert-icon" width="24" height="24"
|
||||
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 9v4" />
|
||||
<path d="M12 17h.01" />
|
||||
<path
|
||||
d="M10.29 3.86l-7.1 12.14a2 2 0 0 0 1.71 3h14.2a2 2 0 0 0 1.71 -3l-7.1 -12.14a2 2 0 0 0 -3.42 0z" />
|
||||
</svg>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="fw-bold"><?= h(t('animal.health_alert', ['status' => implode(' / ', $alertText)])) ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="card-body d-flex align-items-center justify-content-between">
|
||||
<div class="d-flex align-items-center gap-3">
|
||||
<div class="text-center flex-shrink-0">
|
||||
<?php if (!empty($primary_photo)): ?>
|
||||
<img src="/media/animals/<?= (int)$animal['id'] ?>/<?= h($primary_photo) ?>"
|
||||
style="width:100px;height:100px;object-fit:cover;border-radius:12px" alt="">
|
||||
<?php else: ?>
|
||||
<div class="bg-muted-lt"
|
||||
style="width:100px;height:100px;border-radius:12px;display:flex;align-items:center;justify-content:center;">
|
||||
<span style="font-size:50px">🐾</span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="text-muted mt-1" style="font-size:.7rem"><?= h($animal['internal_code']) ?></div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 class="mb-0">
|
||||
<?= h($animal['name']) ?>
|
||||
<?php if ($lastWeight !== null): ?>
|
||||
<?php
|
||||
$arrow = '→';
|
||||
if ($prevWeight !== null) {
|
||||
if ((float)$lastWeight > (float)$prevWeight) {
|
||||
$arrow = '↑';
|
||||
} elseif ((float)$lastWeight < (float)$prevWeight) {
|
||||
$arrow = '↓';
|
||||
}
|
||||
}
|
||||
?>
|
||||
<span class="badge bg-indigo-lt ms-2"><?= number_format((float)$lastWeight, 2) ?> kg
|
||||
<?= $arrow ?></span>
|
||||
<?php endif; ?>
|
||||
</h3>
|
||||
|
||||
<div class="text-muted">
|
||||
<?= h(t('animal.species')) ?> :
|
||||
<strong><?= h(species_label($animal['species'] ?? '')) ?></strong>
|
||||
• <?= h(t('animal.sex')) ?> : <strong
|
||||
style="color:#<?php echo $sex_color; ?>;"><?= h($animal['sex']) ?></strong><br />
|
||||
<?= h(t('animal.breed')) ?> : <strong><?= h($animal['breed'] ?: '—') ?></strong>
|
||||
• <?= h(t('animal.coat')) ?> :
|
||||
<?php if (!empty($animal['color'])): ?>
|
||||
<span class="coat-swatch" style="<?= h(coat_swatch_style($animal['color'])) ?>"></span>
|
||||
<strong><?= h($animal['color']) ?></strong>
|
||||
<?php else: ?><strong>—</strong><?php endif; ?>
|
||||
• <?= h(t('animal.hair')) ?> : <strong><?= h(match ((string)($animal['hair_type'] ?? '')) {
|
||||
'court' => t('animal.hair_short'),
|
||||
'mi-long' => t('animal.hair_medium'),
|
||||
'long' => t('animal.hair_long'),
|
||||
'frise' => t('animal.hair_curly'),
|
||||
'sans-poil' => t('animal.hairless'),
|
||||
default => '—',
|
||||
}) ?></strong><br />
|
||||
<strong><?= h(match((string)($animal['identification_type'] ?? 'unknown')) {
|
||||
'microchip' => t('animal.microchip'),'tattoo' => t('animal.tattoo'),default => t('animal.identification_unknown')
|
||||
}) ?></strong><?= $animal['chip_id'] ? ' · ' . h($animal['chip_id']) : '' ?><?php if (!empty($animal['identification_date'])): ?>
|
||||
·
|
||||
<?= h(t('animal.placed_on', ['date' => date('d/m/Y', strtotime((string)$animal['identification_date']))])) ?><?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="text-muted">
|
||||
<?= h(t('animal.status')) ?> : <span class="badge <?= $statusClass ?>">
|
||||
<?= $statusLabel ?>
|
||||
</span>
|
||||
<?php if (in_array(($animal['status'] ?? ''), ['refuge','soin','quarantaine'], true)):$roomConfig = ShelterRoomService::byCode(true)[(string)($animal['refuge_room'] ?? '')] ?? null; ?>
|
||||
• <?= h(t('animal.room')) ?> : <span
|
||||
class="badge <?= $roomConfig ? '' : 'bg-secondary-lt' ?>"
|
||||
<?= $roomConfig ? 'style="color:' . h($roomConfig['color']) . ';background:color-mix(in srgb,' . h($roomConfig['color']) . ' 14%,transparent)"' : '' ?>><?= h($roomConfig['name'] ?? t('animal.assign')) ?></span>
|
||||
<?php endif; ?>
|
||||
<?php if (($animal['status'] ?? '') === 'chat_libre'): ?>
|
||||
• <?= h(t('animal.site')) ?> :
|
||||
<strong><?= h($animal['free_cat_site_name'] ?: ($animal['free_cat_city'] ?: t('animal.to_provide'))) ?></strong>
|
||||
<?php endif; ?>
|
||||
<?php if ($canViewMedical && $isCat): ?>
|
||||
• FIV:
|
||||
<?php [$fivLabel, $fivClass] = $testStatusMeta[$fivStatus] ?? $testStatusMeta['unknown']; ?>
|
||||
<span class="badge <?= $fivClass ?>"><?= h(strtoupper($fivLabel)) ?></span>
|
||||
|
||||
• FeLV:
|
||||
<?php [$felvLabel, $felvClass] = $testStatusMeta[$felvStatus] ?? $testStatusMeta['unknown']; ?>
|
||||
<span class="badge <?= $felvClass ?>"><?= h(strtoupper($felvLabel)) ?></span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php if (($animal['status'] ?? '') === 'chat_libre'): $trackingLabels = ['present' => t('animal.present_on_site'),'missing' => t('animal.missing'),'moved' => t('animal.moved'),'deceased' => t('status.decede')]; ?>
|
||||
<div class="card card-sm bg-green-lt border-green-lt mt-3">
|
||||
<div class="card-body py-3">
|
||||
<div class="d-flex flex-wrap align-items-center gap-2 mb-2"><strong>🌿
|
||||
<?= h(t('animal.free_cat_followup')) ?></strong><span
|
||||
class="badge bg-green text-white"><?= h($trackingLabels[$animal['free_cat_tracking_status'] ?? 'present'] ?? t('animal.present_on_site')) ?></span>
|
||||
</div>
|
||||
<div class="row g-2 small">
|
||||
<div class="col-md-4"><span
|
||||
class="text-muted"><?= h(t('animal.site_or_colony')) ?></span><br><strong><?= h($animal['free_cat_site_name'] ?: '—') ?></strong><?= !empty($animal['free_cat_city']) ? ' · ' . h($animal['free_cat_city']) : '' ?>
|
||||
</div>
|
||||
<div class="col-md-4"><span
|
||||
class="text-muted"><?= h(t('animal.caretaker')) ?></span><br><strong><?= h($freeCatCaretaker['name'] ?? '—') ?></strong>
|
||||
</div>
|
||||
<div class="col-md-4"><span
|
||||
class="text-muted"><?= h(t('animal.capture_release')) ?></span><br><?= !empty($animal['free_cat_captured_at']) ? h(date('d/m/Y', strtotime($animal['free_cat_captured_at']))) : '—' ?>
|
||||
→
|
||||
<?= !empty($animal['free_cat_released_at']) ? h(date('d/m/Y', strtotime($animal['free_cat_released_at']))) : '—' ?>
|
||||
</div><?php if (!empty($animal['free_cat_address'])): ?><div class="col-12"><span
|
||||
class="text-muted"><?= h(t('animal.internal_location')) ?></span><br><?= h($animal['free_cat_address']) ?>
|
||||
</div><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($canViewMedical): ?>
|
||||
<div class="mt-2 d-flex flex-wrap align-items-center gap-2">
|
||||
<?php $sterilizationState = $animal['sterilization_status'] ?? (!empty($animal['sterilized']) ? 'yes' : 'unknown');
|
||||
$sterilizationMeta = ['yes' => [t('animal.sterilized'),'bg-green-lt'],'no' => [t('animals.not_sterilized'),'bg-yellow-lt'],'unknown' => [t('animals.sterilization_unknown'),'bg-secondary-lt']];
|
||||
[$sterilizationLabel,$sterilizationClass] = $sterilizationMeta[$sterilizationState] ?? $sterilizationMeta['unknown']; ?>
|
||||
<span class="badge <?= h($sterilizationClass) ?>">
|
||||
<?= h($sterilizationLabel) ?>
|
||||
</span>
|
||||
<?php if ($isCat): ?><span class="text-muted small"><?= h(t('animal.adoption_fee_hint')) ?>
|
||||
<strong
|
||||
class="text-body"><?= $sterilizationState === 'yes' ? AppSettings::int('adoption_fee_sterilized') . ' €' : AppSettings::int('adoption_fee_unsterilized') . ' €' ?></strong></span><?php endif; ?>
|
||||
<?php if ($sterilizationState === 'yes' && (!empty($animal['sterilization_date']) || !empty($sterilizationContacts))): ?><span
|
||||
class="text-muted small"><?= !empty($animal['sterilization_date']) ? h(date('d/m/Y', strtotime((string)$animal['sterilization_date']))) : '' ?><?= !empty($sterilizationContacts['vet']['name']) ? ' · ' . h($sterilizationContacts['vet']['name']) : '' ?><?= !empty($sterilizationContacts['clinic']['name']) ? ' · ' . h($sterilizationContacts['clinic']['name']) : '' ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php $availability = $animal['adoption_availability'] ?? 'unknown';
|
||||
$availabilityMeta = ['unknown' => [t('animal.availability_define'),'bg-secondary-lt'],'not_available' => [t('animals.unavailable_title'),'bg-orange-lt'],'available' => [t('animals.available_title'),'bg-green-lt']];
|
||||
[$availabilityLabel,$availabilityClass] = $availabilityMeta[$availability] ?? $availabilityMeta['unknown'];
|
||||
$registrationLabels = ['unknown' => t('animal.registration_unknown'),'pending' => t('animal.registration_pending'),'registered' => t('animal.registration_done')];
|
||||
$registration = $animal['identification_registration_status'] ?? 'unknown';
|
||||
$registrationClass = $registration === 'registered' ? 'bg-green-lt' : ($registration === 'pending' ? 'bg-yellow-lt' : 'bg-secondary-lt'); ?>
|
||||
<div class="mt-2 d-flex flex-wrap align-items-center gap-1"><span
|
||||
class="badge <?= h($registrationClass) ?>"><?= h($registrationLabels[$registration] ?? $registrationLabels['unknown']) ?></span><span
|
||||
class="badge <?= h($availabilityClass) ?>"><?= h($availabilityLabel) ?></span><?php if (!empty($animal['website_published'])): ?><span
|
||||
class="badge <?= $availability === 'available' ? 'bg-cyan-lt' : 'bg-yellow-lt' ?>">🌐
|
||||
<?= h(t($availability === 'available' ? 'public_site.published' : 'public_site.waiting_publication')) ?></span><?php endif; ?><?php if ($availability === 'available' && !empty($animal['adoption_available_from'])): ?><span
|
||||
class="text-muted small ms-1"><?= h(t('animal.available_from', ['date' => date('d/m/Y', strtotime((string)$animal['adoption_available_from']))])) ?></span><?php elseif ($availability === 'not_available' && !empty($animal['adoption_unavailability_reason'])): ?><span
|
||||
class="text-muted small ms-1"><?= h($animal['adoption_unavailability_reason']) ?></span><?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-end d-flex justify-content-end gap-2">
|
||||
|
||||
<!-- Modifier -->
|
||||
<?php if (!$isArchived): ?>
|
||||
<a class="btn btn-primary d-flex align-items-center gap-1"
|
||||
href="/animal/edit?id=<?= (int)$animal['id'] ?>">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="18" height="18" viewBox="0 0 24 24"
|
||||
stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 20h9" />
|
||||
<path d="M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z" />
|
||||
</svg>
|
||||
<?= h(t('common.edit')) ?>
|
||||
</a>
|
||||
|
||||
<!-- Ajouter -->
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-success d-flex align-items-center gap-1 dropdown-toggle" type="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" width="18" height="18"
|
||||
viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
|
||||
stroke-linecap="round" stroke-linejoin="round">
|
||||
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||
<path d="M12 5v14" />
|
||||
<path d="M5 12h14" />
|
||||
</svg>
|
||||
<?= h(t('common.add')) ?>
|
||||
</button>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-end shadow">
|
||||
<?php if ($canViewMedical): ?>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalMedicalStatus">
|
||||
🧬 <?= h(t('animal.medical_status')) ?>
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modalMedical">
|
||||
🩺 <?= h(t('animal.medical_note')) ?>
|
||||
</a>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modalTreatment">
|
||||
💊 <?= h(t('animal.treatment')) ?>
|
||||
</a>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modalVaccine">
|
||||
💉 <?= h(t('animal.vaccine')) ?>
|
||||
</a>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalDewormingCatalog">
|
||||
🪱 <?= h(t('animals.dewormer')) ?>
|
||||
</a>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal"
|
||||
data-bs-target="#modalPrescription">📄
|
||||
<?= h(t('medical_document.menu_prescription')) ?></a>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modalLabReport">🧪
|
||||
<?= h(t('medical_document.menu_analysis')) ?></a>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modalExpense">💶
|
||||
<?= h(t('animal.veterinary_expense')) ?></a>
|
||||
<a class="dropdown-item" href="/animal/surgery/new?animal_id=<?= (int)$animal['id'] ?>">🏥
|
||||
Chirurgie</a>
|
||||
<?php endif; ?>
|
||||
<?php if (empty($bondedGroup)): ?>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="/bonded/new?animal_id=<?= (int)$animal['id'] ?>">🔗
|
||||
<?= h(t('animal.bonded_group')) ?></a>
|
||||
<?php endif; ?>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modalPlacement">🏡
|
||||
<?= h(t('animal.placement_return')) ?></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Actions secondaires -->
|
||||
<div class="dropdown">
|
||||
<button class="btn btn-outline-secondary dropdown-toggle" type="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<?= h(t('common.actions')) ?>
|
||||
</button>
|
||||
|
||||
<div class="dropdown-menu dropdown-menu-end shadow animal-actions-menu">
|
||||
<a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#modalAdoption">
|
||||
🏠 <?= h(t('animal.validate_adoption')) ?>
|
||||
</a>
|
||||
<a class="dropdown-item" href="/animal/pdf?id=<?= (int)$animal['id'] ?>" target="_blank">
|
||||
🖨 <?= h(t('common.print_record')) ?>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-divider"></div>
|
||||
<?php if (!in_array((string)($animal['status'] ?? ''), ['decede','décédé'], true)): ?>
|
||||
<a class="dropdown-item text-dark" href="/animal/death?id=<?= (int)$animal['id'] ?>">🌈
|
||||
<?= h(t('animal.record_death')) ?>
|
||||
</a>
|
||||
<div class="dropdown-divider"></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form method="post" action="/animal/archive"
|
||||
onsubmit="return confirm(<?= h(json_encode(t('animal.archive_confirm'), JSON_HEX_APOS | JSON_HEX_QUOT)) ?>);">
|
||||
<input type="hidden" name="id" value="<?= (int)$animal['id'] ?>">
|
||||
<button class="dropdown-item" type="submit">
|
||||
📦 <?= h(t('animal.archive')) ?>
|
||||
</button>
|
||||
</form>
|
||||
<form method="post" action="/animal/delete"
|
||||
onsubmit="const reason = prompt(<?= h(json_encode(t('animal.trash_reason'), JSON_HEX_APOS | JSON_HEX_QUOT)) ?>, <?= h(json_encode(t('animal.trash_default_reason'), JSON_HEX_APOS | JSON_HEX_QUOT)) ?>); if (reason === null) return false; this.elements.reason.value = reason; return confirm(<?= h(json_encode(t('animal.trash_confirm'), JSON_HEX_APOS | JSON_HEX_QUOT)) ?>);">
|
||||
<input type="hidden" name="id" value="<?= (int)$animal['id'] ?>">
|
||||
<input type="hidden" name="reason" value="">
|
||||
<button class="dropdown-item text-dark" type="submit">🗑
|
||||
<?= h(t('animal.move_to_trash')) ?></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Retour -->
|
||||
<?php else: ?>
|
||||
<a class="btn btn-primary d-flex align-items-center gap-1"
|
||||
href="/animal/edit?id=<?= (int)$animal['id'] ?>">✏️ <?= h(t('common.edit')) ?></a>
|
||||
<a class="btn btn-outline-secondary" href="/animal/pdf?id=<?= (int)$animal['id'] ?>"
|
||||
target="_blank">🖨 <?= h(t('common.print_record')) ?></a>
|
||||
<form method="post" action="/animal/restore"
|
||||
onsubmit="return confirm(<?= h(json_encode(t('inactive.restore_confirm'), JSON_HEX_APOS | JSON_HEX_QUOT)) ?>);">
|
||||
<input type="hidden" name="csrf" value="<?= h(Auth::csrf()) ?>"><input type="hidden" name="id"
|
||||
value="<?= (int)$animal['id'] ?>"><button class="btn btn-success"
|
||||
type="submit"><?= h(t('common.restore')) ?></button></form>
|
||||
<?php endif; ?>
|
||||
<a class="btn btn-ghost-secondary" href="<?= $isArchived ? '/animals/archived' : '/animals' ?>">
|
||||
← <?= h(t('common.back')) ?>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="col-12">
|
||||
|
||||
<div class="mt-">
|
||||
|
||||
<ul id="submenus" class="nav nav-tabs nav-tabs-alt mt-3 mb-0">
|
||||
<li class="nav-item"><a href="#tab-ident" class="nav-link active" data-bs-toggle="tab">🧬
|
||||
<?= h(t('animal.tab.identity')) ?></a></li>
|
||||
<li class="nav-item"><a href="#tab-activity" class="nav-link" data-bs-toggle="tab">📊
|
||||
<?= h(t('animal.tab.activity')) ?></a></li>
|
||||
<?php if ($canViewMedical): ?>
|
||||
<li class="nav-item"><a href="#tab-med" class="nav-link" data-bs-toggle="tab">❤️
|
||||
<?= h(t('animal.tab.medical')) ?></a></li>
|
||||
<li class="nav-item"><a href="#tab-trt" class="nav-link" data-bs-toggle="tab">💊
|
||||
<?= h(t('animal.tab.treatments')) ?></a></li>
|
||||
<li class="nav-item"><a href="#tab-vac" class="nav-link" data-bs-toggle="tab">💉
|
||||
<?= h(t('animal.tab.vaccines')) ?></a></li>
|
||||
<?php endif; ?>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" id="animalMoreTabs" href="#" data-bs-toggle="dropdown"
|
||||
role="button" aria-expanded="false"><?= h(t('animal.tab.more')) ?></a>
|
||||
<div class="dropdown-menu shadow">
|
||||
<a href="#tab-locations" class="dropdown-item" data-bs-toggle="tab">📍
|
||||
<?= h(t('animal.tab.locations')) ?></a>
|
||||
<a href="#tab-placements" class="dropdown-item" data-bs-toggle="tab">🏡
|
||||
<?= h(t('animal.tab.placements')) ?></a>
|
||||
<?php if ($isCat): ?><a href="#tab-litters" class="dropdown-item" data-bs-toggle="tab">🐾
|
||||
<?= h(t('animal.tab.litters')) ?></a><?php endif; ?>
|
||||
<?php if ($canViewMedical): ?><a href="#tab-documents" class="dropdown-item"
|
||||
data-bs-toggle="tab">📄 <?= h(t('animal.tab.documents')) ?></a><?php endif; ?>
|
||||
<div class="dropdown-divider"></div>
|
||||
<a href="#tab-hist" class="dropdown-item" data-bs-toggle="tab">🕒
|
||||
<?= h(t('animal.tab.history')) ?></a>
|
||||
<a href="#tab-photos" class="dropdown-item" data-bs-toggle="tab">📷
|
||||
<?= h(t('animal.tab.photos')) ?></a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="card border-top-0 rounded-top-0">
|
||||
<div class="card-body">
|
||||
<div class="tab-content">
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_identity.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_locations.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_activity.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_medical.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_litters.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_documents.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_history.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_photos.php'; ?>
|
||||
|
||||
<?php require __DIR__ . '/_animal_show_modals.php'; ?>
|
||||
Loading…
Add table
Add a link
Reference in a new issue