From 4aa356f9fe976fe0ae89f49785009602d51c0768 Mon Sep 17 00:00:00 2001 From: Xor290 Date: Wed, 25 Mar 2026 11:11:16 +0100 Subject: [PATCH] chore: add palier amende --- frontend-admin/src/api/api_admin.ts | 6 ++ .../src/screens/admin/SettingsScreen.tsx | 76 +++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/frontend-admin/src/api/api_admin.ts b/frontend-admin/src/api/api_admin.ts index 076b8767..515bc581 100644 --- a/frontend-admin/src/api/api_admin.ts +++ b/frontend-admin/src/api/api_admin.ts @@ -747,9 +747,15 @@ export const DEFAULT_DELIVERY_SCHEDULE: DeliverySchedule = { saturday: { ...DEFAULT_DAY }, sunday: { ...DEFAULT_DAY }, }; +export interface PenaltyTier { + min_cancel: number; + amount: number; +} + export interface AppSettings { penalties_enabled: boolean; show_amende_score: boolean; + penalty_tiers: PenaltyTier[]; points_enabled: boolean; points_pools: PointsPool[]; referral_enabled: boolean; diff --git a/frontend-admin/src/screens/admin/SettingsScreen.tsx b/frontend-admin/src/screens/admin/SettingsScreen.tsx index 8dfa41b5..48a0762c 100644 --- a/frontend-admin/src/screens/admin/SettingsScreen.tsx +++ b/frontend-admin/src/screens/admin/SettingsScreen.tsx @@ -646,6 +646,12 @@ export default function SettingsScreen() { const [settings, setSettings] = useState({ penalties_enabled: true, show_amende_score: true, + penalty_tiers: [ + { min_cancel: 0, amount: 20 }, + { min_cancel: 1, amount: 50 }, + { min_cancel: 2, amount: 100 }, + { min_cancel: 3, amount: 150 }, + ], points_enabled: true, points_pools: [ { key: "pool_0", name: "Pool 1", categories: [], tiers: [] }, @@ -951,6 +957,76 @@ export default function SettingsScreen() { thumbColor="#fff" /> + + + Barème des amendes + + setSettings((prev) => ({ + ...prev, + penalty_tiers: [ + ...prev.penalty_tiers, + { + min_cancel: prev.penalty_tiers.length > 0 + ? prev.penalty_tiers[prev.penalty_tiers.length - 1].min_cancel + 1 + : 0, + amount: 0, + }, + ], + })) + } + > + + + + + À partir de (annul.) + Montant + + + {settings.penalty_tiers.map((tier, i) => ( + + { + const n = parseInt(v, 10); + setSettings((prev) => { + const tiers = [...prev.penalty_tiers]; + tiers[i] = { ...tiers[i], min_cancel: isNaN(n) ? 0 : n }; + return { ...prev, penalty_tiers: tiers }; + }); + }} + keyboardType="number-pad" + placeholderTextColor={colors.textMuted} + /> + { + const n = parseInt(v, 10); + setSettings((prev) => { + const tiers = [...prev.penalty_tiers]; + tiers[i] = { ...tiers[i], amount: isNaN(n) ? 0 : n }; + return { ...prev, penalty_tiers: tiers }; + }); + }} + keyboardType="number-pad" + placeholderTextColor={colors.textMuted} + /> + + setSettings((prev) => ({ + ...prev, + penalty_tiers: prev.penalty_tiers.filter((_, j) => j !== i), + })) + } + > + + + + ))} + {/* Parrainage */}