Merge branch dev/task-143181-144207-144206-144205-144204 of zentao/zentaopms (#9002)
This commit is contained in:
+28
-12
@@ -2774,21 +2774,10 @@ class taskModel extends model
|
||||
/* Delayed or not?. */
|
||||
$this->loadModel('holiday');
|
||||
|
||||
$task->delay = 0;
|
||||
$isNotCancel = !in_array($task->status, array('cancel', 'closed')) || ($task->status == 'closed' && !helper::isZeroDate($task->finishedDate) && $task->closedReason != 'cancel');
|
||||
$isComputeDelay = $isNotCancel && !helper::isZeroDate($task->deadline);
|
||||
$workingDays = empty($workingDays) && $isComputeDelay ? $this->holiday->getActualWorkingDays($task->deadline, $today) : $workingDays;
|
||||
if($isComputeDelay)
|
||||
{
|
||||
$endDate = helper::isZeroDate($task->finishedDate) ? $today : $task->finishedDate;
|
||||
$betweenDays = $this->holiday->getDaysBetween($task->deadline, $endDate);
|
||||
if($betweenDays)
|
||||
{
|
||||
$delayDays = array_intersect($betweenDays, $workingDays);
|
||||
$delay = !empty($delayDays) ? count($delayDays) - 1: 0;
|
||||
if($delay > 0) $task->delay = $delay;
|
||||
}
|
||||
}
|
||||
if($isComputeDelay) $task = $this->computeDelay($task, $task->deadline, $workingDays);
|
||||
|
||||
/* Story changed or not. */
|
||||
$task->needConfirm = false;
|
||||
@@ -3853,4 +3842,31 @@ class taskModel extends model
|
||||
|
||||
return $task;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算任务延期。
|
||||
* Compute task delay.
|
||||
*
|
||||
* @param object $task
|
||||
* @param string $deadline
|
||||
* @param array $workingDays
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function computeDelay(object $task, string $deadline = '', array $workingDays = array()): object
|
||||
{
|
||||
if(helper::isZeroDate($deadline)) return $task;
|
||||
|
||||
$today = helper::today();
|
||||
$endDate = helper::isZeroDate($task->finishedDate) ? $today : $task->finishedDate;
|
||||
$betweenDays = $this->loadModel('holiday')->getDaysBetween($deadline, $endDate);
|
||||
if($betweenDays)
|
||||
{
|
||||
$delayDays = array_intersect($betweenDays, $workingDays);
|
||||
$delay = !empty($delayDays) ? count($delayDays) - 1: 0;
|
||||
if($delay > 0) $task->delay = $delay;
|
||||
}
|
||||
|
||||
return $task;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2296,4 +2296,27 @@ class taskTest
|
||||
$task = $this->objectModel->processConfirmStoryChange($task);
|
||||
return !empty($task->actions) ? $task->actions : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算任务延期。
|
||||
* Compute task delay.
|
||||
*
|
||||
* @param object $task
|
||||
* @param string $deadline
|
||||
* @param array $workingDays
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function computeDelayTest(int $taskID, bool $existDeadline = true): object
|
||||
{
|
||||
$task = $this->objectModel->fetchByID($taskID);
|
||||
if(!$existDeadline) $task->deadline = '';
|
||||
if($task->status != 'done') $task->finishedDate = '';
|
||||
|
||||
$today = helper::today();
|
||||
$begin = !empty($task->deadline) && $task->deadline < $today ? $task->deadline : $today;
|
||||
$workingDays = $this->objectModel->loadModel('holiday')->getActualWorkingDays($begin, $today);
|
||||
|
||||
return $this->objectModel->computeDelay($task, $task->deadline, $workingDays);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=taskModel->computeDelay();
|
||||
cid=0
|
||||
|
||||
*/
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/task.unittest.class.php';
|
||||
|
||||
zenData('user')->gen(5);
|
||||
su('admin');
|
||||
|
||||
zenData('task')->loadYaml('task')->gen(5);
|
||||
|
||||
$taskIdList = range(1, 5);
|
||||
$taskTester = new taskTest();
|
||||
r($taskTester->computeDelayTest($taskIdList[1], true)) && p('delay') && e('1'); // 测试获取有截止日期进行中的任务延期天数
|
||||
r($taskTester->computeDelayTest($taskIdList[2], true)) && p('delay') && e('~~'); // 测试获取有截止日期已完成的任务延期天数
|
||||
r($taskTester->computeDelayTest($taskIdList[0], false)) && p('delay') && e('~~'); // 测试获取没有截止日期未开始的任务延期天数
|
||||
r($taskTester->computeDelayTest($taskIdList[3], false)) && p('delay') && e('~~'); // 测试获取有截止日期已取消的任务延期天数
|
||||
r($taskTester->computeDelayTest($taskIdList[4], false)) && p('delay') && e('~~'); // 测试获取有截止日期已关闭的任务延期天数
|
||||
@@ -0,0 +1,16 @@
|
||||
title: zt_task
|
||||
author: Shuejie Tian
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: status
|
||||
range: "wait,doing,done,cancel,closed"
|
||||
- field: deadline
|
||||
range: "(-2D)-(+1D):1D"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD"
|
||||
- field: finishedDate
|
||||
range: "(-3D)-(+1D):1D"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
- field: closedReason
|
||||
range: "[]{4},cancel"
|
||||
Reference in New Issue
Block a user