diff --git a/module/project/control.php b/module/project/control.php index df07cc71d1..a31b368c58 100755 --- a/module/project/control.php +++ b/module/project/control.php @@ -587,10 +587,8 @@ class project extends control if(!$copyProject->hasProduct) $shadow = 1; foreach($products as $product) { - foreach($product->branches as $branch) - { - $productPlans[$product->id][$branch] = $this->loadModel('productplan')->getPairs($product->id, $branch, 'noclosed', true); - } + $branches = implode(',', $product->branches); + $productPlans[$product->id] = $this->loadModel('productplan')->getPairs($product->id, $branches, 'noclosed', true); } } diff --git a/module/project/js/create.js b/module/project/js/create.js index ee7393ff6e..58dbbe7235 100644 --- a/module/project/js/create.js +++ b/module/project/js/create.js @@ -29,7 +29,7 @@ $(function() setAclList($("#parent").val()); - if(typeof(currentPlanID) == 'undefined') + if(typeof(currentPlanID) == 'undefined' && copyProjectID == 0) { $('.productsBox select[id^="products"]').each(function() { @@ -306,24 +306,6 @@ function loadBranches(product) (chosenProducts.length > 1 && model == 'waterfall') ? $('.division').removeClass('hide') : $('.division').addClass('hide'); - /* - 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().replace('required', ''); - $('.productsBox .row .col-sm-4:last').find('.input-group-addon').remove(); - $('.productsBox .row').append('
' + $html + '
'); - if($('.productsBox .row .input-group:last select').size() >= 2) $('.productsBox .row .input-group:last select:last').remove(); - $('.productsBox .row .input-group:last .chosen-container').remove(); - $('.productsBox .row .input-group:last select:first').attr('name', 'products[' + length + ']').attr('id', 'products' + length); - $('.productsBox .row .input-group:last .chosen').chosen(); - - $('[data-toggle="popover"]').popover(); - - adjustProductBoxMargin(); - } - */ - var $tableRow = $(product).closest('.table-row'); var index = $tableRow.find('select:first').attr('id').replace('products' , ''); var oldBranch = $(product).attr('data-branch') !== undefined ? $(product).attr('data-branch') : 0; diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 00cdcccc94..2b5843e509 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -339,6 +339,7 @@ $lang->project->scrum = 'Scrum'; $lang->project->waterfall = 'CMMI'; $lang->project->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.'; $lang->project->emptyPM = 'No manager'; +$lang->project->emptyBranch = 'Branch can not be empty!'; $lang->project->cannotChangeToCat = "It is not empty, so you cannot change it to a parent."; $lang->project->cannotCancelCat = "It has child projects, so you cannot unmark the parent."; $lang->project->parentBeginEnd = "Parent begin&end date: %s ~ %s"; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 378f35cebc..844de092a7 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -339,6 +339,7 @@ $lang->project->scrum = 'Scrum'; $lang->project->waterfall = 'Waterfall'; $lang->project->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.'; $lang->project->emptyPM = 'No manager'; +$lang->project->emptyBranch = 'Branch can not be empty!'; $lang->project->cannotChangeToCat = "It is not empty, so you cannot change it to a parent."; $lang->project->cannotCancelCat = "It has child projects, so you cannot unmark the parent."; $lang->project->parentBeginEnd = "Parent begin&end date: %s ~ %s"; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index 114555b75d..cd51d24993 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -339,6 +339,7 @@ $lang->project->scrum = 'Scrum'; $lang->project->waterfall = 'CMMI'; $lang->project->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.'; $lang->project->emptyPM = 'No manager'; +$lang->project->emptyBranch = 'Branch can not be empty!'; $lang->project->cannotChangeToCat = "It is not empty, so you cannot change it to a parent."; $lang->project->cannotCancelCat = "It has child projects, so you cannot unmark the parent."; $lang->project->parentBeginEnd = "Parent begin&end date: %s ~ %s"; diff --git a/module/project/lang/vi.php b/module/project/lang/vi.php index f2284e3c3f..46a718201c 100644 --- a/module/project/lang/vi.php +++ b/module/project/lang/vi.php @@ -336,6 +336,7 @@ $lang->project->scrum = 'Scrum'; $lang->project->waterfall = 'Waterfall'; $lang->project->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.'; $lang->project->emptyPM = 'No manager'; +$lang->project->emptyBranch = 'Branch can not be empty!'; $lang->project->cannotChangeToCat = "It is not empty, so you cannot change it to a parent."; $lang->project->cannotCancelCat = "It has child projects, so you cannot unmark the parent."; $lang->project->parentBeginEnd = "Parent begin&end date: %s ~ %s"; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 9a9cc0e98c..2d411b634e 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -339,6 +339,7 @@ $lang->project->scrum = 'Scrum'; $lang->project->waterfall = '瀑布'; $lang->project->cannotCreateChild = '该项目已经有实际的内容,无法直接添加子项目。您可以为当前项目创建一个父项目,然后在新的父项目下面添加子项目。'; $lang->project->emptyPM = '暂无'; +$lang->project->emptyBranch = '分支不能为空!'; $lang->project->cannotChangeToCat = "该项目已经有实际的内容,无法修改为父项目"; $lang->project->cannotCancelCat = "该项目下已经有子项目,无法取消父项目标记"; $lang->project->parentBeginEnd = "父项目起止时间:%s ~ %s"; diff --git a/module/project/model.php b/module/project/model.php index 4dfe09b2b3..8a7d1e4178 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1243,6 +1243,20 @@ class projectModel extends model } } + if($_POST['products']) + { + $topProgramID = $this->loadModel('program')->getTopByID($project->parent); + $multipleProducts = $this->loadModel('product')->getMultiBranchPairs($topProgramID); + foreach($_POST['products'] as $index => $productID) + { + if(isset($multipleProducts[$productID]) and empty($_POST['branch'][$index])) + { + dao::$errors[] = $this->lang->project->emptyBranch; + return false; + } + } + } + $program = new stdClass(); if($project->parent) { @@ -1509,12 +1523,27 @@ class projectModel extends model if(dao::isError()) return false; } + if($_POST['products']) + { + $topProgramID = $this->loadModel('program')->getTopByID($project->parent); + $multipleProducts = $this->loadModel('product')->getMultiBranchPairs($topProgramID); + foreach($_POST['products'] as $index => $productID) + { + if(isset($multipleProducts[$productID]) and empty($_POST['branch'][$index])) + { + dao::$errors[] = $this->lang->project->emptyBranch; + return false; + } + } + } + /* Judge products not empty. */ $linkedProductsCount = 0; foreach($_POST['products'] as $product) { if(!empty($product)) $linkedProductsCount++; } + if(empty($linkedProductsCount)) { dao::$errors[] = $this->lang->project->errorNoProducts; diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php index d7cde1dc6c..e1a56351b3 100755 --- a/module/project/view/create.html.php +++ b/module/project/view/create.html.php @@ -138,6 +138,47 @@ + + + + + project->manageProductPlan;?> + +
+
+
+
+ type != 'normal' and isset($branchGroups[$product->id]);?> +
'> + product->common;?> + id, "class='form-control chosen' onchange='loadBranches(this)' data-last='" . $product->id . "' data-type='" . $product->type . "'");?> +
+
+
'> +
+ product->branchName['branch'];?> + branches);?> + id]) ? $branchGroups[$product->id] : array(), $branchIdList, "class='form-control chosen' multiple onchange=\"loadPlans('#products{$i}', this)\"");?> +
+
+
+
+
+
> + product->plan;?> + id][]", isset($productPlans[$product->id]) ? $productPlans[$product->id] : array(), $product->plans, "class='form-control chosen' multiple");?> +
+ + > +
+
+
+
+ + + + + project->manageProductPlan;?> @@ -181,6 +222,7 @@ +