-
- 禅道开源版没有报表自定义功能,但是接测试负责人的需求,需要在项目维度下对各个项目的需求实现率进行统计掌握,方便构建模型以供后续工作进行参考
扩展效果
涉及修改的文件&思路
字库
-
- 老规矩 按照禅道二开的拓展规则进行拓展
- module/report/ext/lang/zh-cn/report_extend.php
- report_extend.php 为扩展字库文件,名称任意。
<?php
// FIXME 增加需求实现率字段
$lang->report->projectStoryRate = $lang->projectCommon . '需求实现率汇总表';
// FIXME 依据项目状态进行统计 需求实现情况。 细分为 进行中,已关闭
$lang->report->closedProject = '已关闭' . $lang->projectCommon;
$lang->report->processProject = '进行中' . $lang->projectCommon;
// FIXME 增加报表种类超链接
$lang->reportList->project->lists[13] = $lang->projectCommon . '需求实现率汇总表|report|projectstoryrate';
// FIXME 需求实现率字段
$lang->report->storyRate = '需求实现率';
controler
-
- 同样,按照规则,扩展目录为 module/report/ext/control/projectstoryrate.php
- 此时名称不可任意命名 control 类名对应着 所渲染的视图名称,即,control 类名 是与 所渲染的前端页面名称是一致的,见下图
<?php
/**
* Create a bug.
*
* @param int $productID
* @param string $branch
* @param string $extras others params, forexample, projectID=10,moduleID=10
* @access public
* @return void
*/
include '../../control.php'; // 将 report模块下的 原生的control类引入
class myReport extends report // 采用继承拓展的方式来对control下的方法进行拓展
{
/* 进行自定义方法补充 */
/**
* Product information report.
*
* @access public
* @return void
*/
public function projectStoryRate($status = '') // 名称任意,命名规则参照原control类采用驼峰命名法
{
// 字库读取
$this->app->loadLang('project'); // 读取 project模块下的字库
$this->app->loadLang('story'); // 读取 story 模块下的字库
$this->view->title = $this->lang->report->projectStoryRate; // 字库取值渲染到页面 - title
$this->view->position[] = $this->lang->report->projectStoryRate; // 控制左侧边栏选中效果。
// 产品查询结果渲染到前端页面并用变量 products 进行保存,可直接在view文件中进行引用 查询ok
$this->view->projects = $this->report->getStoryRate($status); //$this->module名->方法名 这种调用方式是直接调用模块下的某个方法
$this->view->users = $this->loadModel('user')->getPairs('noletter|noclosed'); // getPairs 取得用户的key/value 数组
$this->view->submenu = 'project'; // 传给view 文件中的submenu字段,组成侧边导航栏
$this->view->status = $status; // 查询条件,由前端从传进来
$this->display(); // 渲染到对应视图文件 即 projectstoryrate.html.php
}
}
model & sql编写
-
- 接前面control中调用方法,接着对model层进行扩展,同样按照规则进行拓展,
- 路径 module/report/ext/model/getStoryRate.php
<?php
public function getStoryRate($status)
{
// 编写sql查询到所有的project,用于前端页面展示传值
// conditions 为project_status
// 思路 ,按照 project_status 进行筛选展示结果。
/*
* 思路梳理
* 查到所有的项目信息 ok
* 查到所有项目的需求信息 ok
* 项目信息与需求信息进行合并成为一个数组,返回给前端。not yet
*/
$projects = $this->dao->select('*')->from(TABLE_PROJECT)
->where('deleted')->eq(0)
->beginIF($status)->andWhere('status')->eq($status)->fi()
->fetchAll('id');
// 查询到项目关联的需求信息 主要是个数
/*
select
*
from
zt_story as story
left join zt_projectstory z