working on pharmacy some fixes on cart page and request body

merge-requests/283/head
mosazaid 4 years ago
parent 123b1de1a4
commit 74dd274502

@ -31,6 +31,7 @@ AuthenticatedUserObject authenticatedUserObject =
VitalSignService _vitalSignService = locator<VitalSignService>();
class BaseAppClient {
post(String endPoint,
{Map<String, dynamic> body,
Function(dynamic response, int statusCode) onSuccess,
@ -132,7 +133,198 @@ class BaseAppClient {
if (statusCode < 200 || statusCode >= 400 || json == null) {
onFailure('Error While Fetching data', statusCode);
} else {
var parsed = json.decode(response.body.toString());
// var parsed = json.decode(response.body.toString());
var parsed = json.decode(utf8.decode(response.bodyBytes));
if (parsed['Response_Message'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['ErrorType'] == 4) {
navigateToAppUpdate(
AppGlobal.context, parsed['ErrorEndUserMessage']);
}
if (isAllowAny) {
onSuccess(parsed, statusCode);
} else if (parsed['IsAuthenticated'] == null) {
if (parsed['isSMSSent'] == true) {
onSuccess(parsed, statusCode);
} else if (parsed['MessageStatus'] == 1) {
onSuccess(parsed, statusCode);
} else if (parsed['Result'] == 'OK') {
onSuccess(parsed, statusCode);
} else {
if (parsed != null) {
onSuccess(parsed, statusCode);
} else {
onFailure(
parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'],
statusCode);
logout();
}
}
} else if (parsed['MessageStatus'] == 1 ||
parsed['SMSLoginRequired'] == true) {
onSuccess(parsed, statusCode);
} else if (parsed['MessageStatus'] == 2 &&
parsed['IsAuthenticated']) {
if (parsed['SameClinicApptList'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['message'] == null &&
parsed['ErrorEndUserMessage'] == null) {
if (parsed['ErrorSearchMsg'] == null) {
onFailure("Server Error found with no available message",
statusCode);
} else {
onFailure(parsed['ErrorSearchMsg'], statusCode);
}
} else {
onFailure(
parsed['message'] ??
parsed['ErrorEndUserMessage'] ??
parsed['ErrorMessage'],
statusCode);
}
}
} else if (!parsed['IsAuthenticated']) {
await logout();
//helpers.showErrorToast('Your session expired Please login agian');
} else {
if (parsed['SameClinicApptList'] != null) {
onSuccess(parsed, statusCode);
} else {
if (parsed['message'] != null) {
onFailure(parsed['message'] ?? parsed['message'], statusCode);
} else {
onFailure(
parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'],
statusCode);
}
}
}
}
}
} else {
onFailure('Please Check The Internet Connection', -1);
}
} catch (e) {
print(e);
onFailure(e.toString(), -1);
}
}
postPharmacy(String endPoint,
{Map<String, dynamic> body,
Function(dynamic response, int statusCode) onSuccess,
Function(String error, int statusCode) onFailure,
bool isAllowAny = false,
bool isExternal = false}) async {
var token = await sharedPref.getString(PHARMACY_AUTORZIE_TOKEN);
var user = await sharedPref.getObject(USER_PROFILE);
String url;
if (isExternal) {
url = endPoint;
} else {
url = PHARMACY_BASE_URL + endPoint;
}
try {
//Map profile = await sharedPref.getObj(DOCTOR_PROFILE);
var pharmacyToken = await sharedPref.getString(PHARMACY_AUTORZIE_TOKEN);
var user = await sharedPref.getObject(USER_PROFILE);
Map<String, String> headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': token ?? '',
'Mobilenumber': user != null
? getPhoneNumberWithoutZero(user['MobileNumber'].toString())
: "",
'Statictoken': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
'Username': user != null ? user['PatientID'].toString() : "",
};
if (!isExternal) {
String token = await sharedPref.getString(TOKEN);
var languageID =
await sharedPref.getStringWithDefaultValue(APP_LANGUAGE, 'ar');
if (body.containsKey('SetupID')) {
body['SetupID'] = body.containsKey('SetupID')
? body['SetupID'] != null
? body['SetupID']
: SETUP_ID
: SETUP_ID;
}
body['VersionID'] = VERSION_ID;
body['Channel'] = CHANNEL;
body['LanguageID'] = languageID == 'ar' ? 1 : 2;
body['IPAdress'] = IP_ADDRESS;
body['generalid'] = GENERAL_ID;
body['PatientOutSA'] = body.containsKey('PatientOutSA')
? body['PatientOutSA'] != null
? body['PatientOutSA']
: PATIENT_OUT_SA
: PATIENT_OUT_SA;
if (body.containsKey('isDentalAllowedBackend')) {
body['isDentalAllowedBackend'] =
body.containsKey('isDentalAllowedBackend')
? body['isDentalAllowedBackend'] != null
? body['isDentalAllowedBackend']
: IS_DENTAL_ALLOWED_BACKEND
: IS_DENTAL_ALLOWED_BACKEND;
}
body['DeviceTypeID'] = DeviceTypeID;
if (!body.containsKey('IsPublicRequest')) {
body['PatientType'] = body.containsKey('PatientType')
? body['PatientType'] != null
? body['PatientType']
: user['PatientType'] != null
? user['PatientType']
: PATIENT_TYPE
: PATIENT_TYPE;
body['PatientTypeID'] = body.containsKey('PatientTypeID')
? body['PatientTypeID'] != null
? body['PatientTypeID']
: user['PatientType'] != null
? user['PatientType']
: PATIENT_TYPE_ID
: PATIENT_TYPE_ID;
if (user != null) {
body['TokenID'] = token;
body['PatientID'] = body['PatientID'] != null
? body['PatientID']
: user['PatientID'];
body['PatientOutSA'] = user['OutSA'];
body['SessionID'] = SESSION_ID; //getSe
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': pharmacyToken,
'Mobilenumber': user['MobileNumber'].toString(),
'Statictoken': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
'Username': user['PatientID'].toString(),
};
}
}
}
print("URL : $url");
print("Body : ${json.encode(body)}");
if (await Utils.checkConnection()) {
final response = await http.post(url.trim(),
body: json.encode(body), headers: headers);
final int statusCode = response.statusCode;
print("statusCode :$statusCode");
if (statusCode < 200 || statusCode >= 400 || json == null) {
onFailure('Error While Fetching data', statusCode);
} else {
// var parsed = json.decode(response.body.toString());
var parsed = json.decode(utf8.decode(response.bodyBytes));
if (parsed['Response_Message'] != null) {
onSuccess(parsed, statusCode);
} else {
@ -248,7 +440,8 @@ class BaseAppClient {
if (statusCode < 200 || statusCode >= 400 || json == null) {
onFailure('Error While Fetching data', statusCode);
} else {
var parsed = json.decode(response.body.toString());
// var parsed = json.decode(response.body.toString());
var parsed = json.decode(utf8.decode(response.bodyBytes));
onSuccess(parsed, statusCode);
}
} else {
@ -280,7 +473,7 @@ class BaseAppClient {
if (await Utils.checkConnection()) {
final response = await http.get(url.trim(), headers: {
'Content-Type': 'application/json',
'Content-Type': 'text/html; charset=utf-8',
'Accept': 'application/json',
'Authorization': token ?? '',
'Mobilenumber': user != null
@ -295,8 +488,9 @@ class BaseAppClient {
if (statusCode < 200 || statusCode >= 400 || json == null) {
onFailure('Error While Fetching data', statusCode);
} else {
var parsed = json.decode(response.body.toString());
onSuccess(parsed, statusCode);
// var parsed = json.decode(response.body.toString());
var bodyUtf = json.decode(utf8.decode(response.bodyBytes));
onSuccess(bodyUtf, statusCode);
}
} else {
onFailure('Please Check The Internet Connection', -1);
@ -481,7 +675,8 @@ class BaseAppClient {
if (statusCode < 200 || statusCode >= 400 || json == null) {
onFailure('Error While Fetching data', statusCode);
} else {
var parsed = json.decode(response.body.toString());
// var parsed = json.decode(response.body.toString());
var parsed = json.decode(utf8.decode(response.bodyBytes));
if (parsed['Response_Message'] != null) {
onSuccess(parsed, statusCode);
} else {

@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/LacumAccountInformation.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCart.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart';
@ -15,6 +16,7 @@ class OrderPreviewService extends BaseService {
List<Addresses> addresses = List();
LacumAccountInformation lacumInformation;
LacumAccountInformation lacumGroupInformation;
List<OrderDetailModel> orderList = List();
Future getAddresses() async {
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
@ -42,7 +44,8 @@ class OrderPreviewService extends BaseService {
dynamic localRes;
hasError = false;
try {
await baseAppClient.getPharmacy("$GET_SHIPPING_OPTIONS$customerId/${selectedAddress.id}",
await baseAppClient
.getPharmacy("$GET_SHIPPING_OPTIONS$customerId/${selectedAddress.id}",
onSuccess: (dynamic response, int statusCode) {
localRes = response['shipping_option'][0];
}, onFailure: (String error, int statusCode) {
@ -89,7 +92,7 @@ class OrderPreviewService extends BaseService {
Map<String, dynamic> body = Map();
body["shopping_cart_item"] = choppingCartObject;
await baseAppClient.post("$GET_SHOPPING_CART$productId",
await baseAppClient.postPharmacy("$GET_SHOPPING_CART$productId",
onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
@ -125,7 +128,8 @@ class OrderPreviewService extends BaseService {
super.error = "";
dynamic localRes;
await baseAppClient.getPharmacy("$DELETE_SHOPPING_CART_ALL$customerId/ShoppingCart",
await baseAppClient
.getPharmacy("$DELETE_SHOPPING_CART_ALL$customerId/ShoppingCart",
onSuccess: (response, statusCode) async {
localRes = response;
}, onFailure: (String error, int statusCode) {
@ -177,7 +181,8 @@ class OrderPreviewService extends BaseService {
}
}
Future makeOrder(PaymentCheckoutData paymentCheckoutData, List<ShoppingCart> shoppingCarts) async {
Future makeOrder(PaymentCheckoutData paymentCheckoutData,
List<ShoppingCart> shoppingCarts) async {
paymentCheckoutData.address.isChecked = true;
hasError = false;
super.error = "";
@ -192,10 +197,15 @@ class OrderPreviewService extends BaseService {
orderBody['billing_address'] = paymentCheckoutData.address;
orderBody['pick_up_in_store'] = false;
orderBody['payment_method_system_name'] = "Payments.PayFort";
orderBody['shipping_method'] = languageID == 'ar' ? paymentCheckoutData.shippingOption.namen : paymentCheckoutData.shippingOption.name ;
orderBody['shipping_rate_computation_method_system_name'] = paymentCheckoutData.shippingOption.shippingRateComputationMethodSystemName;
orderBody['customer_id'] = customerId;
orderBody['custom_values_xml'] = "PaymentOption:${getPaymentOptionName(paymentCheckoutData.paymentOption)}";
orderBody['shipping_method'] = languageID == 'ar'
? paymentCheckoutData.shippingOption.namen
: paymentCheckoutData.shippingOption.name;
orderBody['shipping_rate_computation_method_system_name'] =
paymentCheckoutData
.shippingOption.shippingRateComputationMethodSystemName;
orderBody['customer_id'] = int.parse(customerId);
orderBody['custom_values_xml'] =
"PaymentOption:${getPaymentOptionName(paymentCheckoutData.paymentOption)}";
orderBody['shippingOption'] = paymentCheckoutData.shippingOption;
orderBody['shipping_address'] = paymentCheckoutData.address;
orderBody['lakum_amount'] = paymentCheckoutData.usedLakumPoints;
@ -215,6 +225,11 @@ class OrderPreviewService extends BaseService {
try {
await baseAppClient.post(ORDER_SHOPPING_CART,
onSuccess: (response, statusCode) async {
orderList.clear();
response['orders'].forEach((item) {
orderList.add(OrderDetailModel.fromJson(item));
print(response);
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;

@ -5,8 +5,10 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/LacumAccountInformati
import 'package:diplomaticquarterapp/core/model/pharmacies/ShippingOption.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCart.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCartResponse.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart';
import 'package:diplomaticquarterapp/core/service/parmacyModule/order-preview-service.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart';
import '../../../locator.dart';
import '../base_view_model.dart';
@ -17,6 +19,11 @@ class OrderPreviewViewModel extends BaseViewModel {
List<Addresses> get addresses => _orderService.addresses;
LacumAccountInformation get lacumInformation =>
_orderService.lacumInformation;
List<OrderDetailModel> get orderListModel => _orderService.orderList;
PharmacyModuleViewModel pharmacyModuleViewModel =
locator<PharmacyModuleViewModel>();
ShoppingCartResponse cartResponse = ShoppingCartResponse();
PaymentCheckoutData paymentCheckoutData = PaymentCheckoutData();
double totalAdditionalShippingCharge = 0;
@ -32,7 +39,7 @@ class OrderPreviewViewModel extends BaseViewModel {
}
}
getShoppingCart() async {
Future getShoppingCart() async {
setState(ViewState.Busy);
await _orderService.getShoppingCart().then((res) {
_handleGetShoppingCartResponse(res);
@ -48,20 +55,20 @@ class OrderPreviewViewModel extends BaseViewModel {
}
}
changeProductQuantity(ShoppingCart product) async {
Future changeProductQuantity(ShoppingCart product) async {
setState(ViewState.Busy);
await _orderService.changeProductQuantity(product.id, product).then((res) {
_handleGetShoppingCartResponse(res);
});
if (_orderService.hasError) {
error = _orderService.error;
setState(ViewState.Error);
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
deleteProduct(ShoppingCart product) async {
Future deleteProduct(ShoppingCart product) async {
setState(ViewState.Busy);
await _orderService.deleteProduct(product.id).then((res) {
_handleGetShoppingCartResponse(res);
@ -74,7 +81,7 @@ class OrderPreviewViewModel extends BaseViewModel {
}
}
deleteShoppingCart() async {
Future deleteShoppingCart() async {
setState(ViewState.Busy);
await _orderService.deleteShoppingCart().then((res) {
_handleGetShoppingCartResponse(res);
@ -182,6 +189,8 @@ class OrderPreviewViewModel extends BaseViewModel {
Future makeOrder() async {
setState(ViewState.Busy);
await pharmacyModuleViewModel.generatePharmacyToken();
await _orderService.makeOrder(paymentCheckoutData, cartResponse.shoppingCarts);
if (_orderService.hasError) {
error = _orderService.error;

@ -110,15 +110,16 @@ class OrderModelViewModel extends BaseViewModel {
message: "Your review has been Submitted successfully");
}
}
Future makeOrder() async {
setState(ViewState.Busy);
/* setState(ViewState.Busy);
await _orderServices.makeOrder(paymentCheckoutData, cartResponse.shoppingCarts);
if (_orderServices.hasError) {
error = _orderServices.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}*/
}
}

@ -44,13 +44,14 @@ class PharmacyModuleViewModel extends BaseViewModel {
// List<PharmacyProduct> get pharmacyPrescriptionsList => PharmacyProduct.pharmacyPrescriptionsList ;
Future getPharmacyHomeData() async {
setState(ViewState.Busy);
await generatePharmacyToken();
var data = await sharedPref.getObject(USER_PROFILE);
var customerId = await sharedPref.getString(PHARMACY_CUSTOMER_ID);
setState(ViewState.Busy);
if (authenticatedUserObject.isLogin && data != null && customerId == null) {
await _pharmacyService.makeVerifyCustomer(data);
// here must call getShoppingCard()
if (_pharmacyService.hasError) {
error = _pharmacyService.error;
setState(ViewState.Error);

@ -1,3 +1,4 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCartResponse.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart';
@ -7,6 +8,7 @@ import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-preview
import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy-terms-conditions-page.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderItem.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/uitl/utils.dart';
import 'package:diplomaticquarterapp/widgets/buttons/GestureIconButton.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
@ -70,8 +72,16 @@ class CartOrderPage extends StatelessWidget {
cart.shoppingCarts[index], () {
print(cart.shoppingCarts[index]
.quantity);
model.changeProductQuantity(
cart.shoppingCarts[index]);
model
.changeProductQuantity(
cart.shoppingCarts[index])
.then((value) {
if (model.state ==
ViewState.ErrorLocal) {
Utils.showErrorToast(
model.error);
}
});
},
() => model.deleteProduct(
cart.shoppingCarts[index])))
@ -246,7 +256,6 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
height: widget.height * 0.070,
color: Color(0xffe6ffe0),
padding: EdgeInsets.symmetric(horizontal: 4),
child: Expanded(
child: Row(
children: [
InkWell(
@ -305,7 +314,6 @@ class _OrderBottomWidgetState extends State<OrderBottomWidget> {
],
),
),
),
Container(
height: widget.height * 0.065,
margin: EdgeInsets.symmetric(vertical: 2),

@ -1,8 +1,11 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart';
import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart';
import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/address-select-page.dart';
import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart';
@ -12,6 +15,7 @@ import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAd
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
@ -30,10 +34,13 @@ class OrderPreviewPage extends StatelessWidget {
return BaseView<OrderPreviewViewModel>(
onModelReady: (model) => model.getShoppingCart(),
builder: (_, model, wi) => ChangeNotifierProvider.value(
builder: (_, model, wi) =>
ChangeNotifierProvider.value(
value: model.paymentCheckoutData,
child: AppScaffold(
appBarTitle: "${TranslationBase.of(context).checkOut}",
appBarTitle: "${TranslationBase
.of(context)
.checkOut}",
isShowAppBar: true,
isPharmacy: true,
isShowDecPage: false,
@ -76,7 +83,9 @@ class OrderPreviewPage extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context).reviewOrder,
TranslationBase
.of(context)
.reviewOrder,
fontSize: 14,
fontWeight: FontWeight.bold,
color: Colors.black,
@ -85,8 +94,10 @@ class OrderPreviewPage extends StatelessWidget {
model.cartResponse.shoppingCarts != null
? model.cartResponse.shoppingCarts.length
: 0,
(index) => ProductOrderPreviewItem(
model.cartResponse.shoppingCarts[index]),
(index) =>
ProductOrderPreviewItem(
model.cartResponse
.shoppingCarts[index]),
),
],
),
@ -100,7 +111,8 @@ class OrderPreviewPage extends StatelessWidget {
CrossAxisAlignment.start,
children: [
Texts(
TranslationBase.of(context)
TranslationBase
.of(context)
.orderSummary,
fontSize: 14,
fontWeight: FontWeight.bold,
@ -114,13 +126,18 @@ class OrderPreviewPage extends StatelessWidget {
MainAxisAlignment.spaceBetween,
children: [
Texts(
"${TranslationBase.of(context).subtotal}",
"${TranslationBase
.of(context)
.subtotal}",
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.w500,
),
Texts(
"${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}",
"${TranslationBase
.of(context)
.sar} ${(model.cartResponse.subtotal)
.toStringAsFixed(2)}",
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.w500,
@ -139,13 +156,19 @@ class OrderPreviewPage extends StatelessWidget {
MainAxisAlignment.spaceBetween,
children: [
Texts(
"${TranslationBase.of(context).shipping}",
"${TranslationBase
.of(context)
.shipping}",
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.w500,
),
Texts(
"${TranslationBase.of(context).sar} ${(model.totalAdditionalShippingCharge).toStringAsFixed(2)}",
"${TranslationBase
.of(context)
.sar} ${(model
.totalAdditionalShippingCharge)
.toStringAsFixed(2)}",
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.w500,
@ -164,13 +187,19 @@ class OrderPreviewPage extends StatelessWidget {
MainAxisAlignment.spaceBetween,
children: [
Texts(
"${TranslationBase.of(context).vat}",
"${TranslationBase
.of(context)
.vat}",
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.w500,
),
Texts(
"${TranslationBase.of(context).sar} ${(model.cartResponse.subtotalVatAmount).toStringAsFixed(2)}",
"${TranslationBase
.of(context)
.sar} ${(model.cartResponse
.subtotalVatAmount).toStringAsFixed(
2)}",
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.w500,
@ -189,13 +218,18 @@ class OrderPreviewPage extends StatelessWidget {
MainAxisAlignment.spaceBetween,
children: [
Texts(
TranslationBase.of(context).total,
TranslationBase
.of(context)
.total,
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.bold,
),
Texts(
"${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}",
"${TranslationBase
.of(context)
.sar} ${(model.cartResponse.subtotal)
.toStringAsFixed(2)}",
fontSize: 14,
color: Colors.black,
fontWeight: FontWeight.bold,
@ -269,7 +303,8 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
@override
Widget build(BuildContext context) {
return Consumer<PaymentCheckoutData>(
builder: (ctx, paymentData, _) => Container(
builder: (ctx, paymentData, _) =>
Container(
color: Colors.white,
child: address == null
? InkWell(
@ -289,7 +324,9 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
padding:
EdgeInsets.symmetric(vertical: 0, horizontal: 6),
child: Texts(
TranslationBase.of(context).selectAddress,
TranslationBase
.of(context)
.selectAddress,
fontSize: 14,
fontWeight: FontWeight.bold,
color: Color(0xff0000ff),
@ -324,7 +361,9 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
padding: EdgeInsets.symmetric(
vertical: 0, horizontal: 6),
child: Texts(
TranslationBase.of(context).shippingAddress,
TranslationBase
.of(context)
.shippingAddress,
fontSize: 14,
fontWeight: FontWeight.bold,
color: Colors.black,
@ -334,7 +373,9 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
InkWell(
onTap: () => {_navigateToAddressPage()},
child: Texts(
TranslationBase.of(context).changeAddress,
TranslationBase
.of(context)
.changeAddress,
fontSize: 12,
fontWeight: FontWeight.normal,
color: Color(0xff0000ff),
@ -354,7 +395,9 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
Padding(
padding: const EdgeInsets.symmetric(vertical: 8),
child: Texts(
"${address.address1} ${address.address2} ${address.address2},, ${address.city}, ${address.country} ${address.zipPostalCode}",
"${address.address1} ${address.address2} ${address
.address2},, ${address.city}, ${address
.country} ${address.zipPostalCode}",
fontSize: 12,
fontWeight: FontWeight.normal,
color: Colors.grey.shade500,
@ -400,7 +443,9 @@ class _SelectAddressWidgetState extends State<SelectAddressWidget> {
padding: EdgeInsets.symmetric(
vertical: 0, horizontal: 6),
child: Texts(
"${TranslationBase.of(context).shipBy}",
"${TranslationBase
.of(context)
.shipBy}",
fontSize: 12,
fontWeight: FontWeight.bold,
color: Colors.black,
@ -443,7 +488,8 @@ class _SelectPaymentOptionWidgetState extends State<SelectPaymentOptionWidget> {
_navigateToPaymentOption() {
Navigator.push(context, FadePage(page: PaymentMethodSelectPage()))
.then((result) => {
.then((result) =>
{
setState(() {
if (result != null) {
paymentOption = result;
@ -485,7 +531,9 @@ class _SelectPaymentOptionWidgetState extends State<SelectPaymentOptionWidget> {
padding:
EdgeInsets.symmetric(vertical: 0, horizontal: 6),
child: Texts(
TranslationBase.of(context).selectPaymentOption,
TranslationBase
.of(context)
.selectPaymentOption,
fontSize: 14,
fontWeight: FontWeight.bold,
color: Color(0xff0000ff),
@ -539,7 +587,9 @@ class _SelectPaymentOptionWidgetState extends State<SelectPaymentOptionWidget> {
InkWell(
onTap: () => {_navigateToPaymentOption()},
child: Texts(
TranslationBase.of(context).changeMethod,
TranslationBase
.of(context)
.changeMethod,
fontSize: 12,
fontWeight: FontWeight.normal,
color: Color(0xff0000ff),
@ -585,12 +635,15 @@ class _LakumWidgetState extends State<LakumWidget> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Texts(
"${TranslationBase.of(context).lakumPoints}",
"${TranslationBase
.of(context)
.lakumPoints}",
fontSize: 12,
fontWeight: FontWeight.bold,
),
Texts(
"${widget.model.paymentCheckoutData.lacumInformation.lakumInquiryInformationObjVersion.pointsBalanceAmount}",
"${widget.model.paymentCheckoutData.lacumInformation
.lakumInquiryInformationObjVersion.pointsBalanceAmount}",
fontSize: 12,
fontWeight: FontWeight.normal,
),
@ -605,7 +658,9 @@ class _LakumWidgetState extends State<LakumWidget> {
mainAxisAlignment: MainAxisAlignment.end,
children: [
Texts(
"${TranslationBase.of(context).riyal}",
"${TranslationBase
.of(context)
.riyal}",
fontSize: 12,
fontWeight: FontWeight.bold,
),
@ -700,7 +755,9 @@ class _LakumWidgetState extends State<LakumWidget> {
)),
),
child: Texts(
"${TranslationBase.of(context).use}",
"${TranslationBase
.of(context)
.use}",
fontSize: 12,
color: Colors.white,
fontWeight: FontWeight.bold,
@ -719,16 +776,21 @@ class _LakumWidgetState extends State<LakumWidget> {
class PaymentBottomWidget extends StatelessWidget {
final OrderPreviewViewModel model;
BuildContext context;
MyInAppBrowser browser;
PaymentBottomWidget(this.model);
@override
Widget build(BuildContext context) {
final scaffold = Scaffold.of(context);
this.context = context;
return Container(
margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0),
child: Consumer<PaymentCheckoutData>(
builder: (ctx, paymentData, _) => paymentData.cartDataVisible
builder: (ctx, paymentData, _) =>
paymentData.cartDataVisible
? Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@ -743,7 +805,10 @@ class PaymentBottomWidget extends StatelessWidget {
child: Row(
children: [
Texts(
"${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}",
"${TranslationBase
.of(context)
.sar} ${(model.cartResponse.subtotal)
.toStringAsFixed(2)}",
fontSize: 14,
fontWeight: FontWeight.bold,
color: Color(0xff929295),
@ -752,7 +817,9 @@ class PaymentBottomWidget extends StatelessWidget {
padding:
const EdgeInsets.symmetric(horizontal: 4),
child: Texts(
"${TranslationBase.of(context).inclusiveVat}",
"${TranslationBase
.of(context)
.inclusiveVat}",
fontSize: 8,
color: Color(0xff929295),
fontWeight: FontWeight.w600,
@ -762,7 +829,9 @@ class PaymentBottomWidget extends StatelessWidget {
),
),
Texts(
"${model.cartResponse.quantityCount} ${TranslationBase.of(context).items}",
"${model.cartResponse.quantityCount} ${TranslationBase
.of(context)
.items}",
fontSize: 10,
color: Colors.grey,
fontWeight: FontWeight.bold,
@ -782,8 +851,10 @@ class PaymentBottomWidget extends StatelessWidget {
paymentData.paymentOption != null)
? () async {
await model.makeOrder();
if (model.state != ViewState.Idle) {
AppToast.showSuccessToast(message: "Order has been placed successfully!!");
if (model.state == ViewState.Idle) {
AppToast.showSuccessToast(
message: "Order has been placed successfully!!");
openPayment(model.orderListModel[0], model.user);
} else {
AppToast.showErrorToast(message: model.error);
}
@ -794,7 +865,9 @@ class PaymentBottomWidget extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 16),
child: new Text(
"${TranslationBase.of(context).proceedPay}",
"${TranslationBase
.of(context)
.proceedPay}",
style: new TextStyle(
color: (paymentData.address != null &&
paymentData.paymentOption != null)
@ -821,4 +894,58 @@ class PaymentBottomWidget extends StatelessWidget {
),
);
}
openPayment(OrderDetailModel order,
AuthenticatedUser authenticatedUser,) {
browser = new MyInAppBrowser(
onExitCallback: onBrowserExit, onLoadStartCallback: onBrowserLoadStart);
browser.openPharmacyPaymentBrowser(
order,
order.orderTotal,
'ePharmacy Order',
order.id,
order.billingAddress.email,
order.customValuesXml,
"${authenticatedUser.firstName} ${authenticatedUser
.middleName} ${authenticatedUser.lastName}",
authenticatedUser.patientID,
authenticatedUser,
browser);
}
onBrowserLoadStart(String url) {
print("onBrowserLoadStart");
print(url);
MyInAppBrowser.successURLS.forEach((element) {
if (url.contains(element)) {
if (browser.isOpened()) browser.close();
MyInAppBrowser.isPaymentDone = true;
return;
}
});
MyInAppBrowser.errorURLS.forEach((element) {
if (url.contains(element)) {
if (browser.isOpened()) browser.close();
MyInAppBrowser.isPaymentDone = false;
return;
}
});
}
onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) {
print("onBrowserExit Called!!!!");
if (isPaymentMade) {
AppToast.showSuccessToast(
message: "شكراً\nPayment status for your order is Paid");
Navigator.pop(context);
Navigator.pop(context);
} else {
AppToast.showErrorToast(
message:
"Transaction Failed!\Your transaction is field to some reason please try again or contact to the administration");
}
}
}

@ -72,7 +72,7 @@ class _ProductOrderItemState extends State<ProductOrderItem> {
child: Texts(
projectProvider.isArabic
? widget.item.product.namen
: widget.item.product.name,
: "${widget.item.product.name}",
regular: true,
textAlign: TextAlign.justify,
fontSize: 12,
@ -88,7 +88,9 @@ class _ProductOrderItemState extends State<ProductOrderItem> {
),
margin: const EdgeInsets.only(bottom: 4),
),
Row(
Container(
margin: EdgeInsets.symmetric(vertical: 4),
child: Row(
children: [
InkWell(
onTap: () =>
@ -96,11 +98,9 @@ class _ProductOrderItemState extends State<ProductOrderItem> {
child: Container(
width: 25,
height: 25,
child: Center(
child: Texts(
"-",
color: Colors.grey.shade400,
)),
child: Icon(
Icons.remove, color: Colors.grey.shade400, size: 20,
),
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
@ -141,11 +141,9 @@ class _ProductOrderItemState extends State<ProductOrderItem> {
child: Container(
width: 25,
height: 25,
child: Center(
child: Texts(
"+",
color: Colors.grey.shade400,
)),
child: Icon(
Icons.add, color: Colors.grey.shade400, size: 20,
),
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey.shade400,
@ -173,6 +171,7 @@ class _ProductOrderItemState extends State<ProductOrderItem> {
),
)
],
),
)
],
),

Loading…
Cancel
Save