=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/person/AbstractPersonService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/person/AbstractPersonService.java 2013-09-16 10:10:25 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/event/person/AbstractPersonService.java 2013-09-16 11:56:40 +0000 @@ -274,33 +274,7 @@ } patient.setRegistrationDate( person.getDateOfRegistration() ); - - for ( Identifier identifier : person.getIdentifiers() ) - { - if ( identifier.getType() == null ) - { - PatientIdentifier patientIdentifier = new PatientIdentifier(); - patientIdentifier.setIdentifier( identifier.getValue().trim() ); - patientIdentifier.setIdentifierType( null ); - patientIdentifier.setPatient( patient ); - - patient.getIdentifiers().add( patientIdentifier ); - - continue; - } - - PatientIdentifierType type = manager.get( PatientIdentifierType.class, identifier.getType() ); - - if ( type != null ) - { - PatientIdentifier patientIdentifier = new PatientIdentifier(); - patientIdentifier.setIdentifier( identifier.getValue().trim() ); - patientIdentifier.setIdentifierType( type ); - patientIdentifier.setPatient( patient ); - - patient.getIdentifiers().add( patientIdentifier ); - } - } + updateIdentifiers( person, patient ); return patient; } @@ -328,12 +302,12 @@ return importSummary; } - addSystemIdentifier( person ); + updateSystemIdentifier( person ); Patient patient = getPatient( person ); patientService.savePatient( patient ); - addAttributes( person, patient ); + updateAttributeValues( person, patient ); patientService.updatePatient( patient ); importSummary.setStatus( ImportStatus.SUCCESS ); @@ -343,46 +317,6 @@ return importSummary; } - private void addSystemIdentifier( Person person ) - { - Date birthDate = person.getDateOfBirth() != null ? person.getDateOfBirth().getDate() : null; - String gender = person.getGender() != null ? person.getGender().getValue() : null; - - if ( birthDate == null || gender == null ) - { - birthDate = new Date(); - gender = "F"; - } - - Iterator iterator = person.getIdentifiers().iterator(); - - // remove any old system identifiers - while ( iterator.hasNext() ) - { - Identifier identifier = iterator.next(); - - if ( identifier.getType() == null ) - { - iterator.remove(); - } - } - - String systemId = PatientIdentifierGenerator.getNewIdentifier( birthDate, gender ); - - PatientIdentifier patientIdentifier = patientIdentifierService.get( null, systemId ); - - while ( patientIdentifier != null ) - { - systemId = PatientIdentifierGenerator.getNewIdentifier( birthDate, gender ); - patientIdentifier = patientIdentifierService.get( null, systemId ); - } - - Identifier identifier = new Identifier(); - identifier.setValue( systemId ); - - person.getIdentifiers().add( identifier ); - } - // ------------------------------------------------------------------------- // UPDATE // ------------------------------------------------------------------------- @@ -396,6 +330,7 @@ importSummary.setDataValueCount( null ); Patient patient = manager.get( Patient.class, person.getPerson() ); + System.err.println( "Patient: " + person ); OrganisationUnit organisationUnit = manager.get( OrganisationUnit.class, person.getOrgUnit() ); List importConflicts = new ArrayList(); @@ -443,6 +378,13 @@ patient.setDobType( dateOfBirth.getType().getValue().charAt( 0 ) ); patient.setBirthDate( dateOfBirth.getDate() ); + updateSystemIdentifier( person ); + removeIdentifiers( patient ); + removeAttributeValues( patient ); + patientService.updatePatient( patient ); + + updateIdentifiers( person, patient ); + updateAttributeValues( person, patient ); patientService.updatePatient( patient ); System.err.println( "Patient: " + getPerson( patient ) ); @@ -553,7 +495,7 @@ return importConflicts; } - private void addAttributes( Person person, Patient patient ) + private void updateAttributeValues( Person person, Patient patient ) { for ( Attribute attribute : person.getAttributes() ) { @@ -572,4 +514,115 @@ } } } + + private void updateSystemIdentifier( Person person ) + { + Date birthDate = person.getDateOfBirth() != null ? person.getDateOfBirth().getDate() : null; + String gender = person.getGender() != null ? person.getGender().getValue() : null; + + if ( birthDate == null || gender == null ) + { + birthDate = new Date(); + gender = "F"; + } + + Iterator iterator = person.getIdentifiers().iterator(); + + // remove any old system identifiers + while ( iterator.hasNext() ) + { + Identifier identifier = iterator.next(); + + if ( identifier.getType() == null ) + { + iterator.remove(); + } + } + + Identifier identifier = generateSystemIdentifier( birthDate, gender ); + + if ( person.getPerson() != null ) + { + identifier = generateSystemIdentifier( birthDate, gender ); + Patient patient = manager.get( Patient.class, person.getPerson() ); + + for ( PatientIdentifier patientIdentifier : patient.getIdentifiers() ) + { + if ( patientIdentifier.getIdentifierType() == null && patientIdentifier.getIdentifier() != null ) + { + identifier = new Identifier( patientIdentifier.getIdentifier() ); + break; + } + } + } + + person.getIdentifiers().add( identifier ); + } + + private Identifier generateSystemIdentifier( Date birthDate, String gender ) + { + String systemId = PatientIdentifierGenerator.getNewIdentifier( birthDate, gender ); + + PatientIdentifier patientIdentifier = patientIdentifierService.get( null, systemId ); + + while ( patientIdentifier != null ) + { + systemId = PatientIdentifierGenerator.getNewIdentifier( birthDate, gender ); + patientIdentifier = patientIdentifierService.get( null, systemId ); + } + + Identifier identifier = new Identifier(); + identifier.setValue( systemId ); + + return identifier; + } + + // add identifiers from person => patient + private void updateIdentifiers( Person person, Patient patient ) + { + for ( Identifier identifier : person.getIdentifiers() ) + { + if ( identifier.getType() == null ) + { + PatientIdentifier patientIdentifier = new PatientIdentifier(); + patientIdentifier.setIdentifier( identifier.getValue().trim() ); + patientIdentifier.setIdentifierType( null ); + patientIdentifier.setPatient( patient ); + + patient.getIdentifiers().add( patientIdentifier ); + + continue; + } + + PatientIdentifierType type = manager.get( PatientIdentifierType.class, identifier.getType() ); + + if ( type != null && nullIfEmpty( identifier.getValue() ) != null ) + { + PatientIdentifier patientIdentifier = new PatientIdentifier(); + patientIdentifier.setIdentifier( identifier.getValue().trim() ); + patientIdentifier.setIdentifierType( type ); + patientIdentifier.setPatient( patient ); + + patient.getIdentifiers().add( patientIdentifier ); + } + } + } + + private void removeIdentifiers( Patient patient ) + { + for ( PatientIdentifier patientIdentifier : patient.getIdentifiers() ) + { + patientIdentifierService.deletePatientIdentifier( patientIdentifier ); + } + + patient.setIdentifiers( new HashSet() ); + patientService.updatePatient( patient ); + } + + private void removeAttributeValues( Patient patient ) + { + patientAttributeValueService.deletePatientAttributeValue( patient ); + patient.setAttributes( new HashSet() ); + patientService.updatePatient( patient ); + } }