4 changed files with 300 additions and 239 deletions
@ -60,6 +60,8 @@ class PlatformPrintService { |
|||||
'ville': 'Madagascar', |
'ville': 'Madagascar', |
||||
'contact': '261348415301', |
'contact': '261348415301', |
||||
'email': '[email protected]', |
'email': '[email protected]', |
||||
|
'nif': '4002141594', |
||||
|
'stat': '10715 33 2025 0 00414', |
||||
}; |
}; |
||||
|
|
||||
final factureNumber = |
final factureNumber = |
||||
@ -69,12 +71,18 @@ class PlatformPrintService { |
|||||
pdf.addPage( |
pdf.addPage( |
||||
pw.Page( |
pw.Page( |
||||
pageFormat: ticket58mmFormat, |
pageFormat: ticket58mmFormat, |
||||
|
margin: const pw.EdgeInsets.all(2), // 🔧 Marges minimales |
||||
build: (pw.Context context) { |
build: (pw.Context context) { |
||||
return pw.Column( |
return pw.Container( |
||||
crossAxisAlignment: pw.CrossAxisAlignment.center, |
width: double.infinity, // 🔧 Forcer la largeur complète |
||||
|
child: pw.Column( |
||||
|
crossAxisAlignment: |
||||
|
pw.CrossAxisAlignment.start, // 🔧 Alignement à gauche |
||||
children: [ |
children: [ |
||||
// En-tête Restaurant (centré et compact) |
// En-tête Restaurant (centré et compact) |
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
restaurantInfo['nom']!, |
restaurantInfo['nom']!, |
||||
style: pw.TextStyle( |
style: pw.TextStyle( |
||||
fontSize: titleSize, |
fontSize: titleSize, |
||||
@ -82,26 +90,36 @@ class PlatformPrintService { |
|||||
), |
), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 1), |
pw.SizedBox(height: 1), |
||||
|
|
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
restaurantInfo['adresse']!, |
restaurantInfo['adresse']!, |
||||
style: pw.TextStyle(fontSize: smallSize), |
style: pw.TextStyle(fontSize: smallSize), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
restaurantInfo['ville']!, |
restaurantInfo['ville']!, |
||||
style: pw.TextStyle(fontSize: smallSize), |
style: pw.TextStyle(fontSize: smallSize), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
'Tel: ${restaurantInfo['contact']!}', |
'Tel: ${restaurantInfo['contact']!}', |
||||
style: pw.TextStyle(fontSize: smallSize), |
style: pw.TextStyle(fontSize: smallSize), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 3), |
pw.SizedBox(height: 3), |
||||
|
|
||||
@ -115,7 +133,9 @@ class PlatformPrintService { |
|||||
pw.SizedBox(height: 2), |
pw.SizedBox(height: 2), |
||||
|
|
||||
// Informations ticket |
// Informations ticket |
||||
pw.Row( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Row( |
||||
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, |
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, |
||||
children: [ |
children: [ |
||||
pw.Text( |
pw.Text( |
||||
@ -125,16 +145,15 @@ class PlatformPrintService { |
|||||
fontWeight: pw.FontWeight.bold, |
fontWeight: pw.FontWeight.bold, |
||||
), |
), |
||||
), |
), |
||||
pw.Text( |
|
||||
'Via: ${commande.tablename ?? 'Table inconnue'}', |
|
||||
style: pw.TextStyle(fontSize: bodySize), |
|
||||
), |
|
||||
], |
], |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 1), |
pw.SizedBox(height: 1), |
||||
|
|
||||
pw.Row( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Row( |
||||
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, |
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, |
||||
children: [ |
children: [ |
||||
pw.Text( |
pw.Text( |
||||
@ -147,6 +166,7 @@ class PlatformPrintService { |
|||||
), |
), |
||||
], |
], |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 2), |
pw.SizedBox(height: 2), |
||||
|
|
||||
@ -163,19 +183,25 @@ class PlatformPrintService { |
|||||
...commande.items |
...commande.items |
||||
.map( |
.map( |
||||
(item) => pw.Container( |
(item) => pw.Container( |
||||
|
width: double.infinity, // 🔧 Largeur complète |
||||
margin: const pw.EdgeInsets.only(bottom: 1), |
margin: const pw.EdgeInsets.only(bottom: 1), |
||||
child: pw.Column( |
child: pw.Column( |
||||
crossAxisAlignment: pw.CrossAxisAlignment.start, |
crossAxisAlignment: pw.CrossAxisAlignment.start, |
||||
children: [ |
children: [ |
||||
// Nom du plat |
// Nom du plat |
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
'${item.menuNom}', |
'${item.menuNom}', |
||||
style: pw.TextStyle(fontSize: bodySize), |
style: pw.TextStyle(fontSize: bodySize), |
||||
maxLines: 2, |
maxLines: 2, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
// Quantité, prix unitaire et total sur une ligne |
// Quantité, prix unitaire et total sur une ligne |
||||
pw.Row( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Row( |
||||
mainAxisAlignment: |
mainAxisAlignment: |
||||
pw.MainAxisAlignment.spaceBetween, |
pw.MainAxisAlignment.spaceBetween, |
||||
children: [ |
children: [ |
||||
@ -192,6 +218,7 @@ class PlatformPrintService { |
|||||
), |
), |
||||
], |
], |
||||
), |
), |
||||
|
), |
||||
], |
], |
||||
), |
), |
||||
), |
), |
||||
@ -210,7 +237,9 @@ class PlatformPrintService { |
|||||
pw.SizedBox(height: 2), |
pw.SizedBox(height: 2), |
||||
|
|
||||
// Total |
// Total |
||||
pw.Row( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Row( |
||||
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, |
mainAxisAlignment: pw.MainAxisAlignment.spaceBetween, |
||||
children: [ |
children: [ |
||||
pw.Text( |
pw.Text( |
||||
@ -229,15 +258,19 @@ class PlatformPrintService { |
|||||
), |
), |
||||
], |
], |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 3), |
pw.SizedBox(height: 3), |
||||
|
|
||||
// Mode de paiement |
// Mode de paiement |
||||
pw.Text( |
pw.Container( |
||||
'Paiement: ${_getPaymentMethodText(paymentMethod)}', |
width: double.infinity, |
||||
|
child: pw.Text( |
||||
|
'Paiement: ${paymentMethod.toLowerCase()}', |
||||
style: pw.TextStyle(fontSize: bodySize), |
style: pw.TextStyle(fontSize: bodySize), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 3), |
pw.SizedBox(height: 3), |
||||
|
|
||||
@ -251,7 +284,9 @@ class PlatformPrintService { |
|||||
pw.SizedBox(height: 2), |
pw.SizedBox(height: 2), |
||||
|
|
||||
// Message de remerciement |
// Message de remerciement |
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
'Merci de votre visite !', |
'Merci de votre visite !', |
||||
style: pw.TextStyle( |
style: pw.TextStyle( |
||||
fontSize: bodySize, |
fontSize: bodySize, |
||||
@ -259,33 +294,44 @@ class PlatformPrintService { |
|||||
), |
), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
'A bientôt !', |
'A bientôt !', |
||||
style: pw.TextStyle(fontSize: smallSize), |
style: pw.TextStyle(fontSize: smallSize), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 3), |
pw.SizedBox(height: 3), |
||||
|
|
||||
// Code de suivi (optionnel) |
// Code de suivi (optionnel) |
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
'Code: ${factureNumber}', |
'Code: ${factureNumber}', |
||||
style: pw.TextStyle(fontSize: smallSize), |
style: pw.TextStyle(fontSize: smallSize), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 4), |
pw.SizedBox(height: 4), |
||||
|
|
||||
// Ligne de découpe |
// Ligne de découpe |
||||
pw.Text( |
pw.Container( |
||||
|
width: double.infinity, |
||||
|
child: pw.Text( |
||||
'- - - - - - - - - - - - - - - -', |
'- - - - - - - - - - - - - - - -', |
||||
style: pw.TextStyle(fontSize: smallSize), |
style: pw.TextStyle(fontSize: smallSize), |
||||
textAlign: pw.TextAlign.center, |
textAlign: pw.TextAlign.center, |
||||
), |
), |
||||
|
), |
||||
|
|
||||
pw.SizedBox(height: 2), |
pw.SizedBox(height: 2), |
||||
], |
], |
||||
|
), |
||||
); |
); |
||||
}, |
}, |
||||
), |
), |
||||
|
|||||
Loading…
Reference in new issue