Hello:)
I hope you help me with this issue:) So, I have a little problem with sum in cgridview.
I have models:
- Works(id(PK), title, hours, employee_id);
relations:
'WorksSettlement' => array(self::HAS_ONE, 'Works_Settlement','works_id' ),
'ValueSum' => array(self::STAT, 'Works_Settlement', 'works_id', 'select'=> 'value'),
- Works_Settlement(works_id(PK), value);
Value is calculated in afterSave function when Works model save. Value = hours*rate (rate is stored in other model).
- Settlement_Employee (id(PK), title, employee_id)
relations:
'SettlementDetails' => array(self::HAS_MANY, 'Settlement_Details', 'settlement_id'),
- Settlement_Details(settlement_id(PK), works_id(PK))
relations:
'SettlementEmployee' => array(self::BELONGS_TO, 'Settlement_Employee', 'id'),
'Work' => array(self::BELONGS_TO, 'Works', 'id')
In Settlement_Employee model I created View action in Controller, which display related works, for given settlement.
public function actionView($id)
{
$Criteria = new CDbCriteria();
$Criteria->condition = 'settlement_id=:settlement_id';
$Criteria->params = array(':settlement_id'=>$id);
$datagrid = new CActiveDataProvider('Settlement_Details', array('criteria'=>$Criteria));
$this->render('view',array(
'model'=>$this->loadModel($id),
'datagrid'=>$datagrid,
));
}
Next i created View for this action, which display cdetailview and cgridview (Display SettlementEmployee with related works):
//display settlement
<?php $this->widget('zii.widgets.CDetailView',array(
'data'=>$model,
'attributes'=>array(
'title',
),
)); ?>
//display related works for settlement
<?php $this->widget('zii.widgets.CGridView',array(
'dataProvider' =>$datagrid,
'columns'=>array(
'Work.title',
'Work.WorksSettlement.value',
),
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
),
),
)); ?>
Everything works fine, but i need to display sum of this column in CGridView: Work.WorksSettlement.value. How can i do that? Can anyone help me, please?
Many thanks for your help:)
Sorry for my english:)
Greetings
Tom:)
P.S.: I know, that I can display sum of "value" column in CGridView for "Works" model in that way: I created in my "Works" model function:
public function getTotal($records, $column)
{
$total = 0;
foreach ($records as $record) {
$total += $record->$column;
}
return number_format($total,2);
}
and I know, that in my CGridView for "Works" model i can use:
array(
'name'=>'WorksSettlement.value',
'footer'=>'Sum: ' . $model->getTotal($model->search()->getData(), 'ValueSum'),
),
But… if I try use this function for Settlement_Employee CGridView, it doesn’t work:(