Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/install-dependencies/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ inputs:
node-version:
description: "Node.js version to use"
required: false
default: "20.19.0"
default: "26.0.0"

runs:
using: "composite"
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/install-playwright/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ inputs:
node-version:
description: "Node.js version to use"
required: false
default: "20.19.0"
default: "26.0.0"

runs:
using: "composite"
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/run-backend/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ inputs:
node-version:
description: "Node.js version to use"
required: false
default: "20.19.0"
default: "26.0.0"

runs:
using: "composite"
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/setup-database/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ inputs:
node-version:
description: "Node.js version to use"
required: false
default: "20.19.0"
default: "26.0.0"

runs:
using: "composite"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:

strategy:
matrix:
node-version: [20.19.0]
node-version: [26.0.0]

services:
postgres:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/lighthouse.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:

strategy:
matrix:
node-version: [20.19.0]
node-version: [26.0.0]

services:
postgres:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/unit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:

strategy:
matrix:
node-version: [20.19.0]
node-version: [26.0.0]

steps:
- uses: actions/checkout@v4
Expand Down
1 change: 1 addition & 0 deletions Procfile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
web: bash scalingo/start.sh
1 change: 0 additions & 1 deletion apps/backend/Procfile

This file was deleted.

1 change: 0 additions & 1 deletion apps/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
},
"scripts": {
"build": "npm run build:css && nest build",
"scalingo-postbuild": "npm run build && npm run migration:migrate",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start -w",
"start:dev": "concurrently \"nodemon\" \"npm run build:css:dev\"",
Expand Down
1 change: 0 additions & 1 deletion apps/frontend/Procfile

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,12 @@
...publicSectorSchema,
});
} else if (employmentStatus === 'SALARIE_PUBLIC_OU_FONCTIONNAIRE') {
schema = schema.extend(publicSectorSchema);
schema = schema.extend({
allowFinancingAndOwnershipAdvices: z.boolean({
message: stepsContent.allowFinancingAndOwnershipAdvices.errorMessage,
}),
...publicSectorSchema,
});
} else if (employmentStatus === 'SALARIE_PRIVE_NON_AGRICOLE') {
schema = schema.extend({
hasCompanyMoreThan10Employees: z.boolean({
Expand Down Expand Up @@ -280,51 +285,6 @@
{@render publicSector()}
{/snippet}

{#snippet publicSector()}
<div class="fr-fieldset__element fr-mb-4w">
<Select
label={stepsContent.positionType.label}
required
options={stepsContent.positionType.options.map((stepContent) => ({
...stepContent,
selected: positionType === stepContent.value,
}))}
onChange={(e) => {
const { value } = e.target as HTMLSelectElement;

if (value) {
delete errors.positionType;
}

eligibilitySimulatorManager.positionType = value as PositionType;
}}
error={errors.positionType}
errorDataTestId={stepsContent.positionType.errorDataTestId} />
</div>

<div class="fr-fieldset__element fr-mb-4w">
<Select
label={stepsContent.positionStage.label}
required
options={stepsContent.positionStage.options.map((stepContent) => ({
...stepContent,
selected: positionStage === stepContent.value,
}))}
onChange={(e) => {
const { value } = e.target as HTMLSelectElement;

if (value) {
delete errors.positionStage;
}

eligibilitySimulatorManager.positionStage =
value === '' ? undefined : value === 'true' ? true : false;
}}
error={errors.positionStage}
errorDataTestId={stepsContent.positionStage.errorDataTestId} />
</div>
{/snippet}

{#snippet privateSector()}
<div class="fr-fieldset__element fr-mb-4w">
<Select
Expand Down Expand Up @@ -441,6 +401,103 @@
</div>
{/snippet}

{#snippet csfFinancingAndOwnershipAdvices()}
<div class="fr-fieldset__element fr-mb-4w">
<p class="fr-mb-2w">
Etant donné votre situation professionnelle, vous êtes également éligible
au service de <a
href="https://www.csf.fr/immobilier"
class="fr-link"
target="_blank"
rel="noopener">
conseil en financement et en accession
</a>
de notre partenaire le Groupe CSF.
</p>
<Select
label={stepsContent.allowFinancingAndOwnershipAdvices.label}
required
options={stepsContent.allowFinancingAndOwnershipAdvices.options.map(
(stepContent) => ({
...stepContent,
selected: allowFinancingAndOwnershipAdvices === stepContent.value,
}),
)}
onChange={(e) => {
const { value } = e.target as HTMLSelectElement;

if (value) {
delete errors.allowFinancingAndOwnershipAdvices;
}

eligibilitySimulatorManager.allowFinancingAndOwnershipAdvices =
value === '' ? undefined : value === 'true' ? true : false;
}}
error={errors.allowFinancingAndOwnershipAdvices}
errorDataTestId={stepsContent.allowFinancingAndOwnershipAdvices
.errorDataTestId} />

{#if allowFinancingAndOwnershipAdvices}
<p>
<a
href="https://www.csf.fr/immobilier/prendre-un-rendez-vous?idCampagne=701Tn00000WtU9WIAV"
class="fr-link"
target="_blank"
rel="noopener">
Prendre rendez-vous avec un.e conseiller.e.
</a>
</p>
{/if}
</div>
{/snippet}

{#snippet publicSector()}
{@render csfFinancingAndOwnershipAdvices()}

<div class="fr-fieldset__element fr-mb-4w">
<Select
label={stepsContent.positionType.label}
required
options={stepsContent.positionType.options.map((stepContent) => ({
...stepContent,
selected: positionType === stepContent.value,
}))}
onChange={(e) => {
const { value } = e.target as HTMLSelectElement;

if (value) {
delete errors.positionType;
}

eligibilitySimulatorManager.positionType = value as PositionType;
}}
error={errors.positionType}
errorDataTestId={stepsContent.positionType.errorDataTestId} />
</div>

<div class="fr-fieldset__element fr-mb-4w">
<Select
label={stepsContent.positionStage.label}
required
options={stepsContent.positionStage.options.map((stepContent) => ({
...stepContent,
selected: positionStage === stepContent.value,
}))}
onChange={(e) => {
const { value } = e.target as HTMLSelectElement;

if (value) {
delete errors.positionStage;
}

eligibilitySimulatorManager.positionStage =
value === '' ? undefined : value === 'true' ? true : false;
}}
error={errors.positionStage}
errorDataTestId={stepsContent.positionStage.errorDataTestId} />
</div>
{/snippet}

{#snippet positionContractTypeSnippet()}
<div class="fr-fieldset__element fr-mb-4w">
<Select
Expand Down
5 changes: 5 additions & 0 deletions apps/frontend/src/lib/utils/seo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ const staticMetadataByPath: Record<string, Omit<SeoMetadata, 'pathname'>> = {
description:
"Service de conseil gratuit d'Action Logement pour vous accompagner dans votre projet d'achat en BRS et construire un plan de financement adapté.",
},
'/groupe-csf': {
title: 'Groupe CSF | Boris',
description:
"Service de conseil gratuit du Groupe CSF pour accompagner les fonctionnaires et salariés du secteur public dans leur projet d'achat en BRS.",
},
'/blog': {
title: 'Blog sur le Bail Réel Solidaire - BRS - BoRiS',
description:
Expand Down
93 changes: 93 additions & 0 deletions apps/frontend/src/routes/groupe-csf/+page.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<script lang="ts">
import Section from '$components/common/Section.svelte';
</script>

<svelte:head>
<title>Groupe CSF | Boris</title>
<meta
name="description"
content="Service de conseil gratuit du Groupe CSF pour accompagner les fonctionnaires et salariés du secteur public dans leur projet d'achat en BRS." />
</svelte:head>

<Section
title="Service de conseil en financement et en accession du Groupe CSF"
titleElement="h1">
<p>
<b>
Vous souhaitez devenir propriétaire grâce au Bail Réel Solidaire (BRS) ?
</b>
Le groupe CSF via sa filiale CRESERFI met à votre disposition un service de conseil
gratuit et personnalisé pour vous accompagner dans votre projet. Les conseillers
CRESERFI vous aident à évaluer la faisabilité de votre achat en BRS et à construire
votre plan de financement adapté à votre situation en y intégrant les prêts aidés
auxquels vous avez droit.
</p>

<iframe
class="aspect-video"
width="100%"
src="https://www.youtube.com/embed/7WAh11Io4s0"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen>
</iframe>

<p class="pt-6">
<b>Bon à savoir</b>
: Le Crédit Social des Fonctionnaires propose régulièrement des prêts complémentaires
aidés (à taux plus avantageux), dont une partie des intérêts est prise en charge
par l'association CSF, pour faciliter votre projet immobilier.
</p>

<h2 class="fr-mt-6w">À qui s’adresse ce service ?</h2>
<p>
Ce service est destiné aux fonctionnaires titulaires mais également à tous
les salariés du secteur public et des entreprises publiques quel que soit
leur type de contrat.
</p>
<p>
Le service de conseil en financement du groupe CSF peut également vous
accompagner pour d'autres projets qu'un achat en BRS,
<a
href="https://www.csf.fr/immobilier"
class="fr-link"
target="_blank"
rel="noopener">
en savoir plus
</a>
.
</p>

<h2 class="fr-mt-6w">Pourquoi choisir l’accompagnement du Groupe CSF</h2>
<ol>
<li>Service gratuit et sur mesure</li>
<li>
Détermination de votre capacité d’emprunt intégrant les aides possibles
</li>
<li>
Des conseillers spécialisés présents sur tout le territoire, disponibles
par téléphone, visio ou en RDV physique (plus de 100 points d’accueil)
</li>
<li>
Conseil et analyse totalement indépendants, gages de sérieux et de
fiabilité
</li>
</ol>

<a
class="fr-btn fr-btn--lg fr-my-2w"
href="https://www.csf.fr/immobilier/prendre-un-rendez-vous?idCampagne=701Tn00000WtU9WIAV"
target="_blank"
rel="noopener">
Solliciter le service de conseil en financement et en accession
</a>

<p class="fr-text--sm">
<i>
Un crédit engage et doit être remboursé, pensez à bien évaluer votre
capacité avant de vous lancer.
</i>
</p>
</Section>
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,24 @@ export const steps: Step[] = [
href="/action-logement">
En savoir plus
</a>

<h2 class="fr-h5 heading fr-mt-6w">Fonctionnaires ou salarié·es du secteur public ? Profitez du conseil en financement et en accession du Groupe CSF</h2>
<p>
Vous souhaitez devenir propriétaire grâce au Bail Réel Solidaire (BRS)
? Le groupe CSF via sa filiale CRESERFI met à votre disposition un
service de conseil gratuit et personnalisé pour vous accompagner dans
votre projet.
</p>
<p>
Les conseillers CRESERFI vous aident à évaluer la faisabilité de votre
achat en BRS et à construire votre plan de financement adapté à votre
situation en y intégrant les prêts aidés auxquels vous avez droit.
</p>
<a
class="fr-btn fr-btn--lg"
href="/groupe-csf">
En savoir plus
</a>
`,
},
{
Expand Down
Loading
Loading