EN · DE · RU · FR · ES

#824 : AddressExport.kt

projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt @Service("addressExport") — Service d'export Excel, projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressExport.kt 216 lignes · 157 code · 35 commentaires · 24 vides
Service Spring qui exporte les données d'adresse dans des classeurs Excel (.xlsx). Gère l'enregistrement des colonnes, le filtrage basé sur les droits d'accès et les lignes d'en-tête fusionnées en plusieurs sections pour les blocs d'adresses postale, professionnelle, privée et de courrier.

Architecture

Hiérarchie des classes

AddressExport est une classe open annotée avec @Service("addressExport"), conçue pour être étendue par des plugins. Le plugin marketing AddressCampaignValueExport l'étend, en redéfinissant registerAdditionalCols(), configureSheet() et handleAddressCampaign() pour ajouter des champs spécifiques aux campagnes.

Enregistrement des colonnes (registerCols)

Enregistre environ 40 colonnes dans l'ordre :

  1. Identité : name, firstName, form, title, contactStatus
  2. Organisation : organization, division, positionText, communicationLanguage
  3. Point d'extension plugin : registerAdditionalCols() — point extensible pour les valeurs de campagne
  4. Contact : email, website
  5. Adresse postale : addressText, addressText2, zipCode, city, country, state
  6. Adresse professionnelle : bloc complet (auto-enregistré via registerAddress(sheet, ""))
  7. Adresse de courrier : bloc complet (registerAddress(sheet, "postal"))
  8. Téléphones : businessPhone, fax, mobilePhone
  9. Privé : bloc d'adresse complet, privateEmail, privatePhone, privateMobilePhone
  10. Métadonnées : birthday, lastUpdate, comment, fingerprint, publicKey, id

Les constantes de taille de ExcelUtils.Size contrôlent les largeurs de colonnes : STANDARD (par défaut), EMAIL, ZIPCODE, PHONENUMBER, EXTRA_LONG.

Flux d'export (export())

  1. Contrôle d'accès : Les membres de FINANCE_GROUP ou MARKETING_GROUP reçoivent toutes les adresses ; les autres utilisateurs reçoivent uniquement leurs favoris personnels (correspondance via personalAddressMap).
  2. Création du classeur : Utilise ExcelWorkbook de Merlin avec try-with-resources via .use { }.
  3. Configuration de la feuille : Ligne de titre, ligne d'en-tête en gras, volet figé à (2,2) et filtre automatique sur la ligne d'en-tête.
  4. Régions d'en-tête fusionnées : Quatre régions de cellules fusionnées dans la ligne 0 regroupent les colonnes d'adresse postale, professionnelle, de courrier et privée sous des en-têtes de section en gras.
  5. Appel au point d'extension : configureSheet(sheet, *params) pour la personnalisation par sous-classe.
  6. Remplissage des lignes : Chaque adresse devient une ligne Excel. Appelle ExcelUtils.autoFill() pour le mappage standard des propriétés, remplit manuellement les cellules d'adresse postale et la langue de communication, puis invoque handleAddressCampaign() pour les données de campagne.

Points d'extension

Historique Git

868d6abb7 2025 -> 2026
83cbccb11 ExcelUtils AddressExport: stream.use (les flux n'étaient-ils pas fermés avant ?)
78a38ca8f ExcelUtils.createFont et utilisé par toutes les routines de création de polices Excel.
63081666f En-têtes de fichiers source : 2024 -> 2025.
4c04cfd65 CHANGEMENT MAJEUR ! Migration des identifiants entiers vers des identifiants Long
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.
dce7927f4 Fonction Kotlin dépréciée decapitalize() remplacée
5f7ef41b8 Copyright 2021 -> 2022
e1538819c Merlin : utilisation maintenant de l'auto-fermeture d'ExcelWorkbook
91554ea83 Nouvelle version de Merlin.