|
|
|
@ -102,84 +102,84 @@ void _showExcelCompatibilityError() { |
|
|
|
} |
|
|
|
|
|
|
|
Future<void> _downloadExcelTemplate() async { |
|
|
|
try { |
|
|
|
// Créez un nouveau fichier Excel |
|
|
|
final excel = Excel.createExcel(); |
|
|
|
|
|
|
|
// Supprimez la feuille par défaut si elle existe |
|
|
|
excel.delete('Sheet1'); |
|
|
|
|
|
|
|
// Créez une nouvelle feuille nommée "Produits" |
|
|
|
final sheet = excel['Produits']; |
|
|
|
|
|
|
|
// Ajoutez les en-têtes |
|
|
|
final headers = ['Nom', 'Prix', 'Catégorie', 'Description', 'Stock']; |
|
|
|
for (int i = 0; i < headers.length; i++) { |
|
|
|
final cell = sheet.cell(CellIndex.indexByColumnRow(columnIndex: i, rowIndex: 0)); |
|
|
|
cell.value = headers[i]; |
|
|
|
cell.cellStyle = CellStyle( |
|
|
|
bold: true, |
|
|
|
backgroundColorHex: '#E8F4FD', |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
// Ajoutez des exemples de données |
|
|
|
final examples = [ |
|
|
|
['Croissant', '1.50', 'Sucré', 'Délicieux croissant beurré', '20'], |
|
|
|
['Sandwich jambon', '4.00', 'Salé', 'Sandwich fait maison', '15'], |
|
|
|
['Jus d\'orange', '2.50', 'Jus', 'Jus d\'orange frais', '30'], |
|
|
|
['Gâteau chocolat', '18.00', 'Gateaux', 'Gâteau au chocolat portion 8 personnes', '5'], |
|
|
|
]; |
|
|
|
|
|
|
|
for (int row = 0; row < examples.length; row++) { |
|
|
|
for (int col = 0; col < examples[row].length; col++) { |
|
|
|
final cell = sheet.cell(CellIndex.indexByColumnRow(columnIndex: col, rowIndex: row + 1)); |
|
|
|
cell.value = examples[row][col]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Définissez la largeur des colonnes |
|
|
|
sheet.setColWidth(0, 20); |
|
|
|
sheet.setColWidth(1, 10); |
|
|
|
sheet.setColWidth(2, 15); |
|
|
|
sheet.setColWidth(3, 30); |
|
|
|
sheet.setColWidth(4, 10); |
|
|
|
|
|
|
|
// Sauvegardez le fichier Excel |
|
|
|
final bytes = excel.save(); |
|
|
|
|
|
|
|
if (bytes == null) { |
|
|
|
Get.snackbar('Erreur', 'Impossible de créer le fichier modèle'); |
|
|
|
return; |
|
|
|
} |
|
|
|
try { |
|
|
|
// Créer un fichier Excel temporaire comme modèle |
|
|
|
final excel = Excel.createExcel(); |
|
|
|
|
|
|
|
// Demandez à l'utilisateur où sauvegarder le fichier |
|
|
|
final String? outputFile = await FilePicker.platform.saveFile( |
|
|
|
fileName: 'modele_import_produits.xlsx', |
|
|
|
allowedExtensions: ['xlsx'], |
|
|
|
type: FileType.custom, |
|
|
|
); |
|
|
|
// // Renommer la feuille par défaut |
|
|
|
// excel.rename('Sheet1', 'Produits'); |
|
|
|
|
|
|
|
if (outputFile != null) { |
|
|
|
try { |
|
|
|
// Écrivez les données dans le fichier |
|
|
|
await File(outputFile).writeAsBytes(bytes); |
|
|
|
Get.snackbar( |
|
|
|
'Succès', |
|
|
|
'Modèle téléchargé avec succès\n$outputFile', |
|
|
|
duration: const Duration(seconds: 4), |
|
|
|
backgroundColor: Colors.green, |
|
|
|
colorText: Colors.white, |
|
|
|
// Accéder à la feuille renommée |
|
|
|
final sheet = excel['Sheet1']; |
|
|
|
|
|
|
|
// Ajouter les en-têtes avec du style |
|
|
|
final headers = ['Nom', 'Prix', 'Catégorie', 'Description', 'Stock']; |
|
|
|
for (int i = 0; i < headers.length; i++) { |
|
|
|
final cell = sheet.cell(CellIndex.indexByColumnRow(columnIndex: i, rowIndex: 0)); |
|
|
|
cell.value = headers[i]; |
|
|
|
cell.cellStyle = CellStyle( |
|
|
|
bold: true, |
|
|
|
backgroundColorHex: '#E8F4FD', |
|
|
|
); |
|
|
|
} catch (e) { |
|
|
|
Get.snackbar('Erreur', 'Impossible d\'écrire le fichier: $e'); |
|
|
|
} |
|
|
|
|
|
|
|
// Ajouter des exemples |
|
|
|
final examples = [ |
|
|
|
['Croissant', '1.50', 'Sucré', 'Délicieux croissant beurré', '20'], |
|
|
|
['Sandwich jambon', '4.00', 'Salé', 'Sandwich fait maison', '15'], |
|
|
|
['Jus d\'orange', '2.50', 'Jus', 'Jus d\'orange frais', '30'], |
|
|
|
['Gâteau chocolat', '18.00', 'Gateaux', 'Gâteau au chocolat portion 8 personnes', '5'], |
|
|
|
]; |
|
|
|
|
|
|
|
for (int row = 0; row < examples.length; row++) { |
|
|
|
for (int col = 0; col < examples[row].length; col++) { |
|
|
|
final cell = sheet.cell(CellIndex.indexByColumnRow(columnIndex: col, rowIndex: row + 1)); |
|
|
|
cell.value = examples[row][col]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Ajuster la largeur des colonnes |
|
|
|
sheet.setColWidth(0, 20); // Nom |
|
|
|
sheet.setColWidth(1, 10); // Prix |
|
|
|
sheet.setColWidth(2, 15); // Catégorie |
|
|
|
sheet.setColWidth(3, 30); // Description |
|
|
|
sheet.setColWidth(4, 10); // Stock |
|
|
|
|
|
|
|
// Sauvegarder en mémoire |
|
|
|
final bytes = excel.save(); |
|
|
|
|
|
|
|
if (bytes == null) { |
|
|
|
Get.snackbar('Erreur', 'Impossible de créer le fichier modèle'); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// Demander où sauvegarder |
|
|
|
final String? outputFile = await FilePicker.platform.saveFile( |
|
|
|
fileName: 'modele_import_produits.xlsx', |
|
|
|
allowedExtensions: ['xlsx'], |
|
|
|
type: FileType.custom, |
|
|
|
); |
|
|
|
|
|
|
|
if (outputFile != null) { |
|
|
|
try { |
|
|
|
await File(outputFile).writeAsBytes(bytes); |
|
|
|
Get.snackbar( |
|
|
|
'Succès', |
|
|
|
'Modèle téléchargé avec succès\n$outputFile', |
|
|
|
duration: const Duration(seconds: 4), |
|
|
|
backgroundColor: Colors.green, |
|
|
|
colorText: Colors.white, |
|
|
|
); |
|
|
|
} catch (e) { |
|
|
|
Get.snackbar('Erreur', 'Impossible d\'écrire le fichier: $e'); |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
Get.snackbar('Erreur', 'Erreur lors de la création du modèle: $e'); |
|
|
|
debugPrint('Erreur création modèle Excel: $e'); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
Get.snackbar('Erreur', 'Erreur lors de la création du modèle: $e'); |
|
|
|
debugPrint('Erreur création modèle Excel: $e'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Future<void> _importFromExcel() async { |
|
|
|
|