/** * Faz verificações para evitar violações de restrição unique nos parentes * @param Person $person */ protected function adjustRelatives(Person $person) { $em = $this->getEntityManager(); $relatives = $person->getRelatives(); foreach ($relatives as $relative) { $relativeId = $relative->getRelativeId(); // se o responsável já existe então verifica se é o mesmo ou é diferente if ($relativeId !== null) { $rel = $em->getRepository('Recruitment\\Entity\\Relative')->findOneBy(array('person' => $person, 'relative' => $relative->getRelative())); // responsável encontrado na banco de dados if ($rel !== null) { // responsável é diferente if ($relativeId != $rel->getRelativeId()) { $person->addRelative($rel); $person->removeRelative($relative); $em->detach($relative); } continue; } } // dados do responsável que foi cadastrado $rperson = $relative->getRelative(); // verifica se ele existe no banco de dados $pers = $em->getRepository('Recruitment\\Entity\\Person')->findOneBy(array('personCpf' => $rperson->getPersonCpf())); // se existe define o responsável if ($pers !== null) { $relative->setRelative($pers); $em->detach($rperson); } } }
/** * Faz as verificações para evitar violações de restrição unique nos endereços * * @param Person $person * @return void */ protected function adjustAddresses(Person $person) { $em = $this->getEntityManager(); $addresses = $person->getAddresses(); foreach ($addresses as $address) { $addr = $em->getRepository('Recruitment\\Entity\\Address')->findOneBy(array('addressState' => $address->getAddressState(), 'addressCity' => $address->getAddressCity(), 'addressNeighborhood' => $address->getAddressNeighborhood(), 'addressStreet' => $address->getAddressStreet(), 'addressNumber' => $address->getAddressNumber(), 'addressComplement' => $address->getAddressComplement())); $addressId = $address->getAddressId(); if ($addressId === null) { // endereço existe mas não existe um id associado if ($addr !== null) { $person->removeAddress($address); $person->addAddress($addr); } } else { if ($addr !== null) { // Endereço é atualizado para um endereço já cadastrado no banco de dados. if ($addressId != $addr->getAddressId()) { $person->addAddress($addr); } continue; } else { // endereço é atualizado para um novo endereço não existente no banco de dados. $nAddress = new Address(); $nAddress->setAddressPostalCode($address->getAddressPostalCode()); $nAddress->setAddressState($address->getAddressState()); $nAddress->setAddressCity($address->getAddressCity()); $nAddress->setAddressNeighborhood($address->getAddressNeighborhood()); $nAddress->setAddressStreet($address->getAddressStreet()); $nAddress->setAddressNumber($address->getAddressNumber()); $nAddress->setAddressComplement($address->getAddressComplement()); $person->addAddress($nAddress); } $person->removeAddress($address); $em->detach($address); } } }
/** * @param Person $person * @return Registration */ public function setPerson(Person $person) { $person->addRegistration($this); $this->person = $person; return $this; }
/** * Busca pelo usuário da inscrição $id. Caso não exista cria um novo. * * @param Person $person pessoa associada à inscrição * @return User */ protected function getUserIfExistsCreateIfNotExists(Person $person) { $em = $this->getEntityManager(); // se não possui usuário if ($person->getUser() === null) { $user = new User(); $userName = $person->getPersonEmail(); $userPassword = preg_replace('/[.,-]/', '', $person->getPersonCpf()); $pass = UserService::encryptPassword($userPassword); $user->setUserName($userName)->setUserPassword($pass['password'])->setUserPasswordSalt($pass['password_salt'])->setUserActive(true); $person->setUser($user); $em->merge($person); return $user; } return $person->getUser(); }