diff --git a/module/common/view/sortable.html.php b/module/common/view/sortable.html.php index 45f3f38175..239f719745 100644 --- a/module/common/view/sortable.html.php +++ b/module/common/view/sortable.html.php @@ -18,7 +18,7 @@ $(document).ready(function() var $tbody = $(this); $tbody.sortable( { - selector: 'tr', + selector: typeof(sortSelector) == 'undefined' ? 'tr' : sortSelector, dragCssClass: 'drag-row', trigger: $tbody.find('.sort-handler').length ? '.sort-handler' : null, finish: function(e) diff --git a/module/task/js/create.js b/module/task/js/create.js index 11b86c9d76..ec6f219fdd 100644 --- a/module/task/js/create.js +++ b/module/task/js/create.js @@ -529,6 +529,11 @@ $(document).ready(function() }); }); + $('#modalTeam').on('change', 'select#team', function() + { + $(this).closest('tr').find('input[id^=teamEstimate]').closest('.input-group').toggleClass('required', $(this).val() != '') + }) + adjustButtons(); $('#showAllModule').change(function() @@ -568,38 +573,37 @@ $('#modalTeam .btn').click(function() var error = false; /* Unique team. */ + values = []; $('select[name^=team]').each(function(i) { value = $(this).val(); if(value == '') return; - $('select[name^=team]').each(function(j) + + if($.inArray(value, values) >= 0) { - if(i <= j) return; - if(value == $(this).val()) $(this).closest('tr').addClass('hidden'); - }) + $(this).closest('tr').addClass('hidden'); + return; + } + + values.push(value); }) $('select[name^=team]').closest('tr.hidden').remove(); $('select[name^=team]').each(function() { + if($(this).val() == '') return; + + var tr = $(this).closest('tr'); var account = $(this).find('option:selected').text(); - if(account != '') - { - team += ' ' + account; - } + team += ' ' + account; estimate = parseFloat($(this).parents('td').next('td').find('[name^=teamEstimate]').val()); - if(!isNaN(estimate)) + if(!isNaN(estimate) && estimate > 0) time += estimate; + if(account != '' && (isNaN(estimate) || estimate == 0)) { - time += estimate; - } - - var requiredFieldList = ',' + requiredFields + ','; - if(account && requiredFieldList.indexOf(',estimate,') >= 0 && (estimate == 0 || isNaN(estimate))) - { - alert(estimateNotEmpty); - error = true; - return false; + bootbox.alert(account + ' ' + estimateNotEmpty); + error = true; + return false; } }); @@ -607,7 +611,7 @@ $('#modalTeam .btn').click(function() var teamList = team.split(" "); if(teamList.length <= 2) { - alert(teamMemberError); + bootbox.alert(teamMemberError); return false; } else diff --git a/module/task/js/edit.js b/module/task/js/edit.js index d0571552fa..e39734afe2 100644 --- a/module/task/js/edit.js +++ b/module/task/js/edit.js @@ -1,6 +1,12 @@ $(function() { $('.record-estimate-toggle').modalTrigger({width:900, type:'iframe', afterHide: function(){parent.location.href=parent.location.href;}}); + + $('#modalTeam').on('change', 'select#team', function() + { + $(this).closest('tr').find('input[id^=teamEstimate]').closest('.input-group').toggleClass('required', $(this).val() != '') + }) + $('#modalTeam select:enabled').change() }) /** @@ -154,15 +160,17 @@ $(document).ready(function() $('#confirmButton').click(function() { /* Unique team. */ + var values = []; $('select[name^=team]').each(function(i) { value = $(this).val(); if(value == '') return; - $('select[name^=team]').each(function(j) + if($.inArray(value, values) >= 0) { - if(i <= j) return; - if(value == $(this).val()) $(this).closest('tr').addClass('hidden'); - }) + $(this).closest('tr').addClass('hidden'); + return; + } + values.push(value); }); $('select[name^=team]').closest('tr.hidden').remove(); @@ -174,24 +182,39 @@ $('#confirmButton').click(function() var error = false; $('select[name^=team]').each(function() { - if($(this).find('option:selected').text() == '') return; + if($(this).val() == '') return; memberCount++; - estimate = parseFloat($(this).parents('td').next('td').find('[name^=teamEstimate]').val()); - if(!isNaN(estimate)) totalEstimate += estimate; + var $tr = $(this).closest('tr'); + var account = $(this).find('option:selected').text(); - consumed = parseFloat($(this).parents('td').next('td').find('[name^=teamConsumed]').val()); + estimate = parseFloat($tr.find('[name^=teamEstimate]').val()); + if(!isNaN(estimate)) totalEstimate += estimate; + if(isNaN(estimate) || estimate == 0) + { + bootbox.alert(account + ' ' + estimateNotEmpty); + error = true; + return false; + } + + consumed = parseFloat($tr.find('[name^=teamConsumed]').val()); if(!isNaN(consumed)) totalConsumed += consumed; - left = parseFloat($(this).parents('td').next('td').find('[name^=teamLeft]').val()); + left = parseFloat($tr.find('[name^=teamLeft]').val()); if(!isNaN(left)) totalLeft += left; + if(!$tr.hasClass('member-done') && (isNaN(left) || left == 0)) + { + bootbox.alert(account + ' ' + estimateNotEmpty); + error = true; + return false; + } var requiredFieldList = ',' + requiredFields + ','; if(requiredFieldList.indexOf(',estimate,') >= 0 && (estimate == 0 || isNaN(estimate))) { $(this).val('').trigger("chosen:updated"); - alert(estimateNotEmpty); + bootbox.alert(estimateNotEmpty); error = true; return false; } @@ -201,13 +224,13 @@ $('#confirmButton').click(function() if(memberCount < 2) { - alert(teamMemberError); + bootbox.alert(teamMemberError); return false; } if(totalLeft == 0 && (taskStatus == 'doing' || taskStatus == 'pause')) { - alert(totalLeftError); + bootbox.alert(totalLeftError); return false; } diff --git a/module/task/view/edit.html.php b/module/task/view/edit.html.php index ca510701c1..8dbc43d685 100644 --- a/module/task/view/edit.html.php +++ b/module/task/view/edit.html.php @@ -27,6 +27,7 @@ task->error->teamMember);?> lang->task->error->leftEmptyAB, $this->lang->task->statusList[$task->status]));?> error->notempty, $lang->task->estimate))?> +error->notempty, $lang->task->left))?> task->edit->requiredFields);?> task->edit->requiredFields) as $field)
| account, "class='form-control chosen'")?> | + consumed > 0) $memberStatus = 'doing'; + if(strpos($task->finishedList, ",{$member->account},") !== false) $memberStatus = 'done'; + + $memberDisabled = false; + if($memberStatus == 'done') $memberDisabled = true; + ?> +||
| + account, "class='form-control chosen'" . ($memberDisabled ? ' disabled' : ''))?> + account);?> + |
task->estimate?>
- estimate, "class='form-control text-center' placeholder='{$lang->task->hour}'")?>
+ estimate, "class='form-control text-center' placeholder='{$lang->task->hour}'" . ($memberDisabled ? ' readonly' : ''))?>
task->consumed?>
consumed, "class='form-control text-center' readonly placeholder='{$lang->task->hour}'")?>
task->left?>
- left, "class='form-control text-center' placeholder='{$lang->task->hour}'")?>
+ left, "class='form-control text-center' placeholder='{$lang->task->hour}'" . ($memberDisabled ? ' readonly' : ''))?>
|
- - - + + + |