UNPKG

ttk-app-core

Version:
217 lines (191 loc) 9.1 kB
import { Map, List, fromJS } from 'immutable' import { reducer as MetaReducer } from 'edf-meta-engine' import config from './config' import { getInitState, blankDetail } from './data' import moment from 'moment' import utils from 'edf-utils' import extend from './extend' import { consts, common } from 'edf-constant' import {FormDecorator} from 'edf-component' import index from './index' class reducer { constructor(option) { this.metaReducer = option.metaReducer this.config = config.current this.voucherReducer = option.voucherReducer } init = (state, option) => { return this.metaReducer.init(state, getInitState()) } initLoad = (state, response) => { if (!response) { return this.metaReducer.sf(state, 'data', fromJS(getInitState().data)) } let parsed = this.parseResponse(response) state = this.metaReducer.sf(state, 'data.other.isChanged', false) state = this.load(state, parsed.form) if (parsed.other) { let other = this.metaReducer.gf(state, 'data.other').toJS() if(parsed.form.details.length){ Object.assign(other, parsed.other) for(var i=0;i<parsed.form.details.length;i++){ if(parsed.form.details[i].invoiceTypeId==4000010020) { parsed.form.details[i].isInvoice = true; } } // //查看时显示费用类型 // for(var i=0;i<parsed.form.details.length;i++){ // parsed.form.details[i].businessTypeId = [(parsed.form.details[i].businessTypeId).toString().slice(0,10),(parsed.form.details[i].businessTypeId).toString()] // } other.details = parsed.form.details state = this.metaReducer.sf(state, 'data.form.accumulativeMoney', parsed.form.taxInclusiveAmount) }else { other.details = [{ invoiceTypeId: [], businessTypeId: '' }] Object.assign(other, parsed.other) other.details[0].invoiceTypeId = parsed.form.invoiceTypeId other.details[0].businessTypeId = '' other.details[0].isSignAndRetreat = other.isSignAndRetreat other.details[0].invoiceDate = parsed.form.businessDate other.details[0].signAndRetreat = 4000100001 other.details[0].isInvoice = true let authenticatedMonth if(parsed.form.businessDate){ authenticatedMonth = parsed.form.businessDate.slice(0,7) } other.details[0].authenticatedMonth = authenticatedMonth if(other.vatTaxpayer == 2000010001 && parsed.form.invoiceTypeId == 4000010020) { other.details[0].deductible = true other.details[0].authenticated = true }else { other.details[0].deductible = false other.details[0].authenticated = false } } if(other.vatTaxpayer == 2000010001) { other.isVisible = true }else { other.isVisible = false } state = this.metaReducer.sf(state, 'data.other', fromJS(other)) } return state } load = (state, voucher) => { if (voucher) { if(voucher.details.length){ for(var i=0;i<voucher.details.length;i++){ if(voucher.details[i].invoiceTypeId==4000010020) { voucher.details[i].isInvoice = true; } } //查看时显示费用类型 for(var i=0;i<voucher.details.length;i++){ voucher.details[i].businessTypeId = [(voucher.details[i].businessTypeId).toString().slice(0,10),(voucher.details[i].businessTypeId).toString()] } state = this.metaReducer.sf(state, 'data.other.details',fromJS(voucher.details)) } if (voucher.settles.length == 0) { const settles = [{ bankAccountId: '', amount: '', bankAccountName: '' }] voucher.settles = settles state = this.metaReducer.sf(state, 'data.form.settles', fromJS(settles)) } let pageStatus = this.getPageStatus(voucher) state = this.metaReducer.sf(state, 'data.other.pageStatus', pageStatus) // if(voucher.taxInclusiveAmount){ // state = this.metaReducer.sf(state, 'data.form.accumulativeMoney', Number(voucher.taxInclusiveAmount)) // } state = this.metaReducer.sf(state, 'data.form', fromJS(voucher)) state = this.metaReducer.sf(state, 'data.form.attachmentFiles', fromJS(voucher.attachments)) return state } } getPageStatus = (voucher) => { let status = voucher.status, settleStatus = voucher.settleStatus if (status == consts.consts.VOUCHERSTATUS_Approved || status == consts.consts.SETTLESTATUS_settled) { return common.commonConst.PAGE_STATUS.READ_ONLY; } if (voucher.id) { return common.commonConst.PAGE_STATUS.EDIT } else { return common.commonConst.PAGE_STATUS.ADD } } parseResponse = (response) => { let data = { form: response.voucher, other: { invoiceTypes: response.invoiceTypes, //票据类型 businessTypes: response.businessTypes, //费用类型 taxRates: response.taxRates, //税率 isSignAndRetreat: response.isSignAndRetreat,//即征即退是否显示 beginDate: response.beginDate, // 记账日期控制 vatTaxpayer: response.vatTaxpayer, // 纳税人身份 signAndRetreat: response.signAndRetreats,//即征即退 columnSetting: response.setting,//设置 getCalcObject: response.getCalcObject,//往来客户或人员展示 getCalcObjects: response.getCalcObjects//往来客户或人员选择 } } let aa = response.setting.header.cards.find(o=> o.fieldName === "calcObject" ).isVisible return data } addRowBefore = (state, gridName, rowIndex) => { return state } delRowBefore = (state, gridName, rowIndex) => { return state } //附件上传状态 attachmentLoading = (state, attachmentLoading) => { // return this.metaReducer.sf(state, 'data.form.attachmentLoading', attachmentLoading) return this.voucherReducer.attachmentLoading(state, attachmentLoading) } //附件显示状态 attachmentVisible = (state, attachmentVisible) => { return this.metaReducer.sf(state, 'data.form.attachmentVisible', attachmentVisible) } upload = (state, file, ts, attachedNum) => { return this.voucherReducer.upload(state, file, ts, attachedNum) } moveRowToUpOrDown = (state, gridName, rowIndex, upOrDown) => { let details = this.metaReducer.gf(state, `data.form.${gridName}`).toJS() const MOVEROW_UP = this.metaReducer.gf(state, 'data.other.MOVEROW_UP') const MOVEROW_DOWN = this.metaReducer.gf(state, 'data.other.MOVEROW_DOWN') let curItem = details[rowIndex], targetItem = details[rowIndex - 1] if (upOrDown == MOVEROW_UP) { curItem = details[rowIndex] targetItem = details[rowIndex - 1] details[rowIndex - 1] = curItem details[rowIndex] = targetItem } else if (upOrDown == MOVEROW_DOWN) { curItem = details[rowIndex] targetItem = details[rowIndex + 1] details[rowIndex + 1] = curItem details[rowIndex] = targetItem } state = this.metaReducer.sf(state, `data.form.${gridName}`, fromJS(details)) return state } //默认显示行数 setrowsCount = (state, details, defaultLength) =>{ state = this.metaReducer.sf(state, 'data.form.details', fromJS(details)) state = this.metaReducer.sf(state, 'data.other.defaultLength', defaultLength) return state } } export default function creator(option) { const metaReducer = new MetaReducer(option), extendReducer = extend.reducerCreator({ ...option, metaReducer }), voucherReducer = FormDecorator.reducerCreator({ ...option, metaReducer }), o = new reducer({ ...option, metaReducer, extendReducer, voucherReducer }) return { ...metaReducer, ...extendReducer.gridReducer, ...o } }