CJ
TFile com Formulário de Multivalores
Pessoal, estou tentando inserir um formulário parecido com o de Multivalues o tutor (tutor.dev/index.php?class=FormMultiValuesView) só modificando os campos que um contém um TFile e outro a descrição. O problema que ao inserir o primeiro arquivo com sua descrição e clicar em Add, uma linha é adicionada com o valor do arquivo inserido anteriormente no TFile. A questão é como setar o campo TFile para que não venha com esse último valor inserido.
Segue o código:
Segue o código:
protected $form; // form
protected $table_files;
protected $detail_row;
/**
* Form constructor
* @param $param Request
*/
public function __construct( $param )
{
parent::__construct();
$this->form = new BootstrapFormBuilder('form_Contrato');
$this->form->setFormTitle('Contratos Novo/Editar');
// creates the form
// create the form fields
$id = new TEntry('id');
$cliente_id = new TSeekButton('cliente_id');
$cliente_nome = new TEntry('cliente_nome');
$beneficio_id = new TEntry('beneficio_id');
$data_contrato = new TDate('data_contrato');
$bancopg_id = new TDBCombo('bancopg_id', 'contratos', 'Bancopg', 'id', 'nome', 'nome');
$agencia = new TEntry('agencia');
$conta_credito = new TEntry('conta_credito');
$conta_id = new TDBCombo('conta_id', 'contratos', 'Conta', 'id', 'nome', 'nome');
$banco_id = new TDBCombo('banco_id', 'contratos', 'Banco', 'id', 'nome', 'nome');
$convenio_id = new TDBCombo('convenio_id', 'contratos', 'Convenio', 'id', 'nome', 'nome');
// Pega apenas corretores ativos
$criterio = new TCriteria;
$criterio->add(new TFilter('active', '=', 'Y'));
$promotor_id = new TDBCombo('promotor_id', 'contratos', 'SystemUser', 'id', 'name', 'name', $criterio);
$digitador_id = new TDBCombo('digitador_id', 'contratos', 'SystemUser', 'id', 'name', 'name');
$valorliquido = new TEntry('valorliquido');
$valoremprestimo = new TEntry('valoremprestimo');
$parcelas = new TEntry('parcelas');
$tipo_id = new TDBCombo('tipo_id', 'contratos', 'Tipo', 'id', 'nome', 'nome');
$obs = new TText('obs');
$cliente_id->setSize('15%');
$cliente_nome->setSize('85%');
$beneficio_id->setSize('100%');
$data_contrato->setSize('100%');
$bancopg_id->setSize('100%');
$agencia->setSize('100%');
$conta_credito->setSize('100%');
$conta_id->setSize('100%');
$banco_id->setSize('100%');
$convenio_id->setSize('100%');
$promotor_id->setSize('100%');
$digitador_id->setSize('100%');
$valorliquido->setSize('100%');
$valoremprestimo->setSize('100%');
$parcelas->setSize('100%');
$tipo_id->setSize('100%');
$obs->setSize('100%');
$obj = new ClienteSeek;
$action_cli = new TAction(array($obj, 'onReload'));
$cliente_id->setAction($action_cli);
// Máscaras
$data_contrato->setMask('dd/mm/yyyy', false);
$data_contrato->setDatabaseMask('yyyy-mm-dd');
$parcelas->setInputType('number');
$valoremprestimo->setNumericMask(2, ',', '.', true);
$valorliquido->setNumericMask(2, ',', '.', true);
// Set Fields
$cliente_nome->setEditable(FALSE);
$digitador_id->setEditable(FALSE);
$banco_id->enableSearch();
$convenio_id->enableSearch();
$promotor_id->enableSearch();
$digitador_id->enableSearch();
$bancopg_id->enableSearch();
$tipo_id->enableSearch();
$conta_id->enableSearch();
// Validações
$cliente_id->addValidation('Cliente', new TRequiredValidator);
$beneficio_id->addValidation('Benefício', new TRequiredValidator);
$data_contrato->addValidation('Data Contrato', new TRequiredValidator);
$bancopg_id->addValidation('Banco Cliente', new TRequiredValidator);
$agencia->addValidation('Agência', new TRequiredValidator);
$conta_credito->addValidation('Conta', new TRequiredValidator);
$conta_id->addValidation('Tipo de Conta', new TRequiredValidator);
$banco_id->addValidation('Banco Convênio', new TRequiredValidator);
$convenio_id->addValidation('Convênio', new TRequiredValidator);
$promotor_id->addValidation('Corretor', new TRequiredValidator);
$valorliquido->addValidation('Valor líquido', new TRequiredValidator);
$valoremprestimo->addValidation('Valor empréstimo', new TRequiredValidator);
$parcelas->addValidation('Parcelas', new TRequiredValidator);
$tipo_id->addValidation('Tipo Contrato', new TRequiredValidator);
// Pega o usuário logado
$logged = TSession::getValue('userid');
$digitador_id->setValue($logged);
// add the fields
if (!empty($id))
{
$id->setEditable(FALSE);
}
$this->form->appendPage('Dados do Empréstimo');
$this->form->addFields([new TLabel('Id')], [$id] );
$this->form->addFields([new TLabel('Cliente', 'red')], [$cliente_id, $cliente_nome]);
$this->form->addFields([new TLabel('Beneficio', 'red')], [$beneficio_id], [new TLabel('Data Contrato', 'red')], [$data_contrato]);
$this->form->addFields([new TLabel('Tipo Contrato', 'red')], [$tipo_id], [new TLabel('Banco Convênio', 'red')], [$banco_id]);
$this->form->addFields([new TLabel('Convenio', 'red')], [$convenio_id], [new TLabel('Corretor', 'red')], [$promotor_id]);
$this->form->addFields([new TLabel('Digitador')], [$digitador_id], [new TLabel('Parcelas', 'red')], [$parcelas]);
$this->form->addFields([new TLabel('Valor emprestimo', 'red')], [$valoremprestimo], [new TLabel('Valor líquido', 'red')], [$valorliquido]);
$this->form->appendPage('Dados do Crédito');
$this->form->addFields([new TLabel('Banco Cliente', 'red')], [$bancopg_id], [ new TLabel('Tipo de Conta', 'red') ],[ $conta_id ]);
$this->form->addFields([new TLabel('Agencia', 'red')], [$agencia], [ new TLabel('Conta', 'red')],[ $conta_credito]);
$this->form->appendPage('Arquivos do Contrato');
$this->table_files = new TTable;
$this->table_files->width = '100%';
$this->table_files->addSection('thead');
$this->table_files->addRowSet( new TLabel('Arquivo', '#8082C3',10, 'b'), new TLabel('Descrição', '#8082C3',10, 'b') );
$this->form->addContent( [ new TLabel('Arquivos do Contrato') ], [ $this->table_files ] );
$this->form->appendPage('Observação');
$this->form->addFields([new TLabel('Observação')],[ $obs ] );
// create the form actions
$this->form->addAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
$this->form->addAction(_t('New'), new TAction(array($this, 'onClear')), 'bs:plus-sign green');
$this->form->addAction('Listagem de Contratos', new TAction(array('ContratoFormList', 'onReload')), 'fa:table blue');
$this->detail_row = 0;
$change_action1 = new TAction(array($this, 'onChangeBanco'));
$banco_id->setChangeAction($change_action1);
// vertical box container
$container = new TVBox;
$container->style = 'width: 100%';
$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
$container->add( $this->form);
parent::add($container);
}
public function addFileRow($item)
{
$this->table_files->addSection('tbody');
$uniqid = mt_rand(1000000, 9999999);
// create fields
$arquivo = new TFile('arquivo[]');
$desc = new TEntry('desc[]');
// set id's
$arquivo->setId('arquivo_'.$uniqid);
$desc->setId('desc_'.$uniqid);
$desc->addValidation( 'Descrição', new TRequiredValidator );
$desc->forceUpperCase();
// set sizes
$arquivo->setSize('90%');
$desc->setSize('100%');
// set row counter
$arquivo->{'data-row'} = $this->detail_row;
$desc->{'data-row'} = $this->detail_row;
// set value
if (!empty($item->arquivo)) { $arquivo->setValue( $item->arquivo ); }
if (!empty($item->desc)) { $desc->setValue( $item->desc ); }
// create delete button
$del = new TImage('fa:trash-o red');
$del->onclick = 'ttable_remove_row(this)';
$row = $this->table_files->addRow();
// add cells
$row->addCell($arquivo);
$row->addCell($desc);
$row->addCell( $del );
$row->{'data-row'} = $this->detail_row;
// add form field
$this->form->addField($arquivo);
$this->form->addField($desc);
$this->detail_row ++;
}
Só acrescentando que ao visualizar o código no inspector do Chrome, o Adianti cria um campo Hidden para cada linha gerada e elas estão com os ID's diferentes. Mas também cria uma linha de tipo file, mas com os mesmos ID's.
Resolvido. Usei a solução do próprio Fórum em www.adianti.com.br/forum/pt/view_3410
Obrigado