ttk-app-core
Version:
enterprise develop framework
1,152 lines (1,072 loc) • 73.7 kB
JavaScript
import React from 'react'
import { Map, fromJS, is } from 'immutable'
import { action as MetaAction, AppLoader } from 'edf-meta-engine'
import config from './config'
import { Menu, Tabs, Collapse, Button, Icon, LoadingMask } from 'edf-component'
import moment from 'moment'
import { number, environment, formulaCalc } from 'edf-utils'
import { personaliseRenderTableName, personaliseFormatData, personaliseShowTable, personaliseCalc, personalDelEmptyRow, personalCancatCheckList } from './personalise'
const Panel = Collapse.Panel
let formulaList = [];
const CHECK = 1; //校验类型
const CALC = 0; //计算类型
const PATHRGX = /[a-zA-Z0-9]+[_]{1}[a-zA-Z0-9_]+/g
const SIGNRGX = /[==|\!=|<=|>=|<|>|?|\|\||\&\&|\:]+/g
const GSRGX = /[^=&^\!&^<&^>&^?&^\|&\&|\:]+/g
const ROUNDLEFTSTR = '(Math.round((('
const ROUNDRIGHTSTR = ')* 100)) / 100)'
let getSumRowCheckList = (index) => {
return [{
formula: `zzsxgmkcxmqd_kcxmqdmx_${index}_yxkcxmje<0`,
message: "“允许扣除项目金额”合计应大于等于0",
targetName: `zzsxgmkcxmqd_kcxmqdmx_${index}_yxkcxmje`,
needHaveName: 'zzsxgmkcxmqd'
}, {
formula: `zzsxgmkcxmqd_kcxmqdmx_${index}_yxkcxmje!=(zzsxgmflzl_flzlForm_bqfse)+(zzsxgmflzl_flzlForm_bqfse5)`,
message: "《应税服务扣除项目清单》的合计数不等于《增值税纳税申报表(适用于增值税小规模纳税人)附列资料》第2及第10栏本期发生额的合计数",
targetName: `zzsxgmkcxmqd_kcxmqdmx_${index}_yxkcxmje,zzsxgmflzl_flzlForm_bqfse,zzsxgmflzl_flzlForm_bqfse5`,
needHaveName: 'zzsxgmkcxmqd'
}, {
formula: "(zzsjmssbmxb_zzsjmssbmxbjsxmGrid_zzsjmssbmxbjsxmGridlbVO_1_bqfse)>20000",
message: "《增值税减免税申报明细表》第2栏次的第2列本期发生额只能填写小于等于20000的数据。",
targetName: "zzsjmssbmxb_zzsjmssbmxbjsxmGrid_zzsjmssbmxbjsxmGridlbVO_1_bqfse",
needHaveName: 'zzsjmssbmxb'
}]
}
class action {
constructor(option) {
this.metaAction = option.metaAction
this.config = config.current
this.webapi = this.config.webapi
}
onInit = ({ component, injections }) => {
this.component = component
this.injections = injections
let currentOrg = this.metaAction.context.get('currentOrg'),
appKey = currentOrg ? currentOrg.appKey : '',
appId = currentOrg ? currentOrg.appId : ''
this.component.props.initData = {
SS: "52",
declareTime: "2019-01-15",
extraParams: "",
gdslx: "1",
hasReadSJInfo: true,
period: 1,
reportId: 5839712302402560,
rptGetDataVisible: undefined,
sbywbm: "XGMZZS",
selfSystemDeclare: undefined,
skssqq: "2018-10-01",
skssqz: "2018-12-31",
state: 0,
sumInvoiceVisible: undefined,
systemDate: "2019-02-25",
taxProjectCode: "10101",
taxProjectName: "增值税(适用于小规模纳税人)",
year: 2019
}
injections.reduce('init', this.component.props.initData, appKey, appId)
this.load(undefined, true)
let addEventListener = this.component.props.addEventListener
if (addEventListener) {
addEventListener('onTabFocus', :: this.onTabFocus)
}
}
onTabFocus = (nextInit) => {
this.updateState(nextInit.toJS())
}
updateState = async (nextInit) => {
let params = this.getParams()
let initData = { ...nextInit.initData }
initData.beginMonth = initData.period
initData.endMonth = initData.period
initData.yzpzzlDm = "BDA0610611"
if (initData.reportId != params.reportId) {
if (this.metaAction.gf('data.change')) {
const ret = await this.metaAction.modal('confirm', {
content: '增值税申报尚未保存,还要离开吗?'
})
if (ret) {
this.editCloseTips(false)
this.metaAction.sf('data.change', false)
this.load(initData, true)
} else {
return
}
} else {
this.load(initData, true)
}
} else {
let rpt = await this.webapi.vattaxpayer.findById(
{ id: initData.reportId }
)
if (this.metaAction.gf('data.hasReadSJInfo') != nextInit.initData.hasReadSJInfo) {
this.messageInfo(initData)
}
if (rpt) {
this.metaAction.sfs({
'data.isDeclare': !!rpt.state
})
}
}
this.metaAction.sfs({
'data.showHelp': false,
'data.params': fromJS(initData),
'data.hasReadSJInfo': nextInit.initData.hasReadSJInfo
})
}
refresh = () => {
this.load()
}
getParams = () => {
let params = this.metaAction.gf('data.params') ? this.metaAction.gf('data.params').toJS() : {}
params = {
year: params.year,
beginMonth: params.beginMonth,
endMonth: params.endMonth,
taxProjectId: params.taxProjectId,
period: params.period,
skssqq: params.skssqq,
skssqz: params.skssqz,
reportId: params.reportId,
yzpzzlDm: "BDA0610611"
}
return params
}
messageInfo = (data) => {
if (!data.hasReadSJInfo) return
//已申报且不是本系统申报
if (data.state == 1 && !data.selfSystemDeclare) {
this.metaAction.toast('info', '您在其他通道申报了报表,只能填写报表,不能申报!')
}
//已过申报期且未申报
if (moment(data.declareTime) < moment(data.systemDate)) {
this.metaAction.sf('data.overdue', true)
if (data.state != 1) {
this.metaAction.toast('info', '已过申报期,只能填写报表,不能申报!')
}
} else if (moment(data.declareTime) > moment(data.systemDate)) {
this.metaAction.sf('data.overdue', false)
}
}
load = async (data, message) => {
LoadingMask.show()
let params = data || this.getParams()
let rpt = await this.webapi.vattaxpayer.smallVatInit(
params
)
let res2 = await this.webapi.vattaxpayer.queryReport({ appraisalId: params.reportId })
LoadingMask.hide()
if (rpt && res2) {
// if (rpt.openMessage) {//未填写信息,弹出提示
// const res = await this.metaAction.modal('warning', {
// content: '请先设置网报帐号,并确认您的纳税人信息!',
// wrapClassName: 'tranreport-generate-modal-bg',
// className: 'tranreport-generate-modal',
// okText: '设置'
// })
// if (res) {
// console.log('关闭页签')
// }
// return
// }
rpt.zzssyyxgmnsrySbSbbdxxVO = personaliseFormatData(this.component.props.initData.SS, rpt.zzssyyxgmnsrySbSbbdxxVO)
//小规模将是否个体工商户放到qtxx里 公式中会用到
if (rpt && rpt.zzssyyxgmnsrySbSbbdxxVO && rpt.zzssyyxgmnsrySbSbbdxxVO.qtxx) {
rpt.zzssyyxgmnsrySbSbbdxxVO.qtxx.isSelfemployed = rpt.isSelfemployed
}
if (rpt.zzssyyxgmnsrySbSbbdxxVO.isInit) {//是否需要初始化
const res = await this.metaAction.modal('confirm', {
content: '申报表未初始化,请点击【初始化】按钮初始化申报表。',
okText: '初始化'
})
if (res) {
this.initialization(params)
} else {
rpt.zzssyyxgmnsrySbSbbdxxVO.isCanModify = true
}
}
if (message) {
this.messageInfo(data || this.component.props.initData)
}
// if(rpt.hasOwnProperty('messageInfo')) {
// this.metaAction.toast('warning', rpt.messageInfo)
// // return
// }
rpt.menuInfos = res2.reportList
this.setData(rpt, params)
}
}
//初始化接口
initialization = async (params) => {
let init = this.metaAction.gf('data.button.init')
if (!init) return false
this.metaAction.sf('data.button.init', false)
LoadingMask.show()
params = params || this.getParams()
let rpt = await this.webapi.vattaxpayer.openingZZSInit(params)
LoadingMask.hide()
this.metaAction.sf('data.button.init', true)
if (rpt) {
// if(rpt.hasOwnProperty('messageInfo')) {
// this.metaAction.toast('warning', rpt.messageInfo)
// }
this.metaAction.toast('success', '初始化成功')
rpt.zzssyyxgmnsrySbSbbdxxVO = personaliseFormatData(this.component.props.initData.SS, rpt.zzssyyxgmnsrySbSbbdxxVO)
this.setData(rpt, params)
}
}
setData = (rpt, paramsObj) => {
if (rpt.zzssyyxgmnsrySbSbbdxxVO) {
rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqq = paramsObj.skssqq
rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqz = paramsObj.skssqz
}
rpt.mapRelation.zzsxgmfjssb = {
sybh: 1,
zsxmDmMc: 2,
zspmDmMc: 3,
jsyj: 4,
sl1: 5,
ynse: 6,
ssjmxzDmMc: 7,
jmse: 8,
ybtse: 9
}
// rpt.zzssyyxgmnsrySbSbbdxxVO = personaliseCalc(
// this.component.props.initData.SS ,
// {
// gdslx: this.component.props.initData.gdslx,
// during: rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqz.split('-')[1] - rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqq.split('-')[1] + 1
// },
// rpt.zzssyyxgmnsrySbSbbdxxVO )
rpt.checkList = this.checkListReplaceNum(rpt.checkList, rpt.qtxx)
let activeMenuKey = rpt.tName,
other = this.metaAction.gf('data.other').toJS(),
treeLeft = other.treeList,
showTabReportCodes = [],
zzssyyxgmnsrySbSbbdxxVO = rpt.zzssyyxgmnsrySbSbbdxxVO,
checkRes = zzssyyxgmnsrySbSbbdxxVO ? this.checkData(zzssyyxgmnsrySbSbbdxxVO, rpt.checkList) : undefined,
checkData = [],
failCount = 0
//通过清册判断显示哪些表
if (rpt.menuInfos) {
rpt.menuInfos.map(item => {
if (item.selected === true) { // || ( item.$ && item.$.selected.$ === true )
showTabReportCodes.push(item.projectReportCode)
}
})
other.treeLeft = treeLeft.map(item => {
if (showTabReportCodes.indexOf(item.projectReportCode) < 0) {
item.isShow = false
} else {
item.isShow = true
}
if (rpt.tName == item.key) {
other.FillStatement = item.statement
}
return item
})
}
other.treeLeft = personaliseShowTable(this.component.props.initData.SS, this.component.props.initData.gdslx, other.treeLeft || other.treeList)
if (rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.slxxForm.sfzxsb == "N" && !rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.slxxForm.blrysfzjlxDm) {
failCount += 1
}
if (rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.slxxForm.sfzxsb == "N" && !rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.slxxForm.blrysfzjhm) {
failCount += 1
}
if (rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.slxxForm.sfzxsb == "N" && !rpt.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.slxxForm.slrxm) {
failCount += 1
}
//江苏省申报包括申报中状态 state == 9
if (this.component.props.initData.SS == '32') {
rpt.isDeclare = this.component.props.initData.state != 0
}
let isCanModify
if (this.component.props.initData.selfSystemDeclare === undefined) {
isCanModify = rpt.zzssyyxgmnsrySbSbbdxxVO.isCanModify
} else {
isCanModify = rpt.zzssyyxgmnsrySbSbbdxxVO.isCanModify ?
rpt.zzssyyxgmnsrySbSbbdxxVO.isCanModify :
!this.component.props.initData.selfSystemDeclare
}
let newData = {
'data.other': fromJS(other),
'data.tableData': fromJS(rpt),
'data.isDeclare': rpt.isDeclare,
'data.state': rpt.state,
'data.currentDate': rpt.currentDate,
'data.isCanModify': isCanModify,
'data.isInit': (rpt.zzssyyxgmnsrySbSbbdxxVO && rpt.zzssyyxgmnsrySbSbbdxxVO.isInit)
}
if (checkRes) {
newData['data.tableFailCounts'] = fromJS(checkRes.tableFailCounts)
}
if (rpt.zzssyyxgmnsrySbSbbdxxVO.extendCheckInfo) {
let selfFailCounts = JSON.parse(rpt.zzssyyxgmnsrySbSbbdxxVO.extendCheckInfo)
selfFailCounts['zzssyyxgmnsr'] = failCount
newData['data.selfFailCounts'] = fromJS(selfFailCounts)
}
this.metaAction.sfs(newData)
}
checkListReplaceNum = (checkList, qtxx) => {
checkList = checkList.map(item => {
if (item.message.indexOf('qtxx') >= 0) {
item.message = this.transCheckListNum(item.message, qtxx)
}
return item
})
return checkList
}
transCheckListNum = (message, qtxx, changeData) => { //
if (message.indexOf('qtxx') >= 0 && qtxx === undefined) return false
let paths = message.match(PATHRGX)
paths.map(item => {
if (isNaN(item - 0)) {
try {
let pathStr = this.transPath(item),
value
if (pathStr.indexOf('qtxx') < 0) {
// value = eval('changeData.' + pathStr)
// if( pathStr.indexOf('.hmc')>=0 ) {
// value = "'"+value+"'"
// } else {
// value = value ? value : 0
// value = value == '- -' ? 0 : value
// }
} else {
value = eval(pathStr)
if (!(value === 'false' || value === 'true' || !isNaN(parseInt(value)))) {
value = "'" + value + "'"
}
}
message = message.replace(item, value).replace('(', '').replace(')', '')
} catch (err) {
console.log(err)
}
}
})
return message
}
tabChange = (key) => {
let treeList = this.metaAction.gf('data.other.treeList').toJS()
const obj = treeList.find(o => {
if (o.key == key) {
return o
}
})
this.metaAction.sfs({
'data.other.activeTabKey': key,
'data.other.FillStatement': fromJS(obj.statement)
})
}
menuSelect = (obj) => {
this.injections.reduce('updateReduce', 'data.other.activeMenuKey', obj.key)
}
renderDeclarationList = () => {
const treeList = this.metaAction.gf('data.other.treeList') ? this.metaAction.gf('data.other.treeList').toJS() : []
return treeList.map((item) => {
if (!item.isShow) return null
return <Menu.Item key={item.key}>{item.name}</Menu.Item>
})
}
renderStatement = () => {
let FillStatement = this.metaAction.gf('data.other.FillStatement').toJS()
if (FillStatement) {
return FillStatement.map((item) => {
const header = <div>
<span>{item.name}</span>
<div className='dashed'></div>
<Icon type="xia" className='ttk-tax-app-vatTaxpayer-wraper-treeLeft-downIcon' fontFamily='edficon'></Icon>
</div>
return <Panel key={item.key} header={header} showArrow={false}>
<div>
{
this.getItems(item.contnet)
}
</div>
</Panel>
})
}
}
getItems(items) {
return (<div>
{
items.map(item => {
return <p dangerouslySetInnerHTML={{ __html: item }}></p>
})
}
</div>)
}
closeHelp = (e) => {
var panel = $(e.target).parents('.Panel')
this.helpWidth = panel[0].clientWidth
this.metaAction.sf('data.showHelp', false)
var resize = $(panel).siblings("span")
panel.css('width', '0')
resize.css('width', '0')
return
}
showHelp = (e) => {
this.metaAction.sf('data.showHelp', true)
var Pane1 = $(e.target).siblings("div").children(".Pane1")
var resize = $(e.target).siblings("div").children(".Resizer")
let width = this.helpWidth || 176
Pane1.css('width', `${width}px`)
resize.css('width', '7px')
return
}
download = async (e) => {
if (!this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO')) return //如果 zzssyyxgmnsrySbSbbdxxVO 没值不能保存
let data = this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO') ? this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO').toJS() : {}
// data.zzsjmssbmxb = this.formatData('zzsjmssbmxb', data)
// if(data.zzsxgmkcxmqd) {
// data.zzsxgmkcxmqd = this.formatData('zzsxgmkcxmqd', data)
// }
// this.metaAction.sf('data.tableData.zzssyyxgmnsrySbSbbdxxVO', fromJS(data))
let params = this.getParams()
let extendCheckInfo = JSON.stringify(this.metaAction.gf('data.selfFailCounts'))
if (e.key == 'XML') {
params.sqqs = params.skssqq
params.sqqz = params.skssqz
await this.webapi.vattaxpayer.downXMl(params)
} else if (e.key == 'PDF') {
this.handleNext()
} else if (e.key == 'PDFDOWNLOAD') {
let pdfParams = this.metaAction.gf('data.params') ? this.metaAction.gf('data.params').toJS() : {}
pdfParams = {
sbywbm: pdfParams.sbywbm,
reportId: pdfParams.reportId,
taxProjectName: pdfParams.taxProjectName,
taxProjectCode: pdfParams.taxProjectCode,
year: params.year,
startMonth: params.period,
endMonth: params.period,
fromDate: pdfParams.skssqq,
toDate: pdfParams.skssqz,
yzpzzlDm: "BDA0610611"
}
await this.webapi.vattaxpayer.generateImportPDF(pdfParams)
}
}
renderTabs = () => {
const treeList = this.metaAction.gf('data.other.treeList') ? this.metaAction.gf('data.other.treeList').toJS() : [],
tableFailCounts = this.metaAction.gf('data.tableFailCounts') ? this.metaAction.gf('data.tableFailCounts').toJS() : {},
selfFailCounts = this.metaAction.gf('data.selfFailCounts') ? this.metaAction.gf('data.selfFailCounts').toJS() : {},
menuInfos = this.metaAction.gf('data.tableData.menuInfos') ? this.metaAction.gf('data.tableData.menuInfos').toJS() : [],
treeElems = []
treeList.map((item) => {
let num,
failCount = (tableFailCounts && tableFailCounts[item.key]) ? tableFailCounts[item.key].num : 0,
selfFailCount = selfFailCounts[item.key] ? selfFailCounts[item.key] : 0
num = failCount + selfFailCount
if (!item.isShow) return false
treeElems.push(<Tabs.TabPane key={item.key} tab={
(<div><div className={num ? 'ttk-tax-app-vatTaxpayer-wraper-treeLeft-menuName1' : 'ttk-tax-app-vatTaxpayer-wraper-treeLeft-menuName'}>
{item.name}
</div>
{
(num ?
<div className='ttk-tax-app-vatTaxpayer-wraper-treeLeft-errorNum'>
<Icon type='liangweishu' fontFamily='edficon' /><span>{num}</span>
</div> : null)
}</div>)
}>
</Tabs.TabPane>)
})
return treeElems
}
returnDefaultData = () => {
return {
SS: "52",
declareTime: "2019-01-15",
extraParams: "",
gdslx: "1",
hasReadSJInfo: true,
period: 1,
reportId: 5839712302402560,
rptGetDataVisible: undefined,
sbywbm: "XGMZZS",
selfSystemDeclare: undefined,
skssqq: "2018-10-01",
skssqz: "2018-12-31",
state: 0,
sumInvoiceVisible: undefined,
systemDate: "2019-02-25",
taxProjectCode: "10101",
taxProjectName: "增值税(适用于小规模纳税人)",
year: 2019
}
}
renderTable = () => {
let data = this.metaAction.gf('data.tableData') ? this.metaAction.gf('data.tableData').toJS() : {},
activeTabKey = this.metaAction.gf('data.other.activeTabKey'),
zzssyyxgmnsrySbSbbdxxVO = data.zzssyyxgmnsrySbSbbdxxVO,
tableFailCounts = this.metaAction.gf('data.tableFailCounts') ? this.metaAction.gf('data.tableFailCounts').toJS() : undefined,
checkData = [],
isDeclare = this.metaAction.gf('data.isDeclare'),
isCanModify = this.metaAction.gf('data.isCanModify')
if (tableFailCounts && tableFailCounts[activeTabKey]) {
checkData = tableFailCounts[activeTabKey].target
}
this.component.props.initData = this.returnDefaultData()
let initData = {
SS: this.component.props.initData.SS,
jmsMap: data.jmsMap,
isDeclare: !!(isDeclare),
isSelfemployed: data.isSelfemployed,
isCanModify: isCanModify,
qtxx: (data.zzssyyxgmnsrySbSbbdxxVO && data.zzssyyxgmnsrySbSbbdxxVO.qtxx) ? data.zzssyyxgmnsrySbSbbdxxVO.qtxx : undefined,
checkData: checkData,
mapRelation: data.mapRelation ? data.mapRelation : {},
sbbhead: data.zzssyyxgmnsrySbSbbdxxVO ? data.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead : {},
[activeTabKey]: data.zzssyyxgmnsrySbSbbdxxVO ? data.zzssyyxgmnsrySbSbbdxxVO[activeTabKey] : {
sbbhead: {
skssqq: '',
skssqz: '',
nsrmc: ''
},
slxxForm: {}
}
}
if (activeTabKey == 'zzssyyxgmnsr') {
initData.zzsxgmflzl = data.zzssyyxgmnsrySbSbbdxxVO ? data.zzssyyxgmnsrySbSbbdxxVO.zzsxgmflzl : {}
}
let tableName = personaliseRenderTableName(this.component.props.initData.SS, activeTabKey)
// return <AppLoader name={`ttk-tax-app-${activeTabKey}`}
return <AppLoader name={tableName}
initData={initData}
setPortalContent={this.component.props.setPortalContent}
setVOData={
this.setVOData
}
/>
}
editCloseTips = (istip) => {
if (this.component.props.editing) {
//设置凭证当前单据状态,供单据页签关闭用 false:关闭不提醒 true 关闭提醒
this.component.props.editing(this.component.props.appName, istip)
}
}
save = () => {
// ie8showdemo
this.metaAction.toast('success', '保存成功!')
return
}
save1 = async () => {
if (!this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO')) return //如果 zzssyyxgmnsrySbSbbdxxVO 没值不能保存
let save = this.metaAction.gf('data.button.save')
if (!save) return false
this.metaAction.sf('data.button.save', false)
let data = this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO') ? this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO').toJS() : {},
currentDate = this.metaAction.gf('data.currentDate')
data.zzsjmssbmxb = this.formatData('zzsjmssbmxb', data)
if (data.zzsxgmkcxmqd) {
data.zzsxgmkcxmqd = this.formatData('zzsxgmkcxmqd', data)
}
let params = this.getParams()
let extendCheckInfo = JSON.stringify(this.metaAction.gf('data.selfFailCounts'))
if (currentDate && data && data.zzssyyxgmnsr && data.zzssyyxgmnsr.sbbhead && data.zzssyyxgmnsr.sbbhead.sbrq1) {
data.zzssyyxgmnsr.sbbhead.sbrq1 = currentDate
}
let response = await this.webapi.vattaxpayer.save({
data: {
...data, extendCheckInfo
}, taxParam: params
})
this.metaAction.sf('data.button.save', true)
if (response && response.checkFormular) {
this.editCloseTips(false)
this.metaAction.toast('success', '保存成功')
data = personaliseFormatData(this.component.props.initData.SS, data)
this.metaAction.sfs({
'data.change': false,
'data.state': 0,
'data.tableData.zzssyyxgmnsrySbSbbdxxVO': fromJS(data)
})
}
}
//增减行数据保存申报格式化,去掉空行
formatData = (tableName, data) => {
if (!data[tableName]) return
let list = data[tableName]
if (tableName == 'zzsjmssbmxb') {
let zzsjmssbmxbjsxmGridlbVO = list.zzsjmssbmxbjsxmGrid.zzsjmssbmxbjsxmGridlbVO
let zzsjmssbmxbmsxmGridlbVO = list.zzsjmssbmxbmsxmGrid.zzsjmssbmxbmsxmGridlbVO
// zzsjmssbmxbjsxmGridlbVO = zzsjmssbmxbjsxmGridlbVO.filter(item => item.ewbhxh)
zzsjmssbmxbjsxmGridlbVO = personalDelEmptyRow(this.component.props.initData.SS, zzsjmssbmxbjsxmGridlbVO, 'zzsjmssbmxbjsxmGridlbVO')
zzsjmssbmxbmsxmGridlbVO = zzsjmssbmxbmsxmGridlbVO.filter(item => item.ewbhxh)
return {
zzsjmssbmxbjsxmGrid: { zzsjmssbmxbjsxmGridlbVO },
zzsjmssbmxbmsxmGrid: { zzsjmssbmxbmsxmGridlbVO }
}
} else {
let kcxmqdmx = list.kcxmqdmx
list.kcxmqdmx = kcxmqdmx.filter(item => {
let value = Object.values(item)
if (value.filter(o => o != '' && o != 0).length != 0) {
return item
}
})
return list
}
}
getErrorText(response, data, params) {
let txt, titleTxt
if (this.component.props.initData.SS != '32') {
txt = `您的税款所属期为${params.skssqq}至${params.skssqz}的[增值税纳税申报表(使用增值税小规模纳税人)](应征凭证序号为:${response.pzxh})已申报成功。${parseFloat(response.ybtse) ? ('税款金额' + (number.format(new Number(response.ybtse).toString() - 0, 2)) + '元,请尽快缴款,以免产生滞纳金。') : '税款金额:0.00元,无需进行交款。'}`
titleTxt = `尊敬的${data.zzssyyxgmnsr.sbbhead.nsrmc}(${data.zzssyyxgmnsr.sbbhead.nsrsbh}):`
} else {
txt = `您的税款所属期为${params.skssqq}至${params.skssqz}的[增值税纳税申报表(使用增值税小规模纳税人)]已提交待审核。`
titleTxt = '尊敬的纳税人:'
}
return (<div className='ttk-tax-app-vattaxpayer-prompt'>
<div className='ttk-tax-app-vattaxpayer-prompt-title'><i class="anticon anticon-check-circle"></i><span>{this.component.props.initData.SS != '32' ? '申报' : '提交'}成功!</span></div>
<p>{titleTxt}</p>
<p> {txt}</p>
</div>)
}
handleNext = async () => {
if (!this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO')) return //如果 zzssyyxgmnsrySbSbbdxxVO 没值不能保存
let data = this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO') ? this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO').toJS() : {}
// data.zzsjmssbmxb = this.formatData('zzsjmssbmxb', data)
// if(data.zzsxgmkcxmqd) {
// data.zzsxgmkcxmqd = this.formatData('zzsxgmkcxmqd', data)
// }
// this.metaAction.sf('data.tableData.zzssyyxgmnsrySbSbbdxxVO', fromJS(data))
let extendCheckInfo = JSON.stringify(this.metaAction.gf('data.selfFailCounts'))
LoadingMask.show()
let iframeEle = this.renderIframe()
let that = this,
params = this.metaAction.gf('data.params') ? this.metaAction.gf('data.params').toJS() : {}
if (!this.isPDFPluginInstall) {
LoadingMask.hidden()
this.metaAction.toast('warning', '浏览器中未检测到PDF官方阅读器(Adobe Reader 10.0以上版本)的插件,点击确认将跳至PDF官方阅读器下载页面,安装完成后需要重新启动浏览器。')
setTimeout(function () {
window.open("http://get.adobe.com/cn/reader/download/?installer=Reader_11.0_Chinese_Simplified_for__Windows")
}, 2000)
return
}
params = {
sbywbm: params.sbywbm,
reportId: params.reportId + '',
taxProjectName: params.taxProjectName,
taxProjectCode: params.taxProjectCode,
year: params.year,
startMonth: params.period,
endMonth: params.period,
fromDate: params.skssqq,
toDate: params.skssqz,
yzpzzlDm: "BDA0610611"
}
setTimeout(function () {
that.webapi.vattaxpayer.generatePDF(params, 'pdfIframe', LoadingMask.hide)
}, 0)
const res = await this.metaAction.modal('show', {
title: 'pdf预览',
children: (<div>
{iframeEle}
</div>),
footer: null,
className: 'tax-pdf',
width: document.body.clientWidth - 7,
height: document.body.clientHeight,
closeBack: (back) => { this.closeTip = back }
})
if (res) {
console.log('res')
}
}
renderIframe = () => {
return <div id='pdfDom'>
<iframe name="pdfIframe" width={document.body.clientWidth - 31} height={document.body.clientHeight - 127} id="pdfIframe" className='pdfIframe'></iframe>
<div className='footer'>
<Button onClick={() => this.closePdf()}>关闭</Button>
<Button onClick={() => this.closePdf()} type='primary'>确定</Button>
</div>
</div>
}
closePdf = () => {
let parent = document.querySelector("#pdfDom")
let child = document.querySelector('#pdfDom iframe')
parent.removeChild(child);
this.closeTip()
}
submit = () => {
// ie8showdemo
this.metaAction.toast('success', '申报成功!')
return
}
//申报
submit1 = async (nextSubmitParams = {}) => {
let currentOrg = this.metaAction.context.get('currentOrg'),
appKey = currentOrg ? currentOrg.appKey : '',
appId = currentOrg ? currentOrg.appId : ''
let declare = this.metaAction.gf('data.button.declare')
if (!declare) return false
// 测试(test)、预生产erpdemou环境禁止申报和作废
if (
(
(!this.metaAction.context || !this.metaAction.context.get('currentUser') || this.metaAction.context.get('currentUser').id != '5476984054474752')
&& appId != '105'
&& (location.href.toLowerCase().indexOf('test.') > -1 || location.href.toLowerCase().indexOf('erpdemo.') > -1)
)
) {
this.metaAction.toast('error', '测试和预生产环境连接开放平台生产环境,请不要使用申报和作废操作!')
return
}
if (!this.metaAction.gf('data.tableData')) return
let data = this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO').toJS()
let params = this.getParams(),
tableFailCounts = this.metaAction.gf('data.tableFailCounts') ? this.metaAction.gf('data.tableFailCounts').toJS() : {},
selfFailCounts = this.metaAction.gf('data.selfFailCounts') ? this.metaAction.gf('data.selfFailCounts').toJS() : {},
isPass = true
for (let key in tableFailCounts) {
if ((tableFailCounts[key] && tableFailCounts[key].num)) {
isPass = false
}
}
for (let key in selfFailCounts) {
if (selfFailCounts[key]) {
isPass = false
}
}
if (!isPass) {
return this.metaAction.toast('warning', '小规模增值税申报表校验有问题,请修正后再申报!')
}
let { sfyczb, qzSB } = nextSubmitParams
data.zzsjmssbmxb = this.formatData('zzsjmssbmxb', data)
if (data.zzsxgmkcxmqd) {
data.zzsxgmkcxmqd = this.formatData('zzsxgmkcxmqd', data)
}
this.metaAction.sf('data.button.declare', false)
LoadingMask.show({ content: '已提交申报数据,等待返回结果。请稍后点击‘刷新’,可在回执中查看申报结果!' })
let response = await this.webapi.vattaxpayer.submit({
data, taxParam: params, sfyczb, qzSB
})
LoadingMask.hide()
this.metaAction.sf('data.button.declare', true)
if (response) {
if (!response.success) {//失败,两种情况,校验信息不通过,第二种直接失败
if (response.formularList) {// 校验未通过
this.openWarning(data, params, response)
} else {//校验通过了失败
if (response.taxCompareResult &&
response.taxCompareResult.SBZzsSaveReturnVO &&
response.taxCompareResult.SBZzsSaveReturnVO.sBSbbdBdjgVO &&
response.taxCompareResult.SBZzsSaveReturnVO.sBSbbdBdjgVO.sfcbs != 'Y') {
let res11 = await this.metaAction.modal('show', {
title: '提示',
children: (<div className='ttk-tax-app-vattaxpayer-prompt'>
<p>尊敬的{data.zzssyyxgmnsr.sbbhead.nsrmc}({data.zzssyyxgmnsr.sbbhead.nsrsbh}):</p>
<p>您尚未抄报税,不能进行申报!</p>
</div>),
wrapClassName: 'tax-hz-wrap hide-jkbtn',
cancelText: '终止',
className: 'tax-hz',
width: 450,
})
return
} else if (response.taxCompareResult &&
response.taxCompareResult.SBZzsSaveReturnVO &&
response.taxCompareResult.SBZzsSaveReturnVO.bdjgbz == 'N') {
response.taxCompareResult.textInfo = params
response.taxCompareResult.textInfo.nsrmc = data.zzssyyxgmnsr.sbbhead.nsrmc
response.taxCompareResult.textInfo.nsrsbh = data.zzssyyxgmnsr.sbbhead.nsrsbh
response.taxCompareResult.textInfo.tableName = '增值税纳税申报表(使用增值税小规模纳税人)'
response.taxCompareResult.textInfo.SS = this.metaAction.gf('data.params.SS')
let res22 = await this.metaAction.modal('show', {
title: '提示',
children: this.metaAction.loadApp('ttk-tax-app-comparison', {
store: this.component.props.store,
initData: {
data: response.taxCompareResult,
cb: this.submit,
setPortalContent: this.component.props.setPortalContent,
}
}),
wrapClassName: 'tax-hz-wrap hide-cancelbtn yjbd-box',
okText: '修改数据',
className: 'tax-hz',
width: 830,
height: 466
})
}
}
} else {//申报成功
this.editCloseTips(false)
this.metaAction.sfs({
'data.isDeclare': (response.state != 0),
'data.state': 1,
'data.change': false,
// 'data.tableData.zzssyyxgmnsrySbSbbdxxVO': fromJS(data)
})
// if( response.sflsb && this.component.props.initData.SS == '11' ) {//如果是0申报
// let zeroRes = await this.metaAction.modal('confirm', {
// content: '您当期的增值税、消费税为0,请确定您的附加税费应纳税额是否也为0,点击‘是’,您的附加税费‘免于零申报’;点击‘否’,对报表进行修改。',
// okText: '是',
// cancelText: '否',
// })
// if(zeroRes) {
// let zeroSubmitRes = await this.webapi.vattaxpayer.fjsAutoLsb( params )
// if(zeroSubmitRes) {
// this.metaAction.toast('success', '附加税申报成功')
// }
// return
// }else {
// return
// }
// } else {
// this.openSuccess(data, params, response)
// }
this.openSuccess(data, params, response)
}
}
}
openWarning = async (data, params, response) => {
const res = await this.metaAction.modal('show', {
title: '提示',
children: (<div className='ttk-tax-app-vattaxpayer-prompt'>
<div className='ttk-tax-app-vattaxpayer-prompt-title'><i class="anticon anticon-exclamation-circle"></i><span>申报失败!</span></div>
<p>尊敬的{data.zzssyyxgmnsr.sbbhead.nsrmc}({data.zzssyyxgmnsr.sbbhead.nsrsbh}):</p>
<p> 您的税款所属期为{params.skssqq}至{params.skssqz}的[增值税纳税申报表(使用增值税小规模纳税人)]已申报失败,失败原因:</p>
{response.formularList.map(item => <p>{item.message}</p>)}
</div>),
wrapClassName: 'tax-hz-wrap hide-jkbtn',
cancelText: '关闭',
className: 'tax-hz',
width: 450,
})
if (res) {
console.log('关闭页签')
}
return
}
openSuccess = async (data, params, response) => {
const res = await this.metaAction.modal('show', {
title: '提示',
children: this.getErrorText(response, data, params),
width: 450,
wrapClassName: (response.ybtse - 0 && this.component.props.initData.SS != '32') ? 'tax-hz-wrap' : 'tax-hz-wrap hide-jkbtn',
className: 'tax-hz',
okText: '缴款',
cancelText: '关闭'
})
if (res) {
const ret = await this.metaAction.modal('show', {
title: '税款缴纳',
okText: '立即缴款',
width: 1200,
footer: '',
closeModal: this.close,
closeBack: (back) => { this.closeTip = back },
style: { top: 40 },
bodyStyle: { padding: '24px 12px', height: 490 },
wrapClassName: 'batchchargeback-model',
children: this.metaAction.loadApp('ttk-taxapply-app-batchchargeback', {
store: this.component.props.store
}),
})
} else {
if (response.sflsb && this.component.props.initData.SS == '11') {//如果是0申报
let zeroRes = await this.metaAction.modal('confirm', {
content: '您当期的增值税、消费税为0,请确定您的附加税费应纳税额是否也为0,点击‘是’,您的附加税费‘免于零申报’;点击‘否’,对报表进行修改。',
okText: '是',
cancelText: '否',
})
if (zeroRes) {
let zeroSubmitRes = await this.webapi.vattaxpayer.fjsAutoLsb(params)
if (zeroSubmitRes) {
this.metaAction.toast('success', '附加税申报成功')
}
return
} else {
return
}
}
}
return
}
close = (ret) => {
this.closeTip()
this.metaAction.sf('data.state', ret.state)
}
//新的start
setVOData = (changeData, type) => {
let data = this.metaAction.gf('data.tableData') ? this.metaAction.gf('data.tableData').toJS() : {},
activeTabKey = this.metaAction.gf('data.other.activeTabKey'),
zzssyyxgmnsrySbSbbdxxVO = data.zzssyyxgmnsrySbSbbdxxVO ? data.zzssyyxgmnsrySbSbbdxxVO : {},
oldVO = Object.assign({}, zzssyyxgmnsrySbSbbdxxVO),
tableFailCounts = this.metaAction.gf('data.tableFailCounts') ? this.metaAction.gf('data.tableFailCounts').toJS() : {},
selfFailCounts = this.metaAction.gf('data.selfFailCounts') ? this.metaAction.gf('data.selfFailCounts').toJS() : {},
tFormulaList = data.tFormulaList,
changeTable = changeData.changeTable,
changeItems = changeData.changeItems,
failCount = changeData.failCount,
willCalcFormula = [],
res = zzssyyxgmnsrySbSbbdxxVO,
checkRes
oldVO = this.metaAction.gf('data.tableData.zzssyyxgmnsrySbSbbdxxVO').toJS()
if (changeItems.length != 0) {
this.metaAction.sf('data.change', true)
this.editCloseTips(true)
}
zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr = changeData.changeTable
let res2 = formulaCalc.setDataByFormula({
type: 0,
data: zzssyyxgmnsrySbSbbdxxVO,
changeData: {
changeItems: changeData.changeItems,
changeTable: changeData.changeTable,//修改的表的数据
changeTableName: 'zzssyyybnsrzb'//修改的表名
},
formulas: data.tFormulaList,
checks: this.metaAction.gf('data.tableData.checkList') ? this.metaAction.gf('data.tableData.checkList').toJS() : [],
notFormulasCheckFailCounts: {
}, //非公式校验的错误数和错误的具体数据 必填项
formulasCheckFailCounts: {
}
})
this.metaAction.sfs({
'data.tableData.zzssyyxgmnsrySbSbbdxxVO': fromJS(res2.data),
'data.tableFailCounts': fromJS(res2 ? res2.formulasCheckFailCounts : {}),
'data.selfFailCounts': fromJS(res2.notFormulasCheckFailCounts)
})
if (!res2.formulasCheckFailCounts) {
return {
changeData: res2.data[activeTabKey],
checkData: []
}
} else {
return {
changeData: res2.data[activeTabKey],
checkData: res2.formulasCheckFailCounts[activeTabKey] ? res2.formulasCheckFailCounts[activeTabKey].target : []
}
}
// if (type) {//如果type为 true 是修改了不需要计算和校验,只需要更新的项。例如修改了文字,下拉项等
// if (failCount) {
// selfFailCounts[activeTabKey] = failCount
// } else {
// selfFailCounts[activeTabKey] = 0
// }
// zzssyyxgmnsrySbSbbdxxVO[activeTabKey] = changeTable
// // if (tableFailCounts[activeTabKey]) {
// // tableFailCounts[activeTabKey].num = failCount ? failCount : 0
// // } else {
// // tableFailCounts[activeTabKey] = {
// // num: (failCount ? failCount : 0)
// // }
// // }
// this.metaAction.sfs({
// 'data.tableData.zzssyyxgmnsrySbSbbdxxVO': fromJS(zzssyyxgmnsrySbSbbdxxVO),
// 'data.tableFailCounts': fromJS(tableFailCounts),
// 'data.selfFailCounts': fromJS(selfFailCounts)
// })
// return
// }
// zzssyyxgmnsrySbSbbdxxVO[activeTabKey] = changeTable //把子组件传来的新值放进父组件的整体数据中
// if (changeItems && changeItems.length == 1) {
// if( changeItems[0].path.indexOf('zzssyyxgmnsr_zzsxgmGrid_zzsxgmGridlb_2')>=0 || changeItems[0].path.indexOf('zzssyyxgmnsr_zzsxgmGrid_zzsxgmGridlb_3')>=0 ) {
// willCalcFormula = []
// } else {
// willCalcFormula = this.getAboutFormulas(changeItems[0].path, tFormulaList, willCalcFormula)
// }
// //如果有涉及的公式
// if (willCalcFormula && willCalcFormula.length) {
// let selfCals = this.isSelfCals(willCalcFormula[0].formula, changeItems[0])
// res = this.calculationData(changeItems[0].newValue, changeItems[0].oldValue, changeItems[0].path, zzssyyxgmnsrySbSbbdxxVO, oldVO, willCalcFormula[0], tFormulaList, willCalcFormula, selfCals)
// zzssyyxgmnsrySbSbbdxxVO = res
// }
// zzssyyxgmnsrySbSbbdxxVO = personaliseCalc(
// this.component.props.initData.SS ,
// {
// gdslx: this.component.props.initData.gdslx,
// during: data.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqz.split('-')[1] - data.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqq.split('-')[1] + 1
// },
// zzssyyxgmnsrySbSbbdxxVO )
// checkRes = this.checkData(zzssyyxgmnsrySbSbbdxxVO)
// } else if (changeItems && changeItems.length > 1) {
// changeItems.map(item => {
// willCalcFormula = this.getAboutFormulas(changeItems[0].path, tFormulaList, willCalcFormula)
// //如果有涉及的公式
// if (willCalcFormula && willCalcFormula.length) {
// let selfCals = this.isSelfCals(willCalcFormula[0].formula, item)
// res = this.calculationData(item.newValue, item.oldValue, item.path, zzssyyxgmnsrySbSbbdxxVO, oldVO, willCalcFormula[0], tFormulaList, willCalcFormula, selfCals)
// zzssyyxgmnsrySbSbbdxxVO = res
// }
// })
// zzssyyxgmnsrySbSbbdxxVO = personaliseCalc(
// this.component.props.initData.SS ,
// {
// gdslx: this.component.props.initData.gdslx,
// during: data.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqz.split('-')[1] - data.zzssyyxgmnsrySbSbbdxxVO.zzssyyxgmnsr.sbbhead.skssqq.split('-')[1] + 1
// },
// zzssyyxgmnsrySbSbbdxxVO )
// checkRes = this.checkData(zzssyyxgmnsrySbSbbdxxVO)
// } else {
// res = zzssyyxgmnsrySbSbbdxxVO
// checkRes = this.checkData(zzssyyxgmnsrySbSbbdxxVO)
// }
// if (failCount) {
// selfFailCounts[activeTabKey] = failCount
// } else {
// selfFailCounts[activeTabKey] = 0
// }
// this.metaAction.sfs({
// 'data.tableData.zzssyyxgmnsrySbSbbdxxVO': fromJS(zzssyyxgmnsrySbSbbdxxVO),
// 'data.tableFailCounts': fromJS(checkRes ? checkRes.tableFailCounts : {}),
// 'data.selfFailCounts': fromJS(selfFailCounts)
// })
// if (!checkRes) {
// return {
// changeData: res[activeTabKey],
// checkData: []
// }
// } else {
// return {
// changeData: res[activeTabKey],
// checkData: checkRes.tableFailCounts[activeTabKey] ? checkRes.tableFailCounts[activeTabKey].target : []
// }
// }
}
//取出相关公式 getAboutFormulas
getAboutFormulas = (path, tFormulaList, willCalcFormula) => {
if (!willCalcFormula || !willCalcFormula.length) {
willCalcFormula = []
}
let formulaStrArr = willCalcFormula.map(item => item.formula)
tFormulaList.map(item => {
if (item.split('=').length > 1 && item.split('=')[1].match(PATHRGX).indexOf(path) != -1) {
if (formulaStrArr.indexOf(item) < 0) {
// console.log( item)
formulaStrArr.push(item)
willCalcFormula.push({
formula: item,
path
})
}
}
})
return willCalcFormula
}
//本年累计类型的特殊计算 减去原来的值加上新值
isSelfCals(formula, changeItem) {
if (!changeItem) return
let newValue = changeItem.newValue,
oldValue = changeItem.oldValue,
path = changeItem.path
if (oldValue === undefined) {
oldValue = '0.00'
}
if (formula.split('=')[1].indexOf(formula.split('=')[0]) > -1) {
let str = formula.split(path)[0].substr(-1),
value
if (str == '-') {
value = '(' + (number.clearThousPos(newValue) + number.clearThousPos(oldValue)) + ')'
} else if (str == '*') {
value = '(' + (number.clearThousPos(newValue) / number.clearThousPos(oldValue)) + ')'
} else if (str == '/') {
value = '(' + number.clearThousPos(newValue) * number.clearThousPos(oldValue) + ')'
} else {
value = '(' + (number.clearThousPos(newValue) - number.clearThousPos(oldValue)) + ')'
}
return