@ -21,7 +21,8 @@ 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 ' : ' ' } ;
var packagesAuthHeader = < String , String > { ' Authorization ' : ' ' } ;
class OffersAndPackagesServices extends BaseService {
AuthenticatedUser patientUser ;
List < PackagesCategoriesResponseModel > categoryList = List ( ) ;
@ -33,52 +34,62 @@ class OffersAndPackagesServices extends BaseService {
List < PackagesCartItemsResponseModel > cartItemList = List ( ) ;
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 )
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 ) {
@ -92,10 +103,13 @@ 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 ) {
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader ,
onSuccess: ( dynamic stringResponse , int statusCode ) {
if ( statusCode = = 200 ) {
var jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' products ' ] . forEach ( ( json ) {
@ -109,10 +123,14 @@ 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 ) {
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 ) {
@ -126,10 +144,13 @@ 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 ) {
@ -143,15 +164,16 @@ 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 = 3 ;
completedAll ( ) {
var totalCalls = 2 ;
completedAll ( ) {
finished + + ;
if ( completion ! = null & & finished = = totalCalls ) {
if ( completion ! = null & & finished = = totalCalls ) {
_hideLoading ( context , showLoading ) ;
completion ( ) ;
}
@ -160,57 +182,71 @@ class OffersAndPackagesServices extends BaseService {
_showLoading ( context , showLoading ) ;
final auth_token = await baseAppClient . generatePackagesToken ( ) ;
if ( auth_token = = null ) {
if ( auth_token = = null ) {
throw ' Something went wrong while authentication, Please try again letter ' ;
}
packagesAuthHeader [ " Authorization " ] = ' Bearer $ auth_token ' ;
/ / Check and Create Customer
if ( patientUser ! = null ) {
customer = await getCurrentCustomer ( context: context , showLoading: showLoading ) ;
if ( customer = = null ) {
createCustomer ( PackagesCustomerRequestModel . fromUser ( patientUser ) , context: context ) ;
if ( patientUser ! = null ) {
customer =
await getCurrentCustomer ( context: context , showLoading: showLoading ) ;
if ( customer = = null ) {
createCustomer ( PackagesCustomerRequestModel . fromUser ( patientUser ) ,
context: context ) ;
}
}
/ / Performing Parallel Request on same time
/ / # 1
getBestSellers ( request: OffersProductsRequestModel ( ) , context: context , showLoading: false ) . then ( ( value ) {
completedAll ( ) ;
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 ( ) ;
} ) ;
/ / # 3
getBanners ( request: OffersProductsRequestModel ( ) , context: context , showLoading: false ) . then ( ( value ) {
completedAll ( ) ;
} ) ;
/ / getBanners (
/ / request: OffersProductsRequestModel ( ) ,
/ / context: context ,
/ / showLoading: false )
/ / . then ( ( value ) {
/ / completedAll ( ) ;
/ / } ) ;
}
/ / - - - - - - - - - - - - - - - - - - - -
/ / Create Customer
/ / - - - - - - - - - - - - - - - - - - - -
Future createCustomer ( PackagesCustomerRequestModel request , { @ required BuildContext context , bool showLoading = true , Function ( bool ) completion } ) async {
if ( customer ! = null )
return Future . value ( customer ) ;
Future createCustomer ( PackagesCustomerRequestModel request ,
{ @ required BuildContext context ,
bool showLoading = true ,
Function ( bool ) completion } ) async {
if ( customer ! = null ) return Future . value ( customer ) ;
customer = null ;
Future errorThrow ;
_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 ) ;
} , onFailure: ( String error , int statusCode ) {
} , onFailure: ( String error , int statusCode ) {
errorThrow = Future . error ( error ) ;
log ( error ) ;
} ) ;
@ -221,55 +257,60 @@ class OffersAndPackagesServices extends BaseService {
return errorThrow ? ? customer ;
}
Future < PackagesCustomerResponseModel > getCurrentCustomer ( { @ required BuildContext context , bool showLoading = true } ) async {
if ( customer ! = null )
return Future . value ( customer ) ;
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 ) ;
} , onFailure: ( String error , int statusCode ) {
} , onFailure: ( String error , int statusCode ) {
log ( error ) ;
} ) ;
_hideLoading ( context , showLoading ) ;
return customer ;
return customer ;
}
/ / - - - - - - - - - - - - - - - - - - - -
/ / 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 } ' ;
Map < String , dynamic > jsonResponse ;
await baseAppClient . simpleGet ( url , headers: packagesAuthHeader , onSuccess: ( dynamic stringResponse , int statusCode ) {
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 ) {
_hideLoading ( context , showLoading ) ;
jsonResponse = json . decode ( stringResponse ) ;
jsonResponse [ ' shopping_carts ' ] . forEach ( ( json ) {
cartItemList . add ( PackagesCartItemsResponseModel . fromJson ( json ) ) ;
} ) ;
} , onFailure: ( String error , int statusCode ) {
_hideLoading ( context , showLoading ) ;
log ( error ) ;
errorThrow = Future . error ( { " error " : error , " statusCode " : statusCode } ) ;
errorThrow = Future . error ( { " error " : error , " statusCode " : statusCode } ) ;
} , queryParams: null ) ;
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 ;
@ -277,55 +318,64 @@ 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 ) {
} , 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 ) ;
} , onFailure: ( String error , int statusCode ) {
} , onFailure: ( String error , int statusCode ) {
_hideLoading ( context , showLoading ) ;
log ( error ) ;
errorThrow = Future . error ( { " error " : error , " statusCode " : statusCode } ) ;
errorThrow = Future . error ( { " error " : error , " statusCode " : statusCode } ) ;
} ) ;
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 ) {
} , onFailure: ( String error , int statusCode ) {
_hideLoading ( context , showLoading ) ;
log ( error ) ;
errorThrow = Future . error ( { " error " : error , " statusCode " : statusCode } ) ;
errorThrow = Future . error ( { " error " : error , " statusCode " : statusCode } ) ;
} ) ;
return errorThrow ? ? true ;
@ -334,29 +384,33 @@ 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 BuildContext context ,
bool showLoading = true } ) async {
Future errorThrow ;
Map < dynamic , dynamic > jsonBody = {
" customer_id " : customer . id ,
Map < dynamic , dynamic > jsonBody = {
" customer_id " : customer . id ,
" billing_address " : {
" email " : patientUser . emailAddress ,
" phone_number " : patientUser . mobileNumber
} ,
} ;
jsonBody . addAll ( paymentParams ) ;
jsonBody = { ' order ' : jsonBody } ;
jsonBody = { ' order ' : 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 ) ;
order_id = jsonResponse [ ' orders ' ] [ 0 ] [ ' id ' ] ;
} , onFailure: ( String error , int statusCode ) {
} , onFailure: ( String error , int statusCode ) {
_hideLoading ( context , showLoading ) ;
log ( error ) ;
errorThrow = Future . error ( error ) ;
@ -365,35 +419,34 @@ 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 ) ) ;
errorThrow = Future . error ( ResponseModel ( status: false , error: error ) ) ;
} , queryParams: null ) ;
return errorThrow ? ? response ;
}
}
_showLoading ( BuildContext context , bool flag ) {
if ( flag )
GifLoaderDialogUtils . showMyDialog ( context ) ;
_showLoading ( BuildContext context , bool flag ) {
if ( flag ) GifLoaderDialogUtils . showMyDialog ( context ) ;
}
_hideLoading ( BuildContext context , bool flag ) {
if ( flag )
GifLoaderDialogUtils . hideDialog ( context ) ;
}
_hideLoading ( BuildContext context , bool flag ) {
if ( flag ) GifLoaderDialogUtils . hideDialog ( context ) ;
}