Multi value não é salvo os itens do combo Ola, Pessoal, Estou com o seguinte problema, ao clicar em salvar os valores (id 's ) não são salvos, alguém pode me ajudar a identificar resolver o problema ? Segue código abaixo ...
RB
Multi value não é salvo os itens do combo  
Ola, Pessoal,

Estou com o seguinte problema, ao clicar em salvar os valores (id 's ) não são salvos, alguém pode me ajudar a identificar resolver o problema ?

Segue código abaixo

 
  1. <?php
  2. class ClienteFisicoBuilder extends TPage
  3. {
  4. private $form;
  5. public function __construct()
  6. {
  7. parent::__construct();
  8. $this->form = new BootstrapFormBuilder('frm_cliente_fisico');
  9. $this->form->setFormTitle('Cliente');
  10. $this->form->style='font-family:Arial Narrow;';
  11. // define the CSS class
  12. //$this->form->class='tdatagrid_table customized-table';
  13. // import the CSS file
  14. // parent::include_css('app/resources/custom-table.css');
  15. $dados_cliente = new TLabel('Dados Pessoais', '#1F4E78', 12, 'b');
  16. $dados_cliente->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;float:left;margin-top:-20px;font-family:Arial Narrow;';
  17. $this->form->addContent( [$dados_cliente] );
  18. // add a row with 2 slots
  19. //$label_id = new TLabel('Id','#1F4E78');
  20. // $label_id->style='text-align:left;float:left;';
  21. //div container para ajustar os label e campos
  22. $div_nome = new TElement("span");
  23. $div_nome->style="background-color=red;width:240px;";
  24. $label_nome = new TLabel('Nome','#1F4E78');
  25. $label_nome->style='text-align:left;float:left;font-family:Arial Narrow;';
  26. $lbl_data_nascto = new TLabel('Data Nascimento','#1F4E78');
  27. $lbl_data_nascto->style='text-align:left;float:left;font-family:Arial Narrow;';
  28. $lbl_estado_civil = new TLabel('Estado Cívil','#1F4E78');
  29. $lbl_estado_civil->style='text-align:left;float:left;font-family:Arial Narrow;';
  30. // $id = new TEntry('id');
  31. // $id->style='text-align:left;float:left;';
  32. $nome = new TEntry('nome');
  33. $nome->style='text-align:left;float:left;';
  34. $nome->addValidation('Data Nascimento', new TRequiredValidator);
  35. $data_nascimento = new TDate('data_nascimento');
  36. $data_nascimento->addValidation('Data Nascimento', new TRequiredValidator);
  37. $data_nascimento->style='text-align:left;float:left;';
  38. $data_nascimento->setMask('dd/mm/yyyy'); // define date mask
  39. //$data_nascimento->setDatabaseMask('yyyy-mm-dd');
  40. $estado_civil = new TDBCombo('estado_civil_id','sgvo', 'Civil', 'id', 'descricao');
  41. $estado_civil->setDefaultOption(false);
  42. $lbl_genero = new TLabel('Genero','#1F4E78');
  43. $lbl_genero->style ='text-align:left;float:left;width:100%;font-family:Arial Narrow;';
  44. $genero_id = new TCombo('genero_id');
  45. $genero_id->addItems( ['1' => 'Masculino', '2' => 'Feminino'] );
  46. $genero_id->setDefaultOption(false);
  47. $lbl_cpf = new TLabel('CPF','#1F4E78');
  48. $cpf = new TEntry('cpf');
  49. $cpf->setMask('000.000.000.00');
  50. $cpf->addValidation('CPF', new TCPFValidator, new TMaxValueValidator,array(14));
  51. //$cpf->setDatabaseMask('00000000000');
  52. $lbl_cpf->style='text-align:left;float:left;font-family:Arial Narrow;';
  53. $lbl_rg = new TLabel('RG','#1F4E78');
  54. $rg = new TEntry('rg');
  55. $rg->setMask('00.000.000.00');
  56. $rg->setMaxLength(12);
  57. $lbl_rg->style='text-align:left;float:left;font-family:Arial Narrow;';
  58. /*
  59. $lbl_cnh = new TLabel('CNH','#1F4E78');
  60. $cnh = new TEntry('cnh');
  61. $cnh->setMask('00.000.000.00');
  62. $cnh->setMaxLength(12);
  63. $lbl_cnh->style='text-align:left;float:left;';
  64. */
  65. $lbl_etnia = new TLabel('Etnia','#1F4E78');
  66. $etnia_id = new TDBCombo('etnia_id','sgvo','Etnia','id','descricao');
  67. $etnia_id->setDefaultOption(false);
  68. // $this->form->addFields( [$label_id,$id] );
  69. $this->form->addFields( [$label_nome,$lbl_data_nascto,$lbl_estado_civil] );
  70. $this->form->addFields( [$nome,$data_nascimento,$estado_civil] );
  71. $this->form->addFields( [$lbl_genero,$lbl_etnia,$lbl_cpf,$lbl_rg] );
  72. $this->form->addFields( [$genero_id,$etnia_id,$cpf,$rg] );
  73. //dados de contato
  74. $contato = new TLabel('Contato', '#1F4E78', 12, 'b');
  75. $contato->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  76. $lbl_ddi = new TLabel('DDI','#1F4E78');
  77. $lbl_ddi->style='text-align:left;font-family:Arial Narrow;';
  78. $ddi = new TEntry('ddi[]');
  79. $lbl_dd = new TLabel('DDD','#1F4E78');
  80. $lbl_dd->style='text-align:left;font-family:Arial Narrow;';
  81. $dd = new TEntry('dd[]');
  82. $lbl_tipo_telefone = new TLabel('Tipo Telefone','#1F4E78');
  83. $lbl_tipo_telefone->style='text-align:left;font-family:Arial Narrow;';
  84. $tipo_telefone_id = new TDBCombo('TipoTelefone','sgvo','TipoTelefone','id','descricao');
  85. $tipo_telefone_id->setDefaultOption(false);
  86. $lbl_telefone = new TLabel('Telefone','#1F4E78');
  87. $lbl_telefone->style='text-align:left;font-family:Arial Narrow;';
  88. $telefone = new TEntry('telefone[]');
  89. $telefone->setMask('9999-9999');
  90. $lbl_operadora = new TLabel('Operadora','#1F4E78');
  91. $lbl_operadora->style='text-align:left;font-family:Arial Narrow;';
  92. $operadora_id = new TDBCombo('Operadora','sgvo','Operadora','id','nome');
  93. $operadora_id->setDefaultOption(false);
  94. $lbl_email = new TLabel('Email','#1F4E78');
  95. $lbl_email->style='text-align:left;;font-family:Arial Narrow;';
  96. $email = new TEntry('email');
  97. //$email->addValidation('email', new TEmailValidator); // email field
  98. $lbl_site = new TLabel('Site','#1F4E78');
  99. $lbl_site->style='text-align:left;font-family:Arial Narrow;';
  100. $site = new TEntry('site');
  101. $this->form->addContent( [$contato] );
  102. //adiciona campos para contato / telefone
  103. $table = new TTable;
  104. $table->style='border 1px solid #333;font-family:Arial Narrow;';
  105. $table->width='100%';
  106. $table->addSection('thead');
  107. $table->addRowSet([$lbl_ddi,$lbl_dd,$lbl_tipo_telefone,$lbl_telefone,$lbl_operadora]);
  108. $table->addSection('tbody');
  109. for ($n=0; $n<=0; $n++)
  110. {
  111. // create delete button
  112. $del = new TImage('fa:trash-o blue');
  113. $del->onclick = 'ttable_remove_row(this)';
  114. // create add button
  115. $add = new TButton('clone');
  116. $add->setLabel('Adicionar');
  117. $add->setImage('fa:plus-circle green');
  118. $table->addRowSet( [$ddi,$dd,$tipo_telefone_id,$telefone,$operadora_id, $del]);
  119. }
  120. $add->addFunction('ttable_clone_previous_row(this)');
  121. $table->addRowSet($add);
  122. $this->form->addFields( [$table]);
  123. $this->form->addFields( [ $lbl_email,$lbl_site] );
  124. $this->form->addFields( [ $email,$site] );
  125. //dados de correspondência
  126. $lbl_endereco = new TLabel('Endereco', '#1F4E78', 12, 'b');
  127. $lbl_endereco->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  128. $lbl_cep = new TLabel('Cep', '#1F4E78');
  129. $lbl_cep->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  130. $cep = new TEntry('cep');
  131. $cep->addValidation('CEP', new TRequiredValidator, new TMaxValueValidator,array(8));
  132. $lbl_logradouro = new TLabel('Logradouro', '#1F4E78');
  133. $lbl_logradouro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  134. $logradouro = new TEntry('logradouro');
  135. $logradouro->style='float:left;';
  136. $logradouro->addValidation('Logradouro', new TRequiredValidator);
  137. $lbl_numero = new TLabel('Número', '#1F4E78');
  138. $lbl_numero->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  139. $numero = new TEntry('numero');
  140. $numero->addValidation('Número', new TRequiredValidator);
  141. $lbl_bairro = new TLabel('Bairro', '#1F4E78');
  142. $lbl_bairro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  143. $bairro = new TEntry('bairro');
  144. $bairro->addValidation('Bairro', new TRequiredValidator);
  145. $lbl_cidade = new TLabel('Cidade', '#1F4E78');
  146. $lbl_cidade->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  147. $cidade = new TEntry('cidade');
  148. $cidade->addValidation('Cidade', new TRequiredValidator);
  149. $lbl_uf = new TLabel('Estado', '#1F4E78');
  150. $lbl_uf->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  151. $uf = new TEntry('uf');
  152. $uf->addValidation('Estado', new TRequiredValidator);
  153. $lbl_complemento = new TLabel('Complemento', '#1F4E78');
  154. $lbl_complemento->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  155. $complemento = new TEntry('complemento');
  156. $label_nome->setSize('40%');
  157. $nome->setSize('40%');
  158. $lbl_data_nascto->setSize('20%');
  159. $data_nascimento->setSize('20%');
  160. $lbl_estado_civil->setSize('20%');
  161. $estado_civil->setSize('20%');
  162. $lbl_genero->setSize('20%');
  163. $genero_id->setSize('20%');
  164. $lbl_cpf->setSize('20%');
  165. $cpf->setSize('20%');
  166. $lbl_rg->setSize('20%');
  167. $rg->setSize('20%');
  168. //$lbl_cnh->setSize('19%');
  169. //$cnh->setSize('19%');
  170. $lbl_etnia->setSize('20%');
  171. $etnia_id->setSize('20%');
  172. $lbl_ddi->setSize('40');
  173. $ddi->setSize('40');
  174. $lbl_dd->setSize('40');
  175. $dd->setSize('40');
  176. $lbl_tipo_telefone->setSize('100');
  177. $tipo_telefone_id->setSize('100');
  178. $lbl_telefone->setSize('100');
  179. $telefone->setSize('100');
  180. $operadora_id ->setSize('100');
  181. $lbl_email->setSize('40%');
  182. $lbl_site->setSize('40%');
  183. $email->setSize('40%');
  184. $site->setSize('40%');
  185. $lbl_cep->setSize('28.5%');
  186. $cep->setSize('20%');
  187. $lbl_logradouro->setSize('40%');
  188. $logradouro->setSize('40%');
  189. $lbl_numero->setSize('20%');
  190. $numero->setSize('20%');
  191. $lbl_bairro->setSize('20%');
  192. $lbl_cidade->setSize('32%');
  193. $lbl_uf->setSize('8%');
  194. $bairro->setSize('20%');
  195. $cidade->setSize('32%');
  196. $uf->setSize('8%');
  197. $lbl_complemento->setSize('20%');
  198. $complemento->setSize('20%');
  199. $btn_cep = new TButton('btn_cep');
  200. $btn_cep->setSize(100);
  201. $btn_cep->style='float:left;padding-rigth:10px;color:#1F4E78';
  202. $btn_cep->setAction(new TAction(array($this,'onCep')),'Busca Cep');
  203. $btn_cep->setImage('fa:search blue');
  204. $this->form->addFields( [$lbl_endereco] );
  205. $this->form->addFields( [$lbl_cep,$lbl_logradouro,$lbl_numero] );
  206. $this->form->addFields( [$cep,$btn_cep,$logradouro,$numero] );
  207. $this->form->addFields( [$lbl_bairro,$lbl_cidade,$lbl_uf,$lbl_complemento] );
  208. $this->form->addFields( [$bairro,$cidade,$uf,$complemento] );
  209. $this->form->addAction('Salvar', new TAction(array($this, 'onSave')), 'ico_save.png');
  210. // wrap the page content using vertical box
  211. $vbox = new TVBox;
  212. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  213. $vbox->add($this->form);
  214. parent::add($this->form);
  215. }
  216. /**
  217. * Post data
  218. */
  219. function onSave($param){
  220. $organizacao_id = TSession::getValue('organizacion_id'); // pega id da empresa
  221. $atualizacao = date('Y-m-d H:m:s');
  222. try
  223. {
  224. TTransaction::open('centinel'); // open a transaction
  225. $data = $this->form->getData(); // get the form data into an active record Pessoa
  226. $pessoa = new Pessoa;
  227. $pessoa->fromArray((array) $data);
  228. $this->form->validate();// form validation
  229. /**
  230. // Enable Debug logger for SQL operations inside the transaction
  231. TTransaction::setLogger(new TLoggerSTD); // standard output
  232. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  233. **/
  234. $pessoa->nome = $data->nome;
  235. $pessoa->data_nascimento = TDate::date2us($data->data_nascimento);
  236. $pessoa->organizacao_id = $organizacao_id;
  237. $pessoa->tipo_pessoa_id = 1;
  238. $pessoa->store(); // save the object
  239. $pessoa_id = $pessoa->id;
  240. if($pessoa_id)
  241. {
  242. $cliente = new Cliente;
  243. $cliente->pessoa_id = $pessoa_id;
  244. $cliente->organizacao_id = $organizacao_id;
  245. $cliente->store();
  246. $cliente_id = $cliente->id;
  247. if($cliente_id)
  248. {
  249. $fisica = new Fisica;
  250. $fisica->pessoa_id = $pessoa_id;
  251. //$fisica->cpf = $data->cpf;
  252. $fisica->cpf = str_replace(".", "", $data->cpf);
  253. //$fisica->rg = $data->rg;
  254. $fisica->rg = str_replace(".", "", $data->rg);
  255. $fisica->genero_id = $data->genero_id;
  256. $fisica->civil_id = $data->estado_civil_id;
  257. $fisica->organizacao_id = $organizacao_id;
  258. $fisica->etnia_id = $data->etnia_id;
  259. $fisica->store();
  260. }
  261. $pessoa_endereco = new PessoaEndereco;
  262. /*
  263. if(!empty($data->telefone))
  264. {
  265. foreach($data['telefone'] as $row =>$contatos)
  266. {
  267. */
  268. //Adiciona contato
  269. $contato = new Contato;
  270. $contato->pessoa_id = $pessoa_id;
  271. $contato->tipo_telefone_id = $data->tipo_telefone_id;
  272. $contato->telefone = $data->telefone;
  273. $contato->operadora_id = $data->operadora_id;
  274. $contato->email = $data->email;
  275. $contato->site = $data->site;
  276. //$pessoa->addContato($contato);
  277. $contato->store();
  278. /*
  279. }
  280. }
  281. */
  282. }
  283. $this->form->setData( $this->form->getData() );// set the data back to the form
  284. TTransaction::close();// close the transaction
  285. // reload form and session items
  286. $this->onEdit(array('key'=>$pessoa->id));
  287. echo '<pre>';
  288. print_r($data);
  289. echo '</pre>';
  290. }
  291. catch (Exception $e) // in case of exception
  292. {
  293. new TMessage('error', $e->getMessage());
  294. $this->form->setData( $this->form->getData() ); // keep form data
  295. TTransaction::rollback();
  296. }
  297. }
  298. /**
  299. * method onCep()
  300. * Executed whenever the user clicks at the edit button da datagrid
  301. */
  302. function onCep($param){
  303. $retorno = Endereco::BuscaCep($param['cep']);
  304. if ( $retorno )
  305. {
  306. $data = $this->form->getData();
  307. $data->ibge = strtoupper( $retorno['ibge']);
  308. $data->gia = strtoupper( $retorno['gia']);
  309. $data->logradouro = strtoupper( $retorno['logradouro']);
  310. $data->bairro = strtoupper( $retorno['bairro']);
  311. $data->cidade = strtoupper( $retorno['localidade']);
  312. $data->uf = strtoupper( $retorno['uf']);
  313. $this->form->setData($data);
  314. }
  315. else {
  316. new TMessage("error", "CEP - Em Branco ou Inválido");
  317. }
  318. }
  319. function onEdit($param)
  320. {
  321. }
  322. }
  323. ?>


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 (4)


NR

Primeiro confira o nome dos campos. Você criou o campo com o nome TipoTelefone e na hora de salvar está buscando o atributo tipo_telefone_id.
E veja o link abaixo, a maneira de tratar as informações de formulários multivalues é um pouco diferente:
adianti.com.br/framework_files/tutor/index.php?class=SaleMultiValueF
RB

Então,

Tentei seguir o exemplo da video aula e também do link que passou, mas não consegui,

Pode me ajudar a corrigir ?
RB

 
  1. <?php
  2. class ClienteFisicoBuilder extends TPage
  3. {
  4. protected $form;
  5. protected $table_contato;
  6. protected $deta_row;
  7. public function __construct($param)
  8. {
  9. parent::__construct($param);
  10. $this->form = new BootstrapFormBuilder('frm_cliente_fisico');
  11. $this->form->setFormTitle('Cliente');
  12. $this->form->style='font-family:Arial Narrow;width:100%;';
  13. $dados_cliente = new TLabel('Dados Pessoais', '#1F4E78', 12, 'b');
  14. $dados_cliente->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;float:left;margin-top:-20px;font-family:Arial Narrow;';
  15. $this->form->addContent( [$dados_cliente] );
  16. $lbl_id = new TLabel('ID','#1F4E78');
  17. $label_nome = new TLabel('Nome','#1F4E78');
  18. $label_nome->style='text-align:left;float:left;font-family:Arial Narrow;';
  19. $lbl_data_nascto = new TLabel('Data Nascimento','#1F4E78');
  20. $lbl_data_nascto->style='text-align:left;float:left;font-family:Arial Narrow;';
  21. $lbl_estado_civil = new TLabel('Estado Cívil','#1F4E78');
  22. $lbl_estado_civil->style='text-align:left;float:left;font-family:Arial Narrow;';
  23. $id = new TEntry('id');
  24. $id->setEditable(false);
  25. $nome = new TEntry('nome');
  26. $nome->style='text-align:left;float:left;';
  27. $nome->addValidation('Data Nascimento', new TRequiredValidator);
  28. $data_nascimento = new TDate('data_nascimento');
  29. $data_nascimento->addValidation('Data Nascimento', new TRequiredValidator);
  30. $data_nascimento->style='text-align:left;float:left;';
  31. $data_nascimento->setMask('dd/mm/yyyy'); // define date mask
  32. //$data_nascimento->setDatabaseMask('yyyy-mm-dd');
  33. $estado_civil = new TDBCombo('estado_civil_id','sgvo', 'Civil', 'id', 'descricao');
  34. $estado_civil->setDefaultOption(false);
  35. $lbl_genero = new TLabel('Genero','#1F4E78');
  36. $lbl_genero->style ='text-align:left;float:left;width:100%;font-family:Arial Narrow;';
  37. $genero_id = new TCombo('genero_id');
  38. $genero_id->addItems( ['1' => 'Masculino', '2' => 'Feminino'] );
  39. $genero_id->setDefaultOption(false);
  40. $lbl_cpf = new TLabel('CPF','#1F4E78');
  41. $cpf = new TEntry('cpf');
  42. $cpf->setMask('000.000.000.00');
  43. $cpf->addValidation('CPF', new TCPFValidator, new TMaxValueValidator,array(14));
  44. //$cpf->setDatabaseMask('00000000000');
  45. $lbl_cpf->style='text-align:left;float:left;font-family:Arial Narrow;';
  46. $lbl_rg = new TLabel('RG','#1F4E78');
  47. $rg = new TEntry('rg');
  48. $rg->setMask('00.000.000.00');
  49. $rg->setMaxLength(12);
  50. $lbl_rg->style='text-align:left;float:left;font-family:Arial Narrow;';
  51. /*
  52. $lbl_cnh = new TLabel('CNH','#1F4E78');
  53. $cnh = new TEntry('cnh');
  54. $cnh->setMask('00.000.000.00');
  55. $cnh->setMaxLength(12);
  56. $lbl_cnh->style='text-align:left;float:left;';
  57. */
  58. $lbl_etnia = new TLabel('Etnia','#1F4E78');
  59. $etnia_id = new TDBCombo('etnia_id','sgvo','Etnia','id','descricao');
  60. $etnia_id->setDefaultOption(false);
  61. // $this->form->addFields( [$label_id,$id] );
  62. $this->form->addFields( [$lbl_id,$label_nome,$lbl_data_nascto,$lbl_estado_civil] );
  63. $this->form->addFields( [$id,$nome,$data_nascimento,$estado_civil] );
  64. $this->form->addFields( [$lbl_genero,$lbl_etnia,$lbl_cpf,$lbl_rg] );
  65. $this->form->addFields( [$genero_id,$etnia_id,$cpf,$rg] );
  66. //dados de contato
  67. $contato = new TLabel('Contato', '#1F4E78', 12, 'b');
  68. $contato->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  69. $lbl_ddi = new TLabel('DDI','#1F4E78');
  70. $lbl_ddi->style='text-align:left;font-family:Arial Narrow;';
  71. $ddi = new TEntry('ddi[]');
  72. $lbl_dd = new TLabel('DDD','#1F4E78');
  73. $lbl_dd->style='text-align:left;font-family:Arial Narrow;';
  74. $dd = new TEntry('dd[]');
  75. $lbl_tipo_telefone = new TLabel('Tipo Telefone','#1F4E78');
  76. $lbl_tipo_telefone->style='text-align:left;font-family:Arial Narrow;';
  77. $tipo_telefone_id = new TDBCombo('tipo_telefone_id[]','sgvo','TipoTelefone','id','descricao');
  78. $tipo_telefone_id->setDefaultOption(false);
  79. $lbl_telefone = new TLabel('Telefone','#1F4E78');
  80. $lbl_telefone->style='text-align:left;font-family:Arial Narrow;';
  81. $telefone = new TEntry('telefone[]');
  82. $telefone->setMask('9999-9999');
  83. $lbl_operadora = new TLabel('Operadora','#1F4E78');
  84. $lbl_operadora->style='text-align:left;font-family:Arial Narrow;';
  85. $operadora_id = new TDBCombo('operadora_id[]','sgvo','Operadora','id','nome');
  86. $operadora_id->setDefaultOption(false);
  87. $lbl_email = new TLabel('Email','#1F4E78');
  88. $lbl_email->style='text-align:left;;font-family:Arial Narrow;';
  89. $email = new TEntry('email');
  90. //$email->addValidation('email', new TEmailValidator); // email field
  91. $lbl_site = new TLabel('Site','#1F4E78');
  92. $lbl_site->style='text-align:left;font-family:Arial Narrow;';
  93. $site = new TEntry('site');
  94. $this->form->addContent( [$contato] );
  95. //adiciona campos para contato / telefone
  96. $table = new TTable;
  97. $table->style='border 1px solid #333;font-family:Arial Narrow;';
  98. $table->width='100%';
  99. $table->addSection('thead');
  100. $table->addRowSet([$lbl_ddi,$lbl_dd,$lbl_tipo_telefone,$lbl_telefone,$lbl_operadora]);
  101. $table->addSection('tbody');
  102. for ($n=0; $n<=0; $n++)
  103. {
  104. // create delete button
  105. $del = new TImage('fa:trash-o blue');
  106. $del->onclick = 'ttable_remove_row(this)';
  107. // create add button
  108. $add = new TButton('clone');
  109. $add->setLabel('Adicionar');
  110. $add->setImage('fa:plus-circle green');
  111. $table->addRowSet( [$ddi,$dd,$tipo_telefone_id,$telefone,$operadora_id, $del]);
  112. }
  113. $add->addFunction('ttable_clone_previous_row(this)');
  114. $table->addRowSet($add);
  115. $row = array($table);
  116. $this->form->addFields($row);
  117. $this->form->addFields( [ $lbl_email,$lbl_site] );
  118. $this->form->addFields( [ $email,$site] );
  119. //dados de correspondência
  120. $lbl_endereco = new TLabel('Endereco', '#1F4E78', 12, 'b');
  121. $lbl_endereco->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  122. $lbl_cep = new TLabel('Cep', '#1F4E78');
  123. $lbl_cep->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  124. $cep = new TEntry('cep');
  125. $cep->addValidation('CEP', new TRequiredValidator, new TMaxValueValidator,array(8));
  126. $lbl_logradouro = new TLabel('Logradouro', '#1F4E78');
  127. $lbl_logradouro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  128. $logradouro = new TEntry('logradouro');
  129. $logradouro->style='float:left;';
  130. $logradouro->addValidation('Logradouro', new TRequiredValidator);
  131. $lbl_numero = new TLabel('Número', '#1F4E78');
  132. $lbl_numero->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  133. $numero = new TEntry('numero');
  134. $numero->addValidation('Número', new TRequiredValidator);
  135. $lbl_bairro = new TLabel('Bairro', '#1F4E78');
  136. $lbl_bairro->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  137. $bairro = new TEntry('bairro');
  138. $bairro->addValidation('Bairro', new TRequiredValidator);
  139. $lbl_cidade = new TLabel('Cidade', '#1F4E78');
  140. $lbl_cidade->style='text-align:left;border-bottom:1px solid #c0c0c0;width:100%;font-family:Arial Narrow;';
  141. $cidade = new TEntry('cidade');
  142. $cidade->addValidation('Cidade', new TRequiredValidator);
  143. $lbl_uf = new TLabel('Estado', '#1F4E78');
  144. $lbl_uf->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  145. $uf = new TEntry('uf');
  146. $uf->addValidation('Estado', new TRequiredValidator);
  147. $lbl_complemento = new TLabel('Complemento', '#1F4E78');
  148. $lbl_complemento->style='text-align:left;border-bottom:1px solid #c0c0c0;font-family:Arial Narrow;';
  149. $complemento = new TEntry('complemento');
  150. $lbl_id->setSize('10%');
  151. $label_nome->setSize('30%');
  152. $nome->setSize('30%');
  153. $id->setSize('10%');
  154. $lbl_data_nascto->setSize('20%');
  155. $data_nascimento->setSize('20%');
  156. $lbl_estado_civil->setSize('20%');
  157. $estado_civil->setSize('20%');
  158. $lbl_genero->setSize('20%');
  159. $genero_id->setSize('20%');
  160. $lbl_cpf->setSize('20%');
  161. $cpf->setSize('20%');
  162. $lbl_rg->setSize('20%');
  163. $rg->setSize('20%');
  164. //$lbl_cnh->setSize('19%');
  165. //$cnh->setSize('19%');
  166. $lbl_etnia->setSize('20%');
  167. $etnia_id->setSize('20%');
  168. $lbl_ddi->setSize('40');
  169. $ddi->setSize('40');
  170. $lbl_dd->setSize('40');
  171. $dd->setSize('40');
  172. $lbl_tipo_telefone->setSize('100');
  173. $tipo_telefone_id->setSize('100');
  174. $lbl_telefone->setSize('100');
  175. $telefone->setSize('100');
  176. $operadora_id ->setSize('100');
  177. $lbl_email->setSize('40%');
  178. $lbl_site->setSize('40%');
  179. $email->setSize('40%');
  180. $site->setSize('40%');
  181. $lbl_cep->setSize('28.5%');
  182. $cep->setSize('20%');
  183. $lbl_logradouro->setSize('40%');
  184. $logradouro->setSize('40%');
  185. $lbl_numero->setSize('20%');
  186. $numero->setSize('20%');
  187. $lbl_bairro->setSize('20%');
  188. $lbl_cidade->setSize('32%');
  189. $lbl_uf->setSize('8%');
  190. $bairro->setSize('20%');
  191. $cidade->setSize('32%');
  192. $uf->setSize('8%');
  193. $lbl_complemento->setSize('20%');
  194. $complemento->setSize('20%');
  195. $btn_cep = new TButton('btn_cep');
  196. $btn_cep->setSize(100);
  197. $btn_cep->style='float:left;padding-rigth:10px;color:#1F4E78';
  198. $btn_cep->setAction(new TAction(array($this,'onCep')),'Busca Cep');
  199. $btn_cep->setImage('fa:search blue');
  200. $this->form->addFields( [$lbl_endereco] );
  201. $this->form->addFields( [$lbl_cep,$lbl_logradouro,$lbl_numero] );
  202. $this->form->addFields( [$cep,$btn_cep,$logradouro,$numero] );
  203. $this->form->addFields( [$lbl_bairro,$lbl_cidade,$lbl_uf,$lbl_complemento] );
  204. $this->form->addFields( [$bairro,$cidade,$uf,$complemento] );
  205. $this->form->addAction('Salvar', new TAction(array($this, 'onSave')), 'ico_save.png');
  206. // wrap the page content using vertical box
  207. $vbox = new TVBox;
  208. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  209. $vbox->add($this->form);
  210. parent::add($this->form);
  211. }
  212. /**
  213. * Post data
  214. */
  215. function onSave($param){
  216. $organizacao_id = TSession::getValue('organizacion_id'); // pega id da empresa
  217. $atualizacao = date('Y-m-d H:m:s');
  218. try
  219. {
  220. TTransaction::open('centinel'); // open a transaction
  221. $data = $this->form->getData(); // get the form data into an active record Pessoa
  222. $pessoa = new Pessoa;
  223. $pessoa->fromArray((array) $data);
  224. $this->form->validate();// form validation
  225. /**
  226. // Enable Debug logger for SQL operations inside the transaction
  227. TTransaction::setLogger(new TLoggerSTD); // standard output
  228. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  229. **/
  230. $pessoa->nome = $data->nome;
  231. $pessoa->data_nascimento = TDate::date2us($data->data_nascimento);
  232. $pessoa->organizacao_id = $organizacao_id;
  233. $pessoa->tipo_pessoa_id = 1;
  234. $pessoa->store(); // save the object
  235. $pessoa_id = $pessoa->id;
  236. if($pessoa_id)
  237. {
  238. $cliente = new Cliente;
  239. $cliente->pessoa_id = $pessoa_id;
  240. $cliente->organizacao_id = $organizacao_id;
  241. $cliente->store();
  242. $cliente_id = $cliente->id;
  243. if($cliente_id)
  244. {
  245. $fisica = new Fisica;
  246. $fisica->pessoa_id = $pessoa_id;
  247. //$fisica->cpf = $data->cpf;
  248. $fisica->cpf = str_replace(".", "", $data->cpf);
  249. //$fisica->rg = $data->rg;
  250. $fisica->rg = str_replace(".", "", $data->rg);
  251. $fisica->genero_id = $data->genero_id;
  252. $fisica->civil_id = $data->estado_civil_id;
  253. $fisica->organizacao_id = $organizacao_id;
  254. $fisica->etnia_id = $data->etnia_id;
  255. $fisica->store();
  256. }
  257. $pessoa_endereco = new PessoaEndereco;
  258. if(!empty($param['telefone']) And is_array($param['operadora_id']))
  259. {
  260. foreach($param['telefone'] as $row =>$contatos)
  261. {
  262. //Adiciona contato
  263. $contato = new Contato;
  264. $contato->pessoa_id = $pessoa_id;
  265. $contato->ddi = $param['ddi'];
  266. $contato->dd = $param['dd'];
  267. $contato->tipo_telefone_id = $param['tipo_telefone_id'];
  268. $contato->telefone = $param['telefone'];
  269. $contato->operadora_id = $param['operadora_id'];
  270. //$pessoa->addContato($contato);
  271. $contato->store();
  272. $contato_id = $contato->id;
  273. }
  274. $contato->email = $param->email;
  275. $contato->site = $data->site;
  276. }
  277. }
  278. $this->form->setData( $this->form->getData() );// set the data back to the form
  279. $data->id = $pessoa->id;
  280. TTransaction::close();// close the transaction
  281. // reload form and session items
  282. $this->onEdit(array('key'=>$pessoa->id));
  283. echo '<pre>';
  284. print_r($data);
  285. echo '</pre>';
  286. }
  287. catch (Exception $e) // in case of exception
  288. {
  289. new TMessage('error', $e->getMessage());
  290. $this->form->setData( $this->form->getData() ); // keep form data
  291. TTransaction::rollback();
  292. }
  293. }
  294. /**
  295. * method onCep()
  296. * Executed whenever the user clicks at the edit button da datagrid
  297. */
  298. public function onCep($param){
  299. $retorno = Endereco::BuscaCep($param['cep']);
  300. if ( $retorno )
  301. {
  302. $data = $this->form->getData();
  303. $data->ibge = strtoupper( $retorno['ibge']);
  304. $data->gia = strtoupper( $retorno['gia']);
  305. $data->logradouro = strtoupper( $retorno['logradouro']);
  306. $data->bairro = strtoupper( $retorno['bairro']);
  307. $data->cidade = strtoupper( $retorno['localidade']);
  308. $data->uf = strtoupper( $retorno['uf']);
  309. $this->form->setData($data);
  310. }
  311. else {
  312. new TMessage("error", "CEP - Em Branco ou Inválido");
  313. }
  314. }
  315. function onEdit($param)
  316. {
  317. }
  318. }
  319. ?>

NR

Como esses campos são arrays, você precisa informar qual o índice($row) na hora de atribuí-los ao objeto $contato:
 
  1. <?php
  2. foreach($param['telefone'] as $row =>$contatos)
  3. {
  4. //Adiciona contato
  5. $contato = new Contato;
  6. $contato->pessoa_id = $pessoa_id;
  7. $contato->ddi = $param['ddi'][$row];
  8. $contato->dd = $param['dd'][$row];
  9. ...
  10. }
  11. ?>