* Pick update from master.
This commit is contained in:
@@ -202,6 +202,7 @@ class baseCalc
|
||||
*/
|
||||
public function printSQL($dao)
|
||||
{
|
||||
a($dao);
|
||||
echo $this->getSQL($dao);
|
||||
}
|
||||
|
||||
|
||||
@@ -86,8 +86,9 @@
|
||||
.filter-panel .filter-actions {display: flex; justify-content: center}
|
||||
.filter-panel .filter-actions .toolbar {gap: 15px;}
|
||||
|
||||
.cell-ellipsis {display: inherit; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
.cell-ellipsis {display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
|
||||
.query-inline {padding-left: 80px !important;}
|
||||
.query-inline>label {justify-content: flex-start !important; width: 80px !important;}
|
||||
.query-btn {padding-left: 20px !important;}
|
||||
.picker-nowrap .picker-multi-selections {flex-wrap: nowrap !important; overflow: hidden !important;}
|
||||
|
||||
+103
-11
@@ -6,11 +6,22 @@ window.renderHeight = function()
|
||||
window.parseSerialize = function(serialize)
|
||||
{
|
||||
var result = {};
|
||||
serialize = serialize.replaceAll('%5B%5D', '');
|
||||
var items = serialize.split('&');
|
||||
for(var i = 0; i < items.length; i++)
|
||||
{
|
||||
var item = items[i].split('=');
|
||||
result[item[0]] = item[1];
|
||||
var key = item[0];
|
||||
var value = item[1];
|
||||
if(!result[key]) result[key] = [];
|
||||
if(key.startsWith('scope'))
|
||||
{
|
||||
result[key].push(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
result[key] = value;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -118,11 +129,12 @@ window.handleNavMenuClick = function($el)
|
||||
})
|
||||
}
|
||||
|
||||
window.handleQueryClick = function()
|
||||
window.handleQueryClick = function(id)
|
||||
{
|
||||
var check = window.checkForm($('#queryForm'));
|
||||
var $form = id ? $('#queryForm' + id) : $('#queryForm');
|
||||
var check = window.checkForm($form);
|
||||
if(!check) return;
|
||||
window.ajaxGetRecords(current.id);
|
||||
window.ajaxGetRecords(id);
|
||||
}
|
||||
|
||||
window.deactiveNavMenu = function()
|
||||
@@ -290,6 +302,77 @@ window.renderDTable = function(metricID = current.id, header = resultHeader, dat
|
||||
$currentBox.find('.table-side').append('<div class="dtable"></div>');
|
||||
|
||||
window.initDTable($currentBox.find('.dtable'), header, data);
|
||||
if(viewType == 'multiple') window.initQueryForm(metricID, $currentBox.find('.metric-name'), header, data);
|
||||
}
|
||||
|
||||
window.getMetricRecordType = function(recordRow)
|
||||
{
|
||||
if(!recordRow) return false;
|
||||
var type = [];
|
||||
if(recordRow.scope) type.push('scope');
|
||||
if(recordRow.date) type.push('date');
|
||||
if(type.length == 0) type.push('system');
|
||||
return type.join('-');
|
||||
}
|
||||
|
||||
window.initQueryForm = function(id, $el, header = resultHeader, data = resultData)
|
||||
{
|
||||
var $form = id ? $('#queryForm' + id) : $('#queryForm');
|
||||
var formData = window.getFormData($form);
|
||||
|
||||
$el.siblings('form#queryForm' + id).remove();
|
||||
var $form = $('#queryFormTpl').clone();
|
||||
$form.attr('id', 'queryForm' + id);
|
||||
$form.removeClass('hidden');
|
||||
$form.find('script').remove();
|
||||
|
||||
var recordType = window.getMetricRecordType(data.length ? data[0] : false);
|
||||
|
||||
if(!recordType) return;
|
||||
|
||||
$el.after($form);
|
||||
|
||||
if(recordType == 'scope' || recordType == 'scope-date')
|
||||
{
|
||||
$form.find('.query-scope').removeClass('hidden');
|
||||
$form.find('.query-scope #scope').attr('id', 'scope' + id);
|
||||
var scopeUnique = {};
|
||||
var scopeItems = [];
|
||||
data.forEach(function(item) {
|
||||
if(scopeUnique[item.scopeID]) return;
|
||||
scopeUnique[item.scopeID] = item.scope;
|
||||
scopeItems.push({text: item.scope, value: item.scopeID});
|
||||
});
|
||||
zui.create("picker","#scope" + id,{"multiple":10,"name":"scope","required":false,"items":scopeItems, "defaultValue": formData.get('scope'),"emptyValue":""});
|
||||
}
|
||||
if(recordType == 'date' || recordType == 'scope-date')
|
||||
{
|
||||
$form.find('.query-date-range').removeClass('hidden');
|
||||
$form.find('.query-date-range #dateBegin').attr('id', 'dateBegin' + id);
|
||||
$form.find('.query-date-range #dateEnd').attr('id', 'dateEnd' + id);
|
||||
zui.create("datePicker","#dateBegin" + id,{"multiple":false,"icon":"calendar","name":"dateBegin", "defaultValue": formData.get('dateBegin')})
|
||||
zui.create("datePicker","#dateEnd" + id,{"multiple":false,"icon":"calendar","name":"dateEnd", "defaultValue": formData.get('dateEnd')})
|
||||
}
|
||||
|
||||
if(recordType == 'system')
|
||||
{
|
||||
$form.find('.query-calc-time-range').removeClass('hidden');
|
||||
$form.find('.query-calc-time-range #calcBegin').attr('id', 'calcBegin' + id);
|
||||
$form.find('.query-calc-time-range #calcEnd').attr('id', 'calcEnd' + id);
|
||||
zui.create("datePicker","#calcBegin" + id,{"multiple":false,"icon":"calendar","name":"calcBegin", "defaultValue": formData.get('calcBegin')})
|
||||
zui.create("datePicker","#calcEnd" + id,{"multiple":false,"icon":"calendar","name":"calcEnd", "defaultValue": formData.get('calcEnd')})
|
||||
}
|
||||
else
|
||||
{
|
||||
$form.find('.query-calc-time').removeClass('hidden');
|
||||
$form.find('.query-calc-time #calcTime').attr('id', 'calcTime' + id);
|
||||
zui.create("datePicker","#calcTime" + id,{"multiple":false,"icon":"calendar","name":"calcTime", "defaultValue": formData.get('calcTime')})
|
||||
}
|
||||
|
||||
$form.find('.query-btn button').attr('onclick', 'window.handleQueryClick(' + id + ')');
|
||||
|
||||
$form.find('.form-group.hidden').remove();
|
||||
|
||||
}
|
||||
|
||||
window.renderChart = function(metricID = current.id, header = resultHeader, data = resultData, chartType = 'line', initPicker = true)
|
||||
@@ -308,7 +391,7 @@ window.renderChart = function(metricID = current.id, header = resultHeader, data
|
||||
|
||||
window.initDTable = function($obj, head, data)
|
||||
{
|
||||
var height = 328;
|
||||
var height = 310;
|
||||
if(viewType == 'single') height = $('.table-side').height();
|
||||
if(!head || !data) return;
|
||||
|
||||
@@ -321,6 +404,8 @@ window.initDTable = function($obj, head, data)
|
||||
height: height,
|
||||
cols: head,
|
||||
data: data,
|
||||
// footPager: pager,
|
||||
// footer: ['pager'],
|
||||
onRenderCell: function(result, {row, col})
|
||||
{
|
||||
var colCount = Object.keys(row.data).length;
|
||||
@@ -432,10 +517,10 @@ window.initChart = function($obj, head, data, chartType)
|
||||
var myChart = echarts.init($obj);
|
||||
var option = {
|
||||
grid: {
|
||||
left: '10%', // 左边距
|
||||
right: '10%', // 右边距
|
||||
bottom: '10%', // 下边距
|
||||
containLabel: true // 自动计算和预留坐标轴标签的空间
|
||||
left: '10%',
|
||||
right: '10%',
|
||||
bottom: '10%',
|
||||
containLabel: true
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
@@ -465,6 +550,10 @@ window.initPieChart = function($obj, head, data)
|
||||
tooltip: {
|
||||
trigger: 'item'
|
||||
},
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
left: 'left'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
type: 'pie',
|
||||
@@ -599,7 +688,10 @@ window.updateMetricBoxs = function(id, isChecked)
|
||||
|
||||
window.ajaxGetRecords = function(id)
|
||||
{
|
||||
var formData = window.getFormData($('#queryForm'));
|
||||
var $form = id ? $('#queryForm' + id) : $('#queryForm');
|
||||
var formData = window.getFormData($form);
|
||||
|
||||
id = id ?? current.id;
|
||||
|
||||
$.post($.createLink('metric', 'ajaxGetTableData', 'metricID=' + id),formData, function(resp)
|
||||
{
|
||||
@@ -608,7 +700,7 @@ window.ajaxGetRecords = function(id)
|
||||
{
|
||||
var chartType = viewType == 'multiple' ? $('#metricBox' + id).find('[name=chartType]').val() : $('[name=chartType]').val();
|
||||
window.renderDTable(id, data.header, data.data);
|
||||
window.renderChart(id, data.header, data.data, chartType);
|
||||
window.renderChart(id, data.header, data.data, chartType, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -23,13 +23,12 @@ $lang->metric->system = "System";
|
||||
$lang->metric->weekCell = "%s,Week %s";
|
||||
$lang->metric->create = "Create " . $this->lang->metric->common;
|
||||
$lang->metric->edit = "Edit " . $this->lang->metric->common;
|
||||
$lang->metric->view = 'View ' . $this->lang->metric->common;
|
||||
$lang->metric->afterCreate = "After Saving";
|
||||
$lang->metric->definition = "Definition";
|
||||
$lang->metric->declaration = "Definition";
|
||||
$lang->metric->customUnit = "Custom Unit";
|
||||
$lang->metric->delist = "Delist";
|
||||
$lang->metric->preview = "Preview Metric";
|
||||
$lang->metric->preview = "Preview";
|
||||
$lang->metric->metricList = "Metric List";
|
||||
$lang->metric->manage = "Manage";
|
||||
$lang->metric->exitManage = "Exit manage";
|
||||
@@ -82,8 +81,6 @@ $lang->metric->implementAction = 'Implement Metric';
|
||||
$lang->metric->deleteAction = 'Delete Metric';
|
||||
$lang->metric->implementAction = 'Implement Metric';
|
||||
$lang->metric->deleteAction = 'Delete Metric';
|
||||
$lang->metric->delistAction = 'Delist Metric';
|
||||
$lang->metric->detailsAction = 'Metric Details';
|
||||
|
||||
$lang->metric->stageList = array();
|
||||
$lang->metric->stageList['wait'] = "Not Released";
|
||||
|
||||
@@ -23,13 +23,12 @@ $lang->metric->system = "System";
|
||||
$lang->metric->weekCell = "%s,Week %s";
|
||||
$lang->metric->create = "Create " . $this->lang->metric->common;
|
||||
$lang->metric->edit = "Edit " . $this->lang->metric->common;
|
||||
$lang->metric->view = 'View ' . $this->lang->metric->common;
|
||||
$lang->metric->afterCreate = "After Saving";
|
||||
$lang->metric->definition = "Definition";
|
||||
$lang->metric->declaration = "Definition";
|
||||
$lang->metric->customUnit = "Custom Unit";
|
||||
$lang->metric->delist = "Delist";
|
||||
$lang->metric->preview = "Preview Metric";
|
||||
$lang->metric->preview = "Preview";
|
||||
$lang->metric->metricList = "Metric List";
|
||||
$lang->metric->manage = "Manage";
|
||||
$lang->metric->exitManage = "Exit manage";
|
||||
@@ -82,8 +81,6 @@ $lang->metric->implementAction = 'Implement Metric';
|
||||
$lang->metric->deleteAction = 'Delete Metric';
|
||||
$lang->metric->implementAction = 'Implement Metric';
|
||||
$lang->metric->deleteAction = 'Delete Metric';
|
||||
$lang->metric->delistAction = 'Delist Metric';
|
||||
$lang->metric->detailsAction = 'Metric Details';
|
||||
|
||||
$lang->metric->stageList = array();
|
||||
$lang->metric->stageList['wait'] = "Not Released";
|
||||
|
||||
@@ -23,13 +23,12 @@ $lang->metric->system = "System";
|
||||
$lang->metric->weekCell = "%s,Week %s";
|
||||
$lang->metric->create = "Create " . $this->lang->metric->common;
|
||||
$lang->metric->edit = "Edit " . $this->lang->metric->common;
|
||||
$lang->metric->view = 'View ' . $this->lang->metric->common;
|
||||
$lang->metric->afterCreate = "After Saving";
|
||||
$lang->metric->definition = "Definition";
|
||||
$lang->metric->declaration = "Definition";
|
||||
$lang->metric->customUnit = "Custom Unit";
|
||||
$lang->metric->delist = "Delist";
|
||||
$lang->metric->preview = "Preview Metric";
|
||||
$lang->metric->preview = "Preview";
|
||||
$lang->metric->metricList = "Metric List";
|
||||
$lang->metric->manage = "Manage";
|
||||
$lang->metric->exitManage = "Exit manage";
|
||||
@@ -82,8 +81,6 @@ $lang->metric->implementAction = 'Implement Metric';
|
||||
$lang->metric->deleteAction = 'Delete Metric';
|
||||
$lang->metric->implementAction = 'Implement Metric';
|
||||
$lang->metric->deleteAction = 'Delete Metric';
|
||||
$lang->metric->delistAction = 'Delist Metric';
|
||||
$lang->metric->detailsAction = 'Metric Details';
|
||||
|
||||
$lang->metric->stageList = array();
|
||||
$lang->metric->stageList['wait'] = "Not Released";
|
||||
|
||||
@@ -29,7 +29,7 @@ $lang->metric->definition = "计算规则";
|
||||
$lang->metric->declaration = "度量定义";
|
||||
$lang->metric->customUnit = "自定义";
|
||||
$lang->metric->delist = "下架";
|
||||
$lang->metric->preview = "查看度量项";
|
||||
$lang->metric->preview = "预览";
|
||||
$lang->metric->metricList = "度量项列表";
|
||||
$lang->metric->manage = "管理度量项";
|
||||
$lang->metric->exitManage = "退出管理";
|
||||
@@ -97,13 +97,13 @@ $lang->metric->featureBar['browse']['all'] = '全部';
|
||||
$lang->metric->featureBar['browse']['wait'] = '未发布';
|
||||
$lang->metric->featureBar['browse']['released'] = '已发布';
|
||||
|
||||
$lang->metric->featureBar['preview']['system'] = '系统';
|
||||
$lang->metric->featureBar['preview']['program'] = '项目集';
|
||||
$lang->metric->featureBar['preview']['product'] = '产品';
|
||||
$lang->metric->featureBar['preview']['project'] = '项目';
|
||||
$lang->metric->featureBar['preview']['product'] = '产品';
|
||||
$lang->metric->featureBar['preview']['execution'] = '执行';
|
||||
$lang->metric->featureBar['preview']['dept'] = '团队';
|
||||
$lang->metric->featureBar['preview']['user'] = '个人';
|
||||
$lang->metric->featureBar['preview']['program'] = '项目集';
|
||||
$lang->metric->featureBar['preview']['system'] = '系统';
|
||||
$lang->metric->featureBar['preview']['code'] = '代码库';
|
||||
$lang->metric->featureBar['preview']['pipeline'] = '流水线';
|
||||
|
||||
|
||||
+23
-1
@@ -512,7 +512,7 @@ class metricModel extends model
|
||||
*/
|
||||
public function getPairsByScope($scope)
|
||||
{
|
||||
if($scope == 'global') return array();
|
||||
if(empty($scope) || $scope == 'system') return array();
|
||||
|
||||
$objectPairs = array();
|
||||
switch($scope)
|
||||
@@ -523,6 +523,28 @@ class metricModel extends model
|
||||
case 'user':
|
||||
$objectPairs = $this->loadModel('user')->getPairs('noletter');
|
||||
break;
|
||||
case 'program':
|
||||
$objectPairs = $this->dao->select('id, name')->from(TABLE_PROGRAM)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->eq('program')
|
||||
->fetchPairs();
|
||||
break;
|
||||
case 'product':
|
||||
$objectPairs = $this->dao->select('id, name')->from(TABLE_PRODUCT)
|
||||
->where('deleted')->eq(0)->fetchPairs();
|
||||
break;
|
||||
case 'project':
|
||||
$objectPairs = $this->dao->select('id, name')->from(TABLE_PROJECT)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->eq('project')
|
||||
->fetchPairs();
|
||||
break;
|
||||
case 'execution':
|
||||
$objectPairs = $this->dao->select('id, name')->from(TABLE_PROJECT)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->in('sprint,stage')
|
||||
->fetchPairs();
|
||||
break;
|
||||
default:
|
||||
$objectPairs = $this->loadModel($scope)->getPairs();
|
||||
break;
|
||||
|
||||
@@ -271,7 +271,7 @@ class metricTao extends metricModel
|
||||
$records = $this->dao->select("id, {$dataFieldStr} value, date")
|
||||
->from(TABLE_METRICLIB)
|
||||
->where('metricCode')->eq($code)
|
||||
->beginIF(!empty($scope))->andWhere($scopeKey)->eq($scopeValue)->fi()
|
||||
->beginIF(!empty($scope))->andWhere($scopeKey)->in($scopeValue)->fi()
|
||||
->beginIF(!empty($dateBegin) and $dateType == 'year')->andWhere('`year`')->ge($yearBegin)->fi()
|
||||
->beginIF(!empty($dateEnd) and $dateType == 'year')->andWhere('`year`')->le($yearEnd)->fi()
|
||||
->beginIF(!empty($dateBegin) and $dateType == 'month')->andWhere('CONCAT(`year`, `month`)')->ge($monthBegin)->fi()
|
||||
|
||||
@@ -25,6 +25,7 @@ jsVar('metricListLang', $metricList);
|
||||
jsVar('chartTypeList', $lang->metric->chartTypeList);
|
||||
jsVar('errorDateRange', $lang->metric->errorDateRange);
|
||||
jsVar('errorCalcTimeRange', $lang->metric->errorCalcTimeRange);
|
||||
// jsVar('pager', usePager());
|
||||
|
||||
if($scope == 'collect' and empty($current))
|
||||
{
|
||||
|
||||
@@ -215,13 +215,13 @@ toolbar
|
||||
$lang->metric->viewType->single,
|
||||
),
|
||||
/*
|
||||
common::hasPriv('metric', 'browse') ? btn
|
||||
common::hasPriv('metric', 'preview') ? btn
|
||||
(
|
||||
setClass('btn primary'),
|
||||
set::url(helper::createLink('metric', 'browse')),
|
||||
$lang->metric->manage
|
||||
) : null,
|
||||
*/
|
||||
*/
|
||||
);
|
||||
|
||||
$metricCheckItems = array();
|
||||
@@ -391,4 +391,89 @@ div
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
form
|
||||
(
|
||||
set::id('queryFormTpl'),
|
||||
setClass('hidden'),
|
||||
formRow
|
||||
(
|
||||
set::width('full'),
|
||||
formGroup
|
||||
(
|
||||
setClass('query-inline query-scope hidden picker-nowrap'),
|
||||
set::width('248px'),
|
||||
set::label($this->lang->metric->scope),
|
||||
set::name('scope'),
|
||||
set::items(array()),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
setClass('query-inline query-date-range hidden'),
|
||||
set::width('360px'),
|
||||
set::label($this->lang->metric->date),
|
||||
inputGroup
|
||||
(
|
||||
datePicker
|
||||
(
|
||||
set::name('dateBegin'),
|
||||
set('id', 'dateBegin'),
|
||||
),
|
||||
$this->lang->metric->to,
|
||||
datePicker
|
||||
(
|
||||
set::name('dateEnd'),
|
||||
set('id', 'dateEnd'),
|
||||
),
|
||||
),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
setClass('query-inline query-calc-time-range hidden'),
|
||||
set::width('360px'),
|
||||
set::label($this->lang->metric->calcTime),
|
||||
inputGroup
|
||||
(
|
||||
datePicker
|
||||
(
|
||||
set::name('calcBegin'),
|
||||
set('id', 'calcBegin'),
|
||||
),
|
||||
$this->lang->metric->to,
|
||||
datePicker
|
||||
(
|
||||
set::name('calcEnd'),
|
||||
set('id', 'calcEnd'),
|
||||
),
|
||||
),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
setClass('query-inline query-calc-time hidden'),
|
||||
set::width('200px'),
|
||||
set::label($this->lang->metric->calcTime),
|
||||
inputGroup
|
||||
(
|
||||
datePicker
|
||||
(
|
||||
set::name('calcTime'),
|
||||
set('id', 'calcTime'),
|
||||
set::required(true),
|
||||
set::value(helper::today()),
|
||||
),
|
||||
),
|
||||
),
|
||||
formGroup
|
||||
(
|
||||
setClass('query-btn'),
|
||||
btn
|
||||
(
|
||||
setClass('btn secondary'),
|
||||
set::text($this->lang->metric->query),
|
||||
),
|
||||
)
|
||||
),
|
||||
set::actions(array()),
|
||||
);
|
||||
|
||||
render();
|
||||
|
||||
@@ -117,13 +117,13 @@ toolbar
|
||||
$lang->metric->viewType->multiple,
|
||||
),
|
||||
/*
|
||||
common::hasPriv('metric', 'browse') ? btn
|
||||
common::hasPriv('metric', 'preview') ? btn
|
||||
(
|
||||
setClass('btn primary'),
|
||||
set::url(helper::createLink('metric', 'browse')),
|
||||
$lang->metric->manage
|
||||
) : null,
|
||||
*/
|
||||
*/
|
||||
);
|
||||
|
||||
$metricRecordType = $this->metric->getMetricRecordType(current($resultData));
|
||||
@@ -138,10 +138,11 @@ $fnGenerateQueryForm = function() use($metricRecordType, $current)
|
||||
{
|
||||
$formGroups[] = formGroup
|
||||
(
|
||||
setClass('query-inline'),
|
||||
setClass('query-inline picker-nowrap'),
|
||||
set::width('248px'),
|
||||
set::label($this->lang->metric->scope),
|
||||
set::name('scope'),
|
||||
set::control(array('type' => 'picker', 'multiple' => true)),
|
||||
set::items($objectPairs),
|
||||
);
|
||||
}
|
||||
@@ -227,8 +228,8 @@ $fnGenerateQueryForm = function() use($metricRecordType, $current)
|
||||
(
|
||||
setClass('btn secondary'),
|
||||
set::text($this->lang->metric->query),
|
||||
set::onclick('window.handleQueryClick()'),
|
||||
),
|
||||
on::click('.query-btn button', 'window.handleQueryClick'),
|
||||
)
|
||||
),
|
||||
set::actions(array()),
|
||||
@@ -261,6 +262,7 @@ div
|
||||
div
|
||||
(
|
||||
setClass('main'),
|
||||
empty($current) ? div(setClass('canvas')) :
|
||||
div
|
||||
(
|
||||
setClass('canvas'),
|
||||
|
||||
@@ -392,7 +392,11 @@ class metricZen extends metric
|
||||
|
||||
$row = new stdclass();
|
||||
if(!empty($dateList)) $row->date = $this->metric->buildDateCell($record);
|
||||
if($scope != 'system') $row->scope = isset($objectPairs[$record[$scope]]) ? $objectPairs[$record[$scope]] : $record[$scope];
|
||||
if($scope != 'system')
|
||||
{
|
||||
$row->scope = isset($objectPairs[$record[$scope]]) ? $objectPairs[$record[$scope]] : $record[$scope];
|
||||
$row->scopeID = $record[$scope];
|
||||
}
|
||||
$row->value = is_numeric($record['value']) ? round((float)$record['value'], 2) : $record['value'];
|
||||
if(isset($record['date'])) $row->calcTime = $record['date'];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user