Merge branch 'develop'

master
luoyang 5 years ago
commit 84f9945182

@ -9,7 +9,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>manage</artifactId>
<version>1.3.16</version>
<version>1.3.17</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jib-maven-plugin.version>1.4.0</jib-maven-plugin.version>

@ -237,7 +237,7 @@ public interface RetailAppService {
void commitAuthFilesToCompliance(JSONObject device, JSONObject photoInfo);
void commitAuthFilesToKyc(JSONObject device,String idType);
void commitAuthFilesToKyc(JSONObject device,JSONObject params);
JSONObject getClientSubManage(JSONObject device);

@ -539,7 +539,7 @@ public class RetailAppServiceImp implements RetailAppService {
if (account == null) {
throw new NotFoundException("Account Not Found");
}
clientManager.applyToCompliance(client.getString("client_moniker"), account);
clientManager.applyToCompliance(client.getString("client_moniker"), account, null);
}
@ -2521,11 +2521,6 @@ public class RetailAppServiceImp implements RetailAppService {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
JSONObject client = clientMapper.findClient(device.getIntValue("client_id"));
if ( !(client.getIntValue("approve_result") == 2 || client.getIntValue("open_status") == 10 || client.getIntValue("approve_result") == 1 || client.getIntValue("open_status") == 5)
|| !("PINE".equals(client.getString("client_moniker"))
|| "LEOH".equals(client.getString("client_moniker")))) {
return null;
}
JSONObject account = clientAccountMapper.findById(device.getString("account_id"));
JSONObject authFileStatus = new JSONObject();
@ -2556,6 +2551,13 @@ public class RetailAppServiceImp implements RetailAppService {
}
authFileStatus.put("supplement_array", supplement_array);
//todo debug
authFileStatus.put("isNeedShowKycAlert", false);
if ("PINE".equals(client.getString("client_moniker")) || "LEOH".equals(client.getString("client_moniker"))) {
if (kycFilesNotice.getBoolean("client_less_file") || complianceFilesNotice.getBoolean("client_less_file")) {
authFileStatus.put("isNeedShowKycAlert", true);
}
}
return authFileStatus;
}
@ -2572,7 +2574,7 @@ public class RetailAppServiceImp implements RetailAppService {
JSONObject compliance = clientComplianceCompanyMapper.findKycFileByClientId(device.getIntValue("client_id"));
file.put("file_company", compliance);
if (compliance != null) {
file.put("id_type", compliance.getString("id_type"));
file.putAll(compliance);
}
return file;
}
@ -2581,13 +2583,12 @@ public class RetailAppServiceImp implements RetailAppService {
JSONObject result = new JSONObject();
boolean lessKycFiles = true;
JSONObject kycFilesAuth = clientComplianceCompanyMapper.findKycFileComplete(client.getIntValue("client_id"));
if (kycFilesAuth != null
|| !("PINE".equals(client.getString("client_moniker"))
|| "LEOH".equals(client.getString("client_moniker")))) {
if (kycFilesAuth != null) {
lessKycFiles = false;
}
result.put("help_confirm", messageSource.getMessage("client.auth.file.help_confirm", null, RequestEnvironment.getLocale()));
result.put("help_success", messageSource.getMessage("client.auth.file.help_success", null, RequestEnvironment.getLocale()));
result.put("beneficiary_id_title_list", "Ultimate beneficiary owner,CEO,Director,General Manager,Other");
result.put("client_less_file", lessKycFiles);
JSONObject compliance = clientComplianceCompanyMapper.findKycFileByClientId(client.getIntValue("client_id"));
@ -2820,15 +2821,16 @@ public class RetailAppServiceImp implements RetailAppService {
}
@Override
public void commitAuthFilesToKyc(JSONObject device, String idType) {
public void commitAuthFilesToKyc(JSONObject device, JSONObject params) {
String clientType = device.getString("client_type");
deviceSupport.findRegister(clientType);
JSONObject client = clientManager.getClientInfo(device.getIntValue("client_id"));
JSONObject account = clientAccountMapper.findById(device.getString("account_id"));
account.put("id_type", idType);
account.putAll(params);
kycService.commitAuthKycFilesToCompliance(client.getString("client_moniker"), account, "App");
}
@Override
public JSONObject getClientSubManage(JSONObject device) {
JSONObject result = new JSONObject();
String clientType = device.getString("client_type");
@ -2838,6 +2840,7 @@ public class RetailAppServiceImp implements RetailAppService {
return result;
}
@Override
public JSONObject getCustomerInfo(JSONObject device) {
JSONObject result = new JSONObject();
String clientType = device.getString("client_type");

@ -4,11 +4,10 @@ import au.com.royalpay.payment.core.exceptions.ParamInvalidException;
import au.com.royalpay.payment.manage.activities.app_index.core.AppActService;
import au.com.royalpay.payment.manage.activities.monsettledelay.core.ActMonDelaySettleService;
import au.com.royalpay.payment.manage.appclient.beans.AppClientBean;
import au.com.royalpay.payment.manage.appclient.beans.RetailAppMessage;
import au.com.royalpay.payment.manage.appclient.beans.AppPaymentConfigBean;
import au.com.royalpay.payment.manage.appclient.beans.AppQueryBean;
import au.com.royalpay.payment.manage.appclient.beans.RetailAppMessage;
import au.com.royalpay.payment.manage.appclient.core.RetailAppService;
import au.com.royalpay.payment.manage.apps.AppController;
import au.com.royalpay.payment.manage.bill.bean.NewBillBean;
import au.com.royalpay.payment.manage.bill.bean.QueryBillBean;
import au.com.royalpay.payment.manage.bill.bean.QueryBillOrderBean;
@ -19,7 +18,6 @@ import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper;
import au.com.royalpay.payment.manage.merchants.beans.ClientAuthFilesInfo;
import au.com.royalpay.payment.manage.merchants.beans.ClientKycFilesInfo;
import au.com.royalpay.payment.manage.merchants.beans.ClientUpdateInfo;
import au.com.royalpay.payment.manage.permission.manager.PartnerMapping;
import au.com.royalpay.payment.manage.riskbusiness.bean.RiskEventQuery;
import au.com.royalpay.payment.manage.riskbusiness.core.RiskBusinessService;
import au.com.royalpay.payment.manage.riskbusiness.core.RiskUploadService;
@ -933,7 +931,7 @@ public class RetailAppController {
*/
@PostMapping("/client/auth_file/commit_to_kyc")
public void commitToKycAuthFiles(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device,@RequestBody JSONObject params) {
retailAppService.commitAuthFilesToKyc(device, params.getString("id_type"));
retailAppService.commitAuthFilesToKyc(device, params);
}
@PutMapping(value = "/notifyBd")

@ -226,8 +226,12 @@ public class KycServiceImpl implements KycService {
if (clientAllAuthFiles == null || clientAllAuthFiles.size() == 0) {
throw new BadRequestException("Please check the information is uploaded completely");
}
if( !"passport".equals(account.getString("id_type")) && !"driver_license".equals(account.getString("id_type"))){
throw new BadRequestException("Please check the Id Type is selected");
if (StringUtils.isNotBlank(account.getString("beneficiary_id_title"))) {
if (!StringUtils.equalsIgnoreCase("Ultimate beneficiary owner", account.getString("beneficiary_id_title"))) {
if (StringUtils.isBlank(account.getString("other_id_title_desc"))) {
throw new BadRequestException("Please provide a reason that the beneficial owners ID cannot be provided.");
}
}
}
String[] fileKeys = {"client_company_file", "client_id_file"};
String[] fileNames = {"ASIC File", "ID"};
@ -259,6 +263,8 @@ public class KycServiceImpl implements KycService {
fileComp.put("commit_by_id", account.containsKey("account_id") ? account.getString("account_id") : account.getString("manager_id"));
fileComp.put("type", 2);
fileComp.put("id_type", account.getString("id_type"));
fileComp.put("beneficiary_id_title", account.getString("beneficiary_id_title"));
fileComp.put("other_id_title_desc", account.getString("other_id_title_desc"));
clientComplianceCompanyMapper.save(fileComp);
} else if (fileComp.getIntValue("status") == 2 || fileComp.getIntValue("status") == 9) {
fileComp.put("status", 0);
@ -266,6 +272,8 @@ public class KycServiceImpl implements KycService {
fileComp.put("source", sourceEnum);
fileComp.put("commit_by_id", account.containsKey("account_id") ? account.getString("account_id") : account.getString("manager_id"));
fileComp.put("id_type", account.getString("id_type"));
fileComp.put("beneficiary_id_title", account.getString("beneficiary_id_title"));
fileComp.put("other_id_title_desc", account.getString("other_id_title_desc"));
fileComp.put("bd_handle", account.getString("bd_handle"));
clientComplianceCompanyMapper.update(fileComp);
} else {

@ -45,8 +45,7 @@ public class KycManageController {
@ManagerMapping(value = "/{clientMoniker}/kycCommit", method = RequestMethod.POST, role = {ManagerRole.OPERATOR, ManagerRole.BD_USER})
public void clientKycFilesViewCommit(@PathVariable String clientMoniker ,@RequestBody JSONObject params,@ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
manager.put("id_type", params.getString("id_type"));
manager.put("bd_handle", params.getString("bd_handle"));
manager.putAll(params);
kycService.commitAuthKycFilesToCompliance(clientMoniker, manager, "Web");
}

@ -1,6 +1,7 @@
package au.com.royalpay.payment.manage.merchants.beans;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
/**
* Created by yishuqian on 07/03/2017.
@ -21,6 +22,10 @@ public class ClientAuthFilesInfo {
private String utility_bill_info;
private String id_type;
private String beneficiary_id_title;
private String other_id_title_desc;
private int authStatus=0;
public JSONObject toJson(){
@ -83,6 +88,44 @@ public class ClientAuthFilesInfo {
this.utility_bill_info = utility_bill_info;
}
public String getBeneficiary_id_title() {
return beneficiary_id_title;
}
public String getId_type() {
return id_type;
}
public String getOther_id_title_desc() {
return other_id_title_desc;
}
public void setBeneficiary_id_title(String beneficiary_id_title) {
this.beneficiary_id_title = beneficiary_id_title;
}
public void setId_type(String id_type) {
this.id_type = id_type;
}
public void setOther_id_title_desc(String other_id_title_desc) {
this.other_id_title_desc = other_id_title_desc;
}
public JSONObject toIdInfoJson() {
JSONObject params = new JSONObject();
if (StringUtils.isNotBlank(id_type)) {
params.put("id_type", id_type);
}
if (StringUtils.isNotBlank(id_type)) {
params.put("beneficiary_id_title", beneficiary_id_title);
}
if (StringUtils.isNotBlank(id_type)) {
params.put("other_id_title_desc", other_id_title_desc);
}
return params;
}
@Override
public String toString() {
return "ClientAuthFilesInfo{" +

@ -246,6 +246,8 @@ public interface ClientManager {
void revertClient(String clientMoniker, JSONObject manager);
void updateClientIdInfo(String clientMoniker,JSONObject params, JSONObject manager);
JSONObject getAuthFiles(JSONObject manager, String clientMoniker);
JSONObject getClientViewAuthFiles(JSONObject manager, String clientMoniker);
@ -417,7 +419,7 @@ public interface ClientManager {
List<JSONObject> getClientSubMerchantIdLogs(String clientMoniker, JSONObject manager);
void applyToCompliance(String client_moniker, JSONObject account);
void applyToCompliance(String client_moniker, JSONObject account, JSONObject params);
void sendVerifyEmail(JSONObject client, String accountId);

@ -1141,16 +1141,28 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
clientInfoCacheSupport.clearClientCache(client.getIntValue("client_id"));
}
public void createKycAuthStatus(JSONObject manager,JSONObject client){
JSONObject fileComp = new JSONObject();
fileComp.put("client_id", client.getIntValue("client_id"));
fileComp.put("submit_time", new Date());
fileComp.put("status", 1);
fileComp.put("source", 2);
fileComp.put("commit_by_id", manager.getString("display_name"));
fileComp.put("type", 2);
fileComp.put("is_valid", 1);
clientComplianceCompanyMapper.save(fileComp);
private void createKycAuthStatus(JSONObject manager,JSONObject client){
JSONObject compliance = clientComplianceCompanyMapper.findKycFileByClientId(client.getIntValue("client_id"));
if (compliance != null) {
compliance.put("client_id", client.getIntValue("client_id"));
compliance.put("submit_time", new Date());
compliance.put("status", 1);
compliance.put("source", 2);
compliance.put("commit_by_id", manager.getString("display_name"));
compliance.put("type", 2);
compliance.put("is_valid", 1);
clientComplianceCompanyMapper.update(compliance);
} else {
compliance = new JSONObject();
compliance.put("client_id", client.getIntValue("client_id"));
compliance.put("submit_time", new Date());
compliance.put("status", 1);
compliance.put("source", 2);
compliance.put("commit_by_id", manager.getString("display_name"));
compliance.put("type", 2);
compliance.put("is_valid", 1);
clientComplianceCompanyMapper.save(compliance);
}
}
@Override
@ -3395,6 +3407,16 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
clientModifySupport.processClientModify(new DisableModify(manager, clientMoniker, true));
}
@Override
public void updateClientIdInfo(String clientMoniker, JSONObject params, JSONObject manager) {
JSONObject client = getClientInfoByMoniker(clientMoniker);
if (client == null) {
throw new InvalidShortIdException();
}
params.put("display_name", manager.getString("display_name"));
clientApproveIdInfo(params,client);
}
@Override
public void checkTodo(JSONObject manager, List<TodoNotice> notices) {
if (ManagerRole.OPERATOR.hasRole(manager.getIntValue("role"))) {
@ -3449,7 +3471,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
}
}
JSONObject compliance = clientComplianceCompanyMapper.findKycFileByClientId(client.getIntValue("client_id"));
if (compliance != null) {
fileJson.putAll(compliance);
}
fileJson.put("beneficiary_id_title_list", "Ultimate beneficiary owner,CEO,Director,General Manager,Other");
return fileJson;
}
@ -3492,6 +3518,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
}
}
JSONObject compliance = clientComplianceCompanyMapper.findKycFileByClientId(client.getIntValue("client_id"));
if (compliance != null) {
fileJson.putAll(compliance);
}
fileJson.put("beneficiary_id_title_list", "Ultimate beneficiary owner,CEO,Director,General Manager,Other");
return fileJson;
}
@ -3599,6 +3630,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
// client.put("approve_result", 3);
// clientMapper.update(client);
// }
JSONObject params = filesInfo.toIdInfoJson();
if (params != null) {
params.put("display_name", manager.getString("display_name"));
clientApproveIdInfo(params, client);
}
}
@Override
@ -5101,6 +5137,8 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
} catch (WechatException e) {
logger.error("Wechat Message Error,open_status=1" + e.getMessage());
publisher.publishEvent(new WechatExceptionEvent(this, e, "Audit,open_status=1,openid=" + wxopenid));
} catch (Exception e) {
logger.error("Wechat Message Error,open_status=1" + e.getMessage());
}
}
}
@ -5705,7 +5743,7 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
}
@Override
public void applyToCompliance(String client_moniker, JSONObject client_account) {
public void applyToCompliance(String client_moniker, JSONObject client_account, JSONObject params) {
JSONObject client = getClientInfoByMoniker(client_moniker);
if (client == null) {
throw new InvalidShortIdException();
@ -5752,6 +5790,11 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
client.put("open_status", 4);
clientModifySupport.processClientModify(openStatusModify);
saveClientAuditProcess(client.getIntValue("client_id"), open_status_from, 4, "自助开通商户提交compliance审核", client_account);
if (params != null) {
params.put("display_name", client_account.getString("display_name"));
clientApproveIdInfo(params, client);
}
if (client_account != null) {
// sendMessagetoCompliance(client, manager.getString("display_name"));
sendCommissionWechatMessage(client);
@ -6352,11 +6395,18 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
if (client == null) {
throw new InvalidShortIdException();
}
if(client.getIntValue("approve_result") == 1 && ("PINE".equals(client.getString("client_moniker"))
|| "LEOH".equals(client.getString("client_moniker"))) ){
if ((client.getIntValue("approve_result") == 2 || client.getIntValue("open_status") == 10 || client.getIntValue("approve_result") == 1 || client.getIntValue("open_status") == 5)) {
boolean lessKycFiles = isPartnerKycfilesComplete(partner.getString("client_moniker"));
partner.put("lessKycFiles", lessKycFiles);
partner.put("lessComplianceFiles",signInAccountService.checkAuthFileStatus(partner.getJSONObject("client")).getBoolean("client_less_file") );
partner.put("lessComplianceFiles",signInAccountService.checkAuthFileStatus(partner.getJSONObject("client")).getBoolean("client_less_file"));
}
partner.put("lessKycFiles", false);
partner.put("lessComplianceFiles", false);
//todo debug
if ("PINE".equals(partner.getString("client_moniker")) || "LEOH".equals(partner.getString("client_moniker"))) {
partner.put("lessKycFiles", isPartnerKycfilesComplete(partner.getString("client_moniker")));
partner.put("lessComplianceFiles", signInAccountService.checkAuthFileStatus(partner.getJSONObject("client")).getBoolean("client_less_file"));
}
return partner;
}
@ -6478,4 +6528,34 @@ public class ClientManagerImpl implements ClientManager, ManagerTodoNoticeProvid
return svcMchBean;
}
private void clientApproveIdInfo(JSONObject params, JSONObject client) {
if (StringUtils.isBlank(params.getString("id_type"))) {
params.remove("id_type");
}
if (StringUtils.isBlank(params.getString("beneficiary_id_title"))) {
params.remove("beneficiary_id_title");
}
if (StringUtils.isBlank(params.getString("other_id_title_desc"))) {
params.remove("other_id_title_desc");
}
JSONObject compliance = clientComplianceCompanyMapper.findKycFileByClientId(client.getIntValue("client_id"));
if (compliance != null) {
params.put("submit_time", new Date());
params.put("commit_by_id", params.getString("display_name"));
params.put("status", 1);
compliance.putAll(params);
clientComplianceCompanyMapper.update(compliance);
} else {
params.put("client_id", client.getIntValue("client_id"));
params.put("submit_time", new Date());
params.put("status", 1);
params.put("source", 2);
params.put("commit_by_id", params.getString("display_name"));
params.put("type", 2);
params.put("is_valid", 1);
clientComplianceCompanyMapper.save(params);
}
}
}

@ -4,7 +4,6 @@ import au.com.royalpay.payment.manage.dev.core.MerchantLocationService;
import au.com.royalpay.payment.manage.merchants.beans.*;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.manage.permission.manager.ManagerMapping;
import au.com.royalpay.payment.manage.permission.manager.PartnerMapping;
import au.com.royalpay.payment.manage.permission.manager.RequireManager;
import au.com.royalpay.payment.manage.pos.datasource.ReadOnlyConnection;
import au.com.royalpay.payment.manage.tradelog.beans.TradeLogQuery;
@ -91,6 +90,11 @@ public class PartnerManageController {
clientManager.revertClient(clientMoniker, manager);
}
@ManagerMapping(value = "/{clientMoniker}/id_info", method = RequestMethod.PUT, role = {ManagerRole.ADMIN, ManagerRole.OPERATOR})
public void updateClientIdInfo(@PathVariable String clientMoniker, @RequestBody JSONObject params, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager) {
clientManager.updateClientIdInfo(clientMoniker, params, manager);
}
@ManagerMapping(value = "/{clientMoniker}/qrcode", method = RequestMethod.GET)
public JSONObject getQrCodeImg(@PathVariable String clientMoniker, @ModelAttribute(CommonConsts.MANAGER_STATUS) JSONObject manager, QRCodeConfig config) {
return clientManager.getQRCode(manager, clientMoniker, config);

@ -507,8 +507,8 @@ public class PartnerViewController {
@PartnerMapping(value = "/compliance_audit", method = RequestMethod.POST, roles = PartnerRole.ADMIN)
@ResponseBody
public void commitAudit(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account) {
clientManager.applyToCompliance(account.getString("client_moniker"),account);
public void commitAudit(@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account, @RequestBody(required = false) JSONObject params) {
clientManager.applyToCompliance(account.getString("client_moniker"), account, params);
}
@PartnerMapping(value = "/compliance/files", method = RequestMethod.GET)
@ -601,10 +601,10 @@ public class PartnerViewController {
clientManager.commitAuthFilesToCompliance(clientMoniker, account, "Web");
}
@PartnerMapping(value = "/clientCompliance/{clientMoniker}/kycFilesViewCommit/{idType}", method = RequestMethod.POST)
@PartnerMapping(value = "/clientCompliance/{clientMoniker}/kycFilesViewCommit", method = RequestMethod.POST)
@ResponseBody
public void clientKycFilesViewCommit(@PathVariable String clientMoniker ,@PathVariable String idType,@ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account) {
account.put("id_type", idType);
public void clientKycFilesViewCommit(@PathVariable String clientMoniker, @RequestBody JSONObject params, @ModelAttribute(CommonConsts.PARTNER_STATUS) JSONObject account) {
account.putAll(params);
kycService.commitAuthKycFilesToCompliance(clientMoniker, account, "Web");
}

@ -738,9 +738,9 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati
}
}
if ((client.getIntValue("approve_result") == 2 || client.getIntValue("open_status") == 10 || client.getIntValue("approve_result") == 1 || client.getIntValue("open_status") == 5)) {
whenClientLessFile(client, result);
if (clientFilesIsLess) {
result.put("client_less_file", clientFilesIsLess);
whenClientLessFile(client, result);
}
}
return result;
@ -751,8 +751,7 @@ public class SignInAccountServiceImpl implements SignInAccountService, Applicati
JSONObject result = new JSONObject();
boolean lessKycFiles = true;
JSONObject kycFilesAuth = clientComplianceCompanyMapper.findKycFileComplete(client.getIntValue("client_id"));
if(kycFilesAuth != null|| !("PINE".equals(client.getString("client_moniker"))
|| "LEOH".equals(client.getString("client_moniker")))){
if (kycFilesAuth != null) {
lessKycFiles = false;
}
result.put("client_less_file", lessKycFiles);

@ -119,8 +119,8 @@ client.auth.file.title=RoyalPay is committed to providing a secure and safe plat
client.auth.file.aggregate.title=Notice Of Supplementary Files
client.auth.file.compliance.type=2019-10 KYC Certification Information Supplement(1)
client.auth.file.kyc.type=2020-01 KYC Certification Information Supplement(2)
client.auth.file.help_confirm=Please confirm whether you need help from customer service ?
client.auth.file.help_success=Successful notification, please wait for customer service to contact you.
client.auth.file.help_confirm=Click YES if you like our customer service team to assist?
client.auth.file.help_success=succesfuly, our customer service team will review as soon as possible. Thank you!
client.auth.file.status.wait_auth=Pending examination and approval
client.auth.file.status.passed=Done
client.auth.file.status.refused=Refused

@ -108,12 +108,12 @@ sys.contract.info=尊敬的商户您与ROYALPAY的服务合同已到期
contract.old.waring=尊敬的商户RoyalPay于近期正式收到澳洲监管机构的通知应澳大利亚税务局ATO的要求进行了合同上GST部分的相应调整。请仔细阅读合同条款并确认。
sys.mondelay.cancel.waring=是否确认退出活动
client.auth.file.title=应澳洲政府反洗钱监管机构Austrac和中国外汇监管相关要求需要您配合补充完善基本资料以完成合规流程截止时间2020年2月29日前超期未提交将可能会影响您的正常交易,谢谢您的配合。
client.auth.file.title=RoyalPay致力于为中国用户提供一个安全可靠的支付平台对此我们定期会与澳大利亚和中国外汇监管机构进行沟通。为确保您的业务符合相关机构要求我们需要您在2020年2月29日前提交所需文件如果您无法在截止日期提交这些文件请尽快与我们联系,谢谢您的配合。
client.auth.file.aggregate.title=补充材料通知
client.auth.file.compliance.type=2019-10月KYC材料认证补充(1)
client.auth.file.kyc.type=2020-01月KYC材料认证补充(2)
client.auth.file.help_confirm=请确认您是否需要客服的帮助?
client.auth.file.help_success=通知成功,请等待客服与您联系
client.auth.file.help_confirm=如果您需要我们的客户服务团队协助,请点击“确定”。
client.auth.file.help_success=提交成功,我们的卡湖服务团队会尽快查看。谢谢您!
client.auth.file.status.wait_auth=待审核
client.auth.file.status.passed=已完成
client.auth.file.status.refused=打回

@ -61,7 +61,6 @@ define(['angular', 'angularSanitize', 'angularAnimate', 'angularMessages', 'uiRo
})
};
//todo 这边需要调整 或者关系 不能做两个if,字段放到client里位置要一致有bug当补充合规材料提交后不提示弹窗弹窗样式要修改
if(($scope.currentUser.lessComplianceFiles ||$scope.currentUser.lessKycFiles) && complianceNoticeCount==0 && $scope.currentUser.role!=3) {
$scope.ComplianceToperfect();
complianceNoticeCount++;

@ -144,13 +144,23 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
}]);
app.controller('bdHelpKYCProgressCtrl', [ '$scope', '$http', '$state', 'file', 'commonDialog', '$location', '$anchorScroll','Upload',function ($scope, $http, $state, file, commonDialog, $location, $anchorScroll, Upload) {
$scope.file = angular.copy(file.data) || {};
if(!$scope.file.file_company.id_type){
$scope.file.file_company.id_type = sessionStorage.getItem($scope.file.client.client_moniker+'_idType');
}
$scope.setSession = function(idType){
$scope.file.file_company.id_type = sessionStorage.getItem($scope.file.client.client_moniker+'_idType') || $scope.file.file_company.id_type || "";
$scope.file.file_company.beneficiary_id_title = sessionStorage.getItem($scope.file.client.client_moniker + '_idTitle') || $scope.file.file_company.beneficiary_id_title || "";
$scope.file.file_company.other_id_title_desc = sessionStorage.getItem($scope.file.client.client_moniker + '_idReason') || $scope.file.file_company.other_id_title_desc || "";
$scope.setIDTypeSession = function(idType){
sessionStorage.setItem($scope.file.client.client_moniker+'_idType',idType);
}
$scope.setIDTitleSession = function(idTitle){
sessionStorage.setItem($scope.file.client.client_moniker+'_idTitle',idTitle);
}
$scope.setIDReasonSession = function(idReason){
sessionStorage.setItem($scope.file.client.client_moniker+'_idReason',idReason);
}
$scope.toggleIdTitle = function (beneficiary_id_title) {
$scope.file.file_company.beneficiary_id_title = beneficiary_id_title;
$scope.setIDTitleSession(beneficiary_id_title)
};
$scope.uploadCompanyFile = function (file) {
if (file != null) {
if (file.size > 3 * 1024 * 1024) {
@ -276,15 +286,23 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
commonDialog.alert({title: 'Error', content: '请选择ID文件的类型', type: 'error'});
return;
}
if ($scope.file.id_type == "passport" && !$scope.file.file_company.bd_handle) {
if ($scope.file.file_company.id_type == "passport" && !$scope.file.file_company.bd_handle) {
if (!$scope.file.file.kyc_utility_bill_file) {
commonDialog.alert({title: 'Error', content: '请提交Utility Bill FIles(水电煤账单)信息', type: 'error'});
return;
}
}
if ($scope.file.file_company.beneficiary_id_title!="Ultimate beneficiary owner") {
if (!$scope.file.file_company.other_id_title_desc) {
commonDialog.alert({title: 'Error', content: 'Please provide a reason that the beneficial owners ID cannot be provided.', type: 'error'});
return;
}
}
var params = {};
params.bd_handle = $scope.file.file_company.bd_handle;
params.id_type = $scope.file.file_company.id_type;
params.beneficiary_id_title = $scope.file.file_company.beneficiary_id_title;
params.other_id_title_desc = $scope.file.file_company.other_id_title_desc;
commonDialog.confirm({
title: 'Warning',
content: 'Are you sure to submit files?'

@ -19,16 +19,30 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
app.controller('clientCommitToKycFilesCtrl', ['$scope', '$http', '$rootScope', 'commonDialog', '$state', 'Upload', 'file', 'partner', function ($scope, $http, $rootScope, commonDialog, $state, Upload, file, partner) {
$scope.file = file.data || {};
$scope.partner = partner.data || {};
if($scope.file.file_company){
$scope.file.id_type = $scope.file.file_company.id_type||"";
}else{
$scope.file.id_type = sessionStorage.getItem($scope.partner.client_moniker+'_idType');
}
$scope.file.need_bd = true;
if ($scope.file.file_company) {
$scope.file.id_type = sessionStorage.getItem($scope.partner.client_moniker+'_idType') || $scope.file.file_company.id_type || "";
$scope.file.beneficiary_id_title = sessionStorage.getItem($scope.partner.client_moniker + '_idTitle') || $scope.file.file_company.beneficiary_id_title || "";
$scope.file.other_id_title_desc = sessionStorage.getItem($scope.partner.client_moniker + '_idReason') || $scope.file.file_company.other_id_title_desc || "";
}else {
$scope.file.id_type = sessionStorage.getItem($scope.partner.client_moniker+'_idType') || "";
$scope.file.beneficiary_id_title = sessionStorage.getItem($scope.partner.client_moniker + '_idTitle') || "";
$scope.file.other_id_title_desc = sessionStorage.getItem($scope.partner.client_moniker + '_idReason') || "";
}
$scope.setSession = function(idType){
$scope.setIDTypeSession = function(idType){
sessionStorage.setItem($scope.partner.client_moniker+'_idType',idType);
}
$scope.setIDTitleSession = function(idTitle){
sessionStorage.setItem($scope.partner.client_moniker+'_idTitle',idTitle);
}
$scope.setIDReasonSession = function(idReason){
sessionStorage.setItem($scope.partner.client_moniker+'_idReason',idReason);
}
$scope.toggleIdTitle = function (beneficiary_id_title) {
$scope.file.beneficiary_id_title = beneficiary_id_title;
$scope.setIDTitleSession(beneficiary_id_title)
};
//audit files
$scope.uploadCompanyFile = function (file) {
@ -145,13 +159,13 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
$scope.needBDIntervention = function () {
commonDialog.confirm({
title: 'Warning',
content: 'Please confirm whether you need help from customer service ?'
title: 'Need any help?',
content: 'Click OK if you like our customer service team to assist ?'
}).then(function () {
$http.put('/sys/kyc/partner/notifyBd').then(function () {
commonDialog.alert({
title: 'Success',
content: 'Successful notification, please wait for customer service to contact you.',
title: 'Your file had been submitted',
content: 'succesffuly, our customer service team will review as soon as possible. Thank you!',
type: 'success'
});
$state.go('partner_dashboard');
@ -179,11 +193,21 @@ define(['angular', 'static/commons/commons', 'uiBootstrap', 'uiRouter', 'ngBootS
return;
}
}
if ($scope.file.beneficiary_id_title!="Ultimate beneficiary owner") {
if (!$scope.file.other_id_title_desc) {
commonDialog.alert({title: 'Error', content: 'Please provide a reason that the beneficial owners ID cannot be provided.', type: 'error'});
return;
}
}
var params = {};
params.id_type = $scope.file.id_type;
params.beneficiary_id_title = $scope.file.beneficiary_id_title;
params.other_id_title_desc = $scope.file.other_id_title_desc;
commonDialog.confirm({
title: 'Warning',
content: 'Are you sure to submit files?'
}).then(function () {
$http.post('/client/partner_info/clientCompliance/' + $scope.partner.client_moniker + '/kycFilesViewCommit/' + $scope.file.id_type).then(function () {
$http.post('/client/partner_info/clientCompliance/' + $scope.partner.client_moniker + '/kycFilesViewCommit',params).then(function () {
commonDialog.alert({
title: 'Success',
content: 'Commit Successful',

@ -2,6 +2,20 @@
img {
width: 100%;
}
.btn btn-default:active{
position: relative;
top: 1px;
box-shadow: inset 0 3px 5px 0 rgba(0,0,0, 0.2);
outline: 0;
}
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #333;
background-color: #f7bf90;
border-color: #adadad;
}
</style>
<div class="content">
@ -77,35 +91,20 @@
</div>
<div class="col-sm-3">
<div class="form-control-static">
<p>Example请保证图片信息清晰可见,如示例
<img class="col-sm-6" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488859920633_5ruVtDa30yY2ytBSDAAqxg0Ob2nreh.jpeg">
</p>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* Choose ID Type </label>
<div class="col-sm-5">
<div class="form-control-static">
<select class="form-control" ng-model="file.file_company.id_type" style="width: 250px" ng-change="setSession(file.file_company.id_type)">
<option value="">Please Choose</option>
<option value="passport" >Passport</option>
<option value="driver_license">Driver license</option>
</select>
<p class="text-info">
<i class="fa fa-info"></i> Please select the file type for uploading the ID.<br>
<i class="fa fa-info"></i> Uploading your passport file requires you to upload your utility bill file. <br>
<i class="fa fa-info"></i> You can upload your driver license and leave the utility bill file blank. <br>
<i class="fa fa-info"></i> 请选择上传ID的文件类型.<br>
<i class="fa fa-info"></i> 上传护照文件需要您上传水电煤账单文件.<br>
<i class="fa fa-info"></i> 上传驾照,水电煤账单文件可以不填.
</p>
<div class="col-sm-6">
<p>Example公司请提供以下文件图片</p>
<img class="col-xs-12" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488865011738_mW91ylSb5V1NJYu8jxvBPGNN49Zyel.jpeg">
<!--<img class="col-sm-12" src="https://file.royalpay.com.au/open/2017/03/07/1488864017622_BppIfz1yhMeoF0Z49rHt2gZIfVOihA.jpeg">-->
</div>
<div class="col-sm-6">
<p>sole trade个体户),partnership合伙,trust信托请在http://abr.business.gov.au将查询结果截图上传</p>
<img class="col-sm-12" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488860564017_37spL6phUySM27oRtO4cQ7FOJblYJ6.jpeg">
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* ID </label>
<div class="col-sm-3">
@ -134,7 +133,52 @@
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* Choose ID Type </label>
<div class="col-sm-5">
<div class="form-control-static">
<select class="form-control" ng-model="file.file_company.id_type" style="width: 250px" ng-change="setIDTypeSession(file.file_company.id_type)">
<option value="">Please Choose</option>
<option value="passport" >Passport</option>
<option value="driver_license">Driver license</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* ID Title</label>
<div class="col-sm-8">
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='Ultimate beneficiary owner'}"
ng-click="toggleIdTitle('Ultimate beneficiary owner')">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='CEO'}"
ng-click="toggleIdTitle('CEO')">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='Director'}"
ng-click="toggleIdTitle('Director')">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='General Manager'}"
ng-click="toggleIdTitle('General Manager')">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='Other'}"
ng-click="toggleIdTitle('Other')">
Other</button>
</div>
</div>
<div class="form-group" ng-if="file.file_company.beneficiary_id_title!='' && file.file_company.beneficiary_id_title!='Ultimate beneficiary owner'">
<label class="control-label col-sm-3">* Please provide a reason that the beneficial owners ID cannot be provided.</label>
<div class="col-sm-3">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.file_company.other_id_title_desc" style="height: 150px" ng-change="setIDReasonSession(file.file_company.other_id_title_desc)"></textarea>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3"> Utility Bill Files</label>
<div class="col-sm-3">
@ -143,6 +187,10 @@
ngf-select="uploadBillFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<p class="text-info">
<i class="fa fa-info"></i> One utility bill (water, electricity or gas) that shows the residential address (*Mandatory if your uploaded ID is a passport)<br>
<i class="fa fa-info"></i> 一份显示常住居所地址的账单(水费、电费或煤气费)(*必须上传 - 如您上传的ID是护照)<br>
</p>
</div>
<uib-progressbar value="billFileProgress.value" ng-if="billFileProgress"></uib-progressbar>
<table>

@ -27,7 +27,7 @@
<div class="panel-body box box-warning ng-scope" style="margin-top: 20px;">
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-3">* Certificate of Registration(ASIC File)</label>
<label class="control-label col-sm-3" style="padding-left: 150px;">* Certificate of Registration(ASIC File)</label>
<div class="col-sm-3">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
@ -45,43 +45,22 @@
</div>
<div class="col-sm-3">
<div class="form-control-static">
<p>Example请保证图片信息清晰可见,如示例
<img class="col-sm-6" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488859920633_5ruVtDa30yY2ytBSDAAqxg0Ob2nreh.jpeg">
</p>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* Choose ID Type </label>
<div class="col-sm-5">
<div class="form-control-static">
<select class="form-control"
ng-if="currentUser.lessKycFiles"
ng-model="file.id_type" style="width: 250px" ng-change="setSession(file.id_type)">
<option value="">Please Choose</option>
<option value="passport" >Passport</option>
<option value="driver_license">Driver license</option>
</select>
<div ng-if="!currentUser.lessKycFiles">
<p ng-if="file.id_type == 'passport'" >Passport</p>
<p ng-if="file.id_type == 'driver_license' ">Driver license</p>
<div class="col-sm-6">
<p>Example公司请提供以下文件图片</p>
<img class="col-xs-12" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488865011738_mW91ylSb5V1NJYu8jxvBPGNN49Zyel.jpeg">
<!--<img class="col-sm-12" src="https://file.royalpay.com.au/open/2017/03/07/1488864017622_BppIfz1yhMeoF0Z49rHt2gZIfVOihA.jpeg">-->
</div>
<div class="col-sm-6">
<p>sole trade个体户),partnership合伙,trust信托请在http://abr.business.gov.au将查询结果截图上传</p>
<img class="col-sm-12" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488860564017_37spL6phUySM27oRtO4cQ7FOJblYJ6.jpeg">
</div>
<p class="text-info">
<i class="fa fa-info"></i> Please select the file type for uploading the ID.<br>
<i class="fa fa-info"></i> Uploading your passport file requires you to upload your utility bill file. <br>
<i class="fa fa-info"></i> You can upload your driver license and leave the utility bill file blank. <br>
<i class="fa fa-info"></i> 请选择上传ID的文件类型.<br>
<i class="fa fa-info"></i> 上传护照文件需要您上传水电煤账单文件.<br>
<i class="fa fa-info"></i> 上传驾照,水电煤账单文件可以不填.
</p>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* ID </label>
<label class="control-label col-sm-3" style="padding-left: 150px;">* ID of beneficial owners of 25% or more of the company </label>
<div class="col-sm-3">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
@ -110,6 +89,86 @@
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3">* Choose ID Type </label>
<div class="col-sm-5">
<div class="form-control-static">
<select class="form-control"
ng-if="currentUser.lessKycFiles"
ng-model="file.id_type" style="width: 250px" ng-change="setIDTypeSession(file.id_type)">
<option value="">Please Choose</option>
<option value="passport" >Passport</option>
<option value="driver_license">Driver license</option>
</select>
<div ng-if="!currentUser.lessKycFiles">
<p ng-if="file.id_type == 'passport'" >Passport</p>
<p ng-if="file.id_type == 'driver_license' ">Driver license</p>
</div>
</div>
</div>
</div>
<div class="form-group" ng-if="currentUser.lessKycFiles">
<label class="control-label col-sm-3">* ID Title</label>
<div class="col-sm-8">
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Ultimate beneficiary owner'}"
ng-click="toggleIdTitle('Ultimate beneficiary owner')">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='CEO'}"
ng-click="toggleIdTitle('CEO')">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Director'}"
ng-click="toggleIdTitle('Director')">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='General Manager'}"
ng-click="toggleIdTitle('General Manager')">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Other'}"
ng-click="toggleIdTitle('Other')">
Other</button>
</div>
</div>
<div class="form-group" ng-if="currentUser.lessKycFiles && file.beneficiary_id_title!='' && file.beneficiary_id_title!='Ultimate beneficiary owner'">
<label class="control-label col-sm-3" style="padding-left: 170px;">* Please provide a reason that the beneficial owners ID cannot be provided.</label>
<div class="col-sm-3">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.other_id_title_desc" style="height: 150px" ng-change="setIDReasonSession(file.other_id_title_desc)"></textarea>
</div>
</div>
</div>
<div class="form-group" ng-if="!currentUser.lessKycFiles">
<label class="control-label col-sm-3">* ID Title</label>
<div class="col-sm-8">
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Ultimate beneficiary owner'}">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='CEO'}">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Director'}">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='General Manager'}">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Other'}">
Other</button>
</div>
</div>
<div class="form-group" ng-if="!currentUser.lessKycFiles && file.beneficiary_id_title!='' && file.beneficiary_id_title!='Ultimate beneficiary owner'">
<label class="control-label col-sm-3">* Please provide a reason that the beneficial owners ID cannot be provided.</label>
<div class="col-sm-3">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.other_id_title_desc" style="height: 150px" disabled></textarea>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-3"> Utility Bill Files</label>
@ -120,6 +179,10 @@
ngf-select="uploadBillFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<p class="text-info">
<i class="fa fa-info"></i> One utility bill (water, electricity or gas) that shows the residential address (*Mandatory if your uploaded ID is a passport)<br>
<i class="fa fa-info"></i> 一份显示常住居所地址的账单(水费、电费或煤气费)(*必须上传 - 如您上传的ID是护照)<br>
</p>
</div>
<uib-progressbar value="billFileProgress.value" ng-if="billFileProgress"></uib-progressbar>
<table>

@ -47,9 +47,17 @@
</div>
<div class="col-sm-6">
<div class="form-control-static">
<p>Example请保证图片信息清晰可见,如下图</p>
<img class="col-sm-6" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488859920633_5ruVtDa30yY2ytBSDAAqxg0Ob2nreh.jpeg">
<div class="col-sm-6">
<p>Example公司请提供以下文件图片</p>
<img class="col-xs-12" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488865011738_mW91ylSb5V1NJYu8jxvBPGNN49Zyel.jpeg">
<!--<img class="col-sm-12" src="https://file.royalpay.com.au/open/2017/03/07/1488864017622_BppIfz1yhMeoF0Z49rHt2gZIfVOihA.jpeg">-->
</div>
<div class="col-sm-6">
<p>sole trade个体户),partnership合伙,trust信托请在http://abr.business.gov.au将查询结果截图上传</p>
<img class="col-sm-12" style="border: 1px solid #ddd"
src="https://file.royalpay.com.au/open/2017/03/07/1488860564017_37spL6phUySM27oRtO4cQ7FOJblYJ6.jpeg">
</div>
</div>
</div>
</div>

@ -3826,7 +3826,7 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
$scope.listRedpackLogs(1);
}]);
app.controller('partnerAuthFileCtrl', ['$scope', '$http', '$rootScope', 'commonDialog', '$state', 'Upload', 'file', function ($scope, $http, $rootScope, commonDialog, $state, Upload, file) {
$scope.id_info_form = {edit: false};
$scope.file = file.data || {};
//audit files
$scope.uploadBankFile = function (file) {
@ -4024,6 +4024,37 @@ define(['angular', 'decimal', 'static/commons/commons', 'uiBootstrap', 'uiRouter
}
}
};
$scope.toggleIdTitle = function (beneficiary_id_title) {
$scope.file.beneficiary_id_title = beneficiary_id_title;
};
$scope.saveIdInfo = function () {
if (!$scope.file.id_type) {
commonDialog.alert({title: 'Error', content: '请选择ID Type', type: 'error'});
return;
}
if ($scope.file.beneficiary_id_title!="Ultimate beneficiary owner") {
if (!$scope.file.other_id_title_desc) {
commonDialog.alert({title: 'Error', content: '请简要告知为何无法提供受益股东的资料', type: 'error'});
return;
}
}
var config = {};
config.id_type = $scope.file.id_type;
config.beneficiary_id_title = $scope.file.beneficiary_id_title;
config.other_id_title_desc = $scope.file.other_id_title_desc;
$http.put('/sys/partners/' + $scope.partner.client_moniker + '/id_info', config).then(function (resp) {
commonDialog.alert({title: 'Success', content: 'Id Info Updated', type: 'success'})
$state.reload();
}, function (resp) {
commonDialog.alert({title: 'Error', content: resp.data.message, type: 'error'})
$state.reload();
});
};
$scope.cancelIdInfo = function () {
$state.reload();
$scope.id_info_form.edit=false
};
$scope.downloadAsZip = function () {
var url = '/sys/partners/' + $scope.partner.client_moniker + '/download/complianceAsZIP';

@ -328,7 +328,9 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
$scope.commitToCompliance = function () {
$http.get('/client/partner_info/compliance/files').then(function (resp) {
$scope.complianceFiles = resp.data;
var id_type = sessionStorage.getItem($scope.partner.client_moniker+'_idType');
var id_type = sessionStorage.getItem($scope.partner.client_moniker+'_idType') || $scope.complianceFiles.id_type;
var id_title = sessionStorage.getItem($scope.partner.client_moniker+'_idTitle') || $scope.complianceFiles.beneficiary_id_title;
var id_reason = sessionStorage.getItem($scope.partner.client_moniker+'_idReason') || $scope.complianceFiles.other_id_title_desc;
if(id_type != 'passport' && id_type != 'driver_license'){
commonDialog.alert({title: 'Message', content: '请前去完善合规资料选择 ID Type再进行提交', type: 'info'});
return;
@ -365,6 +367,20 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
commonDialog.alert({title: 'Message', content: '请验证邮箱后,再进行提交!', type: 'info'});
return;
}
if (!id_title) {
commonDialog.alert({title: 'Error', content: '请前去完善合规资料选择ID Title再进行提交', type: 'error'});
return;
}
if (id_title!="Ultimate beneficiary owner") {
if (!id_reason) {
commonDialog.alert({title: 'Error', content: '请前去完善合规资料填写为何无法提供受益股东的资料,再进行提交!', type: 'error'});
return;
}
}
var params = {};
params.id_type = id_type;
params.beneficiary_id_title = id_title;
params.other_id_title_desc = id_reason;
commonDialog.confirm({
title: 'Commit to Compliance',
content: 'Are you sure to commit ' + $scope.partner.company_name + ' to compliance',
@ -375,7 +391,7 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
}).then(function (choice) {
$scope.submitted = true;
if (choice == 1) {
$http.post('/client/partner_info/compliance_audit').then(function () {
$http.post('/client/partner_info/compliance_audit',params).then(function () {
commonDialog.alert({title: 'Success', content: '已提交至合规,请耐心等待审核!', type: 'info'});
$state.reload();
}, function () {
@ -661,10 +677,23 @@ define(['angular', 'decimal', 'uiRouter', 'ngBootSwitch', 'ngFileUpload', 'uiBoo
}]);
app.controller('clientComplianceFilesCtrl', ['$scope', '$http', '$rootScope', 'commonDialog', '$state', 'Upload', 'file', function ($scope, $http, $rootScope, commonDialog, $state, Upload, file) {
$scope.file = file.data || {};
$scope.file.id_type = sessionStorage.getItem($scope.partner.client_moniker+'_idType');
$scope.setSession = function(idType){
$scope.toggleIdTitle = function (beneficiary_id_title) {
$scope.file.beneficiary_id_title = beneficiary_id_title;
$scope.setIDTitleSession(beneficiary_id_title)
};
$scope.file.id_type = sessionStorage.getItem($scope.partner.client_moniker+'_idType') || $scope.file.id_type;
$scope.file.beneficiary_id_title = sessionStorage.getItem($scope.partner.client_moniker+'_idTitle') || $scope.file.beneficiary_id_title ;
$scope.file.other_id_title_desc = sessionStorage.getItem($scope.partner.client_moniker+'_idReason') || $scope.file.other_id_title_desc;
$scope.setIDTypeSession = function(idType){
sessionStorage.setItem($scope.partner.client_moniker+'_idType',idType);
}
$scope.setIDTitleSession = function(idTitle){
sessionStorage.setItem($scope.partner.client_moniker+'_idTitle',idTitle);
}
$scope.setIDReasonSession = function(idReason){
sessionStorage.setItem($scope.partner.client_moniker+'_idReason',idReason);
}
//audit files
$scope.uploadBankFile = function (file) {
if (file != null) {

@ -11,7 +11,7 @@
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadBankFile($file)" ng-hide="currentUser.approve_result == 1">
ngf-select="uploadBankFile($file)" ng-hide="currentUser.client.approve_result == 1 || currentUser.client.approve_result == 3">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_bank_file" role="button" class="btn-group btn btn-warning" type="button" ng-href="{{file.client_bank_file}}" target="_blank"><i class="fa fa-download"></i></a>
@ -35,7 +35,7 @@
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadCompanyFile($file)" ng-hide="currentUser.approve_result == 1">
ngf-select="uploadCompanyFile($file)" ng-hide="currentUser.client.approve_result == 1 || currentUser.client.approve_result == 3">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_company_file" role="button" class="btn-group btn btn-warning" type="button" ng-href="{{file.client_company_file}}" target="_blank"><i class="fa fa-download"></i></a>
@ -61,34 +61,12 @@
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* Choose ID Type </label>
<div class="col-sm-4">
<div class="form-control-static">
<select class="form-control"
ng-model="file.id_type" style="width: 250px" ng-change="setSession(file.id_type)">
<option value="">Please Choose</option>
<option value="passport" >Passport</option>
<option value="driver_license">Driver license</option>
</select>
<p class="text-info">
<i class="fa fa-info"></i> If client have already attached surcharge in their own system, ignore this choice.<br>
<i class="fa fa-info"></i> It is recommended to notice customers about they will pay addition money as surcharge in the payment page. <br>
<i class="fa fa-info"></i> 请选择上传ID的文件类型.<br>
<i class="fa fa-info"></i> 上传护照文件需要您上传水电煤账单文件.<br>
<i class="fa fa-info"></i> 上传驾照,水电煤账单文件可以不填.
</p>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* ID </label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadIDFile($file)" ng-hide="currentUser.approve_result == 1">
ngf-select="uploadIDFile($file)" ng-hide="currentUser.client.approve_result == 1 || currentUser.client.approve_result == 3">
<i class="fa fa-upload"></i> Upload
</button>
<a ng-if="file.client_id_file" role="button" class="btn-group btn btn-warning" type="button" ng-href="{{file.client_id_file}}" target="_blank"><i class="fa fa-download"></i></a>
@ -114,15 +92,93 @@
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* Choose ID Type </label>
<div class="col-sm-4">
<div class="form-control-static">
<select class="form-control"
ng-model="file.id_type" style="width: 250px" ng-change="setIDTypeSession(file.id_type)">
<option value="">Please Choose</option>
<option value="passport" >Passport</option>
<option value="driver_license">Driver license</option>
</select>
</div>
</div>
</div>
<div class="form-group" ng-if="currentUser.client.approve_result != 3 && currentUser.client.approve_result != 1">
<label class="control-label col-sm-2">* ID Title</label>
<div class="col-sm-4">
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Ultimate beneficiary owner'}"
ng-click="toggleIdTitle('Ultimate beneficiary owner')">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='CEO'}"
ng-click="toggleIdTitle('CEO')">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Director'}"
ng-click="toggleIdTitle('Director')">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='General Manager'}"
ng-click="toggleIdTitle('General Manager')">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Other'}"
ng-click="toggleIdTitle('Other')">
Other</button>
</div>
</div>
<div class="form-group" ng-if="currentUser.client.approve_result != 3 && currentUser.client.approve_result != 1
&& file.beneficiary_id_title!='' && file.beneficiary_id_title!='Ultimate beneficiary owner'">
<label class="control-label col-sm-2">* Please provide a reason that the beneficial owners ID cannot be provided.</label>
<div class="col-sm-3">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.other_id_title_desc" style="height: 150px" ng-change="setIDReasonSession(file.other_id_title_desc)"></textarea>
</div>
</div>
</div>
<div class="form-group" ng-if="currentUser.client.approve_result == 3 || currentUser.client.approve_result == 1">
<label class="control-label col-sm-2">* ID Title</label>
<div class="col-sm-4">
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Ultimate beneficiary owner'}">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='CEO'}">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Director'}">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='General Manager'}">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Other'}">
Other</button>
</div>
</div>
<div class="form-group" ng-if="(currentUser.client.approve_result == 3 || currentUser.client.approve_result == 1)&& file.beneficiary_id_title!='' && file.beneficiary_id_title!='Ultimate beneficiary owner'">
<label class="control-label col-sm-2">* Please provide a reason that the beneficial owners ID cannot be provided.</label>
<div class="col-sm-3">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.other_id_title_desc" style="height: 150px" disabled></textarea>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2"> Utility Bill Files</label>
<div class="col-sm-4">
<div class="form-control-static">
<button class="btn btn-primary" type="button"
ngf-select="uploadBillFile($file)">
ngf-select="uploadBillFile($file)" ng-hide="currentUser.client.approve_result == 1 || currentUser.client.approve_result == 3">
<i class="fa fa-upload"></i> Upload
</button>
<p class="text-info">
<i class="fa fa-info"></i> One utility bill (water, electricity or gas) that shows the residential address (*Mandatory if your uploaded ID is a passport)<br>
<i class="fa fa-info"></i> 一份显示常住居所地址的账单(水费、电费或煤气费)(*必须上传 - 如您上传的ID是护照)<br>
</p>
</div>
<uib-progressbar value="billFileProgress.value" ng-if="billFileProgress"></uib-progressbar>
<table>

@ -2,6 +2,20 @@
img {
width: 100%;
}
.btn btn-default:active{
position: relative;
top: 1px;
box-shadow: inset 0 3px 5px 0 rgba(0,0,0, 0.2);
outline: 0;
}
.btn-default:focus,
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #333;
background-color: #f7bf90;
border-color: #adadad;
}
</style>
<div class="panel panel-default">
@ -73,7 +87,18 @@
</a>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-4" style="text-align: center;">ID of beneficial owners of 25% or more of the company
<span ng-if="file.file_company.status==0" class="small text-danger">(待审核)</span>
<span ng-if="file.file_company.status==1" class="small text-success">(已通过)</span>
<span ng-if="file.file_company.status==2" class="small text-danger">(已驳回)</span>
</label>
<div class="col-sm-6">
<a target="_blank" ng-href="{{file.file.client_id_file}}">
<img class="col-sm-6" style="border: 1px solid #ddd" ng-src="{{file.file.client_id_file}}" class="col-sm-8" onerror="this.src='/static/images/file_close.png'">
</a>
</div>
</div>
<div class="form-group" ng-if="file.file_company">
<label class="control-label col-sm-4" style="text-align: center;"> ID Type </label>
<div class="col-sm-6">
@ -84,20 +109,34 @@
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-4" style="text-align: center;">ID
<span ng-if="file.file_company.status==0" class="small text-danger">(待审核)</span>
<span ng-if="file.file_company.status==1" class="small text-success">(已通过)</span>
<span ng-if="file.file_company.status==2" class="small text-danger">(已驳回)</span>
</label>
<label class="control-label col-sm-4" style="text-align: center;">ID Title</label>
<div class="col-sm-6">
<a target="_blank" ng-href="{{file.file.client_id_file}}">
<img class="col-sm-6" style="border: 1px solid #ddd" ng-src="{{file.file.client_id_file}}" class="col-sm-8" onerror="this.src='/static/images/file_close.png'">
</a>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='Ultimate beneficiary owner'}">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='CEO'}">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='Director'}">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='General Manager'}">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.file_company.beneficiary_id_title=='Other'}">
Other</button>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-4" style="text-align: center;">请简要告知为何无法提供受益股东的资料</label>
<div class="col-sm-3">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.file_company.other_id_title_desc" style="height: 150px" disabled></textarea>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-4" style="text-align: center;">Utility Bill Files
<span ng-if="file.file_company.status==0" class="small text-danger">(待审核)</span>

@ -44,7 +44,7 @@
<p style="text-align: center;"><span style="font-family: DengXian; font-size: 14px;">RoyalPay皇家支付商户文件补充通知</span>
</p>
<p><span style="font-family: DengXian; font-size: 14px;">尊敬的RoyalPay商户</span></p>
<p class="p1">应澳洲政府反洗钱监管机构Austrac和中国外汇监管相关要求需要您配合补充完善基本资料以完成合规流程截止时间2020年2月29日前超期未提交将可能会影响您的正常交易,谢谢您的配合。</p>
<p class="p1">RoyalPay致力于为中国用户提供一个安全可靠的支付平台对此我们定期会与澳大利亚和中国外汇监管机构进行沟通。为确保您的业务符合相关机构要求我们需要您在2020年2月29日前提交所需文件如果您无法在截止日期提交这些文件请尽快与我们联系,谢谢您的配合。</p>
<p class="p1"><br/><span style="font-family: DengXian; font-size: 14px;"></span></p>
<p><span style="font-family: DengXian; font-size: 14px;">RoyalPay客服与技术支持在此期间将竭诚为您服务如有疑问或需帮助请拨打我们的客服电话1300 107 750或添加RoyalPay官方客服号royalpay_</span><span
style="font-family: DengXian; font-size: 14px;">1</span><span
@ -79,7 +79,7 @@
<p ng-if="file.file_company && (file.file_company.status == 0 || file.file_company.status == 9)">
<span>Pending examination and approval</span>
</p>
<p ng-if="(file.file_company && file.file_company.status == 1) || !file.client_less_file" style="color: green">
<p ng-if="(file.file_company && file.file_company.status == 1) || (!file.client_less_file && !file.file_company)" style="color: green">
<span>Done</span>
</p>
<p ng-if=" !file.file_company && file.client_less_file">
@ -139,7 +139,7 @@
<p ng-if="file.file_company && (file.file_company.status == 0 || file.file_company.status == 9)">
<span>待审核</span>
</p>
<p ng-if="(file.file_company && file.file_company.status == 1) || !file.client_less_file" style="color: green">
<p ng-if="(file.file_company && file.file_company.status == 1) || (!file.client_less_file && !file.file_company)" style="color: green">
<span>已完成</span>
</p>
<p ng-if=" !file.file_company && file.client_less_file">

@ -11,6 +11,103 @@
</div>
<div class="panel-body">
<div class="form-horizontal">
<div class="panel panel-info">
<div class="panel-heading"><h4>
ID描述信息
<a class="small" role="button" ng-if="!id_info_form.edit" ng-click="id_info_form.edit=true">
<i class="fa fa-edit"></i></a>
</h4></div>
<div class="panel-body">
<div class="row form-horizontal">
<div class="form-group" ng-if="id_info_form.edit">
<label class="control-label col-sm-2">* Choose ID Type </label>
<div class="col-sm-4">
<div class="form-control-static">
<select class="form-control"
ng-model="file.id_type" style="width: 250px" ng-change="setIDTypeSession(file.id_type)">
<option value="">Please Choose</option>
<option value="passport" >Passport</option>
<option value="driver_license">Driver license</option>
</select>
</div>
</div>
</div>
<div class="form-group" ng-if="id_info_form.edit">
<label class="control-label col-sm-2">* ID Title</label>
<div class="col-sm-6">
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Ultimate beneficiary owner'}"
ng-click="toggleIdTitle('Ultimate beneficiary owner')">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='CEO'}"
ng-click="toggleIdTitle('CEO')">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Director'}"
ng-click="toggleIdTitle('Director')">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='General Manager'}"
ng-click="toggleIdTitle('General Manager')">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Other'}"
ng-click="toggleIdTitle('Other')">
Other</button>
</div>
</div>
<div class="form-group" ng-if="id_info_form.edit && file.beneficiary_id_title!='Ultimate beneficiary owner'">
<label class="control-label col-sm-2">* 请简要告知为何无法提供受益股东的资料</label>
<div class="col-sm-4">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.other_id_title_desc" style="height: 100px"></textarea>
</div>
</div>
</div>
<div class="form-group" ng-if="!id_info_form.edit">
<label class="control-label col-sm-2">ID Type </label>
<div class="col-sm-4">
<div class="form-control-static">
<span>{{file.id_type}}</span>
</div>
</div>
</div>
<div class="form-group" ng-if="!id_info_form.edit">
<label class="control-label col-sm-2">ID Title</label>
<div class="col-sm-6">
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Ultimate beneficiary owner'}">
Ultimate beneficiary owner</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='CEO'}">
CEO</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Director'}">
Director</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='General Manager'}">
General Manager</button>
<button class="btn btn-default"
ng-class="{active:file.beneficiary_id_title=='Other'}">
Other</button>
</div>
</div>
<div class="form-group" ng-if="!id_info_form.edit && file.beneficiary_id_title!='Ultimate beneficiary owner'">
<label class="control-label col-sm-2">请简要告知为何无法提供受益股东的资料</label>
<div class="col-sm-4">
<div class="form-control-static">
<textarea class="form-control" ng-model="file.other_id_title_desc" style="height: 100px" disabled></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="panel-footer" ng-if="id_info_form.edit">
<button class="btn btn-success" ng-click="saveIdInfo()">保存</button>
<button class="btn btn-danger" ng-click="cancelIdInfo()">取消</button>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2">* bank statement</label>
<div class="col-sm-4">
@ -218,6 +315,10 @@
ngf-select="uploadBillFile($file)">
<i class="fa fa-upload"></i> Upload
</button>
<p class="text-info">
<i class="fa fa-info"></i> One utility bill (water, electricity or gas) that shows the residential address (*Mandatory if your uploaded ID is a passport)<br>
<i class="fa fa-info"></i> 一份显示常住居所地址的账单(水费、电费或煤气费)(*必须上传 - 如您上传的ID是护照)<br>
</p>
<i class="fa fa-check-square-o check-i" style="float: none" aria-hidden="true"ng-if="$root.complianceCheck.authFile"></i>
</div>
<uib-progressbar value="billFileProgress.value" ng-if="billFileProgress"></uib-progressbar>

@ -26,4 +26,13 @@ public class AESTest {
System.out.println("validate: " + new String(AESCrypt.decrypt(encrypted, key), StandardCharsets.UTF_8));
}
@Test
public void decode() {
String mailPwdEncrypted = "Vr5rSY1PsttfWVGuoq8zxQ==";
String decodeKey = "Vr5rSY1PsttfWVGuoq8zxQ==";
Key aesKey = AESCrypt.fromKeyString(Base64.decodeBase64(decodeKey));
String mailPwd = new String(AESCrypt.decrypt(Base64.decodeBase64(mailPwdEncrypted), aesKey), StandardCharsets.UTF_8);
System.out.println(mailPwd);
}
}

Loading…
Cancel
Save