parfait
This commit is contained in:
parent
0fd446fc24
commit
030893089d
@ -1299,7 +1299,7 @@ const TimeClockPage = () => {
|
||||
'Une sortie sans entrée existe',
|
||||
|
||||
confirmationMessage:
|
||||
"Voulez-vous indiquer la date et l’heure de l’entrée manquante, puis enregistrer le nouveau pointage ?",
|
||||
"Voulez-vous indiquer la date et l’heure de l’entrée manquante, puis enregistrer la sortie scannée ?",
|
||||
|
||||
timeLabel:
|
||||
"Heure d'entrée",
|
||||
@ -1347,12 +1347,16 @@ const TimeClockPage = () => {
|
||||
}
|
||||
|
||||
if (!conflictDate || !conflictTime) {
|
||||
setError('Indiquez la date et l’heure du pointage manquant.');
|
||||
setError(config.timeLabel === 'Heure de sortie'
|
||||
? 'Indiquez la date et l’heure de la sortie manquante.'
|
||||
: 'Indiquez la date et l’heure de l’entrée manquante.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (scanConflict.scanDate && conflictDate > scanConflict.scanDate) {
|
||||
setError('Le pointage manquant ne peut pas être postérieur au scan.');
|
||||
setError(config.timeLabel === 'Heure de sortie'
|
||||
? 'La sortie renseignée ne peut pas être postérieure à l’entrée scannée.'
|
||||
: 'L’entrée renseignée ne peut pas être postérieure à la sortie scannée.');
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1378,12 +1382,12 @@ const TimeClockPage = () => {
|
||||
scanConflict.scanTime;
|
||||
}
|
||||
|
||||
const resolutionResponse = await timeApi.scanTimeEntry(scanConflict.code, options);
|
||||
await timeApi.scanTimeEntry(scanConflict.code, options);
|
||||
resolved = true;
|
||||
|
||||
// complete_missing_entry renseigne l'entrée et applique déjà la sortie scannée.
|
||||
if (scanConflict.type === 'missing_entry') {
|
||||
setScanMessage(resolutionResponse.message || 'Sortie enregistrée.');
|
||||
setScanMessage('Entrée renseignée et sortie enregistrée.');
|
||||
setScanConflict(null);
|
||||
await loadTimeEntries();
|
||||
return;
|
||||
@ -1397,12 +1401,14 @@ const TimeClockPage = () => {
|
||||
if (scanConflict.scanTime) {
|
||||
scanOptions.scan_time = scanConflict.scanTime;
|
||||
}
|
||||
const response = await timeApi.scanTimeEntry(
|
||||
await timeApi.scanTimeEntry(
|
||||
scanConflict.code,
|
||||
scanOptions,
|
||||
);
|
||||
|
||||
setScanMessage(response.message || 'Pointage enregistré.');
|
||||
setScanMessage(scanConflict.type === 'open_entry'
|
||||
? 'Sortie renseignée et entrée enregistrée.'
|
||||
: 'Entrée renseignée et sortie enregistrée.');
|
||||
setScanConflict(null);
|
||||
await loadTimeEntries();
|
||||
} catch (
|
||||
@ -1414,8 +1420,8 @@ const TimeClockPage = () => {
|
||||
}
|
||||
setError(
|
||||
resolved
|
||||
? `Le conflit a été résolu, mais le nouveau pointage n’a pas été enregistré : ${resolutionError.message}`
|
||||
: resolutionError.message,
|
||||
? `${scanConflict.type === 'open_entry' ? 'La sortie a été renseignée, mais la nouvelle entrée n’a pas été enregistrée' : 'L’entrée manquante a été renseignée, mais la sortie scannée n’a pas été enregistrée'} : ${resolutionError.message || 'erreur inconnue'}`
|
||||
: `Impossible de ${scanConflict.type === 'open_entry' ? 'renseigner la sortie manquante' : 'renseigner l’entrée manquante et enregistrer la sortie'} : ${resolutionError.message || 'erreur inconnue'}`,
|
||||
);
|
||||
} finally {
|
||||
setResolvingConflict(false);
|
||||
@ -2415,17 +2421,6 @@ const TimeClockPage = () => {
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
{editingEntry.isGrouped && (
|
||||
<p className="mb-4 text-xs text-muted-foreground">
|
||||
Les dates d’un pointage
|
||||
multi-jours sont liées au
|
||||
groupe. Seules les heures
|
||||
peuvent être modifiées ici.
|
||||
</p>
|
||||
)}
|
||||
|
||||
|
||||
<div className="flex flex-col gap-2 sm:flex-row">
|
||||
|
||||
<Button type="submit">
|
||||
|
||||
@ -744,23 +744,23 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
*/
|
||||
|
||||
const getScheduleBounds = (
|
||||
weekDays,
|
||||
visibleDays,
|
||||
) => {
|
||||
const weekDateKeys =
|
||||
const visibleDateKeys =
|
||||
new Set(
|
||||
weekDays.map(
|
||||
visibleDays.map(
|
||||
formatDateKey,
|
||||
),
|
||||
);
|
||||
|
||||
const weekAttendances =
|
||||
const visibleAttendances =
|
||||
getFilteredAttendances(
|
||||
expandOvernightAttendances(
|
||||
attendances,
|
||||
),
|
||||
).filter(
|
||||
(attendance) =>
|
||||
weekDateKeys.has(
|
||||
visibleDateKeys.has(
|
||||
String(
|
||||
attendance.start_date,
|
||||
).slice(0, 10),
|
||||
@ -768,7 +768,7 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
);
|
||||
|
||||
const times =
|
||||
weekAttendances
|
||||
visibleAttendances
|
||||
.flatMap(
|
||||
(attendance) => [
|
||||
getMinutes(
|
||||
@ -1027,7 +1027,7 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
endHour,
|
||||
} =
|
||||
getScheduleBounds(
|
||||
weekDays,
|
||||
isMobile ? [weekDays[selectedDayIndex]] : weekDays,
|
||||
);
|
||||
|
||||
const hourCount =
|
||||
@ -1179,7 +1179,7 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => navigateWeek(-1)}
|
||||
className="flex items-center gap-1"
|
||||
className="flex shrink-0 items-center gap-1"
|
||||
>
|
||||
<ChevronLeft className="h-4 w-4" />
|
||||
Précédente
|
||||
@ -1187,7 +1187,7 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
|
||||
<Badge
|
||||
variant="secondary"
|
||||
className="text-sm"
|
||||
className="h-7 w-56 shrink-0 justify-center whitespace-nowrap text-sm tabular-nums"
|
||||
>
|
||||
Du{' '}
|
||||
{weekDays[0].toLocaleDateString('fr-FR', {
|
||||
@ -1205,7 +1205,7 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => navigateWeek(1)}
|
||||
className="flex items-center gap-1"
|
||||
className="flex shrink-0 items-center gap-1"
|
||||
>
|
||||
Suivante
|
||||
<ChevronRight className="h-4 w-4" />
|
||||
@ -1219,13 +1219,14 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => navigateDay(-1)}
|
||||
className="shrink-0"
|
||||
>
|
||||
<ChevronLeft className="h-4 w-4" />
|
||||
</Button>
|
||||
|
||||
<Badge
|
||||
variant="secondary"
|
||||
className="text-sm"
|
||||
className="h-7 w-48 shrink-0 justify-center whitespace-nowrap text-sm tabular-nums"
|
||||
>
|
||||
{weekDays[selectedDayIndex].toLocaleDateString(
|
||||
'fr-FR',
|
||||
@ -1241,6 +1242,7 @@ const WeeklySummaryPage = ({ userId }) => {
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => navigateDay(1)}
|
||||
className="shrink-0"
|
||||
>
|
||||
<ChevronRight className="h-4 w-4" />
|
||||
</Button>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user