Como puedo hacer calculos en Yii2

Tengo una tabla donde guardo unos valores como neto , iva, total quiero hacer el calculo en el formulario, una vez que se ingrese el valor neto que se calcule el iva y el total.
Ejemplo:
iva = neto * 0.19
total = iva + neto

?Como puedo hacer esto en _form.php de yii2?

Gracias de antemano
Un Cordial Saludo desde Valparaíso - Chile

Hola;

Puedes valerte de la tecnologia de Javascript capturando el evento keypress, keyup o keydown del input y realizar el cálculo correspondiente dejando el resultado en el input que desees.

Un Saludo
Eloy Gonzalez
:venezuela:

Hola Eloy, gracias por responder.

La verdad no entiendo mucho de javascript, y no tengo idea como aplicarlo en yii2, me podrías dar un ejemplo.

Yo tengo esto en _form.php.
// igreso el neto
<?= $form->field($model, 'neto')->textInput() ?>
// efectuar los calculos e insertarlos en iva y total.
<?= $form->field($model, 'iva')->textInput() ?>
<?= $form->field($model, 'total')->textInput() ?>

eso es lo que tengo y no tengo idea de como hacerlo, la intención es que cuando inserte el valor neto se calcule el iva y el total y se guarde en la BD.

Un cordial Saludo

Hola;

Prueba con este pequeño código Js

<?php 

$js = <<<JS

var iva;
$("#perfilform-iva").on(‘keyup’, function()
{
iva = $(this).val();
console.log(iva);
})

$("#perfilform-neto").on(‘keypress’, function()
{
var total = ($(this).val() * 100) / iva;
$("#perfilform-total").val(total);
})

JS;

$this->registerJS($js);

?>

Ojo!! Modifica los ID´s de los selectores de cada input de tu formulario.

Espero que te sirva

Gracias, disculpa mi ignorancia
Como lo utilizo?

Voy a tener que aprender JavaScript, ya encontré untutorial en Librosweb, para comenzar

@Cgspc

Pega el código al final de tu archivo (Vista) donde está contenido el código del formulario con los tres inputs (Campos) que me describes arriba en el tercer post.

Si eso hice y cambie
$(#perfilform-neto) por
$("#compra-neto") y
$("#perfilform-total") por
$("#compra-total")

y despues de eso que hago?

Todavía no encuentro como hacer funcionar esto, por favor alguien me puede decir como hacerlo, no encuentro una solución

@Cgspc

Con eso al escribir en los inputs verás el cálculo en el input total…

No funciona, algo pasa o algo falta

@Cgspc

Verifica las Id´s de los inputs desde el inspector de código del navegador web

Perdona, no tengo idea como hacerlo,
y no hay caso que funcione, he buscado por otros medios he consultado en foros de JS y no encuentro solución.

Por favor necesito ayuda.

@Cgspc

Para poderte ofrecer un mejor soporte por favor postea el código completo para poderlo.

Gracias.

Vista _form.php
div class=“contenido-admin”>
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, ‘docto’)->dropDownList(
[
‘Factura Eléctronica’ => ‘Factura Eléctronica’,
‘Factura Exenta’ => ‘Factura Exenta’,
‘Factura Compra’ => ‘Factura Compra’,
‘Nota Crédito’ => ‘Nota Crédito’,
‘Nota Débito’ => ‘Nota Débito’,
]
) ?>
<?= $form->field($model, 'nro_docto')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'fecha')->textInput() ?>
<?= $form->field($model, ‘proveedor_id’)->dropDownList($model->listaProveedores,
[
‘prompt’ => ‘Seleccione un Proveedor…’
]
);
?>
<?php //= $form->field($model, 'proveedor_id')->textInput() ?>
<?= $form->field($model, 'neto')->textInput() ?>
<?= $form->field($model, 'iva')->textInput() ?>
<?= $form->field($model, 'total')->textInput() ?>

<?= Html::submitButton('Guardar', ['class' => 'btn btn-success']) ?>
<?php ActiveForm::end(); ?> <?php $js = <<registerJS($js); ?>

Modelo Compra.php
class Compra extends MyActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return ‘compra’;
}

/**
 * {@inheritdoc}
 */
public function rules()
{
    return [
        [['docto', 'nro_docto', 'fecha', 'proveedor_id', 'neto', 'iva', 'total'], 'required'],
        [['fecha', 'created_at', 'updated_at'], 'safe'],
        [['proveedor_id', 'neto', 'iva', 'total', 'created_by', 'updated_by'], 'integer'],
        [['docto'], 'string', 'max' => 30],
        [['nro_docto'], 'string', 'max' => 12],
    ];
}

/**
 * {@inheritdoc}
 */
public function attributeLabels()
{
    return [
        'id' => 'ID',
        'docto' => 'Documento',
        'nro_docto' => 'Nro',
        'fecha' => 'Fecha',
        'proveedor_id' => 'Proveedor',
        'neto' => 'Neto',
        'iva' => 'Iva',
        'total' => 'Total',
        'created_at' => 'Creado el',
        'updated_at' => 'Editado el',
        'created_by' => 'Creado por',
        'updated_by' => 'Editado por',
    ];
}

public static function getListaProveedores()
{
    $opciones = Proveedor::find()->asArray()->all();
    return ArrayHelper::map($opciones, 'id', 'proveedor');
}

public function getProveedor()
{
    return $this->hasOne(Proveedor::className(), ['id' => 'proveedor_id']);
}

public function getCreatedBy()
{
    return $this->hasOne(Users::className(), ['id' => 'created_by']);
}

public function getUpdatedBy()
{
    return $this->hasOne(Users::className(), ['id' => 'updated_by']);
}

}
y actionCreate() de controlador compraController.php
public function actionCreate()
{
$model = new Compra();

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    }

    return $this->render('create', [
        'model' => $model,
    ]);
}

Gracias de antemano.