* Finish task #40004.

This commit is contained in:
holan20180123
2021-07-13 10:02:40 +08:00
parent 71d91cdc54
commit a14b1c8711
6 changed files with 45 additions and 14 deletions
+4 -2
View File
@@ -2,11 +2,13 @@
$config->product = new stdclass();
$config->product->orderBy = 'isClosed,order_desc';
$config->product->customBatchEditFields = 'PO,QD,RD,status,type,desc,acl';
$config->product->customBatchEditFields = 'line,PO,QD,RD,status,type,acl';
if($config->systemMode == 'new') $config->product->customBatchEditFields = 'program,' . $config->product->customBatchEditFields;
$config->product->browse = new stdclass();
$config->product->custom = new stdclass();
$config->product->custom->batchEditFields = 'program,PO,QD,RD,status,type,acl';
$config->product->custom->batchEditFields = 'line,PO,QD,RD';
if($config->systemMode == 'new') $config->product->custom->batchEditFields .= ',program';
$config->product->list = new stdclass();
$config->product->list->exportFields = 'id,name,line,activeStories,changedStories,draftStories,closedStories,plans,releases,bugs,unResolvedBugs,assignToNullBugs';
+17 -5
View File
@@ -586,15 +586,23 @@ class product extends control
$rdUsers = $this->user->getPairs('nodeleted|devfirst', $appendRdUsers);
if(!empty($this->config->user->moreLink)) $this->config->moreLinks["RD"] = $this->config->user->moreLink;
/* Get product lines by programs.*/
$programs = $this->program->getPairs();
$lines = array();
foreach($programs as $programID => $program)
{
$lines[$programID] = array('') + $this->product->getLinePairs($programID);
}
$this->view->title = $this->lang->product->batchEdit;
$this->view->position[] = $this->lang->product->batchEdit;
$this->view->lines = array('') + $this->product->getLinePairs();
$this->view->lines = $lines;
$this->view->productIDList = $productIDList;
$this->view->products = $products;
$this->view->poUsers = $poUsers;
$this->view->qdUsers = $qdUsers;
$this->view->rdUsers = $rdUsers;
$this->view->programs = array('') + $this->program->getTopPairs();
$this->view->programs = array('') + $programs;
unset($this->lang->product->typeList['']);
$this->display();
@@ -929,13 +937,17 @@ class product extends control
* Ajax get product lines.
*
* @param int $programID
* @param int $productID
* @access public
* @return void
*/
public function ajaxGetLine($programID)
public function ajaxGetLine($programID, $productID = 0)
{
$lines = $this->product->getLinePairs($programID);
die(html::select('line', array('' => '') + $lines, '', "class='form-control chosen'"));
$lines = array();
if(empty($productID) or $programID) $lines = $this->product->getLinePairs($programID);
if($productID) die(html::select("lines[$productID]", array('' => '') + $lines, '', "class='form-control chosen'"));
if(!$productID) die(html::select('line', array('' => '') + $lines, '', "class='form-control chosen'"));
}
/**
+2 -2
View File
@@ -35,7 +35,7 @@ $(function()
}
});
$(".check-all, [id^='productIDList']").click(function()
$('#productListForm').on('click', '.check-all, [id^="productIDList"]', function()
{
setTimeout(function()
{
@@ -48,5 +48,5 @@ $(function()
if(checkedProduct) $('.check-all').addClass('checked');
if(!checkedProduct) $('.check-all').removeClass('checked');
}, 100)
})
});
});
+17
View File
@@ -10,3 +10,20 @@ $(function()
this.title = privateTip;
});
})
/**
* Load product lines by program.
*
* @param int $programID
* @param int $productID
* @access public
* @return void
*/
function loadProductLines(programID, productID)
{
var link = createLink('product', 'ajaxGetLine', 'programID=' + programID + '&productID=' + productID);
$('#line_' + productID).load(link, function()
{
$('#lines' + productID).chosen();
});
}
+1 -2
View File
@@ -659,6 +659,7 @@ class productModel extends model
$products[$productID] = new stdClass();
$products[$productID]->program = $data->programs[$productID];
$products[$productID]->name = $productName;
$products[$productID]->line = (int)$data->lines[$productID];
$products[$productID]->PO = $data->POs[$productID];
$products[$productID]->QD = $data->QDs[$productID];
$products[$productID]->RD = $data->RDs[$productID];
@@ -666,7 +667,6 @@ class productModel extends model
$products[$productID]->status = $data->statuses[$productID];
$products[$productID]->desc = strip_tags($this->post->descs[$productID], $this->config->allowedTags);
$products[$productID]->acl = $data->acls[$productID];
$products[$productID]->order = $data->orders[$productID];
/* Check unique name for edited products. */
if(isset($nameList[$productName])) dao::$errors['name'][] = 'product#' . $productID . sprintf($this->lang->error->unique, $this->lang->product->name, $productName);
@@ -677,7 +677,6 @@ class productModel extends model
foreach($products as $productID => $product)
{
$oldProduct = $oldProducts[$productID];
if($oldProduct->program != $product->program) $product->line = 0;
$this->dao->update(TABLE_PRODUCT)
->data($product)
+4 -3
View File
@@ -12,6 +12,7 @@
<?php include '../../common/view/header.html.php';?>
<?php js::set('openTip', $lang->product->aclTips['open']);?>
<?php js::set('privateTip', $lang->product->aclTips['private']);?>
<?php js::set('productLines', $lines);?>
<div id="mainContent" class="main-content">
<div class="main-header">
<h2><?php echo $lang->product->batchEdit;?></h2>
@@ -53,6 +54,7 @@
?>
<th class='w-150px<?php echo zget($visibleFields, 'program', ' hidden') . zget($requiredFields, 'program', '', ' required');?>'><?php echo $lang->product->program;?></th>
<th class='required <?php echo $width;?>' style="<?php echo $full;?>"><?php echo $lang->product->name;?></th>
<th class='w-150px<?php echo zget($visibleFields, 'line', ' hidden') . zget($requiredFields, 'line', '', ' required');?>'><?php echo $lang->product->line;?></th>
<th class='w-150px<?php echo zget($visibleFields, 'PO', ' hidden') . zget($requiredFields, 'PO', '', ' required');?>'><?php echo $lang->product->PO;?></th>
<th class='w-150px<?php echo zget($visibleFields, 'QD', ' hidden') . zget($requiredFields, 'QD', '', ' required');?>'><?php echo $lang->product->QD;?></th>
<th class='w-150px<?php echo zget($visibleFields, 'RD', ' hidden') . zget($requiredFields, 'RD', '', ' required');?>'><?php echo $lang->product->RD;?></th>
@@ -60,7 +62,6 @@
<th class='w-100px<?php echo zget($visibleFields, 'status', ' hidden') . zget($requiredFields, 'status', '', ' required');?>'><?php echo $lang->product->status;?></th>
<th class='w-200px<?php echo zget($visibleFields, 'desc', ' hidden') . zget($requiredFields, 'desc', '', ' required');?>'><?php echo $lang->product->desc;?></th>
<th class='w-120px<?php echo zget($visibleFields, 'acl', ' hidden');?>'><?php echo $lang->product->acl;?></th>
<th class='w-80px'><?php echo $lang->product->order;?></th>
</tr>
</thead>
<tbody>
@@ -72,8 +73,9 @@
?>
<tr>
<td><?php echo sprintf('%03d', $productID) . html::hidden("productIDList[$productID]", $productID);?></td>
<td class='text-left<?php echo zget($visibleFields, 'program', ' hidden')?>' style='overflow:visible'><?php echo html::select("programs[$productID]", $programs, $products[$productID]->program, "class='form-control chosen'");?></td>
<td class='text-left<?php echo zget($visibleFields, 'program', ' hidden')?>' style='overflow:visible'><?php echo html::select("programs[$productID]", $programs, $products[$productID]->program, "class='form-control chosen' onchange='loadProductLines(this.value, $productID)'");?></td>
<td title='<?php echo $products[$productID]->name?>'><?php echo html::input("names[$productID]", $products[$productID]->name, "class='form-control'");?></td>
<td class='text-left<?php echo zget($visibleFields, 'line', ' hidden')?>' style='overflow:visible' id="line_<?php echo $productID;?>"><?php echo html::select("lines[$productID]", isset($lines[$products[$productID]->program]) ? $lines[$products[$productID]->program] : '', $products[$productID]->line, "class='form-control chosen'");?></td>
<td class='text-left<?php echo zget($visibleFields, 'PO', ' hidden')?>' style='overflow:visible'><?php echo html::select("POs[$productID]", $poUsers, $products[$productID]->PO, "class='form-control chosen'");?></td>
<td class='text-left<?php echo zget($visibleFields, 'QD', ' hidden')?>' style='overflow:visible'><?php echo html::select("QDs[$productID]", $qdUsers, $products[$productID]->QD, "class='form-control chosen'");?></td>
<td class='text-left<?php echo zget($visibleFields, 'RD', ' hidden')?>' style='overflow:visible'><?php echo html::select("RDs[$productID]", $rdUsers, $products[$productID]->RD, "class='form-control chosen'");?></td>
@@ -81,7 +83,6 @@
<td class='<?php echo zget($visibleFields, 'status', 'hidden')?>'><?php echo html::select("statuses[$productID]", $lang->product->statusList, $products[$productID]->status, "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'desc', 'hidden')?>'><?php echo html::textarea("descs[$productID]", htmlspecialchars($products[$productID]->desc), "rows='1' class='form-control autosize'");?></td>
<td class='<?php echo zget($visibleFields, 'acl', 'hidden')?>'> <?php echo nl2br(html::radio("acls[$productID]", $lang->product->acls, $products[$productID]->acl));?></td>
<td><?php echo html::input("orders[$productID]", $products[$productID]->order, "class='form-control'");?></td>
</tr>
<?php
if(isset($this->config->moreLinks["POs[$productID]"])) unset($this->config->moreLinks["POs[$productID]"]);