Merge branch 'sprint/237_liumengyi_fixbug' into 'master'
* Fix bug #26298, #25695, #27192, #25409, #27020, #23401. See merge request easycorp/zentaopms!5262
This commit is contained in:
@@ -153,6 +153,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
$block.on('click', '.todo-form-trigger', function()
|
||||
{
|
||||
toggleForm($(this).data('trigger'));
|
||||
$('.block-todoes .commitButton').removeClass('disabled');
|
||||
});
|
||||
$form.timeSpanControl(
|
||||
{
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
foreach($modulePath as $key => $module)
|
||||
{
|
||||
$moduleTitle .= $module->name;
|
||||
if(!common::printLink('product', 'browse', "productID=$story->product&branch=$story->branch&browseType=byModule¶m=$module->id", $module->name)) echo $module->name;
|
||||
if(!common::printLink('product', 'browse', "productID=$story->product&branch=$story->branch&browseType=byModule¶m=$module->id", $module->name, '', "data-app='product'")) echo $module->name;
|
||||
if(isset($modulePath[$key + 1]))
|
||||
{
|
||||
$moduleTitle .= '/';
|
||||
|
||||
@@ -101,11 +101,11 @@ $lang->program->noProgram = 'No program.';
|
||||
$lang->program->showClosed = 'Closed programs.';
|
||||
$lang->program->tips = 'If a parent program is selected, the products under the parent program can be associated. If no program is selected for the project, a product with the same name as the project is created and associated with the project by default.';
|
||||
$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?";
|
||||
$lang->program->beginLetterParent = 'The start date of the program is < the start date of the parent program:';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program is > the finish date of the parent program:';
|
||||
$lang->program->dateExceedParent = 'The start and finish date of the program was > the start and finish date of the parent program:';
|
||||
$lang->program->beginGreateChild = 'The start date of the program is > the minimum start date of the subprogram or project:';
|
||||
$lang->program->endLetterChild = 'The finish date of the program is < the maximum finish date of the subprogram or project:';
|
||||
$lang->program->beginLetterParent = 'The start date of the program is less than the start date of the parent program:';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program is greater than the finish date of the parent program:';
|
||||
$lang->program->dateExceedParent = 'The start and finish date of the program was greater than the start and finish date of the parent program:';
|
||||
$lang->program->beginGreateChild = 'The start date of the program is greater than the minimum start date of the subprogram or project:';
|
||||
$lang->program->endLetterChild = 'The finish date of the program is less than the maximum finish date of the subprogram or project:';
|
||||
$lang->program->dateExceedChild = 'The start and finish date of the program no longer include the date scope of the subprogram or project:';
|
||||
$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed';
|
||||
$lang->program->hasChildren = 'It has child programs or projects. You cannot delete it.';
|
||||
|
||||
@@ -101,11 +101,11 @@ $lang->program->noProgram = 'No program.';
|
||||
$lang->program->showClosed = 'Closed';
|
||||
$lang->program->tips = 'If a parent program is selected, the products under the parent program can be associated. If no program is selected for the project, a product with the same name as the project is created and associated with the project by default.';
|
||||
$lang->program->confirmBatchUnlink = "Do you want to batch unlink these stakeholders?";
|
||||
$lang->program->beginLetterParent = 'The start date of the program is < the start date of the parent program:';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program is > the finish date of the parent program:';
|
||||
$lang->program->dateExceedParent = 'The start and finish date of the program was > the start and finish date of the parent program:';
|
||||
$lang->program->beginGreateChild = 'The start date of the program is > the minimum start date of the subprogram or project:';
|
||||
$lang->program->endLetterChild = 'The finish date of the program is < the maximum finish date of the subprogram or project:';
|
||||
$lang->program->beginLetterParent = 'The start date of the program is less than the start date of the parent program:';
|
||||
$lang->program->endGreaterParent = 'The finish date of the program is greater than the finish date of the parent program:';
|
||||
$lang->program->dateExceedParent = 'The start and finish date of the program was greater than the start and finish date of the parent program:';
|
||||
$lang->program->beginGreateChild = 'The start date of the program is greater than the minimum start date of the subprogram or project:';
|
||||
$lang->program->endLetterChild = 'The finish date of the program is less than the maximum finish date of the subprogram or project:';
|
||||
$lang->program->dateExceedChild = 'The start and finish date of the program no longer include the date scope of the subprogram or project:';
|
||||
$lang->program->closeErrorMessage = 'There are subprograms or projects that are not closed';
|
||||
$lang->program->hasChildren = 'The program has a child program or the project exists and can not be deleted.';
|
||||
|
||||
@@ -11,13 +11,14 @@
|
||||
#copyProjectModal a.active {border-color: #00da88; color: #00da88; background-color: #E5FFE6;}
|
||||
#copyProjectModal a.active:after {position: absolute; content: '\e92f'; font-family: ZentaoIcon; font-size: 20px; right: 25px;}
|
||||
#copyProjectModal a.cancel {color: #ff5d5d;}
|
||||
#mainContent td.required:after {right: -4px;}
|
||||
#budget {border-right: 0px;}
|
||||
#budgetUnit {border-left: 0px;}
|
||||
#projectName {display: inline-block; width: 32%;}
|
||||
#productsBox a {border-radius: 2px !important;}
|
||||
#productsBox .col-sm-4 {padding-right: 5px;}
|
||||
#productsBox .addProduct {padding-left: 0px !important;}
|
||||
#productsBox .required:after{right: -6px !important;}
|
||||
#productsBox .required:after{right: -10px !important;}
|
||||
#productsBox .input-group-addon > div {display: inline-block !important;}
|
||||
#plansBox .row {display: inline-table; width: 102%;}
|
||||
#plansBox .col-sm-4 {float: none; display: inline-block; padding-right: 5px;}
|
||||
|
||||
@@ -6,3 +6,4 @@
|
||||
#endList {vertical-align: top; padding-top: 13px;}
|
||||
#dataform th {vertical-align: top; padding-top: 13px;}
|
||||
#linkPlan {padding-top: 25px !important;}
|
||||
#productsBox .row .col-sm-4.required::after {right: -5px;}
|
||||
|
||||
@@ -149,6 +149,8 @@ function setParentProgram(parentProgram)
|
||||
});
|
||||
|
||||
$('#parent').attr('data-lastSelected', parentProgram);
|
||||
if(parentProgram != '0') $('#productsBox .row .input-group:first').addClass('required');
|
||||
if(parentProgram == '0') $('#productsBox .row .input-group').removeClass('required');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -185,6 +187,9 @@ function addNewProduct(obj)
|
||||
$('#productName').removeAttr('disabled', true);
|
||||
$('#productsBox .addProduct').removeClass('hidden');
|
||||
$('#productTitle').html(productName);
|
||||
|
||||
if($('#parent').val() != '0') $('#productsBox .addProduct .input-group:first').addClass('required');
|
||||
if($('#parent').val() == '0') $('#productsBox .addProduct .input-group').removeClass('required');
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -246,7 +251,7 @@ function loadBranches(product)
|
||||
if($('#productsBox .row .input-group:last select:first').val() != 0)
|
||||
{
|
||||
var length = $('#productsBox .row .input-group').size();
|
||||
var $html = $('#productsBox .row .col-sm-4:last').html();
|
||||
var $html = $('#productsBox .row .col-sm-4:last').html().replace('required', '');
|
||||
$('#productsBox .row .col-sm-4:last').find('.input-group-addon').remove();
|
||||
$('#productsBox .row').append('<div class="col-sm-4">' + $html + '</div>');
|
||||
if($('#productsBox .row .input-group:last select').size() >= 2) $('#productsBox .row .input-group:last select:last').remove();
|
||||
|
||||
@@ -14,6 +14,10 @@
|
||||
#testStoryBox table tr td input {border: 0px;}
|
||||
#testStoryBox table tr td .input-group .input-group-addon {border-left: 1px solid #dcdcdc; border-right: 1px solid #dcdcdc;}
|
||||
#testStoryBox table button.btn {border: 0px;}
|
||||
#testStoryBox .c-name {width: 300px;}
|
||||
#testStoryBox .c-pri, #testStoryBox .c-estimate, #testStoryBox .c-actions {width: 70px;}
|
||||
#testStoryBox .c-date {width: 140px;}
|
||||
#testStoryBox .c-assignedTo {width: 100px; padding: 7px;}
|
||||
|
||||
.chosen-results > li.has-test,
|
||||
.chosen-results > li.has-new-test {position: relative; color: #388E3C;}
|
||||
|
||||
@@ -166,7 +166,7 @@ $lang->task->recordEstimateAction = 'Record Estimate';
|
||||
|
||||
$lang->task->ditto = 'Dito';
|
||||
$lang->task->dittoNotice = "Diese Aufgabe gehört nicht zum %s wie die Vorherige!";
|
||||
$lang->task->selectTestStory = 'Select Story Tested';
|
||||
$lang->task->selectTestStory = "Select {$lang->SRCommon}";
|
||||
$lang->task->selectAllUser = 'Alle';
|
||||
$lang->task->noStory = 'Keine Story';
|
||||
$lang->task->noAssigned = 'Nicht zugeordnet';
|
||||
|
||||
@@ -166,7 +166,7 @@ $lang->task->recordEstimateAction = 'Record Estimate';
|
||||
|
||||
$lang->task->ditto = 'Ditto';
|
||||
$lang->task->dittoNotice = "This Task is not linked to %s like the last one!";
|
||||
$lang->task->selectTestStory = 'Select Story Tested';
|
||||
$lang->task->selectTestStory = "Select {$lang->SRCommon}";
|
||||
$lang->task->selectAllUser = 'All Users';
|
||||
$lang->task->noStory = 'No Story Linked';
|
||||
$lang->task->noAssigned = 'Unassigned';
|
||||
|
||||
@@ -166,7 +166,7 @@ $lang->task->recordEstimateAction = 'Record Estimate';
|
||||
|
||||
$lang->task->ditto = 'Idem';
|
||||
$lang->task->dittoNotice = "Cette Tâche n'est pas associée au %s comme la précédente peut l'être !";
|
||||
$lang->task->selectTestStory = 'Select Story Testé';
|
||||
$lang->task->selectTestStory = "Select {$lang->SRCommon}";
|
||||
$lang->task->selectAllUser = 'Tous Utilis.';
|
||||
$lang->task->noStory = 'Aucune Story associée';
|
||||
$lang->task->noAssigned = 'Non affectées';
|
||||
|
||||
@@ -35,6 +35,16 @@ class taskModel extends model
|
||||
|
||||
if($this->post->selectTestStory)
|
||||
{
|
||||
foreach($this->post->testStory as $i => $storyID)
|
||||
{
|
||||
if(empty($storyID)) continue;
|
||||
if($this->post->testEstStarted[$i] > $this->post->testDeadline[$i])
|
||||
{
|
||||
dao::$errors[] = "ID: $storyID {$this->lang->task->error->deadlineSmall}";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check required fields when create test task. */
|
||||
foreach($this->post->testStory as $i => $storyID)
|
||||
{
|
||||
|
||||
@@ -122,13 +122,13 @@ foreach(explode(',', $config->task->create->requiredFields) as $field)
|
||||
<table class='table table-form mg-0 table-bordered'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<th class='w-150px'><?php echo $lang->task->storyAB;?></th>
|
||||
<th class='w-60px'><?php echo $lang->task->pri;?></th>
|
||||
<th class='w-100px'><?php echo $lang->task->estStarted;?></th>
|
||||
<th class='w-100px'><?php echo $lang->task->deadline;?></th>
|
||||
<th class='w-60px'><?php echo $lang->task->assignedTo;?></th>
|
||||
<th class='w-60px'><?php echo $lang->task->estimate;?></th>
|
||||
<th class='w-60px'><?php echo $lang->actions;?></th>
|
||||
<th class='c-name'><?php echo $lang->task->storyAB;?></th>
|
||||
<th class='c-pri'><?php echo $lang->task->pri;?></th>
|
||||
<th class='c-date'><?php echo $lang->task->estStarted;?></th>
|
||||
<th class='c-date'><?php echo $lang->task->deadline;?></th>
|
||||
<th class='c-assignedTo'><?php echo $lang->task->assignedTo;?></th>
|
||||
<th class='c-estimate'><?php echo $lang->task->estimate;?></th>
|
||||
<th class='c-actions'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="resarch">
|
||||
|
||||
Reference in New Issue
Block a user