check activation code

merge-requests/878/head
hussam al-habibeh 4 years ago
parent 9eadc0f0b1
commit 13c42b297a

@ -39,20 +39,21 @@ class PatientRegistrationService extends BaseService {
{SendActivationCodeByOTPNotificationTypeForRegistrationModel
registrationModel,
int otpType,
PatientRegistrationViewModel user}) async {
PatientRegistrationViewModel user,
CheckPatientForRegistrationModel
checkPatientForRegistrationModel}) async {
registrationModel =
SendActivationCodeByOTPNotificationTypeForRegistrationModel(
oTPSendType: otpType,
patientIdentificationID:
user.checkPatientForRegistrationModel.patientIdentificationID,
patientMobileNumber:
user.checkPatientForRegistrationModel.patientMobileNumber,
zipCode: user.checkPatientForRegistrationModel.zipCode,
checkPatientForRegistrationModel.patientIdentificationID,
patientMobileNumber: checkPatientForRegistrationModel.patientMobileNumber,
zipCode: checkPatientForRegistrationModel.zipCode,
patientOutSA: false,
healthId: "30000018540264",
dOB: user.checkPatientForRegistrationModel.dOB,
isRegister: user.checkPatientForRegistrationModel.isRegister,
isHijri: user.checkPatientForRegistrationModel.isHijri,
dOB: checkPatientForRegistrationModel.dOB,
isRegister: checkPatientForRegistrationModel.isRegister,
isHijri: checkPatientForRegistrationModel.isHijri,
);
hasError = false;
await baseAppClient.post(SEND_ACTIVATION_CODE_BY_OTP_NOT_TYPE,
@ -69,8 +70,9 @@ class PatientRegistrationService extends BaseService {
checkActivationCode(CheckActivationCodeModel registrationModel) async {
hasError = false;
await baseAppClient.post(CHECK_ACTIVATION_CODE_FOR_PATIENT,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
onSuccess: (dynamic response, int statusCode) {
registrationModel = CheckActivationCodeModel.fromJson(response);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: registrationModel.toJson());

@ -14,19 +14,17 @@ class PatientRegistrationViewModel extends BaseViewModel {
PatientRegistrationService _patientRegistrationService =
locator<PatientRegistrationService>();
GetPatientInfoResponseModel get getPatientInfoResponseModel =>_patientRegistrationService.getPatientInfoResponseModel;
CheckPatientForRegistrationModel checkPatientForRegistrationModel ;
GetPatientInfoResponseModel get getPatientInfoResponseModel =>
_patientRegistrationService.getPatientInfoResponseModel;
CheckPatientForRegistrationModel checkPatientForRegistrationModel;
Future checkPatientForRegistration(
CheckPatientForRegistrationModel registrationModel) async {
checkPatientForRegistrationModel = registrationModel;
checkPatientForRegistrationModel =CheckPatientForRegistrationModel.fromJson(registrationModel.toJson());
checkPatientForRegistrationModel =
CheckPatientForRegistrationModel.fromJson(registrationModel.toJson());
setState(ViewState.BusyLocal);
await _patientRegistrationService
.checkPatientForRegistration(registrationModel);
@ -40,111 +38,106 @@ class PatientRegistrationViewModel extends BaseViewModel {
Future getPatientInfo(
GetPatientInfoRequestModel getPatientInfoRequestModel) async {
setState(ViewState.BusyLocal);
/// TODO Elham* return call service when it working
_patientRegistrationService.getPatientInfoResponseModel = GetPatientInfoResponseModel.fromJson({
"Date": null,
"LanguageID": 0,
"ServiceName": 0,
"Time": null,
"AndroidLink": null,
"AuthenticationTokenID": null,
"Data": null,
"Dataw": false,
"DietType": 0,
"ErrorCode": null,
"ErrorEndUserMessage": null,
"ErrorEndUserMessageN": null,
"ErrorMessage": null,
"ErrorType": 0,
"FoodCategory": 0,
"IOSLink": null,
"IsAuthenticated": false,
"MealOrderStatus": 0,
"MealType": 0,
"MessageStatus": 1,
"NumberOfResultRecords": 0,
"PatientBlodType": null,
"SuccessMsg": null,
"SuccessMsgN": null,
"VidaUpdatedResponse": null,
"AccessTokenObject": null,
"Age": 33,
"ClientIdentifierId": null,
"CreatedBy": 0,
"DateOfBirth": "07/31/1988",
"FirstNameAr": "سفيان",
"FirstNameEn": "SUFIAN",
"Gender": "M",
"GenderAr": null,
"GenderEn": null,
"HealthId": "30000018540264",
"IdNumber": "1062938285",
"IdType": "NationalId",
"IsHijri": false,
"IsInstertedOrUpdated": 0,
"IsNull": 0,
"IsPatientExistNHIC": 0,
"IsRecordLockedByCurrentUser": false,
"LastNameAr": "عثمان",
"LastNameEn": "OTHMAN",
"List_ActiveAccessToken": null,
"MaritalStatus": "غير معروف",
"MaritalStatusCode": "U",
"NationalDateOfBirth": "18/12/1408",
"Nationality": "السعودية",
"NationalityCode": "SAU",
"Occupation": "طالب",
"PCDTransactionDataResultList": null,
"PCD_GetVidaPatientForManualVerificationList": null,
"PCD_NHIC_HMG_PatientDetailsMatchCalulationList": null,
"PCD_ReturnValue": 0,
"PatientStatus": "-",
"PlaceofBirth": "فينا",
"PractitionerStatusCode": null,
"PractitionerStatusDescAr": null,
"PractitionerStatusDescEn": null,
"RowCount": 0,
"SecondNameAr": "عبدالهادي",
"SecondNameEn": "ABDULHADI",
"ThirdNameAr": "احمد",
"ThirdNameEn": "A",
"YakeenVidaPatientDataStatisticsByPatientIdList": null,
"YakeenVidaPatientDataStatisticsList": null,
"YakeenVidaPatientDataStatisticsPrefferedList": null,
"accessToken": null,
"categoryCode": 0,
"categoryNameAr": null,
"categoryNameEn": null,
"constraintCode": 0,
"constraintNameAr": null,
"constraintNameEn": null,
"content": null,
"errorList": null,
"licenseExpiryDate": null,
"licenseIssuedDate": null,
"licenseStatusCode": null,
"licenseStatusDescAr": null,
"licenseStatusDescEn": null,
"organizations": null,
"registrationNumber": null,
"specialtyCode": 0,
"specialtyNameAr": null,
"specialtyNameEn": null
});
_patientRegistrationService.getPatientInfoResponseModel =
GetPatientInfoResponseModel.fromJson({
"Date": null,
"LanguageID": 0,
"ServiceName": 0,
"Time": null,
"AndroidLink": null,
"AuthenticationTokenID": null,
"Data": null,
"Dataw": false,
"DietType": 0,
"ErrorCode": null,
"ErrorEndUserMessage": null,
"ErrorEndUserMessageN": null,
"ErrorMessage": null,
"ErrorType": 0,
"FoodCategory": 0,
"IOSLink": null,
"IsAuthenticated": false,
"MealOrderStatus": 0,
"MealType": 0,
"MessageStatus": 1,
"NumberOfResultRecords": 0,
"PatientBlodType": null,
"SuccessMsg": null,
"SuccessMsgN": null,
"VidaUpdatedResponse": null,
"AccessTokenObject": null,
"Age": 33,
"ClientIdentifierId": null,
"CreatedBy": 0,
"DateOfBirth": "07/31/1988",
"FirstNameAr": "سفيان",
"FirstNameEn": "SUFIAN",
"Gender": "M",
"GenderAr": null,
"GenderEn": null,
"HealthId": "30000018540264",
"IdNumber": "1062938285",
"IdType": "NationalId",
"IsHijri": false,
"IsInstertedOrUpdated": 0,
"IsNull": 0,
"IsPatientExistNHIC": 0,
"IsRecordLockedByCurrentUser": false,
"LastNameAr": "عثمان",
"LastNameEn": "OTHMAN",
"List_ActiveAccessToken": null,
"MaritalStatus": "غير معروف",
"MaritalStatusCode": "U",
"NationalDateOfBirth": "18/12/1408",
"Nationality": "السعودية",
"NationalityCode": "SAU",
"Occupation": "طالب",
"PCDTransactionDataResultList": null,
"PCD_GetVidaPatientForManualVerificationList": null,
"PCD_NHIC_HMG_PatientDetailsMatchCalulationList": null,
"PCD_ReturnValue": 0,
"PatientStatus": "-",
"PlaceofBirth": "فينا",
"PractitionerStatusCode": null,
"PractitionerStatusDescAr": null,
"PractitionerStatusDescEn": null,
"RowCount": 0,
"SecondNameAr": "عبدالهادي",
"SecondNameEn": "ABDULHADI",
"ThirdNameAr": "احمد",
"ThirdNameEn": "A",
"YakeenVidaPatientDataStatisticsByPatientIdList": null,
"YakeenVidaPatientDataStatisticsList": null,
"YakeenVidaPatientDataStatisticsPrefferedList": null,
"accessToken": null,
"categoryCode": 0,
"categoryNameAr": null,
"categoryNameEn": null,
"constraintCode": 0,
"constraintNameAr": null,
"constraintNameEn": null,
"content": null,
"errorList": null,
"licenseExpiryDate": null,
"licenseIssuedDate": null,
"licenseStatusCode": null,
"licenseStatusDescAr": null,
"licenseStatusDescEn": null,
"organizations": null,
"registrationNumber": null,
"specialtyCode": 0,
"specialtyNameAr": null,
"specialtyNameEn": null
});
// await _patientRegistrationService.
// getPatientInfo(getPatientInfoRequestModel);
// if (_patientRegistrationService.hasError) {
// error = _patientRegistrationService.error;
// setState(ViewState.ErrorLocal);
// } else
// setState(ViewState.Idle);
await _patientRegistrationService
.getPatientInfo(getPatientInfoRequestModel);
if (_patientRegistrationService.hasError) {
error = _patientRegistrationService.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
setState(ViewState.Idle);
}
Future sendActivationCodeByOTPNotificationType(
@ -153,8 +146,12 @@ class PatientRegistrationViewModel extends BaseViewModel {
int otpType,
PatientRegistrationViewModel user}) async {
setState(ViewState.Busy);
print(checkPatientForRegistrationModel);
print(checkPatientForRegistrationModel);
await _patientRegistrationService.sendActivationCodeByOTPNotificationType(
otpType: otpType);
otpType: otpType,
checkPatientForRegistrationModel: checkPatientForRegistrationModel);
if (_patientRegistrationService.hasError) {
error = _patientRegistrationService.error;
setState(ViewState.Error);

@ -99,16 +99,16 @@ class _RegisterPatientPageState extends State<RegisterPatientPage>
},
scrollDirection: Axis.horizontal,
children: <Widget>[
RegisterSearchPatientPage(changePageViewIndex: changePageViewIndex,model: model),
RegisterConfirmationPatientPage(model: model,),
RegisterSearchPatientPage(
changePageViewIndex: changePageViewIndex,
model: model),
ActivationPage(
model: model,
changePageViewIndex: changePageViewIndex,
),
ActivationPage(
user: model,
RegisterConfirmationPatientPage(
model: model,
),
RegisterConfirmationPatientPage(),
]),
),
),

@ -2,147 +2,475 @@ import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/CheckPatientForRegistrationModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientRegistrationViewModel.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart';
import 'package:hexcolor/hexcolor.dart';
class ActivationPage extends StatefulWidget {
PatientRegistrationViewModel user = PatientRegistrationViewModel();
ActivationPage({this.user});
final PatientRegistrationViewModel model;
final Function changePageViewIndex;
ActivationPage({this.model, this.changePageViewIndex});
@override
_ActivationPageState createState() => _ActivationPageState();
}
class _ActivationPageState extends State<ActivationPage> {
bool isSendOtp = false;
final verifyAccountForm = GlobalKey<FormState>();
TextStyle buildTextStyle() {
return TextStyle(
fontSize: SizeConfig.textMultiplier * 3,
);
}
Map verifyAccountFormValue = {
'digit1': '',
'digit2': '',
'digit3': '',
'digit4': '',
};
final focusD1 = FocusNode();
final focusD2 = FocusNode();
final focusD3 = FocusNode();
final focusD4 = FocusNode();
TextEditingController digit1 = TextEditingController(text: "");
TextEditingController digit2 = TextEditingController(text: "");
TextEditingController digit3 = TextEditingController(text: "");
TextEditingController digit4 = TextEditingController(text: "");
@override
Widget build(BuildContext context) {
return BaseView<PatientRegistrationViewModel>(
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
return AppScaffold(
baseViewModel: widget.model,
isShowAppBar: false,
body: Column(
children: [
Container(
width: double.infinity,
margin: EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
"Please select how you want to be verified",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.2,
fontWeight: FontWeight.w800,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: InkWell(
onTap: () {
model.sendActivationCodeByOTPNotificationType(
otpType: 1);
},
child: Container(
height:
MediaQuery.of(context).size.height * 0.233,
margin: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10),
),
border: Border.all(
color: HexColor('#707070'), width: 0.1),
),
child: Column(
children: [
Row(
children: [
Image.asset(
"assets/images/verify-sms.png",
height:
MediaQuery.of(context).size.height *
0.15,
width:
MediaQuery.of(context).size.width *
0.15,
Visibility(
//visible: isSendOtp,
child: !isSendOtp
? Container(
width: double.infinity,
margin: EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
"Please select how you want to be verified",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.2,
fontWeight: FontWeight.w800,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
child: InkWell(
onTap: () async {
setState(() {
isSendOtp = true;
});
await widget.model
.sendActivationCodeByOTPNotificationType(
otpType: 1);
},
child: Container(
height:
MediaQuery.of(context).size.height *
0.233,
margin: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10),
),
border: Border.all(
color: HexColor('#707070'),
width: 0.1),
),
child: Column(
children: [
Row(
children: [
Image.asset(
"assets/images/verify-sms.png",
height: MediaQuery.of(context)
.size
.height *
0.15,
width: MediaQuery.of(context)
.size
.width *
0.15,
),
],
),
SizedBox(
height: 20,
),
AppText(
"Verify through SMS",
fontSize: 14,
color: Color(0xFF2E303A),
fontWeight: FontWeight.bold,
)
],
),
],
),
),
SizedBox(
height: 20,
),
Expanded(
child: InkWell(
onTap: () async {
isSendOtp = false;
await widget.model
.sendActivationCodeByOTPNotificationType(
otpType: 1, user: widget.model);
},
child: Container(
height:
MediaQuery.of(context).size.height *
0.233,
margin: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10),
),
border: Border.all(
color: HexColor('#707070'),
width: 0.1),
),
child: Column(
children: [
Row(
children: [
Image.asset(
"assets/images/verify-whtsapp.png",
height: MediaQuery.of(context)
.size
.height *
0.15,
width: MediaQuery.of(context)
.size
.width *
0.15,
),
],
),
SizedBox(
height: 20,
),
AppText(
"Verify through WhatsApp",
fontSize: 14,
color: Color(0xFF2E303A),
fontWeight: FontWeight.bold,
)
],
),
),
),
AppText(
"Verify through SMS",
fontSize: 14,
color: Color(0xFF2E303A),
fontWeight: FontWeight.bold,
)
],
),
),
],
),
),
],
),
Expanded(
child: InkWell(
onTap: () {
model.sendActivationCodeByOTPNotificationType(
otpType: 1);
},
child: Container(
height:
MediaQuery.of(context).size.height * 0.233,
margin: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(
Radius.circular(10),
),
border: Border.all(
color: HexColor('#707070'), width: 0.1),
),
child: Column(
children: [
Row(
children: [
Image.asset(
"assets/images/verify-whtsapp.png",
height:
MediaQuery.of(context).size.height *
0.15,
width:
MediaQuery.of(context).size.width *
0.15,
),
)
: Container(
width: double.infinity,
margin: EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
"Please enter the verification code sent to 02221552",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.2,
fontWeight: FontWeight.w800,
),
Row(
children: [
Center(
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Form(
key: verifyAccountForm,
child: Padding(
padding: EdgeInsets.only(top: 20),
child: Directionality(
textDirection: TextDirection.ltr,
child: Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: <Widget>[
Container(
width: SizeConfig
.realScreenWidth *
0.16,
margin: EdgeInsets.all(5),
child: TextFormField(
textInputAction:
TextInputAction.next,
style: buildTextStyle(),
autofocus: true,
maxLength: 1,
controller: digit1,
textAlign: TextAlign.center,
keyboardType:
TextInputType.number,
decoration:
buildInputDecoration(
context),
onSaved: (val) {},
//validator: validateCodeDigit,
onFieldSubmitted: (_) {
FocusScope.of(context)
.requestFocus(
focusD2);
},
onChanged: (val) {
if (val.length == 1) {
FocusScope.of(context)
.requestFocus(
focusD2);
verifyAccountFormValue[
'digit1'] =
val.trim();
//checkValue();
}
},
),
),
Container(
width: SizeConfig
.realScreenWidth *
0.16,
margin: EdgeInsets.all(5),
child: TextFormField(
focusNode: focusD2,
textInputAction:
TextInputAction.next,
maxLength: 1,
controller: digit2,
textAlign: TextAlign.center,
style: buildTextStyle(),
keyboardType:
TextInputType.number,
decoration:
buildInputDecoration(
context),
onSaved: (val) {},
onFieldSubmitted: (_) {
FocusScope.of(context)
.requestFocus(
focusD3);
},
onChanged: (val) {
if (val.length == 1) {
FocusScope.of(context)
.requestFocus(
focusD3);
verifyAccountFormValue[
'digit2'] =
val.trim();
//checkValue();
}
},
//validator: validateCodeDigit,
),
),
Container(
margin: EdgeInsets.all(5),
width: SizeConfig
.realScreenWidth *
0.16,
child: TextFormField(
focusNode: focusD3,
textInputAction:
TextInputAction.next,
maxLength: 1,
controller: digit3,
textAlign:
TextAlign.center,
style: buildTextStyle(),
keyboardType:
TextInputType.number,
decoration:
buildInputDecoration(
context),
onSaved: (val) {},
onFieldSubmitted: (_) {
FocusScope.of(context)
.requestFocus(
focusD4);
},
onChanged: (val) {
if (val.length == 1) {
FocusScope.of(context)
.requestFocus(
focusD4);
verifyAccountFormValue[
'digit3'] =
val.trim();
//checkValue();
}
},
// validator:
// validateCodeDigit,
)),
Container(
margin: EdgeInsets.all(5),
width: SizeConfig
.realScreenWidth *
0.16,
child: TextFormField(
focusNode: focusD4,
maxLength: 1,
textAlign:
TextAlign.center,
style: buildTextStyle(),
controller: digit4,
keyboardType:
TextInputType.number,
decoration:
buildInputDecoration(
context),
onFieldSubmitted: (_) {
FocusScope.of(context)
.requestFocus(
focusD4);
},
onChanged: (val) {
if (val.length == 1) {
verifyAccountFormValue[
'digit4'] =
val.trim();
//checkValue();
}
},
// validator:
// validateCodeDigit,
)),
],
)),
),
],
),
SizedBox(
height: 20,
),
AppText(
"Verify through WhatsApp",
fontSize: 14,
color: Color(0xFF2E303A),
fontWeight: FontWeight.bold,
)
],
),
),
Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
mainAxisAlignment:
MainAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context)
.validationMessage +
' ',
fontWeight: FontWeight.w600,
fontSize: 14,
),
// AppText(
// displayTime,
// color: Colors.red,
// textAlign: TextAlign.start,
// fontWeight: FontWeight.bold,
// fontSize: 14,
// )
]),
)
],
))),
],
),
),
],
),
],
),
),
],
),
),
)
],
),
bottomSheet: isSendOtp
? Container(
height: 60,
margin: EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Row(
children: [
Expanded(
child: Container(
child: AppButton(
title: TranslationBase.of(context).cancel,
hasBorder: true,
vPadding: 12,
hPadding: 8,
borderColor: Color(0xFFeaeaea),
color: Color(0xFFeaeaea),
fontColor: Colors.black,
fontSize: 2.2,
onPressed: () {
Navigator.of(context).pop();
},
),
),
),
SizedBox(
width: 8,
),
Expanded(
child: Container(
child: AppButton(
title: TranslationBase.of(context).next,
hasBorder: true,
vPadding: 12,
hPadding: 8,
borderColor: Color(0xFFB8382B),
color: Color(0xFFB8382B),
fontColor: Colors.white,
fontSize: 2.0,
onPressed: () async {
//widget.model.checkActivationCode(),
},
),
),
),
],
),
)
: null);
}
InputDecoration buildInputDecoration(BuildContext context) {
return InputDecoration(
counterText: " ",
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10)),
borderSide: BorderSide(color: Colors.grey[300]),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide(color: Colors.grey[300]),
),
errorBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide(color: Colors.grey[300]),
),
focusedErrorBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
borderSide: BorderSide(color: Theme.of(context).errorColor),
),
);
}

Loading…
Cancel
Save