/**
 * Created by Tony on 2017/7/14.
 * 报表数据提取class，是协助报表模板里指标字段自主提取数据的工具类
 */
let JV = require('../rpt_component/jpc_value_define');
let $JE = require('../rpt_component/jpc_rte');

class Rpt_Common{
    initialize(Projects) {
        this.Projects = Projects;
    };

    getSerialNo(fieldId, $CURRENT_RPT, $CURRENT_DATA){
        let itemSerialNoRec = $JE.F(fieldId, $CURRENT_RPT);
        if (itemSerialNoRec) {
            itemSerialNoRec[JV.PROP_AD_HOC_DATA] = [];
            for (var innerFmlIdx = 0; innerFmlIdx < $CURRENT_DATA[JV.DATA_DETAIL_DATA][0].length; innerFmlIdx++) {
                itemSerialNoRec[JV.PROP_AD_HOC_DATA][innerFmlIdx] = (innerFmlIdx + 1);
            }
            itemSerialNoRec = null;
        }
    };
};

class Rpt_Data_Extractor {
    constructor () {
        this.COMMON = new Rpt_Common();
    };

    initialize(Projects) {
        this.Projects = Projects;
        //Projects对象应该从前端传送过来，无需在后端重复查询及构建
        /* 结构：
         {
            currentPrjId: int,
            topPrj: [
                //单项工程
                {
                    subPrjName: String,
                    subPrjId: int,
                    detailPrj: [
                        //单位工程
                        {
                            detailPrjName: String,
                            subPrjId: int,
                        }
                        ...
                    ]
                }
                ...
            ]
         }
         */
    };

    prepareData($CURRENT_RPT) {
        //在报表提取数据前的准备工作，主要有：
        //1. 确认指标数据的类型（离散/主/从）
        //2. 根据类型提取数据，排序
        // 2.1. header类型
        // 2.2. 章类型
        // 2.3. detail类型
        // 2.4. 排序
    };

}