kyc and update risk profile api integration and issues fixed

This commit is contained in:
jayesh
2024-05-10 15:48:07 +05:30
parent a6df6e9be0
commit 112ece34cf
16 changed files with 610 additions and 170 deletions

View File

@@ -309,7 +309,7 @@ class _ShortTradeState extends State<ShortTrade> {
date: callRecommendationsModel
.data!.activeCalls![index].createdAt!,
premium:
"${callRecommendationsModel.data!.activeCalls![index].stopLoss}",
"${callRecommendationsModel.data!.activeCalls![index].currentPrice}",
price1:
"${callRecommendationsModel.data!.activeCalls![index].targetPrice}",
stoploss:
@@ -425,7 +425,7 @@ class _ShortTradeState extends State<ShortTrade> {
date: callRecommendationsModel
.data!.exitedCalls![index].createdAt!,
premium:
"${callRecommendationsModel.data!.exitedCalls![index].stopLoss}",
"${callRecommendationsModel.data!.exitedCalls![index].currentPrice}",
price1:
"${callRecommendationsModel.data!.exitedCalls![index].targetPrice}",
stoploss:

View File

@@ -245,7 +245,9 @@ class _SideMenuState extends State<SideMenu> {
),
selected: true,
onTap: () {
Get.toNamed(RouteName.kyc);
Get.toNamed(RouteName.kyc, arguments: {
"fromScreen": "sidemenu-flow",
});
},
),
Container(
@@ -276,7 +278,9 @@ class _SideMenuState extends State<SideMenu> {
selected: true,
onTap: () {
setState(() {
Get.toNamed(RouteName.updateriskprofile);
Get.toNamed(RouteName.updateriskprofile, arguments: {
"fromScreen": "sidemenu-flow",
});
});
},
),

View File

@@ -94,7 +94,9 @@ class _AddDetailsState extends State<AddDetails> {
final resp = await AddDetailsAPI(updata).adddetailsApi();
if (resp.status == ResponseStatus.SUCCESS) {
Get.back();
Get.toNamed(RouteName.kyc);
Get.toNamed(RouteName.kyc, arguments: {
"fromScreen": "login-flow",
});
} else if (resp.status == ResponseStatus.PRIVATE) {
Get.back();
String? message = resp.data['message'];

View File

@@ -1,6 +1,7 @@
import 'dart:io';
import 'dart:ui';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -12,17 +13,42 @@ import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
import 'package:traderscircuit/Utils/Common/CustomTextFormField.dart';
import 'package:traderscircuit/Utils/Common/commonBotton.dart';
import 'package:traderscircuit/Utils/base_manager.dart';
import 'package:traderscircuit/Utils/dialogs.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/Utils/utils.dart';
import 'package:traderscircuit/model/KycModel/kyc_model.dart';
import 'package:traderscircuit/resources/routes/route_name.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
import 'package:traderscircuit/view_model/KycApi/kyc_api.dart';
import 'package:traderscircuit/view_model/Login/add_kyc_api.dart';
import '../../controller/kyc_controller.dart';
import '../../view_model/RiskProfileApi/risk_profile_api.dart';
import 'package:path/path.dart' as path;
class AlphaNumericTextFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
final regExp = RegExp(r'^[a-zA-Z0-9]*$');
if (regExp.hasMatch(newValue.text)) {
return newValue;
}
return oldValue;
}
}
class UpperCaseTextFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
return TextEditingValue(
text: newValue.text.toUpperCase(),
selection: newValue.selection,
);
}
}
class Kyc extends StatefulWidget {
const Kyc({super.key});
@@ -39,12 +65,21 @@ class _KycState extends State<Kyc> {
KYCController kycController = Get.put(KYCController());
String fromScreen = Get.arguments['fromScreen'];
var panFMulti;
var panBMulti;
var aadFMulti;
var aadBMulti;
_addKyc() async {
if (kycController.panFrontImage.value.isEmpty ||
kycController.panBackImage.value.isEmpty ||
kycController.aadharFrontImage.value.isEmpty ||
kycController.aadharBackImage.value.isEmpty) {
utils.showToast("Please add images to proceed further");
return;
}
panFMulti = await MultipartFile.fromFile(
kycController.panFrontImage.value,
filename: path.basename(kycController.panFrontImage.value),
@@ -76,7 +111,9 @@ class _KycState extends State<Kyc> {
final resp = await AddKycAPI(formdata).addkycApi();
if (resp.status == ResponseStatus.SUCCESS) {
Get.back();
Get.toNamed(RouteName.updateriskprofile);
Get.toNamed(RouteName.updateriskprofile, arguments: {
"fromScreen": "login-flow",
});
} else if (resp.status == ResponseStatus.PRIVATE) {
Get.back();
String? message = resp.data['message'];
@@ -93,6 +130,26 @@ class _KycState extends State<Kyc> {
}
}
@override
void initState() {
if (fromScreen == "sidemenu-flow") {
KycApi().getKycUserApi().then((value) {
GetKYCModel getKYCModel = GetKYCModel.fromJson(value.data);
pannumber.text = getKYCModel.data![0].panNumber!;
aadhaarnumber.text = getKYCModel.data![0].adharcardNumber!;
kycController.panFrontImage.value =
getKYCModel.data![0].pancardImageFront!;
kycController.panBackImage.value =
getKYCModel.data![0].pancardImageBack!;
kycController.aadharFrontImage.value =
getKYCModel.data![0].adharcardImageFront!;
kycController.aadharBackImage.value =
getKYCModel.data![0].adharcardImageBack!;
});
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Obx(
@@ -122,17 +179,23 @@ class _KycState extends State<Kyc> {
child: ListView(
physics: const BouncingScrollPhysics(),
children: [
fromScreen == "sidemenu-flow"
? SizedBox()
: Row(
children: [
text18W500("Step 1 : Personal Information"),
],
),
fromScreen == "sidemenu-flow"
? SizedBox()
: SizedBox(
height: 30.h,
),
Row(
children: [
text18W500("Step 1 : Personal Information"),
],
),
SizedBox(
height: 30.h,
),
Row(
children: [
text18W400("Upload pan card image"),
fromScreen == "sidemenu-flow"
? text18W400("View pan card image")
: text18W400("Upload pan card image"),
],
),
SizedBox(
@@ -185,33 +248,46 @@ class _KycState extends State<Kyc> {
const EdgeInsets.symmetric(
vertical: 20,
horizontal: 40),
child: Image(
image: FileImage(
File(
kycController
.panFrontImage.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
child: fromScreen ==
"sidemenu-flow"
? CachedNetworkImage(
imageUrl: kycController
.panFrontImage.value,
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
)
: Image(
image: FileImage(
File(
kycController
.panFrontImage
.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
),
Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController
.panFrontImage.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
fromScreen == "sidemenu-flow"
? SizedBox()
: Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController
.panFrontImage
.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
],
)
: Center(
@@ -276,33 +352,46 @@ class _KycState extends State<Kyc> {
const EdgeInsets.symmetric(
vertical: 20,
horizontal: 40),
child: Image(
image: FileImage(
File(
kycController
.panBackImage.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
child: fromScreen ==
"sidemenu-flow"
? CachedNetworkImage(
imageUrl: kycController
.panBackImage.value,
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
)
: Image(
image: FileImage(
File(
kycController
.panBackImage
.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
),
Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController
.panBackImage.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
fromScreen == "sidemenu-flow"
? SizedBox()
: Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController
.panBackImage
.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
],
)
: Center(
@@ -338,7 +427,15 @@ class _KycState extends State<Kyc> {
height: 15.h,
),
CustomTextFormField(
enabled:
fromScreen == "sidemenu-flow" ? false : true,
textCapV: TextCapitalization.characters,
textEditingController: pannumber,
inputFormatters: [
AlphaNumericTextFormatter(),
UpperCaseTextFormatter(),
LengthLimitingTextInputFormatter(10),
],
),
SizedBox(
height: 15.h,
@@ -352,15 +449,24 @@ class _KycState extends State<Kyc> {
height: 15.h,
),
CustomTextFormField(
enabled:
fromScreen == "sidemenu-flow" ? false : true,
textEditingController: aadhaarnumber,
texttype: TextInputType.phone,
inputFormatters: [
FilteringTextInputFormatter.allow(
RegExp(r'[0-9]')),
LengthLimitingTextInputFormatter(12),
],
),
SizedBox(
height: 30.h,
),
Row(
children: [
text18W400("Upload Aadhar card image"),
fromScreen == "sidemenu-flow"
? text18W400("View Aadhar card image")
: text18W400("Upload Aadhar card image"),
],
),
SizedBox(
@@ -413,33 +519,47 @@ class _KycState extends State<Kyc> {
const EdgeInsets.symmetric(
vertical: 20,
horizontal: 40),
child: Image(
image: FileImage(
File(
kycController
.aadharFrontImage.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
child:
fromScreen == "sidemenu-flow"
? CachedNetworkImage(
imageUrl: kycController
.aadharFrontImage
.value,
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
)
: Image(
image: FileImage(
File(
kycController
.aadharFrontImage
.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
),
Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController.aadharFrontImage
.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
fromScreen == "sidemenu-flow"
? SizedBox()
: Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController
.aadharFrontImage
.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
],
)
: Center(
@@ -505,33 +625,47 @@ class _KycState extends State<Kyc> {
const EdgeInsets.symmetric(
vertical: 20,
horizontal: 40),
child: Image(
image: FileImage(
File(
kycController
.aadharBackImage.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
child:
fromScreen == "sidemenu-flow"
? CachedNetworkImage(
imageUrl: kycController
.aadharBackImage
.value,
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
)
: Image(
image: FileImage(
File(
kycController
.aadharBackImage
.value,
),
),
fit: BoxFit.cover,
width: Get.width,
height: 50.h,
),
),
Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController.aadharBackImage
.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
fromScreen == "sidemenu-flow"
? SizedBox()
: Positioned(
top: 6,
right: 10,
child: InkWell(
onTap: () {
kycController
.aadharBackImage
.value = "";
},
child: SvgPicture.asset(
"assets/images/svg/cancel.svg",
width: 18,
height: 18,
),
),
)
],
)
: Center(
@@ -558,13 +692,15 @@ class _KycState extends State<Kyc> {
SizedBox(
height: 70.h,
),
CommonBtn(
text: "Next",
onTap: () {
_addKyc();
// Get.toNamed(RouteName.updateriskprofile);
},
),
fromScreen == "sidemenu-flow"
? SizedBox()
: CommonBtn(
text: "Next",
onTap: () {
_addKyc();
// Get.toNamed(RouteName.updateriskprofile);
},
),
SizedBox(
height: 10.h,
),

View File

@@ -8,7 +8,9 @@ import 'package:get/get.dart' hide FormData;
import 'package:traderscircuit/Utils/Common/CommonAppbar.dart';
import 'package:traderscircuit/Utils/dialogs.dart';
import 'package:traderscircuit/Utils/text.dart';
import 'package:traderscircuit/Utils/utils.dart';
import 'package:traderscircuit/controller/risk_profile_controller.dart';
import 'package:traderscircuit/model/RiskProfileModel/get_user_risk_profile_model.dart';
import 'package:traderscircuit/model/RiskProfileModel/risk_profile_ques_answer_model.dart';
import 'package:traderscircuit/view/onBoarding/splashScreen1.dart';
@@ -32,6 +34,8 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
List<int> answerIdList = [];
List<Map<String, List<String>>> dropHeader = [];
String fromScreen = Get.arguments["fromScreen"];
@override
void initState() {
RiskProfileApi().getRiskProfileData().then((value) {
@@ -47,8 +51,23 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
dropHeader.add({a.question!: titleTxt});
}
log(dropHeader.toString());
isLoading.value = false;
if (fromScreen == "sidemenu-flow") {
riskProfileController.selectedData.clear();
RiskProfileApi().getUserRiskProfileData().then((value) {
GetUserRiskProfileModel getUserRiskProfileModel =
GetUserRiskProfileModel.fromJson(value.data);
for (var a in getUserRiskProfileModel.data!) {
questionIdList.add(a.questionId!);
answerIdList.add(a.answerId!);
riskProfileController.selectedData
.add({a.questionData!.question!: a.answerData!.answer!});
}
isLoading.value = false;
setState(() {});
});
} else {
isLoading.value = false;
}
});
super.initState();
}
@@ -98,6 +117,9 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
CommonBtn(
text: "Submit",
onTap: () {
log(riskProfileController
.selectedData.length
.toString());
questionIdList.clear();
answerIdList.clear();
if (riskProfileController
@@ -109,6 +131,7 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
utils.showToast(
"All Fields Required");
} else {
Utils.loader();
// Iterate through selected data and match with provided data
for (var entry
in riskProfileController
@@ -157,6 +180,7 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
jsonEncode(answerIdList),
}))
.then((value) {
Get.back();
Map<String, dynamic>
responseData =
Map<String, dynamic>.from(
@@ -179,7 +203,10 @@ class _UpdateRiskProfileState extends State<UpdateRiskProfile> {
.riskProfileQuestionAnswerModel
.data![index]
.question!,
"Select your goal",
riskProfileController
.riskProfileQuestionAnswerModel
.data![index]
.hint!,
index);
})),
],

View File

@@ -84,9 +84,13 @@ class _VerifyOTPState extends State<VerifyOTP> {
isProfileUpdated == 0
? Get.toNamed(RouteName.adddetails)
: isKycUpdated == 0
? Get.toNamed(RouteName.kyc)
? Get.toNamed(RouteName.kyc, arguments: {
"fromScreen": "login-flow",
})
: isriskProfileUpdated == 0
? Get.toNamed(RouteName.updateriskprofile)
? Get.toNamed(RouteName.updateriskprofile, arguments: {
"fromScreen": "login-flow",
})
: Get.toNamed(RouteName.mainscreen);
// Get.toNamed(RouteName.mainscreen);