'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 lCol = ss.cols.find(x => { return x.field === field.field; }); if (lCol) lCol.title = field.alias || field.name; } } 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 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 stageSetting = tender.data.measure_type === measureType.tz.value ? spreadConst.stageTz : (tender.info.display.ledger.clQty ? spreadConst.stageCl : spreadConst.stageNoCl); const ledger = JSON.parse(JSON.stringify(stageSetting.ledger)); if (!tender.info.display.ledger.dgnQty) { removeFieldCols(ledger, spreadConst.filterCols.stageDgnCols); } const pos = JSON.parse(JSON.stringify(stageSetting.pos)); 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)); // 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); } if (tender.data.measure_type === measureType.gcl.value) removeFieldCols(leafXmj, ['quantity']); return [gcl, leafXmj]; }; module.exports = { getLedgerSpreadSetting, getStageSpreadSetting, getStageGatherSpreadSetting, };