FF
Cadastro cliente com vinculo de usuário
Boa tarde! Fui orientado a não alterar as classes padrão do framework, justamente devido as atualizações que pode sofrer e o trabalho de ajustar as customizações ser inviável ao projeto. Havia criado campos que representava dados de cadastro de clientes na tabela 'system_user' e ajustado as classes 'SystemUserForm' e 'SystemUserList' com os campos necessários. Então como sugerido em apoio anterior, criei uma FK 'system_user_id' em uma tabela de nome 'clientes' e ajustei o filtro de sessão. O problema agora é que não estou conseguindo encontrar um meio de carregar/gravar dados na tabela 'cliente' através do 'SystemUserForm'. São apenas 5 campos, mas não encontrei uma forma de ajustar os metodos 'onEdit' e 'onSave'. A model está ok, e funcionando em outras telas.. porem na de cadastro não consigo evoluir. Os campos são os vazios da imagem. Os métodos são os padrões que vem no fw!
Alguem consegue me apoiar?
- <?php
- public function onSave($param)
- {
- try
- {
- // open a transaction with database 'permission'
- TTransaction::open('permission');
- $data = $this->form->getData();
- $this->form->setData($data);
- $object = new SystemUser;
- $object->fromArray( (array) $data );
- $senha = $object->password;
- if( empty($object->login) )
- {
- throw new Exception(TAdiantiCoreTranslator::translate('The field ^1 is required', _t('Login')));
- }
- if( empty($object->id) )
- {
- if (SystemUser::newFromLogin($object->login) instanceof SystemUser)
- {
- throw new Exception(_t('An user with this login is already registered'));
- }
- if (SystemUser::newFromEmail($object->email) instanceof SystemUser)
- {
- throw new Exception(_t('An user with this e-mail is already registered'));
- }
- if ( empty($object->password) )
- {
- throw new Exception(TAdiantiCoreTranslator::translate('The field ^1 is required', _t('Password')));
- }
- $object->active = 'Y';
- }
- if( $object->password )
- {
- if( $object->password !== $param['repassword'] )
- throw new Exception(_t('The passwords do not match'));
- $object->password = md5($object->password);
- }
- else
- {
- unset($object->password);
- }
- $object->store();
- $object->clearParts();
- if( !empty($data->groups) )
- {
- foreach( $data->groups as $group_id )
- {
- $object->addSystemUserGroup( new SystemGroup($group_id) );
- }
- }
- if( !empty($data->units) )
- {
- foreach( $param['units'] as $unit_id )
- {
- $object->addSystemUserUnit( new SystemUnit($unit_id) );
- }
- }
- if (!empty($data->program_list))
- {
- foreach ($data->program_list as $program_id)
- {
- $object->addSystemUserProgram( new SystemProgram( $program_id ) );
- }
- }
- $data = new stdClass;
- $data->id = $object->id;
- TForm::sendData('form_System_user', $data);
- // close the transaction
- TTransaction::close();
- // shows the success message
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- /**
- * method onEdit()
- * Executed whenever the user clicks at the edit button da datagrid
- */
- function onEdit($param)
- {
- try
- {
- if (isset($param['key']))
- {
- // get the parameter $key
- $key=$param['key'];
- // open a transaction with database 'permission'
- TTransaction::open('permission');
- // instantiates object System_user
- $object = new SystemUser($key);
- unset($object->password);
- $groups = array();
- $units = array();
- if( $groups_db = $object->getSystemUserGroups() )
- {
- foreach( $groups_db as $group )
- {
- $groups[] = $group->id;
- }
- }
- if( $units_db = $object->getSystemUserUnits() )
- {
- foreach( $units_db as $unit )
- {
- $units[] = $unit->id;
- }
- }
- $program_ids = array();
- foreach ($object->getSystemUserPrograms() as $program)
- {
- $program_ids[] = $program->id;
- }
- $object->program_list = $program_ids;
- $object->groups = $groups;
- $object->units = $units;
- // fill the form with the active record data
- $this->form->setData($object);
- // close the transaction
- TTransaction::close();
- }
- else
- {
- $this->form->clear();
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- ?>
Alguem consegue me apoiar?
Se entendi corretamente, você precisa de algo parecido com o esquema abaixo:
Muito Obrigado Nataniel!
Acabei preferindo manter as alterações neste projeto direto na tabela SystemUser. No proximo projeto, farei desta forma.