diff --git a/db/update20.0.sql b/db/update20.0.sql index 13dc2e46b7..af61c83627 100644 --- a/db/update20.0.sql +++ b/db/update20.0.sql @@ -293,3 +293,5 @@ INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES (' ALTER TABLE `zt_block` ADD `type` char(30) NOT NULL AFTER `module`; ALTER TABLE `zt_block` ADD UNIQUE `account_module_type_order` (`account`, `module`, `type`, `order`), DROP INDEX `accountModuleOrder`; + +INSERT INTO `zt_cron` (`id`, `m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES (15, '1', '0', '*', '*', '*', 'moduleName=weekly&methodName=computeWeekly', '更新项目周报', 'system', 0, 'normal', '2020-08-27 10:07:53'); diff --git a/module/block/control.php b/module/block/control.php index bfa6063ce6..9279a46d36 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -1212,7 +1212,7 @@ class block extends control $longProgram = helper::diffDate($today, $begin) / 7 > 12; while($begin < $end) { - $charts['labels'][] = $longProgram ? $this->lang->milestone->chart->time . $i . $this->lang->milestone->chart->month : $this->lang->milestone->chart->time . $i . $this->lang->milestone->chart->week; + $charts['labels'][] = $longProgram ? $this->lang->block->time . $i . $this->lang->block->month : $this->lang->block->time . $i . $this->lang->block->week; $charts['PV'] .= $this->weekly->getPV($programID, $begin) . ','; $charts['EV'] .= $this->weekly->getEV($programID, $begin) . ','; $charts['AC'] .= $this->weekly->getAC($programID, $begin) . ','; diff --git a/module/block/lang/en.php b/module/block/lang/en.php index d28e2f8fb1..5ce4f78493 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -59,6 +59,9 @@ $lang->block->doingProject = 'Doning ' . $lang->projectCommon; $lang->block->finishProject = 'Finish ' . $lang->projectCommon; $lang->block->estimatedHours = 'Estimated Hours'; $lang->block->consumedHours = 'Consumed Hours'; +$lang->block->time = 'No'; +$lang->block->week = 'Week'; +$lang->block->month = 'Month'; $lang->block->params = new stdclass(); $lang->block->params->name = 'Name'; diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index 39cc1e9376..e7f2d0ca9a 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -59,6 +59,9 @@ $lang->block->doingProject = '进行中的' . $lang->projectCommon; $lang->block->finishProject = '累积' . $lang->projectCommon; $lang->block->estimatedHours = '预计工时'; $lang->block->consumedHours = '已消耗'; +$lang->block->time = '第'; +$lang->block->week = '周'; +$lang->block->month = '月'; $lang->block->params = new stdclass(); $lang->block->params->name = '参数名称'; diff --git a/module/block/view/cmmiprogressblock.html.php b/module/block/view/cmmiprogressblock.html.php index 7bd7117587..a46de3eb04 100644 --- a/module/block/view/cmmiprogressblock.html.php +++ b/module/block/view/cmmiprogressblock.html.php @@ -3,5 +3,119 @@ .block-cmmiprogress .milestone-chart {box-shadow: none} .block-cmmiprogress .milestone-chart.has-scrollbar {margin-bottom: -10px} - +
+
+
+ +
+
+
project->workHour})";?>
+
+ PV + EV + AC +
+
+ + diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 6228b96239..894b021d0a 100755 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -1087,7 +1087,6 @@ $lang->workestimation = new stdclass(); $lang->budget = new stdclass(); $lang->programplan = new stdclass(); $lang->review = new stdclass(); -$lang->weekly = new stdclass(); $lang->milestone = new stdclass(); $lang->design = new stdclass(); $lang->auditplan = new stdclass(); @@ -1103,7 +1102,6 @@ $lang->workestimation->menu = new stdclass(); $lang->budget->menu = new stdclass(); $lang->programplan->menu = new stdclass(); $lang->review->menu = new stdclass(); -$lang->weekly->menu = new stdclass(); $lang->milestone->menu = new stdclass(); $lang->cmmiproduct->menu = new stdclass(); $lang->design->menu = new stdclass(); @@ -1125,15 +1123,12 @@ $lang->budget->menu = $lang->workestimation->menu; $lang->programplan->menu->gantt = array('link' => '甘特图|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=gantt'); $lang->programplan->menu->lists = array('link' => '阶段列表|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=lists', 'alias' => 'create'); -$lang->weekly->menu->browse = '周报|weekly|index|program={PROGRAM}'; - $lang->cmmiproduct->menu->plan = array('link' => '排期|productplan|browse|productID={PRODUCT}', 'subModule' => 'productplan'); $lang->cmmiproduct->menu->requirement = '用户需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=requirement'; $lang->cmmiproduct->menu->story = '软件需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=story'; $lang->cmmiproduct->menu->track = '跟踪矩阵|story|track|product={PRODUCT}'; -$lang->milestone->menu = $lang->weekly->menu; -$lang->nc->menu = $lang->auditplan->menu; +$lang->nc->menu = $lang->auditplan->menu; $lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'holiday', 'custom', 'auditcl', 'subject', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); $lang->haveMenuMethod = array('custom'); diff --git a/module/milestone/config.php b/module/milestone/config.php deleted file mode 100644 index bafff91a72..0000000000 --- a/module/milestone/config.php +++ /dev/null @@ -1,5 +0,0 @@ -milestone = new stdclass(); -$config->milestone->story = 'URS,SRS'; -$config->milestone->design = 'HLDS,DDS'; -$config->milestone->test = 'ITTC,STP,STTC,ITP'; diff --git a/module/milestone/control.php b/module/milestone/control.php deleted file mode 100644 index 40cb7b5590..0000000000 --- a/module/milestone/control.php +++ /dev/null @@ -1,63 +0,0 @@ -loadModel('program'); - $this->loadModel('project'); - list($this->lang->modulePageNav, $projectID) = $this->milestone->getPageNav($programID, $projectID, $productID); - - $this->view->title = $this->lang->milestone->title; - - if(!$projectID) - { - $this->view->projectID = $projectID; - $this->display(); - die; - } - - - - $productID = $this->loadModel('product')->getProductIDByProject($projectID); - $stageList = $this->loadModel('programplan')->getPairs($programID, $productID); - unset($stageList[0]); - - $this->view->projectID = $projectID; - $this->view->programID = $programID; - $this->view->stageList = $stageList; - $this->view->basicInfo = $this->milestone->getBasicInfo($programID, $projectID); - $this->view->process = $this->milestone->getProcess($programID, $projectID); - $this->view->charts = $this->milestone->getCharts($programID, $projectID); - $this->view->productQuality = $this->milestone->getProductQuality($programID, $projectID); - $this->view->workhours = $this->milestone->getWorkhours($programID, $projectID); - $this->view->measures = $this->milestone->getMeasures($programID, $projectID); - $this->view->projectRisk = $this->milestone->getProjectRisk($programID); - $this->view->users = $this->loadModel('user')->getPairs('noclosed|noletter'); - $this->view->stageInfo = $this->milestone->getStageDemand($programID, $projectID, $productID, $stageList); - $this->view->otherproblems = $this->milestone->otherProblemsList($programID, $projectID); - $this->view->nextMilestone = $this->milestone->getNextMilestone($programID, $projectID, $stageList); - - $this->display(); - } - - public function ajaxAddMeasures() - { - $data = fixer::input('post')->get(); - if(empty($data->projectID)) return 0; - return $this->milestone->ajaxAddMeasures($data); - } - - public function saveOtherProblem() - { - $re = $this->milestone->saveOtherProblem(); - $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess)); - } - - public function ajaxSaveEstimate() - { - $taskID = $this->post->taskID; - $estimate = $this->post->estimate; - $re = $this->milestone->ajaxSaveEstimate($taskID,$estimate); - $this->send(array('result' => 'success','message' => $this->lang->saveSuccess)); - } -} diff --git a/module/milestone/css/index.css b/module/milestone/css/index.css deleted file mode 100644 index 547b552e12..0000000000 --- a/module/milestone/css/index.css +++ /dev/null @@ -1,15 +0,0 @@ -#dropMenu .col-left .list-group {margin-bottom: 0px; } -.table, .cell{margin-bottom: 15px !important} -.main-table tbody>tr>td {position: relative; border-bottom: 0; border-bottom: 1px solid #ddd;} -.main-table tbody>tr:last-child>td {border-bottom: none;} -.cell{position: relative;} -#chartUnit {position: absolute; color: #000; top: 20px; left: 15px;} -#chartLegend {position: absolute; right: 0; width: 80px; height: 60px; top: 50%; margin-top: -30px; line-height: 30px; color: #838A9D; font-size: 12px;} -#chartLegend > div {position: relative; padding-left: 30px;} -#chartLegend > div > .barline {position: absolute; width: 20px; left: 0; top: 13px; height: 3px;} -#chartLegend .line-pv .barline{background: #1183fb} -#chartLegend .line-ev .barline{background: rgb(0, 218, 136)} -#chartLegend .line-ac .barline{background: rgb(255, 145, 0)} - -.scroll-table {overflow-x: scroll} -.scroll-table > .table {min-width:350%} diff --git a/module/milestone/lang/en.php b/module/milestone/lang/en.php deleted file mode 100644 index 9210d7efc8..0000000000 --- a/module/milestone/lang/en.php +++ /dev/null @@ -1,100 +0,0 @@ -milestone->index = 'Milestone Home'; -$lang->milestone->title = 'Milestone Report'; -$lang->milestone->common = 'Project Milestone Report'; -$lang->milestone->name = 'Milestone Name'; -$lang->milestone->stage = 'Milestone Stage'; -$lang->milestone->save = 'Save'; - -$lang->milestone->startedWeeks = 'Started Weeks'; -$lang->milestone->finishedWeeks = 'Finished Weeks'; -$lang->milestone->offset = 'Milestone Deviation'; - -$lang->milestone->processCommon = 'Project Current Status'; -$lang->milestone->process = 'Project Schedule'; -$lang->milestone->projectCost = 'Project Cost'; -$lang->milestone->toNow = 'So far'; -$lang->milestone->targetRange = 'Target Range'; -$lang->milestone->ge = 'ge'; -$lang->milestone->le = 'le'; -$lang->milestone->analysis = 'Analysis'; -$lang->milestone->PV = 'The work to be done(PV)'; -$lang->milestone->EV = 'Actual work done(EV)'; -$lang->milestone->AC = 'Actual cost(AC)'; -$lang->milestone->SPI = 'Project schedule performance(SPI)'; -$lang->milestone->CPI = 'Project cost performance(CPI)'; -$lang->milestone->SV = 'Rate of progress deviation(SV%)'; -$lang->milestone->CV = 'Cost deviation rate(CV%)'; - -$lang->milestone->workHours = 'Workload (man-hour)'; -$lang->milestone->allStage = 'Project Stage'; -$lang->milestone->devHours = 'Development Workload'; -$lang->milestone->toHours = 'Rework Workload'; -$lang->milestone->qaHours = 'Test Workload'; -$lang->milestone->rowSummary = 'Workload Subtotal'; -$lang->milestone->rowPercent = 'Percentage Distribution(%)'; -$lang->milestone->colPercent = 'Percentage of workload(%)'; -$lang->milestone->colSummary = 'Total'; -$lang->milestone->qatoDev = 'Test Development ratio'; - -$lang->milestone->projectRisk = '5.Project Risks (top five highest priority risks)'; -$lang->milestone->riskCountermove = 'Risk Countermove'; -$lang->milestone->riskDescriptio = 'Risk Description'; -$lang->milestone->riskPossibility = 'Risk Possibility'; -$lang->milestone->riskSeriousness = 'Risk Seriousness'; -$lang->milestone->riskFactor = 'Risk Factor'; -$lang->milestone->riskMeasures = 'Risk Measures'; -$lang->milestone->riskAccumulate = 'Risk Accumulate'; - -$lang->milestone->otherIssue = 'Other Issue'; -$lang->milestone->issueSolutions = 'Issue Solutions'; -$lang->milestone->issueDescription = 'Issue Description'; -$lang->milestone->needHelp = 'Help'; -$lang->milestone->issuePropose = 'Issue Propose'; - -$lang->milestone->demandStatus = '4.Customer Demand Analysis'; -$lang->milestone->storyUnit = 'Unit:Item'; -$lang->milestone->engineeringStage = 'Engineering Stage'; -$lang->milestone->rateChange = 'Rate of change in demand'; -$lang->milestone->originalStory = 'Quantity of original demand'; -$lang->milestone->modifyNumber = 'Total post-change requirements'; -$lang->milestone->changeStory = 'Number of changed requirements'; - -$lang->milestone->paogressForecast = 'Project Forecast'; -$lang->milestone->duration = 'Construction period(day)'; -$lang->milestone->cost = 'Cost(hours)'; -$lang->milestone->forecastResults = 'Forecast Results'; -$lang->milestone->plannedValue = 'Planned Value'; -$lang->milestone->predictedValue = 'Predicted Value'; -$lang->milestone->predictedValueDesc = 'Rentenformel (Germany):If the project progress performance(SPI)=0,So the predicted value=0,Otherwise,Predicted value=Planned value divided by Project schedule performance(SPI)'; -$lang->milestone->periodDeviation = 'Period Deviation'; -$lang->milestone->costDeviation = 'Cost Deviation'; -$lang->milestone->nextStage = 'Next Stage'; -$lang->milestone->overallProject = 'Overall Project'; -$lang->milestone->corrective = 'Corrective Measure'; -$lang->milestone->timeOverrun = 'The total construction time will exceed:%s day.'; -$lang->milestone->costOverrun = 'The total cost will exceed:%s unit'; -$lang->milestone->saveOtherProblem = 'Save Other Problem'; - -$lang->milestone->chart = new stdclass(); -$lang->milestone->chart->title = 'Trend Chart of project progress to date'; -$lang->milestone->chart->time = 'No'; -$lang->milestone->chart->week = 'week'; -$lang->milestone->chart->month = 'month'; -$lang->milestone->chart->workhour = 'Development Workload Analysis Chart'; - -$lang->milestone->otherproblem = '6.Other Problem'; -$lang->milestone->problemandsuggest = 'Problem and Suggest'; -$lang->milestone->suggest = 'Suggest'; -$lang->milestone->needhelp = 'Does it require high-level support?'; -$lang->milestone->prodescr = 'Problem Description'; - -$lang->milestone->quality = new stdclass(); -$lang->milestone->quality->total = 'Total'; -$lang->milestone->quality->identify = 'Defect identification phase'; -$lang->milestone->quality->injection = 'Defect injection phase'; -$lang->milestone->quality->scale = 'Scale'; -$lang->milestone->quality->identifyRate = 'Defect recognition rate'; -$lang->milestone->quality->injectionRate = 'Defect injection rate'; - -$lang->milestone->options = 'Options'; diff --git a/module/milestone/lang/zh-cn.php b/module/milestone/lang/zh-cn.php deleted file mode 100644 index 0cb32ccea8..0000000000 --- a/module/milestone/lang/zh-cn.php +++ /dev/null @@ -1,101 +0,0 @@ -milestone->index = '报告首页'; -$lang->milestone->title = '里程碑报告'; -$lang->milestone->common = '项目里程碑报告'; -$lang->milestone->name = '里程碑名称'; -$lang->milestone->stage = '里程碑阶段'; -$lang->milestone->save = '保存'; - -$lang->milestone->startedWeeks = '开始周数'; -$lang->milestone->finishedWeeks = '结束周数'; -$lang->milestone->offset = '里程碑工期偏差'; - -$lang->milestone->processCommon = '项目当前进展状况'; -$lang->milestone->process = '项目进度'; -$lang->milestone->projectCost = '项目成本'; -$lang->milestone->toNow = '到目前为止'; -$lang->milestone->targetRange = '目标控制范围'; -$lang->milestone->ge = '大于等于'; -$lang->milestone->le = '小于等于'; -$lang->milestone->analysis = '分析结果'; -$lang->milestone->PV = '计划完成的工作(PV)'; -$lang->milestone->EV = '实际完成的工作(EV)'; -$lang->milestone->AC = '实际花费的成本(AC)'; -$lang->milestone->SPI = '项目进度绩效(SPI)'; -$lang->milestone->CPI = '项目成本绩效(CPI)'; -$lang->milestone->SV = '进度偏差率(SV%)'; -$lang->milestone->CV = '成本偏差率(CV%)'; - -$lang->milestone->workHours = '工作量(人时)'; -$lang->milestone->allStage = '工程阶段'; -$lang->milestone->devHours = '研发工作量'; -$lang->milestone->toHours = '返工工作量'; -$lang->milestone->reviewHours = '评审工作量'; -$lang->milestone->qaHours = '测试工作量'; -$lang->milestone->rowSummary = '工作量小计'; -$lang->milestone->rowPercent = '分布百分比(%)'; -$lang->milestone->colPercent = '占工作量百分比(%)'; -$lang->milestone->colSummary = '总和'; -$lang->milestone->qatoDev = '测试研发比'; - -$lang->milestone->projectRisk = '5.项目风险(优先最高的前五项风险)'; -$lang->milestone->riskCountermove = '风险对策'; -$lang->milestone->riskDescriptio = '风险描述'; -$lang->milestone->riskPossibility = '可能性'; -$lang->milestone->riskSeriousness = '严重性'; -$lang->milestone->riskFactor = '风险系数'; -$lang->milestone->riskMeasures = '风险对策'; -$lang->milestone->riskAccumulate = '累积的高风险'; - -$lang->milestone->otherIssue = '其它问题'; -$lang->milestone->issueSolutions = '问题及解决建议'; -$lang->milestone->issueDescription = '问题描述'; -$lang->milestone->needHelp = '是否需要高层支持'; -$lang->milestone->issuePropose = '解决建议'; - -$lang->milestone->demandStatus = '4.用户需求状况分析'; -$lang->milestone->storyUnit = '单位:Item'; -$lang->milestone->engineeringStage = '工程阶段'; -$lang->milestone->rateChange = '需求变化率'; -$lang->milestone->originalStory = '原始需求数量'; -$lang->milestone->modifyNumber = '变更后需求总数'; -$lang->milestone->changeStory = '变更的需求数'; - -$lang->milestone->paogressForecast = '项目进展预测'; -$lang->milestone->duration = '工期(天)'; -$lang->milestone->cost = '成本(人时)'; -$lang->milestone->forecastResults = '预测结果分析'; -$lang->milestone->plannedValue = '计划值'; -$lang->milestone->predictedValue = '预测值'; -$lang->milestone->predictedValueDesc = '计算公式:如果项目进度绩效(SPI)=0,那么预测值=0,否则,预测值=计划值 除以 项目进度绩效(SPI)'; -$lang->milestone->periodDeviation = '工期偏差'; -$lang->milestone->costDeviation = '成本偏差'; -$lang->milestone->nextStage = '下一里程碑阶段'; -$lang->milestone->overallProject = '项目总体'; -$lang->milestone->corrective = '纠偏措施'; -$lang->milestone->timeOverrun = '总工期将超出:%s天。'; -$lang->milestone->costOverrun = '总成本将超出:%s个单位。'; -$lang->milestone->saveOtherProblem = '保存其他问题'; - -$lang->milestone->chart = new stdclass(); -$lang->milestone->chart->title = '到目前为止项目进展趋势图'; -$lang->milestone->chart->time = '第'; -$lang->milestone->chart->week = '周'; -$lang->milestone->chart->month = '月'; -$lang->milestone->chart->workhour = '研发工作量分析图'; - -$lang->milestone->otherproblem = '6.其它问题'; -$lang->milestone->problemandsuggest = '问题及解决建议'; -$lang->milestone->suggest = '解决建议'; -$lang->milestone->needhelp = '是否需要高层支持?'; -$lang->milestone->prodescr = '问题描述'; - -$lang->milestone->quality = new stdclass(); -$lang->milestone->quality->total = '合计'; -$lang->milestone->quality->identify = '缺陷识别阶段'; -$lang->milestone->quality->injection = '缺陷注入阶段'; -$lang->milestone->quality->scale = '规模'; -$lang->milestone->quality->identifyRate = '缺陷识别率'; -$lang->milestone->quality->injectionRate = '缺陷注入率'; - -$lang->milestone->options = '操作'; diff --git a/module/milestone/model.php b/module/milestone/model.php deleted file mode 100644 index 1bbf575ae4..0000000000 --- a/module/milestone/model.php +++ /dev/null @@ -1,606 +0,0 @@ -loadModel('programplan')->getMilestones($programID); - if(empty($milestones)) return false; - $current = zget($milestones, $projectID) ? zget($milestones, $projectID) : current($milestones); - $currentProjectID = $projectID ? $projectID : key($milestones); - $program = $this->loadModel('project')->getByID($programID); - - $selectHtml = ''; - if($program->category == 'multiple') - { - $products = $this->loadModel('product')->getPairs($programID); - $currentProductID = $productID ? $productID : $this->product->getProductIDByProject($projectID); - if(!$currentProductID) $currentProductID = key($products); - $productName = $this->dao->findByID($currentProductID)->from(TABLE_PRODUCT)->fetch('name'); - $pinYin = common::convert2Pinyin($products); - - $selectHtml .= "
"; - $selectHtml .= "" . $productName . " "; - $selectHtml .= '
'; - - $milestones = $this->loadModel('programplan')->getMilestoneByProduct($currentProductID); - $current = zget($milestones, $projectID) ? zget($milestones, $projectID) : current($milestones); - $currentProjectID = $projectID ? $projectID : key($milestones); - if(!$current) $current = $this->lang->noData; - } - - $pinYin = common::convert2Pinyin($milestones); - - $selectHtml .= "
"; - $selectHtml .= "" . $current . " "; - $selectHtml .= '
'; - return array($selectHtml, $currentProjectID); - } - - public function getBasicInfo($programID, $projectID) - { - $program = $this->loadModel('project')->getByID($programID); - $project = $this->loadModel('project')->getByID($projectID); - /* Get startedWeeks and finishedWeeks.*/ - $project->startedWeeks = $project->realStarted == '0000-00-00' ? 0 : ceil((strtotime(helper::today()) - strtotime($project->realStarted )) / 3600 / 24 / 7); - $project->finishedWeeks = $project->realFinished == '0000-00-00' ? 0 : ceil((strtotime(helper::today()) - strtotime($project->realFinished)) / 3600 / 24 / 7); - $project->offset = $project->realFinished == '0000-00-00' ? 0 : helper::diffDate($project->end, $project->realFinished); - - $basicInfo = new stdclass(); - $basicInfo->program = $program; - $basicInfo->project = $project; - return $basicInfo; - } - - public function getProcess($programID, $projectID) - { - $process = new stdclass(); - $program = $this->loadModel('project')->getByID($programID); - $project = $this->loadModel('project')->getByID($projectID); - $productID = $this->loadModel('product')->getProductIDByProject($projectID); - $projectIdList = $this->loadModel('programplan')->getProjectsByProduct($productID); - $projectBegin = $project->begin; - $projectEnd = $project->end; - $programBegin = $program->begin; - $today = helper::today(); - - $process->milestonePV = $this->getPV($projectID, $projectBegin, $projectEnd); - $process->nowPV = $this->getPV($projectIdList, $programBegin, $projectEnd); - - $process->milestoneEV = $this->getEV($projectID, $projectBegin, $projectEnd); - $process->nowEV = $this->getEV($projectIdList, $programBegin, $projectEnd); - - $process->milestoneAC = $this->getAC($projectID, $projectBegin, $projectEnd); - $process->nowAC = $this->getAC($projectIdList, $projectBegin, $projectEnd); - - $process->milestoneSPI = $process->milestonePV == 0 ? 0 : round($process->milestoneEV / $process->milestonePV, 2); - $process->nowSPI = $process->nowPV == 0 ? 0 : round($process->nowEV / $process->nowPV, 2); - - $process->milestoneCPI = $process->milestoneAC == 0 ? 0 : round($process->milestoneEV / $process->milestoneAC, 2); - $process->nowCPI = $process->nowAC == 0 ? 0 : round($process->nowEV / $process->nowAC, 2); - - $process->milestoneSV = $process->milestonePV == 0 ? 0 : round(($process->milestoneEV - $process->milestonePV) / $process->milestonePV, 2) * 100; - $process->nowSV = $process->nowPV == 0 ? 0 : round(($process->nowEV - $process->nowPV) / $process->nowPV, 2) * 100; - - $process->milestoneCV = $process->milestoneAC == 0 ? 0 : round(($process->milestoneEV - $process->milestoneAC) / $process->milestoneAC, 2) * 100; - $process->nowCV = $process->nowAC == 0 ? 0 : round(($process->nowEV - $process->nowAC) / $process->nowAC, 2) * 100; - - $process->spiMin = ''; - $process->spiMax = ''; - $process->svMin = ''; - $process->svMax = ''; - $process->cpiMin = ''; - $process->cpiMax = ''; - $process->cvMin = ''; - $process->cvMax = ''; - $process->cvMax = ''; - $process->cvMax = ''; - $process->cvMax = ''; - $process->nowSpiTip = ''; - $process->nowCpiTip = ''; - $process->milestoneSpiTip = ''; - $process->milestoneCpiTip = ''; - $spiTip = isset($this->config->custom->SPI) ? json_decode($this->config->custom->SPI->progressTip) : new stdclass(); - $svTip = isset($this->config->custom->SV) ? json_decode($this->config->custom->SV->progressTip) : new stdclass(); - $cpiTip = isset($this->config->custom->CPI) ? json_decode($this->config->custom->CPI->costTip) : new stdclass(); - $cvTip = isset($this->config->custom->CV) ? json_decode($this->config->custom->CV->costTip) : new stdclass(); - - foreach($spiTip as $tip) - { - if($tip->min <= $process->milestoneSPI and $process->milestoneSPI < $tip->max) $process->milestoneSpiTip = $tip->tip; - if($tip->min <= $process->nowSPI and $process->nowSPI < $tip->max) $process->nowSpiTip = $tip->tip; - if($tip->range) - { - $process->spiMin = $tip->min; - $process->spiMax = $tip->max; - } - } - - foreach($svTip as $tip) - { - if($tip->range) - { - $process->svMin = $tip->min; - $process->svMax = $tip->max; - } - } - - foreach($cpiTip as $tip) - { - if($tip->min <= $process->milestoneCPI and $process->milestoneCPI < $tip->max) $process->milestoneCpiTip = $tip->tip; - if($tip->min <= $process->nowCPI and $process->nowCPI < $tip->max) $process->nowCpiTip = $tip->tip; - if($tip->range) - { - $process->cpiMin = $tip->min; - $process->cpiMax = $tip->max; - } - } - - foreach($cvTip as $tip) - { - if($tip->range) - { - $process->cvMin = $tip->min; - $process->cvMax = $tip->max; - } - } - - return $process; - } - - public function getCharts($programID, $projectID) - { - $this->loadModel('weekly'); - $charts = array(); - $program = $this->loadModel('project')->getByID($programID); - $project = $this->loadModel('project')->getByID($projectID); - $productID = $this->loadModel('product')->getProductIDByProject($projectID); - $projectIdList = $this->loadModel('programplan')->getProjectsByProduct($productID); - $today = helper::today(); - $begin = $program->begin; - $projectEnd = $project->end; - $end = $today > $projectEnd ? $projectEnd : date('Y-m-d', strtotime("$today + 7 days")); - - $charts['PV'] = '['; - $charts['EV'] = '['; - $charts['AC'] = '['; - $i = 1; - $start = $begin; - while($start < $end) - { - $charts['labels'][] = $this->lang->milestone->chart->time . $i . $this->lang->milestone->chart->week; - $sunday = $this->weekly->getThisSunday($start); - $charts['PV'] .= $this->getPV($projectIdList, $begin, $sunday) . ','; - $charts['EV'] .= $this->getEV($projectIdList, $begin, $sunday) . ','; - $charts['AC'] .= $this->getAC($projectIdList, $begin, $sunday) . ','; - $start = date('Y-m-d', strtotime("$start + 7 days")); - $i ++; - } - - $charts['PV'] .= ']'; - $charts['EV'] .= ']'; - $charts['AC'] .= ']'; - - return $charts; - } - - public function getPV($projectID, $begin, $end) - { - $tasks = $this->dao->select('*')->from(TABLE_TASK) - ->where('project')->in($projectID) - ->andWhere('estStarted')->ge($begin) - ->andWhere("(estStarted < '$end' or estStarted='0000-00-00')") - ->andWhere('deleted')->eq(0) - ->fetchAll('id'); - - $PV = 0; - foreach($tasks as $task) - { - if($task->estStarted == '0000-00-00') $task->estStarted = date('Y-m-d', strtotime($task->openedDate)); - if($task->deadline < $end) - { - $PV += $task->estimate; - continue; - } - - $fullDays = $this->loadModel('holiday')->getActualWorkingDays($task->estStarted, $task->deadline); - $passedDays = $this->loadModel('holiday')->getActualWorkingDays($task->estStarted, $end); - - $PV += round(count($passedDays) * $task->estimate / count($fullDays), 2); - } - - return $PV; - } - - public function getEV($projectID, $begin, $end) - { - $tasks = $this->dao->select('*')->from(TABLE_TASK) - ->where('estStarted')->ge($begin) - ->andWhere('estStarted')->lt($end) - ->andWhere('consumed')->gt(0) - ->andWhere('status')->ne('cancel') - ->andWhere('project')->in($projectID) - ->fetchAll('id'); - - $EV = 0; - foreach($tasks as $task) - { - if($task->status == 'done' or $task->closedReason == 'done') - { - $EV += $task->estimate; - } - else - { - $task->progress = round($task->consumed / ($task->consumed + $task->left), 2) * 100; - $EV += round($task->estimate * $task->progress / 100, 2); - } - } - return $EV; - } - - public function getAC($projectID, $begin, $end) - { - $consumed = $this->dao->select('sum(t1.consumed) as consumed') - ->from(TABLE_TASKESTIMATE)->alias('t1') - ->leftJoin(TABLE_TASK)->alias('t2')->on('t1.task=t2.id') - ->where('t1.date')->ge($begin) - ->andWhere('t1.date')->lt($end) - ->andWhere('t2.project')->in($projectID) - ->fetch('consumed'); - if(!$consumed) $consumed = 0; - - return round($consumed, 2); - } - - public function getProductQuality($programID, $projectID) - { - $productID = $this->loadModel('product')->getProductIDByProject($projectID); - $stages = $this->loadModel('programplan')->getPairs($programID, $productID); - $reviews = $this->loadModel('review')->getPairs($programID, $productID); - unset($stages[0]); - foreach($reviews as $reviewID => $review) - { - foreach($stages as $stageID => $stageName) - { - $productQuality['stages'][$stageID]['total'] = 0; - $bugs = $this->dao->select("count(*) as bugs")->from(TABLE_BUG) - ->where('project')->eq($stageID) - ->andWhere('identify')->eq($reviewID) - ->andWhere('resolution')->notin('bydesign,duplicate,notrepro,willnotfix') - ->andWhere('deleted')->eq(0) - ->fetch('bugs'); - - $issues = $this->dao->select("count(*) as issues")->from(TABLE_REVIEWISSUE) - ->where('injection')->eq($stageID) - ->andWhere('review')->eq($reviewID) - ->andWhere('resolution')->notin('bydesign,duplicate,notrepro,willnotfix') - ->andWhere('deleted')->eq(0) - ->fetch('issues'); - - $productQuality['stages'][$stageID]['name'] = $stageName; - $productQuality['stages'][$stageID][$reviewID]['counts'] = ($bugs + $issues) == 0 ? '' : (int)($bugs + $issues); - //$productQuality['stages'][$stageID]['estimate'] = $this->dao->select('estimate')->from(TABLE_PROJECT)->where('id')->eq($stageID)->fetch('estimate'); - } - } - - if(isset($productQuality['stages'])) - foreach($productQuality['stages'] as $stageID => $stages) - { - $total = 0; - foreach($stages as $reviewID => $stage) $total += (int) zget($stage, 'counts', 0); - $productQuality['stages'][$stageID]['total'] = $total; - } - - $productQuality['reviews'] = $reviews; - return $productQuality; - } - - public function getWorkhours($programID, $projectID) - { - $productID = $this->loadModel('product')->getProductIDByProject($projectID); - $stages = $this->loadModel('programplan')->getPairs($programID, $productID); - unset($stages[0]); - $dev = 0; - $to = 0; - $review = 0; - $qa = 0; - foreach($stages as $stageID => $stageName) - { - $workhours[$stageID]['name'] = $stageName; - $workhours[$stageID]['dev'] = $this->getWorkhourByType($stageID, 'devel'); - $workhours[$stageID]['to'] = $this->getTo($stageID); - $workhours[$stageID]['review'] = $this->getReviewHours($stageID, $projectID); - $workhours[$stageID]['qa'] = $this->getWorkhourByType($stageID, 'test');; - $workhours[$stageID]['count'] = $workhours[$stageID]['dev'] + $workhours[$stageID]['to'] + $workhours[$stageID]['review'] + $workhours[$stageID]['qa']; - $workhours[$stageID]['qaToDev'] = ($workhours[$stageID]['dev'] + $workhours[$stageID]['to']) == 0 ? 0 : round($workhours[$stageID]['qa'] / ($workhours[$stageID]['dev'] + $workhours[$stageID]['to']), 2); - - $dev += $workhours[$stageID]['dev']; - $to += $workhours[$stageID]['to']; - $review += $workhours[$stageID]['review']; - $qa += $workhours[$stageID]['qa']; - } - - $workhours['count']['dev'] = $dev; - $workhours['count']['to'] = $to; - $workhours['count']['review'] = $review; - $workhours['count']['qa'] = $qa; - $workhours['count']['total'] = $dev + $to + $review + $qa; - - return $workhours; - } - - public function getWorkhourByType($stageID, $type) - { - $consumed = $this->dao->select('sum(consumed) as consumed')->from(TABLE_TASK)->where('project')->eq($stageID)->andWhere('type')->eq($type)->fetch('consumed'); - return round($consumed, 2); - } - - public function getReviewHours($stageID, $projectID = 0) - { - $productID = $this->loadModel('product')->getProductIDByProject($projectID); - $stage = $this->loadModel('programplan')->getByID($stageID); - $consumed = 0; - $consumed += $this->getWorkhourByType($stageID, 'review'); - $attribute = isset($this->config->milestone->{$stage->attribute}) ? $this->config->milestone->{$stage->attribute} : ''; - - $reviewConsumed = $this->dao->select('sum(t1.consumed) as consumed')->from(TABLE_REVIEWRESULT)->alias('t1') - ->leftJoin(TABLE_REVIEW)->alias('t2')->on('t1.review=t2.id') - ->leftJoin(TABLE_OBJECT)->alias('t3')->on('t2.object=t3.id') - ->where('t3.category')->in($attribute) - ->andWhere('t3.product')->eq($productID) - ->fetch('consumed'); - - $consumed += $reviewConsumed; - return round($consumed, 2); - } - - public function getTo($stageID) - { - $tasks = $this->dao->select('id, activatedDate')->from(TABLE_TASK)->where('project')->eq($stageID)->andWhere('activatedDate')->ne('0000-00-00')->fetchPairs(); - $to = 0; - foreach($tasks as $taskID => $activatedDate) - { - $consumed = $this->dao->select('sum(consumed) as consumed')->from(TABLE_TASKESTIMATE) - ->where('task')->eq($taskID) - ->andWhere('date')->ge($activatedDate) - ->fetch('consumed'); - $to += $consumed; - } - - return round($to, 2); - } - - public function getProjectRisk($programID) - { - return $this->dao->select('*,riskindex * 1 as riskindex')->from(TABLE_RISK) - ->where('status')->eq('active') - ->andWhere('program')->eq($programID) - ->andWhere('deleted')->eq(0) - ->orderBy('riskindex_desc') - ->limit(5) - ->fetchAll(); - } - - public function getStageDemand($programID, $projectID, $productID, $stageList = array()) - { - $productList = array(); - foreach($stageList as $stageID => $name) $productList[$stageID] = $productID; - $stages = $this->loadModel('programplan')->getPlans($programID, $productID); - - $originStory = array(); - $afterStory = array(); - $changeStory = array(); - - foreach($stages as $id => $stage) - { - $productID = $productList[$id]; - if($productID === 0) continue; - - $originStory[$id] = $this->dao->select('count(id) as total')->from(TABLE_STORY) - ->where('product')->eq($productID) - ->andWhere('type')->eq('requirement') - ->andWhere('openedDate')->between($stage->begin, $stage->end) - ->fetch('total'); - - $afterStory[$id] = $this->dao->select('count(id) as total')->from(TABLE_STORY) - ->where('product')->eq($productID) - ->andWhere('type')->eq('requirement') - ->andWhere('openedDate')->between($stage->begin, $stage->end) - ->andWhere('deleted')->eq(0) - ->fetch('total'); - - $sql = 'select count(id) as total from ' . TABLE_STORY; - $sql .= ' where (product = ' . $productID . ' and type = "requirement" and openedDate between "' . $stage->begin . '" and "' . $stage->end . '" and deleted = "1")'; - $sql .= ' or (product = ' . $productID . ' and type = "requirement" and openedDate between "' . $stage->begin . '" and "' . $stage->end . '" and version > 1)'; - $changeStory[$id] = $this->dao->query($sql)->fetch(); - - foreach($stage->children as $stage) - { - $id = $stage->id; - $productID = $productList[$id]; - if($productID === 0) continue; - - $originStory[$id] = $this->dao->select('count(id) as total')->from(TABLE_STORY) - ->where('product')->eq($productID) - ->andWhere('type')->eq('requirement') - ->andWhere('openedDate')->between($stage->begin, $stage->end) - ->fetch('total'); - - $afterStory[$id] = $this->dao->select('count(id) as total')->from(TABLE_STORY) - ->where('product')->eq($productID) - ->andWhere('type')->eq('requirement') - ->andWhere('openedDate')->between($stage->begin, $stage->end) - ->andWhere('deleted')->eq(0) - ->fetch('total'); - - $sql = 'select count(id) as total from ' . TABLE_STORY; - $sql .= ' where (product = ' . $productID . ' and type = "requirement" and openedDate between "' . $stage->begin . '" and "' . $stage->end . '" and deleted = "1")'; - $sql .= ' or (product = ' . $productID . ' and type = "requirement" and openedDate between "' . $stage->begin . '" and "' . $stage->end . '" and version > 1)'; - $changeStory[$id] = $this->dao->query($sql)->fetch(); - } - } - - $stageInfo = array('origin' => array(), 'after' => array(), 'change' => array()); - $beginID = 0; - - foreach($stageList as $key => $stage) - { - $beginID === 0 ? $stageInfo['origin'][$key] = $originStory[$key] : $stageInfo['origin'][$key] = $afterStory[$beginID]; - $stageInfo['after'][$key] = $afterStory[$key]; - $stageInfo['change'][$key] = $changeStory[$key]->total; - $beginID = $key; - } - - return $stageInfo; - } - - public function getMeasures($programID, $projectID) - { - if(empty($projectID)) return array(); - return $this->dao->select('id,contents')->from(TABLE_SOLUTIONS) - ->where('program')->eq($programID) - ->andWhere('project')->eq($projectID) - ->andWhere('type')->eq('measures') - ->andWhere('deleted')->eq(0) - ->fetchPairs('id', 'contents'); - } - - public function ajaxAddMeasures($data) - { - $this->dao->update(TABLE_SOLUTIONS) - ->set('deleted')->eq(1) - ->where('program')->eq($data->programID) - ->andWhere('project')->eq($data->projectID) - ->andWhere('type')->eq('measures') - ->exec(); - - foreach($data->measures as $item) - { - $item = trim($item); - if(empty($item)) continue; - - $addData = new stdClass(); - $addData->program = $data->programID; - $addData->project = $data->projectID; - $addData->contents = $item; - $addData->type = 'measures'; - $addData->addedBy = $this->app->user->account; - $addData->addedDate = helper::now(); - $addData->deleted = 0; - - $this->dao->insert(TABLE_SOLUTIONS)->data($addData)->autoCheck()->exec(); - } - return 1; - } - - public function saveOtherProblem() - { - $data = fixer::input('post')->get(); - - $this->dao->update(TABLE_SOLUTIONS) - ->set('deleted')->eq(1) - ->where('program')->eq($data->programID) - ->andWhere('project')->eq($data->projectID) - ->andWhere('type')->eq('otherproblem') - ->exec(); - - foreach($data->contents as $key => $contents){ - $addData = new stdClass(); - $addData->program = $data->programID; - $addData->project = $data->projectID; - $addData->contents = $contents; - $addData->support = $data->support[$key]; - $addData->measures = $data->measures[$key]; - $addData->type = 'otherproblem'; - $addData->addedBy = $this->app->user->account; - $addData->addedDate = helper::now(); - $addData->deleted = 0; - - $this->dao->insert(TABLE_SOLUTIONS)->data($addData)->autoCheck()->exec(); - } - } - - public function otherProblemsList($programID,$projectID) - { - $list = $this->dao->select('*') - ->from(TABLE_SOLUTIONS) - ->where('program')->eq($programID) - ->andWhere('project')->eq($projectID) - ->andWhere('type')->eq('otherproblem') - ->andWhere('deleted')->eq(0) - ->fetchAll(); - - return $list; - } - - public function getNextMilestone($programID, $projectID, $stageList) - { - $nextID = $this->dao->select('min(id) as id')->from(TABLE_PROJECT) - ->where('id')->gt($projectID) - ->andWhere('program')->eq($programID) - ->andWhere('milestone')->eq(1) - ->fetch('id'); - - $stageID = array_keys($stageList); - $nextID = in_array($nextID, $stageID) ? $nextID : 0; - - $totalDays = $this->dao->select('sum(days) as days')->from(TABLE_PROJECT) - ->where('id')->in($stageID) - ->andWhere('program')->eq($programID) - ->andWhere('deleted')->eq(0) - ->fetch('days'); - - $totalHours = $this->dao->select('sum(days * hours) as totalHours')->from(TABLE_TEAM) - ->where('root')->in($stageID) - ->fetch('totalHours'); - - $nextHours = 0; - $nextDays = 0; - if($nextID) - { - $nextDays = $this->dao->select('days')->from(TABLE_PROJECT) - ->where('id')->eq($nextID) - ->andWhere('program')->eq($programID) - ->andWhere('deleted')->eq(0) - ->fetch('days'); - - $nextHours = $this->dao->select('sum(days * hours) as totalHours')->from(TABLE_TEAM) - ->where('root')->eq($nextID) - ->fetch('totalHours'); - } - - $result = new stdClass(); - $result->nextDays = empty($nextDays) ? 0 : $nextDays; - $result->nextHours = empty($nextHours) ? 0 : $nextHours; - $result->totalDays = empty($totalDays) ? 0 : $totalDays; - $result->totalHours = empty($totalHours) ? 0 : $totalHours; - return $result; - } - - public function ajaxSaveEstimate($taskID,$estimate) - { - $this->dao->update(TABLE_PROJECT) - ->set('estimate') - ->eq($estimate) - ->where('id')->eq($taskID) - ->exec(); - - if(dao::isError()) - { - echo js::error(dao::getError()); - } - } -} diff --git a/module/milestone/view/basicinfo.html.php b/module/milestone/view/basicinfo.html.php deleted file mode 100644 index 2217674534..0000000000 --- a/module/milestone/view/basicinfo.html.php +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - -
milestone->common;?>program->name;?>program->name;?>program->end;?>project->end;?>
program->PM;?>program->PM);?>milestone->name;?>project->name;?>program->realFinished;?>project->realFinished;?>
milestone->startedWeeks;?>project->startedWeeks;?>milestone->finishedWeeks;?>project->finishedWeeks;?>milestone->offset;?>project->offset;?>
diff --git a/module/milestone/view/chart.html.php b/module/milestone/view/chart.html.php deleted file mode 100644 index 153f5f7b0e..0000000000 --- a/module/milestone/view/chart.html.php +++ /dev/null @@ -1,115 +0,0 @@ -
-
-
- -
-
-
project->workHour})";?>
-
- PV - EV - AC -
-
- - diff --git a/module/milestone/view/condition.html.php b/module/milestone/view/condition.html.php deleted file mode 100644 index efd3f83f99..0000000000 --- a/module/milestone/view/condition.html.php +++ /dev/null @@ -1,49 +0,0 @@ -
- - - - - - - - - - - - - - - - - - - - - ';?> - $stage):?> - - - - - - - - - - - $stage):?> - - - - -
milestone->demandStatus;?>
milestone->storyUnit;?>milestone->engineeringStage;?>milestone->rateChange;?>
milestone->originalStory;?> - -
milestone->modifyNumber;?> - $stage):?> -
milestone->changeStory;?>
-
diff --git a/module/milestone/view/index.html.php b/module/milestone/view/index.html.php deleted file mode 100644 index b2fd81d9a7..0000000000 --- a/module/milestone/view/index.html.php +++ /dev/null @@ -1,66 +0,0 @@ - - - -
-
-
- - -
- - - - - - - -
-
-
-createLink('milestone', 'ajaxAddMeasures'));?> - - -
-
-

noData;?>

-
-
- - diff --git a/module/milestone/view/otherproblem.html.php b/module/milestone/view/otherproblem.html.php deleted file mode 100644 index 983663dd01..0000000000 --- a/module/milestone/view/otherproblem.html.php +++ /dev/null @@ -1,73 +0,0 @@ -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
milestone->otherproblem;?>
milestone->problemandsuggest;?>milestone->prodescr;?>milestone->needhelp;?>milestone->suggest;?>milestone->options;?>
- - - -
- - - -
- - -
-milestone->save);?> - diff --git a/module/milestone/view/process.html.php b/module/milestone/view/process.html.php deleted file mode 100644 index fb0b230227..0000000000 --- a/module/milestone/view/process.html.php +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
milestone->processCommon;?>milestone->stage;?>milestone->toNow;?>milestone->targetRange;?>milestone->analysis;?>milestone->stage;?>milestone->toNow;?>
milestone->ge;?>milestone->le;?>
milestone->PV;?>milestonePV;?>nowPV;?>--milestone->process;?>milestoneSpiTip;?>nowSpiTip;?>
milestone->EV;?>milestoneEV;?>nowEV;?>--
milestone->AC;?>milestoneAC;?>nowAC;?>--
milestone->SPI;?>milestoneSPI;?>nowSPI;?>spiMin;?>spiMax;?>milestone->projectCost;?>milestoneCpiTip;?>nowCpiTip;?>
milestone->CPI;?>milestoneCPI;?>nowCPI;?>cpiMin;?>cpiMax;?>
milestone->SV;?>milestoneSV . '%';?>nowSV . '%';?>svMin . '%';?>svMax . '%';?>
milestone->CV;?>milestoneCV . '%';?>nowCV . '%';?>cvMin . '%';?>cvMax . '%';?>
diff --git a/module/milestone/view/productquality.html.php b/module/milestone/view/productquality.html.php deleted file mode 100644 index 0f3a12cb60..0000000000 --- a/module/milestone/view/productquality.html.php +++ /dev/null @@ -1,53 +0,0 @@ -
- - - - - - - - - - - - - - - - - - $reviewName):?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
milestone->quality->identify;?>'> - milestone->quality->injection;?>milestone->quality->scale;?>milestone->quality->identifyRate;?>
milestone->quality->total;?>
milestone->quality->injectionRate;?> -
-
diff --git a/module/milestone/view/progress.html.php b/module/milestone/view/progress.html.php deleted file mode 100644 index 6b856e6ac9..0000000000 --- a/module/milestone/view/progress.html.php +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
milestone->paogressForecast;?>milestone->duration;?>milestone->cost;?>milestone->forecastResults;?>
milestone->plannedValue;?>milestone->predictedValue;?> - - milestone->periodDeviation;?>milestone->plannedValue;?>milestone->predictedValue;?>milestone->costDeviation;?>
milestone->nextStage;?>nextDays;?> - milestoneSPI) || empty($nextMilestone->nextDays) ? 0 : round($nextMilestone->nextDays/$process->milestoneSPI, 2); - echo $nextDuration; - $nextDurationValue = $nextMilestone->nextDays - $nextDuration; - ?> - nextHours;?> - nowCPI) || empty($nextMilestone->nextHours) ? 0 : round($nextMilestone->nextHours/$process->milestoneCPI); - echo $nextCost; - $nextCostValue = $nextMilestone->nextHours - $nextCost; - ?> - - milestone->timeOverrun, abs($nextDurationValue)); - if($nextCostValue < 0) echo sprintf($lang->milestone->costOverrun, abs($nextCostValue)); - ?> -
milestone->overallProject;?>totalDays;?> - milestoneSPI) || empty($nextMilestone->totalDays) ? 0 : round($nextMilestone->totalDays/$process->milestoneSPI, 2); - echo $totalDuration; - $totalDurationValue = $nextMilestone->totalDays - $totalDuration; - ?> - totalHours;?> - nowCPI) || empty($nextMilestone->totalHours) ? 0 : round($nextMilestone->totalHours/$process->nowCPI, 2); - echo $totalCost; - $totalCostValue = $nextMilestone->totalHours - $totalCost; - ?> - - milestone->timeOverrun, abs($totalDurationValue)); - if($totalCostValue < 0) echo sprintf($lang->milestone->costOverrun, abs($totalCostValue)); - ?> -
diff --git a/module/milestone/view/projectrisk.html.php b/module/milestone/view/projectrisk.html.php deleted file mode 100644 index 824f0399b2..0000000000 --- a/module/milestone/view/projectrisk.html.php +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
milestone->projectRisk;?>
milestone->riskCountermove;?>milestone->riskDescriptio;?>milestone->riskPossibility;?>milestone->riskSeriousness;?>milestone->riskFactor;?>milestone->riskMeasures;?>
milestone->riskAccumulate;?>name;?>impact;?>probability;?>riskindex;?>prevention;?>
diff --git a/module/milestone/view/rectifying.html.php b/module/milestone/view/rectifying.html.php deleted file mode 100644 index 56a98ecf93..0000000000 --- a/module/milestone/view/rectifying.html.php +++ /dev/null @@ -1,42 +0,0 @@ -
- - - - - - - - - - - - - - - - - - - - - - - - - -
milestone->corrective;?> - - ', '', 'class="btn btn-link addItem" onclick="addItem(this)"');?> - ', '', 'class="btn btn-link delItem" onclick="delItem(this)"' . $delOrigin);?> - - -
milestone->corrective;?> - - ', '', 'class="btn btn-link addItem" onclick="addItem(this)"');?> - ', '', 'class="btn btn-link delItem" onclick="delItem(this)" id="delOrigin"');?> -
-
diff --git a/module/milestone/view/workhour.html.php b/module/milestone/view/workhour.html.php deleted file mode 100644 index 8e70637664..0000000000 --- a/module/milestone/view/workhour.html.php +++ /dev/null @@ -1,102 +0,0 @@ -
- - - - - - - - - - $stage):?> - - - - - - - - - $stage):?> - - - - - - - - - $stage):?> - - - - - - - - - $stage):?> - - - - - - - - - $stage):?> - - - - - - - - - $stage):?> - - - - - - - - - $stage):?> - - - - - - - - - $stage):?> - - - - - - - -
milestone->workHours;?>milestone->allStage;?>milestone->colSummary;?>milestone->colPercent;?>
milestone->devHours;?>
milestone->toHours;?>
milestone->reviewHours;?>
milestone->qaHours;?>
milestone->rowSummary;?>
milestone->rowPercent;?>100%100%
milestone->qatoDev;?>
-
-
-
-
-

milestone->chart->workhour;?>

-
-
-
- - - $stage):?> - - - - - - - - -
diff --git a/module/program/lang/en.php b/module/program/lang/en.php index d726527a92..b509d91746 100644 --- a/module/program/lang/en.php +++ b/module/program/lang/en.php @@ -104,10 +104,8 @@ $lang->program->lastIteration = 'Latest iterations'; $lang->program->ongoingStage = 'Ongoing stage'; $lang->program->scrum = 'Scrum'; $lang->program->scrumTitle = 'Scrum development full process project management'; -$lang->program->scrumDesc = 'Introduction: Iterate in small steps, release quickly
Contains function points: Project overview, iterations, plans, stories, etc.'; $lang->program->cmmi = 'CMMI'; $lang->program->cmmiTitle = 'CMMI management'; -$lang->program->cmmiDesc = 'Introduction: Standardized management by stages
Contains function points: Estimate, plan, stage, report, etc.'; $lang->program->cannotCreateChild = 'The project already has actual content and can not add subprojects directly. You can create a parent project for the current project and then add a child project under the new parent project.'; $lang->program->hasChildren = 'This project has a subproject and can not be deleted.'; $lang->program->confirmDelete = 'Do you want to delete this project?'; diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php index 7bc8390074..87de77f849 100644 --- a/module/program/lang/zh-cn.php +++ b/module/program/lang/zh-cn.php @@ -104,10 +104,8 @@ $lang->program->lastIteration = '近期迭代'; $lang->program->ongoingStage = '进行中的阶段'; $lang->program->scrum = 'Scrum'; $lang->program->scrumTitle = '敏捷开发全流程项目管理'; -$lang->program->scrumDesc = '简介:小步迭代,快速发布
包含功能点:项目概览、迭代、计划、需求等'; $lang->program->cmmi = '瀑布'; $lang->program->cmmiTitle = '瀑布式项目管理'; -$lang->program->cmmiDesc = '简介:按阶段规范化管理
包含功能点:估算、计划、阶段、报告'; $lang->program->cannotCreateChild = '该项目已经有实际的内容,无法直接添加子项目。您可以为当前项目创建一个父项目,然后在新的父项目下面添加子项目。'; $lang->program->hasChildren = '该项目有子项目存在,不能删除。'; $lang->program->confirmDelete = "您确定删除项目[%s]吗?"; diff --git a/module/program/view/ajaxgetdropmenu.html.php b/module/program/view/ajaxgetdropmenu.html.php index 9d45f158a9..08ac1a316f 100644 --- a/module/program/view/ajaxgetdropmenu.html.php +++ b/module/program/view/ajaxgetdropmenu.html.php @@ -49,9 +49,10 @@ foreach($programs as $program) ?>
@@ -27,7 +26,6 @@ '>

program->cmmi; ?>

program->cmmiTitle; ?>

-

program->cmmiDesc; ?>

diff --git a/module/upgrade/model.php b/module/upgrade/model.php index eaeef8a7bb..0a6c0d69c2 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -782,15 +782,12 @@ class upgradeModel extends model $confirmContent .= file_get_contents($xuanxuanSql); } case '12_2': $confirmContent .= file_get_contents($this->getUpgradeFile('12.2')); -<<<<<<< HEAD - case '20_0': $confirmContent .= file_get_contents($this->getUpgradeFile('20.0')); -======= case '12_3': case '12_3_1': case '12_3_2': $confirmContent .= file_get_contents($this->getUpgradeFile('12.3.2')); case '12_3_3': $confirmContent .= file_get_contents($this->getUpgradeFile('12.3.3')); case '12_4': $confirmContent .= file_get_contents($this->getUpgradeFile('12.4')); ->>>>>>> master + case '20_0': $confirmContent .= file_get_contents($this->getUpgradeFile('20.0')); } return str_replace('zt_', $this->config->db->prefix, $confirmContent); }