{{-- Page Partenaires & Sous-traitants — portage fidele de maquettes/Partenaires.dc.html. Cette page n'affiche PAS de liste de partenaires (conforme a la maquette). Les partenaires sont geres en admin (CRUD Partenaire) et s'affichent dans le carrousel dedie de la page d'Accueil. Formulaire de candidature partenaire : POST route('leads.partenaire.store') (StoreCandidaturePartenaireRequest -> champs societe, personne_contact, telephone, email, metier, zone_intervention, message). Erreurs affichees via @error + old(), message de succes via session('succes') (CandidaturePartenaireController::store()). Modale "Etre rappele" : reutilise , declenchee par le bloc "Etre contacte" du sticky-actions (variante partner) et remplace fidelement la modale "openContact" de la maquette d'origine (memes libelles : titre, sous-titre, CTA "Etre rappele"). Contenu statique de la maquette (pas de champs backend correspondants a ce jour, repris tel quel) : "Pourquoi travailler avec Biome ?", "Metiers recherches", "Comment se deroule notre collaboration ?" et les "benefits" du bloc CTA final. --}} {{-- Ecart corrige (recette pixel-perfect) : la maquette Partenaires.dc.html passe active="" au Header (aucun lien de nav du haut mis en evidence, contrairement aux autres pages). Le portage initial passait 'partenaires' par erreur, ce qui coloriait a tort le lien "Partenaires & Sous-traitants" en bleu (--couleur-bleu-principal) alors que la maquette source le laisse en --couleur-texte-fonce comme les autres. Aligne ici sur la maquette. --}} @extends('layouts.site') @section('titre', 'Partenaires & Sous-traitants - Biome Constructions') @section('contenu') @php $pourquoi = [ ['titre' => 'Paiements rapides', 'texte' => 'Des paiements clairs et dans les délais.', 'icone' => 'M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20ZM12 7v10M9.5 9.5h3a2 2 0 0 1 0 4h-3'], ['titre' => 'Chantiers réguliers', 'texte' => 'Un volume de chantiers résidentiels toute l\'année.', 'icone' => 'M3 11.2 12 4l9 7.2M5.4 10.2V20h13.2v-9.8'], ['titre' => 'Projets en Wallonie', 'texte' => 'Des chantiers proches de chez vous.', 'icone' => 'M12 21s7-6.2 7-11a7 7 0 1 0-14 0c0 4.8 7 11 7 11Z'], ['titre' => 'Relation durable', 'texte' => 'Nous construisons des partenariats sur le long terme.', 'icone' => 'M12 9.5c1.2-2 4.5-1.6 4.5 1 0 2-2.5 3.5-4.5 5-2-1.5-4.5-3-4.5-5 0-2.6 3.3-3 4.5-1ZM3 21l3-4h4M21 21l-3-4h-4M6 17v-2M18 17v-2'], ]; // Grille des metiers recherches : 7 blocs explicites (icones finales // du client, plus de tableau generique), voir section METIERS // ci-dessous dans le gabarit. $etapes = [ ['n' => '1', 'texte' => 'Vous nous contactez via le formulaire ou par téléphone.'], ['n' => '2', 'texte' => 'Nous échangeons sur votre activité et vos disponibilités.'], ['n' => '3', 'texte' => 'Nous vous proposons un premier chantier adapté.'], ['n' => '4', 'texte' => 'Si la collaboration est concluante, nous construisons ensemble sur le long terme.'], ]; $benefices = [ 'Partenariat gagnant-gagnant', 'Respect des engagements', 'Collaboration simple et efficace', ]; // Formulaire de qualification en 4 ETAPES (voir // App\Http\Requests\StoreCandidaturePartenaireRequest et // public/js/site.js::initFormulairePartenaireEtapes). // // Champs de CHAQUE etape : sert a savoir si les erreurs affichees // (@error plus bas) concernent bien cette soumission, et surtout a // ROUVRIR le formulaire sur la premiere etape en erreur (le visiteur // ne doit pas avoir a rechercher lui-meme ce qui coince). $champsParEtape = [ 1 => ['metiers', 'effectif', 'statut_professionnel', 'statut_professionnel_autre', 'telephone'], 2 => ['zones', 'rayon_km', 'disponibilite', 'date_disponibilite'], 3 => ['preferences_contact', 'travaille_promoteur', 'promoteurs_actuels', 'message'], 4 => ['prenom', 'nom', 'societe', 'numero_tva', 'email', 'adresse', 'langue'], ]; $champsCandidature = array_merge(...array_values($champsParEtape)); $afficherErreurs = $errors->hasAny($champsCandidature); $afficherSucces = (bool) session('succes') && ! $afficherErreurs; // Premiere etape portant une erreur (1 par defaut). $etapeErreur = 1; foreach ($champsParEtape as $numero => $champs) { if ($errors->hasAny($champs)) { $etapeErreur = $numero; break; } } // Etape FACULTATIVE "photos de realisations" : proposee uniquement // juste apres l'envoi du profil (message de succes en flash) ET si la // session porte le jeton pose par le controleur. Voir // App\Http\Controllers\Leads\CandidaturePartenaireController. $peutJoindrePhotos = $afficherSucces && session()->has( App\Http\Controllers\Leads\CandidaturePartenaireController::CLE_SESSION_PHOTOS ); // Listes de reference. Source unique : config/site.php (les memes // servent a la validation cote serveur). $metiersOptions = config('site.partenaire.metiers', []); $zonesOptions = config('site.partenaire.zones', []); $effectifsOptions = config('site.partenaire.effectifs', []); $rayonsOptions = config('site.partenaire.rayons', []); $disponibilitesOptions = config('site.partenaire.disponibilites', []); $preferencesOptions = config('site.partenaire.preferences_contact', []); $statutsProOptions = config('site.partenaire.statuts_professionnels', []); $languesOptions = config('site.partenaire.langues', []); $photosContraintes = config('site.partenaire.photos', []); // Valeurs deja saisies, a repopuler apres une erreur de validation. $metiersChoisis = (array) old('metiers', []); $zonesChoisies = (array) old('zones', []); $preferencesChoisies = (array) old('preferences_contact', []); $dispoChoisie = (string) old('disponibilite', 'immediate'); $promoteurChoisi = (string) old('travaille_promoteur', '1'); $statutProChoisi = (string) old('statut_professionnel', ''); // Styles partages des champs (memes valeurs qu'avant, factorisees : // 4 etapes multiplient le nombre de champs, les repeter a l'identique // rendrait la vue illisible et les ecarts invisibles). $bordure = fn (string ...$champs): string => $errors->hasAny($champs) ? '#D64545' : '#DCE3EC'; $styleChamp = fn (string $champ): string => 'width:100%;box-sizing:border-box;height:50px;border:1.5px solid '.$bordure($champ).';border-radius:9px;padding:0 14px;font-family:var(--police-texte);font-size:15px;outline:none;color:var(--couleur-texte-titre-carte);background:#fff;'; $styleErreur = 'display:block;color:#D64545;font-size:12px;margin-top:5px;'; $styleLabel = 'display:block;font-family:var(--police-texte);font-size:14px;font-weight:600;color:var(--couleur-texte-titre-carte);margin-bottom:6px;'; $styleFieldset = fn (string ...$champs): string => 'border:1.5px solid '.$bordure(...$champs).';border-radius:9px;padding:12px 16px 14px;margin:0;min-width:0;'; $styleLegende = 'padding:0 6px;font-family:var(--police-texte);font-size:14px;font-weight:600;color:var(--couleur-texte-titre-carte);'; $styleCase = 'display:flex;align-items:center;gap:9px;font-family:var(--police-texte);font-size:14.5px;color:var(--couleur-texte-titre-carte);cursor:pointer;'; $styleInputCase = 'width:17px;height:17px;flex:none;accent-color:var(--couleur-bleu-principal);cursor:pointer;'; $styleBoutonPrincipal = 'display:flex;align-items:center;justify-content:center;gap:9px;background:var(--couleur-bleu-principal);color:#fff;border:none;border-radius:10px;height:54px;padding:0 26px;font-family:var(--police-titres);font-size:16px;font-weight:600;cursor:pointer;'; $styleBoutonSecondaire = 'display:flex;align-items:center;justify-content:center;gap:8px;background:#fff;color:var(--couleur-texte-titre-carte);border:1.5px solid #DCE3EC;border-radius:10px;height:54px;padding:0 22px;font-family:var(--police-titres);font-size:15px;font-weight:600;cursor:pointer;'; @endphp {{-- HERO --}}
@php $imgHero = \App\Support\MediaSite::url($contenu->contenu('hero.image')); @endphp @if ($imgHero) Partenaires Biome @else
Poignée de main sur un chantier
@endif
Partenaires & sous-traitants

Devenez partenaire de Biome Constructions

Nous collaborons avec des professionnels fiables pour construire des logements de qualité partout en Wallonie.

Devenir partenaire
{{-- FORMULAIRE + POURQUOI --}}

Intéressé par une collaboration ?

Faites-vous connaître, notre équipe vous recontacte rapidement.

@if ($afficherSucces) {{-- Bandeau de confirmation --}}

Profil enregistré !

{{ session('succes') }}

@if ($peutJoindrePhotos) {{-- ETAPE FACULTATIVE : photos de realisations, proposee APRES l'enregistrement (le profil est deja en base, quoi qu'il arrive ici). Reprend l'argument du plugin WordPress : voir le travail accompli aide l'equipe a qualifier, donc a rappeler plus vite. --}}
@csrf

Montrez-nous vos réalisations

C'est facultatif, mais voir votre travail nous aide à vous proposer les bons chantiers.

@error('photos'){{ $message }}@enderror @foreach ($errors->get('photos.*') as $messagesPhoto) {{ $messagesPhoto[0] }} @endforeach Passer — je ferai ça plus tard @endif @else {{-- Formulaire de qualification en 4 etapes. Navigation, barre de progression et champs conditionnels : voir public/js/site.js::initFormulairePartenaireEtapes(). NE PAS RENOMMER les attributs data-* : ils sont le contrat avec ce script. Sans JavaScript, les 4 etapes restent toutes visibles (le script est le seul a les masquer) et le formulaire s'envoie d'un bloc : aucun champ ne devient inaccessible. --}}
@csrf {{-- Id de la candidature creee a la validation de l'etape 1 (enregistrement partiel, pose par site.js) : la soumission finale complete la MEME ligne au lieu d'en creer une seconde. --}} {{-- Progression, posee sur un BANDEAU COLORE : c'est la seule surface franchement coloree du parcours, et elle remplace une barre sur fond blanc qui se remarquait peu. Les teintes des libelles viennent des variables --prog-atteinte / --prog-restante definies sur le bandeau (voir site.css) : le script les lit avec un repli, il reste donc utilisable sur fond clair ailleurs. NE PAS RENOMMER les attributs data-*. --}}
Votre candidature Étape 1 sur 4 · environ 2 minutes
@foreach (['Métiers', 'Zone & dispo', 'Collaboration', 'Identité'] as $libelleEtape) {!! $libelleEtape !!} @endforeach
{{-- ETAPE 1 : metiers et capacite --}}
Votre métier * (plusieurs choix possibles)
@foreach ($metiersOptions as $option) @endforeach
@error('metiers'){{ $message }}@enderror Sélectionnez au moins un métier.
@error('effectif'){{ $message }}@enderror
Statut professionnel *
@foreach ($statutsProOptions as $cle => $libelle) @endforeach
@error('statut_professionnel'){{ $message }}@enderror
{{-- Conditionnel : uniquement si "Autre" --}}
@error('statut_professionnel_autre'){{ $message }}@enderror
{{-- TELEPHONE demande des l'etape 1, comme sur le formulaire en ligne. C'est ce qui rend l'enregistrement partiel utile : un candidat qui abandonne aux etapes suivantes reste joignable. Il n'est donc PAS redemande a l'etape 4 (un seul champ, une seule valeur, aucun risque de divergence). --}}
@error('telephone'){{ $message }}@enderror
{{-- ETAPE 2 : zone et disponibilite --}}
Zone d'intervention * (plusieurs choix possibles)
@foreach ($zonesOptions as $option) @endforeach
@error('zones'){{ $message }}@enderror Sélectionnez au moins une zone d'intervention.
@error('rayon_km'){{ $message }}@enderror
Disponibilité *
@foreach ($disponibilitesOptions as $cle => $libelle) @endforeach
@error('disponibilite'){{ $message }}@enderror
{{-- Conditionnel : uniquement si "Disponible a partir du..." --}}
@error('date_disponibilite'){{ $message }}@enderror
{{-- ETAPE 3 : collaboration --}}
Comment préférez-vous être contacté ? * (plusieurs choix possibles)
@foreach ($preferencesOptions as $cle => $libelle) @endforeach
@error('preferences_contact'){{ $message }}@enderror Indiquez au moins un moyen de vous contacter.
Travaillez-vous déjà pour d'autres promoteurs ?
{{-- Conditionnel : uniquement si "Oui" --}}
@error('promoteurs_actuels'){{ $message }}@enderror
@error('message'){{ $message }}@enderror
{{-- ETAPE 4 : identite --}}
@error('prenom'){{ $message }}@enderror
@error('nom'){{ $message }}@enderror
@error('societe'){{ $message }}@enderror
@error('numero_tva'){{ $message }}@enderror
@error('email'){{ $message }}@enderror
@error('adresse'){{ $message }}@enderror
@error('langue'){{ $message }}@enderror
Vos informations sont confidentielles et ne seront jamais partagées.
@endif

Pourquoi travailler avec Biome ?

@foreach ($pourquoi as $w)

{!! $w['titre'] !!}

{!! $w['texte'] !!}

@endforeach
{{-- METIERS RECHERCHES --}}

Métiers recherchés

{{-- Macons --}}
Maçons
{{-- Couvreurs --}}
Couvreurs
{{-- Electriciens --}}
Électriciens
{{-- Plafonneurs : logo client, PNG --}}
Plafonneurs Plafonneurs
{{-- Menuisiers --}}
Menuisiers
{{-- Terrassiers : logo client, PNG --}}
Terrassiers Terrassiers
{{-- Architectes --}}
Architectes
{{-- PROCESS --}}

Comment se déroule notre collaboration ?

@foreach ($etapes as $etape)
{{ $etape['n'] }}

{!! $etape['texte'] !!}

@endforeach
{{-- CTA FINAL --}}
Partenariat

Vous cherchez un partenaire sérieux et organisé ?
Construisons ensemble des projets de qualité.

Devenir partenaire
@foreach ($benefices as $benefice)
{{ $benefice }}
@endforeach
@endsection