@ -4,6 +4,7 @@ import 'dart:developer';
import ' package:diplomaticquarterapp/config/config.dart ' ;
import ' package:diplomaticquarterapp/config/shared_pref_kay.dart ' ;
import ' package:diplomaticquarterapp/core/model/ResponseModel.dart ' ;
import ' package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart ' ;
import ' package:diplomaticquarterapp/core/model/packages_offers/requests/AddProductToCartRequestModel.dart ' ;
import ' package:diplomaticquarterapp/core/model/packages_offers/requests/CreateCustomerRequestModel.dart ' ;
import ' package:diplomaticquarterapp/core/model/packages_offers/requests/OffersCategoriesRequestModel.dart ' ;
@ -15,13 +16,11 @@ import 'package:diplomaticquarterapp/core/model/packages_offers/responses/Packag
import ' package:diplomaticquarterapp/core/model/packages_offers/responses/order_response_model.dart ' ;
import ' package:diplomaticquarterapp/core/model/packages_offers/responses/tamara_payment_option.dart ' ;
import ' package:diplomaticquarterapp/core/service/base_service.dart ' ;
import ' package:diplomaticquarterapp/core/viewModels/project_view_model.dart ' ;
import ' package:diplomaticquarterapp/models/Authentication/authenticated_user.dart ' ;
import ' package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart ' ;
import ' package:diplomaticquarterapp/uitl/utils.dart ' ;
import ' package:flutter/cupertino.dart ' ;
var packagesAuthHeader = < String , String > { ' Authorization ' : ' ' } ;
Ma p< String , String > packagesAuthHeader = { } ;
class OffersAndPackagesServices extends BaseService {
AuthenticatedUser patientUser ;
@ -32,64 +31,52 @@ class OffersAndPackagesServices extends BaseService {
List < PackagesResponseModel > bestSellerList = List ( ) ;
List < PackagesResponseModel > bannersList = List ( ) ;
List < PackagesCartItemsResponseModel > cartItemList = List ( ) ;
List < HospitalsModel > _hospitals = List ( ) ;
List < HospitalsModel > get hospitals = > _hospitals ;
String cartItemCount = " " ;
PackagesCustomerResponseModel customer ;
Future < List < PackagesCategoriesResponseModel > > getAllCategories (
OffersCategoriesRequestModel request ) async {
Future < List < PackagesCategoriesResponseModel > > getAllCategories ( OffersCategoriesRequestModel request ) async {
Future errorThrow ;
var url = EXA_CART_API_BASE_URL + PACKAGES_CATEGORIES ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
if ( statusCode = = 200 ) {
var jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' categories ' ] . forEach ( ( json ) {
categoryList . add ( PackagesCategoriesResponseModel ( ) . fromJson ( json ) ) ;
} ) ;
}
} ,
onFailure: ( String error , int statusCode ) { } ,
queryParams: request . toFlatMap ( ) ) ;
} , onFailure: ( String error , int statusCode ) { } , queryParams: request . toFlatMap ( ) ) ;
return categoryList ;
}
Future < List < PackagesResponseModel > > getAllProducts (
{ @ required OffersProductsRequestModel request ,
@ required BuildContext context ,
@ required bool showLoading = true } ) async {
Future < List < PackagesResponseModel > > getAllProducts ( { @ required OffersProductsRequestModel request , @ required BuildContext context , @ required bool showLoading = true } ) async {
Future errorThrow ;
request . sinceId = ( productList . isNotEmpty ) ? productList . last . id : 0 ;
productList = List ( ) ;
var url = EXA_CART_API_BASE_URL + PACKAGES_PRODUCTS ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
if ( statusCode = = 200 ) {
var jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' products ' ] . forEach ( ( json ) {
productList . add ( PackagesResponseModel ( ) . fromJson ( json ) ) ;
} ) ;
}
} ,
onFailure: ( String error , int statusCode ) { } ,
queryParams: request . toFlatMap ( ) ) ;
} , onFailure: ( String error , int statusCode ) { } , queryParams: request . toFlatMap ( ) ) ;
return productList ;
}
Future < List < TamaraPaymentOption > > getTamaraOptions (
{ @ required BuildContext context ,
@ required bool showLoading = true } ) async {
if ( tamaraPaymentOptions ! = null & & tamaraPaymentOptions . isNotEmpty )
return tamaraPaymentOptions ;
Future < List < TamaraPaymentOption > > getTamaraOptions ( { @ required BuildContext context , @ required bool showLoading = true } ) async {
if ( tamaraPaymentOptions ! = null & & tamaraPaymentOptions . isNotEmpty ) return tamaraPaymentOptions ;
var url = EXA_CART_API_BASE_URL + PACKAGES_TAMARA_OPT ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
if ( statusCode = = 200 ) {
var jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' payment_option ' ] . forEach ( ( json ) {
@ -103,14 +90,10 @@ class OffersAndPackagesServices extends BaseService {
return tamaraPaymentOptions ;
}
Future < List < PackagesResponseModel > > getLatestOffers (
{ @ required OffersProductsRequestModel request ,
@ required BuildContext context ,
@ required bool showLoading = true } ) async {
Future < List < PackagesResponseModel > > getLatestOffers ( { @ required OffersProductsRequestModel request , @ required BuildContext context , @ required bool showLoading = true } ) async {
var url = EXA_CART_API_BASE_URL + PACKAGES_PRODUCTS ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
latestOffersList . clear ( ) ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
latestOffersList . clear ( ) ;
if ( statusCode = = 200 ) {
var jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' products ' ] . forEach ( ( json ) {
@ -124,14 +107,10 @@ class OffersAndPackagesServices extends BaseService {
return latestOffersList ;
}
Future < List < PackagesResponseModel > > getBestSellers (
{ @ required OffersProductsRequestModel request ,
@ required BuildContext context ,
@ required bool showLoading = true } ) async {
Future < List < PackagesResponseModel > > getBestSellers ( { @ required OffersProductsRequestModel request , @ required BuildContext context , @ required bool showLoading = true } ) async {
var url = EXA_CART_API_BASE_URL + PACKAGES_PRODUCTS ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
bestSellerList . clear ( ) ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
bestSellerList . clear ( ) ;
if ( statusCode = = 200 ) {
var jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' products ' ] . forEach ( ( json ) {
@ -145,13 +124,9 @@ class OffersAndPackagesServices extends BaseService {
return bestSellerList ;
}
Future < List < PackagesResponseModel > > getBanners (
{ @ required OffersProductsRequestModel request ,
@ required BuildContext context ,
@ required bool showLoading = true } ) async {
Future < List < PackagesResponseModel > > getBanners ( { @ required OffersProductsRequestModel request , @ required BuildContext context , @ required bool showLoading = true } ) async {
var url = EXA_CART_API_BASE_URL + PACKAGES_PRODUCTS ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
if ( statusCode = = 200 ) {
var jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' products ' ] . forEach ( ( json ) {
@ -165,10 +140,7 @@ class OffersAndPackagesServices extends BaseService {
return bannersList ;
}
Future loadOffersPackagesDataForMainPage (
{ @ required BuildContext context ,
bool showLoading = true ,
Function completion } ) async {
Future loadOffersPackagesDataForMainPage ( { @ required BuildContext context , bool showLoading = true , Function completion } ) async {
var finished = 0 ;
var totalCalls = 2 ;
@ -190,30 +162,20 @@ class OffersAndPackagesServices extends BaseService {
/ / Check and Create Customer
if ( patientUser ! = null ) {
customer =
await getCurrentCustomer ( context: context , showLoading: showLoading ) ;
customer = await getCurrentCustomer ( context: context , showLoading: showLoading ) ;
if ( customer = = null ) {
createCustomer ( PackagesCustomerRequestModel . fromUser ( patientUser ) ,
context: context ) ;
createCustomer ( PackagesCustomerRequestModel . fromUser ( patientUser ) , context: context ) ;
}
}
/ / Performing Parallel Request on same time
/ / # 1
getBestSellers (
request: OffersProductsRequestModel ( ) ,
context: context ,
showLoading: false )
. then ( ( value ) {
getBestSellers ( request: OffersProductsRequestModel ( ) , context: context , showLoading: false ) . then ( ( value ) {
completedAll ( ) ;
} ) ;
/ / # 2
getLatestOffers (
request: OffersProductsRequestModel ( ) ,
context: context ,
showLoading: false )
. then ( ( value ) {
getLatestOffers ( request: OffersProductsRequestModel ( ) , context: context , showLoading: false ) . then ( ( value ) {
completedAll ( ) ;
} ) ;
@ -230,10 +192,7 @@ class OffersAndPackagesServices extends BaseService {
/ / - - - - - - - - - - - - - - - - - - - -
/ / Create Customer
/ / - - - - - - - - - - - - - - - - - - - -
Future createCustomer ( PackagesCustomerRequestModel request ,
{ @ required BuildContext context ,
bool showLoading = true ,
Function ( bool ) completion } ) async {
Future createCustomer ( PackagesCustomerRequestModel request , { @ required BuildContext context , bool showLoading = true , Function ( bool ) completion } ) async {
if ( customer ! = null ) return Future . value ( customer ) ;
customer = null ;
@ -241,9 +200,7 @@ class OffersAndPackagesServices extends BaseService {
_showLoading ( context , showLoading ) ;
var url = EXA_CART_API_BASE_URL + PACKAGES_CUSTOMER ;
await baseAppClient
. simplePost ( url , headers: packagesAuthHeader , body: request . json ( ) ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simplePost ( url , headers: packagesAuthHeader , body: request . json ( ) , onSuccess: ( dynamic stringResponse , int statusCode ) {
var jsonResponse = json . decode ( stringResponse ) ;
var customerJson = jsonResponse [ ' customers ' ] . first ;
customer = PackagesCustomerResponseModel . fromJson ( customerJson ) ;
@ -258,16 +215,12 @@ class OffersAndPackagesServices extends BaseService {
return errorThrow ? ? customer ;
}
Future < PackagesCustomerResponseModel > getCurrentCustomer (
{ @ required BuildContext context , bool showLoading = true } ) async {
Future < PackagesCustomerResponseModel > getCurrentCustomer ( { @ required BuildContext context , bool showLoading = true } ) async {
if ( customer ! = null ) return Future . value ( customer ) ;
_showLoading ( context , showLoading ) ;
var url = EXA_CART_API_BASE_URL +
PACKAGES_CUSTOMER +
" /username/ ${ patientUser . patientID } " ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
var url = EXA_CART_API_BASE_URL + PACKAGES_CUSTOMER + " /username/ ${ patientUser . patientID } " ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
var jsonResponse = json . decode ( stringResponse ) ;
var customerJson = jsonResponse [ ' customers ' ] . first ;
customer = PackagesCustomerResponseModel . fromJson ( customerJson ) ;
@ -282,17 +235,14 @@ class OffersAndPackagesServices extends BaseService {
/ / - - - - - - - - - - - - - - - - - - - -
/ / Shopping Cart
/ / - - - - - - - - - - - - - - - - - - - -
Future < Map < String , dynamic > > cartItems (
{ @ required BuildContext context , bool showLoading = true } ) async {
Future < Map < String , dynamic > > cartItems ( { @ required BuildContext context , bool showLoading = true } ) async {
Future errorThrow ;
cartItemList . clear ( ) ;
_showLoading ( context , showLoading ) ;
var url =
EXA_CART_API_BASE_URL + PACKAGES_SHOPPING_CART + ' / ${ customer . id } ' ;
var url = EXA_CART_API_BASE_URL + PACKAGES_SHOPPING_CART + ' / ${ customer . id } ' ;
Map < String , dynamic > jsonResponse ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
_hideLoading ( context , showLoading ) ;
jsonResponse = json . decode ( stringResponse ) ;
@ -308,10 +258,7 @@ class OffersAndPackagesServices extends BaseService {
return errorThrow ? ? jsonResponse ;
}
Future < ResponseModel < PackagesCartItemsResponseModel > > addProductToCart (
AddProductToCartRequestModel request ,
{ @ required BuildContext context ,
bool showLoading = true } ) async {
Future < ResponseModel < PackagesCartItemsResponseModel > > addProductToCart ( AddProductToCartRequestModel request , { @ required BuildContext context , bool showLoading = true } ) async {
Future errorThrow ;
ResponseModel < PackagesCartItemsResponseModel > response ;
@ -319,38 +266,27 @@ class OffersAndPackagesServices extends BaseService {
_showLoading ( context , showLoading ) ;
var url = EXA_CART_API_BASE_URL + PACKAGES_SHOPPING_CART ;
await baseAppClient
. simplePost ( url , headers: packagesAuthHeader , body: request . json ( ) ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simplePost ( url , headers: packagesAuthHeader , body: request . json ( ) , onSuccess: ( dynamic stringResponse , int statusCode ) {
_hideLoading ( context , showLoading ) ;
var jsonResponse = json . decode ( stringResponse ) ;
var jsonCartItem = jsonResponse [ " shopping_carts " ] [ 0 ] ;
response = ResponseModel (
status: true ,
data: PackagesCartItemsResponseModel . fromJson ( jsonCartItem ) ,
error: null ) ;
response = ResponseModel ( status: true , data: PackagesCartItemsResponseModel . fromJson ( jsonCartItem ) , error: null ) ;
cartItemCount = ( jsonResponse [ ' count ' ] ? ? 0 ) . toString ( ) ;
} , onFailure: ( String error , int statusCode ) {
_hideLoading ( context , showLoading ) ;
errorThrow =
Future . error ( ResponseModel ( status: true , data: null , error: error ) ) ;
errorThrow = Future . error ( ResponseModel ( status: true , data: null , error: error ) ) ;
} ) ;
return errorThrow ? ? response ;
}
Future updateProductToCart ( int cartItemID ,
{ UpdateProductToCartRequestModel request ,
@ required BuildContext context ,
bool showLoading = true } ) async {
Future updateProductToCart ( int cartItemID , { UpdateProductToCartRequestModel request , @ required BuildContext context , bool showLoading = true } ) async {
Future errorThrow ;
_showLoading ( context , showLoading ) ;
var url = EXA_CART_API_BASE_URL + PACKAGES_SHOPPING_CART + ' / $ cartItemID ' ;
await baseAppClient
. simplePut ( url , headers: packagesAuthHeader , body: request . json ( ) ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simplePut ( url , headers: packagesAuthHeader , body: request . json ( ) , onSuccess: ( dynamic stringResponse , int statusCode ) {
_hideLoading ( context , showLoading ) ;
var jsonResponse = json . decode ( stringResponse ) ;
@ -363,16 +299,13 @@ class OffersAndPackagesServices extends BaseService {
return errorThrow ? ? bannersList ;
}
Future < bool > deleteProductFromCart ( int cartItemID ,
{ @ required BuildContext context , bool showLoading = true } ) async {
Future < bool > deleteProductFromCart ( int cartItemID , { @ required BuildContext context , bool showLoading = true } ) async {
Future errorThrow ;
_showLoading ( context , showLoading ) ;
var url = EXA_CART_API_BASE_URL + PACKAGES_SHOPPING_CART + ' / $ cartItemID ' ;
await baseAppClient . simpleDelete ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simpleDelete ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
_hideLoading ( context , showLoading ) ;
/ / var jsonResponse = json . decode ( stringResponse ) ;
} , onFailure: ( String error , int statusCode ) {
_hideLoading ( context , showLoading ) ;
log ( error ) ;
@ -385,28 +318,23 @@ class OffersAndPackagesServices extends BaseService {
/ / - - - - - - - - - - - - - - - - - - - -
/ / Place Order
/ / - - - - - - - - - - - - - - - - - - - -
Future placeOrder (
{ @ required Map < dynamic , dynamic > paymentParams ,
@ required BuildContext context ,
bool showLoading = true } ) async {
Future placeOrder ( { @ required Map < dynamic , dynamic > paymentParams , @ required int projectID , @ required BuildContext context , bool showLoading = true } ) async {
Future errorThrow ;
Map < dynamic , dynamic > jsonBody = {
" customer_id " : customer . id ,
" billing_address " : {
" email " : patientUser . emailAddress ,
" phone_number " : patientUser . mobileNumber
} ,
" project_id " : projectID ,
" billing_address " : { " email " : patientUser . emailAddress , " phone_number " : patientUser . mobileNumber } ,
} ;
jsonBody . addAll ( paymentParams ) ;
jsonBody = { ' order ' : jsonBody } ;
print ( jsonBody ) ;
int order_id ;
_showLoading ( context , showLoading ) ;
var url = EXA_CART_API_BASE_URL + PACKAGES_ORDERS ;
await baseAppClient . simplePost ( url ,
headers: packagesAuthHeader ,
body: jsonBody , onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simplePost ( url , headers: packagesAuthHeader , body: jsonBody , onSuccess: ( dynamic stringResponse , int statusCode ) {
_hideLoading ( context , showLoading ) ;
var jsonResponse = json . decode ( stringResponse ) ;
@ -420,21 +348,18 @@ class OffersAndPackagesServices extends BaseService {
return errorThrow ? ? order_id ;
}
Future < ResponseModel < PackagesOrderResponseModel > > getOrderById ( int id ,
{ @ required BuildContext context , bool showLoading = true } ) async {
Future < ResponseModel < PackagesOrderResponseModel > > getOrderById ( int id , { @ required BuildContext context , bool showLoading = true } ) async {
Future errorThrow ;
ResponseModel < PackagesOrderResponseModel > response ;
_showLoading ( context , showLoading ) ;
var url = EXA_CART_API_BASE_URL + PACKAGES_ORDERS + ' / $ id ' ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
_hideLoading ( context , showLoading ) ;
var jsonResponse = json . decode ( stringResponse ) ;
var jsonOrder = jsonResponse [ ' orders ' ] [ 0 ] ;
response = ResponseModel (
status: true , data: PackagesOrderResponseModel . fromJson ( jsonOrder ) ) ;
response = ResponseModel ( status: true , data: PackagesOrderResponseModel . fromJson ( jsonOrder ) ) ;
} , onFailure: ( String error , int statusCode ) {
_hideLoading ( context , showLoading ) ;
errorThrow = Future . error ( ResponseModel ( status: false , error: error ) ) ;
@ -442,6 +367,26 @@ class OffersAndPackagesServices extends BaseService {
return errorThrow ? ? response ;
}
Future getHospitals ( { bool isResBasedOnLoc = true } ) async {
Map < String , dynamic > body = Map ( ) ;
body [ ' Latitude ' ] = await this . sharedPref . getDouble ( USER_LAT ) ;
body [ ' Longitude ' ] = await this . sharedPref . getDouble ( USER_LONG ) ;
body [ ' IsOnlineCheckIn ' ] = isResBasedOnLoc ;
body [ ' PatientOutSA ' ] = 0 ;
await baseAppClient . post ( GET_PROJECT ,
onSuccess: ( dynamic response , int statusCode ) {
_hospitals . clear ( ) ;
response [ ' ListProject ' ] . forEach ( ( hospital ) {
_hospitals . add ( HospitalsModel . fromJson ( hospital ) ) ;
} ) ;
} , onFailure: ( String error , int statusCode ) {
hasError = true ;
super . error = error ;
} , body: body ) ;
}
}
_showLoading ( BuildContext context , bool flag ) {