Files
carwash_vendor_app-frontend/lib/provider/order_provider.dart

104 lines
2.9 KiB
Dart

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:glowwheels/constants/api.dart';
import 'package:glowwheels/models/order_model.dart';
import 'package:http/http.dart' as http;
class OrdersProvider with ChangeNotifier {
List<Order> _orders = [];
bool _isLoading = false;
bool _isRefreshing = false;
String? _errorMessage;
List<Order> get orders => _orders;
bool get isLoading => _isLoading;
bool get isRefreshing => _isRefreshing;
String? get errorMessage => _errorMessage;
Future<void> fetchOrders(String shopId, {bool refresh = false}) async {
final ordersUri = Uri.parse(ApiConstants.ordersByShop(shopId));
if (refresh) {
_isRefreshing = true;
} else {
_isLoading = true;
}
notifyListeners();
try {
final response = await http.get(ordersUri);
if (response.statusCode == 200) {
final data = json.decode(response.body);
if (data['success'] == true) {
final List<dynamic> ordersJson = data['orders'];
_orders = ordersJson.map((orderJson) => Order.fromJson(orderJson)).toList();
_errorMessage = null;
} else {
_errorMessage = 'Failed to fetch orders';
}
} else {
_errorMessage = 'Server error: ${response.statusCode}';
}
} catch (e) {
_errorMessage = 'An error occurred: $e';
}
_isLoading = false;
_isRefreshing = false;
notifyListeners();
}
Future<void> assignServiceBoyToOrder({
required String orderId,
required String serviceBoyId,
required String shopId,
}) async {
final assignUri = Uri.parse(ApiConstants.assignServiceBoy(orderId));
try {
final response = await http.put(
assignUri,
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'serviceBoyId': serviceBoyId}),
);
if (response.statusCode == 200) {
print('Successfully assigned service boy');
} else {
print('Failed to assign service boy: ${response.statusCode}');
}
} catch (e) {
print('Error assigning service boy: $e');
}
}
Future<void> updateOrderStatus({
required String orderId,
required String status,
}) async {
final updateStatusUri = Uri.parse(ApiConstants.updateOrderStatusByAdmin(orderId));
try {
final response = await http.put(
updateStatusUri,
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'status': status}),
);
if (response.statusCode == 200) {
final index = _orders.indexWhere((o) => o.id == orderId);
if (index != -1) {
_orders[index] = _orders[index].copyWith(status: status);
notifyListeners();
}
} else {
print('Failed to update status: ${response.statusCode}');
}
} catch (e) {
print('Error updating order status: $e');
}
}
}