From 2b3d33ef994ab17667a39388b827300ca1b90cd3 Mon Sep 17 00:00:00 2001 From: Brice Zele Date: Thu, 13 Aug 2020 06:17:57 +0100 Subject: [PATCH] Group demand detail --- redux/actions/NanoCreditAction.js | 20 +- .../reducers/GetUniqueDemandsGroupReducer.js | 33 ++ redux/reducers/index.js | 4 +- redux/types/NanoCreditType.js | 5 + route.json | 4 +- screens/nano-credit/DemandGroupDetail.js | 513 ++++++++++++++++++ screens/nano-credit/DemandGroupNanoCredit.js | 8 +- webservice/user/NanoCreditApi.js | 39 +- 8 files changed, 620 insertions(+), 6 deletions(-) create mode 100644 redux/reducers/GetUniqueDemandsGroupReducer.js diff --git a/redux/actions/NanoCreditAction.js b/redux/actions/NanoCreditAction.js index 9320a6bb..7be1bfce 100644 --- a/redux/actions/NanoCreditAction.js +++ b/redux/actions/NanoCreditAction.js @@ -1,4 +1,4 @@ -import { CREATE_GROUP_PENDING, CREATE_GROUP_SUCCESS, CREATE_GROUP_ERROR, CREATE_GROUP_RESET, GET_DEMAND_GROUP_PENDING, GET_DEMAND_GROUP_SUCCESS, GET_DEMAND_GROUP_ERROR, GET_DEMAND_GROUP_RESET } from "../types/NanoCreditType"; +import { CREATE_GROUP_PENDING, CREATE_GROUP_SUCCESS, CREATE_GROUP_ERROR, CREATE_GROUP_RESET, GET_DEMAND_GROUP_PENDING, GET_DEMAND_GROUP_SUCCESS, GET_DEMAND_GROUP_ERROR, GET_DEMAND_GROUP_RESET, GET_UNIQUE_DEMAND_GROUP_PENDING, GET_UNIQUE_DEMAND_GROUP_RESET } from "../types/NanoCreditType"; export const fetchCreateGroupPending = () => ({ type: CREATE_GROUP_PENDING @@ -34,4 +34,22 @@ export const fetchGetDemandsGroupError = (error) => ({ export const fetchGetDemandsGroupReset = () => ({ type: GET_DEMAND_GROUP_RESET +}); + +export const fetchGetUniqueDemandsGroupPending = () => ({ + type: GET_UNIQUE_DEMAND_GROUP_PENDING +}); + +export const fetchGetUniqueDemandsGroupSuccess = (res) => ({ + type: GET_UNIQUE_DEMAND_GROUP_SUCCESS, + result: res, +}); + +export const fetchGetUniqueDemandsGroupError = (error) => ({ + type: GET_UNIQUE_DEMAND_GROUP_ERROR, + result: error +}); + +export const fetchGetUniqueDemandsGroupReset = () => ({ + type: GET_UNIQUE_DEMAND_GROUP_RESET }); \ No newline at end of file diff --git a/redux/reducers/GetUniqueDemandsGroupReducer.js b/redux/reducers/GetUniqueDemandsGroupReducer.js new file mode 100644 index 00000000..f388aa41 --- /dev/null +++ b/redux/reducers/GetUniqueDemandsGroupReducer.js @@ -0,0 +1,33 @@ +import { GET_UNIQUE_DEMAND_GROUP_PENDING, GET_UNIQUE_DEMAND_GROUP_SUCCESS, GET_UNIQUE_DEMAND_GROUP_RESET, GET_UNIQUE_DEMAND_GROUP_ERROR } from "../types/NanoCreditType"; + +const initialState = { + loading: false, + result: null, + error: null +}; + +export default (state = initialState, action) => { + switch (action.type) { + case GET_UNIQUE_DEMAND_GROUP_PENDING: return { + ...state, + loading: true + } + case GET_UNIQUE_DEMAND_GROUP_SUCCESS: return { + ...state, + loading: false, + result: action.result.data, + error: null + } + case GET_UNIQUE_DEMAND_GROUP_ERROR: return { + ...state, + loading: false, + result: null, + error: action.result + } + case GET_UNIQUE_DEMAND_GROUP_RESET: return initialState; + + default: { + return state; + } + } +}; diff --git a/redux/reducers/index.js b/redux/reducers/index.js index 0782edff..8247cbe5 100644 --- a/redux/reducers/index.js +++ b/redux/reducers/index.js @@ -27,6 +27,7 @@ import RetraitCashAgentIdVerificationReducer from "./RetraitCashAgentIdVerificat import CreateGroupReducer from "./CreateGroupReducer"; import SaveOnesignalReducer from "./SaveOnesignalReducer"; import GetDemandsGroupReducer from "./GetDemandsGroupReducer"; +import GetUniqueDemandsGroupReducer from "./GetUniqueDemandsGroupReducer"; const persistConfig = { key: 'root', @@ -63,7 +64,8 @@ const rootReducer = persistCombineReducers(persistConfig, { retraitCashAgentIdVerificationReducer: RetraitCashAgentIdVerificationReducer, createGroupReducer: CreateGroupReducer, saveOnesignalReducer: SaveOnesignalReducer, - getDemandsGroupReducer: GetDemandsGroupReducer + getDemandsGroupReducer: GetDemandsGroupReducer, + getUniqueDemandsGroupReducer: GetUniqueDemandsGroupReducer }); export default rootReducer; \ No newline at end of file diff --git a/redux/types/NanoCreditType.js b/redux/types/NanoCreditType.js index 9aec1516..28f879db 100644 --- a/redux/types/NanoCreditType.js +++ b/redux/types/NanoCreditType.js @@ -7,3 +7,8 @@ export const GET_DEMAND_GROUP_PENDING = 'GET_DEMAND_GROUP_PENDING'; export const GET_DEMAND_GROUP_SUCCESS = 'GET_DEMAND_GROUP_SUCCESS'; export const GET_DEMAND_GROUP_ERROR = 'GET_DEMAND_GROUP_ERROR'; export const GET_DEMAND_GROUP_RESET = 'GET_DEMAND_GROUP_RESET'; + +export const GET_UNIQUE_DEMAND_GROUP_PENDING = 'GET_UNIQUE_DEMAND_GROUP_PENDING'; +export const GET_UNIQUE_DEMAND_GROUP_SUCCESS = 'GET_UNIQUE_DEMAND_GROUP_SUCCESS'; +export const GET_UNIQUE_DEMAND_GROUP_ERROR = 'GET_UNIQUE_DEMAND_GROUP_ERROR'; +export const GET_UNIQUE_DEMAND_GROUP_RESET = 'GET_UNIQUE_DEMAND_GROUP_RESET'; diff --git a/route.json b/route.json index 48abf2c4..654ebedf 100644 --- a/route.json +++ b/route.json @@ -54,5 +54,7 @@ "envoiCashVersCashAgent": "envoiCashVersCashAgent", "modifyIdentificationUser": "modifyIdentificationUser", "createGroupNanoCredit": "createGroupNanoCredit", - "groupNanoCredit": "groupNanoCredit" + "groupNanoCredit": "groupNanoCredit", + "demandGroupNanoCreditDetail": "demandGroupNanoCreditDetail", + "demandGroupDetail": "demandGroupDetail", } diff --git a/screens/nano-credit/DemandGroupDetail.js b/screens/nano-credit/DemandGroupDetail.js index e69de29b..8b706023 100644 --- a/screens/nano-credit/DemandGroupDetail.js +++ b/screens/nano-credit/DemandGroupDetail.js @@ -0,0 +1,513 @@ +import React, { Component } from 'react' +import { StyleSheet, View, Text, Alert, Platform } from 'react-native' +import CardView from 'react-native-cardview' +import Button from 'apsl-react-native-button' +import { responsiveHeight, responsiveWidth } from 'react-native-responsive-dimensions' +import Icons from 'react-native-vector-icons/Ionicons' +import { updateCreditDemand } from "../../webservice/HistoryRequestApi"; +import { readUser } from "../../webservice/AuthApi"; +let typesta = 0 +let moment = require('moment-timezone') +var colorback = 'white' +import I18n from "react-native-i18n"; +import { treatCreditDemand, creditDemandResetReducer } from '../../webservice/CreditTreatDemandApi'; +import { treatCancelDemand, creditCancelResetReducer } from '../../webservice/CreditCancelDemandeApi'; +import { getAgentNetworksList } from "../../webservice/NetworkApi"; +import Icon from "./History"; +import { Header } from "react-native-elements"; +let theme = require('./../../utils/theme.json'); +import { connect } from 'react-redux'; +import { bindActionCreators } from 'redux'; +import Toast from 'react-native-root-toast'; +import { Color } from '../../config/Color' +const route = require("./../../route.json"); +import Dialog from "react-native-dialog"; +import { FontWeight } from '../../config/typography' +import DeviceInfo from 'react-native-device-info' +import { getNanoCreditUniqueDemandsReset, getNanoCreditUniqueDemandsAction } from '../../webservice/user/NanoCreditApi' + +class DemandGroupDetail extends Component { + + static navigatorStyle = { + navBarBackgroundColor: theme.accentLight, + statusBarColor: theme.accent, + navBarTextColor: '#FFFFFF', + navBarButtonColor: '#FFFFFF', + }; + static navigationOptions = ({ navigation }) => { + return { + drawerLabel: () => null, + title: "Transaction N°" + navigation.getParam("item", { id: "-" }).id + } + }; + + constructor(props) { + super(props); + this.item = this.props.navigation.getParam("item", null); + let sta = '' + if (this.item.status === '1') { + typesta = 1 + colorback = '#AEAEAE' + sta = I18n.t('TREAT_DEMAND') + } else if (this.item.status === '0') { + colorback = 'green' + typesta = 2 + sta = I18n.t('ACCEPTER_DEMANDE') + } + else { + colorback = '#AEAEAE' + typesta = 2 + sta = I18n.t('REFUSED') + } + + this.state = { + displayAmountModifyDialog: false, + statut: sta, + user: null, + networks: [], + loadingTreat: false, + loadingCancel: false, + triggerTreatmentClick: false, + triggerCancelClick: false, + color: colorback, + montant: null, + isBtnModifyAmountEnabled: false, + id: this.props.navigation.getParam("id", null) + } + + this.props.getNanoCreditUniqueDemandsReset(); + this.props.getNanoCreditUniqueDemandsAction(this.state.id); + + this.currentLocale = DeviceInfo.getDeviceLocale().includes("fr") ? "fr" : "en-gb"; + moment.locale(this.currentLocale); + + } + + + displayToast = (message) => { + Toast.show(message, { + duration: Toast.durations.SHORT, + position: Toast.positions.BOTTOM, + backgroundColor: Color.primaryColor, + shadow: true, + animation: true, + hideOnPress: true, + delay: 0, + onShow: () => { + // calls on toast\`s appear animation start + }, + onShown: () => { + // calls on toast\`s appear animation end. + }, + onHide: () => { + // calls on toast\`s hide animation start. + }, + onHidden: () => { + // calls on toast\`s hide animation end. + } + }); + } + + onTreatDemand() { + if (this.item !== "1") { + this.props.creditDemandResetReducer(); + this.props.treatCreditDemand(this.item.id); + + } + } + + onCancelDemand = () => { + if (this.item !== "1") { + this.props.treatCancelDemand(this.item.id); + } + } + + renderAlertErrorTreatOrCancelDemand = () => { + const { errorTreatDemand, resultTreatDemand, resultCancelDemand, errorCancelDemand } = this.props; + + if (errorTreatDemand !== null) { + if (typeof errorTreatDemand.data !== 'undefined') { + if (errorTreatDemand.status === 426) { + Alert.alert( + I18n.t("ERROR_TREATMENT_DEMAND"), + errorTreatDemand.data.error, + [{ + text: I18n.t('CANCEL_LABEL'), + onPress: () => { }, + style: 'cancel' + }, + { + text: I18n.t("OK"), onPress: () => { + setTimeout(() => { + this.setState({ + displayAmountModifyDialog: true + }); + }, 10); + this.props.creditDemandResetReducer(); + this.props.creditCancelResetReducer(); + } + }], + { cancelable: false } + ); + } + else { + Alert.alert( + I18n.t("ERROR_TREATMENT_DEMAND"), + errorTreatDemand.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.creditDemandResetReducer(); + this.props.creditCancelResetReducer(); + } + } + ], + { cancelable: false } + ); + } + } + } + + if (errorCancelDemand !== null) { + if (typeof errorCancelDemand.data !== 'undefined') { + Alert.alert( + I18n.t("ERROR_TREATMENT_DEMAND"), + errorCancelDemand.data.error, + [ + { + text: I18n.t("OK"), onPress: () => { + this.props.creditCancelResetReducer(); + this.props.creditDemandResetReducer(); + } + } + ], + { cancelable: false } + ) + } + } + + if (resultTreatDemand !== null) { + console.log("resultTreatDemand", resultTreatDemand); + if (resultTreatDemand.status === 200) { + this.displayToast(resultTreatDemand.response); + this.props.navigation.goBack(); + this.props.navigation.state.params.onGoBack(); + this.props.creditCancelResetReducer(); + this.props.creditDemandResetReducer(); + } + } + + if (resultCancelDemand !== null) { + console.log("resultCancelDemand", resultCancelDemand); + if (resultCancelDemand.status === 200) { + + this.displayToast(resultCancelDemand.response); + this.props.navigation.goBack(); + this.props.navigation.state.params.onGoBack(); + this.props.creditCancelResetReducer(); + this.props.creditDemandResetReducer(); + + } + } + + } + + renderBtn() { + const { user } = this.state + console.warn("ITEM ITEM", this.item); + if (user) { + if (this.item.code_parrain === user.code_membre) { + if (this.item.status === '1') { + return ( + ) + } + else if (this.item.status === '2') { + return ( + ) + } + + else { + return ( + + + + + + + + + ) + } + } + } + } + + render() { + console.log("DEMAND GROUP PROPS", this.props); + let ago = moment.tz(this.item.date_creation, 'Etc/GMT+0').format(); + ago = moment(ago) + return ( + + {this.renderPromptModifyAmountToSend()} + {(this.state.triggerTreatmentClick || this.state.triggerCancelClick) && this.renderAlertErrorTreatOrCancelDemand()} + {I18n.t('MEMBER_INFO')} + + + {this.item.phone} + + + + {this.item.code_membre} + + + + {I18n.t('DEMAND_INFO')} + + + {this.item.code_parrain} + + + + {this.item.reseau} + + + + {this.item.montant} + + + + {ago.format(" Do MMMM YYYY à HH:mm")} + + + + {ago.fromNow()} + + + {this.state.user ? this.renderBtn() : null} + ) + } + + +} + +const mapStateToProps = state => ({ + loadingGetUniqueDemand: state.getUniqueDemandsGroupReducer.loading, + resultGetUniqueDemand: state.getUniqueDemandsGroupReducer.result, + errorGetUniqueDemand: state.getUniqueDemandsGroupReducer.error, + + loadingTreatDemand: state.creditTreatDemandReducer.loadingTreatDemand, + resultTreatDemand: state.creditTreatDemandReducer.resultTreatDemand, + errorTreatDemand: state.creditTreatDemandReducer.errorTreatDemand, + + loadingCancelDemand: state.creditCancelDemandReducer.loadingCancelDemand, + resultCancelDemand: state.creditCancelDemandReducer.resultCancelDemand, + errorCancelDemand: state.creditCancelDemandReducer.errorCancelDemand +}); + +const mapDispatchToProps = dispatch => bindActionCreators({ + getNanoCreditUniqueDemandsAction: getNanoCreditUniqueDemandsAction, + getNanoCreditUniqueDemandsReset: getNanoCreditUniqueDemandsReset, + treatCreditDemand: treatCreditDemand, + creditDemandResetReducer: creditDemandResetReducer, + + treatCancelDemand: treatCancelDemand, + creditCancelResetReducer: creditCancelResetReducer +}, dispatch); + +export default connect(mapStateToProps, mapDispatchToProps)(DemandGroupDetail); + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + btnstyle: { + + }, + + inputAmountText: { + ...Platform.select({ + android: { + borderBottomColor: Color.borderColor, + borderBottomWidth: 0.5, + } + }) + }, + simpleuser: { + marginLeft: responsiveWidth(2), + fontSize: 16, + color: '#3E3E3E' + }, + textbtnstyle: { + color: "white", + fontWeight: "bold", + fontSize: 18 + }, + cardcontainer1: { + justifyContent: 'space-evenly', + flex: 2, + marginRight: 3, + marginLeft: 3, + + }, + cardcontainer: { + justifyContent: 'space-evenly', + + flex: 3, + margin: 3, + } +}) \ No newline at end of file diff --git a/screens/nano-credit/DemandGroupNanoCredit.js b/screens/nano-credit/DemandGroupNanoCredit.js index 2aac4575..84fcd0b0 100644 --- a/screens/nano-credit/DemandGroupNanoCredit.js +++ b/screens/nano-credit/DemandGroupNanoCredit.js @@ -172,8 +172,12 @@ class DemandValidationGroup extends React.Component { dateFormat = moment(dateFormat).fromNow(); return ( - - this.props.navigator.navigate(route.historyItemDetails)}> + { + this.props.navigation.push(route.demandGroupDetail, { + id: item.id + }); + } + }> {item.nom} diff --git a/webservice/user/NanoCreditApi.js b/webservice/user/NanoCreditApi.js index c6af127e..83faa371 100644 --- a/webservice/user/NanoCreditApi.js +++ b/webservice/user/NanoCreditApi.js @@ -4,7 +4,7 @@ import I18n from 'react-native-i18n'; import { store } from "../../redux/store"; import { idVerificationUrl, getCreditDemand } from "../IlinkConstants"; import { fetchRetraitCashAgentIdVerificationPending, fetchRetraitCashAgentIdVerificationSuccess, fetchRetraitCashAgentIdVerificationError, fetchRetraitCashAgentIdVerificationReset } from "../../redux/actions/EnvoieAgentAction"; -import { fetchGetDemandsGroupSuccess, fetchGetDemandsGroupPending, fetchGetDemandsGroupError, fetchGetDemandsGroupReset } from "../../redux/actions/NanoCreditAction"; +import { fetchGetDemandsGroupSuccess, fetchGetDemandsGroupPending, fetchGetDemandsGroupError, fetchGetDemandsGroupReset, fetchGetUniqueDemandsGroupPending, fetchGetUniqueDemandsGroupSuccess } from "../../redux/actions/NanoCreditAction"; export const getNanoCreditDemandsAction = (id) => { @@ -41,4 +41,41 @@ export const getNanoCreditDemandsReset = () => { return dispatch => { dispatch(fetchGetDemandsGroupReset()); } +} + +export const getNanoCreditUniqueDemandsAction = (id) => { + + const auth = store.getState().authKeyReducer; + const authKey = auth !== null ? `${auth.authKey.token_type} ${auth.authKey.access_token}` : ''; + + return dispatch => { + dispatch(fetchGetUniqueDemandsGroupPending()); + + axios({ + url: `${getCreditDemand}/${id}`, + method: 'GET', + headers: { + 'Authorization': authKey, + 'X-Localization': I18n.currentLocale() + } + }) + .then(response => { + console.log(response); + dispatch(fetchGetUniqueDemandsGroupSuccess(response)); + }) + .catch(error => { + if (error.response) + dispatch(fetchGetUniqueDemandsGroupError(error.response)); + else if (error.request) + dispatch(fetchGetUniqueDemandsGroupError(error.request)) + else + dispatch(fetchGetUniqueDemandsGroupError(error.message)) + }); + } +} + +export const getNanoCreditUniqueDemandsReset = () => { + return dispatch => { + dispatch(fetchGetUniqueDemandsGroupReset()); + } } \ No newline at end of file