diff --git a/module/task/js/edit.js b/module/task/js/edit.js index acfd89af1a..277c580271 100644 --- a/module/task/js/edit.js +++ b/module/task/js/edit.js @@ -5,7 +5,14 @@ $(function() $('#modalTeam').on('change', 'select#team', function() { $(this).closest('tr').find('input[id^=teamEstimate]').closest('.input-group').toggleClass('required', $(this).val() != '') - }) + + var $source = $(this).siblings('[name^=source]'); + if($source.val() == '') return; + + var consumed = 0; + if($(this).val() == $source.val()) consumed = $(this).closest('tr').attr('data-consumed'); + $(this).closest('tr').find('[name^=teamConsumed]').val(consumed); + }); $('#modalTeam select:enabled').change() }) @@ -76,38 +83,6 @@ function setPreview(){} $(document).ready(function() { - /* show team menu. */ - $('[name=multiple]').change(function() - { - var checked = $(this).prop('checked'); - if(checked) - { - $('#teamTr').removeClass('hidden'); - $('.modeBox').removeClass('hidden'); - $('#mode').removeAttr('disabled').trigger('chosen:updated'); - $('#parent').val(''); - $('#parent').trigger('chosen:updated'); - $('#parent').closest('tr').addClass('hidden'); - $('#estimate').attr('disabled', 'disabled'); - $('#left').attr('disabled', 'disabled'); - - var mode = $('#mode').val(); - if((mode == 'linear' && currentUser != oldAssignedTo) || !team[currentUser]) $('[name=assignedTo]').attr('disabled', 'disabled').trigger('chosen:updated'); - } - else - { - $('#teamTr').addClass('hidden'); - $('.modeBox').addClass('hidden'); - $('#mode').attr('disabled', 'disabled').trigger('chosen:updated'); - $('#parent').closest('tr').removeClass('hidden'); - $('#estimate').removeAttr('disabled'); - $('#left').removeAttr('disabled'); - $('[name=assignedTo]').removeAttr('disabled').trigger('chosen:updated'); - } - - updateAssignedTo(); - }); - /* Init task team manage dialog */ var $taskTeamEditor = $('#taskTeamEditor').batchActionForm( { diff --git a/module/task/model.php b/module/task/model.php index 4866a10d54..1937652a41 100755 --- a/module/task/model.php +++ b/module/task/model.php @@ -816,7 +816,16 @@ class taskModel extends model } $oldTask->team = $oldTeam; - if($this->app->rawMethod == 'edit' and empty($oldTask->team) and isset($oldTask->consumed)) $currentTask->consumed += (float)$oldTask->consumed; + if($this->app->rawMethod == 'edit') + { + if(empty($oldTask->team) and isset($oldTask->consumed)) $currentTask->consumed += (float)$oldTask->consumed; + + $efforts = $this->getTaskEstimate($oldTask->id); + foreach($efforts as $effort) + { + if(!isset($members[$effort->account])) $currentTask->consumed += (float)$effort->consumed; + } + } if(!empty($task)) { @@ -990,9 +999,11 @@ class taskModel extends model $task = $this->loadModel('file')->processImgURL($task, $this->config->task->editor->edit['id'], $this->post->uid); $teams = array(); - if($this->post->multiple and count(array_filter($this->post->team)) > 1) + $changeUsers = array(); + if(count(array_filter($this->post->team)) > 1) { $this->dao->delete()->from(TABLE_TASKTEAM)->where('task')->eq($taskID)->exec(); + $oldTeams = array_values($oldTask->team); foreach($this->post->team as $row => $account) { if(empty($account)) continue; @@ -1001,7 +1012,7 @@ class taskModel extends model $member = new stdClass(); $member->task = $taskID; $member->order = $row; - $member->type = (!empty($source) and $source != $account) ? 'replace' : 'new'; + $member->type = (!empty($source) and $source != $account and !isset($oldTask->members[$account])) ? 'replace' : 'new'; $member->account = $account; $member->estimate = $this->post->teamEstimate[$row] ? $this->post->teamEstimate[$row] : 0; $member->consumed = $this->post->teamConsumed[$row] ? $this->post->teamConsumed[$row] : 0; @@ -1011,9 +1022,20 @@ class taskModel extends model $memberMethod = ($oldTask->mode == 'multi' and isset($teams[$account])) ? 'update' : 'insert'; $this->manageTaskTeam($member, $memberMethod); + /* Set effort left = 0 when linear task members be changed. */ + if($task->mode == 'linear' and isset($oldTeams[$row]) and $oldTeams[$row]->account != $account) $changeUsers[] = $oldTeams[$row]->account; + $teams[$account] = $account; } + /* Set effort left = 0 when multi task members be removed. */ + if($task->mode == 'multi') + { + $removedMembers = array_diff($oldTask->members, $teams); + $changeUsers = array_merge($changeUsers, $removedMembers); + } + if($changeUsers) $this->resetEffortLeft($taskID, $changeUsers); + if(!empty($teams)) $task = $this->computeHours4Multiple($oldTask, $task, array(), $autoStatus = false); } if(empty($teams)) $task->mode = ''; @@ -1810,6 +1832,23 @@ class taskModel extends model return $changes; } + /** + * Set effort left to 0. + * + * @param int $taskID + * @param array $members + * @access public + * @return void + */ + public function resetEffortLeft($taskID, $members) + { + $table = $this->config->edition == 'open' ? TABLE_TASKESTIMATE : TABLE_EFFORT; + $this->dao->update($table)->set('`left`')->eq(0)->where('account')->in($members) + ->beginIF($this->config->edition == 'open')->andWhere('task')->eq($taskID)->fi() + ->beginIF($this->config->edition != 'open')->andWhere('objectID')->eq($taskID)->andWhere('objectType')->eq('task')->fi() + ->exec(); + } + /** * Finish a task. * diff --git a/module/task/view/edit.html.php b/module/task/view/edit.html.php index b08085db62..6cc41feb18 100644 --- a/module/task/view/edit.html.php +++ b/module/task/view/edit.html.php @@ -20,7 +20,7 @@ consumed);?> status);?> user->account);?> -team);?> +members);?> task->confirmChangeExecution);?> team) < 6 ? 6 - count($task->team) : 1);?> @@ -66,7 +66,7 @@ foreach(explode(',', $config->task->edit->requiredFields) as $field) children) and empty($task->parent) and $task->type != 'affair'):?>
- team) ? '' : 'checked';?> /> + team) ? '' : 'checked';?> />
@@ -144,7 +144,7 @@ foreach(explode(',', $config->task->edit->requiredFields) as $field) $taskMembers = array(); if(!empty($task->team)) { - $teamAccounts = array_keys($task->team); + $teamAccounts = $task->members; foreach($teamAccounts as $teamAccount) { if(!isset($members[$teamAccount])) continue; @@ -205,8 +205,8 @@ foreach(explode(',', $config->task->edit->requiredFields) as $field) task->estimate;?> - team) or $task->parent < 0) ? "disabled='disabled'" : '';?> - estimate, "class='form-control' {$disabled}");?> + team) or $task->parent < 0) ? "readonly" : '';?> + estimate, "class='form-control' {$readonly}");?> @@ -215,10 +215,7 @@ foreach(explode(',', $config->task->edit->requiredFields) as $field) task->left;?> - - team) or $task->parent < 0) ? "disabled='disabled'" : '';?> - left, "class='form-control' {$disabled}");?> - + left, "class='form-control' {$readonly}");?> @@ -292,7 +289,7 @@ foreach(explode(',', $config->task->edit->requiredFields) as $field) if($memberStatus == 'done') $memberDisabled = true; if($memberStatus != 'wait' and $task->mode == 'linear') $linearDisabled = true; ?> - + account, "class='form-control chosen'" . ($memberDisabled ? ' disabled' : ''))?> account);?>