From 476bfc403536ffae68c43394b19d25029a87be5d Mon Sep 17 00:00:00 2001 From: saritabirare Date: Tue, 8 Oct 2024 14:09:44 +0530 Subject: [PATCH] 1) RD Place order Api integration --- .../rd_processing_order_controller.dart | 55 +++++++++++++++++++ lib/controller/rd_processing_service.dart | 40 ++++++++++++++ lib/models/rd_placed_order_model.dart | 35 ++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 lib/controller/rd_processing_order_controller.dart create mode 100644 lib/controller/rd_processing_service.dart create mode 100644 lib/models/rd_placed_order_model.dart diff --git a/lib/controller/rd_processing_order_controller.dart b/lib/controller/rd_processing_order_controller.dart new file mode 100644 index 0000000..6c35c99 --- /dev/null +++ b/lib/controller/rd_processing_order_controller.dart @@ -0,0 +1,55 @@ +import 'package:cheminova/controller/rd_processing_service.dart'; +import 'package:get/get.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import '../models/rd_order_item_model.dart'; +import '../models/rd_placed_order_model.dart'; + +class RDOrderPlacedController extends GetxController { + final RDOrderPlacedService _rdOrderPlacedService = RDOrderPlacedService(); + + // Observable to hold the order details + var placedOrder1 = PlacedOrdersProcessing( + orderId: '66ffdd0dd315eb7de3092cd6', + invoiceItems: [ + RDOrderItem( + productId: "66e27c190ccbf6e1c57c9fba", + sku: "SKU045", + name: "Testing", + categoryName: "Testing", + brandName: "Testing brand", + price: 232.0, + gst: 10, + hsnCode: 4004, + description: "", + image: [], + quantity: 1, + remainingQuantity: 1, + processquantity: 1, + ), + ], + ).obs; + + var isLoading = false.obs; + + // Method to place an order + Future placeRDOrder() async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + String? token = prefs.getString('token'); + isLoading.value = true; + + try { + // Construct the order details from the observable variable + PlacedOrdersProcessing orderDetails = placedOrder1.value; + print("Order Details: ${orderDetails.toJson()}"); // Debugging the order details + + // Call the service to place the order + await _rdOrderPlacedService.placRDeOrder(orderDetails, token!); + + } catch (e) { + print("Error placing order: $e"); + } finally { + isLoading.value = false; + } + } +} diff --git a/lib/controller/rd_processing_service.dart b/lib/controller/rd_processing_service.dart new file mode 100644 index 0000000..275c47c --- /dev/null +++ b/lib/controller/rd_processing_service.dart @@ -0,0 +1,40 @@ +import 'dart:convert'; + +import 'package:cheminova/models/rd_placed_order_model.dart'; +import 'package:cheminova/utils/api_urls.dart'; +import 'package:flutter/material.dart'; +import 'package:dio/dio.dart'; +import '../models/rd_order_item_model.dart'; + + +class RDOrderPlacedService { + final Dio _dio = Dio(); // Create Dio instance + + Future placRDeOrder(PlacedOrdersProcessing orderDetails, String token) async { + //try { + // logger.w("orderjson ${jsonEncode(orderDetails.toJson())}"); + final response = await _dio.post( + 'https://api.cnapp.co.in/api/pd-process-order', // Ensure this is your correct endpoint + data: jsonEncode(orderDetails.toJson()), + options: Options( + headers: { + 'Authorization': 'Bearer $token', + 'Content-Type': 'application/json', + }, + ), + ); + //logger.w("Status code,${response.statusCode}"); + if (response.statusCode != 200) { + + throw Exception('Failed to RD place order'); + } + } +// on DioException catch (e) { +// print("DioException: ${e.message}"); +// throw Exception('Failed to place order: ${e.message}'); +// } +// catch (e) { +// print("General Exception: ${e.toString()}"); +// throw Exception('Failed to place order: ${e.toString()}'); +// } +} diff --git a/lib/models/rd_placed_order_model.dart b/lib/models/rd_placed_order_model.dart new file mode 100644 index 0000000..b34480d --- /dev/null +++ b/lib/models/rd_placed_order_model.dart @@ -0,0 +1,35 @@ +import 'package:cheminova/models/rd_order_item_model.dart'; + +class PlacedOrdersProcessing { + final String orderId; + final List invoiceItems; + + PlacedOrdersProcessing({ + required this.orderId, + required this.invoiceItems, + }); + + // Factory constructor for creating an instance from JSON + factory PlacedOrdersProcessing.fromJson(Map json) { + return PlacedOrdersProcessing( + orderId: json['orderId'] ?? '', // Handle missing or null values + invoiceItems: (json['invoiceItems'] as List) + .map((item) => RDOrderItem.fromJson(item)) + .toList(), + ); + } + + // Method to convert instance to JSON + Map toJson() { + return { + 'orderId': orderId, + 'invoiceItems': invoiceItems.map((item) => item.toJson()).toList(), + }; + } + + // Overriding toString method + @override + String toString() { + return 'PlacedOrdersProcessing(orderId: $orderId, invoiceItems: $invoiceItems)'; + } +}