diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/model/PicturesDTO.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/model/PicturesDTO.java index 7597fb5f..34f2ea48 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/model/PicturesDTO.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/model/PicturesDTO.java @@ -57,4 +57,8 @@ public class PicturesDTO { public File getAlternateIDImageFile() { return alternateIDImageFile; } + + public boolean hasValidAlternateImage() { + return (alternateIDImageFile!=null||(anotherIDPicture!=null&&anotherIDPicture.length()>0)); + } } diff --git a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java index 5bbec0fe..762e6917 100644 --- a/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java +++ b/app/src/main/java/com/gmeremit/online/gmeremittance_native/kycV3/presenter/KYCV3ViewModel.java @@ -96,6 +96,9 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter private BehaviorSubject form1ValidationSubject; private BehaviorSubject form2ValidationSubject; private BehaviorSubject form3ValidationSubject; + private BehaviorSubject alternateIdImageValidationSubject; + private BehaviorSubject userIsKoreanSubject; + public KYCV3ViewModel(KYCV3PresenterInterface.KYCV3ViewContractInterface view, KYCV3GatewayInterface gatewayInterface) { @@ -126,6 +129,7 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter this.penntestReferenceSubmissionLiveData = new MutableLiveData<>(); this.penntestReferenceErrorMessageLiveData = new MutableLiveData<>(); alternateIdRelatedValidationSubject = BehaviorSubject.createDefault(true); + alternateIdImageValidationSubject = BehaviorSubject.createDefault(true); form1ValidationSubject = BehaviorSubject.createDefault(false); form2ValidationSubject = BehaviorSubject.createDefault(false); form3ValidationSubject = BehaviorSubject.createDefault(false); @@ -162,7 +166,8 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter this.customerDetailViewSubscriptions.add(setUpForm2Validation().subscribe(result -> form2ValidationSubject.onNext(result))); this.customerDetailViewSubscriptions.add(setUpForm3Validation().subscribe(result -> form3ValidationSubject.onNext(result))); this.customerDetailViewSubscriptions.add(setupAlternateIDDependenciesValidation().subscribe(result -> alternateIdRelatedValidationSubject.onNext(result))); - + this.customerDetailViewSubscriptions.add( this.view.getCustomerDetailViewContract().getForm3ViewBindings().getAlternateIdDocChangeEvent().subscribe(alternateImage->{ alternateIdImageValidationSubject.onNext(alternateImage);})); + this.customerDetailViewSubscriptions.add(this.view.getCustomerDetailViewContract().getForm2ViewBindings().getReferralCodeChangeEvent().subscribe(val -> validator.validateReferralCode(val))); } @@ -234,7 +239,6 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter list.add(this.view.getCustomerDetailViewContract().getForm2ViewBindings().getPassportIssuedDateChangeEvent().map(val -> validator.validatePassportIssuedDate(val.toString()))); list.add(this.view.getCustomerDetailViewContract().getForm2ViewBindings().getPassportExpiryDateChangeEvent().map(val -> validator.validatePassportExpiryDate(val.toString()))); list.add(this.view.getCustomerDetailViewContract().getForm2ViewBindings().getGMEBranchChangeEvent().map(val -> validator.validateGmeBranch(val))); - list.add(this.view.getCustomerDetailViewContract().getForm2ViewBindings().getReferralCodeChangeEvent().map(val -> validator.validateReferralCode(val))); list.add(alternateIdRelatedValidationSubject); return Observable.combineLatest( @@ -242,8 +246,7 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter args -> { boolean result = ((boolean) args[0]) && ((boolean) args[1]) && ((boolean) args[2]) - && ((boolean) args[3]) && ((boolean) args[4]) && ((boolean) args[5]) && ((boolean) args[6]) - && ((boolean) args[7]); + && ((boolean) args[3]) && ((boolean) args[4]) && ((boolean) args[5]) && ((boolean) args[6]); customerDetailForm2Button.setValue(result); log("Form 2 isValid : " + result); return result; @@ -276,7 +279,7 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter private Observable setUpForm3Validation() { return Observable.combineLatest( this.view.getCustomerDetailViewContract().getForm3ViewBindings().getPassporIdDocChangeEvent(), - this.view.getCustomerDetailViewContract().getForm3ViewBindings().getAlternateIdDocChangeEvent(), + alternateIdImageValidationSubject, (isPassportIDDocValid, isAlternateIdDocValid) -> isPassportIDDocValid && isAlternateIdDocValid ); @@ -327,8 +330,6 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter public void clearAlternateIDFields() { - - } public void checkImageStatus(int requestCode, int resultCode, File data, float thumbnailHeight, float thumbnailWidth) { @@ -769,7 +770,6 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter } - private boolean validateAlternateIDRelatedFieldData() { boolean result = true; if (kycRelatedDataDTO.getPrimaryInformation() != null) { @@ -779,8 +779,8 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter String alternateIdIssuedDate = kycRelatedDataDTO.getPrimaryInformation().getAnotherIDIssueDate(); String alternateIdNumber = kycRelatedDataDTO.getPrimaryInformation().getAnotherIDNumber(); - if (selectedIdTypeId == null || selectedIdTypeId.length() == 0) - { + if (selectedIdTypeId == null || selectedIdTypeId.length() == 0) { + //When Alternate Id Fields are cleared //Update View alternateIDIssueVisibilityDateRequireLiveData.setValue(false); alternateIDExpiryDateVisibilityLiveData.setValue(false); @@ -801,10 +801,11 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter alternateIdRelatedViewResetLiveData.setValue(true); log("Alternate Id related view reset"); + return true; - } - else { + } else { + selectedIdType = kycRelatedDataDTO.getSelectedIdTYpeFromId(selectedIdTypeId).getText(); customerDetailErrorLiveDataDTO.setValueToAnotherIdNoError(null); @@ -815,8 +816,7 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter result = false; if (alternateIdNumber == null || alternateIdNumber.length() == 0) { result = false; - } - else if (alternateIdNumber.length() != ID_CARD_VALID_LENGTH) { + } else if (alternateIdNumber.length() != ID_CARD_VALID_LENGTH) { customerDetailErrorLiveDataDTO.setValueToAnotherIdNoError("Invalid National Id Card"); view.getCustomerDetailViewContract().enableAlternateIdFocusChangeAndImeOptionListener(false); result = false; @@ -849,8 +849,7 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter result = false; if (alternateIdNumber == null || alternateIdNumber.length() == 0) { result = false; - } - else if ( alternateIdNumber.length() != ID_CARD_VALID_LENGTH) { + } else if (alternateIdNumber.length() != ID_CARD_VALID_LENGTH) { customerDetailErrorLiveDataDTO.setValueToAnotherIdNoError("Invalid Driving License Card"); view.getCustomerDetailViewContract().enableAlternateIdFocusChangeAndImeOptionListener(false); result = false; @@ -867,8 +866,7 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter customerDetailErrorLiveDataDTO.setValueToAnotherIdNoError("Invalid Passport"); view.getCustomerDetailViewContract().enableAlternateIdFocusChangeAndImeOptionListener(false); result = false; - } - else { + } else { customerDetailErrorLiveDataDTO.setValueToAnotherIdNoError(null); view.getCustomerDetailViewContract().enableAlternateIdFocusChangeAndImeOptionListener(true); } @@ -893,14 +891,23 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter if (val == null) { customerDetailErrorLiveDataDTO.setValueToAnotherIdTypeError("Select different ID Type"); kycRelatedDataDTO.getPrimaryInformation().setAnotherIDType(""); - } - else if(val.getId()==null||val.getId().length()==0) - { + } else if (val.getId() == null || val.getId().length() == 0) { kycRelatedDataDTO.getPrimaryInformation().setAnotherIDType(null); log("Alternate id is null so view is being reset"); - result=validateAlternateIDRelatedFieldData(); - } - else { + + //We don't require alternate Image + alternateIdImageValidationSubject.onNext(true); + result = validateAlternateIDRelatedFieldData(); + } else { + //We require alternate Id Image explicitly + boolean hasAlternateImage=false; + if(kycRelatedDataDTO.getPictures()!=null) + { + hasAlternateImage=kycRelatedDataDTO.getPictures().hasValidAlternateImage(); + } + log("Has Alternate IMage : "+hasAlternateImage); + alternateIdImageValidationSubject.onNext(hasAlternateImage); + kycRelatedDataDTO.getPrimaryInformation().setAnotherIDType(val.getId()); anotherIdPictureLabeliveData.setValue(getAnotherIdTranslatedLable(val.getText())); if (ID_TYPE_ALIEN_REGISTRATION_CARD.equalsIgnoreCase(val.getText()) || ID_TYPE_NATIONAL_ID_CARD.equalsIgnoreCase(val.getText())) { @@ -924,6 +931,8 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter } else { customerDetailErrorLiveDataDTO.setValueToAnotherIdTypeError("Select different ID Type"); } + + } alternateIDNumberFieldEnableLiveData.setValue(result); log("Alternate Id Type validation result: " + result); @@ -1026,10 +1035,8 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter public boolean validateReferralCode(CharSequence referralCode) { if (referralCode == null) - kycRelatedDataDTO.getPrimaryInformation().setRefferalCode(null); - else - kycRelatedDataDTO.getPrimaryInformation().setRefferalCode(referralCode.toString()); - kycRelatedDataDTO.logFormSubmissionData(); + referralCode = ""; + kycRelatedDataDTO.getPrimaryInformation().setRefferalCode(referralCode.toString()); return true; } @@ -1256,23 +1263,5 @@ public class KYCV3ViewModel extends BaseViewModel implements KYCV3PresenterInter } } - public class AlternateIdFormViewBindingObserver extends DisposableObserver { - - @Override - public void onNext(Boolean aBoolean) { - customerDetailForm2Button.setValue(aBoolean); - customerDetailForm3Button.setValue(aBoolean); - } - - @Override - public void onError(Throwable e) { - - } - - @Override - public void onComplete() { - - } - } }