diff --git a/App.js b/App.js index 57f071fd..736a926f 100644 --- a/App.js +++ b/App.js @@ -66,6 +66,8 @@ import RetraitEnCashAgent from './screens/wallet/agent/RetraitEnCashAgent'; import RetraitCarteVersCashAgent from './screens/wallet/agent/RetraitCarteVersCashAgent'; import EnvoieCashVersWalletAgent from './screens/wallet/agent/EnvoieCashVersWalletAgent'; import EnvoieCashVersAutreWalletAgent from './screens/wallet/agent/EnvoieCashVersAutreWalletAgent'; +import EnvoieCashVersCarteAgent from './screens/wallet/agent/EnvoieCashVersCarteAgent'; +import EnvoiCashVersCashAgent from './screens/wallet/agent/EnvoiCashVersCashAgent'; const instructions = Platform.select({ ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu', @@ -175,7 +177,9 @@ const AppAgentStack = createDrawerNavigator({ retraitEnCashAgent: RetraitEnCashAgent, retraitCarteVersCashAgent: RetraitCarteVersCashAgent, envoieCashVersWalletAgent: EnvoieCashVersWalletAgent, - envoieCashVersAutreWalletAgent: EnvoieCashVersAutreWalletAgent + envoieCashVersAutreWalletAgent: EnvoieCashVersAutreWalletAgent, + envoieCashVersCarteAgent: EnvoieCashVersCarteAgent, + envoiCashVersCashAgent: EnvoiCashVersCashAgent, }) }, { diff --git a/route.json b/route.json index 575505da..a41f9e0d 100644 --- a/route.json +++ b/route.json @@ -49,5 +49,7 @@ "retraitEnCashAgent": "retraitEnCashAgent", "retraitCarteVersCashAgent": "retraitCarteVersCashAgent", "envoieCashVersWalletAgent": "envoieCashVersWalletAgent", - "envoieCashVersAutreWalletAgent": "envoieCashVersAutreWalletAgent" + "envoieCashVersAutreWalletAgent": "envoieCashVersAutreWalletAgent", + "envoieCashVersCarteAgent": "envoieCashVersCarteAgent", + "envoiCashVersCashAgent": "envoiCashVersCashAgent" } diff --git a/screens/optionMenu/OptionsMenu.js b/screens/optionMenu/OptionsMenu.js index 55092bc3..865b2114 100644 --- a/screens/optionMenu/OptionsMenu.js +++ b/screens/optionMenu/OptionsMenu.js @@ -256,7 +256,7 @@ export default class OptionsMenu extends Component { || item === 'createIdentificationUser' || item === 'operateurOptionSelect' || item === 'paiementFacture' || item === 'envoieWalletToWalletUser' || item === 'envoieWalletToCashUser' || item === 'linkCard' || item === 'envoieWalletToCardUser' || item === 'envoieWalletToBankUser' || item === 'retraitWalletVersCashUser' || item === 'retraitCarteVersWalletUser' || item === 'retraitEnCashAgent' || item === 'retraitCarteVersCashAgent' || item === 'envoieCashVersWalletAgent' - || item === 'envoieCashVersAutreWalletAgent') { + || item === 'envoieCashVersAutreWalletAgent' || item === 'retraitCarteVersCashUser' || item === 'envoiCashVersCashAgent' || item === 'envoieCashVersCashAgent') { return null } else { const color = this.state.currentId === item.id ? theme.accent : "grey" diff --git a/screens/wallet/WalletDetail.js b/screens/wallet/WalletDetail.js index 0b892ecf..232f28fa 100644 --- a/screens/wallet/WalletDetail.js +++ b/screens/wallet/WalletDetail.js @@ -540,7 +540,7 @@ class WalletDetail extends Component { { - if (isIlinkWorldWallet(wallet.network)) { + if (isIlinkWorldWallet(wallet.type)) { this.props.navigation.push(route.walletOptionSelect, { optionSelect: optionDepotScreen, wallet, @@ -554,6 +554,7 @@ class WalletDetail extends Component { this.props.navigation.push(route.walletDepot, { wallet, onGoBack: () => this.refresh(), + }) } }} @@ -585,7 +586,7 @@ class WalletDetail extends Component { { - if (isIlinkWorldWallet(wallet.network)) { + if (isIlinkWorldWallet(wallet.type)) { this.props.navigation.push(route.walletOptionSelect, { optionSelect: optionRetraitScreen, wallet, @@ -628,7 +629,7 @@ class WalletDetail extends Component { - {isIlinkWorldWallet(wallet.network) && + {isIlinkWorldWallet(wallet.type) && <> diff --git a/screens/wallet/WalletOptionSelect.js b/screens/wallet/WalletOptionSelect.js index 2bf2e592..92cde7ec 100644 --- a/screens/wallet/WalletOptionSelect.js +++ b/screens/wallet/WalletOptionSelect.js @@ -66,6 +66,7 @@ export default class WalletOptionSelect extends Component { break; case 'DEPOT': this.props.navigation.push(options.screen, { + optionSelect: options.subScreenOption, wallet: this.state.wallet, onGoBack: () => this.props.navigation.state.params.onGoBack(), }); @@ -83,6 +84,13 @@ export default class WalletOptionSelect extends Component { onGoBack: () => this.props.navigation.state.params.onGoBack(), }); break; + case 'WALLET_TO_BANK': + this.props.navigation.push(options.screen, { + wallet: this.state.wallet, + optionSelect: options.subScreenOption, + onGoBack: () => this.props.navigation.state.params.onGoBack(), + }); + break; default: this.props.navigation.push(options.screen) @@ -277,7 +285,7 @@ const styles = StyleSheet.create({ height: Utils.scaleWithPixel(30) }, content: { - height: Utils.scaleWithPixel(60), + height: Utils.scaleWithPixel(65), paddingHorizontal: 10, justifyContent: 'space-between', alignItems: 'flex-start', diff --git a/screens/wallet/agent/EnvoiCashVersCashAgent.js b/screens/wallet/agent/EnvoiCashVersCashAgent.js new file mode 100644 index 00000000..2e18af24 --- /dev/null +++ b/screens/wallet/agent/EnvoiCashVersCashAgent.js @@ -0,0 +1,844 @@ +import Button from 'apsl-react-native-button'; +import isEqual from 'lodash/isEqual'; +import isNil from 'lodash/isNil'; +import React, { Component } from 'react'; +import { Alert, ScrollView, StyleSheet, Text, View } from 'react-native'; +import * as Animatable from 'react-native-animatable'; +import I18n from 'react-native-i18n'; +import Dialog from "react-native-dialog"; +import { Dropdown } from 'react-native-material-dropdown'; +import { responsiveHeight, responsiveWidth } from 'react-native-responsive-dimensions'; +import { ProgressDialog } from 'react-native-simple-dialogs'; +import { Fumi } from 'react-native-textinput-effects'; +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; +import { Color } from '../../../config/Color'; +import { store } from "../../../redux/store"; +import { identityPieces, isIlinkWorldWallet, isNormalInteger, typeIdIDestinataire, thousandsSeparators } from '../../../utils/UtilsFunction'; +import { readUser } from '../../../webservice/AuthApi'; +import { getActiveCountryAction, getActiveCountryByDialCodeAction, getActiveCountryByDialCodeReset, getActiveCountryReset, getPayCountryNetworkAction, getPayCountryNetworkReset } from '../../../webservice/CountryApi'; +import { envoieUserWalletToCashAction, envoieUserWalletToCashReset, getCommissionUserWalletToCashAction, getCommissionUserWalletToCashReset } from '../../../webservice/EnvoieUserApi'; +import { Typography, FontWeight } from '../../../config/typography'; +import thousands from 'thousands'; +import { IlinkEmitter } from '../../../utils/events'; +let theme = require('../../../utils/theme.json'); +let route = require('../../../route.json'); + + +class EnvoiCashVersCashAgent extends Component { + static navigatorStyle = { + navBarBackgroundColor: Color.primaryColor, + statusBarColor: Color.primaryDarkColor, + navBarTextColor: '#FFFFFF', + navBarButtonColor: '#FFFFFF' + + }; + + static navigationOptions = () => { + return { + drawerLabel: () => null, + headerTitle: I18n.t('DEPOSIT_CASH_TO_CASH'), + headerTintColor: 'white', + headerStyle: { + backgroundColor: Color.primaryColor, + marginTop: 0, + color: 'white' + }, + headerTitleStyle: { + color: "white" + }, + title: I18n.t('DEPOSIT_CASH_TO_CASH') + } + }; + + constructor(props) { + super(props); + this.state = { + identityPiecesEmetteur: identityPieces(), + identityPiecesNameEmetteur: (identityPieces()[0]).name, + paysDestination: [], + paysDestinationSelect: null, + walletActifs: [], + walletActifSelect: null, + nomsEmetteur: null, + prenomsEmetteur: null, + emailEmetteur: null, + numeroIdentiteEmetteur: null, + nomsDestinataire: null, + prenomsDestinataire: null, + idDestinataire: null, + numeroIdentiteDestinataire: null, + montant: null, + password: null, + loading: false, + user: null, + triggerSubmitClick: false, + triggerNextClick: false, + displayFirstStep: true, + displaySecondStep: false, + modalVisible: false, + hasLoadActiveCountryList: false, + hasLoadActivePayCountryNetworkList: false, + triggerSubmitClick: false, + isDataSubmit: false, + isModalConfirmVisible: false, + wallet: store.getState().walletDetailReducer.result.response + }; + + this.props.getActiveCountryReset(); + this.props.getActiveCountryByDialCodeReset(); + this.props.getPayCountryNetworkReset(); + this.props.envoieUserWalletToCashReset(); + this.props.getCommissionUserWalletToCashReset(); + + } + + componentDidMount() { + + readUser().then((user) => { + if (user) { + if (user !== undefined) { + this.setState({ user }); + } + } + }); + + } + + componentWillReceiveProps(nextProps) { + + if (nextProps.resultEnvoieWalletToCashGetCommission != null) { + + if (typeof nextProps.resultEnvoieWalletToCashGetCommission.response !== 'undefined') { + + if (!nextProps.loadingEnvoieWalletToCashGetCommission) + this.setState({ + isModalConfirmVisible: true + }); + } + } + } + + renderGetActionCountryList = () => { + + const { resultActiveCountryList, errorActiveCountryList } = this.props; + if (resultActiveCountryList !== null) { + if (typeof resultActiveCountryList.response !== 'undefined') { + + this.setState({ + hasLoadActiveCountryList: false, + paysDestination: resultActiveCountryList.response, + paysDestinationSelect: resultActiveCountryList.response[0].name, + }); + if (this.state.hasLoadActivePayCountryNetworkList) + this.props.getPayCountryNetworkAction({ id_wallet_agent: this.state.wallet.id, id_country: resultActiveCountryList.response[0].id }); + } + } + + if (errorActiveCountryList !== null) { + if (typeof errorActiveCountryList.data !== 'undefined') { + Alert.alert( + I18n.t('ERROR_LABEL'), + errorActiveCountryList.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.getActiveCountryReset(); + } + } + + ], + { cancelable: false } + ) + } else { + Alert.alert( + I18n.t('ERROR_LABEL'), + JSON.stringify(errorActiveCountryList), + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.getActiveCountryReset(); + } + } + + ], + { cancelable: false } + ) + } + } + } + + renderGetPayCountryNetworkResponse = () => { + const { resultPayCountryNetwork, errorPayCountryNetwork } = this.props; + if (resultPayCountryNetwork !== null) { + if (typeof resultPayCountryNetwork.response !== 'undefined') { + if (resultPayCountryNetwork.response.length > 0) { + this.setState({ + hasLoadActivePayCountryNetworkList: false, + walletActifs: resultPayCountryNetwork.response, + walletActifSelect: resultPayCountryNetwork.response[0].name, + modalVisible: false + }); + } + else if (resultPayCountryNetwork.response.length === 0) { + this.setState({ + walletActifs: [], + walletActifSelect: '', + modalVisible: false, + hasLoadActivePayCountryNetworkList: false, + }); + } + } + } + + if (errorPayCountryNetwork !== null) { + if (typeof errorPayCountryNetwork.data !== 'undefined') { + Alert.alert( + I18n.t('ERROR_LABEL'), + errorPayCountryNetwork.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.getPayCountryNetworkReset(); + } + } + + ], + { cancelable: false } + ) + } else { + Alert.alert( + I18n.t('ERROR_LABEL'), + JSON.stringify(errorPayCountryNetwork), + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.getPayCountryNetworkReset(); + } + } + + ], + { cancelable: false } + ) + } + } + } + + renderEnvoieWalletToWalletResponse = () => { + + const { resultEnvoieWalletToCash, errorEnvoieWalletToCash } = this.props; + + if (errorEnvoieWalletToCash !== null) { + if (typeof errorEnvoieWalletToCash.data !== 'undefined') { + Alert.alert( + I18n.t("ERROR_TRANSFER"), + errorEnvoieWalletToCash.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.envoieUserWalletToCashReset(); + } + } + ], + { cancelable: false } + ) + } + } + + if (resultEnvoieWalletToCash !== null) { + if (resultEnvoieWalletToCash.response !== null) { + Alert.alert( + I18n.t("SUCCESS_TRANSFER"), + resultEnvoieWalletToCash.response, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.envoieUserWalletToCashReset(); + IlinkEmitter.emit("refreshWallet"); + this.props.navigation.pop(); + } + } + + ], + { cancelable: false } + ) + } + } + } + + renderDialogGetCommissionResponse = () => { + + const { errorEnvoieWalletToCashGetCommission } = this.props; + + if (errorEnvoieWalletToCashGetCommission !== null) { + if (typeof errorEnvoieWalletToCashGetCommission.data !== 'undefined') { + Alert.alert( + I18n.t("ERROR_LABLE"), + errorEnvoieWalletToCashGetCommission.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.getCommissionUserWalletToCashReset(); + } + } + ], + { cancelable: false } + ) + } + } + + } + + ckeckIfFieldIsOK(champ) { + return (isNil(champ) || isEqual(champ.length, 0)); + } + + isMontantValid = () => { + const { montant } = this.state; + if ((parseInt(isEqual(montant, 0)) || montant < 0)) + return { + errorMessage: I18n.t('ENTER_AMOUNT_SUPERIOR_ZEROR'), + isValid: false + }; + + else if (!isNormalInteger(montant)) + return { + errorMessage: I18n.t('ENTER_VALID_AMOUNT'), + isValid: false + }; + + + else if (montant > parseInt(this.state.comptePrincipal)) + return { + errorMessage: I18n.t('AMOUNT_SUPERIOR_TO_PRINCIPAL_ACCOUNT'), + isValid: false + }; + + else + return { + errorMessage: '', + isValid: true + }; + } + + modalConfirmTransaction = (data) => { + const commission = data.response.frais; + const montant_net_final = data.response.montant_net_final; + const montant_net_init = data.response.montant_net_init; + + console.log("DATA SEND TO CONFIRM DIALOG", data); + return ( + + + + {I18n.t('TRANSACTION_DETAIL')} + + + + + + + {I18n.t('AMOUNT')} + + + {`${thousands(this.state.montant, ' ')} ${this.state.wallet.currency_code}`} + + + + + {I18n.t('FEES_AND_TAXES')} + + + {`${thousands(commission, ' ')} ${this.state.wallet.currency_code}`} + + + + + + + + {I18n.t('NET_AMOUNT')}: + + + {`${thousands(montant_net_final, ' ')} ${this.state.wallet.currency_code}`} + + + + + + + { + this.setState({ + isModalConfirmVisible: false + }); + }} /> + { + this.setState({ + isModalConfirmVisible: false, + isDataSubmit: true + }); + this.props.envoieUserWalletToCashAction({ + type: 17, + id_wallet_agent: this.state.wallet.id, + nom_emetteur: this.state.nomsEmetteur, + prenom_emetteur: this.state.prenomsDestinataire, + email_emetteur: this.state.emailEmetteur, + type_document_emetteur: this.state.identityPiecesNameEmetteur, + id_document_emetteur: this.state.numeroIdentiteEmetteur, + final_country: (this.state.paysDestination.filter(element => element.name === this.state.paysDestinationSelect))[0].id, + id_destinataire: this.state.numeroIdentiteEmetteur, + type_document_destinataire: this.state.identityPiecesNameEmetteur, + nom_destinataire: this.state.nomsDestinataire, + prenom_destinataire: this.state.prenomsDestinataire, + id_document_destinataire: this.state.numeroIdentiteDestinataire, + network_destinataire: (this.state.walletActifs.filter(element => element.name === this.state.walletActifSelect))[0].id, + montant: this.state.montant, + password: this.state.password + }); + this.props.getCommissionUserWalletToCashReset(); + }} /> + + + + ); + + } + + onSubmitNextStep = () => { + + const { nomsEmetteur, prenomsEmetteur, emailEmetteur, numeroIdentiteEmetteur } = this.state; + + if (this.ckeckIfFieldIsOK(nomsEmetteur)) + this.nomsEmetteurAnim.shake(800); + else if (this.ckeckIfFieldIsOK(prenomsEmetteur)) + this.prenomsEmetteurAnim.shake(800); + else if (this.ckeckIfFieldIsOK(emailEmetteur)) + this.emailEmetteurAnim.shake(800); + else if (this.ckeckIfFieldIsOK(numeroIdentiteEmetteur)) + this.numeroIdentiteEmetteurAnim.shake(800); + else { + + this.setState({ + triggerNextClick: true, + modalVisible: true, + hasLoadActiveCountryList: true, + hasLoadActivePayCountryNetworkList: true, + displayFirstStep: !this.state.displayFirstStep, + displaySecondStep: !this.state.displaySecondSte + }, () => { + this.props.getActiveCountryAction(); + console.log("ENVOIE WALLET PROPS", this.props); + }); + } + } + + onSubmitCashVersAutreWallet = () => { + const { nomsDestinataire, prenomsDestinataire, montant, password, numeroIdentiteDestinataire } = this.state; + + if (this.ckeckIfFieldIsOK(nomsDestinataire)) + this.nomDestinataireAnim.shake(800); + else if (this.ckeckIfFieldIsOK(prenomsDestinataire)) + this.prenomsDestinataireAnim.shake(800); + else if (this.ckeckIfFieldIsOK(numeroIdentiteDestinataire)) + this.identityPiecesDestinataireAnim.shake(800); + else if (this.ckeckIfFieldIsOK(montant) || !this.isMontantValid().isValid) { + console.log("IS MONTANT VALID", this.isMontantValid()) + this.montantAnim.shake(800); + } + else if (this.ckeckIfFieldIsOK(password)) + this.passwordAnim.shake(800); + else { + + this.props.getCommissionUserWalletToCashAction({ + type: 17, + id_wallet_agent: this.state.wallet.id, + final_country: (this.state.paysDestination.filter(element => element.name === this.state.paysDestinationSelect))[0].id, + montant: this.state.montant, + }); + + } + this.setState({ + triggerSubmitClick: true + }) + + } + + renderLoader = () => { + return ( + + ) + } + + render() { + console.log("STATE", this.state); + const { resultEnvoieWalletToCashGetCommission } = this.props; + return ( + <> + {(this.state.modalVisible || this.props.loadingEnvoieWalletToCashGetCommission || this.props.loadingEnvoieWalletToCash || this.props.loadingCountryByDialCode || this.props.loadingActiveCountryList || this.props.loadingCountryByDialCode) && this.renderLoader()} + {this.state.hasLoadActiveCountryList && this.renderGetActionCountryList()} + {this.state.hasLoadActivePayCountryNetworkList && this.renderGetPayCountryNetworkResponse()} + {this.state.isDataSubmit && this.renderEnvoieWalletToWalletResponse()} + {this.state.triggerSubmitClick && this.renderDialogGetCommissionResponse()} + { + (resultEnvoieWalletToCashGetCommission !== null) && + (typeof resultEnvoieWalletToCashGetCommission.response !== 'undefined') && + this.modalConfirmTransaction(resultEnvoieWalletToCashGetCommission) + } + + + {this.state.displayFirstStep && + <> + + {I18n.t('ENVOIE_CASH_TO_CASH')} + + { this.nomsEmetteurAnim = comp }}> + { + this.setState({ nomsEmetteur }) + }} + style={styles.input} + > + + + + { this.prenomsEmetteurAnim = comp }}> + { + this.setState({ prenomsEmetteur }) + }} + style={styles.input} + > + + + + { this.emailEmetteurAnim = comp }}> + { + this.setState({ emailEmetteur }) + }} + style={styles.input} + > + + + + { this.identityPiecesEmetteurAnim = comp }} + style={{ + width: responsiveWidth(90), + height: 60, + marginTop: 20, + alignSelf: 'center', + borderRadius: 10, + paddingLeft: 20, + paddingRight: 20, + backgroundColor: 'white' + }}> + { + this.setState({ identityPiecesNameEmetteur: value }); + }} + valueExtractor={(value) => { return value.name }} + labelExtractor={(value) => { return value.name }} + /> + + + { this.numeroIdentiteEmetteurAnim = comp }}> + { + this.setState({ numeroIdentiteEmetteur }) + }} + style={styles.input} + > + + + + + + } + + {this.state.displaySecondStep && + <> + { this.nomDestinataireAnim = comp }}> + { + this.setState({ nomsDestinataire }) + }} + style={styles.input} + > + + + + { this.prenomsDestinataireAnim = comp }}> + { + this.setState({ prenomsDestinataire }) + }} + style={styles.input} + > + + + + { this.identityPiecesDestinataireAnim = comp }}> + { + this.setState({ numeroIdentiteDestinataire }) + }} + style={styles.input} + > + + + + { this.paysDestinationAnim = comp }} + style={{ + width: responsiveWidth(90), + height: 60, + marginTop: 20, + alignSelf: 'center', + borderRadius: 10, + paddingLeft: 20, + paddingRight: 20, + backgroundColor: 'white' + }}> + { + this.props.getPayCountryNetworkReset(); + + let countrySelect = data.filter(element => element.name === value); + this.setState({ paysDestinationSelect: value, hasLoadActivePayCountryNetworkList: true }, () => { + this.props.getPayCountryNetworkAction({ id_wallet_agent: this.state.wallet.id, id_country: countrySelect[0].id }); + }); + this.props.getCommissionUserWalletToCashReset(); + }} + valueExtractor={(value) => { return value.name }} + labelExtractor={(value) => { return value.name }} + /> + + + { this.walletActifAnim = comp }} + style={{ + width: responsiveWidth(90), + height: 60, + marginTop: 20, + alignSelf: 'center', + borderRadius: 10, + paddingLeft: 20, + paddingRight: 20, + backgroundColor: 'white' + }}> + { + this.setState({ + walletActifSelect: value, + }); + + }} + valueExtractor={(value) => { return value.name }} + labelExtractor={(value) => { return value.name }} + /> + + + { this.montantAnim = comp }}> + { + this.setState({ montant }) + }} + style={styles.input} + > + + + + {this.state.wallet.currency_code} + + + + { this.passwordAnim = comp }}> + { + this.setState({ password }) + }} + style={styles.input} + > + + + + + + } + + + + ) + } +} + +const maptStateToProps = state => ({ + loadingCountryByDialCode: state.countryByDialCode.loading, + resultCountryByDialCode: state.countryByDialCode.result, + errorCountryByDialCode: state.countryByDialCode.error, + + loadingActiveCountryList: state.activeCountryListReducer.loading, + resultActiveCountryList: state.activeCountryListReducer.result, + errorActiveCountryList: state.activeCountryListReducer.error, + + loadingPayCountryNetwork: state.payCountryNetworkReducer.loading, + resultPayCountryNetwork: state.payCountryNetworkReducer.result, + errorPayCountryNetwork: state.payCountryNetworkReducer.error, + + loadingEnvoieWalletToCash: state.envoieUserWalletToCashReducer.loading, + resultEnvoieWalletToCash: state.envoieUserWalletToCashReducer.result, + errorEnvoieWalletToCash: state.envoieUserWalletToCashReducer.error, + + loadingEnvoieWalletToCashGetCommission: state.envoieUserWalletToCashGetCommissionReducer.loading, + resultEnvoieWalletToCashGetCommission: state.envoieUserWalletToCashGetCommissionReducer.result, + errorEnvoieWalletToCashGetCommission: state.envoieUserWalletToCashGetCommissionReducer.error, +}); + +const mapDispatchToProps = dispatch => bindActionCreators({ + getActiveCountryByDialCodeAction, + getActiveCountryByDialCodeReset, + + getPayCountryNetworkAction, + getPayCountryNetworkReset, + + getActiveCountryAction, + getActiveCountryReset, + + envoieUserWalletToCashAction, + envoieUserWalletToCashReset, + + getCommissionUserWalletToCashAction, + getCommissionUserWalletToCashReset + +}, dispatch); + +export default connect(maptStateToProps, mapDispatchToProps)(EnvoiCashVersCashAgent); + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: Color.primaryDarkColor, + }, + textbtnvalide: { + color: 'white', + fontWeight: 'bold' + }, + bigtitle: { + color: 'white', + fontSize: 20, + flex: 1, + fontWeight: 'bold', + textAlign: 'center', + margin: 20, + }, + blockView: { + paddingVertical: 10, + borderBottomWidth: 1 + }, + subbigtitle: { + color: 'white', + fontSize: 17, + textAlign: 'center', + margin: 5, + }, + btnvalide: { + marginTop: 20, + marginLeft: 20, + marginRight: 20, + borderColor: 'transparent', + backgroundColor: Color.accentLightColor, + height: 52 + }, + btnSubmit: { + marginTop: 20, + borderColor: 'transparent', + backgroundColor: Color.accentLightColor, + height: 52, + width: "30%", + marginLeft: 20, + marginRight: 20, + }, + input: { + height: 60, + marginTop: responsiveHeight(2), + marginLeft: responsiveWidth(5), + marginRight: responsiveWidth(5), + borderRadius: 5, + } +}); \ No newline at end of file diff --git a/screens/wallet/agent/EnvoieCashVersAutreWalletAgent.js b/screens/wallet/agent/EnvoieCashVersAutreWalletAgent.js index b5897644..13af3b9c 100644 --- a/screens/wallet/agent/EnvoieCashVersAutreWalletAgent.js +++ b/screens/wallet/agent/EnvoieCashVersAutreWalletAgent.js @@ -17,7 +17,8 @@ import { Color } from '../../../config/Color'; import { store } from "../../../redux/store"; import { identityPieces, isIlinkWorldWallet, isNormalInteger, typeIdIDestinataire, thousandsSeparators } from '../../../utils/UtilsFunction'; import { readUser } from '../../../webservice/AuthApi'; -import { getActiveCountryAction, getActiveCountryByDialCodeAction, getActiveCountryByDialCodeReset, getActiveCountryReset, getPayCountryNetworkAction, getPayCountryNetworkReset } from '../../../webservice/CountryApi'; +import { getActiveCountryAction, getActiveCountryByDialCodeAction, getActiveCountryByDialCodeReset, getActiveCountryReset, getOtherPayCountryNetworkAction, getPayCountryNetworkReset } from '../../../webservice/CountryApi'; +import { envoieUserWalletToCashAction, envoieUserWalletToCashReset, getCommissionUserWalletToCashAction, getCommissionUserWalletToCashReset } from '../../../webservice/EnvoieUserApi'; import { Typography, FontWeight } from '../../../config/typography'; import thousands from 'thousands'; import { IlinkEmitter } from '../../../utils/events'; @@ -54,23 +55,31 @@ class EnvoieCashVersAutreWalletAgent extends Component { constructor(props) { super(props); this.state = { - identityPieces: identityPieces(), - identityPiecesName: (identityPieces()[0]).name, + identityPiecesEmetteur: identityPieces(), + identityPiecesNameEmetteur: (identityPieces()[0]).name, paysDestination: [], paysDestinationSelect: null, walletActifs: [], walletActifSelect: null, - noms: null, - prenoms: null, - numeroTelephone: null, - numeroIdentite: null, + nomsEmetteur: null, + prenomsEmetteur: null, + emailEmetteur: null, + numeroIdentiteEmetteur: null, + nomsDestinataire: null, + prenomsDestinataire: null, + idDestinataire: null, + numeroIdentiteDestinataire: null, montant: null, password: null, loading: false, user: null, - modalVisible: true, - hasLoadActiveCountryList: true, - hasLoadActivePayCountryNetworkList: true, + triggerSubmitClick: false, + triggerNextClick: false, + displayFirstStep: true, + displaySecondStep: false, + modalVisible: false, + hasLoadActiveCountryList: false, + hasLoadActivePayCountryNetworkList: false, triggerSubmitClick: false, isDataSubmit: false, isModalConfirmVisible: false, @@ -83,8 +92,6 @@ class EnvoieCashVersAutreWalletAgent extends Component { this.props.envoieUserWalletToCashReset(); this.props.getCommissionUserWalletToCashReset(); - this.props.getActiveCountryAction(); - console.log("ENVOIE WALLET PROPS", this.props); } componentDidMount() { @@ -125,7 +132,7 @@ class EnvoieCashVersAutreWalletAgent extends Component { paysDestinationSelect: resultActiveCountryList.response[0].name, }); if (this.state.hasLoadActivePayCountryNetworkList) - this.props.getPayCountryNetworkAction({ id_wallet_user: this.state.wallet.id, id_country: resultActiveCountryList.response[0].id }); + this.props.getOtherPayCountryNetworkAction({ id_wallet_agent: this.state.wallet.id, id_country: resultActiveCountryList.response[0].id }); } } @@ -319,7 +326,6 @@ class EnvoieCashVersAutreWalletAgent extends Component { const commission = data.response.frais; const montant_net_final = data.response.montant_net_final; const montant_net_init = data.response.montant_net_init; - const destinataire = data.response.destinataire; console.log("DATA SEND TO CONFIRM DIALOG", data); return ( @@ -331,14 +337,6 @@ class EnvoieCashVersAutreWalletAgent extends Component { - - - {I18n.t('DESTINATAIRE')} - - - {destinataire} - - {I18n.t('AMOUNT')} @@ -357,28 +355,14 @@ class EnvoieCashVersAutreWalletAgent extends Component { - - - {I18n.t('NET_AMOUNT')}: - - - - - - - - {I18n.t('INIT_COUNTRY')} - - - {`${thousands(montant_net_init, ' ')} ${this.state.wallet.currency_code}`} - - - - - {I18n.t('FINAL_COUNTRY')} - - - {montant_net_final} + + + + {I18n.t('NET_AMOUNT')}: + + + {`${thousands(montant_net_final, ' ')} ${this.state.wallet.currency_code}`} + @@ -395,14 +379,19 @@ class EnvoieCashVersAutreWalletAgent extends Component { isDataSubmit: true }); this.props.envoieUserWalletToCashAction({ - type: 3, - id_wallet_user: this.state.wallet.id, + type: 15, + id_wallet_agent: this.state.wallet.id, + nom_emetteur: this.state.nomsEmetteur, + prenom_emetteur: this.state.prenomsDestinataire, + email_emetteur: this.state.emailEmetteur, + type_document_emetteur: this.state.identityPiecesNameEmetteur, + id_document_emetteur: this.state.numeroIdentiteEmetteur, final_country: (this.state.paysDestination.filter(element => element.name === this.state.paysDestinationSelect))[0].id, - id_destinataire: this.state.numeroTelephone, - type_document_destinataire: this.state.identityPiecesName, - nom_destinataire: this.state.noms, - prenom_destinataire: this.state.prenoms, - id_document_destinataire: this.state.numeroIdentite, + id_destinataire: this.state.numeroIdentiteDestinataire, + type_document_destinataire: this.state.identityPiecesNameEmetteur, + nom_destinataire: this.state.nomsDestinataire, + prenom_destinataire: this.state.prenomsDestinataire, + id_document_destinataire: this.state.numeroIdentiteDestinataire, network_destinataire: (this.state.walletActifs.filter(element => element.name === this.state.walletActifSelect))[0].id, montant: this.state.montant, password: this.state.password @@ -416,23 +405,43 @@ class EnvoieCashVersAutreWalletAgent extends Component { } - onSubmitSendWalletToWallet = () => { - const { identityPiecesName, noms, prenoms, paysDestinationSelect, numeroIdentite, walletActifSelect, typeIdDestinataireSelect, numeroTelephone, montant, password } = this.state; + onSubmitNextStep = () => { - if (this.ckeckIfFieldIsOK(identityPiecesName)) - this.identityPiecesAnim.shake(800); - else if (this.ckeckIfFieldIsOK(paysDestinationSelect)) - this.paysDestinationAnim.shake(800); - else if (this.ckeckIfFieldIsOK(walletActifSelect)) - this.walletActifAnim.shake(800); - else if (this.ckeckIfFieldIsOK(noms)) - this.firstnameAnim.shake(800); - else if (this.ckeckIfFieldIsOK(prenoms)) - this.lastnameAnim.shake(800); - else if (this.ckeckIfFieldIsOK(numeroIdentite)) - this.numeroIdentiteAnim.shake(800); - else if (this.ckeckIfFieldIsOK(numeroTelephone)) - this.numeroTelephoneAnim.shake(800); + const { nomsEmetteur, prenomsEmetteur, emailEmetteur, numeroIdentiteEmetteur } = this.state; + + if (this.ckeckIfFieldIsOK(nomsEmetteur)) + this.nomsEmetteurAnim.shake(800); + else if (this.ckeckIfFieldIsOK(prenomsEmetteur)) + this.prenomsEmetteurAnim.shake(800); + else if (this.ckeckIfFieldIsOK(emailEmetteur)) + this.emailEmetteurAnim.shake(800); + else if (this.ckeckIfFieldIsOK(numeroIdentiteEmetteur)) + this.numeroIdentiteEmetteurAnim.shake(800); + else { + + this.setState({ + triggerNextClick: true, + modalVisible: true, + hasLoadActiveCountryList: true, + hasLoadActivePayCountryNetworkList: true, + displayFirstStep: !this.state.displayFirstStep, + displaySecondStep: !this.state.displaySecondSte + }, () => { + this.props.getActiveCountryAction(); + console.log("ENVOIE WALLET PROPS", this.props); + }); + } + } + + onSubmitCashVersAutreWallet = () => { + const { nomsDestinataire, prenomsDestinataire, montant, password, numeroIdentiteDestinataire } = this.state; + + if (this.ckeckIfFieldIsOK(nomsDestinataire)) + this.nomDestinataireAnim.shake(800); + else if (this.ckeckIfFieldIsOK(prenomsDestinataire)) + this.prenomsDestinataireAnim.shake(800); + else if (this.ckeckIfFieldIsOK(numeroIdentiteDestinataire)) + this.identityPiecesDestinataireAnim.shake(800); else if (this.ckeckIfFieldIsOK(montant) || !this.isMontantValid().isValid) { console.log("IS MONTANT VALID", this.isMontantValid()) this.montantAnim.shake(800); @@ -442,8 +451,8 @@ class EnvoieCashVersAutreWalletAgent extends Component { else { this.props.getCommissionUserWalletToCashAction({ - type: 3, - id_wallet_user: this.state.wallet.id, + type: 15, + id_wallet_agent: this.state.wallet.id, final_country: (this.state.paysDestination.filter(element => element.name === this.state.paysDestinationSelect))[0].id, montant: this.state.montant, }); @@ -482,199 +491,257 @@ class EnvoieCashVersAutreWalletAgent extends Component { } - {I18n.t('ENVOIE_WALLET_TO_CASH')} + {this.state.displayFirstStep && + <> - { this.paysDestinationAnim = comp }} - style={{ - width: responsiveWidth(90), - height: 60, - marginTop: 20, - alignSelf: 'center', - borderRadius: 10, - paddingLeft: 20, - paddingRight: 20, - backgroundColor: 'white' - }}> - { - this.props.getPayCountryNetworkReset(); + {I18n.t('DEPOSIT_CASH_TO_OTHER_WALLET_DESCRIPTION')} - let countrySelect = data.filter(element => element.name === value); - this.setState({ paysDestinationSelect: value, hasLoadActivePayCountryNetworkList: true }, () => { - this.props.getPayCountryNetworkAction({ id_wallet_user: this.state.wallet.id, id_country: countrySelect[0].id }); - }); - this.props.getCommissionUserWalletToCashReset(); - }} - valueExtractor={(value) => { return value.name }} - labelExtractor={(value) => { return value.name }} - /> - + { this.nomsEmetteurAnim = comp }}> + { + this.setState({ nomsEmetteur }) + }} + style={styles.input} + > + + - { this.walletActifAnim = comp }} - style={{ - width: responsiveWidth(90), - height: 60, - marginTop: 20, - alignSelf: 'center', - borderRadius: 10, - paddingLeft: 20, - paddingRight: 20, - backgroundColor: 'white' - }}> - { - this.setState({ - walletActifSelect: value, - }); + { this.prenomsEmetteurAnim = comp }}> + { + this.setState({ prenomsEmetteur }) + }} + style={styles.input} + > + + - }} - valueExtractor={(value) => { return value.name }} - labelExtractor={(value) => { return value.name }} - /> - + { this.emailEmetteurAnim = comp }}> + { + this.setState({ emailEmetteur }) + }} + style={styles.input} + > + + - { this.firstnameAnim = comp }}> - { - this.setState({ noms }) - }} - style={styles.input} - > - - - - { this.lastnameAnim = comp }}> - { - this.setState({ prenoms }) - }} - style={styles.input} - > - - - - { this.numeroTelephoneAnim = comp }}> - { - this.setState({ numeroTelephone }) - }} - style={styles.input} - > - - - - { this.identityPiecesAnim = comp }} - style={{ - width: responsiveWidth(90), - height: 60, - marginTop: 20, - alignSelf: 'center', - borderRadius: 10, - paddingLeft: 20, - paddingRight: 20, - backgroundColor: 'white' - }}> - { - this.setState({ identityPiecesName: value }); - }} - valueExtractor={(value) => { return value.name }} - labelExtractor={(value) => { return value.name }} - /> - - - { this.numeroIdentiteAnim = comp }}> - { - this.setState({ numeroIdentite }) - }} - style={styles.input} - > - - - - { this.montantAnim = comp }}> - { - this.setState({ montant }) - }} - style={styles.input} - > - - - { this.identityPiecesEmetteurAnim = comp }} style={{ - width: 1, - borderLeftColor: '#f0f0f0', - height: 40, - left: -8, - top: -10, - borderLeftWidth: 1, + width: responsiveWidth(90), + height: 60, + marginTop: 20, + alignSelf: 'center', + borderRadius: 10, + paddingLeft: 20, + paddingRight: 20, + backgroundColor: 'white' + }}> + { + this.setState({ identityPiecesNameEmetteur: value }); + }} + valueExtractor={(value) => { return value.name }} + labelExtractor={(value) => { return value.name }} + /> + - }} - /> - {this.state.wallet.currency_code} - - + { this.numeroIdentiteEmetteurAnim = comp }}> + { + this.setState({ numeroIdentiteEmetteur }) + }} + style={styles.input} + > + + - { this.passwordAnim = comp }}> - { - this.setState({ password }) - }} - style={styles.input} - > - - + + + } + + {this.state.displaySecondStep && + <> + { this.nomDestinataireAnim = comp }}> + { + this.setState({ nomsDestinataire }) + }} + style={styles.input} + > + + + + { this.prenomsDestinataireAnim = comp }}> + { + this.setState({ prenomsDestinataire }) + }} + style={styles.input} + > + + + + { this.identityPiecesDestinataireAnim = comp }}> + { + this.setState({ numeroIdentiteDestinataire }) + }} + style={styles.input} + > + + + + { this.paysDestinationAnim = comp }} + style={{ + width: responsiveWidth(90), + height: 60, + marginTop: 20, + alignSelf: 'center', + borderRadius: 10, + paddingLeft: 20, + paddingRight: 20, + backgroundColor: 'white' + }}> + { + this.props.getPayCountryNetworkReset(); + + let countrySelect = data.filter(element => element.name === value); + this.setState({ paysDestinationSelect: value, hasLoadActivePayCountryNetworkList: true }, () => { + this.props.getOtherPayCountryNetworkAction({ id_wallet_agent: this.state.wallet.id, id_country: countrySelect[0].id }); + }); + this.props.getCommissionUserWalletToCashReset(); + }} + valueExtractor={(value) => { return value.name }} + labelExtractor={(value) => { return value.name }} + /> + + + { this.walletActifAnim = comp }} + style={{ + width: responsiveWidth(90), + height: 60, + marginTop: 20, + alignSelf: 'center', + borderRadius: 10, + paddingLeft: 20, + paddingRight: 20, + backgroundColor: 'white' + }}> + { + this.setState({ + walletActifSelect: value, + }); + + }} + valueExtractor={(value) => { return value.name }} + labelExtractor={(value) => { return value.name }} + /> + + + { this.montantAnim = comp }}> + { + this.setState({ montant }) + }} + style={styles.input} + > + + + + {this.state.wallet.currency_code} + + + + { this.passwordAnim = comp }}> + { + this.setState({ password }) + }} + style={styles.input} + > + + + + + + } - ) @@ -707,7 +774,7 @@ const mapDispatchToProps = dispatch => bindActionCreators({ getActiveCountryByDialCodeAction, getActiveCountryByDialCodeReset, - getPayCountryNetworkAction, + getOtherPayCountryNetworkAction, getPayCountryNetworkReset, getActiveCountryAction, diff --git a/screens/wallet/agent/EnvoieCashVersCarteAgent.js b/screens/wallet/agent/EnvoieCashVersCarteAgent.js new file mode 100644 index 00000000..2e76c7da --- /dev/null +++ b/screens/wallet/agent/EnvoieCashVersCarteAgent.js @@ -0,0 +1,540 @@ +import Button from 'apsl-react-native-button'; +import isEqual from 'lodash/isEqual'; +import isNil from 'lodash/isNil'; +import React, { Component } from 'react'; +import { Alert, ScrollView, StyleSheet, Text, View } from 'react-native'; +import * as Animatable from 'react-native-animatable'; +import Dialog from "react-native-dialog"; +import I18n from 'react-native-i18n'; +import { responsiveHeight, responsiveWidth } from 'react-native-responsive-dimensions'; +import { ProgressDialog } from 'react-native-simple-dialogs'; +import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome'; +import { Fumi } from 'react-native-textinput-effects'; +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; +import thousands from 'thousands'; +import { Color } from '../../../config/Color'; +import { FontWeight, Typography } from '../../../config/typography'; +import { store } from "../../../redux/store"; +import { IlinkEmitter } from '../../../utils/events'; +import { LiteCreditCardInput } from "react-native-credit-card-input"; +import { readUser } from '../../../webservice/AuthApi'; +import { envoieUserWalletToCardAction, envoieUserWalletToCardReset, getCommissionUserWalletToCardAction, getCommissionUserWalletToCardReset } from '../../../webservice/EnvoieUserApi'; +import { isNormalInteger } from '../../../utils/UtilsFunction'; +let theme = require('../../../utils/theme.json'); +let route = require('../../../route.json'); + + +class EnvoieCashVersCarteAgent extends Component { + + static navigatorStyle = { + navBarBackgroundColor: Color.primaryColor, + statusBarColor: Color.primaryDarkColor, + navBarTextColor: '#FFFFFF', + navBarButtonColor: '#FFFFFF' + + }; + + static navigationOptions = () => { + return { + drawerLabel: () => null, + headerTitle: I18n.t('DEPOSIT_CASH_TO_VISA'), + headerTintColor: 'white', + headerStyle: { + backgroundColor: Color.primaryColor, + marginTop: 0, + color: 'white' + }, + headerTitleStyle: { + color: "white" + }, + title: I18n.t('DEPOSIT_CASH_TO_VISA') + } + }; + + constructor(props) { + super(props); + this.state = { + montant: null, + password: null, + montant: '', + numeroSerie: '', + numCarte: 0, + cvv: 0, + expiration_date: '', + creditCardInput: {}, + displayCardError: false, + loading: false, + user: null, + triggerSubmitClick: false, + isSubmitClick: false, + isDataSubmit: false, + isModalConfirmVisible: false, + wallet: store.getState().walletDetailReducer.result.response + }; + + this.props.envoieUserWalletToCardReset(); + this.props.getCommissionUserWalletToCardReset(); + + } + + componentDidMount() { + + readUser().then((user) => { + if (user) { + if (user !== undefined) { + this.setState({ user }); + } + } + }); + + } + + componentWillReceiveProps(nextProps) { + + console.log('PROPS', nextProps) + + if (nextProps.resultEnvoieWalletToCardGetCommission != null) { + + if (typeof nextProps.resultEnvoieWalletToCardGetCommission.response !== 'undefined') { + + if (!nextProps.loadingEnvoieWalletToCardGetCommission) + this.setState({ + isModalConfirmVisible: true + }); + } + } + } + + isCreditCardValid = () => { + const { creditCardInput } = this.state; + const errorMessage = []; + + if (typeof creditCardInput.status !== 'undefined') { + + if (creditCardInput.status.cvc === 'incomplete') + errorMessage.push(I18n.t('CVC_CARD_ERROR')); + if (creditCardInput.status.expiry === 'incomplete') + errorMessage.push(I18n.t('EXPIRY_CARD_ERROR')); + if (creditCardInput.status.number === 'incomplete') + errorMessage.push(I18n.t('CARD_NUMBER_ERROR')); + } + else + errorMessage.push(I18n.t('THIS_FIELD_IS_REQUIRED')) + + return errorMessage; + } + + onCreditCardChange = (form) => { + this.setState({ + creditCardInput: form, + displayCardError: false + }); + } + + renderEnvoieWalletToWalletResponse = () => { + + const { resultEnvoieWalletToCard, errorEnvoieWalletToCard } = this.props; + + if (errorEnvoieWalletToCard !== null) { + if (typeof errorEnvoieWalletToCard.data !== 'undefined') { + Alert.alert( + I18n.t("WITHDRAWAL_ERROR"), + errorEnvoieWalletToCard.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.envoieUserWalletToCardReset(); + } + } + ], + { cancelable: false } + ) + } + } + + if (resultEnvoieWalletToCard !== null) { + if (resultEnvoieWalletToCard.response !== null) { + Alert.alert( + I18n.t("WITHDRAWAL_SUCCESS"), + resultEnvoieWalletToCard.response, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.envoieUserWalletToCardReset(); + IlinkEmitter.emit("refreshWallet"); + this.props.navigation.pop(); + } + } + + ], + { cancelable: false } + ) + } + } + } + + renderDialogGetCommissionResponse = () => { + + const { errorEnvoieWalletToCardGetCommission } = this.props; + + if (errorEnvoieWalletToCardGetCommission !== null) { + if (typeof errorEnvoieWalletToCardGetCommission.data !== 'undefined') { + Alert.alert( + I18n.t("ERROR_LABLE"), + errorEnvoieWalletToCardGetCommission.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.getCommissionUserWalletToCardReset(); + } + } + ], + { cancelable: false } + ) + } + } + + } + + updateLangue() { + this.props.navigation.setParams({ name: I18n.t('WITHDRAWAL_WALLET_TO_CASH') }) + this.forceUpdate() + } + + modalConfirmTransaction = (data) => { + + const frais = data.response.frais; + const montant_net = data.response.montant_net; + + return ( + + + + {I18n.t('TRANSACTION_DETAIL')} + + + + + + + {I18n.t('AMOUNT')} + + + {`${thousands(this.state.montant, ' ')} ${this.state.wallet.currency_code}`} + + + + + {I18n.t('FEES_AND_TAXES')} + + + {`${thousands(frais, ' ')} ${this.state.wallet.currency_code}`} + + + + + + + {I18n.t('NET_AMOUNT')}: + + + {`${thousands(montant_net, ' ')} ${this.state.wallet.currency_code}`} + + + + + + { + this.setState({ + isModalConfirmVisible: false + }); + }} /> + { + this.setState({ + isModalConfirmVisible: false, + isDataSubmit: true + }); + this.props.envoieUserWalletToCardAction({ + type: 16, + numero_carte: this.state.creditCardInput.values.number.replace(/\s/g, ''), + cvv: this.state.creditCardInput.values.cvc, + expiration_date: this.state.creditCardInput.values.expiry, + id_wallet_agent: this.state.wallet.id, + montant: this.state.montant, + password: this.state.password + }); + this.props.getCommissionUserWalletToCardReset(); + }} /> + + + + ); + + } + + ckeckIfFieldIsOK(champ) { + return (isNil(champ) || isEqual(champ.length, 0)); + } + + isMontantValid = () => { + const { montant } = this.state; + if ((parseInt(isEqual(montant, 0)) || montant < 0)) + return { + errorMessage: I18n.t('ENTER_AMOUNT_SUPERIOR_ZEROR'), + isValid: false + }; + + else if (!isNormalInteger(montant)) + return { + errorMessage: I18n.t('ENTER_VALID_AMOUNT'), + isValid: false + }; + + else + return { + errorMessage: '', + isValid: true + }; + } + + onSubmitSendWalletToCard = () => { + const { creditCardInput, montant, password } = this.state; + + if (!creditCardInput.valid) + this.codeCVVAnim.shake(800); + else if (this.ckeckIfFieldIsOK(montant) || !this.isMontantValid().isValid) { + this.montantAnim.shake(800); + } + else if (this.ckeckIfFieldIsOK(password)) + this.passwordAnim.shake(800); + else { + + this.props.getCommissionUserWalletToCardAction({ + type: 16, + id_wallet_agent: this.state.wallet.id, + montant: this.state.montant, + }); + + } + this.setState({ + triggerSubmitClick: true, + numCarte: parseInt((creditCardInput.values.number).replace(/ /g, ' ')), + cvv: creditCardInput.values.cvc, + expiration_date: creditCardInput.values.expiry + }); + } + + + renderLoader = () => { + return ( + + ) + } + + render() { + const { resultEnvoieWalletToCardGetCommission } = this.props; + return ( + <> + {(this.props.loadingEnvoieWalletToCard || this.props.loadingEnvoieWalletToCardGetCommission) && this.renderLoader()} + {this.state.isDataSubmit && this.renderEnvoieWalletToWalletResponse()} + {this.state.triggerSubmitClick && this.renderDialogGetCommissionResponse()} + { + (resultEnvoieWalletToCardGetCommission !== null) && + (typeof resultEnvoieWalletToCardGetCommission.response !== 'undefined') && + this.modalConfirmTransaction(resultEnvoieWalletToCardGetCommission) + } + + + {I18n.t('DEPOSIT_CASH_TO_VISA_DESCRIPTION')} + + { this.codeCVVAnim = comp }}> + + + { + (this.state.displayCardError) && + this.isCreditCardValid().map((item) => ( + {item} + )) + } + + + {/* { + if (codeCVV.length > 3) { + this.setState({ codeCVV: this.state.codeCVV.substring(0, 3) }) + } + else + this.setState({ codeCVV }) + }} + style={styles.input} + > + */} + + + { this.montantAnim = comp }}> + { + this.setState({ montant }) + }} + style={styles.input} + > + + + + {this.state.wallet.currency_code} + + + + { this.passwordAnim = comp }}> + { + this.setState({ password }) + }} + style={styles.input} + > + + + + + + + ) + } +} + +const maptStateToProps = state => ({ + + loadingEnvoieWalletToCard: state.envoieUserWalletToCardReducer.loading, + resultEnvoieWalletToCard: state.envoieUserWalletToCardReducer.result, + errorEnvoieWalletToCard: state.envoieUserWalletToCardReducer.error, + + loadingEnvoieWalletToCardGetCommission: state.envoieUserWalletToCardGetCommissionReducer.loading, + resultEnvoieWalletToCardGetCommission: state.envoieUserWalletToCardGetCommissionReducer.result, + errorEnvoieWalletToCardGetCommission: state.envoieUserWalletToCardGetCommissionReducer.error, +}); + +const mapDispatchToProps = dispatch => bindActionCreators({ + + envoieUserWalletToCardAction, + envoieUserWalletToCardReset, + + getCommissionUserWalletToCardAction, + getCommissionUserWalletToCardReset + +}, dispatch); + +export default connect(maptStateToProps, mapDispatchToProps)(EnvoieCashVersCarteAgent); + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: Color.primaryDarkColor, + }, + textbtnvalide: { + color: 'white', + fontWeight: 'bold' + }, + bigtitle: { + color: 'white', + fontSize: 20, + flex: 1, + fontWeight: 'bold', + textAlign: 'center', + margin: 20, + }, + blockView: { + paddingVertical: 10, + borderBottomWidth: 1 + }, + subbigtitle: { + color: 'white', + fontSize: 17, + textAlign: 'center', + margin: 5, + }, + btnvalide: { + marginTop: 20, + marginLeft: 20, + marginRight: 20, + borderColor: 'transparent', + backgroundColor: Color.accentLightColor, + height: 52 + }, + btnSubmit: { + marginTop: 20, + borderColor: 'transparent', + backgroundColor: Color.accentLightColor, + height: 52, + width: "30%", + marginLeft: 20, + marginRight: 20, + }, + input: { + height: 60, + marginTop: responsiveHeight(2), + marginLeft: responsiveWidth(5), + marginRight: responsiveWidth(5), + borderRadius: 5, + } +}); \ No newline at end of file diff --git a/screens/wallet/agent/EnvoieCashVersWalletAgent.js b/screens/wallet/agent/EnvoieCashVersWalletAgent.js index 5fb40690..4b07cd86 100644 --- a/screens/wallet/agent/EnvoieCashVersWalletAgent.js +++ b/screens/wallet/agent/EnvoieCashVersWalletAgent.js @@ -314,7 +314,7 @@ class EnvoieCashVersWalletAgent extends Component { } - {I18n.t('DEPOSIT_CASH_TO_OTHER_WALLET')} + {I18n.t('DEPOSIT_CASH_TO_WALLET_DESCRIPTION')} { this.userCodeAnim = comp }}> { return { drawerLabel: () => null, - headerTitle: I18n.t('WITHDRAWAL_CARD_TO_CASH'), + headerTitle: I18n.t('WITHDRAWAL_CARD_TO_CASH_AGENT'), headerTintColor: 'white', headerStyle: { backgroundColor: Color.primaryColor, @@ -48,7 +48,7 @@ class RetraitCarteVersCashAgent extends Component { headerTitleStyle: { color: "white" }, - title: I18n.t('WITHDRAWAL_CARD_TO_CASH') + title: I18n.t('WITHDRAWAL_CARD_TO_CASH_AGENT') } }; @@ -257,10 +257,10 @@ class RetraitCarteVersCashAgent extends Component { }); this.props.envoieUserWalletToCardAction({ type: 13, - numCarte: this.state.creditCardInput.values.number.replace(/\s/g, ''), + numero_carte: this.state.creditCardInput.values.number.replace(/\s/g, ''), cvv: this.state.creditCardInput.values.cvc, expiration_date: this.state.creditCardInput.values.expiry, - id_wallet_user: this.state.wallet.id, + id_wallet_agent: this.state.wallet.id, montant: this.state.montant, password: this.state.password }); diff --git a/screens/wallet/agent/RetraitEnCashAgent.js b/screens/wallet/agent/RetraitEnCashAgent.js index 233608c7..edad5c0b 100644 --- a/screens/wallet/agent/RetraitEnCashAgent.js +++ b/screens/wallet/agent/RetraitEnCashAgent.js @@ -124,10 +124,8 @@ class RetraitEnCashAgent extends Component { onSubmitRetraitCash = () => { const { codeRetrait, montant, password } = this.state; - if (this.ckeckIfFieldIsOK(montant) || !this.isMontantValid().isValid) + if (this.ckeckIfFieldIsOK(montant)) this.montantAnim.shake(800); - else if (this.ckeckIfFieldIsOK(codeRetrait)) - this.codeRetraitAnim.shake(800); else if (this.ckeckIfFieldIsOK(password)) this.passwordAnim.shake(800); else { @@ -142,21 +140,24 @@ class RetraitEnCashAgent extends Component { }); } this.setState({ - + triggerSubmitClick: true }); } onSubmitNextStep = () => { - const { idTransaction } = this.state; + const { idTransaction, codeRetrait } = this.state; this.props.checkIdTransactionReset(); if (this.ckeckIfFieldIsOK(idTransaction)) this.idTransactionAnim.shake(800); + else if (this.ckeckIfFieldIsOK(codeRetrait)) + this.codeRetraitAnim.shake(800); else { this.props.checkIdTransactionAction({ id_transaction: idTransaction, - id_wallet_agent: this.state.wallet.id + id_wallet_agent: this.state.wallet.id, + code_retrait: this.state.codeRetrait }); this.setState({ triggerNextClick: true }); } @@ -185,7 +186,7 @@ class RetraitEnCashAgent extends Component { if (resultEnvoieWalletToCard !== null) { if (resultEnvoieWalletToCard.response !== null) { Alert.alert( - I18n.t("SUCCESS_TRANSFER"), + I18n.t("WITHDRAWAL_SUCCESS"), resultEnvoieWalletToCard.response, [ { @@ -217,6 +218,7 @@ class RetraitEnCashAgent extends Component { nom_destinataire: resultIdRetraitEnCash.response.nom_destinataire, prenom_destinataire: resultIdRetraitEnCash.response.prenom_destinataire, type_document_destinataire: resultIdRetraitEnCash.response.type_document_destinataire, + montant: resultIdRetraitEnCash.response.montant, displayFirstStep: !this.state.displayFirstStep, displaySecondStep: !this.state.displaySecondStep, }); @@ -296,6 +298,20 @@ class RetraitEnCashAgent extends Component { + { this.codeRetraitAnim = comp }}> + { + this.setState({ codeRetrait }) + }} + style={styles.input} + > + + +