Merge branch ztflow-wangyuting-dev/bug-63028#wangyuting of zentao/zentaopms (#9412)
This commit is contained in:
@@ -958,4 +958,25 @@ class programplanModel extends model
|
||||
}
|
||||
return $tasks;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据阶段的开始和结束,计算工作日。
|
||||
* Calc stage days by stage begin and end.
|
||||
*
|
||||
* @param string $start
|
||||
* @param string $end
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function calcDaysForStage(string $start, string $end): int
|
||||
{
|
||||
$weekend = $this->config->execution->weekend;
|
||||
$days = range(strtotime($start), strtotime($end), 86400);
|
||||
foreach($days as $key => $day)
|
||||
{
|
||||
$weekDay = date('N', $day);
|
||||
if(($weekend == 2 && $weekDay == 6) || $weekDay == 7) unset($days[$key]);
|
||||
}
|
||||
return count($days);
|
||||
}
|
||||
}
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 programplanModel->calcDaysForStage();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 测试计算2025-01-01到2025-01-01期间的工作日。 @1
|
||||
- 测试计算2025-01-01到2025-01-05期间的工作日。 @4
|
||||
- 测试计算2025-01-01到2025-01-10期间的工作日。 @9
|
||||
- 测试计算2025-01-01到3025-01-01期间的工作日。 @313066
|
||||
- 测试计算非正常日期字符串的工作日。 @1
|
||||
- 测试计算非正常日期字符串的工作日。 @1
|
||||
- 测试计算2025-01-01到2025-01-01期间的工作日。 @1
|
||||
- 测试计算2025-01-01到2025-01-05期间的工作日。 @3
|
||||
- 测试计算2025-01-01到2025-01-10期间的工作日。 @8
|
||||
- 测试计算2025-01-01到3025-01-01期间的工作日。 @260888
|
||||
- 测试计算非正常日期字符串的工作日。 @1
|
||||
- 测试计算非正常日期字符串的工作日。 @1
|
||||
|
||||
*/
|
||||
|
||||
global $tester, $config;
|
||||
$tester->loadModel('programplan');
|
||||
|
||||
$config->execution->weekend = 1;
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-01')) && p() && e('1'); // 测试计算2025-01-01到2025-01-01期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-05')) && p() && e('4'); // 测试计算2025-01-01到2025-01-05期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-10')) && p() && e('9'); // 测试计算2025-01-01到2025-01-10期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '3025-01-01')) && p() && e('313066'); // 测试计算2025-01-01到3025-01-01期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('asd', 'dsa')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
|
||||
r($tester->programplan->calcDaysForStage('0', '1')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
|
||||
|
||||
$config->execution->weekend = 2;
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-01')) && p() && e('1'); // 测试计算2025-01-01到2025-01-01期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-05')) && p() && e('3'); // 测试计算2025-01-01到2025-01-05期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '2025-01-10')) && p() && e('8'); // 测试计算2025-01-01到2025-01-10期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('2025-01-01', '3025-01-01')) && p() && e('260888'); // 测试计算2025-01-01到3025-01-01期间的工作日。
|
||||
r($tester->programplan->calcDaysForStage('asd', 'dsa')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
|
||||
r($tester->programplan->calcDaysForStage('0', '1')) && p() && e('1'); // 测试计算非正常日期字符串的工作日。
|
||||
@@ -81,7 +81,7 @@ class programplanZen extends programplan
|
||||
foreach($plans as $rowID => $plan)
|
||||
{
|
||||
if(empty($parentID) and empty($oldPlans)) $plan->id = '';
|
||||
$plan->days = isset($plan->enabled) && $plan->enabled == 'on' ? $this->calcDaysForStage($plan->begin, $plan->end) : 0;
|
||||
$plan->days = isset($plan->enabled) && $plan->enabled == 'on' ? $this->programplan->calcDaysForStage($plan->begin, $plan->end) : 0;
|
||||
$plan->project = $projectID;
|
||||
$plan->order = (int)array_shift($orders);
|
||||
$plan->hasProduct = $project->hasProduct;
|
||||
@@ -158,36 +158,6 @@ class programplanZen extends programplan
|
||||
return $plans;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据阶段的开始和结束,计算工作日。
|
||||
* Calc stage days by stage begin and end.
|
||||
*
|
||||
* @param string $start
|
||||
* @param string $end
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function calcDaysForStage($start, $end)
|
||||
{
|
||||
$weekend = $this->config->execution->weekend;
|
||||
|
||||
$start = new DateTime($start);
|
||||
$end = new DateTime($end);
|
||||
$end->modify('+1 day'); // 包含结束日期
|
||||
|
||||
$interval = new DateInterval('P1D'); // 每次递增一天
|
||||
$dateRange = new DatePeriod($start, $interval, $end);
|
||||
|
||||
$days = 0;
|
||||
foreach($dateRange as $date)
|
||||
{
|
||||
if(($weekend == 2 && $date->format('N') == 6) || $date->format('N') == 7) continue;
|
||||
$days++;
|
||||
}
|
||||
|
||||
return $days;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成创建项目阶段视图数据。
|
||||
* Build create view data.
|
||||
|
||||
@@ -346,11 +346,8 @@ class task extends control
|
||||
if(!$this->loadModel('common')->checkPrivByObject('execution', $task->execution)) return $this->sendError($this->lang->execution->accessDenied, $this->createLink('execution', 'all'));
|
||||
|
||||
/* 为视图设置常用的公共变量和设置菜单为任务所属执行. Set common variables to view and set menu to the execution of the task. */
|
||||
$this->taskZen->commonAction($taskID, $vision = 'all');
|
||||
|
||||
/* 如果当前主导航是项目,则设置菜单为会话中保存的项目. Set menu to project which saved in session if current app tab is project. */
|
||||
if($this->app->tab == 'project') $this->loadModel('project')->setMenu($this->session->project);
|
||||
$this->session->project = $task->project;
|
||||
$this->taskZen->commonAction($taskID, $vision = 'all');
|
||||
|
||||
$this->session->set('executionList', $this->app->getURI(true), 'execution'); // This allow get var of session as `$_SESSION['app-execution']['executionList']`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user