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)\"");?>
+
+
+
+
+
+
+ |
+
+
+
+
| project->manageProductPlan;?> |
@@ -181,6 +222,7 @@
|
+