Outils pour utilisateurs

Outils du site


clients:cisn:immobilier

Ceci est une ancienne révision du document !


# Documentation technique - Projet Immobilier CISN

## 1. Vue d'ensemble du projet

### Objectifs et problématiques adressées Ce projet WordPress développé par CISN (Compagnie Immobilière du Sud de Nantes) vise à : - Présenter et gérer un double catalogue de biens immobiliers neufs et anciens - Intégrer deux flux de données distincts : Leizee (biens neufs) et Hektor/Périclès (biens anciens) - Proposer une recherche unifiée sur l'ensemble des biens disponibles - Fournir des outils de simulation financière (calculateurs) - Assurer la gestion des agences et références immobilières

### Contexte métier et utilisateurs cibles - Utilisateurs finaux : Particuliers recherchant un logement (neuf/ancien, achat/location) - Gestionnaires : Équipes CISN gérant les contenus et programmes - Partenaires :

  1. Leizee : logiciel de gestion immobilière (programmes neufs)
  2. Hektor/Périclès : logiciel de gestion des annonces traditionnelles

### Historique du projet et évolutions majeures - Version 2.0 du thème CISN Immobilier - Intégration du plugin WIA Leizee v2.0 pour la synchronisation Leizee - Architecture de recherche unifiée combinant deux sources de données - Système de sécurité CSP (Content Security Policy)

## 2. Architecture technique

### Stack technologique - CMS : WordPress - Thème personnalisé : CISN Immobilier v2.0 - Plugin principal : WIA Leizee v2.0 (interface API Leizee) - Framework CSS : Bootstrap 5 - Bibliothèques JavaScript :

  1. jQuery, Swiper.js, Leaflet.js, noUiSlider, Lity

- Sources de données :

1. **API Leizee** : Programmes immobiliers neufs
2. **CSV/Fichiers Hektor/Périclès** : Biens anciens (import via `/cisn_pericles`)

### Flux de données dual

#### 1. Flux Leizee (Biens neufs) - Source : API Leizee - Plugin : WIA Leizee v2.0 - Stockage :

  1. Custom Posts `programme`
  2. Tables dédiées : `wp_leizee_lot`, `wp_leizee_annexe`

- Synchronisation : Automatique via API

#### 2. Flux Hektor/Périclès (Biens anciens) - Source : Fichiers CSV depuis dossier `../cisn_pericles` - Stockage : Table `wp_pericles_annonce` - Synchronisation : Import batch via endpoint `/api/sync`

### Architecture de recherche unifiée Le système utilise une requête UNION complexe dans `functions-biens.php:searchBiens()` pour interroger simultanément : - Table Hektor : `pericles_annonce` - Table Leizee : `leizee_lot`

Cette architecture permet une recherche transparente sur l'ensemble du catalogue.

## 3. Structure du code

### Organisation des répertoires ``` wp-content/themes/ ├── functions-biens.php (★ logique de recherche unifiée) ├── page-recherche.php (interface de recherche) ├── parts/ │ ├── detail-annonce-hektor.php (template biens anciens) │ ├── detail-annonce-leizee.php (template biens neufs) │ └── detail-annonce-autre.php (template générique) └── css/, js/, blocks/

wp-content/plugins/wia-leizee/ ├── wia-leizee.php └── inc/classes/wia_leizee_import-class.php (★ import API Leizee) ```

### Modules principaux

#### 1. Moteur de recherche unifiée (`functions-biens.php`) - Fonction centrale : `searchBiens($r, $save = TRUE)` - Responsabilités :

  1. Construction de requêtes SQL parallèles pour Hektor et Leizee
  2. Unification des résultats via UNION
  3. Gestion des filtres (prix, surface, lieu, type, dispositifs)
  4. Mapping des champs entre les deux systèmes

#### 2. Gestion des templates dynamiques - Logique : Détection automatique du type de bien par préfixe ID

  1. `P` = Hektor/Périclès → `detail-annonce-hektor.php`
  2. `L` = Leizee → `detail-annonce-leizee.php`

- Implémentation : Hook `template_include` dans `functions-biens.php:125`

#### 3. Plugin WIA Leizee - Import automatique : Synchronisation API Leizee vers WordPress - Tables dédiées : Création de `leizee_lot` et `leizee_annexe` - Actions WordPress : `astraga_wia_leizee_lot` pour post-traitement

## 4. Fonctionnalités clés

### 4.1 Système de recherche dual La recherche combine intelligemment deux sources :

```sql – Exemple simplifié de la logique UNION SELECT * FROM pericles_annonce WHERE [filtres Hektor] UNION SELECT * FROM leizee_lot WHERE [filtres Leizee adaptés] ```

Adaptations par source : - Prix : `pv` (Hektor) vs `prix_valeur` (Leizee) - Surface : `surf_hab` vs `surface_totale_number` - Ville : Gestion spéciale Leizee avec `ville_rattachement`

### 4.2 Filtres de recherche avancés - Types de biens : Appartement, Maison, Terrain, etc. - Géolocalisation : Gestion des villes et rattachements - Budget : Prix d'achat ou loyers - Caractéristiques : Surface, nombre de pièces - Dispositifs : BRS, PSLA (codes 21 et 4 dans Leizee)

### 4.3 Gestion géographique complexe - Fonction : `getRealCityNames()` pour normalisation des noms - Cas spécial : “Pornic” vs “Pornichet” - Leizee : Support `ville_rattachement` + jointures sur CPTs WordPress

## 5. Base de données

### Tables principales

#### Tables Leizee (créées automatiquement) ```sql wp_leizee_lot (

idlot, ville_nom, ville_lat, ville_lon, ville_rattachement,
prix_valeur, surface_totale_number, nb_pieces, dispositif_aide

)

wp_leizee_annexe (

idlot, idtype, libelle, surface

) ```

#### Table Hektor/Périclès ```sql wp_pericles_annonce (

no_asp, pv, surf_hab, nb_pce, ville, type_bien, transaction

) ```

### Synchronisation des données

#### Processus Leizee 1. Avant import : Dépublication programmes (`wia_leizee_import_before`) 2. Import API : Création/MAJ Custom Posts + meta fields 3. Post-traitement : Insertion dans `leizee_lot` via action `astraga_wia_leizee_lot` 4. Finalisation : Republication conditionnelle (`wia_leizee_should_skip`)

#### Processus Hektor 1. Import CSV : Lecture fichiers depuis `../cisn_pericles` 2. Endpoint : `/api/sync` pour déclenchement manuel 3. Stockage direct : Table `pericles_annonce`

## 6. Recherche de biens - Analyse technique

### Architecture de la requête unifiée

La fonction `searchBiens()` constitue le cœur du système. Elle génère une requête complexe combinant deux sources :

```php function searchBiens($r, $save = TRUE) {

  global $wpdb, $question, $map, $typesBiens;
  
  // 1. Construction des filtres Hektor
  $where = array();
  $where['type'] = 'type_bien IN (...)';
  $where['lieu'] = 'ville = "..."';
  $where['prix'] = 'pv BETWEEN ... AND ...';
  
  // 2. Adaptation pour Leizee  
  $whereLeizee = $where;
  $whereLeizee['prix'] = str_replace('pv ', 'prix_valeur ', $where['prix']);
  $whereLeizee['lieu'] = '(ville_nom IN (...) OR ville_rattachement IN (...))';
  
  // 3. UNION des deux requêtes
  $sql = "SELECT * FROM pericles_annonce WHERE " . implode(' AND ', $where) . "
          UNION
          SELECT * FROM leizee_lot WHERE " . implode(' AND ', $whereLeizee);

} ```

### Gestion des spécificités par source

#### Mapping des champs ```php $map = array(

  'prix' => 'pv',           // Hektor
  'loyer' => 'loyer_cc',    // Hektor  
  'ville' => 'ville',       // Hektor

);

Adaptation automatique pour Leizee : 'pv' → 'prix_valeur' 'surf_hab' → 'surface_totale_number' 'nb_pce' → 'nb_pieces' ```

#### Cas complexes

Gestion géographique Leizee : ```php if (isset($whereLeizee['lieu'])) {

  $whereLeizee['lieu'] = '(
      ville_nom IN (' . $cities . ')
      OR ville_rattachement IN (' . $cities . ')  
      OR idlot IN (
          -- Jointure complexe avec les CPT WordPress ville
          select w.meta_value from wp_postmeta w 
          where w.meta_key="wia_leizee_lot_idlot" 
          and w.post_id in (...)
      )
  )';

} ```

Dispositifs d'aide : ```php if ($dispositif === 1) { BRS $where['dispositif'] = 'dispositif_aide = 21'; } elseif ($dispositif === 2) { PSLA

  $where['dispositif'] = 'dispositif_aide = 4';

} ```

## 7. API et interfaces

### Endpoints REST - `/api/search` : Recherche unifiée de biens - `/api/sync` : Import données Hektor/Périclès - `/api/rappeler` : Demande de rappel - `/api/contacter` : Contact agence - `/api/envoi-fiche` : Envoi fiche bien

### API Leizee - Authentification : Configurée dans plugin WIA Leizee - Synchronisation : Import programmes + lots automatique - Webhook : Actions WordPress pour post-traitement

### Shortcodes disponibles - `[programmes]` : Liste programmes Leizee avec pagination - `[calculateur_mensualites]` : Simulateur mensualités - `[calculateur_emprunt]` : Simulateur capacité emprunt

## 8. Sécurité et performance

### Content Security Policy ```php $cspWhitelist = [

  'cisn.immo', 'leizee.com', 'google.com', 
  'openstreetmap.org', 'estimator.cityscan.fr'

]; ```

### Optimisations requêtes - Index BDD : Sur `idlot`, `ville_nom`, `prix_valeur` (Leizee) - Pagination : Native WordPress pour programmes - Cache : Sessions PHP pour dernière recherche utilisateur

## 9. Maintenance et évolution

### Points d'attention 1. Synchronisation : Surveillance des imports Leizee et Hektor 2. Mapping champs : Évolutions des APIs externes 3. Performance : Optimisation requêtes UNION 4. Géolocalisation : Maintenance table correspondances villes

### Logs et monitoring - Import Leizee : Actions WordPress `wia_leizee_*` - Erreurs SQL : Logs WordPress standards - API Hektor : Endpoint `/api/sync` avec retours JSON

## 10. Glossaire technique

- UNION SQL : Combinaison des résultats de deux tables distinctes - Leizee : Logiciel immobilier neuf avec API REST - Hektor/Périclès : Logiciel traditionnel avec export CSV - WIA : Web Images Associées (développeur plugin) - CPT : Custom Post Types WordPress - ACF : Advanced Custom Fields - CSP : Content Security Policy

clients/cisn/immobilier.1757337836.txt.gz · Dernière modification : 2025/09/08 13:23 de cmantika