$(document).on('#left', 'input', setTeamUser);
window.waitDom('.picker-box [name=assignedTo]', function()
{
if(taskMode == 'linear' || taskMode == 'multi')
{
$('#multiple').trigger('click');
updateAssignedTo();
computeTotalLeft();
}
});
window.manageTeam = function()
{
const showTeam = $('#multiple').is(":checked");
let $assignedToPicker = $('[name=assignedTo]').zui('picker');
$assignedToPicker.$.setValue('');
$assignedToPicker.render({items: teamItems, disabled: showTeam});
$('.multi-append').empty();
$('.member-done').find('input[name^=teamLeft]').val(0);
$('#left').val('');
if(showTeam)
{
$('#left').attr('readonly', true);
$('.team-group').removeClass('hidden');
}
else
{
$('#left').removeAttr('readonly');
$('.team-group').addClass('hidden');
}
if(taskMode == 'multi') disableMembers();
}
/**
* 设置团队成员。
* Set team members.
*
* @access public
* @return void
*/
function setTeamUser()
{
$('.multi-append').empty();
const assignedTo = $('[name=assignedTo]').val();
const estimate = parseInt($('#left').val());
if(!assignedTo || !estimate) return;
if(taskMode == 'multi')
{
$('.member-done').each(function()
{
if($(this).find('[name^team]').val() == assignedTo) $(this).find('input[name^=teamLeft]').val(estimate);
});
}
else
{
let teamLine = '';
teamLine += '';
teamLine += '';
teamLine += '';
teamLine += '';
$('.multi-append').html(teamLine);
}
}
/**
* 检查团队成员数量。
* Check the number of team members.
*
* @access public
* @return void
*/
$(document).off('click', '#confirmButton').on('click', '#confirmButton', function()
{
let memberCount = '';
let totalEstimate = 0;
let totalConsumed = oldConsumed;
let totalLeft = 0;
let error = false;
$('.picker-box [name^=team]').each(function()
{
if($(this).val() == '') return;
memberCount++;
let $tr = $(this).closest('tr');
let account = $tr.find('.picker-single-selection').text();
let estimate = parseFloat($tr.find('[name^=teamEstimate]').val());
if(!isNaN(estimate)) totalEstimate += estimate;
if($tr.hasClass('member-wait') && (isNaN(estimate) || estimate <= 0))
{
zui.Modal.alert(account + ' ' + estimateNotEmpty);
error = true;
return false;
}
let consumed = parseFloat($tr.find('[name^=teamConsumed]').val());
if(!isNaN(consumed)) totalConsumed += consumed;
let $left = $tr.find('[name^=teamLeft]');
let left = parseFloat($left.val());
if(!isNaN(left)) totalLeft += left;
if(!$left.prop('readonly') && $tr.hasClass('member-wait') && (isNaN(left) || left <= 0))
{
zui.Modal.alert(account + ' ' + leftNotEmpty);
error = true;
return false;
}
});
if(error) return false;
if(memberCount < 2)
{
zui.Modal.alert(teamMemberError);
return false;
}
$('#left').val(totalLeft);
updateAssignedTo();
zui.Modal.hide();
});
/**
* 更新指派人。
* Update assignedTo.
*
* @access public
* @return void
*/
function updateAssignedTo()
{
const multiple = $('#multiple').is(":checked");
let assignedTo = $('[name=assignedTo]').val();
let $assignedToPicker = $('[name=assignedTo]').zui('picker');
if(multiple)
{
let isTeamMember = false;
let mode = $('#mode').val();
let assignedToItems = new Array();
let index = 0;
$('.picker-box [name^=team]').each(function()
{
let $tr = $(this).closest('tr');
let realName = $tr.find('.picker-single-selection').text();
if(realName == '') return;
let account = $(this).val();
assignedToItems[index] = {'value': account, 'text': realName};
index ++;
});
if(multiple && mode == 'linear' && $('#modalTeam tr.member-doing').length == 0 && $('#modalTeam tr.member-wait').length >= 1)
{
index --;
assignedTo = assignedToItems.includes(index) ? assignedToItems[index].value : '';
}
$assignedToPicker.render({items: assignedToItems, disabled: true});
}
else
{
$assignedToPicker.render({items: memberItems});
}
$assignedToPicker.$.setValue(assignedTo);
}
function computeTotalLeft()
{
let totalLeft = 0;
$('tr.member').each(function()
{
let $leftBox = $(this).find('[name^=teamLeft]');
let left = parseFloat($leftBox.val());
if(!isNaN(left)) totalLeft += left;
});
$('#left').val(totalLeft);
}
$('#teamTable').on('change', '.picker-box [name^=team]', function()
{
disableMembers();
let $teamSource = $(this).siblings('[name^=teamSource]');
if($teamSource.val() == '') return;
let $tr = $(this).closest('tr');
let consumed = 0;
let estimate = $tr.attr('data-left');;
if($(this).val() == $teamSource.val())
{
consumed = $tr.attr('data-consumed');
estimate = $tr.attr('data-estimate');
}
$tr.find('[name^=teamConsumed]').val(consumed);
$tr.find('[name^=teamEstimate]').val(estimate);
});
window.clickSubmit = function()
{
if(isMultiple)
{
var multiple = $('#multiple').is(":checked");
if(!multiple)
{
var assignedTo = $('[name=assignedTo]').val();
if(!assignedTo)
{
zui.Modal.alert(teamNotEmpty);
return false;
}
}
var estimate = parseFloat($('#left').val());
if(isNaN(estimate) || estimate <= 0)
{
zui.Modal.alert(multiple ? teamLeftEmpty : leftNotEmpty);
return false;
}
$('#assignedTo').val('');
}
}
window.renderRowData = function($row, index, row)
{
$row.addClass('member member-' + (row ? row.status : 'wait'));
$row.attr('data-estimate', row ? row.teamEstimate : 0);
$row.attr('data-consumed', row ? row.teamConsumed : 0);
$row.attr('data-left', row ? row.teamLeft : 0);
if(row && row.memberDisabled)
{
$row.find('[data-name=team]').find('.picker-box').on('inited', function(e, info)
{
const $team = info[0];
$team.render({disabled: true});
})
$row.find('[data-name=ACTIONS]').find('[data-type=delete]').remove();
}
if(row && row.hourDisabled)
{
$row.find('[name^=teamEstimate]').attr('readonly', 'readonly');
$row.find('[name^=teamLeft]').attr('readonly', 'readonly');
}
$row.find('[name^=teamConsumed]').attr('readonly', 'readonly');
$row.find('[data-name=id]').addClass('center').html("" + $row.find('[data-name=id]').text() + "");
}