feat: order with payment

This commit is contained in:
efrilm
2025-08-03 21:21:48 +07:00
parent 5d74ed0bed
commit afc030f13f
7 changed files with 636 additions and 9 deletions
@@ -9,6 +9,7 @@ import 'package:enaklo_pos/data/datasources/auth_local_datasource.dart';
import 'package:enaklo_pos/data/models/request/payment_request.dart';
import 'package:enaklo_pos/data/models/response/order_response_model.dart';
import 'package:enaklo_pos/data/models/response/payment_method_response_model.dart';
import 'package:enaklo_pos/data/models/response/payment_methods_response_model.dart';
import 'package:enaklo_pos/data/models/response/payment_response_model.dart';
import 'package:enaklo_pos/data/models/response/summary_response_model.dart';
import 'package:enaklo_pos/presentation/home/models/order_model.dart';
@@ -300,4 +301,58 @@ class OrderRemoteDatasource {
return Left("Unexpected Error: $e");
}
}
Future<Either<String, OrderDetailResponseModel>> createOrderWithPayment(
OrderRequestModel orderModel,
PaymentMethod payment,
) async {
final authData = await AuthLocalDataSource().getAuthData();
final url = '${Variables.baseUrl}/api/v1/orders';
try {
final response = await dio.post(
url,
data: orderModel.toMap(),
options: Options(
headers: {
'Authorization': 'Bearer ${authData.token}',
'Accept': 'application/json',
'Content-Type': 'application/json',
},
),
);
if (response.statusCode == 200) {
final data = OrderDetailResponseModel.fromMap(response.data);
final orderData = data.data;
final paymentRequest = PaymentRequestModel(
orderId: orderData?.id,
amount: orderData?.totalAmount,
paymentMethodId: payment.id,
splitDescription: '',
splitNumber: 1,
splitTotal: 1,
paymentOrderItems: orderData?.orderItems
?.map((item) => PaymentOrderItemModel(
amount: item.totalPrice,
orderItemId: item.id,
))
.toList(),
);
createPayment(paymentRequest);
return Right(data);
} else {
return const Left('Gagal membuat pesanan');
}
} on DioException catch (e) {
final errorMessage = e.response?.data['message'] ?? 'Kesalahan jaringan';
log("💥 Dio error: ${e.message}");
log("💥 Dio response: ${e.response?.data}");
return Left(errorMessage);
} catch (e) {
log("💥 Unexpected error: $e");
return const Left('Terjadi kesalahan tak terduga');
}
}
}