Merge branch 'master' of http://gitlab.zcorp.cc/easycorp/zentaopms
This commit is contained in:
@@ -188,11 +188,10 @@ define('TABLE_REPOBRANCH', '`' . $config->db->prefix . 'repobranch`');
|
||||
if(!defined('TABLE_LANG')) define('TABLE_LANG', '`' . $config->db->prefix . 'lang`');
|
||||
if(!defined('TABLE_DESIGN')) define('TABLE_DESIGN', '`' . $config->db->prefix . 'design`');
|
||||
if(!defined('TABLE_DESIGNSPEC')) define('TABLE_DESIGNSPEC', '`' . $config->db->prefix . 'designspec`');
|
||||
if(!defined('TABLE_ISSUE')) define('TABLE_ISSUE', '`' . $config->db->prefix . 'issue`');
|
||||
if(!defined('TABLE_RISK')) define('TABLE_RISK', '`' . $config->db->prefix . 'risk`');
|
||||
if(!defined('TABLE_PROJECTSPEC')) define('TABLE_PROJECTSPEC', '`' . $config->db->prefix . 'projectspec`');
|
||||
if(!defined('TABLE_WORKESTIMATION')) define('TABLE_WORKESTIMATION', '`' . $config->db->prefix . 'workestimation`');
|
||||
if(!defined('TABLE_DURATIONESTIMATION')) define('TABLE_DURATIONESTIMATION', '`' . $config->db->prefix . 'durationestimation`');
|
||||
if(!defined('TABLE_BUDGET')) define('TABLE_BUDGET', '`' . $config->db->prefix . 'budget`');
|
||||
|
||||
if(!defined('TABLE_SEARCHINDEX')) define('TABLE_SEARCHINDEX', $config->db->prefix . 'searchindex');
|
||||
if(!defined('TABLE_SEARCHDICT')) define('TABLE_SEARCHDICT', $config->db->prefix . 'searchdict');
|
||||
@@ -222,8 +221,6 @@ $config->objectTables['module'] = TABLE_MODULE;
|
||||
$config->objectTables['caselib'] = TABLE_TESTSUITE;
|
||||
$config->objectTables['entry'] = TABLE_ENTRY;
|
||||
$config->objectTables['webhook'] = TABLE_WEBHOOK;
|
||||
$config->objectTables['risk'] = TABLE_RISK;
|
||||
$config->objectTables['issue'] = TABLE_ISSUE;
|
||||
$config->objectTables['design'] = TABLE_DESIGN;
|
||||
$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER;
|
||||
$config->objectTables['job'] = TABLE_JOB;
|
||||
|
||||
@@ -129,24 +129,6 @@ CREATE TABLE IF NOT EXISTS `zt_projectspec` (
|
||||
UNIQUE KEY `project` (`project`,`version`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_durationestimation`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_durationestimation` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`PRJ` mediumint(8) unsigned NOT NULL,
|
||||
`stage` mediumint(9) NOT NULL,
|
||||
`workload` varchar(255) NOT NULL,
|
||||
`worktimeRate` varchar(255) NOT NULL,
|
||||
`people` varchar(255) NOT NULL,
|
||||
`startDate` date NOT NULL,
|
||||
`endDate` date NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_workestimation`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_workestimation` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
|
||||
@@ -423,23 +423,6 @@ CREATE TABLE IF NOT EXISTS `zt_doclib` (
|
||||
KEY `product` (`product`),
|
||||
KEY `project` (`project`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_durationestimation`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_durationestimation` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`PRJ` mediumint(8) unsigned NOT NULL,
|
||||
`stage` mediumint(9) NOT NULL,
|
||||
`workload` varchar(255) NOT NULL,
|
||||
`worktimeRate` varchar(255) NOT NULL,
|
||||
`people` varchar(255) NOT NULL,
|
||||
`startDate` date NOT NULL,
|
||||
`endDate` date NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
-- DROP TABLE IF EXISTS `zt_effort`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_effort` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
|
||||
@@ -1245,7 +1245,7 @@ class block extends control
|
||||
*/
|
||||
public function printWaterfallEstimateBlock()
|
||||
{
|
||||
$this->app->loadLang('durationestimation');
|
||||
if(isset($this->config->maxVersion)) $this->app->loadLang('durationestimation');
|
||||
$programID = $this->session->PRJ;
|
||||
$members = $this->loadModel('project')->getTeamMemberPairs($programID);
|
||||
$budget = $this->loadModel('workestimation')->getBudget($programID);
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<style> .block-waterfallestimate table{margin-bottom: 15px} </style>
|
||||
<table class='table table-data'>
|
||||
<?php if(isset($config->maxVersion)):?>
|
||||
<tr>
|
||||
<th class='w-100px'><?php echo $lang->durationestimation->people;?></th>
|
||||
<td><?php echo $people ? $people : 0;?></td>
|
||||
<th class='w-80px'><?php echo $lang->durationestimation->members;?></th>
|
||||
<td><?php echo $members;?></td>
|
||||
</tr>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->workestimation->duration;?></th>
|
||||
<td><?php echo zget($budget, 'duration', 0);?></td>
|
||||
|
||||
@@ -683,8 +683,6 @@ $lang->navGroup->compile = 'project';
|
||||
$lang->navGroup->report = 'project';
|
||||
$lang->navGroup->measrecord = 'project';
|
||||
|
||||
$lang->navGroup->durationestimation = 'project';
|
||||
|
||||
$lang->navGroup->sqlbuilder = 'system';
|
||||
$lang->navGroup->auditcl = 'system';
|
||||
$lang->navGroup->cmcl = 'system';
|
||||
@@ -919,9 +917,14 @@ $lang->menu->scrum->qa = 'QA|qa|index';
|
||||
$lang->menu->scrum->ci = 'Code|repo|browse';
|
||||
$lang->menu->scrum->projectbuild = array('link' => 'Build|projectbuild|browse|project={PROJECT}');
|
||||
$lang->menu->scrum->projectrelease = array('link' => 'Release|projectrelease|browse');
|
||||
$lang->menu->scrum->other = array('link' => 'Other|project|other', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'issue,risk,stakeholder');
|
||||
$lang->menu->scrum->projectsetting = array('link' => 'Setting|program|prjview|project={PROJECT}', 'alias' => 'prjedit,prjmanageproducts,prjgroup,prjmanagemembers,prjmanageview,prjmanagepriv,prjwhitelist,prjaddwhitelist');
|
||||
|
||||
$lang->scrum = new stdclass();
|
||||
$lang->scrum->subMenu = new stdclass();
|
||||
$lang->scrum->subMenu->other = new stdclass();
|
||||
$lang->scrum->subMenu->other->stakeholder = array('link' => 'Stakeholder|stakeholder|browse|', 'subModule' => 'stakeholder');
|
||||
|
||||
$lang->scrum->setMenu = new stdclass();
|
||||
$lang->scrum->setMenu->view = array('link' => 'View|program|prjview|project={PROJECT}');
|
||||
$lang->scrum->setMenu->products = array('link' => 'Product|program|PRJManageProducts|project={PROJECT}', 'alias' => 'prjmanageproducts');
|
||||
@@ -940,7 +943,6 @@ $lang->cm = new stdclass();
|
||||
$lang->nc = new stdclass();
|
||||
$lang->pssp = new stdclass();
|
||||
$lang->stakeholder = new stdclass();
|
||||
$lang->durationestimation = new stdclass();
|
||||
$lang->projectstory = new stdclass();
|
||||
|
||||
$lang->workestimation->menu = new stdclass();
|
||||
@@ -953,13 +955,9 @@ $lang->cm->menu = new stdclass();
|
||||
$lang->pssp->menu = new stdclass();
|
||||
$lang->stakeholder->menu = new stdclass();
|
||||
$lang->waterfallproduct->menu = new stdclass();
|
||||
$lang->durationestimation->menu = new stdclass();
|
||||
$lang->projectstory->menu = new stdclass();
|
||||
|
||||
$lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|index|project={PROJECT}';
|
||||
$lang->workestimation->menu->duration = array('link' => 'Duration Estimation|durationestimation|index|project={PROJECT}', 'subModule' => 'durationestimation');
|
||||
|
||||
$lang->durationestimation->menu = $lang->workestimation->menu;
|
||||
|
||||
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
|
||||
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
|
||||
|
||||
@@ -683,8 +683,6 @@ $lang->navGroup->compile = 'project';
|
||||
$lang->navGroup->report = 'project';
|
||||
$lang->navGroup->measrecord = 'project';
|
||||
|
||||
$lang->navGroup->durationestimation = 'project';
|
||||
|
||||
$lang->navGroup->sqlbuilder = 'system';
|
||||
$lang->navGroup->auditcl = 'system';
|
||||
$lang->navGroup->cmcl = 'system';
|
||||
@@ -919,9 +917,14 @@ $lang->menu->scrum->qa = 'QA|qa|index';
|
||||
$lang->menu->scrum->ci = 'Code|repo|browse';
|
||||
$lang->menu->scrum->projectbuild = array('link' => 'Build|projectbuild|browse|project={PROJECT}');
|
||||
$lang->menu->scrum->projectrelease = array('link' => 'Release|projectrelease|browse');
|
||||
$lang->menu->scrum->other = array('link' => 'Other|project|other', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'issue,risk,stakeholder');
|
||||
$lang->menu->scrum->projectsetting = array('link' => 'Setting|program|prjview|project={PROJECT}', 'alias' => 'prjedit,prjmanageproducts,prjgroup,prjmanagemembers,prjmanageview,prjmanagepriv,prjwhitelist,prjaddwhitelist');
|
||||
|
||||
$lang->scrum = new stdclass();
|
||||
$lang->scrum->subMenu = new stdclass();
|
||||
$lang->scrum->subMenu->other = new stdclass();
|
||||
$lang->scrum->subMenu->other->stakeholder = array('link' => '干系人|stakeholder|browse|', 'subModule' => 'stakeholder');
|
||||
|
||||
$lang->scrum->setMenu = new stdclass();
|
||||
$lang->scrum->setMenu->view = array('link' => 'View|program|prjview|project={PROJECT}');
|
||||
$lang->scrum->setMenu->products = array('link' => 'Product|program|PRJManageProducts|project={PROJECT}', 'alias' => 'prjmanageproducts');
|
||||
@@ -940,7 +943,6 @@ $lang->cm = new stdclass();
|
||||
$lang->nc = new stdclass();
|
||||
$lang->pssp = new stdclass();
|
||||
$lang->stakeholder = new stdclass();
|
||||
$lang->durationestimation = new stdclass();
|
||||
$lang->projectstory = new stdclass();
|
||||
|
||||
$lang->workestimation->menu = new stdclass();
|
||||
@@ -953,13 +955,9 @@ $lang->cm->menu = new stdclass();
|
||||
$lang->pssp->menu = new stdclass();
|
||||
$lang->stakeholder->menu = new stdclass();
|
||||
$lang->waterfallproduct->menu = new stdclass();
|
||||
$lang->durationestimation->menu = new stdclass();
|
||||
$lang->projectstory->menu = new stdclass();
|
||||
|
||||
$lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|index|project={PROJECT}';
|
||||
$lang->workestimation->menu->duration = array('link' => 'Duration Estimation|durationestimation|index|project={PROJECT}', 'subModule' => 'durationestimation');
|
||||
|
||||
$lang->durationestimation->menu = $lang->workestimation->menu;
|
||||
|
||||
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
|
||||
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
|
||||
|
||||
@@ -683,8 +683,6 @@ $lang->navGroup->compile = 'project';
|
||||
$lang->navGroup->report = 'project';
|
||||
$lang->navGroup->measrecord = 'project';
|
||||
|
||||
$lang->navGroup->durationestimation = 'project';
|
||||
|
||||
$lang->navGroup->sqlbuilder = 'system';
|
||||
$lang->navGroup->auditcl = 'system';
|
||||
$lang->navGroup->cmcl = 'system';
|
||||
@@ -919,9 +917,14 @@ $lang->menu->scrum->qa = 'QA|qa|index';
|
||||
$lang->menu->scrum->ci = 'Code|repo|browse';
|
||||
$lang->menu->scrum->projectbuild = array('link' => 'Build|projectbuild|browse|project={PROJECT}');
|
||||
$lang->menu->scrum->projectrelease = array('link' => 'Release|projectrelease|browse');
|
||||
$lang->menu->scrum->other = array('link' => 'Other|project|other', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'issue,risk,stakeholder');
|
||||
$lang->menu->scrum->projectsetting = array('link' => 'Setting|program|prjview|project={PROJECT}', 'alias' => 'prjedit,prjmanageproducts,prjgroup,prjmanagemembers,prjmanageview,prjmanagepriv,prjwhitelist,prjaddwhitelist');
|
||||
|
||||
$lang->scrum = new stdclass();
|
||||
$lang->scrum->subMenu = new stdclass();
|
||||
$lang->scrum->subMenu->other = new stdclass();
|
||||
$lang->scrum->subMenu->other->stakeholder = array('link' => 'Stakeholder|stakeholder|browse|', 'subModule' => 'stakeholder');
|
||||
|
||||
$lang->scrum->setMenu = new stdclass();
|
||||
$lang->scrum->setMenu->view = array('link' => 'View|program|prjview|project={PROJECT}');
|
||||
$lang->scrum->setMenu->products = array('link' => 'Product|program|PRJManageProducts|project={PROJECT}', 'alias' => 'prjmanageproducts');
|
||||
@@ -940,7 +943,6 @@ $lang->cm = new stdclass();
|
||||
$lang->nc = new stdclass();
|
||||
$lang->pssp = new stdclass();
|
||||
$lang->stakeholder = new stdclass();
|
||||
$lang->durationestimation = new stdclass();
|
||||
$lang->projectstory = new stdclass();
|
||||
|
||||
$lang->workestimation->menu = new stdclass();
|
||||
@@ -953,13 +955,9 @@ $lang->cm->menu = new stdclass();
|
||||
$lang->pssp->menu = new stdclass();
|
||||
$lang->stakeholder->menu = new stdclass();
|
||||
$lang->waterfallproduct->menu = new stdclass();
|
||||
$lang->durationestimation->menu = new stdclass();
|
||||
$lang->projectstory->menu = new stdclass();
|
||||
|
||||
$lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|index|project={PROJECT}';
|
||||
$lang->workestimation->menu->duration = array('link' => 'Duration Estimation|durationestimation|index|project={PROJECT}', 'subModule' => 'durationestimation');
|
||||
|
||||
$lang->durationestimation->menu = $lang->workestimation->menu;
|
||||
|
||||
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
|
||||
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
|
||||
|
||||
@@ -683,8 +683,6 @@ $lang->navGroup->compile = 'project';
|
||||
$lang->navGroup->report = 'project';
|
||||
$lang->navGroup->measrecord = 'project';
|
||||
|
||||
$lang->navGroup->durationestimation = 'project';
|
||||
|
||||
$lang->navGroup->sqlbuilder = 'system';
|
||||
$lang->navGroup->auditcl = 'system';
|
||||
$lang->navGroup->cmcl = 'system';
|
||||
@@ -918,10 +916,14 @@ $lang->menu->scrum->doc = 'Doc|doc|index|';
|
||||
$lang->menu->scrum->qa = 'QA|qa|index';
|
||||
$lang->menu->scrum->ci = 'Code|repo|browse';
|
||||
$lang->menu->scrum->projectbuild = array('link' => 'Build|projectbuild|browse|project={PROJECT}');
|
||||
$lang->menu->scrum->projectrelease = array('link' => 'Release|projectrelease|browse');
|
||||
$lang->menu->scrum->other = array('link' => 'Other|project|other', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'issue,risk,stakeholder');
|
||||
$lang->menu->scrum->projectsetting = array('link' => 'Setting|program|prjview|project={PROJECT}', 'alias' => 'prjedit,prjmanageproducts,prjgroup,prjmanagemembers,prjmanageview,prjmanagepriv,prjwhitelist,prjaddwhitelist');
|
||||
|
||||
$lang->scrum = new stdclass();
|
||||
$lang->scrum->subMenu = new stdclass();
|
||||
$lang->scrum->subMenu->other = new stdclass();
|
||||
$lang->scrum->subMenu->other->stakeholder = array('link' => 'Stakeholder|stakeholder|browse|', 'subModule' => 'stakeholder');
|
||||
|
||||
$lang->scrum->setMenu = new stdclass();
|
||||
$lang->scrum->setMenu->view = array('link' => 'View|program|prjview|project={PROJECT}');
|
||||
$lang->scrum->setMenu->products = array('link' => 'Product|program|PRJManageProducts|project={PROJECT}', 'alias' => 'prjmanageproducts');
|
||||
@@ -940,7 +942,6 @@ $lang->cm = new stdclass();
|
||||
$lang->nc = new stdclass();
|
||||
$lang->pssp = new stdclass();
|
||||
$lang->stakeholder = new stdclass();
|
||||
$lang->durationestimation = new stdclass();
|
||||
$lang->projectstory = new stdclass();
|
||||
|
||||
$lang->workestimation->menu = new stdclass();
|
||||
@@ -953,13 +954,9 @@ $lang->cm->menu = new stdclass();
|
||||
$lang->pssp->menu = new stdclass();
|
||||
$lang->stakeholder->menu = new stdclass();
|
||||
$lang->waterfallproduct->menu = new stdclass();
|
||||
$lang->durationestimation->menu = new stdclass();
|
||||
$lang->projectstory->menu = new stdclass();
|
||||
|
||||
$lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|index|project={PROJECT}';
|
||||
$lang->workestimation->menu->duration = array('link' => 'Duration Estimation|durationestimation|index|project={PROJECT}', 'subModule' => 'durationestimation');
|
||||
|
||||
$lang->durationestimation->menu = $lang->workestimation->menu;
|
||||
|
||||
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
|
||||
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
|
||||
|
||||
@@ -681,8 +681,6 @@ $lang->navGroup->compile = 'project';
|
||||
$lang->navGroup->report = 'project';
|
||||
$lang->navGroup->measrecord = 'project';
|
||||
|
||||
$lang->navGroup->durationestimation = 'project';
|
||||
|
||||
$lang->navGroup->sqlbuilder = 'system';
|
||||
$lang->navGroup->auditcl = 'system';
|
||||
$lang->navGroup->cmcl = 'system';
|
||||
@@ -917,9 +915,14 @@ $lang->menu->scrum->qa = '测试|qa|index';
|
||||
$lang->menu->scrum->ci = '代码|repo|browse';
|
||||
$lang->menu->scrum->projectbuild = array('link' => '版本|projectbuild|browse|project={PROJECT}');
|
||||
$lang->menu->scrum->projectrelease = array('link' => '发布|projectrelease|browse');
|
||||
$lang->menu->scrum->other = array('link' => '其他|project|other', 'class' => 'dropdown dropdown-hover waterfall-list', 'subModule' => 'issue,risk,stakeholder');
|
||||
$lang->menu->scrum->projectsetting = array('link' => '设置|program|prjview|project={PROJECT}', 'alias' => 'prjedit,prjmanageproducts,prjgroup,prjmanagemembers,prjmanageview,prjmanagepriv,prjwhitelist,prjaddwhitelist');
|
||||
|
||||
$lang->scrum = new stdclass();
|
||||
$lang->scrum->subMenu = new stdclass();
|
||||
$lang->scrum->subMenu->other = new stdclass();
|
||||
$lang->scrum->subMenu->other->stakeholder = array('link' => '干系人|stakeholder|browse|', 'subModule' => 'stakeholder');
|
||||
|
||||
$lang->scrum->setMenu = new stdclass();
|
||||
$lang->scrum->setMenu->view = array('link' => '概况|program|prjview|project={PROJECT}', 'alias' => 'prjedit');
|
||||
$lang->scrum->setMenu->products = array('link' => '产品|program|PRJManageProducts|project={PROJECT}', 'alias' => 'prjmanageproducts');
|
||||
@@ -938,7 +941,6 @@ $lang->cm = new stdclass();
|
||||
$lang->nc = new stdclass();
|
||||
$lang->pssp = new stdclass();
|
||||
$lang->stakeholder = new stdclass();
|
||||
$lang->durationestimation = new stdclass();
|
||||
$lang->projectstory = new stdclass();
|
||||
|
||||
$lang->workestimation->menu = new stdclass();
|
||||
@@ -951,13 +953,9 @@ $lang->cm->menu = new stdclass();
|
||||
$lang->pssp->menu = new stdclass();
|
||||
$lang->stakeholder->menu = new stdclass();
|
||||
$lang->waterfallproduct->menu = new stdclass();
|
||||
$lang->durationestimation->menu = new stdclass();
|
||||
$lang->projectstory->menu = new stdclass();
|
||||
|
||||
$lang->workestimation->menu->workestimation = '工作量估算|workestimation|index|project={PROJECT}';
|
||||
$lang->workestimation->menu->duration = array('link' => '工期估算|durationestimation|index|project={PROJECT}', 'subModule' => 'durationestimation');
|
||||
|
||||
$lang->durationestimation->menu = $lang->workestimation->menu;
|
||||
|
||||
$lang->stakeholder->menu->list = array('link' => '干系人列表|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
|
||||
$lang->stakeholder->menu->issue = array('link' => '问题管理|stakeholder|issue|');
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
$config->durationestimation = new stdclass();
|
||||
$config->durationestimation->index = new stdclass();
|
||||
$config->durationestimation->index->requiredFields = 'scale,productivity,scale,duration,unitLaborCost,totalLaborCost';
|
||||
|
||||
$config->durationestimation->workloadTotal = 100;
|
||||
@@ -1,137 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The control file of durationestimation of ZentaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2010 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv11.html)
|
||||
* @author Xiying Guan <guanxiying@xirangit.com>
|
||||
* @package durationestimation
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class durationestimation extends control
|
||||
{
|
||||
/**
|
||||
* Project duration estimation.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function index($projectID)
|
||||
{
|
||||
$workestimation = $this->loadModel('workestimation')->getBudget($projectID);
|
||||
if(empty($workestimation))
|
||||
{
|
||||
echo js::alert($this->lang->durationestimation->setWorkestimation);
|
||||
die(js::locate($this->createLink('workestimation', 'index', "projectID=$projectID")));
|
||||
}
|
||||
|
||||
$this->app->loadLang('programplan');
|
||||
$project = $this->loadModel('program')->getPRJByID($projectID);
|
||||
$stages = $this->loadModel('stage')->getStages('id_asc');
|
||||
|
||||
$estimationList = $this->durationestimation->getListByProject($projectID);
|
||||
if(empty($estimationList)) $this->locate(inlink('create', "projectID=$projectID"));
|
||||
|
||||
$this->view->title = $this->lang->durationestimation->common . $this->lang->colon . $project->name;
|
||||
$this->view->position[] = $this->lang->durationestimation->common;
|
||||
$this->view->workestimation = $workestimation;
|
||||
$this->view->estimationList = $estimationList;
|
||||
$this->view->project = $project;
|
||||
$this->view->stages = $stages;
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the project duration estimate.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function create($projectID = 0)
|
||||
{
|
||||
$workestimation = $this->loadModel('workestimation')->getBudget($projectID);
|
||||
if(empty($workestimation))
|
||||
{
|
||||
echo js::alert($this->lang->durationestimation->setWorkestimation);
|
||||
die(js::locate($this->createLink('workestimation', 'index', "projectID=$projectID")));
|
||||
}
|
||||
|
||||
$this->app->loadLang('programplan');
|
||||
if(!empty($_POST))
|
||||
{
|
||||
$total = 0;
|
||||
foreach($this->post->workload as $value) $total += $value;
|
||||
|
||||
$workloadTotal = $this->config->durationestimation->workloadTotal;
|
||||
if($total != $workloadTotal) $this->send(array('result' => 'fail', 'message' => $this->lang->durationestimation->workloadError));
|
||||
|
||||
$this->durationestimation->save($projectID);
|
||||
|
||||
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('index', "projectID={$projectID}")));
|
||||
}
|
||||
|
||||
$project = $this->loadModel('program')->getPRJByID($projectID);
|
||||
|
||||
$this->view->title = $this->lang->durationestimation->common . $this->lang->colon . $project->name;
|
||||
$this->view->position[] = $this->lang->durationestimation->common;
|
||||
$this->view->project = $project;
|
||||
$this->view->stages = $this->loadModel('stage')->getStages('id_asc');
|
||||
$this->view->estimationList = $this->durationestimation->getListByProject($projectID);
|
||||
$this->view->workestimation = $workestimation;
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the end time of the duration.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @param int $stage
|
||||
* @param int $workload
|
||||
* @param int $worktimeRate
|
||||
* @param int $people
|
||||
* @param string $startDate
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function ajaxGetDuration($projectID, $stage, $workload, $worktimeRate, $people, $startDate)
|
||||
{
|
||||
$startDate = str_replace('_', '-', $startDate);
|
||||
if($startDate == '0000-00-00') $this->send(array('result' => 'success', 'endDate' => '0000-00-00'));
|
||||
|
||||
$estimation = $this->loadModel('workestimation')->getBudget($projectID);
|
||||
$duration = $estimation->duration * $workload / 100;
|
||||
$divisor = ($people == 0 || $estimation->dayHour == 0) ? 0 : $worktimeRate / 100 * $people * $estimation->dayHour;
|
||||
$duration = $divisor == 0 ? 0 : $duration / $divisor;
|
||||
if(!$divisor) $this->send(array('result' => 'fail'));
|
||||
|
||||
$holidays = array();
|
||||
$workDays = array();
|
||||
$i = 0;
|
||||
|
||||
$this->loadModel('project');
|
||||
|
||||
$startedTime = strtotime($startDate);
|
||||
$days = 0;
|
||||
for($i = 0; $days < $duration; $i ++)
|
||||
{
|
||||
$day = date('N', strtotime("+ $i days", $startedTime));
|
||||
if($this->config->project->weekend == 2)
|
||||
{
|
||||
if($day > 5) continue;
|
||||
}
|
||||
if($this->config->project->weekend == 1)
|
||||
{
|
||||
if($day > 6) continue;
|
||||
}
|
||||
$lastDay = date('Y-m-d', strtotime("+ $i days", $startedTime));
|
||||
$days ++;
|
||||
}
|
||||
|
||||
$this->send(array('result' => 'success', 'endDate' => $lastDay));
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
$().ready(function()
|
||||
{
|
||||
$(':input[name*=people]').change(function()
|
||||
{
|
||||
var peopleNumber = 0;
|
||||
$(':input[name*=people]').each(function()
|
||||
{
|
||||
var people = $(this).val();
|
||||
if(people) peopleNumber += parseInt(people);
|
||||
});
|
||||
$('#totalStaff').html(peopleNumber);
|
||||
});
|
||||
|
||||
$(':input[name*=workload]').change(function()
|
||||
{
|
||||
rate = parseFloat($(this).val());
|
||||
workload = estimation.scale * rate / 100;
|
||||
$(this).parents('td').next().find(':input').val(workload);
|
||||
totalWorkload = 0;
|
||||
$(':input[name*=workload]').each(function()
|
||||
{
|
||||
rate = parseFloat($(this).val());
|
||||
workload = estimation.scale * rate / 100;
|
||||
totalWorkload += workload;
|
||||
});
|
||||
$('#totalWorkload').html(totalWorkload.toFixed(2));
|
||||
});
|
||||
|
||||
|
||||
$(':input').change(function()
|
||||
{
|
||||
var that = $(this);
|
||||
projectID = project.id;
|
||||
stage = $(this).parents('tr').find('[name*=stage]').val();
|
||||
workload = $(this).parents('tr').find('[name*=workload]').val();
|
||||
worktimeRate = $(this).parents('tr').find('[name*=worktimeRate]').val();
|
||||
people = $(this).parents('tr').find('[name*=people]').val();
|
||||
startDate = $(this).parents('tr').find('[name*=startDate]').val();
|
||||
if(startDate) startDate = startDate.replace(/-/g, '_');
|
||||
|
||||
if(isNaN(workload) || isNaN(worktimeRate) || isNaN(people) || startDate == '') return false;
|
||||
url = createLink('durationestimation', 'ajaxGetDuration', 'projectID=' + projectID + '&stage=' + stage + '&workload=' + workload + '&worktimeRate=' + worktimeRate + '&people=' + people + '&startDate=' + startDate),
|
||||
$.getJSON(
|
||||
url,
|
||||
function(response)
|
||||
{
|
||||
if(response.result == 'success')
|
||||
{
|
||||
that.parents('tr').find('[name*=endDate]').val(response.endDate);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
$(':input').change();
|
||||
})
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
$lang->durationestimation->index = 'Duration Home';
|
||||
$lang->durationestimation->create = 'Settings';
|
||||
$lang->durationestimation->common = 'Estimate Duration';
|
||||
$lang->durationestimation->stage = 'Stage';
|
||||
$lang->durationestimation->workloadRate = 'Workload %';
|
||||
$lang->durationestimation->workload = 'Workload';
|
||||
$lang->durationestimation->worktimeRate = 'Full-time %';
|
||||
$lang->durationestimation->people = 'Estimated Man';
|
||||
$lang->durationestimation->members = 'Actual Man';
|
||||
$lang->durationestimation->startDate = 'Begin';
|
||||
$lang->durationestimation->endDate = 'End';
|
||||
$lang->durationestimation->setting = 'Settings';
|
||||
|
||||
$lang->durationestimation->setWorkestimation = "Enter the estimated workload information first.";
|
||||
$lang->durationestimation->summary = "Project scale: <strong class='text-danger'> %s {$lang->hourCommon}</strong>; Estimated workload: <strong id='totalWorkload' class='text-danger'>0</strong>; Total number of men: <strong id='totalStaff' class='text-danger'>0</strong>";
|
||||
$lang->durationestimation->workloadError = "The sum of the workload % should be 100%.";
|
||||
|
||||
$lang->durationestimation->placeholder = new stdclass();
|
||||
$lang->durationestimation->placeholder->scale = '';
|
||||
$lang->durationestimation->placeholder->productivity = '';
|
||||
$lang->durationestimation->placeholder->duration = '';
|
||||
$lang->durationestimation->placeholder->unitLaborCost = '';
|
||||
$lang->durationestimation->placeholder->totalLaborCost = '';
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
$lang->durationestimation->index = 'Duration Home';
|
||||
$lang->durationestimation->create = 'Settings';
|
||||
$lang->durationestimation->common = 'Estimate Duration';
|
||||
$lang->durationestimation->stage = 'Stage';
|
||||
$lang->durationestimation->workloadRate = 'Workload %';
|
||||
$lang->durationestimation->workload = 'Workload';
|
||||
$lang->durationestimation->worktimeRate = 'Full-time %';
|
||||
$lang->durationestimation->people = 'Estimated Man';
|
||||
$lang->durationestimation->members = 'Actual Man';
|
||||
$lang->durationestimation->startDate = 'Begin';
|
||||
$lang->durationestimation->endDate = 'End';
|
||||
$lang->durationestimation->setting = 'Settings';
|
||||
|
||||
$lang->durationestimation->setWorkestimation = "Enter the estimated workload information first.";
|
||||
$lang->durationestimation->summary = "Project scale: <strong class='text-danger'> %s {$lang->hourCommon}</strong>; Estimated workload: <strong id='totalWorkload' class='text-danger'>0</strong>; Total number of men: <strong id='totalStaff' class='text-danger'>0</strong>";
|
||||
$lang->durationestimation->workloadError = "The sum of the workload % should be 100%.";
|
||||
|
||||
$lang->durationestimation->placeholder = new stdclass();
|
||||
$lang->durationestimation->placeholder->scale = '';
|
||||
$lang->durationestimation->placeholder->productivity = '';
|
||||
$lang->durationestimation->placeholder->duration = '';
|
||||
$lang->durationestimation->placeholder->unitLaborCost = '';
|
||||
$lang->durationestimation->placeholder->totalLaborCost = '';
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
$lang->durationestimation->index = 'Duration Home';
|
||||
$lang->durationestimation->create = 'Settings';
|
||||
$lang->durationestimation->common = 'Estimate Duration';
|
||||
$lang->durationestimation->stage = 'Stage';
|
||||
$lang->durationestimation->workloadRate = 'Workload %';
|
||||
$lang->durationestimation->workload = 'Workload';
|
||||
$lang->durationestimation->worktimeRate = 'Full-time %';
|
||||
$lang->durationestimation->people = 'Estimated Man';
|
||||
$lang->durationestimation->members = 'Actual Man';
|
||||
$lang->durationestimation->startDate = 'Begin';
|
||||
$lang->durationestimation->endDate = 'End';
|
||||
$lang->durationestimation->setting = 'Settings';
|
||||
|
||||
$lang->durationestimation->setWorkestimation = "Enter the estimated workload information first.";
|
||||
$lang->durationestimation->summary = "Project scale: <strong class='text-danger'> %s {$lang->hourCommon}</strong>; Estimated workload: <strong id='totalWorkload' class='text-danger'>0</strong>; Total number of men: <strong id='totalStaff' class='text-danger'>0</strong>";
|
||||
$lang->durationestimation->workloadError = "The sum of the workload % should be 100%.";
|
||||
|
||||
$lang->durationestimation->placeholder = new stdclass();
|
||||
$lang->durationestimation->placeholder->scale = '';
|
||||
$lang->durationestimation->placeholder->productivity = '';
|
||||
$lang->durationestimation->placeholder->duration = '';
|
||||
$lang->durationestimation->placeholder->unitLaborCost = '';
|
||||
$lang->durationestimation->placeholder->totalLaborCost = '';
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
$lang->durationestimation->index = 'Duration Home';
|
||||
$lang->durationestimation->create = 'Settings';
|
||||
$lang->durationestimation->common = 'Estimate Duration';
|
||||
$lang->durationestimation->stage = 'Stage';
|
||||
$lang->durationestimation->workloadRate = 'Workload %';
|
||||
$lang->durationestimation->workload = 'Workload';
|
||||
$lang->durationestimation->worktimeRate = 'Full-time %';
|
||||
$lang->durationestimation->people = 'Estimated Man';
|
||||
$lang->durationestimation->members = 'Actual Man';
|
||||
$lang->durationestimation->startDate = 'Begin';
|
||||
$lang->durationestimation->endDate = 'End';
|
||||
$lang->durationestimation->setting = 'Settings';
|
||||
|
||||
$lang->durationestimation->setWorkestimation = "Enter the estimated workload information first.";
|
||||
$lang->durationestimation->summary = "Project scale: <strong class='text-danger'> %s {$lang->hourCommon}</strong>; Estimated workload: <strong id='totalWorkload' class='text-danger'>0</strong>; Total number of men: <strong id='totalStaff' class='text-danger'>0</strong>";
|
||||
$lang->durationestimation->workloadError = "The sum of the workload % should be 100%.";
|
||||
|
||||
$lang->durationestimation->placeholder = new stdclass();
|
||||
$lang->durationestimation->placeholder->scale = '';
|
||||
$lang->durationestimation->placeholder->productivity = '';
|
||||
$lang->durationestimation->placeholder->duration = '';
|
||||
$lang->durationestimation->placeholder->unitLaborCost = '';
|
||||
$lang->durationestimation->placeholder->totalLaborCost = '';
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
$lang->durationestimation->index = '工期估算首页';
|
||||
$lang->durationestimation->create = '工期估算设置';
|
||||
$lang->durationestimation->common = '项目工期估算';
|
||||
$lang->durationestimation->stage = '阶段';
|
||||
$lang->durationestimation->workloadRate = '工作量占比';
|
||||
$lang->durationestimation->workload = '工作量';
|
||||
$lang->durationestimation->worktimeRate = '全时率';
|
||||
$lang->durationestimation->people = '估算人数';
|
||||
$lang->durationestimation->members = '投入人数';
|
||||
$lang->durationestimation->startDate = '开始日期';
|
||||
$lang->durationestimation->endDate = '结束日期';
|
||||
$lang->durationestimation->setting = '设置';
|
||||
|
||||
$lang->durationestimation->setWorkestimation = "请先录入工作量估算信息";
|
||||
$lang->durationestimation->summary = "项目规模: <strong class='text-danger'> %s {$lang->hourCommon}</strong>, 估算工作量: <strong id='totalWorkload' class='text-danger'>0</strong>, 总投入人数: <strong id='totalStaff' class='text-danger'>0</strong>";
|
||||
$lang->durationestimation->workloadError = "工作量占比之和必须是100%";
|
||||
|
||||
$lang->durationestimation->placeholder = new stdclass();
|
||||
$lang->durationestimation->placeholder->scale = '';
|
||||
$lang->durationestimation->placeholder->productivity = '';
|
||||
$lang->durationestimation->placeholder->duration = '';
|
||||
$lang->durationestimation->placeholder->unitLaborCost = '';
|
||||
$lang->durationestimation->placeholder->totalLaborCost = '';
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
$lang->durationestimation->index = '工期估算首頁';
|
||||
$lang->durationestimation->create = '工期估算設置';
|
||||
$lang->durationestimation->common = '項目工期估算';
|
||||
$lang->durationestimation->stage = '階段';
|
||||
$lang->durationestimation->workloadRate = '工作量占比';
|
||||
$lang->durationestimation->workload = '工作量';
|
||||
$lang->durationestimation->worktimeRate = '全時率';
|
||||
$lang->durationestimation->people = '估算人數';
|
||||
$lang->durationestimation->members = '投入人數';
|
||||
$lang->durationestimation->startDate = '開始日期';
|
||||
$lang->durationestimation->endDate = '結束日期';
|
||||
$lang->durationestimation->setting = '設置';
|
||||
|
||||
$lang->durationestimation->setWorkestimation = "請先錄入工作量估算信息";
|
||||
$lang->durationestimation->summary = "項目規模: <strong class='text-danger'> %s {$lang->hourCommon}</strong>, 估算工作量: <strong id='totalWorkload' class='text-danger'>0</strong>, 總投入人數: <strong id='totalStaff' class='text-danger'>0</strong>";
|
||||
$lang->durationestimation->workloadError = "工作量占比之和必須是100%";
|
||||
|
||||
$lang->durationestimation->placeholder = new stdclass();
|
||||
$lang->durationestimation->placeholder->scale = '';
|
||||
$lang->durationestimation->placeholder->productivity = '';
|
||||
$lang->durationestimation->placeholder->duration = '';
|
||||
$lang->durationestimation->placeholder->unitLaborCost = '';
|
||||
$lang->durationestimation->placeholder->totalLaborCost = '';
|
||||
@@ -1,51 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The model file of durationestimation of ZentaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2010 QingDao Nature Easy Soft Network Technology Co,LTD (www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv11.html)
|
||||
* @author Xiying Guan <guanxiying@xirangit.com>
|
||||
* @package durationestimation
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class durationestimationModel extends model
|
||||
{
|
||||
/**
|
||||
* Get the project duration estimate.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getListByProject($projectID)
|
||||
{
|
||||
return $this->dao->select('*')->from(TABLE_DURATIONESTIMATION)->where('PRJ')->eq($projectID)->fetchAll('stage');
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the project duration estimate.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function save($projectID)
|
||||
{
|
||||
$this->dao->delete()->from(TABLE_DURATIONESTIMATION)->where('PRJ')->eq($projectID);
|
||||
foreach($this->post->stage as $i => $stage)
|
||||
{
|
||||
$data = new stdclass;
|
||||
$data->PRJ = $projectID;
|
||||
$data->stage = $stage;
|
||||
$data->workload = $this->post->workload[$i];
|
||||
$data->worktimeRate = $this->post->worktimeRate[$i];
|
||||
$data->people = $this->post->people[$i];
|
||||
$data->startDate = $this->post->startDate[$i];
|
||||
$data->endDate = $this->post->endDate[$i];
|
||||
$this->dao->insert(TABLE_DURATIONESTIMATION)->data($data)->exec();
|
||||
}
|
||||
|
||||
return !dao::isError();
|
||||
}
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('project', $project);?>
|
||||
<?php js::set('estimation', $workestimation);?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<form class='main-form form-ajax' method='post' id='stageForm' enctype='multipart/form-data'>
|
||||
<table class='table table-bordered table-form'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th><?php echo $lang->durationestimation->stage;?></th>
|
||||
<th><?php echo $lang->durationestimation->workloadRate;?></th>
|
||||
<th><?php echo $lang->durationestimation->workload;?></th>
|
||||
<th><?php echo $lang->durationestimation->worktimeRate;?></th>
|
||||
<th><?php echo $lang->durationestimation->people;?></th>
|
||||
<th><?php echo $lang->durationestimation->startDate;?></th>
|
||||
<th><?php echo $lang->durationestimation->endDate;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $i = 0;?>
|
||||
<?php if(!empty($stages)):?>
|
||||
<?php foreach($stages as $stage):?>
|
||||
<?php $estimation = zget($estimationList, $stage->id, array());?>
|
||||
<tr>
|
||||
<td>
|
||||
<?php echo $stage->name;?>
|
||||
<?php echo html::hidden('stage[]', $stage->id);?>
|
||||
</td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<input type='text' name='workload[]' id='workload<?php echo $i;?>' value='<?php echo zget($estimation, 'workload', $stage->percent); ?>' class='form-control' />
|
||||
<span class='input-group-addon'>%</span>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<input type='text' value='' class='form-control' />
|
||||
<span class='input-group-addon'><?php echo $lang->hourCommon;?></span>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class='input-group'>
|
||||
<input type='text' name='worktimeRate[]' id='<?php echo $i;?>' value='<?php echo zget($estimation, 'worktimeRate', '100');?>' class='form-control' />
|
||||
<span class='input-group-addon'>%</span>
|
||||
</div>
|
||||
</td>
|
||||
<td><input type='text' name='people[]' id='people<?php echo $i;?>' value='<?php echo zget($estimation, 'people', 0);?>' class='form-control' /></td>
|
||||
<td><input type='text' name='startDate[]' id='startDate<?php echo $i;?>' value='<?php echo zget($estimation, 'startDate', '');?>' class='form-control form-date' /></td>
|
||||
<td><input type='text' name='endDate[]' id='endDate<?php echo $i;?>' value='<?php echo zget($estimation, 'endDate', '');?>' class='form-control form-date' /></td>
|
||||
</tr>
|
||||
<?php $i ++;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
<tr>
|
||||
<td colspan='7'><?php printf($lang->durationestimation->summary, zget($workestimation, 'scale', ''));?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='7' class='text-center form-actions'><?php echo html::submitButton() . ' ' . html::backButton(); ?></td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
<?php js::set('i', $i);?>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -1,43 +0,0 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<form class='main-form form-ajax' method='post' id='planForm' enctype='multipart/form-data'>
|
||||
<table class='table table-list table-bordered'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th><?php echo $lang->durationestimation->stage;?></th>
|
||||
<th><?php echo $lang->durationestimation->workload;?></th>
|
||||
<th><?php echo $lang->durationestimation->worktimeRate;?></th>
|
||||
<th><?php echo $lang->durationestimation->people;?></th>
|
||||
<th><?php echo $lang->durationestimation->startDate;?></th>
|
||||
<th><?php echo $lang->durationestimation->endDate;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php $i = 0;?>
|
||||
<?php foreach($stages as $plan):?>
|
||||
<?php $estimation = zget($estimationList, $plan->id, 0);?>
|
||||
<tr class='text-center'>
|
||||
<td>
|
||||
<?php echo $plan->name;?>
|
||||
<?php echo html::hidden('stage[]', $plan->id);?>
|
||||
</td>
|
||||
<td><?php echo zget($estimation, 'workload', ''); ?>% </td>
|
||||
<td><?php echo zget($estimation, 'worktimeRate', '');?>% </td>
|
||||
<td><?php echo zget($estimation, 'people', '');?></td>
|
||||
<td><?php echo zget($estimation, 'startDate', '');?></td>
|
||||
<td><?php echo zget($estimation, 'endDate', '');?></td>
|
||||
</tr>
|
||||
<?php $i ++;?>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='6' class='form-actions text-center'>
|
||||
<?php echo html::a(inlink('create', "projectID={$project->id}"), $lang->durationestimation->setting, '', "class='btn btn-primary'");?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -65,7 +65,6 @@ $lang->moduleOrder[210] = 'design';
|
||||
$lang->moduleOrder[215] = 'programplan';
|
||||
|
||||
$lang->moduleOrder[240] = 'workestimation';
|
||||
$lang->moduleOrder[245] = 'durationestimation';
|
||||
|
||||
$lang->resource = new stdclass();
|
||||
|
||||
@@ -1197,14 +1196,6 @@ $lang->resource->workestimation->index = 'index';
|
||||
|
||||
$lang->workestimation->methodOrder[0] = 'index';
|
||||
|
||||
/* Duration estimation. */
|
||||
$lang->resource->durationestimation = new stdclass();
|
||||
$lang->resource->durationestimation->index = 'index';
|
||||
$lang->resource->durationestimation->create = 'create';
|
||||
|
||||
$lang->durationestimation->methodOrder[0] = 'index';
|
||||
$lang->durationestimation->methodOrder[5] = 'create';
|
||||
|
||||
/* Department. */
|
||||
$lang->resource->dept = new stdclass();
|
||||
$lang->resource->dept->browse = 'browse';
|
||||
|
||||
@@ -141,7 +141,15 @@ $lang->product->statusList[''] = '';
|
||||
$lang->product->statusList['normal'] = '正常';
|
||||
$lang->product->statusList['closed'] = '结束';
|
||||
|
||||
$lang->product->aclList['private'] = "私有({$lang->productCommon}相关负责人、所属项目集的干系人、相关联项目的团队成员和干系人可访问)";
|
||||
global $config;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->product->aclList['private'] = "私有({$lang->productCommon}相关负责人、所属项目集的干系人、相关联项目的团队成员和干系人可访问)";
|
||||
}
|
||||
else
|
||||
{
|
||||
$lang->product->aclList['private'] = "私有({$lang->productCommon}相关负责人、相关联{$lang->executionCommon}的团队成员可访问)";
|
||||
}
|
||||
$lang->product->aclList['open'] = "公开(有{$lang->productCommon}视图权限,即可访问)";
|
||||
//$lang->product->aclList['custom'] = '自定义白名单(团队成员和白名单的成员可以访问)';
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
class productset extends control
|
||||
{
|
||||
public function browse()
|
||||
{
|
||||
$this->display();
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
class productsetModel extends model
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* The browse view file of productset module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package productset
|
||||
* @version $Id: browse.html.php 4707 2013-05-02 06:57:41Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
@@ -21,7 +21,7 @@
|
||||
<span class='input-group-addon'><?php echo $lang->project->selectDept?></span>
|
||||
<?php echo html::select('dept', $depts, $dept, "class='form-control chosen' onchange='setDeptUsers(this)' data-placeholder='{$lang->project->selectDeptTitle}'");?>
|
||||
</div>
|
||||
<?php if($project->parent):?>
|
||||
<?php if($project->parent and $config->systemMode == 'new'):?>
|
||||
<?php echo html::a($this->createLink('stakeholder', 'batchcreate', "dept=&parent=$project->parent"), $lang->program->importStakeholder, '', 'class="btn btn-primary"');?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
|
||||
@@ -458,6 +458,11 @@ class story extends control
|
||||
$showFields = str_replace(array(0 => ",branch,", 1 => ",platform,"), '', ",$showFields,");
|
||||
$showFields = trim($showFields, ',');
|
||||
}
|
||||
if($type == 'requirement')
|
||||
{
|
||||
unset($customFields['plan']);
|
||||
$showFields = str_replace('plan', '', $showFields);
|
||||
}
|
||||
|
||||
$this->view->customFields = $customFields;
|
||||
$this->view->showFields = $showFields;
|
||||
@@ -705,8 +710,14 @@ class story extends control
|
||||
|
||||
/* Set Custom*/
|
||||
foreach(explode(',', $this->config->story->list->customBatchEditFields) as $field) $customFields[$field] = $this->lang->story->$field;
|
||||
$showFields = $this->config->story->custom->batchEditFields;
|
||||
if($storyType == 'requirement')
|
||||
{
|
||||
unset($customFields['plan']);
|
||||
$showFields = str_replace('plan', '', $showFields);
|
||||
}
|
||||
$this->view->customFields = $customFields;
|
||||
$this->view->showFields = $this->config->story->custom->batchEditFields;
|
||||
$this->view->showFields = $showFields;
|
||||
|
||||
/* Judge whether the editedStories is too large and set session. */
|
||||
$countInputVars = count($stories) * (count(explode(',', $this->config->story->custom->batchEditFields)) + 3);
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->testcase->noCase;?></span> <?php if($canBeChanged) common::printLink('testtask', 'linkCase', "taskID={$taskID}", "<i class='icon icon-plus'></i> " . $lang->testtask->linkCase, '', "class='btn btn-info'");?></p>
|
||||
<p><span class="text-muted"><?php echo $lang->testcase->noCase;?></span> <?php if($canBeChanged) common::printLink('testtask', 'linkCase', "taskID={$taskID}", "<i class='icon icon-link'></i> " . $lang->testtask->linkCase, '', "class='btn btn-info'");?></p>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user