Buenas tardes a toda la comunidad.
Actualmente estoy utilizando la extensión MultimodelForm, todo bien hasta ahí.
Este es el código.
<?php
$options = array(
array('idEntrega'=>'SI', 'descripcion'=>'SI'), array('idEntrega'=>'NO', 'descripcion'=>'NO'),
);
?>
<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm',array(
'id'=>'factura-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="help-block"><?php echo Yii::t('app','Fields with');?> <span class="required">*</span> <?php echo Yii::t('app','are required.');?></p>
<?php //echo $form->errorSummary($model); ?>
<?php echo $form->errorSummary(array_merge(array($model),$validatedMembers)); ?>
<?php //echo $form->textFieldRow($model,'fechaVenta',array('class'=>'span5')); ?>
<?php echo $form->labelEx($model,'fechaVenta');?>
<?php $this->widget ('application.extensions.CJuiDateTimePicker.CJuiDateTimePicker',
array(
'model'=>$model, //Model object
'attribute'=>'fechaVenta', //attribute name
'value'=>$model->fechaVenta,
'mode'=>'datetime', //use "time","date" or "datetime" (default)
'language'=>'es',
'options'=>array(
'regional'=>'es',
'autoSize'=>'true',
'dateFormat'=>'yy-mm-dd',
'timeformat'=>'hh:mm',
'changeMonth'=>'true',
'changeYear'=>'true',
'yearRange'=>'-10:+0',
//'ampm'=>'true',
'timeText'=>'Horario',
'hourText'=>'Hora',
'minuteText'=>'Minuto',
) // jquery plugin options
));
?>
<?php //echo $form->textFieldRow($model,'idVendedor',array('class'=>'span5','maxlength'=>10)); ?>
<?php echo $form->dropDownListRow($model,'idVendedor', CHtml::listData(Vendedor::model()->findAll("activo='" . 'ACTIVO' . "'"), 'idVendedor', 'fullName'), array('class'=>'span5')); ?>
<?php echo $form->textFieldRow($model,'idCliente',array('class'=>'span5','maxlength'=>15)); ?>
<div class="col-md-6">
<?php echo CHtml::ajaxSubmitButton(
'Validar cliente', array('Ejemplo1'), array(
'type' => 'POST',
'update' => '#muestratiempo',
'datatype' => 'json',
),
array('class' => 'btn btn-primary')
); ?>
</div>
</br>
<div id="muestratiempo" class="alert alert-info">Por favor, ingrese el número de cédula del cliente...</div>
<?php //echo $form->textFieldRow($model,'idCliente',array('class'=>'span5','maxlength'=>10)); ?>
<?php //echo $form->dropDownListRow($model,'idCliente', CHtml::listData(Cliente::model()->findAll(), 'idCliente', 'nombreCompleto'), array('class'=>'span5')); ?>
<?php //echo $form->textFieldRow($model,'entrega',array('class'=>'span5','maxlength'=>100)); ?>
<?php echo $form->dropDownListRow($model, 'entrega', CHtml::listData($options, 'idEntrega', 'descripcion'), array('class'=>'span5')); ?>
<?php
// see http://www.yiiframework.com/doc/guide/1.1/en/form.table
// Note: Can be a route to a config file too,
// or create a method 'getMultiModelForm()' in the member model
$memberFormConfig = array(
'elements'=>array(
'idProducto'=>array(
'type'=>'dropdownlist',
//'prompt' => 'Seleccione',
//'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>'activo=1')), 'idProducto', 'ProductoPrecio'),
'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>"activo='" . 'ACTIVO' . "'")), 'idProducto', 'descripcion', 'grupo'),
/* Todo esto cambiar por el script del final de este archivo
'ajax' => array(
'type' => 'POST',
'url'=>Yii::app()->createUrl('Factura/Ejemplo2'),
'update' => '#Detalle_precioVenta',
'success'=>'function(data){$("#Detalle_precioVenta").val(data); console.log($(this).parents("tr")); }'
),
*/
),
'precioVenta'=>array(
'type'=>'text',
'class' => 'precio_venta'
),
'cantidad'=>array(
'type'=>'text',
'maxlength'=>40,
),
/*
'idCultivo'=>array(
'type'=>'dropdownlist',
//'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>'activo=1')), 'idProducto', 'ProductoPrecio'),
'items'=>CHtml::listData(Cultivo::model()->findAll(), 'idCultivo', 'tipoCultivo'),
),
*/
));
$this->widget('ext.multimodelform.MultiModelForm',array(
'id' => 'id_member', //the unique widget id
'addItemText' => 'Añadir',
'removeText' => 'Eliminar',
'removeConfirm' => 'Está seguro que desea eliminar este producto?',
'formConfig' => $memberFormConfig, //the form configuration array
'model' => $detalle, //instance of the form model
//if submitted not empty from the controller,
//the form will be rendered with validation errors
'validatedItems' => $validatedMembers,
'bootstrapLayout'=>true,
'tableView' => true,
'hideCopyTemplate'=>true,
//array of member instances loaded from db
'data' => $detalle->findAll('idFactura=:idFactura', array(':idFactura'=>$model->idFactura)),
));
?>
<h1> $ 0.00 </h1>
<div class="form-actions">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'buttonType'=>'submit',
'type'=>'primary',
'label'=>$model->isNewRecord ? Yii::t('app','Create') : Yii::t('app','Save'),
//'htmlOptions' => array(
//'confirm'=>'Desea crear esta factura?',
//),
)); ?>
</div>
<?php $this->endWidget();
//Andres
$request_url = Yii::app()->createUrl('Factura/Ejemplo2');
$js = "$('tr.id_member_copy > td > select').on('change', function(obj){
var parent_select = $(this);
$.ajax({
url: '$request_url',
method: 'POST',
success: function(data, textStatus, jqXHR){
parent_select.parents('tr').find('input.precio_venta').val(data);
}
});
})";
Yii::app()->getClientScript()->registerScript('js', $js, CClientScript::POS_END);
?>
El problema es que en este código
'idProducto'=>array(
'type'=>'dropdownlist',
//'prompt' => 'Seleccione',
//'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>'activo=1')), 'idProducto', 'ProductoPrecio'),
'items'=>CHtml::listData(Producto::model()->findAll(array('order'=>'descripcion ASC', 'condition'=>"activo='" . 'ACTIVO' . "'")), 'idProducto', 'descripcion', 'grupo'),
/* Todo esto cambiar por el script del final de este archivo
'ajax' => array(
'type' => 'POST',
'url'=>Yii::app()->createUrl('Factura/Ejemplo2'),
'update' => '#Detalle_precioVenta',
'success'=>'function(data){$("#Detalle_precioVenta").val(data); console.log($(this).parents("tr")); }'
),
*/
),
El ajax me funciona únicamente para el primer dropdownlist, cuando añado uno nuevo con la extensión los demás no funcionan. Soy consiente que estoy actualizando solo 1 textField: en el ‘update’ => ‘#Detalle_precioVenta’.
Ahora cambie con la ayuda de un amigo el ajax de la siguiente manera:
$request_url = Yii::app()->createUrl('Factura/Ejemplo2');
$js = "$('tr.id_member_copy > td > select').on('change', function(obj){
var parent_select = $(this);
$.ajax({
url: '$request_url',
method: 'POST',
success: function(data, textStatus, jqXHR){
parent_select.parents('tr').find('input.precio_venta').val(data);
}
});
})";
Yii::app()->getClientScript()->registerScript('js', $js, CClientScript::POS_END);
Esto funciona para activar el método que tengo en el controlador, activa el método del controlador pero no me envía ningún dato por $_POST. Me gustaría saber porque no envía nada y como podría solucionarlo.
Gracias.