diff --git a/module/program/tao.php b/module/program/tao.php index 5430af321e..6ede7f973d 100644 --- a/module/program/tao.php +++ b/module/program/tao.php @@ -30,6 +30,25 @@ class programTao extends programModel ->fetchAll('id'); } + /** + * 获取项目集下的产品列表信息。 + * Get product list information under the program. + * + * @param array $programIdList + * @access protected + * @return array + */ + protected function getProductByProgram(array $programIdList = array()): array + { + return $this->dao->select('*')->from(TABLE_PRODUCT) + ->where('deleted')->eq(0) + ->andWhere('status')->ne('closed') + ->beginIF(!empty($programIdList))->andWhere('program')->in($programIdList)->fi() + ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi() + ->orderBy('order_asc') + ->fetchGroup('program'); + } + /** *获取所有根项目集基本数据。 * Get base data of all root programs. diff --git a/module/program/test/tao/getproductbyprogram.php b/module/program/test/tao/getproductbyprogram.php new file mode 100644 index 0000000000..4f1e0cabd2 --- /dev/null +++ b/module/program/test/tao/getproductbyprogram.php @@ -0,0 +1,24 @@ +#!/usr/bin/env php +gen(5); +su('admin'); + +zdTable('product')->config('product')->gen(30); + +/** + +title=测试 programModel::getProductByProgram(); +timeout=0 +cid=1 + +*/ + +$programIdList = array(array(), array(1, 2, 3)); + +global $tester; +$tester->loadModel('program'); +r(current($tester->program->getProductByProgram($programIdList[0]))) && p('0:program,name') && e('1,产品1'); // 获取系统内所有项目集下的产品信息 +r(current($tester->program->getProductByProgram($programIdList[1]))) && p('0:program,name') && e('1,产品1'); // 获取系统内所有项目集1、项目集2、项目集3下的产品信息 +r(count($tester->program->getProductByProgram($programIdList[0]))) && p() && e('10'); // 获取系统内所有项目集下的产品数量 +r(count($tester->program->getProductByProgram($programIdList[1]))) && p() && e('3'); // 获取系统内所有项目集1、项目集2、项目集3下的产品数量 diff --git a/module/program/test/yaml/product.yaml b/module/program/test/yaml/product.yaml new file mode 100644 index 0000000000..41bb9c2a6d --- /dev/null +++ b/module/program/test/yaml/product.yaml @@ -0,0 +1,18 @@ +title: product data +author: zhouxin +version: 1.0.0 + +fields: + - field: id + range: 1-30 + - field: name + range: 1-30 + prefix: '产品' + - field: program + range: 1-10 + - field: line + range: 1{10},2{10},3{10} + - field: status + range: 'normal{20},closed{10}' + - field: PO + range: 'admin{10},user1{10},user2{10}' diff --git a/module/program/test/yaml/program.yaml b/module/program/test/yaml/program.yaml new file mode 100644 index 0000000000..48d3b1c026 --- /dev/null +++ b/module/program/test/yaml/program.yaml @@ -0,0 +1,69 @@ +title: program. +desc: program data. +author: Shujie Tian +version: "1.0" +fields: + - field: id + range: 1-10,11,60,61,100,101-700 + - field: name + note: "名称" + fields: + - field: name1 + range: 项目集{10},敏捷项目,瀑布项目{2},看板项目,迭代{5},阶段{18},看板{5} + - field: name2 + range: 1-10000 + - field: project + range: 0{14},11{5},60{12},61{6},100{5} + - field: model + range: "[]{10},scrum,waterfall{2},kanban,[]{28}" + - field: attribute + range: "[]{19},request,design,dev,qa,release,review,request,design,dev,qa,release,review,request,design,dev,qa,release,review,[]{5}" + - field: type + range: program{10},project{4},sprint{5},stage{18},kanban{5} + - field: budget + range: 800000-1:100 + - field: status + range: doing{2},wait{8},doing{4},wait{2},doing{2},suspended{2},closed{2} + - field: auth + range: "extend" + - field: desc + range: 1-10000 + prefix: "迭代描述" + - field: begin + range: "(-2M)-(+M):1D" + type: timestamp + format: "YY/MM/DD" + postfix: "\t" + - field: end + range: "(+1w)-(+2M):1D" + type: timestamp + format: "YY/MM/DD" + postfix: "\t" + - field: grade + range: 1,2,1{12},1{5},1{6},2{6},1{6},1{5} + - field: parent + range: 0,1,0{8},1,2,0{2},11{5},60{6},106-111,61{6},100{5} + - field: path + fields: + - field: path1 + prefix: "," + range: 1,1,3-10,1,2,61,100,11{5},60{12},61{6},100{5} + - field: path2 + prefix: "," + range: "[],2,[]{8},11,60,[]{2},101-105,106-111,106-111,118-700" + postfix: "," + - field: path3 + range: "[]{25},112-117,[]{50}" + postfix: "," + - field: acl + range: open{10},program{2},open{2},private{4} + - field: multiple + range: 1{14},1{3},0{2},1{18},1{5} + - field: whitelist + prefix: "," + range: "admin,user1,user2,user3,[]{10}" + postfix: "," + - field: hasProduct + range: 1{10},0,1,0,1{100} + - field: deleted + range: 0{40},1