|
@@ -19,16 +19,16 @@ describe('test/app/service/report_memory.test.js', () => {
|
|
|
before(function* () {
|
|
|
const ctx = app.mockContext();
|
|
|
// 模拟登录session
|
|
|
- const postData = {
|
|
|
- account: 'fuqingqing',
|
|
|
- project: 'P0505',
|
|
|
- project_password: '123456',
|
|
|
- };
|
|
|
// const postData = {
|
|
|
- // account: '734406061@qq.com',
|
|
|
- // project: 'T201711273363',
|
|
|
- // project_password: 'mai654321',
|
|
|
+ // account: 'fuqingqing',
|
|
|
+ // project: 'P0505',
|
|
|
+ // project_password: '123456',
|
|
|
// };
|
|
|
+ const postData = {
|
|
|
+ account: '734406061@qq.com',
|
|
|
+ project: 'T201711273363',
|
|
|
+ project_password: 'mai654321',
|
|
|
+ };
|
|
|
ctx.session = {};
|
|
|
const loginResult = yield ctx.service.projectAccount.accountLogin(postData, 2);
|
|
|
assert(loginResult);
|
|
@@ -119,7 +119,6 @@ describe('test/app/service/report_memory.test.js', () => {
|
|
|
tender_id: stage.tid,
|
|
|
stage_id: stage.id,
|
|
|
};
|
|
|
- const params = {tender_id: 2072};
|
|
|
const filters = ['mem_stage_bills', 'tender_info'];
|
|
|
const data = yield ctx.service.report.getReportData(params, filters, {
|
|
|
mem_stage_bills: [
|
|
@@ -141,7 +140,6 @@ describe('test/app/service/report_memory.test.js', () => {
|
|
|
{field: 'b_code', table: 'mem_stage_bills'},
|
|
|
{field: 'is_leaf', table: 'mem_stage_bills'},
|
|
|
]);
|
|
|
- console.log(data.mem_stage_bills);
|
|
|
const chapter100 = ctx.helper._.find(data.mem_stage_bills, {code: '100'});
|
|
|
assert(chapter100.total_price === 1045756);
|
|
|
const chapter200 = ctx.helper._.find(data.mem_stage_bills, {code: '200'});
|
|
@@ -150,6 +148,120 @@ describe('test/app/service/report_memory.test.js', () => {
|
|
|
const chapter400 = ctx.helper._.find(data.mem_stage_bills, {code: '400'});
|
|
|
assert(chapter400.total_price.toFixed(0) == 1231018);
|
|
|
});
|
|
|
+ it('test gatherChapter', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+
|
|
|
+ // test12 - 第6期
|
|
|
+ const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
|
|
|
+ const params = {
|
|
|
+ tender_id: stage.tid,
|
|
|
+ stage_id: stage.id,
|
|
|
+ };
|
|
|
+ const filters = ['mem_stage_bills', 'tender_info'];
|
|
|
+ const data = yield ctx.service.report.getReportData(params, filters, {
|
|
|
+ mem_stage_bills: [
|
|
|
+ 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
|
|
|
+ 'code', 'b_code', 'name', 'unit', 'unit_price',
|
|
|
+ 'deal_qty', 'deal_tp',
|
|
|
+ 'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
|
|
|
+ 'dgn_qty1', 'dgn_qty2',
|
|
|
+ 'drawing_code', 'memo', 'node_type', 'is_tp',
|
|
|
+ 'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'gather_qty', 'gather_tp', 'postil',
|
|
|
+ 'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_gather_qty', 'pre_gather_tp',
|
|
|
+ 'end_contract_qty', 'end_contract_tp', 'end_qc_qty', 'end_qc_tp', 'end_gather_qty', 'end_gather_tp',
|
|
|
+ 'final_tp', 'final_ratio',
|
|
|
+ 'qc_bgl_code',
|
|
|
+ 'chapter',
|
|
|
+ ]
|
|
|
+ });
|
|
|
+ reportDataAnalysis.analysisObj.gatherChapter.fun(ctx, data, [
|
|
|
+ {field: 'b_code', table: 'mem_stage_bills'},
|
|
|
+ {field: 'is_leaf', table: 'mem_stage_bills'},
|
|
|
+ ]);
|
|
|
+ const chapter100 = ctx.helper._.find(data.mem_stage_bills, {code: '100'});
|
|
|
+ assert(chapter100.total_price === 1045756);
|
|
|
+ const chapter200 = ctx.helper._.find(data.mem_stage_bills, {code: '200'});
|
|
|
+ assert(chapter200.total_price.toFixed(0) == 3813369);
|
|
|
+ assert(chapter200.contract_tp == 700.5);
|
|
|
+ const chapter400 = ctx.helper._.find(data.mem_stage_bills, {code: '400'});
|
|
|
+ assert(chapter400.total_price.toFixed(0) == 1231018);
|
|
|
+ });
|
|
|
+ it('test join', function* () {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+
|
|
|
+ // test12 - 第6期
|
|
|
+ const stage = yield ctx.service.stage.getDataByCondition({tid: 12, order: 6});
|
|
|
+ const params = {
|
|
|
+ tender_id: stage.tid,
|
|
|
+ stage_id: stage.id,
|
|
|
+ };
|
|
|
+ const filters = ['mem_stage_bills', 'deal_bills'];
|
|
|
+ const data = yield ctx.service.report.getReportData(params, filters, {
|
|
|
+ mem_stage_bills: [
|
|
|
+ 'id', 'tender_id', 'ledger_id', 'ledger_pid', 'level', 'order', 'full_path', 'is_leaf',
|
|
|
+ 'code', 'b_code', 'name', 'unit', 'unit_price',
|
|
|
+ 'deal_qty', 'deal_tp',
|
|
|
+ 'sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp', 'quantity', 'total_price',
|
|
|
+ 'dgn_qty1', 'dgn_qty2',
|
|
|
+ 'drawing_code', 'memo', 'node_type', 'is_tp',
|
|
|
+ 'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'gather_qty', 'gather_tp', 'postil',
|
|
|
+ 'pre_contract_qty', 'pre_contract_tp', 'pre_qc_qty', 'pre_qc_tp', 'pre_gather_qty', 'pre_gather_tp',
|
|
|
+ 'end_contract_qty', 'end_contract_tp', 'end_qc_qty', 'end_qc_tp', 'end_gather_qty', 'end_gather_tp',
|
|
|
+ 'final_tp', 'final_ratio',
|
|
|
+ 'qc_bgl_code',
|
|
|
+ 'chapter',
|
|
|
+ ]
|
|
|
+ });
|
|
|
+ assert(data.mem_stage_bills.length === 216);
|
|
|
+ reportDataAnalysis.analysisObj.gatherGcl.fun(ctx, data, [
|
|
|
+ {field: 'b_code', table: 'mem_stage_bills'},
|
|
|
+ {field: 'name', table: 'mem_stage_bills'},
|
|
|
+ {field: 'unit', table: 'mem_stage_bills'},
|
|
|
+ {field: 'unit_price', table: 'mem_stage_bills'},
|
|
|
+ {field: 'is_leaf', table: 'mem_stage_bills'},
|
|
|
+ ]);
|
|
|
+ assert(data.mem_stage_bills.length === 43);
|
|
|
+ reportDataAnalysis.analysisObj.join.fun(ctx, data, [], {
|
|
|
+ main: 'mem_stage_bills',
|
|
|
+ sub: 'deal_bills',
|
|
|
+ keyFields: [
|
|
|
+ {main: 'b_code', sub: 'code', type: 'string'},
|
|
|
+ {main: 'name', sub: 'name',type: 'string'},
|
|
|
+ {main: 'unit', sub: 'unit',type: 'string'},
|
|
|
+ {main: 'unit_price', sub: 'unit_price',type: 'number'},
|
|
|
+ ],
|
|
|
+ importFields: [
|
|
|
+ {main: 'ex_value1', sub: 'quantity', type: 'number'},
|
|
|
+ {main: 'ex_value2', sub: 'total_price', type: 'number'}
|
|
|
+ ],
|
|
|
+ joinType: 'outer', //'outer', 'main', 'sub', 'inner'
|
|
|
+ });
|
|
|
+ assert(data.mem_stage_bills.length === 132);
|
|
|
+ reportDataAnalysis.analysisObj.sortGcl.fun(ctx, data, [
|
|
|
+ {field: 'b_code', table: 'mem_stage_bills'},
|
|
|
+ ]);
|
|
|
+ const codeIndex = ctx.helper._.map(data.mem_stage_bills, 'b_code');
|
|
|
+ const codeIndex100 = ['101-1-b', '102-2', '102-3', '102-4', '102-5', '103-1', '103-2',
|
|
|
+ '103-3', '103-3-a', '103-3-b', '103-4', '104-1', '123-1'];
|
|
|
+ const codeIndex200 = [
|
|
|
+ '203-1-a', '203-1-a', '203-1-b', '203-1-b', '203-1-d', '203-1-d', '204-1-b', '204-1-b',
|
|
|
+ '204-1-c', '204-1-d',
|
|
|
+ '204-1-g-4', '204-1-g-4', '204-1-j', '204-1-j', '205-1-o-1', '205-1-o-1', '206-2', '206-2',
|
|
|
+ '207-1-b',
|
|
|
+ '207-2-a', '207-2-a',
|
|
|
+ '207-2-b', '207-2-c', '207-3-a',
|
|
|
+ '207-4-a', '207-4-a',
|
|
|
+ '207-4-c', '207-10-a',
|
|
|
+ '208-1-a', '208-1-a', '208-3-a', '208-3-a',
|
|
|
+ '208-3-b',
|
|
|
+ '208-3-c', '208-3-c', '208-4-b-1', '208-4-b-1', '209-1-a', '209-1-a',
|
|
|
+ '209-3', '209-3-b', '215-12', '215-12-a'
|
|
|
+ ];
|
|
|
+ let codeResult = codeIndex100.concat(codeIndex200);
|
|
|
+ codeResult.forEach(function (a, i) {
|
|
|
+ assert(a === codeIndex[i]);
|
|
|
+ });
|
|
|
+ });
|
|
|
// it('test gatherChapter custom', function* () {
|
|
|
// const ctx = app.mockContext(mockData);
|
|
|
//
|
|
@@ -200,8 +312,10 @@ describe('test/app/service/report_memory.test.js', () => {
|
|
|
// assert(chapterSum.total_price === 534287);
|
|
|
// });
|
|
|
it('test analysisDefine', function() {
|
|
|
+ const ctx = app.mockContext(mockData);
|
|
|
+
|
|
|
const define = reportDataAnalysis.analysisDefine;
|
|
|
- assert(define.length === 4);
|
|
|
+ assert(define.length === 5);
|
|
|
assert(define[0].key === 'changeSort');
|
|
|
assert(define[0].name === reportDataAnalysis.analysisObj.changeSort.name);
|
|
|
assert(define[0].hint === reportDataAnalysis.analysisObj.changeSort.hint);
|
|
@@ -211,5 +325,21 @@ describe('test/app/service/report_memory.test.js', () => {
|
|
|
assert(define[2].key === 'sortGcl');
|
|
|
assert(define[2].name === reportDataAnalysis.analysisObj.sortGcl.name);
|
|
|
assert(define[2].hint === reportDataAnalysis.analysisObj.sortGcl.hint);
|
|
|
+
|
|
|
+ const x = {
|
|
|
+ count: 7,
|
|
|
+ gclSum: {
|
|
|
+ name: '第100章至700章清单合计',
|
|
|
+ order: 1,
|
|
|
+ },
|
|
|
+ custom: [
|
|
|
+ {name: '已包含在清单合计中的材料、工程设备、专业工程暂估价', order: 2},
|
|
|
+ {name: '清单合计减去材料、工程设备、专业工程暂估价(即8-9=10)', order_calc: 'o1-o2', order: 3},
|
|
|
+ {name: '计日工合计', node_type: '计日工', order: 4},
|
|
|
+ {name: '暂列金额(不含计日工总额)(即10×暂列金额比列)', node_type: '暂列金额', order: 5},
|
|
|
+ {name: '投标报价、台账价(8+11+12)=13', order_calc: 'o1+o4+o5', order: 6},
|
|
|
+ ],
|
|
|
+ };
|
|
|
+ ctx.helper.saveBufferFile(JSON.stringify(x, "", "\t"), ctx.app.baseDir + '/mem_stage_pos.json');
|
|
|
});
|
|
|
-});
|
|
|
+});
|