Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Formulario Mestre Detalhe Boa noite, pessoal, estou com um problema. tenho um formulário mestre detalhe, para cadastro de colaboradores e seus respectivos contatos, porém não consigo gravar no banco de dados, aparece esse erro : Fatal error: Uncaught TypeError: Argument 1 passed to Colaborador::addColaboradorContato() must be an instance of ColaboradorContato, instance of stdClass given. Segue o meu código abaixo: ...
MM
Formulario Mestre Detalhe  
Boa noite, pessoal, estou com um problema.
tenho um formulário mestre detalhe, para cadastro de colaboradores e seus respectivos contatos, porém não consigo gravar no banco de dados, aparece esse erro : Fatal error: Uncaught TypeError: Argument 1 passed to Colaborador::addColaboradorContato() must be an instance of ColaboradorContato, instance of stdClass given.

Segue o meu código abaixo:
Controller
 
  1. <?php
  2. public function onSave()
  3. {
  4. try{
  5. TTransaction::open('database'); // abra a conexão
  6. // Obtem os dados do formulário como um active record Record Colaborator
  7. $colaborador = $this->form->getData('Colaborador');
  8. //echo '<pre>';var_dump($colaborador);die;
  9. if($colaborador->contatos){
  10. foreach($colaborador->contatos as $contato)
  11. {
  12. //var_dump($contato);die;
  13. $colaborador->addColaboradorContato($contato);
  14. }
  15. }
  16. if($colaborador->salario_base_colaborador){
  17. foreach($colaborador->salario_base_colaborador as $salario)
  18. {
  19. $colaborador->addSalarioBaseColaborador($salario);
  20. }
  21. }
  22. if($colaborador->proventos){
  23. foreach($colaborador->proventos as $provento)
  24. {
  25. $colaborador->addProvento($provento);
  26. }
  27. }
  28. $colaborador->cpf = preg_replace('/[^0-9]/','',$colaborador->cpf);
  29. $colaborador->cep = preg_replace('/[^0-9]/','',$colaborador->cep);
  30. $colaborador->store();
  31. $this->form->setData($colaborador);
  32. new TMessage('info', 'Dados cadastrados com sucesso');
  33. }catch(Exception $e){
  34. new TMessage('info', $e->getMessage());
  35. }
  36. }
  37. ?>


e a model está desse Jeito
 
  1. <?php
  2. class Colaborador extends TRecord
  3. {
  4. const TABLENAME = 'rh.colaborador';
  5. const PRIMARYKEY= 'id';
  6. const IDPOLICY = 'max'; // {max, serial}
  7. private $grau_instrucao;
  8. private $proventos;
  9. private $salario_base_colaboradors;
  10. private $colaborador_contatos;
  11. /**
  12. * Constructor method
  13. */
  14. public function __construct($id = NULL, $callObjectLoad = TRUE)
  15. {
  16. parent::__construct($id, $callObjectLoad);
  17. /** Atributos **/
  18. }
  19. /**
  20. * Method set_grau_instrucao
  21. * Sample of usage: $colaborador->grau_instrucao = $object;
  22. * @param $object Instance of GrauInstrucao
  23. */
  24. public function set_grau_instrucao(GrauInstrucao $object)
  25. {
  26. $this->grau_instrucao = $object;
  27. $this->id_grau_instrucao = $object->id;
  28. }
  29. /**
  30. * Method get_grau_instrucao
  31. * Sample of usage: $colaborador->grau_instrucao->attribute;
  32. * @returns GrauInstrucao instance
  33. */
  34. public function get_grau_instrucao()
  35. {
  36. // loads the associated object
  37. if (empty($this->grau_instrucao))
  38. $this->grau_instrucao = new GrauInstrucao($this->id_grau_instrucao);
  39. // returns the associated object
  40. return $this->grau_instrucao;
  41. }
  42. /**
  43. * Method addProvento
  44. * Add a Provento to the Colaborador
  45. * @param $object Instance of Provento
  46. */
  47. public function addProvento(Provento $object)
  48. {
  49. $this->proventos[] = $object;
  50. }
  51. /**
  52. * Method getProventos
  53. * Return the Colaborador' Provento's
  54. * @return Collection of Provento
  55. */
  56. public function getProventos()
  57. {
  58. return $this->proventos;
  59. }
  60. /**
  61. * Method addSalarioBaseColaborador
  62. * Add a SalarioBaseColaborador to the Colaborador
  63. * @param $object Instance of SalarioBaseColaborador
  64. */
  65. public function addSalarioBaseColaborador(SalarioBaseColaborador $object)
  66. {
  67. $this->salario_base_colaboradors[] = $object;
  68. }
  69. /**
  70. * Method getSalarioBaseColaboradors
  71. * Return the Colaborador' SalarioBaseColaborador's
  72. * @return Collection of SalarioBaseColaborador
  73. */
  74. public function getSalarioBaseColaboradors()
  75. {
  76. return $this->salario_base_colaboradors;
  77. }
  78. /**
  79. * Method addColaboradorContato
  80. * Add a ColaboradorContato to the Colaborador
  81. * @param $object Instance of ColaboradorContato
  82. */
  83. public function addColaboradorContato(ColaboradorContato $object)
  84. {
  85. $this->colaborador_contatos[] = $object;
  86. }
  87. /**
  88. * Method getColaboradorContatos
  89. * Return the Colaborador' ColaboradorContato's
  90. * @return Collection of ColaboradorContato
  91. */
  92. public function getColaboradorContatos()
  93. {
  94. return $this->colaborador_contatos;
  95. }
  96. /**
  97. * Reset aggregates
  98. */
  99. public function clearParts()
  100. {
  101. $this->proventos = array();
  102. $this->salario_base_colaboradors = array();
  103. $this->colaborador_contatos = array();
  104. }
  105. /**
  106. * Load the object and its aggregates
  107. * @param $id object ID
  108. */
  109. public function load($id)
  110. {
  111. // load the related Provento objects
  112. $repository = new TRepository('Provento');
  113. $criteria = new TCriteria;
  114. $criteria->add(new TFilter('id_colaborador', '=', $id));
  115. $this->proventos = $repository->load($criteria);
  116. // load the related SalarioBaseColaborador objects
  117. $repository = new TRepository('SalarioBaseColaborador');
  118. $criteria = new TCriteria;
  119. $criteria->add(new TFilter('id_colaborador', '=', $id));
  120. $this->salario_base_colaboradors = $repository->load($criteria);
  121. // load the related ColaboradorContato objects
  122. $repository = new TRepository('ColaboradorContato');
  123. $criteria = new TCriteria;
  124. $criteria->add(new TFilter('id_colaborador', '=', $id));
  125. $this->colaborador_contatos = $repository->load($criteria);
  126. // load the object itself
  127. return parent::load($id);
  128. }
  129. /**
  130. * Store the object and its aggregates
  131. */
  132. public function store()
  133. {
  134. // store the object itself
  135. parent::store();
  136. // delete the related Provento objects
  137. $criteria = new TCriteria;
  138. $criteria->add(new TFilter('id_colaborador', '=', $this->id));
  139. $repository = new TRepository('Provento');
  140. $repository->delete($criteria);
  141. // store the related Provento objects
  142. if ($this->proventos)
  143. {
  144. foreach ($this->proventos as $provento)
  145. {
  146. unset($provento->id);
  147. $provento->id_colaborador = $this->id;
  148. $provento->store();
  149. }
  150. }
  151. // delete the related SalarioBaseColaborador objects
  152. $criteria = new TCriteria;
  153. $criteria->add(new TFilter('id_colaborador', '=', $this->id));
  154. $repository = new TRepository('SalarioBaseColaborador');
  155. $repository->delete($criteria);
  156. // store the related SalarioBaseColaborador objects
  157. if ($this->salario_base_colaboradors)
  158. {
  159. foreach ($this->salario_base_colaboradors as $salario_base_colaborador)
  160. {
  161. unset($salario_base_colaborador->id);
  162. $salario_base_colaborador->id_colaborador = $this->id;
  163. $salario_base_colaborador->store();
  164. }
  165. }
  166. // delete the related ColaboradorContato objects
  167. $criteria = new TCriteria;
  168. $criteria->add(new TFilter('id_colaborador', '=', $this->id));
  169. $repository = new TRepository('ColaboradorContato');
  170. $repository->delete($criteria);
  171. // store the related ColaboradorContato objects
  172. if ($this->colaborador_contatos)
  173. {
  174. foreach ($this->colaborador_contatos as $colaborador_contato)
  175. {
  176. unset($colaborador_contato->id);
  177. $colaborador_contato->id_colaborador = $this->id;
  178. $colaborador_contato->store();
  179. }
  180. }
  181. }
  182. /**
  183. * Delete the object and its aggregates
  184. * @param $id object ID
  185. */
  186. public function delete($id = NULL)
  187. {
  188. $id = isset($id) ? $id : $this->id;
  189. // delete the related Provento objects
  190. $repository = new TRepository('Provento');
  191. $criteria = new TCriteria;
  192. $criteria->add(new TFilter('id_colaborador', '=', $id));
  193. $repository->delete($criteria);
  194. // delete the related SalarioBaseColaborador objects
  195. $repository = new TRepository('SalarioBaseColaborador');
  196. $criteria = new TCriteria;
  197. $criteria->add(new TFilter('id_colaborador', '=', $id));
  198. $repository->delete($criteria);
  199. // delete the related ColaboradorContato objects
  200. $repository = new TRepository('ColaboradorContato');
  201. $criteria = new TCriteria;
  202. $criteria->add(new TFilter('id_colaborador', '=', $id));
  203. $repository->delete($criteria);
  204. // delete the object itself
  205. parent::delete($id);
  206. }
  207. static public function newFromLogin($login)
  208. {
  209. $members = Colaborador::where('login', '=', $login)->load();
  210. if (isset($members[0]))
  211. {
  212. return $members[0];
  213. }
  214. }
  215. public function getProjectsList()
  216. {
  217. }
  218. }
  219. ?>


Aguardo vossa ajuda

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (5)


NR

Mauro, esse não parece ser o código de master/detail gerado pelo Studio.

Você está usando a TMultifield para adicionar os contatos?

MM

Grande Nataniel,
desde já agradeço pela disponibilidade. o fromulário gerei pelo estudio porém tem o contato o provento e mais outro detalhe ou seja são 3 detalhoes diferentes.

segue o controller do formulário completo.

 
  1. <?php
  2. class ColaboradorForm extends TPage
  3. {
  4. private $form;
  5. /**
  6. * Class constructor
  7. * Creates the page
  8. */
  9. function __construct()
  10. {
  11. parent::__construct();
  12. // creates the form
  13. $this->form = new TForm('colaborador_form');
  14. // creates the notebook
  15. $notebook = new BootstrapNotebookWrapper(new TNotebook(300, 130));
  16. $this->form->add($notebook);
  17. // creates the containers for each notebook page
  18. $page1 = new TTable;
  19. $page2 = new TTable;
  20. $page3 = new TTable;
  21. $page4 = new TTable;
  22. $page5 = new TTable;
  23. $page6 = new TTable;
  24. $page7 = new TTable;
  25. // adds two pages in the notebook
  26. $notebook->appendPage('Dados Cadastrais', $page1);
  27. $notebook->appendPage('Endereço', $page2);
  28. $notebook->appendPage('Dados de RH', $page3);
  29. $notebook->appendPage('Observações', $page4);
  30. $notebook->appendPage('Contatos', $page5);
  31. $notebook->appendPage('Salário Base', $page6);
  32. $notebook->appendPage('Proventos', $page7);
  33. // create the form fields
  34. $id = new TEntry('id');
  35. $cpf = new TEntry('cpf');
  36. $nome = new TEntry('name');
  37. $rg = new TEntry('rg');
  38. $data_de_nascimento = new TDate('data_nascimento');
  39. $sexo = new TCombo('sexo');
  40. // Endereço
  41. $cep = new TEntry('cep');
  42. $logradouro = new TEntry('logradouro');
  43. $numero = new TEntry('numero');
  44. $complemento = new TEntry('complemento');
  45. $bairro = new TEntry('bairro');
  46. $cidade = new TEntry('cidade');
  47. $estado = new TEntry('estado');
  48. // Dados RH
  49. $nome_mae = new TEntry('nome_mae');
  50. $nome_pai = new TEntry('nome_pai');
  51. $titulo_eleitor = new TEntry('titulo_eleitor');
  52. $ctps = new TEntry('ctps');
  53. $serie = new TEntry('serie');
  54. $certificado_reservista = new TEntry('certificado_reservista');
  55. $carteira_habilitacao = new TEntry('carteira_habilitacao');
  56. $data_exame_medico = new TDate('data_exame_medico');
  57. $cbo = new TEntry('cbo');
  58. $horas_trabalho = new TEntry('horas');
  59. $n_filhos = new TEntry('n_filhos');
  60. $dependentes_IRRF = new TEntry('dependentes_irrf');
  61. $conjuge = new TEntry('nome_conjuge');
  62. $data_nascimento_conjuge= new TDate('data_nascimento_conjuge');
  63. $data_afastamento = new TDate('data_afastamento');
  64. $grau_instrucao = new TDBCombo('id_grau_instrucao', 'database', 'GrauInstrucao', 'id', 'descricao', 'id');
  65. $banco = new TEntry('banco');
  66. $agencia = new TEntry('agencia');
  67. $conta = new TEntry('conta');
  68. $tipo_conta = new TEntry('tipo_conta');
  69. $pis_pasep = new TEntry('pis_pasep');
  70. // Contatos
  71. $multifield = new TMultiField('contatos');
  72. $multifield->setOrientation('horizontal');
  73. $tipo_de_contato = new TCombo('tipo');
  74. $descricao = new TEntry('descricao');
  75. $referencia = new TEntry('referencia');
  76. // Proventos
  77. $multifield2 = new TMultiField('proventos');
  78. $multifield2->setOrientation('horizontal');
  79. $rubrica = new TDBCombo('rubrica_rubrica_folha', 'database', 'RubricaFolha', 'rubrica', 'nome', 'rubrica');
  80. $historico = new TEntry('historico');
  81. $referencia_proventos = new TEntry('referencia');
  82. $valor = new TEntry('valor');
  83. $mes_referencia = new TDate('mes_referencia');
  84. $tipo_provento = new TCombo('tipo_provento');
  85. // Salário Base
  86. $multifield3 = new TMultiField('salario_base_colaborador');
  87. $multifield3->setOrientation('horizontal');
  88. $funcao = new TEntry('funcao');
  89. $salario = new TEntry('salario');
  90. $status = new TCombo('status');
  91. $cargo = new ">TDBSeekButton('id_cargo', 'database', 'colaborador_form', 'Cargo', 'descricao', 'salario_base_colaborador_id_cargo', 'salario_base_colaborador_cargo');
  92. $nome_cargo = new TEntry('salario_base_colaborador_cargo');
  93. $forma_de_pagamento_salario = new TDBCombo('id_forma_pagamento_salario', 'database', 'RubricaFolha', 'rubrica', 'descricao', 'rubrica');
  94. // Observações
  95. $observacoes = new TText('observacoes');
  96. // formating fields
  97. $cpf->setMask('999.999.999-99');
  98. $sexo_items = array();
  99. $sexo_items['Masculino']= 'Masculino';
  100. $sexo_items['Femenino'] = 'Femenino';
  101. $sexo->addItems($sexo_items);
  102. $tipo_de_contato_items = array();
  103. $tipo_de_contato_items['Telefone Residencial'] = 'Telefone Residencial';
  104. $tipo_de_contato_items['Telefone Celular'] = 'Telefone Celular';
  105. $tipo_de_contato_items['E-mail'] = 'E-mail';
  106. $tipo_de_contato_items['Ramal'] = 'Ramal';
  107. $tipo_de_contato->addItems($tipo_de_contato_items);
  108. $tipo_de_contato->setSize(160);
  109. $data_de_nascimento->setMask('dd/mm/yyyy');
  110. // Fields Size
  111. $id->setSize('20%');
  112. $cpf->setSize('50%');
  113. $rg->setSize('50%');
  114. $nome->setSize('100%');
  115. $descricao->setSize(150);
  116. $referencia->setSize(140);
  117. $rubrica->setSize(100);
  118. $valor->setSize(100);
  119. $mes_referencia->setSize(100);
  120. $tipo_provento->setSize(120);
  121. $funcao->setSize(160);
  122. $salario->setSize(100);
  123. $status->setSize(100);
  124. $cargo->setSize(80);
  125. $forma_de_pagamento_salario->setSize(160);
  126. $observacoes->setSize(800, 300);
  127. $data_nascimento_conjuge->setSize(100);
  128. $data_afastamento->setSize(100);
  129. $data_exame_medico->setSize(100);
  130. $data_de_nascimento->setSize(100);
  131. $cep->setSize(80);
  132. $logradouro->setSize(250);
  133. $numero->setSize(80);
  134. $estado->setSize(40);
  135. $ctps->setSize(120);
  136. $serie->setSize(40);
  137. $pis_pasep->setSize(120);
  138. $titulo_eleitor->setSize(120);
  139. $grau_instrucao->setSize(120);
  140. $certificado_reservista->setSize(120);
  141. $carteira_habilitacao->setSize(120);
  142. $cbo->setSize(120);
  143. $horas_trabalho->setSize(40);
  144. $n_filhos->setSize(40);
  145. $dependentes_IRRF->setSize(40);
  146. // set Editable
  147. $id->setEditable(false);
  148. // set Mask
  149. $data_nascimento_conjuge->setMask('dd/mm/yyyy');
  150. $data_afastamento->setMask('dd/mm/yyyy');
  151. $data_exame_medico->setMask('dd/mm/yyyy');
  152. $data_de_nascimento->setMask('dd/mm/yyyy');
  153. $mes_referencia->setMask('dd/mm/yyyy');
  154. $cep->setMask('99999-999');
  155. // set MaxLength
  156. $page1->style = 'width:50%';
  157. $page1->addRowSet( new TLabel('ID:'), $id );
  158. $page1->addRowSet( new TLabel('CPF:'), $cpf );
  159. $page1->addRowSet( new TLabel('RG:'), $rg );
  160. $page1->addRowSet( new TLabel('Nome:'), $nome );
  161. $page1->addRowSet( new TLabel('Data de Nascimento:'), $data_de_nascimento );
  162. $page1->addRowSet( new TLabel('Sexo:'), $sexo );
  163. $page2->addRowSet( new TLabel('CEP:'), $cep );
  164. $page2->addRowSet( new TLabel('Logradouro:'), $logradouro );
  165. $page2->addRowSet( new TLabel('Número:'), $numero );
  166. $page2->addRowSet( new TLabel('Complemento:'), $complemento );
  167. $page2->addRowSet( new TLabel('Bairro:'), $bairro );
  168. $page2->addRowSet( new TLabel('Cidade:'), $cidade );
  169. $page2->addRowSet( new TLabel('Estado:'), $estado );
  170. $multifield->setHeight(140);
  171. $multifield->addField('tipo', 'Tipo', $tipo_de_contato, 160, TRUE);
  172. $multifield->addField('descricao', 'Descrição', $descricao, 160, TRUE);
  173. $multifield->addField('referencia', 'Referência', $referencia, 150, FALSE);
  174. $multifield2->setHeight(140);
  175. $multifield2->addField('rubrica', 'Rubrica', $rubrica, 160, TRUE);
  176. $multifield2->addField('historico', 'Histórico', $historico, 160, TRUE);
  177. $multifield2->addField('referencia', 'Referência', $referencia_proventos, 160);
  178. $multifield2->addField('valor', 'Valor', $valor, 160);
  179. $multifield2->addField('mes_referencia', 'Mês de Referência', $mes_referencia, 160, TRUE);
  180. $multifield2->addField('tipo', 'Tipo', $tipo_provento, 160, TRUE);
  181. $multifield3->setHeight(140);
  182. $multifield3->addField('funcao', 'Função', $funcao, 160, TRUE);
  183. $multifield3->addField('salario', 'Salário Base', $salario, 160, TRUE);
  184. $multifield3->addField('status', 'Status', $status, 160, TRUE);
  185. $multifield3->addField('id_cargo', 'ID Cargo', $cargo, 160, TRUE);
  186. $multifield3->addField('cargo', 'Descrição do Cargo', $nome_cargo, 160, TRUE);
  187. $multifield3->addField('forma_pagamento_salario','Forma de Pagamento', $forma_de_pagamento_salario, 160, TRUE);
  188. // add a row for one field
  189. $row4 = $page4->addRow();
  190. $row4->addCell($observacoes);
  191. $row = $page5->addRow();
  192. $row->addCell($multifield);
  193. $row5 = $page3->addRow();
  194. $row5->addCell(new TLabel('CTPS:'));
  195. $row5->addCell($ctps);
  196. $row5->addCell(new TLabel('Serie:'));
  197. $row5->addCell($serie);
  198. $row5->addCell(new TLabel('PIS/PASEP:'));
  199. $row5->addCell($pis_pasep);
  200. $row5 = $page3->addRow();
  201. $row5->addCell(new TLabel('T. / Eleitor:'));
  202. $row5->addCell($titulo_eleitor);
  203. $row5->addCell(new TLabel('Grau de Instrução:'));
  204. $row5->addCell($grau_instrucao);
  205. $row5->addCell(new TLabel('C. R.:'));
  206. $row5->addCell($certificado_reservista);
  207. $row5 = $page3->addRow();
  208. $row5->addCell(new TLabel('C.N.H.:'));
  209. $row5->addCell($carteira_habilitacao);
  210. $row5->addCell(new TLabel('CBO:'));
  211. $row5->addCell($cbo);
  212. $row5->addCell(new TLabel('Horas Mensal:'));
  213. $row5->addCell($horas_trabalho);
  214. $row5 = $page3->addRow();
  215. $row5->addCell(new TLabel('Mãe:'));
  216. $row5->addCell($nome_mae);
  217. $row5->addCell(new TLabel('Pai:'));
  218. $row5->addCell($nome_pai);
  219. $row5->addCell(new TLabel('Conjuge:'));
  220. $row5->addCell($conjuge);
  221. $row5 = $page3->addRow();
  222. $row5->addCell(new TLabel('Data de Nascimento:'));
  223. $row5->addCell($data_nascimento_conjuge);
  224. $row5->addCell(new TLabel('N° Filhos:'));
  225. $row5->addCell($n_filhos);
  226. $row5->addCell(new TLabel('D. E. Médico:'));
  227. $row5->addCell($data_exame_medico);
  228. $row5 = $page3->addRow();
  229. $row5->addCell(new TLabel('Afastamento:'));
  230. $row5->addCell($data_afastamento);
  231. $row5->addCell(new TLabel('Dependentes IRRF:'));
  232. $row5->addCell($dependentes_IRRF);
  233. $row5->addCell(new TLabel('Banco:'));
  234. $row5->addCell($banco);
  235. $row5 = $page3->addRow();
  236. $row5->addCell(new TLabel('Agência:'));
  237. $row5->addCell($agencia);
  238. $row5->addCell(new TLabel('Conta:'));
  239. $row5->addCell($conta);
  240. $row5->addCell(new TLabel('T. Conta:'));
  241. $row5->addCell($tipo_conta);
  242. $row2 = $page6->addRow();
  243. $row2->addCell($multifield3);
  244. $row3 = $page7->addRow();
  245. $row3->addCell($multifield2);
  246. $button = TButton::create('save', array($this, 'onSave'), 'Save', 'fa:save');
  247. $this->form->setFields( array(
  248. $id,
  249. $cpf,
  250. $rg,
  251. $nome,
  252. $data_de_nascimento,
  253. $sexo,
  254. $cep,
  255. $logradouro,
  256. $numero,
  257. $complemento,
  258. $bairro,
  259. $cidade,
  260. $estado,
  261. $multifield,
  262. $multifield2,
  263. $multifield3,
  264. $observacoes,
  265. $nome_mae,
  266. $nome_pai,
  267. $titulo_eleitor,
  268. $ctps,
  269. $serie,
  270. $pis_pasep,
  271. $certificado_reservista,
  272. $carteira_habilitacao,
  273. $data_exame_medico,
  274. $cbo,
  275. $horas_trabalho,
  276. $n_filhos,
  277. $dependentes_IRRF,
  278. $conjuge,
  279. $data_nascimento_conjuge,
  280. $data_afastamento,
  281. $grau_instrucao,
  282. $banco,
  283. $agencia,
  284. $conta,
  285. $tipo_conta,
  286. $button
  287. )
  288. );
  289. // wrap the page content using vertical box
  290. $vbox = new TVBox;
  291. $vbox->style = 'width:100%';
  292. $vbox->add(new TXMLBreadCrumb('menu.xml', 'ColaboradorList'));
  293. $vbox->add($this->form);
  294. $vbox->add($button);
  295. parent::add($vbox);
  296. }
  297. /**
  298. * Get the post data
  299. */
  300. public function onSave()
  301. {
  302. try{
  303. TTransaction::open('database'); // abra a conexão
  304. // Obtem os dados do formulário como um active record Record Colaborator
  305. $colaborador = $this->form->getData('Colaborador');
  306. //echo '<pre>';var_dump($colaborador);die;
  307. if($colaborador->contatos){
  308. foreach($colaborador->contatos as $contato)
  309. {
  310. //var_dump($contato);die;
  311. $colaborador->addColaboradorContato($contato);
  312. }
  313. }
  314. if($colaborador->salario_base_colaborador){
  315. foreach($colaborador->salario_base_colaborador as $salario)
  316. {
  317. $colaborador->addSalarioBaseColaborador($salario);
  318. }
  319. }
  320. if($colaborador->proventos){
  321. foreach($colaborador->proventos as $provento)
  322. {
  323. $colaborador->addProvento($provento);
  324. }
  325. }
  326. $colaborador->cpf = preg_replace('/[^0-9]/','',$colaborador->cpf);
  327. $colaborador->cep = preg_replace('/[^0-9]/','',$colaborador->cep);
  328. $colaborador->store();
  329. $this->form->setData($colaborador);
  330. new TMessage('info', 'Dados cadastrados com sucesso');
  331. }catch(Exception $e){
  332. new TMessage('info', $e->getMessage());
  333. }
  334. }
  335. public function onEdit($param)
  336. {
  337. try
  338. {
  339. if (isset($param['key']))
  340. {
  341. $key = $param['key']; // get the parameter $key
  342. TTransaction::open('database'); // open a transaction
  343. $object = new Colaborador($key); // instantiates the Active Record
  344. $object->data_nascimento = TDate::date2br($object->data_nascimento);
  345. $object->cpf = $this->formataCPF($object->cpf);
  346. $object->cep = $this->formataCEP($object->cep);
  347. $this->form->setData($object); // fill the form
  348. TTransaction::close(); // close the transaction
  349. }
  350. else
  351. {
  352. $this->form->clear();
  353. }
  354. }
  355. catch (Exception $e) // in case of exception
  356. {
  357. new TMessage('error', $e->getMessage()); // shows the exception error message
  358. TTransaction::rollback(); // undo all pending operations
  359. }
  360. }
  361. public function formataCPF($cpf)
  362. {
  363. $cpf1 = substr($cpf,0,3);
  364. $cpf2 = substr($cpf,3,3);
  365. $cpf3 = substr($cpf,6,3);
  366. $cpf4 = substr($cpf,9,2);
  367. return "{$cpf1}.{$cpf2}.{$cpf3}-{$cpf4}";
  368. }
  369. public function formataCEP($cep)
  370. {
  371. $cep1 = substr($cep,0,5);
  372. $cep2 = substr($cep,5,3);
  373. return "{$cep1}-{$cep2}";
  374. }
  375. }
  376. ?>
</pre>
NR

A multifield tem a função setClass que serve para informar qual classe(model) deve ser retornada.
 
  1. <?php
  2. // Contatos
  3. $multifield = new TMultiField('contatos');
  4. $multifield->setOrientation('horizontal');
  5. $multifield->setClass('ColaboradorContato');
  6. ?>
MM

Obrigado meu carro, o erro parou, só que não grava.
Você faz ideia do que esteja acontecendo?
MM

Opa rodou aqui. vou fazer mais alguns testes. caso não aconteça nenhum outro erro, dou este tópico como encerrado. A principio Obrigado Nataniel.