/** * This does not explicitly delete the names because its assumed the recalculation will clean it * up. */ public boolean deleteSystemOfRecordPerson( final SorPerson sorPerson, final boolean mistake, final String terminationTypes) { Assert.notNull(sorPerson, "sorPerson cannot be null."); final String terminationTypeToUse = terminationTypes != null ? terminationTypes : Type.TerminationTypes.UNSPECIFIED.name(); final Person person = this.personRepository.findByInternalId(sorPerson.getPersonId()); Assert.notNull(person, "person cannot be null."); if (mistake) { Set<Role> rolesToDelete = new HashSet<Role>(); for (final SorRole sorRole : sorPerson.getRoles()) { for (final Role role : person.getRoles()) { if (sorRole.getId().equals(role.getSorRoleId())) { rolesToDelete.add(role); } } } for (final Role role : rolesToDelete) { // let sorRoleElector delete the role and add another role if required sorRoleElector.removeCalculatedRole( person, role, this.personRepository.getSoRRecordsForPerson(person)); } final Number number = this.personRepository.getCountOfSoRRecordsForPerson(person); if (number.intValue() == 1) { this.personRepository.deletePerson(person); } this.personRepository.deleteSorPerson(sorPerson); return true; } // we do this explicitly here because once they're gone we can't re-calculate? We might move to // this to the recalculateCalculatedPerson method. final Type terminationReason = this.referenceRepository.findType(Type.DataTypes.TERMINATION, terminationTypeToUse); for (final SorRole sorRole : sorPerson.getRoles()) { for (final Role role : person.getRoles()) { if (!role.isTerminated() && sorRole.getId().equals(role.getSorRoleId())) { role.expireNow(terminationReason, true); } } } this.personRepository.deleteSorPerson(sorPerson); this.personRepository.savePerson(person); Person p = recalculatePersonBiodemInfo(person, sorPerson, RecalculationType.DELETE, mistake); this.personRepository.savePerson(p); return true; }
public boolean deleteSystemOfRecordRole( final SorPerson sorPerson, final SorRole sorRole, final boolean mistake, final String terminationTypes) throws IllegalArgumentException { Assert.notNull(sorRole, "sorRole cannot be null."); Assert.notNull(sorPerson, "soPerson cannot be null."); final String terminationTypeToUse = terminationTypes != null ? terminationTypes : Type.TerminationTypes.UNSPECIFIED.name(); final Person person = this.personRepository.findByInternalId(sorPerson.getPersonId()); Assert.notNull(person, "person cannot be null."); final Role role = person.findRoleBySoRRoleId(sorRole.getId()); // delete and expire role only if it exist at calculated level if (role != null) if (mistake) { // let SorRoleElector remove the role sorRoleElector.removeCalculatedRole( person, role, this.personRepository.getSoRRecordsForPerson(person)); } else { final Type terminationReason = this.referenceRepository.findType(Type.DataTypes.TERMINATION, terminationTypeToUse); if (!role.isTerminated()) { role.expireNow(terminationReason, true); } } sorPerson.getRoles().remove(sorRole); this.personRepository.saveSorPerson(sorPerson); this.personRepository.savePerson(person); return true; }