You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
8.6 KiB
220 lines
8.6 KiB
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:youmazgestion/Components/app_bar.dart';
|
|
import 'package:youmazgestion/Views/voirPlus.dart';
|
|
import 'package:youmazgestion/controller/HistoryController.dart';
|
|
import '../Models/Order.dart';
|
|
import 'package:youmazgestion/Views/detailHistory.dart';
|
|
import 'package:intl/intl.dart';
|
|
|
|
class HistoryDetailPage extends StatelessWidget {
|
|
final DateTime selectedDate;
|
|
final HistoryController controller = Get.find();
|
|
double totalSum = 0.0;
|
|
late Future<Map<String, int>> productQuantities;
|
|
|
|
HistoryDetailPage({super.key, required this.selectedDate}) {
|
|
calculateTotalSum();
|
|
totalQuantity();
|
|
}
|
|
|
|
void calculateTotalSum() {
|
|
totalSum = controller.getTotalSumOrdersByStartDate(selectedDate);
|
|
}
|
|
|
|
void totalQuantity() {
|
|
productQuantities = controller.getProductQuantitiesByDate(selectedDate);
|
|
print(productQuantities);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return GetBuilder<HistoryController>(
|
|
init: controller,
|
|
builder: (controller) {
|
|
return Scaffold(
|
|
appBar: CustomAppBar(title: 'Historique de la journée'),
|
|
body: Column(
|
|
children: [
|
|
Padding(
|
|
padding: const EdgeInsets.all(20.0),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
|
children: [
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
controller.refreshOrders();
|
|
calculateTotalSum();
|
|
},
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: Colors.deepOrange,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(20.0),
|
|
),
|
|
),
|
|
child: const Row(
|
|
children: [
|
|
Icon(Icons.refresh, color: Colors.white),
|
|
SizedBox(width: 5),
|
|
Text(
|
|
'Rafraîchir',
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 16.0,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
ElevatedButton(
|
|
onPressed: () {
|
|
Navigator.push(
|
|
context,
|
|
MaterialPageRoute(
|
|
builder: (context) =>
|
|
FutureBuilder<Map<String, int>>(
|
|
future: productQuantities,
|
|
builder: (context, snapshot) {
|
|
if (snapshot.connectionState ==
|
|
ConnectionState.waiting) {
|
|
return const CircularProgressIndicator();
|
|
} else if (snapshot.hasError) {
|
|
return Text('Error: ${snapshot.error}');
|
|
} else {
|
|
return VoirPlusPage(
|
|
productQuantities: snapshot.data!);
|
|
}
|
|
},
|
|
),
|
|
),
|
|
);
|
|
},
|
|
style: ElevatedButton.styleFrom(
|
|
backgroundColor: Colors.deepOrange,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(20.0),
|
|
),
|
|
),
|
|
child: const Row(
|
|
children: [
|
|
Icon(Icons.feed_outlined, color: Colors.white),
|
|
SizedBox(width: 5),
|
|
Text(
|
|
'Voir Plus',
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 16.0,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
Text(
|
|
'Total Somme: ${NumberFormat('#,##0', 'fr_FR').format(totalSum)} MGA',
|
|
style: const TextStyle(
|
|
fontSize: 18.0,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
Expanded(
|
|
child: FutureBuilder<List<Order>>(
|
|
future: controller.getOrdersByStartDate(selectedDate),
|
|
builder: (context, snapshot) {
|
|
if (snapshot.connectionState == ConnectionState.waiting) {
|
|
return const Center(
|
|
child: CircularProgressIndicator(),
|
|
);
|
|
}
|
|
|
|
if (snapshot.hasError) {
|
|
return const Center(
|
|
child: Text(
|
|
'Une erreur s\'est produite',
|
|
style: TextStyle(
|
|
fontSize: 18.0,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
final orders = snapshot.data;
|
|
|
|
if (orders == null || orders.isEmpty) {
|
|
return const Center(
|
|
child: Text(
|
|
'Aucune commande trouvée pour cette journée',
|
|
style: TextStyle(
|
|
fontSize: 18.0,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
return ListView.builder(
|
|
itemCount: orders.length,
|
|
itemBuilder: (context, index) {
|
|
final order = orders[index];
|
|
|
|
return Card(
|
|
elevation: 4.0,
|
|
shadowColor: Colors.red,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(20.0),
|
|
),
|
|
margin: const EdgeInsets.symmetric(
|
|
horizontal: 16.0,
|
|
vertical: 8.0,
|
|
),
|
|
child: ListTile(
|
|
title: Row(
|
|
children: [
|
|
Text(
|
|
'Commande #${order.id}',
|
|
style: const TextStyle(
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
const SizedBox(width: 10),
|
|
Container(
|
|
padding: const EdgeInsets.symmetric(
|
|
horizontal: 8.0, vertical: 4.0),
|
|
decoration: BoxDecoration(
|
|
color: Colors.deepOrange,
|
|
borderRadius: BorderRadius.circular(10.0),
|
|
),
|
|
child: const Text(
|
|
'Terminé',
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 12.0,
|
|
fontWeight: FontWeight.bold,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
subtitle: Text('Total: ${NumberFormat('#,##0', 'fr_FR').format(order.totalPrice)} MGA'),
|
|
trailing: Text('Date: ${order.dateTime}'),
|
|
leading: Text('vendeur: ${order.user}'),
|
|
onTap: () {
|
|
Get.to(() => DetailPage(order: order));
|
|
},
|
|
),
|
|
);
|
|
},
|
|
);
|
|
},
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|
|
|