import * as React from 'react'; import moment from 'moment'; import { connect } from "react-redux"; import { Divider } from 'react-native-elements' import { TouchableOpacity, View, Text, Alert, ScrollView, Image, Modal, StyleSheet, } from 'react-native'; import CustomHeader from '../../components/header.js'; import Assets from '../../components/assets.manager.js'; import Theme from '../../components/theme.style.js'; import REQUEST_POST_PAY from '../../components/api/postpayapi'; import DB from '../../components/storage'; import Elements from '../../components/elements'; import CustomSafeArea from '../../components/safeArea.component'; class PayatpumpStationTransactionDetails extends React.Component { constructor(props) { super(props) } state = { loading: false, session: null, card_number: null, selectedPoints: null, selectedPaymentCard: null, claimId: null, data: [], storeName: null, showModal: false, totalPrice: 3000 } componentDidMount() { this.init(); } init = async () => { let session = await DB.session() let user_profile = await DB.profile() let selectedCard = await DB.get("pumpPaymentCards"); this.setState({ card_number: user_profile.data.card_number, session: session, claimId: this.props.route.params.response.claimId, data: this.props.route.params.response.saleItems, storeName: this.props.route.params.storeName, selectedPumpNumber: this.props.route.params.selectedPump, selectedPaymentCard: JSON.parse(selectedCard) }) } onSelectedPointsAmount = (point_amount) => { this.setState({ selectedPoints: point_amount }) } onSelectedPaymentCard = (payment_card) => { console.log(payment_card); this.setState({ selectedPaymentCard: payment_card }) } getTransactionDetails = async (claimId, fundingProviderName, userPaymentSourceId, onSuccess, onError) => { let cardNumber = this.state.selectedPaymentCard.firstSix.replace(" ", "") + this.state.selectedPaymentCard.lastFour; if(claimId == null) { Alert.alert("Error", "No transaction id exist.") return } let params = { claimId: claimId, currencyCode: "PHP", partnerTransactionId: "93931", walletRequests: [{ fundingProviderName: fundingProviderName, fundingPayload: { userPaymentSourceId: userPaymentSourceId } }, { fundingProviderName: "loyalty_points", fundingPayload: { "paymentToken": cardNumber, "points": 0 } }], userPreference: { receiptPreference: "doNotPrintReceipt", //printReceipt, doNotPrintReceipt }, loyaltyPassthroughInformation: { loyaltyInfo: [] }, fraudContext: {} } let USER_PROFILE = await DB.profile(); console.log(USER_PROFILE.data.auth_p97); REQUEST_POST_PAY('postpay', 'post', { token: USER_PROFILE.data.auth_p97, language: 'en-US' }, {}, params, async (res) => { console.log(res); if(res.success && res.response != undefined && res.response.status == "success") { REQUEST_POST_PAY('getTransactionDetails/'+res.response.transaction_id, "get", { token: USER_PROFILE.data.auth_p97, language: 'en-US' }, {}, {}, res2 => { if(res2.success && res2.response != undefined) { const data = { res: res, onSuccess: res2 } onSuccess(data); } else { onError(res2) } }, (error) => { onError(error); }) } else { onError(res) } }, (error) => { onError(error) }) } submitPayment = () => { this.setState({ showModal: false, loading: true }) this.getTransactionDetails(this.state.claimId, "p97token", this.state.selectedPaymentCard.userPaymentSourceId, onSuccess => { this.setState({ loading: false }) if(onSuccess.res.success) { let payment = { totalPayment: this.state.data[0]?.originalAmount.amount, cardPayment: this.state.data[0].originalAmount.amount, transactionId: onSuccess.res.response.transaction_id, storeName: this.state.storeName }; this.props.navigation.navigate('PayatpumpPaymentSuccess', { transactionData: payment }) } else { setTimeout(() => { Alert.alert('Error', "Failed to initiate transaction. Try again.") }, 300) } }, onError => { this.setState({ loading: false }) setTimeout(() => { Alert.alert('Error', "Failed to initiate transaction. Try again.") }, 300) }) } renderModal = () => { return ( {}} style={styles.centeredView}> {this.state.selectedPoints == null && this.state.selectedPaymentCard == null ? <> {'Please select payment method...'} this.setState({ showModal: false })} style={{ width: 80, height: 30, backgroundColor: Theme.colors.primary, alignItems: 'center', justifyContent: 'center', borderRadius: 5 }}> Ok : { this.state.data && this.state.data.length > 0 && {`Are you sure you want to pay ${"\u20B1"}${Theme.formatter.CRNCY(this.state.data[0]?.originalAmount.amount || 0.0)}?`} } { this.setState({ showModal: false }) }}> No this.submitPayment()}> Yes } ) } transactionTable = () => { const renderItem = () => { return this.state.data?.map((item, index) => { return ( {item.description} {`${item.quantity} ${item.unitMeasure}`} {"\u20B1"}{Theme.formatter.CRNCY(item.originalAmount.unitPrice)} {"\u20B1"}{Theme.formatter.CRNCY(item.originalAmount.amount)} ) }) } return ( Product Qty Price Total {renderItem()} ) } onBackConfirmation = () => { Alert.alert( '', 'Do you want to cancel this transaction?', [ { text: 'Cancel', style: 'cancel', }, { text: 'OK', onPress: () => this.props.navigation.goBack(), }, ], {cancelable: true}, ); } renderSelectedCard = () => { return ( { this.state.selectedPaymentCard ? <> this.props.navigation.navigate('PayatpumpPaymentList', { onSelectedPaymentCard: (payment_card) => this.onSelectedPaymentCard(payment_card), storeId: this.props.route?.params.storeId})} > Change {this.state.selectedPaymentCard.lastFour} : this.props.navigation.navigate('PayatpumpPaymentList', { onSelectedPaymentCard: (payment_card) => this.onSelectedPaymentCard(payment_card), storeId: this.props.route?.params.storeId})} > Add Card } {"\u20B1"} {Theme.formatter.CRNCY(this.state.data[0]?.originalAmount.amount || 0.0)} ) } render() { return ( {this.state.storeName} {'\n'}Pump No. {this.state.selectedPumpNumber} } height={75} onBackPress={() => this.onBackConfirmation()} back={true} customTitleStyle={{fontWeight: 'bold'}} customLeftContainerStyle={{justifyContent: 'flex-start'}} menu={false} navigation={this.props.navigation} /> Transaction Date {moment(new Date()).format('DD MMM YYYY hh:mm A')} {this.renderModal()} {this.transactionTable()} Payment Method Total {"\u20B1"} {Theme.formatter.CRNCY(this.state.data[0]?.originalAmount.amount || 0.0)} {this.renderSelectedCard()} Review the details before proceeding. this.setState({ showModal: true })} style={{ height: 50, backgroundColor: Theme.colors.primary, alignItems: 'center', justifyContent: 'center', borderRadius: 10, marginHorizontal: 16 }}> Pay {"\u20B1"} {Theme.formatter.CRNCY(this.state.data[0]?.originalAmount.amount || 0.0)} ); } } const mapStateToProps = (state) => { return { app_theme: state.appThemeReducer.theme } } export default connect(mapStateToProps, null)(PayatpumpStationTransactionDetails) const styles = StyleSheet.create({ centeredView: { flex: 1, justifyContent: "center", backgroundColor: '#00000090', }, modalView: { margin: 25, backgroundColor: "white", borderRadius: 15, padding: 20, alignItems: "center", shadowColor: "#000", shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.25, shadowRadius: 4, elevation: 5 }, })