0

I have a gridview like code below

<?= GridView::widget([
    'id' => 'table-penerimaan-produksi',
    'dataProvider' => $dataProvider,
    //'filterModel' => $searchModel,
    'columns' => [

        [
            'class' => 'yii\grid\CheckboxColumn',
            'checkboxOptions' =>
                function($model) {
                    return ['value' => $model->id, 'class' => 'checkbox-row'];
                }
        ],
        'ref.id',
        'ref.send_date',
        'received_date',
        'ref.vehicle_id',
        ['attribute' => 'netto', 'label' => 'Netto Terima', 'format' => ['decimal', 2]],
        ['attribute' => 'ref.netto', 'label' => 'Netto Kirim', 'format' => ['decimal', 2]],
        ['attribute' => 'susut', 'format' => ['decimal', 2]]
    ],
]); ?>

what i want is to calculate netto from selected row by using jquery. i have jquery like this:

$('.select-on-check-all, .checkbox-row').click(function(){
    calculateNetto();
})

function calculateNetto()
{
    var keys = $('#table-penerimaan-produksi').yiiGridView('getSelectedRows');        
}

How to get the value from keys and post to controller to save the ids selected?

Thanks in advance.

9
  • Wrap gridview with activeForm. Commented Jan 11, 2018 at 4:41
  • already do that. Commented Jan 11, 2018 at 5:07
  • this is my code Commented Jan 11, 2018 at 5:11
  • Submit the form and check Yii::$app->request->post(). Commented Jan 11, 2018 at 5:34
  • how about iteration to calculate selected row netto ? Commented Jan 11, 2018 at 7:08

2 Answers 2

1

I found my answer for calculating netto column which are selected using jquery

[
    'class' => 'yii\grid\CheckboxColumn',
    'checkboxOptions' =>
        function($model) {
            return ['value' => $model->id, 'class' => 'checkbox-row', 'id' => 'checkbox'];
        }
],

Adding id to CheckboxColumn and then using the following code to calculate netto

$('.select-on-check-all, .checkbox-row').click(function(){
    calculateNetto();
})

function calculateNetto()
{            
    var total_netto_send = 0; var total_netto_receive = 0;
    var netto_send = 0; var netto_receive = 0;
    for(var i=0; i < $('#checkbox.checkbox-row').length; i++)
    {           
        if($('#checkbox.checkbox-row')[i].checked == true) {
            netto_send = document.getElementById('table-penerimaan-produksi').getElementsByTagName('tr')[i+1].getElementsByTagName('td')[6].innerHTML;
            netto_receive = document.getElementById('table-penerimaan-produksi').getElementsByTagName('tr')[i+1].getElementsByTagName('td')[5].innerHTML;
            netto_send = netto_send == "" ? 0 : Number(netto_send.split(",").join(""));
            netto_receive = netto_receive == "" ? 0 : Number(netto_receive.split(",").join(""));
            total_netto_send += netto_send;
            total_netto_receive += netto_receive;
        }           
    }    
    $('#realisasiproduksi-total_netto_send').val(total_netto_send);
    $('#realisasiproduksi-total_netto_receive').val(total_netto_receive);
}
Sign up to request clarification or add additional context in comments.

Comments

0

You can set selected rows count in a hidden field, and get it into your controller using Yii::$app->request->post() method. See following steps to get the desired result:

1) Add public variable in model:

// Model
public class TestModel extends Model {
    public $rows_count;
}

2) Add form and input field in view

// View
<?php $form = ActiveForm::begin(); ?>
<?= GridView::widget([
    'id' => 'table-penerimaan-produksi',
    'dataProvider' => $dataProvider,
    //'filterModel' => $searchModel,
    'columns' => [

        [
            'class' => 'yii\grid\CheckboxColumn',
            'checkboxOptions' =>
                function($model) {
                    return ['value' => $model->id, 'class' => 'checkbox-row'];
                }
        ],
        'ref.id',
        'ref.send_date',
        'received_date',
        'ref.vehicle_id',
        ['attribute' => 'netto', 'label' => 'Netto Terima', 'format' => ['decimal', 2]],
        ['attribute' => 'ref.netto', 'label' => 'Netto Kirim', 'format' => ['decimal', 2]],
        ['attribute' => 'susut', 'format' => ['decimal', 2]]
    ],
]); ?>
<?= $form->field($model, 'rows_count')->hiddenInput(['id' => 'rows_count']) ?>
<?= Html::submitButton('Submit', ['class' => 'btn btn-success']) ?>
<?php ActiveForm::end(); ?>

3) Set total selected rows count in hidden field

// Javascript Code
function calculateNetto() {
    var keys = $('#table-penerimaan-produksi').yiiGridView('getSelectedRows');
    $('#rows_count').val(keys);
}

4) Get total rows count in controller

// Controller
public function actionTestController() {
    $rows_count = Yii::$app->request->post('rows_count');
}

Let me know if any help needed.

Edit If you don't select all rows, then .yiiGridView('getSelectedRows') would return empty array, otherwise it would return array of selected row values. One more thing I would like to change in javascript code that instead of click event, use change event as follows, because it would give accurate result:

$('.select-on-check-all, .checkbox-row').click(function(){  // Here use change event instead of click event
    calculateNetto();
})

3 Comments

what if not all rows selected?
If you don't select all rows, then .yiiGridView('getSelectedRows') would return empty array, otherwise it would return array of selected row values. One more thing I would like to change in javascript code that instead of click event, use change event as follows, because it would give accurate result, see updated answer
so, how can we know rows selected? because i want to sum the netto which selected.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.