import React, {Component} from 'react'; import { View, Text, TouchableOpacity, StyleSheet, Dimensions, FlatList, PixelRatio, DeviceEventEmitter, Image, TextInput, SafeAreaView, ScrollView, } from 'react-native'; import { List, SwipeAction, Picker, Provider, WhiteSpace, WingBlank, } from '@ant-design/react-native'; import public_css from '../../source/css/public_css'; import {NumberTwoDecimal, RoundingData} from '../../source/inspect/inspect'; import buyer_invoice_css from './buyer_invoice_css'; import {SvgXml} from 'react-native-svg'; import {ToastShow} from '../../components/toast/toast'; import {plusIcon} from '../../source/icon/icon'; import {RetrieveData} from '../../data/storage'; import {RequestNetwork} from '../../data/encryption'; export default class buyer_invoice extends Component { constructor(props) { super(props); this.props.navigation.dangerouslyGetParent().setOptions({ tabBarVisible: false, }); this.state = { listData: [], productNumberTotal: 0, taxAmount: 0.0, amountTotal: 0.0, taxRateTotal: 0.0, productAmountTotal: 0.0, companyTypes: [ { label: '个人', value: '1', }, { label: '企业', value: '2', }, ], companyType: '1', invoiceTypes: [ { label: '增值税普通电子发票', value: '1', }, { label: '增值税电子专用发票', value: '2', }, ], invoiceType: '1', product_name: '', customerName: '', taxNumber: '', contactNumber: '', address: '', bank: '', bankAccount: '', payee: '', reviewer: '', drawer: '', remark: '', hideStatusText: '更多', hideStatus: false, email: '', typeBack: 'rgba(42,103,254, 1)', typeBackFont: '#ffffff', typeBackMajor: 'rgba(42,103,254, 0.07)', typeBackMajorFont: '#2A67FE', }; } render() { return ( 发票类型 { this.getInvoiceType('1'); }} style={{ alignItems: 'center', justifyContent: 'center', backgroundColor: this.state.typeBack, width: 160, height: 40, borderRadius: 39, margin: 10, }}> 增值税电子普通发票 { this.getInvoiceType('2'); }} style={{ alignItems: 'center', justifyContent: 'center', backgroundColor: this.state.typeBackMajor, width: 160, height: 40, borderRadius: 39, margin: 10, }}> 增值税电子专用发票 *收款人: { this.props.navigation.navigate('select_user', { type: 1, getUserInfo: (type, name) => { this.getUserInfo(type, name); }, }); }}> *审核人: { this.props.navigation.navigate('select_user', { type: 2, getUserInfo: (type, name) => { this.getUserInfo(type, name); }, }); }}> *开票人: { this.props.navigation.navigate('select_user', { type: 3, getUserInfo: (type, name) => { this.getUserInfo(type, name); }, }); }}> 商品信息 名称 单价 {/*数量*/} 税率(%) 税额 this.renderItem(item)} /> { this.props.navigation.navigate('product_list_info', { status: 2, }); }}> 添加商品信息 共{this.state.productNumberTotal}个产品 开票金额: {RoundingData(parseFloat(this.state.amountTotal)).replace( /(\d)(?=(\d{3})+(?:\.\d+)?$)/g, '$1,', )} 元 税额:{RoundingData(parseFloat(this.state.taxAmount))} this.submitData()}> {/**/} 生成二维码 ); } // render完后后加载 async componentDidMount(): void { let company = JSON.parse(await RetrieveData('company')); let userName = await RetrieveData('userName'); let payee = ''; let reviewer = ''; if (company.payees.length > 0) { payee = company.payees.split(',')[0]; } if (company.reviewers.length > 0) { reviewer = company.reviewers.split(',')[0]; } this.setState({ company: company, payee: payee, reviewer: reviewer, drawer: userName, }); //收到监听 this.listener = DeviceEventEmitter.addListener('buyerInvoice', (data) => { //收到监听后想做的事情 this.setList(data); }); } componentWillUnmount() { //移除监听 if (this.listener) { this.listener.remove(); } } // 获取收款人、审核人、开票人信息 getUserInfo = (type, name) => { if (type === 1) { this.setState({ payee: name, }); } if (type === 2) { this.setState({ reviewer: name, }); } if (type === 3) { this.setState({ drawer: name, }); } }; // 开票类型选择 invoiceTypeChange = (value) => { let invoiceType = ''; if (value.length > 0) { invoiceType = value[0]; } this.setState({ invoiceType: invoiceType, }); }; //提交开票信息 submitData = async () => { if (this.state.payee === '') { ToastShow(1, '收款人不能为空!'); return; } if (this.state.reviewer === '') { ToastShow(1, '审核人不能为空!'); return; } if (this.state.drawer === '') { ToastShow(1, '开票人不能为空!'); return; } if (this.state.listData <= 0) { ToastShow(1, '商品信息不能为空!'); return; } const account = await RetrieveData('account'); let token = await RetrieveData('token'); if (token) { const url = '/sys/fapiao/todo/initSave'; let response = await RequestNetwork( url, token, { cmdParam: { REQUEST_COMMON_FPKJ: { SBLX: this.state.company.defaultDeviceInfo.deviceType, //设备类型 SBBH: this.state.company.defaultDeviceInfo.taxDiscId, //设备编号 KPLX: 0, //开票类型 0-蓝字发票;1-红字发票 FPZL: this.state.invoiceType, //发票种类 1.增值税普通电子发票 2.增值税电子专用发票 3.增值税普通纸质发票 4 增值税专用纸质发票 TTLX: '', //收票客户抬头类型 1:个人 2:企业 KPF_NSRSBH: this.state.company.entTaxId, //开票方纳税人识别号 KPF_MC: this.state.company.entName, //开票方名称 KPF_DZ: this.state.company.entAddress, //开票方地址 KPF_DH: this.state.company.entPhone, //开票方电话 KPF_YHZH: this.state.company.bankAccountNumber, //开票方银行账号 KPF_KHHMC: this.state.company.bankName, //开票方开户行名称 SPF_NSRSBH: '', //收票方纳税人识别号 SPF_MC: '', //收票方名称 SPF_DH: '', //收票方电话 SPF_DZ: '', //收票方地址 SPF_YHZH: '', //收票方银行账号 SPF_KHHMC: '', //收票方开户行名称 KPR: this.state.drawer, //开票人 SKR: this.state.payee, //收款人 FHR: this.state.reviewer, //复核人 YFP_DM: '', //原发票代码 YFP_HM: '', //原发票号码 JSHJ: NumberTwoDecimal(parseFloat(this.state.amountTotal)), //价税合计 HJJE: NumberTwoDecimal(parseFloat(this.state.productAmountTotal)), //合计金额 HJSE: NumberTwoDecimal(this.state.taxRateTotal), //合计税额 BZ: '', //备注 HYLX: 0, //发票行性质 0 正常行、1 折扣行、2 被折扣行 TSPZ: '00', //特殊票种标识 “00”不是 “01”农产品销售“02”农产品收购“06”抵扣通行费“07”其它通行费“08”成品油销售说明:如果非特殊票种此节点可以没有。 COMMON_FPKJ_XMXXS: { COMMON_FPKJ_XMXX: this.state.listData, }, // 产品列表 }, }, mobile: account, reqChannel: 3, }, false, 1, ); if (response) { console.log(response); if (response.code === 0) { this.props.navigation.navigate('buyer_qrcode', { url: response.data.qrcodeUrl, amount: this.state.amountTotal, }); } else { ToastShow(1, response.msg); } } else { ToastShow(1, response.msg); } } }; //加载list列表 setList = (data) => { let numberTotal = ''; if (data.XMSL === '') { numberTotal = parseInt(this.state.productNumberTotal) + 1; } else { numberTotal = parseInt(this.state.productNumberTotal) + parseInt(data.XMSL); } let taxRateTotal = parseFloat(this.state.taxRateTotal) + parseFloat(data.SE); let taxAmount = parseFloat(this.state.taxAmount) + parseFloat(data.taxAmount); let amountTotal = parseFloat(this.state.amountTotal) + parseFloat(data.amount); let productAmountTotal = parseFloat(this.state.productAmountTotal) + parseFloat(data.XMJE); let list = this.state.listData.concat(data); this.setState({ listData: list, amountTotal: amountTotal, taxRateTotal: taxRateTotal, taxAmount: taxAmount, productNumberTotal: numberTotal, productAmountTotal: productAmountTotal, }); }; //加载items renderItem = (data) => ( {data.item.XMMC} {data.item.price} {/**/} {/* {data.item.XMSL} */} {/**/} {data.item.SL * 100} {data.item.taxAmount} ); //左滑删除 right = (data) => [ { text: '删除', onPress: () => { this.deleteData(data.item); }, style: {backgroundColor: 'red', color: 'white'}, }, ]; //删除产品信息 deleteData = (data) => { let listData = this.state.listData; let numberTotal = ''; if (data.XMSL === '') { numberTotal = parseInt(this.state.productNumberTotal) - 1; } else { numberTotal = parseInt(this.state.productNumberTotal) - parseInt(data.XMSL); } let taxRateTotal = parseFloat(this.state.taxRateTotal) - parseFloat(data.SE); let taxAmount = parseFloat(this.state.taxAmount) - parseFloat(data.taxAmount); let amountTotal = parseFloat(this.state.amountTotal) - parseFloat(data.amount); let productAmountTotal = parseFloat(this.state.productAmountTotal) - parseFloat(data.XMJE); const prevIndex = listData.findIndex((item) => item.key === data.SPBM); listData.splice(prevIndex, 1); this.setState({ listData: listData, amountTotal: amountTotal, taxRateTotal: taxRateTotal, taxAmount: taxAmount, productNumberTotal: numberTotal, productAmountTotal: productAmountTotal, }); }; //获取发票类型 getInvoiceType = (invoiceType) => { if (invoiceType === '1') { this.setState({ typeBack: 'rgba(42,103,254, 1)', typeBackMajor: 'rgba(42,103,254, 0.07)', typeBackFont: '#ffffff', typeBackMajorFont: '#2A67FE', invoiceType: invoiceType, }); } else { this.setState({ typeBack: 'rgba(42,103,254, 0.07)', typeBackMajor: 'rgba(42,103,254, 1)', typeBackFont: '#2A67FE', typeBackMajorFont: '#ffffff', invoiceType: invoiceType, }); } }; } const styles = StyleSheet.create({ buttonView: { alignItems: 'center', backgroundColor: '#ffffff', }, //通用按钮样式 button: { marginTop: 5, width: Dimensions.get('window').width * 0.8, height: 34, borderRadius: 10, backgroundColor: '#1874CD', justifyContent: 'center', alignItems: 'center', }, //通用按钮样式 buttonText: { textAlign: 'center', color: 'white', }, inputView: { padding: 5, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', display: 'flex', }, view: { flexDirection: 'row', height: 34, width: Dimensions.get('window').width * 0.8, }, //通用textInput样式 text: { lineHeight: 34, fontSize: 14, }, //通用textInput样式 lineTopBottom: { borderBottomWidth: 3 / PixelRatio.get(), borderColor: 'rgb(208,208,208)', }, textInputStyle: { marginRight: 10, marginLeft: 20, fontSize: 14, marginTop: 4, }, });