ImportService/README.md

116 lines
2.7 KiB
Markdown

# 📦 Import CSV & Excel Service (Symfony)
Un service Symfony modulaire pour importer, valider et transformer automatiquement des fichiers **CSV** et **Excel** (XLS/XLSX). Idéal pour les pipelines d'importation robustes avec gestion des erreurs et validation dynamique.
---
## 🚀 Installation
Ajoutez ce package via Composer :
```bash
composer require sudalys/import-service
```
---
## 📂 Fonctionnalités
- ✅ Import de fichiers `.csv`, `.xls`, `.xlsx`
- ⚖️ Validation dynamique des colonnes avec regex
- 📊 Log des erreurs via le logger Symfony (PSR-3)
- 📃 Colonne obligatoire supportée
- ⚙️ Architecture extensible via des `Processor`
- 🔄 Conversion automatique des `.xls` vers `.xlsx`
- ❌ Suppression des colonnes vides pour éviter les erreurs de duplicat
---
## 🚀 Utilisation
Voici un exemple typique dans votre contrôleur ou service d'importation :
```php
if (strtolower(pathinfo($filePath, PATHINFO_EXTENSION)) === 'xlsx' || strtolower(pathinfo($filePath, PATHINFO_EXTENSION)) === 'xls') {
$filePath = $excelTransformer->transform($filePath, 'Csv', 3); // 3 correspond à la ligne d'entête
}
$result = $importService->import(
$filePath,
$this->HeaderGeneral,
$this->regexListe,
$this->ColonneObligatoire,
$logger
);
```
---
## 🧑‍💻 Exemple d'Importation dans le Contrôleur
Dans votre contrôleur ou service, n'oubliez pas d'importer les classes nécessaires pour utiliser le service d'importation :
```php
use Sudalys\ImportService\CsvImportService;
use Sudalys\ImportService\ExcelFileTransformer;
```
---
## 🔧 Configuration attendue
- `$HeaderGeneral` : tableau des en-têtes attendues (ordre et contenu exact)
- `$regexListe` : tableau associatif `colonne => regex`
- `$ColonneObligatoire` : tableau contenant les noms de colonnes obligatoires
---
## 🚫 Gestion des erreurs
Les erreurs de validation sont automatiquement loggées via `LoggingErrorHandler` qui utilise le logger PSR-3 de Symfony.
---
## 🌐 Transformations Excel
Géré via `ExcelFileTransformer` :
- Conversion `.xls``.xlsx`
- Extraction des données via `Box\Spout`
- Ignorer les lignes pré-étêtées via `$headerPosition`
- Formatage des dates
---
## ⚙️ Configuration du Service dans `services.yaml`
Pour que le service fonctionne correctement dans Symfony, ajoutez la configuration suivante dans votre fichier `services.yaml` :
```yaml
services:
Sudalys\ImportService\:
resource: '../vendor/sudalys/import-service/src/Service/Import/'
autowire: true
autoconfigure: true
public: false
```
---
## 🎓 Exigences
- PHP >= 8.1
- Symfony >= 5.4
- Extensions PHP : `ext-fileinfo`, `ext-mbstring`
---
## 📄 License
MIT