| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | '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,};
 |