Skip to content

Commit

Permalink
parent edf0679
Browse files Browse the repository at this point in the history
author David Mendy <[email protected]> 1716545531 +0200
committer David Mendy <[email protected]> 1716942798 +0200

parent edf0679
author David Mendy <[email protected]> 1716545531 +0200
committer David Mendy <[email protected]> 1716942769 +0200

refactor: ♻️ standardize securing steps on typologies files

Move getDisclaimer from ResultPage to typology files

fix: ✏️ fix non-display securing weapons

feat: ✨ fix revolver with hidden door display

feat: ✨ display phone number depending on the time

Use latest docker compose version and fix version warning

refactor: ♻️ refactor revolver file

refactor: ♻️ standardize securing steps on typologies files

refactor: ♻️ refactor revolver file

refactor: ♻️ refactor revolver file

feat: ✨ display phone number depending on the time

Use latest docker compose version and fix version warning

refactor: ♻️ refactor typologies files

refactor: ♻️ refactor typologies files

refactor: ♻️ refactor typologies files

refactor: ♻️ refactor typologies files

refactor: ♻️ refactor typologies files
  • Loading branch information
nutfdt committed May 29, 2024
1 parent edf0679 commit 7f657d5
Show file tree
Hide file tree
Showing 26 changed files with 427 additions and 489 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
SHELL := /bin/bash
DOCKER := $(shell type -p docker)
DC := $(shell type -p docker-compose)
DC := ${DOCKER} compose
TAG := 3.3
APP_NAME := basegun
REG := ghcr.io
Expand Down
10 changes: 4 additions & 6 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
version: '3.8'
services:
backend:
build:
Expand All @@ -23,10 +22,9 @@ services:
ports:
- 5000:5000
volumes:
- $PWD/backend/src:/app/src
- $PWD/backend/tests:/app/tests
- $PWD/backend/logs:/tmp/logs
- /app/src/weights
- ./backend/src:/app/src
- ./backend/tests:/app/tests
- ./backend/logs:/tmp/logs

frontend:
build:
Expand All @@ -42,7 +40,7 @@ services:
- 8080:80 # if BUILD_TARGET = prod
- 3000:5173
volumes:
- $PWD/frontend/src:/app/src
- ./frontend/src:/app/src
- /app/node_modules

minio:
Expand Down
5 changes: 2 additions & 3 deletions frontend/cypress/e2e/typology-revolver-securing.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,8 @@ describe('Typology Revolver Securing', () => {
cy.contains('Le barillet ne bascule pas').first().click()
cy.getByDataTestid('button-next').should('not.have.attr', 'disabled')
cy.getByDataTestid('button-next').click()
cy.get('.fr-accordions-group > li').first().click()
cy.getByDataTestid('button-step-mes').click({ multiple: true }, { force: true })
cy.getByDataTestid('button-next').should('not.have.attr', 'disabled')
cy.contains('h2', 'Mettre en sécurité mon arme')
cy.contains('li', 'Contrôler que chaque chambre')
cy.getByDataTestid('button-next').click()
cy.url().should('contain', '/fin-mise-en-securite')
cy.getByDataTestid('go-to-identification').click()
Expand Down
45 changes: 6 additions & 39 deletions frontend/src/components/ResultPage.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { ref, computed, watchEffect } from 'vue'
import axios from 'axios'
import SnackbarAlert from '@/components/SnackbarAlert.vue'
import { resultTree, ALARM_GUNS_TYPOLOGIES, MEASURED_GUNS_TYPOLOGIES, DISCLAIMERS } from '@/utils/firearms-utils/index'
import { TYPOLOGIES, MEASURED_GUNS_TYPOLOGIES } from '@/utils/firearms-utils/index'
import { isUserUsingCrosscall } from '@/utils/isUserUsingCrosscall'
import { useSnackbarStore } from '@/stores/snackbar'
import { useStepsStore } from '@/stores/steps'
Expand All @@ -28,40 +28,7 @@ function getCategoryFromTypologyAndMeasures (typology: string, gunLength: number
if (gunLength > 75 && gunBarrelLength > 55) { return 'C' }
}
}
return resultTree[typology]?.category
}
function getDisclaimer (typology: string, category: string) {
if (['epaule_a_levier_sous_garde', 'epaule_a_verrou'].includes(typology)) {
if (isCardDetected.value === false) {
if (['B ou C', 'C'].includes(category)) {
return DISCLAIMERS.epaule_a_levier_verrou.short
}
} else {
if (['C'].includes(category)) {
return DISCLAIMERS.epaule_a_levier_verrou.short
}
if (['B ou C'].includes(category)) {
return DISCLAIMERS.epaule_a_levier_verrou.long
}
}
}
if (typology === 'epaule_semi_auto_style_chasse' && ['B ou C', 'C'].includes(category)) {
if (isCardDetected.value === false) {
return DISCLAIMERS.semi_auto_style_chasse.short
} else {
if (['C'].includes(category)) {
return DISCLAIMERS.semi_auto_style_chasse.short
}
if (['B ou C'].includes(category)) {
return DISCLAIMERS.semi_auto_style_chasse.long
}
}
}
if (typology === 'epaule_a_pompe' && category === 'B ou C') { return DISCLAIMERS.epaule_a_pompe.short }
if (typology === 'epaule_a_pompe' && category === 'C') { return DISCLAIMERS.epaule_a_pompe.long }
if (['epaule_semi_auto_style_militaire_milieu_20e', 'semi_auto_style_militaire_autre'].includes(typology)) { return DISCLAIMERS.epaule_semi_auto_style_militaire }
if (ALARM_GUNS_TYPOLOGIES.includes(typology) && category === 'D') { return DISCLAIMERS.alarm_guns }
return TYPOLOGIES[typology]?.category
}
watchEffect(() => {
Expand All @@ -76,28 +43,28 @@ const imgUrl = computed(() => resultStore.imgUrl)
const typology = computed(() => resultStore.typology)
const isDummy = computed(() => stepsStore.isDummy)
const isDummyTypology = computed(() => resultTree[typology.value]?.isDummyTypology === true)
const isDummyTypology = computed(() => TYPOLOGIES[typology.value]?.isDummyTypology === true)
const isCardDetected = computed(() => resultStore.gunLength !== null && resultStore.gunBarrelLength !== null)
const isUp = ref(false)
const isDown = ref(false)
const isFeedbackDone = ref(false)
const label = computed(() => resultTree[typology.value]?.displayLabel)
const label = computed(() => TYPOLOGIES[typology.value]?.displayLabel)
const category = computed(() => {
if (stepsStore.selectedAlarmGun && stepsStore.selectedAlarmGun !== '') {
return 'D'
} else if (isDummy.value) {
return 'Non Classée'
} else if (typology.value === 'revolver') {
return resultTree[typology.value]?.categoryWithoutSecuring
return TYPOLOGIES[typology.value]?.categoryWithoutSecuring
} else {
return getCategoryFromTypologyAndMeasures(typology.value, resultStore.gunLength, resultStore.gunBarrelLength)
}
})
const disclaimer = computed(() => getDisclaimer(typology.value, category.value))
const disclaimer = computed(() => TYPOLOGIES[typology.value] && Object.hasOwn(TYPOLOGIES[typology.value], 'getDisclaimer') ? TYPOLOGIES[typology.value].getDisclaimer(category.value, isCardDetected.value) : null)
function sendFeedback (isCorrect: boolean) {
const json = {
Expand Down
1 change: 1 addition & 0 deletions frontend/src/icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@ export {
RiHome3Line,
RiHome4Line,
RiCheckboxCircleLine,
RiLockLine,
} from 'oh-vue-icons/icons/ri/index.js'
2 changes: 1 addition & 1 deletion frontend/src/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ a {
transform: translate(-50%, -100%);
background-color: #f5f5fe;
box-shadow: 0 -4px 16px rgb(0 0 0 / 25%);
padding: 15px !important;
padding: 15px;
width: 100%;
}

Expand Down
4 changes: 2 additions & 2 deletions frontend/src/stores/result.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import { defineStore } from 'pinia'
import { useLocalStorage } from '@vueuse/core'

import { serializer } from '@/utils/storage-utils'
import type { resultTree } from '@/utils/firearms-utils'
import type { TYPOLOGIES } from '@/utils/firearms-utils'

type TypologyKey = keyof typeof resultTree
type TypologyKey = keyof typeof TYPOLOGIES

export const useResultStore = defineStore('result', () => {
const typology = useLocalStorage<TypologyKey>('typology', null, { serializer })
Expand Down
58 changes: 29 additions & 29 deletions frontend/src/utils/firearms-utils/autre-pistolet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,56 +19,56 @@ export const autre_pistolet = {
category: 'A, B ou D',
isDummyTypology: false,
options_text: '',
options: {
securingSteps: {
drulov: {
label: 'Drulov',
value: 'drulov',
text_steps: {
1: 'Analyser l’arme en <span class="font-bold">direction sécurisée</span>',
2: '<span class="font-bold">Pivoter l’arrière de la culasse</span> légèrement vers la gauche',
3: '<span class="font-bold">Tirer la glissière</span> vers l’arrière pour <span class="font-bold">extraire la munition</span> éventuelle',
4: '<span class="font-bold">Actionner la culasse</span> d’avant en arrière',
5: '<span class="font-bold">Contrôler visuellement</span> que la chambre est bien vide',
},
text_steps: [
'Analyser l’arme en <span class="font-bold">direction sécurisée</span>',
'<span class="font-bold">Pivoter l’arrière de la culasse</span> légèrement vers la gauche',
'<span class="font-bold">Tirer la glissière</span> vers l’arrière pour <span class="font-bold">extraire la munition</span> éventuelle',
'<span class="font-bold">Actionner la culasse</span> d’avant en arrière',
'<span class="font-bold">Contrôler visuellement</span> que la chambre est bien vide',
],
img: autrePistoletDrulovImg,
video: autrePistoletDrulovVideo,
},
derringer: {
label: 'Derringer',
value: 'derringer',
text_steps: {
1: 'Analyser l’arme en <span class="font-bold">direction sécurisée</span>',
2: 'Pivoter le <span class="font-bold">levier de déverrouillage</span>',
3: 'Casser/Basculer les canons vers le haut',
4: 'Pencher l’entrée des canons pour <span class="font-bold">extraire les munitions</span> éventuelles',
5: 'Contrôler visuellement que la chambre est bien vide',
},
text_steps: [
'Analyser l’arme en <span class="font-bold">direction sécurisée</span>',
'Pivoter le <span class="font-bold">levier de déverrouillage</span>',
'Casser/Basculer les canons vers le haut',
'Pencher l’entrée des canons pour <span class="font-bold">extraire les munitions</span> éventuelles',
'Contrôler visuellement que la chambre est bien vide',
],
img: autrePistoletDerringerImg,
video: autrePistoletDerringerVideo,
},
thompson_contender: {
label: 'Thompson contender',
value: 'thompson_contender',
text_steps: {
1: 'Analyser l’arme en <span class="font-bold">direction sécurisée</span> ',
2: 'Tirer sur <span class="font-bold">le levier situé sous le pontet</span> avec la main tenant la poignée',
3: 'Casser/Basculer le canon vers le bas',
4: 'Retourner l’arme pour <span class="font-bold">extraire la munition</span> éventuelle',
5: 'Contrôler visuellement que la chambre est bien vide',
},
text_steps: [
'Analyser l’arme en <span class="font-bold">direction sécurisée</span> ',
'Tirer sur <span class="font-bold">le levier situé sous le pontet</span> avec la main tenant la poignée',
'Casser/Basculer le canon vers le bas',
'Retourner l’arme pour <span class="font-bold">extraire la munition</span> éventuelle',
'Contrôler visuellement que la chambre est bien vide',
],
img: autrePistoletThompsonImg,
video: autrePistoletThompsonVideo,
},
fusil_crosse_cannon_scie: {
label: 'Ancien fusil à crosse et canon scié',
value: 'fusil_crosse_cannon_scie',
text_steps: {
1: 'Analyser l’arme en <span class="font-bold">direction sécurisée</span> ',
2: 'Pousser sur la clef avec le pouce tenant la poignée de l’arme',
3: 'Casser/Basculer le canon de l’arme',
4: '<span class="font-bold">Retirer les munitions</span> éventuelles',
5: 'Contrôler visuellement que les chambres sont bien vides',
},
text_steps: [
'Analyser l’arme en <span class="font-bold">direction sécurisée</span> ',
'Pousser sur la clef avec le pouce tenant la poignée de l’arme',
'Casser/Basculer le canon de l’arme',
'<span class="font-bold">Retirer les munitions</span> éventuelles',
'Contrôler visuellement que les chambres sont bien vides',
],
img: autrePistoletFusilScieImg,
video: autrePistoletFusilScieVideo,
},
Expand Down
32 changes: 17 additions & 15 deletions frontend/src/utils/firearms-utils/epaule-a-levier-sous-garde.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import levierSousGardeMagasinAvantImg from '@/assets/guide-mise-en-securite/phot
import levierSousGardePasMagasinImg from '@/assets/guide-mise-en-securite/photos/epaule_a_levier_sous_garde/epaule_levier_ss_garde_magasin_fixe.jpg'
import levierSousGardeMagasinAvantVideo from '@/assets/guide-mise-en-securite/videos/epaule_a_levier_sous_garde/epaule_levier_ss_garde_magasin_avant.mp4'
import levierSousGardePasMagasinVideo from '@/assets/guide-mise-en-securite/videos/epaule_a_levier_sous_garde/epaule_levier_ss_garde_magasin_fixe.mp4'
import { getEpaulLevierVerrouDisclaimer } from '@/utils/firearms-utils/index'
/*
Armes d’épaule à levier de sous-garde
Magasin avant
Expand All @@ -12,32 +13,33 @@ export const epaule_a_levier_sous_garde = {
category: 'B ou C',
isDummyTypology: false,
options_text: 'En manipulant l’arme avec précaution dans une <span class="font-bold">direction sans risque</span>, inspectez l’<span class="font-bold">extrémité du tube sous le canon</span>. Sélectionnez ce que vous voyez :',
options: {
securingSteps: {
front_magazine: {
label: 'Embout rugueux',
value: 'front_magazine',
text_steps: {
1: 'Observer l’arme en l’orientant dans une <span class="font-bold">direction sans risque</span>, en manipulant avec précaution.',
2: '<span class="font-bold">Faites très attention à ne pas déclencher l’arme durant cette manipulation</span>. Dévisser la baguette à l’avant du tube magasin.',
3: 'Retirer complètement la baguette du magasin.',
4: 'Vider le magasin en tapotant l’arme orientée légèrement vers le bas.',
5: 'Actionner le levier de sous garde jusqu’en position basse et <span class="font-bold">retirer la munition</span> éventuelle de la chambre.',
6: 'Contrôler visuellement que la chambre est vide.',
},
text_steps: [
'Observer l’arme en l’orientant dans une <span class="font-bold">direction sans risque</span>, en manipulant avec précaution.',
'<span class="font-bold">Faites très attention à ne pas déclencher l’arme durant cette manipulation</span>. Dévisser la baguette à l’avant du tube magasin.',
'Retirer complètement la baguette du magasin.',
'Vider le magasin en tapotant l’arme orientée légèrement vers le bas.',
'Actionner le levier de sous garde jusqu’en position basse et <span class="font-bold">retirer la munition</span> éventuelle de la chambre.',
'Contrôler visuellement que la chambre est vide.',
],
img: levierSousGardeMagasinAvantImg,
video: levierSousGardeMagasinAvantVideo,
},
fixed_magazine: {
label: 'Pas d’embout',
value: 'fixed_magazine',
text_steps: {
1: 'Observer l’arme en l’orientant dans une <span class="font-bold">direction sans risque</span>, en manipulant avec précaution.',
2: 'Abaisser le levier de sous garde en position basse et <span class="font-bold">retirer la munition</span> éventuelle de la chambre.',
3: '<span class="font-bold" style="color:red">Veiller à ne pas appuyer sur la queue de détente pendant cette manipulation !</span> <br> Relever et abaisser le levier de sous garde tout en extrayant les munitions tant qu’il y a toujours des munitions présentes dans le tube magasin.',
4: 'Contrôler visuellement que la chambre est vide.',
},
text_steps: [
'Observer l’arme en l’orientant dans une <span class="font-bold">direction sans risque</span>, en manipulant avec précaution.',
'Abaisser le levier de sous garde en position basse et <span class="font-bold">retirer la munition</span> éventuelle de la chambre.',
'<span class="font-bold" style="color:red">Veiller à ne pas appuyer sur la queue de détente pendant cette manipulation !</span> <br> Relever et abaisser le levier de sous garde tout en extrayant les munitions tant qu’il y a toujours des munitions présentes dans le tube magasin.',
'Contrôler visuellement que la chambre est vide.',
],
img: levierSousGardePasMagasinImg,
video: levierSousGardePasMagasinVideo,
},
},
getDisclaimer: getEpaulLevierVerrouDisclaimer,
} as const
33 changes: 14 additions & 19 deletions frontend/src/utils/firearms-utils/epaule-a-pompe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,19 @@ export const epaule_a_pompe = {
category: 'B ou C',
isDummyTypology: false,
options_text: '',
text_steps: {
1: 'Observer l’arme en l’orientant dans une <span class="font-bold">direction sans risque</span>, en manipulant avec précaution',
2: 'Si la pompe est bloquée, <span class="font-bold">appuyer sur le bouton de déverrouillage</span> situé à l’avant ou sous le pontet',
3: 'Actionner la pompe doucement d’arrière en avant afin d’<span class="font-bold">extraire toutes les munitions</span>',
4: '<span class="font-bold">Verrouiller l’arme</span> en avançant légèrement la pompe vers l’avant',
5: 'Contrôler visuellement que la chambre est vide',
6: '<span class="font-bold">Contrôler l’orifice du tube magasin</span> et constater que celui-ci est bien vide',
securingSteps: {
text_steps: [
'Observer l’arme en l’orientant dans une <span class="font-bold">direction sans risque</span>, en manipulant avec précaution',
'Si la pompe est bloquée, <span class="font-bold">appuyer sur le bouton de déverrouillage</span> situé à l’avant ou sous le pontet',
'Actionner la pompe doucement d’arrière en avant afin d’<span class="font-bold">extraire toutes les munitions</span>',
'<span class="font-bold">Verrouiller l’arme</span> en avançant légèrement la pompe vers l’avant',
'Contrôler visuellement que la chambre est vide',
'<span class="font-bold">Contrôler l’orifice du tube magasin</span> et constater que celui-ci est bien vide',
],
video: epaulePompeSimpleVideo,
},
getDisclaimer: (category: string) => {
if (category === 'B ou C') { return '<strong>Catégorie B</strong> si la <strong>capacité maximale</strong> (chambre comprise) est <strong>supérieure à 5</strong>, ou si la <strong>crosse n’est pas fixe</strong>.' }
if (category === 'C') { return '<strong>Catégorie B</strong> si la <strong>capacité maximale</strong> (chambre comprise) est <strong>supérieure à 5</strong>, ou si la <strong>crosse n’est pas fixe</strong>, ou si le <strong>canon est lisse</strong>.' }
},
video: epaulePompeSimpleVideo,
// text_steps: {
// 1: 'Observer l’arme en l’orientant dans une <span class="font-bold">direction sans risque</span>, en manipulant avec précaution',
// 2: 'Retourner l’arme et appuyer sur la planchette élévatrice',
// 3: 'Appuyer sur l’ergot/crochet maintenant les cartouches afin de vider le magasin',
// 4: 'Vérifier que le magasin est vide en appuyant sur le poussoir',
// 5: 'Si la pompe est bloquée, appuyer sur le bouton de déverrouillage situé à l’avant ou sous le pontet',
// 6: 'Actionner la pompe pour <span class="font-bold">extraire la munition</span> par la fenêtre d’éjection',
// 7: 'Contrôler visuellement que la chambre est vide',
// 8: 'Verrouiller l’arme en actionnant la pompe vers l’avant',
// },
// video: epaulePompeCompliqueVideo,
} as const
Loading

0 comments on commit 7f657d5

Please sign in to comment.