Hola comunidad, tengo un problema al usar la extensión multimodelform con autocomplete para los detalles, tengo dos tablas una principal (ptb_recmprima) con los campos principales:
Idn llave principal autonumerico y incremental
nvale llave secundaria varchar 12
la tabla de detalles (ptb_detarecmprima) con los campos:
Id llave principal autonumerico y incremental
Id_rec varchar 12 relacionada con el campo nvale de la otra tabla uno a muchos
Codprod varchar 12 relacionada con otra tabla tbl_prima con su llave principal Codprod, de donde se obtienen los productos
ya si sucesivamente mas campos.
El problema es que cuando inserto productos buscados en la tabla tbl_prima para llenar el campo Codprod de los detalles solo actualiza la primera fila, al intentar cargar otra fila no la llena y la primera toma el código de la que inserto como segunda, estos son los codigos:
En el controlador el metodo autocompletar:
public function actionAutocomplete($term) {
$criteria = new CDbCriteria;
$criteria->compare('LOWER(Codprod)', strtolower($_GET['term']), true);
$criteria->order = 'Codprod';
$criteria->limit = 30;
$data = TblMprima::model()->findAll($criteria);
if (!empty($data)) {
$arr = array();
foreach ($data as $item) {
$arr[] = array(
'id' => $item->Codprod,
'value' => $item->Codprod,
'label' => $item->Codprod,
'Descripcion' => $item->Descripcion,
'premn' => $item->PreMay,
'precuc' => $item->PrCUC,
'UM' => $item->UM,
'SaldoIni' => $item->SaldoAct,
);
}
} else {
$arr = array();
$arr[] = array(
'id' => '',
'value' => 'No se han encontrado resultados para su búsqueda',
'label' => 'No se han encontrado resultados para su búsqueda',
);
}
echo CJSON::encode($arr);
}
en el form para los detalles
<?php
$detalleFormConfig = array(
// 'showErrorSummary' => true,
'elements' => array(
'Codprod' => array(
'type' => 'zii.widgets.jui.CJuiAutoComplete',
'source' => $this->createUrl('ptbRecmprima/autocomplete'),
'options' => array(
'showAnim' => 'fold',
'common_id_string' => 'Codprod',
'size' => '15',
'minLength' => '2', // Minimo de caracteres que hay que digitar antes de relizar la busqueda
'select' => "js:function(event, ui) {
var nomobj_texto = this.id; //El identificador del campo en mi caso #Detallecompra_Descripcion
var indexid = nomobj_texto.substring(25,nomobj_texto.length);
$('#PtbDetarecmprima_Codprod'+indexid).val(ui.item.id);
$('#PtbDetarecmprima_Descripcion'+indexid).val(ui.item.Descripcion);
$('#PtbDetarecmprima_premn'+indexid).val(ui.item.premn);
$('#PtbDetarecmprima_precuc'+indexid).val(ui.item.precuc);
$('#PtbDetarecmprima_UM'+indexid).val(ui.item.UM);
$('#PtbDetarecmprima_SaldoIni'+indexid).val(ui.item.SaldoIni);
}",
),
'htmlOptions' => array(
'size' => 12,
'onFocus' => "init(this.id)",
'placeholder' => 'Buscar ...',
'title' => 'Indique el producto.'
),
),
'cantidad' => array(
'type' => 'text',
'maxlength' => 6,
'size' => 6,
'style' => 'WIDTH:80px',
// 'onchage' => 'calcularimportemn)',
),
'Descripcion' => array(
'type' => 'text',
'maxlength' => 80,
'size' => 80,
// 'disabled' => true,
'style' => 'WIDTH:180px',
),
'premn' => array(
'type' => 'text',
'maxlength' => 6,
'size' => 6,
// 'disabled' => true,
'style' => 'WIDTH:80px',
),
'precuc' => array(
'type' => 'text',
'maxlength' => 6,
'size' => 6,
// 'disabled' => true,
'style' => 'WIDTH:100px',
),
'UM' => array(
'type' => 'text',
'maxlength' => 3,
'size' => 3,
// 'disabled' => true,
'style' => 'WIDTH:80px',
),
'SaldoIni' => array(
'type' => 'text',
'maxlength' => 6,
'size' => 6,
// 'disabled' => true,
'style' => 'WIDTH:80px',
),
));
$this->widget('ext.multimodelform.MultiModelForm', array(
'id' => 'Id_rec', //the unique widget id
'formConfig' => $detalleFormConfig, //=> //$ptbDetarecmprimaFormConfig, //the form configuration array
'model' => $detalle, //instance of the form model
'validatedItems' => $validateddetalles,
'tableView' => true,
'fieldsetWrapper' => array('tag' => 'div', 'htmlOptions' => array('class' => 'view', 'style' => 'position:relative;background:#EFEFEF;')),
'removeLinkWrapper' => array('tag' => 'div', 'htmlOptions' => array('style' => 'position:absolute; top:1em; right:1em;')),
'clearInputs' => true,
'jsAfterNewId' => MultiModelForm::afterNewIdAutoComplete($detalleFormConfig['elements']['Codprod']),
'data' => $detalle->findAll('Id_rec=:Id_rec', array(':Id_rec' => $model->nvale)),
'showAddItemOnError' => false,
'addItemText' => 'Agregar producto',
'showAddItemOnError' => false,
'removeText' => 'Eliminar',
'removeConfirm' => '¿Eliminar el producto seleccionado?',
));
?>
Espero sugerencias para ello y muchas gracias por las respuestas que puedan aportar