* when manage a team, can select one project to copy.

* adjust the edit page.
This commit is contained in:
wangchunsheng
2012-12-17 10:26:50 +00:00
parent 711938a9dd
commit e6f2057f4d
6 changed files with 82 additions and 21 deletions

View File

@@ -880,7 +880,10 @@ class project extends control
$this->view->position = $position;
$this->view->projects = $projects;
$this->view->project = $project;
$this->view->users = $this->loadModel('user')->getPairs('noclosed,nodeleted');
$this->view->poUsers = $this->loadModel('user')->getPairs('noclosed,nodeleted,pofirst');
$this->view->pmUsers = $this->user->getPairs('noclosed,nodeleted,pmfirst');
$this->view->qdUsers = $this->user->getPairs('noclosed,nodeleted,qdfirst');
$this->view->rdUsers = $this->user->getPairs('noclosed,nodeleted,devfirst');
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->allProducts = $this->loadModel('product')->getPairs();
$this->view->linkedProducts = $linkedProducts;
@@ -1097,10 +1100,11 @@ class project extends control
* Manage members of the project.
*
* @param int $projectID
* @param int $team2Import the team to import.
* @access public
* @return void
*/
public function manageMembers($projectID = 0)
public function manageMembers($projectID = 0, $team2Import = 0)
{
if(!empty($_POST))
{
@@ -1110,17 +1114,18 @@ class project extends control
}
$this->loadModel('user');
$project = $this->project->getById($projectID);
$users = $this->user->getPairs('noclosed, nodeleted');
$users = array('' => '') + $users;
$members = $this->project->getTeamMembers($projectID);
$teams = $this->project->getTeams2Import($this->app->user->account, $projectID);
a($teams);
$project = $this->project->getById($projectID);
$users = $this->user->getPairs('noclosed, nodeleted, devfirst');
$users = array('' => '') + $users;
$currentMembers = $this->project->getTeamMembers($projectID);
$members2Import = $this->project->getMembers2Import($team2Import, array_keys($currentMembers));
$teams2Import = $this->project->getTeams2Import($this->app->user->account, $projectID);
$teams2Import = array($this->lang->project->copyTeam) + $teams2Import;
/* The deleted members. */
foreach($members as $account => $member)
foreach($currentMembers as $account => $member)
{
if(!@$users[$member->account]) $member->account .= $this->lang->user->deleted;
if(!isset($users[$member->account])) $member->account .= $this->lang->user->deleted;
}
/* Set menu. */
@@ -1132,9 +1137,12 @@ class project extends control
$this->view->header = $header;
$this->view->position = $position;
$this->view->project = $project;
$this->view->users = $users;
$this->view->members = $members;
$this->view->project = $project;
$this->view->users = $users;
$this->view->currentMembers = $currentMembers;
$this->view->members2Import = $members2Import;
$this->view->teams2Import = $teams2Import;
$this->view->team2Import = $team2Import;
$this->display();
}

View File

@@ -161,6 +161,7 @@ $lang->project->howToUpdateBurn = "<a href='%s' class='helplink'><i>How?</i></a>
$lang->project->whyNoStories = "There no active stories to added to this project. Please check the linked product.";
$lang->project->doneProjects = 'Done';
$lang->project->unDoneProjects = 'Undone';
$lang->project->copyTeam = 'Copy a team';
/* Confirm. */
$lang->project->confirmDelete = 'Are you sure to delete project [%s]?';

View File

@@ -161,6 +161,7 @@ $lang->project->howToUpdateBurn = "<a href='%s' class='helplink'><i>如何更新
$lang->project->whyNoStories = "看起来没有需求可以关联。请检查下项目关联的产品中有没有需求,而且要确保它们已经审核通过。";
$lang->project->doneProjects = '已结束';
$lang->project->unDoneProjects = '未结束';
$lang->project->copyTeam = '复制团队';
/* 交互提示。*/
$lang->project->confirmDelete = '您确定删除项目[%s]吗?';

View File

@@ -934,16 +934,41 @@ class projectModel extends model
return array('' => '') + $users;
}
/**
* Get teams which can be imported.
*
* @param string $account
* @param int $currentProject
* @access public
* @return array
*/
public function getTeams2Import($account, $currentProject)
{
return $this->dao->select('t1.project, t2.name as projectName, t2.team as teamName')
return $this->dao->select('t1.project, t2.name as projectName')
->from(TABLE_TEAM)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
->where('t1.account')->eq($account)
->andWhere('t1.project')->ne($currentProject)
->groupBy('t1.project')
->orderBy('t1.project DESC')
->fetchAll('project');
->fetchPairs();
}
/**
* Get members of a project who can be imported.
*
* @param int $project
* @param array $currentMembers
* @access public
* @return array
*/
public function getMembers2Import($project, $currentMembers)
{
return $this->dao->select('account, role, hours')
->from(TABLE_TEAM)
->where('project')->eq($project)
->andWhere('account')->notIN($currentMembers)
->fetchAll('account');
}
/**

View File

@@ -46,19 +46,19 @@
</tr>
<tr>
<th class='rowhead'><?php echo $lang->project->PO;?></th>
<td><?php echo html::select('PO', $users, $project->PO, 'class=text-3');?></td>
<td><?php echo html::select('PO', $poUsers, $project->PO, 'class=text-3');?></td>
</tr>
<tr>
<th class='rowhead'><?php echo $lang->project->PM;?></th>
<td><?php echo html::select('PM', $users, $project->PM, 'class=text-3');?></td>
<td><?php echo html::select('PM', $pmUsers, $project->PM, 'class=text-3');?></td>
</tr>
<tr>
<th class='rowhead'><?php echo $lang->project->QD;?></th>
<td><?php echo html::select('QD', $users, $project->QD, 'class=text-3');?></td>
<td><?php echo html::select('QD', $qdUsers, $project->QD, 'class=text-3');?></td>
</tr>
<tr>
<th class='rowhead'><?php echo $lang->project->RD;?></th>
<td><?php echo html::select('RD', $users, $project->RD, 'class=text-3');?></td>
<td><?php echo html::select('RD', $rdUsers, $project->RD, 'class=text-3');?></td>
</tr>
<tr>
<th class='rowhead'><?php echo $lang->project->manageProducts;?></th>

View File

@@ -11,16 +11,27 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<script>
projectID = <?php echo $project->id;?>;
function importTeam()
{
location.href = createLink('project', 'manageMembers', 'project=' + projectID + '&teamImport=' + $('#teams2Import').val());
}
</script>
<form method='post'>
<table align='center' class='table-4 a-center'>
<caption><?php echo $lang->project->manageMembers;?></caption>
<caption>
<div class='f-left'><?php echo $lang->project->manageMembers;?></div>
<div class='f-right'><?php echo html::select('teams2Import', $teams2Import, $team2Import, 'onchange=importTeam()');?></div>
</caption>
<tr>
<th><?php echo $lang->team->account;?></th>
<th><?php echo $lang->team->role;?></th>
<th><?php echo $lang->team->days;?></th>
<th><?php echo $lang->team->hours;?></th>
</tr>
<?php foreach($members as $key => $member):?>
<?php foreach($currentMembers as $key => $member):?>
<?php $realname = substr($users[$member->account], 2);?>
<?php unset($users[$member->account]);?>
<tr>
@@ -34,6 +45,21 @@
</td>
</tr>
<?php endforeach;?>
<?php if(!$currentMembers) $key = 0;?>
<?php foreach($members2Import as $member2Import):?>
<?php $key ++;?>
<tr>
<td><?php echo html::select('accounts[]', $users, $member2Import->account, 'class=select-2');?></td>
<td><input type='text' name='roles[]' id='role<?php echo $key;?>' class='text-2' value='<?php echo $member2Import->role;?>' /></td>
<td><input type='text' name='days[]' id='days<?php echo $key;?>' class='text-2' value='<?php echo $project->days?>'/></td>
<td>
<input type='text' name='hours[]' id='hours<?php echo $key;?>' class='text-2' value='<?php echo $member2Import->hours;?>' />
<input type='hidden' name='modes[]' value='create' />
</td>
</tr>
<?php endforeach;?>
<?php
$count = count($users) - 1;
if($count > PROJECTMODEL::LINK_MEMBERS_ONE_TIME) $count = PROJECTMODEL::LINK_MEMBERS_ONE_TIME;