diff --git a/module/task/control.php b/module/task/control.php index f9a8a9dc9d..697354a001 100755 --- a/module/task/control.php +++ b/module/task/control.php @@ -1880,6 +1880,16 @@ class task extends control if(!isset($this->view->members[$this->view->task->finishedBy])) $this->view->members[$this->view->task->finishedBy] = $this->view->task->finishedBy; + if(!empty($this->view->task->team)) + { + $teamAccounts = array_column($this->view->task->team, 'account'); + $teamMembers = array(); + foreach($this->view->members as $account => $name) + { + if(!$account or in_array($account, $teamAccounts)) $teamMembers[$account] = $name; + } + $this->view->teamMembers = $teamMembers; + } $this->view->title = $this->view->execution->name . $this->lang->colon . $this->lang->task->activate; $this->view->position[] = $this->lang->task->activate; $this->view->users = $this->loadModel('user')->getPairs('noletter'); diff --git a/module/task/js/activate.js b/module/task/js/activate.js index 6f3b085f86..9a167a2093 100644 --- a/module/task/js/activate.js +++ b/module/task/js/activate.js @@ -1,56 +1,147 @@ -$('#confirmButton').click(function() +$(function() { - var memberCount = ''; - var totalEstimate = 0; - var totalConsumed = oldConsumed; - var totalLeft = 0; - var error = false; - $('select[name^=team]').each(function() + $('#confirmButton').click(function() { - if($(this).val() == '') return; - - memberCount++; - - var $tr = $(this).closest('tr'); - var account = $(this).find('option:selected').text(); - - var estimate = parseFloat($tr.find('[name^=teamEstimate]').val()); - if(!isNaN(estimate)) totalEstimate += estimate; - if($tr.hasClass('member-wait') && (isNaN(estimate) || estimate <= 0)) + var memberCount = ''; + var totalEstimate = 0; + var totalConsumed = oldConsumed; + var totalLeft = 0; + var error = false; + $('select[name^=team]').each(function() { - bootbox.alert(account + ' ' + estimateNotEmpty); - error = true; + if($(this).val() == '') return; + + memberCount++; + + var $tr = $(this).closest('tr'); + var account = $(this).find('option:selected').text(); + + var estimate = parseFloat($tr.find('[name^=teamEstimate]').val()); + if(!isNaN(estimate)) totalEstimate += estimate; + if($tr.hasClass('member-wait') && (isNaN(estimate) || estimate <= 0)) + { + bootbox.alert(account + ' ' + estimateNotEmpty); + error = true; + return false; + } + + var consumed = parseFloat($tr.find('[name^=teamConsumed]').val()); + if(!isNaN(consumed)) totalConsumed += consumed; + + var $left = $tr.find('[name^=teamLeft]'); + var left = parseFloat($left.val()); + if(!isNaN(left)) totalLeft += left; + if(!$left.prop('readonly') && $tr.hasClass('member-wait') && (isNaN(left) || left <= 0)) + { + bootbox.alert(account + ' ' + leftNotEmpty); + error = true; + return false; + } + }) + + if(error) return false; + + if(memberCount < 2) + { + bootbox.alert(teamMemberError); return false; } - var consumed = parseFloat($tr.find('[name^=teamConsumed]').val()); - if(!isNaN(consumed)) totalConsumed += consumed; + $('#left').val(totalLeft); + updateAssignedTo(); - var $left = $tr.find('[name^=teamLeft]'); - var left = parseFloat($left.val()); - if(!isNaN(left)) totalLeft += left; - if(!$left.prop('readonly') && $tr.hasClass('member-wait') && (isNaN(left) || left <= 0)) - { - bootbox.alert(account + ' ' + leftNotEmpty); - error = true; - return false; - } - }) + $('.close').click(); + }); - if(error) return false; - - if(memberCount < 2) + $('#multiple').on('click', function() { - bootbox.alert(teamMemberError); - return false; - } + var showTeam = $(this).is(":checked"); + $('#assignedTo').val(''); + $('#left').val(''); + $('#dataPlanGroup').removeClass('required'); + $('.multi-append').empty(); + $('.teamTemplate select, .teamTemplate input').val(''); + $('.teamTemplate input[name^=teamConsumed]').val('0'); + $('.teamTemplate select').trigger('chosen:updated'); - $('#left').val(totalLeft); - updateAssignedTo(); + /* Reset team modal. */ + var oldTeamCount = $('#taskTeamEditor select:disabled').length; + var removeCount = oldTeamCount > 6 ? 1 : (5 - oldTeamCount); + $('#taskTeamEditor tr.teamTemplate').filter(':gt(' + removeCount + ')').remove(); - $('.close').click(); + /* Reset assignedTo select.*/ + $('#assignedTo_chosen').remove(); + $('#assignedTo').replaceWith(assignedToHtml); + + if(showTeam) + { + $('#assignedTo').attr('disabled', true); + $('#left').attr('readonly', true); + $('.team-group').removeClass('hidden'); + } + else + { + $('.team-group').addClass('hidden'); + $('#assignedTo').removeAttr('disabled'); + $('#left').removeAttr('readonly'); + $('#dataPlanGroup').addClass('required'); + } + $('#assignedTo').chosen(); + $('#assignedTo').trigger('chosen:updated'); + }); + + $('#assignedTo').on('change', setTeamUser); + $('#left').on('input', setTeamUser); + + $('#submit').on('click', function() + { + if(isMultiple) + { + var multiple = $('#multiple').is(":checked"); + if(!multiple) + { + var assignedTo = $('#assignedTo').val(); + if(!assignedTo) + { + bootbox.alert(teamNotEmpty); + return false; + } + } + + var estimate = parseInt($('#left').val()); + if(isNaN(estimate) || estimate <= 0) + { + bootbox.alert(multiple ? teamLeftEmpty : leftNotEmpty); + return false; + } + + $('#assignedTo').val(''); + } + }); }); +/** + * Set team user form. + * + * @access public + * @return void + */ +function setTeamUser() +{ + $('.multi-append').empty(); + + var assignedTo = $('#assignedTo').val(); + var estimate = parseInt($('#left').val()); + if(!assignedTo || !estimate) return; + + var teamLine = ''; + teamLine += ''; + teamLine += ''; + teamLine += ''; + teamLine += ''; + $('.multi-append').html(teamLine); +} + /** * Update assignedTo. * diff --git a/module/task/lang/de.php b/module/task/lang/de.php index b3720fefeb..001b5e5e34 100644 --- a/module/task/lang/de.php +++ b/module/task/lang/de.php @@ -60,6 +60,7 @@ $lang->task->replace = 'Replace'; $lang->task->myEffort = 'My Effort'; $lang->task->allEffort = 'Team Effort'; $lang->task->teamOrder = 'Order'; +$lang->task->manageTeam = 'Manage Team'; $lang->task->unfoldEffort = 'Unfold Effort'; $lang->task->foldEffort = 'Fold Effort'; @@ -280,6 +281,7 @@ $lang->task->error->date = 'The date should be <= today.'; $lang->task->error->leftEmptyAB = 'When the task status is %s, "Hours Left" cannot be 0'; $lang->task->error->leftEmpty = 'Task#%sWhen the task status is %s, "Left" cannot be 0'; $lang->task->error->notempty = '%s must be > 0.'; +$lang->task->error->teamLeftEmpty = 'Please maintain team hours.'; /* Report. */ $lang->task->report = new stdclass(); diff --git a/module/task/lang/en.php b/module/task/lang/en.php index ddc4bf0f41..fdd5f404e3 100755 --- a/module/task/lang/en.php +++ b/module/task/lang/en.php @@ -60,6 +60,7 @@ $lang->task->replace = 'Replace'; $lang->task->myEffort = 'My Effort'; $lang->task->allEffort = 'Team Effort'; $lang->task->teamOrder = 'Order'; +$lang->task->manageTeam = 'Manage Team'; $lang->task->unfoldEffort = 'Unfold Effort'; $lang->task->foldEffort = 'Fold Effort'; @@ -280,6 +281,7 @@ $lang->task->error->date = 'The date should be <= today.'; $lang->task->error->leftEmptyAB = 'When the task status is %s, "Hours Left" cannot be 0'; $lang->task->error->leftEmpty = 'Task#%sWhen the task status is %s, "Left" cannot be 0'; $lang->task->error->notempty = '%s must be > 0.'; +$lang->task->error->teamLeftEmpty = 'Please maintain team hours.'; /* Report. */ $lang->task->report = new stdclass(); diff --git a/module/task/lang/fr.php b/module/task/lang/fr.php index 71702d9d58..8c5c49092d 100644 --- a/module/task/lang/fr.php +++ b/module/task/lang/fr.php @@ -60,6 +60,7 @@ $lang->task->replace = 'Replace'; $lang->task->myEffort = 'My Effort'; $lang->task->allEffort = 'Team Effort'; $lang->task->teamOrder = 'Order'; +$lang->task->manageTeam = 'Manage Team'; $lang->task->unfoldEffort = 'Unfold Effort'; $lang->task->foldEffort = 'Fold Effort'; @@ -280,6 +281,7 @@ $lang->task->error->date = 'The date should be <= today.'; $lang->task->error->leftEmptyAB = 'When the task status is %s, "Hours Left" cannot be 0'; $lang->task->error->leftEmpty = 'Task#%sWhen the task status is %s, "Left" cannot be 0'; $lang->task->error->notempty = '%s must be > 0.'; +$lang->task->error->teamLeftEmpty = 'Please maintain team hours.'; /* Report. */ $lang->task->report = new stdclass(); diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index 6ac005446c..9b456371b7 100755 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -60,6 +60,7 @@ $lang->task->replace = '替换'; $lang->task->myEffort = '我的日志'; $lang->task->allEffort = '团队日志'; $lang->task->teamOrder = '工序'; +$lang->task->manageTeam = '维护团队'; $lang->task->unfoldEffort = '展开日志'; $lang->task->foldEffort = '收起日志'; @@ -280,6 +281,7 @@ $lang->task->error->date = '日期不能大于今天'; $lang->task->error->leftEmptyAB = '任务状态为%s时,预计剩余不能为0'; $lang->task->error->leftEmpty = 'Task#%s任务状态为%s时,剩余不能为0'; $lang->task->error->notempty = '%s必须大于0。'; +$lang->task->error->teamLeftEmpty = '请维护团队工时。'; /* Report. */ $lang->task->report = new stdclass(); diff --git a/module/task/view/activate.html.php b/module/task/view/activate.html.php index 1e76423712..df0abf3d00 100644 --- a/module/task/view/activate.html.php +++ b/module/task/view/activate.html.php @@ -17,9 +17,15 @@ user->account);?> task->error->teamMember);?> +task->error->teamLeftEmpty);?> lang->task->error->leftEmptyAB, $this->lang->task->statusList[$task->status]));?> task->error->notempty, $lang->task->estimate))?> task->error->notempty, $lang->task->left))?> +error->notempty, $lang->task->assignedTo))?> +team);?> + +mode);?> +