'use strict'; /** * * * @author Mai * @date * @version */ const spreadConst = require('../const/spread'); const _ = require('lodash'); const measureType = require('../const/tender').measureType; const getCtxTender = async function (ctx, tid) { if (tid === ctx.tender.id) return ctx.tender; const tender = { id: tid }; tender.data = await ctx.service.tender.getDataById(tid); tender.info = await ctx.service.tenderInfo.getTenderInfo(tid); return tender; }; function removeFieldCols(setting, cols) { _.remove(setting.cols, function(c) { return cols.indexOf(c.field) > -1; }); }; function hiddenFieldCols(setting, cols) { setting.cols.forEach(x => { if (cols.indexOf(x.field) >= 0) { x.defaultVisible = false; x.visible = false; } }); }; function refreshSpreadShow(sjsRela, sjsSetting) { const sjsSettings = sjsSetting instanceof Array ? sjsSetting : [sjsSetting]; for (const field of sjsRela) { if (field.show) { for (const ss of sjsSettings) { const lColIndex = ss.cols.findIndex(x => { return x.field === field.field; }); const lCol = ss.cols[lColIndex]; if (lCol) { lCol.title = field.alias || field.name; if (field.pos) { const preColIndex = ss.cols.findIndex(x => { return x.field === field.pos; }); const preCol = ss.cols[preColIndex]; if (preCol && preColIndex !== lColIndex - 1) { ss.cols.splice(lColIndex, 1); ss.cols.splice(preColIndex + 1, 0, lCol); } } } } } else { for (const ss of sjsSetting) { removeFieldCols(ss, [field.field]); } } } } const getLedgerSpreadSetting = async function(ctx, tid, readOnly) { let tender = tid ? await getCtxTender(ctx, tid) : ctx.tender; const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id, tender.info.s_type); const prefix = tender.data.measure_type === measureType.tz.value ? 'tz' : 'gcl'; const ledger = projectSpread[`${prefix}_ledger_bills_spread`]; const pos = projectSpread[`${prefix}_ledger_pos_spread`]; if (!tender.info.display.ledger.clQty) { const billsColIndex = ledger.cols.findIndex(x => { return x.field === spreadConst.withoutClReplace.indexField; }); if (billsColIndex >= 0) { removeFieldCols(ledger, spreadConst.withoutClReplace.remove); ledger.cols.splice(billsColIndex, 0, ...spreadConst.withoutClReplace.billsCols); } const posColIndex = pos.cols.findIndex(x => { return x.field === spreadConst.withoutClReplace.indexField; }); if (posColIndex >= 0) { removeFieldCols(pos, spreadConst.withoutClReplace.remove); pos.cols.splice(posColIndex, 0, ...spreadConst.withoutClReplace.posCols); } } // const setting = tender.data.measure_type === measureType.tz.value // ? (tender.info.display.ledger.clQty ? spreadConst.withCl : spreadConst.withoutCl) // : (tender.info.display.ledger.clQty ? spreadConst.withClGcl : spreadConst.withoutClGcl); // const ledger = JSON.parse(JSON.stringify(setting.ledger)); // const pos = setting.pos ? JSON.parse(JSON.stringify(setting.pos)) : spreadConst.blank; ledger.readOnly = readOnly; pos.readOnly = readOnly; if (!tender.info.display.ledger.deal) removeFieldCols(ledger, spreadConst.filterCols.dealCols); if (!tender.info.display.ledger.dgnQty) removeFieldCols(ledger, spreadConst.filterCols.dgnCols); // const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo); // refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]); return [ledger, pos]; }; const getStageSpreadSetting = async function (ctx, tid, readOnly, funInfo) { const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender; const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id, tender.info.s_type); const prefix = tender.data.measure_type === measureType.tz.value ? 'tz' : 'gcl'; const ledger = projectSpread[`${prefix}_stage_bills_spread`]; const pos = projectSpread[`${prefix}_stage_pos_spread`]; if (!tender.info.display.ledger.dgnQty) { removeFieldCols(ledger, spreadConst.filterCols.stageDgnCols); } if (!tender.info.display.stage.realComplete) { removeFieldCols(pos, spreadConst.filterCols.realCompleteCols); } if (!ctx.session.sessionProject.gxby) { removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.gxby); removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.gxby); } if (!ctx.session.sessionProject.dagl) { removeFieldCols(ledger, spreadConst.filterCols.thirdPartyCols.dagl); removeFieldCols(pos, spreadConst.filterCols.thirdPartyCols.dagl); } if (!funInfo.minusNoValue || !tender.info.fun_rela.stage_change.minusNoValue) { hiddenFieldCols(ledger, spreadConst.filterCols.minusNoValueCols); hiddenFieldCols(pos, spreadConst.filterCols.minusNoValueCols); } if (!tender.info.display.stage.priceDiff) hiddenFieldCols(ledger, spreadConst.filterCols.priceDiffCols); ledger.readOnly = readOnly; pos.readOnly = readOnly; // const sjsRela = await ctx.service.project.getTenderSjsRela(ctx.session.sessionProject.id, ctx.tender.info.display.exMemo); // refreshSpreadShow(sjsRela.ledgerCol, [ledger, pos]); return [ledger, pos]; }; const getStageGatherSpreadSetting = async function (ctx, tid) { const tender = tid ? await getCtxTender(ctx, tid) : ctx.tender; const gcl = JSON.parse(JSON.stringify(spreadConst.stageGather.gcl)); const leafXmj = JSON.parse(JSON.stringify(spreadConst.stageGather.leafXmj)); const gatherLeafXmj = JSON.parse(JSON.stringify(spreadConst.stageGather.gatherLeafXmj)); // if (tender.data.measure_type === measureType.tz.value && !tender.info.display.ledger.deal) // removeFieldCols(gcl, spreadConst.filterCols.dealCols); if (!tender.info.display.stage.priceDiff) { removeFieldCols(gcl, spreadConst.filterCols.priceDiffCols); hiddenFieldCols(leafXmj, spreadConst.filterCols.priceDiffCols); hiddenFieldCols(gatherLeafXmj, spreadConst.filterCols.priceDiffCols); } if (tender.data.measure_type === measureType.gcl.value) { removeFieldCols(leafXmj, ['quantity']); removeFieldCols(gatherLeafXmj, ['quantity']); } return [gcl, leafXmj, gatherLeafXmj]; }; const getExtraFields = async function(ctx, tid, type = 'ledger') { let tender = tid ? await getCtxTender(ctx, tid) : ctx.tender; const projectSpread = await ctx.service.projectSpread.getProjectSpread(ctx.session.sessionProject.id, tender.info.s_type); const prefix = tender.data.measure_type === measureType.tz.value ? 'tz' : 'gcl'; const setting = projectSpread[`${prefix}_${type}_set`]; const result = []; for (const col of spreadConst.SpecSpreadColFields) { const relaSet = setting.find(x => { return x.key === col.key; }); if (relaSet && relaSet.valid) result.push(...col.fields); } return result; }; module.exports = { getLedgerSpreadSetting, getStageSpreadSetting, getStageGatherSpreadSetting, getExtraFields, };