public function actionCreateProfesional() { // Instancio modelos que se van a usar en el formulario $model = new Profesional(); $model_conyuge = new Conyuge(); $model_domicilioprofesional = new Domicilioprofesional(); $model_contacto = new Contacto(); $model_domicilio = new Domicilio(); $modellocalidad = new Localidad(); $model_datoimpositivo = new Datoimpositivo(); if (isset($_POST['Profesional'], $_POST['Domicilio'])) { $model->setAttributes($_POST['Profesional']); $model->idlocalidad = isset($_POST['Localidad']['idlocalidad']) ? $_POST['Localidad']['idlocalidad'] : null; $model_domicilio->setAttributes($_POST['Domicilio']); $model_domicilio->iddomiciliotipo = Domiciliotipo::PARTICULAR; try { $transac = Yii::app()->db->beginTransaction(); // si se carga conyuge, este modelo es opcional en el formulario if (strlen($_POST['Conyuge']['apellido']) != 0) { $model_conyuge->setAttributes($_POST['Conyuge']); if ($model_conyuge->save()) { $model->idconyuge = $model_conyuge->idconyuge; } else { throw new Exception("Hubo un error al grabar datos del Cónyuge"); } } if ($model->validate() && $model_domicilio->validate()) { // estos dos modelos del formulario son obligatorios // si se cargan datos impositivos if (strlen($_POST['Datoimpositivo']['cuit']) != 0) { $model_datoimpositivo->setAttributes($_POST['Datoimpositivo']); if ($model_datoimpositivo->save()) { $model->iddatoimpositivo = $model_datoimpositivo->iddatoimpositivo; } else { throw new Exception("Hubo un error al grabar datos impositivos del Profesional"); } } if ($model->save(false)) { $model_domicilio->identidad = $model->identidad; } else { throw new Exception("Hubo un error al grabar datos del Profesional"); } if (!$model_domicilio->save(false)) { throw new Exception("Hubo un error al grabar datos del Domicilio"); } $transac->commit(); // segun boton de grabar o agregar domicilios if (isset($_POST['savebutton'])) { $this->redirect(array('manageProfesional')); } else { // se usó boton domicilio, se redirige a la vista update para cargar domicilios $this->redirect(array('updateProfesional', 'id' => $model->identidad, "opendialog" => true)); // redirecciona a update para permitir cargar contactos } } } catch (Exception $e) { $transac->rollback(); $model->addError('', $e->getMessage()); } } $this->render('create_profesional', array('model' => $model, 'model_conyuge' => $model_conyuge, 'model_domicilio' => $model_domicilio, 'model_domicilioprofesional' => $model_domicilioprofesional, 'model_datoimpositivo' => $model_datoimpositivo, 'model_contacto' => $model_contacto, 'modellocalidad' => $modellocalidad, 'opendialog' => false)); }