commit 4cd5a979c89c3017d9945ec1dd4baaa6e7130f9b Author: chahine Date: Thu Aug 15 17:21:54 2024 +0000 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee60922 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# Ignore Gradle build output directory +build +bin +.gradle/ +src/auto/ +.settings/ +.classpath +.project +src/main/resources/static +gradlew +gradlew.bat +.idea/ +gradle/wrapper/gradle-wrapper.jar +gradle/wrapper/gradle-wrapper.properties +dependencies.gradle +/idcore.tar +/VERSION diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..3323395 --- /dev/null +++ b/build.gradle @@ -0,0 +1,51 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.1.1' + id 'io.spring.dependency-management' version '1.0.7.RELEASE' +} + + +if (file('dependencies.gradle').exists()) + apply from: 'dependencies.gradle' + +repositories { + mavenCentral() + jcenter() +} + +sourceSets.main.java.srcDirs += 'src/auto/java' +sourceSets.main.resources.srcDirs += 'src/auto/resources' + +dependencies { + implementation group: 'com.machinezoo.sourceafis', name: 'sourceafis', version: '3.11.0' + + implementation 'com.cedarsoftware:json-io:4.13.0' + implementation group: 'com.jayway.jsonpath', name: 'json-path', version: '2.4.0' + implementation 'org.apache.logging.log4j:log4j-core:2.20.0' + implementation 'org.apache.logging.log4j:log4j-api:2.20.0' + implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.20.0' + + implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0' + implementation group: 'jakarta.annotation', name: 'jakarta.annotation-api', version: '2.1.1' + + + implementation "org.keycloak:keycloak-spring-boot-starter:21.1.2" + + implementation group: 'org.bouncycastle', name: 'bcpg-fips', version: '1.0.7.1' + implementation group: 'org.bouncycastle', name: 'bcpkix-fips', version: '1.0.7' + + implementation "org.springframework.boot:spring-boot-starter-security:3.1.1" + implementation group: 'org.springframework.security', name: 'spring-security-oauth2-jose', version: '6.1.1' + implementation group: 'org.springframework.security', name: 'spring-security-oauth2-resource-server', version: '6.1.1' + + implementation 'com.squareup.okhttp3:okhttp:4.12.0' + + implementation 'org.apache.commons:commons-lang3:3.12.0' + if (file('dependencies.gradle').exists()) + implementation rootProject.ext.softomatonDependencies +} +dependencyManagement { + imports { + mavenBom "io.grpc:grpc-bom:1.48.0" + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..7fc00cc --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + gradlePluginPortal() + if (settings.hasProperty("repo")) + maven { + url repo + } + + } +} \ No newline at end of file diff --git a/src/main/java/systems/archide/core/RestEndpoints.java b/src/main/java/systems/archide/core/RestEndpoints.java new file mode 100644 index 0000000..1d2fc8f --- /dev/null +++ b/src/main/java/systems/archide/core/RestEndpoints.java @@ -0,0 +1,281 @@ +package systems.archide.core; + +import com.cocentris.spring.rest.security.EndpointsPermissions; + +public class RestEndpoints { + public final static String REGISTRAR = "REGISTRAR"; + public final static String DIGITALIZER = "DIGITALIZER"; + public final static String CLERK = "CLERK"; + public final static String RV4_MIGRATION_TOOL = "RV4_MIGRATION_TOOL"; + public final static String E_ID_SERVER = "E_ID_SERVER"; + public final static String VAN_ELECT = "VAN_ELECT"; + + static final String READ_CIVIL_STATUS_MTLB_ENDPOINT = "/civil-status-mtlb/[0-9]+"; + static final String SEARCH_CIVIL_STATUS_MTLB_ENDPOINT = "/civil-status-mtlb/search-by-mtlb-type-and-status/"; + static final String COUNT_CIVIL_STATUS_MTLB_ENDPOINT = "/civil-status-mtlb/count/search-by-mtlb-type-and-status/"; + static final String CREATE_CIVIL_STATUS_MTLB_ENDPOINT = "/apply/create-civil-status-mtlb"; + static final String UPDATE_CIVIL_STATUS_MTLB_ENDPOINT = "/civil-status-mtlb"; + static final String CIVIL_STATUS_MTLB_TAG = "/civil-status-mtlb-tag/search/"; + static final String CIVIL_STATUS_MTLB_PENDING_UPDATE = "/civil-status-mtlb/pending/update"; + static final String CIVIL_STATUS_MTLB_PENDING_REJECT = "/civil-status-mtlb/pending/reject"; + static final String CIVIL_STATUS_MTLB_READY_APPROVE = "/civil-status-mtlb/ready/approve"; + static final String CIVIL_STATUS_MTLB_READY_REJECT = "/civil-status-mtlb/ready/reject"; + static final String CIVIL_STATUS_MTLB_ATTACHMENT_ENDPOINT = "/civil-status-mtlb-attachment/civil-status-mtlb/join/civil-status-mtlb-id"; + + static final String READ_VITAL_RECORD_ATTACHMENT_ENDPOINT = "/vital-record-attachment/[0-9]+/.*"; + + static final String SEARCH_RV4_BIRTH_MTLB_ENDPOINT = "/rvfour-birth-mtlb/search-by-mtlb-type-and-status/"; + static final String COUNT_RV4_BIRTH_MTLB_ENDPOINT = "/rvfour-birth-mtlb/count/search-by-mtlb-type-and-status/"; + static final String READ_RV4_BIRTH_MTLB_ENDPOINT = "/rvfour-birth-mtlb/[0-9]+"; + static final String SEARCH_RV4_BIRTH_MTLB_TAG_ENDPOINT = "/rvfour-birth-mtlb-tag/search/"; + + static final String CREATE_GEO_DATA_ENDPOINT = "/geo-data-service/save-by-area-id"; + + static final String CREATE_ID_MTLB_ENDPOINT = "/apply/create-id-mtlb"; + static final String UPDATE_ID_MTLB_ENDPOINT = "/id-mtlb"; + static final String READ_ID_MTLB_ENDPOINT = "/id-mtlb/[0-9]+"; + static final String ID_MTLB_TAG = "/id-mtlb-tag/search/"; + static final String ID_MTLB_PENDING_UPDATE = "/id-mtlb/pending/update"; + static final String ID_MTLB_PENDING_REJECT = "/id-mtlb/pending/reject"; + static final String SEARCH_ID_MTLB_ENDPOINT = "/id-mtlb/search-by-id-mtlb-type-and-status/"; + static final String COUNT_ID_MTLB_ENDPOINT = "/id-mtlb/count/search-by-id-mtlb-type-and-status/"; + + static final String CREATE_DIGITALIZATION_MTLB_ENDPOINT = "/apply/create-digitalization-mtlb"; + static final String ATTACH_DIGITALIZATION_MTLB = "/apply/attach-digitalization-mtlb"; + + static final String SEARCH_UNION_MTLB = "/union-mtlb/search-by-union-mtlb-type-and-status/"; + static final String COUNT_UNION_MTLB = "/union-mtlb/count/search-by-union-mtlb-type-and-status/"; + static final String READ_VITAL_RECORD_ENDPOINT = "/vital-record/[0-9]+"; + static final String SEARCH_VITAL_RECORD_ENDPOINT = "/vital-record/search-by-active/"; + static final String COUNT_VITAL_RECORD_ENDPOINT = "/vital-record/count/search-by-active/"; + static final String SEARCH_VITAL_RECORD_ENDPOINT_TAG = "/vital-record-tag/search/"; + + static final String READ_FACE_ENDPOINT = "/face/[0-9]+"; + + static final String READ_ISSUED_DOCUMENTS_ENDPOINT = "/issued-documents/[0-9]+"; + static final String SEARCH_ISSUED_DOCUMENTS_ENDPOINT = "/issued-documents/search-by-document-type/"; + static final String COUNT_ISSUED_DOCUMENTS_ENDPOINT = "/issued-documents/count/search-by-document-type/"; + static final String SEARCH_DIGITALIZATION_ENDPOINT = "/civil-status-mtlb/digitalization/search"; + static final String COUNT_DIGITALIZATION_ENDPOINT = "/civil-status-mtlb/digitalization/count"; + static final String SEARCH_CIVIL_STATUS_ATTACHMENTS_ENDPOINT = "/civil-status-mtlb-attachment/search/"; + + static final String SEARCH_ADDRESS_ENDPOINT = "/address/search/"; + static final String SEARCH_EMAIL_ENDPOINT = "/email/search/"; + static final String SEARCH_PHONE_NUMBER_ENDPOINT = "/phone-number/search/"; + + static final String SEARCH_TRANSLATION_ENDPOINT = "/i18n/search/"; + static final String COUNT_TRANSLATION_ENDPOINT = "/i18n/count/"; + static final String READ_TRANSLATION_ENDPOINT = "/i18n/[0-9]+"; + static final String CREATE_TRANSLATION_ENDPOINT = "/i18n"; + + static final String SEARCH_OCCUPATION_METADATA_ENDPOINT = "/occupation-metadata/search/"; + static final String COUNT_OCCUPATION_METADATA_ENDPOINT = "/occupation-metadata/count/"; + static final String READ_OCCUPATION_METADATA_ENDPOINT = "/occupation-metadata/[0-9]+"; + static final String CREATE_OCCUPATION_METADATA_ENDPOINT = "/occupation-metadata"; + + static final String READ_PREFERENCES = "/preferences/read"; + static final String SAVE_PREFERENCES = "/preferences/save"; + + static final String SEARCH_COUNTRY = "/country/search/"; + static final String COUNT_COUNTRY_ENDPOINT = "/country/count/"; + static final String READ_COUNTRY_ENDPOINT = "/country/[0-9]+"; + static final String CREATE_COUNTRY_ENDPOINT = "/country"; + + static final String LOCATIONS_SEARCH = "/locations/search/"; + static final String PROVINCE_SEARCH = "/province/search/"; + static final String POLLING_STATIONS_SEARCH = "/polling-stations/search/"; + static final String WHO_AMI = "/users/whoami"; + + static final String READ_GLOBAL_STATE = "/global-state/[0-9]+"; + static final String SET_GLOBAL_STATE = "/global-state/set"; + static final String GET_GLOBAL_STATE = "/global-state/get"; + + static final String CREATE_RV4_BIRTH_MTLB_ENDPOINT = "/apply/save-rv4-birth-mtlb-by-vital-record-id"; + static final String CREATE_RV4_BIRTH_MTLB_ATTACHMENTS_ENDPOINT = "/rv4-birth-mtlb-attachment/save-by-rv4-mtlb-id"; + + static final String CREATE_RV4_DEATH_MTLB_ENDPOINT = "/apply/save-rv4-death-mtlb-by-vital-record-id"; + static final String CREATE_RV4_UNION_MTLB_ENDPOINT = "/apply/save-rv4-marraige-mtlb-by-union-id"; + static final String CREATE_RV4_DIVORCE_MTLB_ENDPOINT = "/apply/save-rv4-divorce-mtlb-by-union-id"; + static final String CREATE_RV4_ID_CARD_MTLB_ENDPOINT = "/apply/save-rv4-id-card-mtlb-by-id-card-number"; + + static final String GET_VOTER_RECORD_LIST = "/van-elect-service/get-voter-record-list"; + + static final String READ_CIVIL_RECORD_INFO = "/civil-record-info-service/read"; + + static final String GENERAL_STATISTICS_REPORT_ENDPOINT = "/reports/general-statistics"; + + static final String READ_FACE_ENDPOINT_IMAGE = "/face/image/[0-9]+/.*"; + static final String READ_ID_MTLB_FACE_ENDPOINT_IMAGE = "/id-mtlb/face/[0-9]+/.*"; + + static final String READ_CIVIL_STATUS_MTLB_FACE_ENDPOINT_IMAGE = "/civil-status-mtlb/face/[0-9]+/.*"; + + static final String READ_COUNTRY_FLAG_ENDPOINT = "/geo-data/flag/[0-9]+/.*"; + + static final String READ_CIVIL_STATUS_MTLB_ATTACHMENT_ENDPOINT = "/civil-status-mtlb/attachment/content/[0-9]+/.*"; + static final String READ_CIVIL_STATUS_MTLB_ATTACHMENT_PREVIEW_ENDPOINT = "/civil-status-mtlb/attachment/preview/[0-9]+/.*"; + static final String READ_CIVIL_STATUS_MTLB_ATTACHMENT_DOWNLOAD_ENDPOINT = "/civil-status-mtlb/attachment/[0-9]+/.*"; + + static final String READ_CIVIL_STATUS_MTLB_MEDICAL_NOTIFICATION_ENDPOINT = "/civil-status-mtlb/medical-notification-file/content/[0-9]+/.*"; + + static final String READ_CIVIL_STATUS_MTLB_MEDICAL_NOTIFICATION_PREVIEW_ENDPOINT = "/civil-status-mtlb/medical-notification-file/preview/[0-9]+/.*"; + static final String READ_CIVIL_STATUS_MTLB_MEDICAL_NOTIFICATION_DOWNLOAD_ENDPOINT = "/civil-status-mtlb/medical-notification-file/[0-9]+/.*"; + + static final String READ_VITAL_RECORD_ATTACHMENT_PREVIEW_ENDPOINT = "/vital-record-attachment/preview/[0-9]+/.*"; + static final String READ_VITAL_RECORD_ATTACHMENT_DOWNLOAD_ENDPOINT = "/vital-record/attachment/[0-9]+/.*"; + + static final String READ_DEATH_RECORD_ATTACHMENT_PREVIEW_ENDPOINT = "/death-record-attachment/preview/[0-9]+/.*"; + static final String READ_DEATH_RECORD_ATTACHMENT_DOWNLOAD_ENDPOINT = "/death-record/attachment/[0-9]+/.*"; + static final String READ_DEATH_RECORD_ATTACHMENT_DOWNLOAD = "/death-record-attachment/[0-9]+/.*"; + + static final String READ_UNION_RECORD_ATTACHMENT_PREVIEW_ENDPOINT = "/union-record-attachment/preview/[0-9]+/.*"; + static final String READ_UNION_RECORD_ATTACHMENT_DOWNLOAD_ENDPOINT = "/union-record/attachment/[0-9]+/.*"; + static final String READ_UNION_RECORD_ATTACHMENT_DOWNLOAD = "/union-record-attachment/[0-9]+/.*"; + + + static final String READ_UNION_MTLB_ATTACHMENT_PREVIEW_ENDPOINT = "/union-mtlb/attachment/preview/[0-9]+/.*"; + static final String READ_UNION_MTLB_ATTACHMENT_DOWNLOAD_ENDPOINT = "/union-mtlb/attachment/[0-9]+/.*"; + + static final String READ_VITAL_RECORD_MEDICAL_NOTIFICATION_ENDPOINT = "/vital-record/medical-notification-file/content/[0-9]+/.*"; + static final String READ_VITAL_RECORD_MEDICAL_NOTIFICATION_PREVIEW_ENDPOINT = "/vital-record/medical-notification-file/preview/[0-9]+/.*"; + static final String READ_VITAL_RECORD_MEDICAL_NOTIFICATION_DOWNLOAD_ENDPOINT = "/vital-record/medical-notification-file/[0-9]+/.*"; + + + static final String READ_CIVIL_STATUS_MTLB_DEATH_NOTIFICATION_ENDPOINT = "/civil-status-mtlb/death-notification-file/content/[0-9]+/.*"; + static final String READ_CIVIL_STATUS_MTLB_DEATH_NOTIFICATION_PREVIEW_ENDPOINT = "/civil-status-mtlb/death-notification-file/preview/[0-9]+/.*"; + static final String READ_CIVIL_STATUS_MTLB_DEATH_NOTIFICATION_DOWNLOAD_ENDPOINT = "/civil-status-mtlb/death-notification-file/[0-9]+/.*"; + + static final String VITAL_RECORD_ADVANCED_SEARCH = "/vital-record/advanced-search"; + static final String VITAL_RECORD_ADVANCED_SEARCH_COUNT = "/vital-record/count/advanced-search"; + + public static void init() { + + EndpointsPermissions.setRequiredPermissions(VITAL_RECORD_ADVANCED_SEARCH, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(VITAL_RECORD_ADVANCED_SEARCH, REGISTRAR, DIGITALIZER, CLERK); + + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(CREATE_CIVIL_STATUS_MTLB_ENDPOINT, + EndpointsPermissions.AUTHENTICATED); + EndpointsPermissions.setRequiredPermissions(CREATE_DIGITALIZATION_MTLB_ENDPOINT, + EndpointsPermissions.AUTHENTICATED); + EndpointsPermissions.setRequiredPermissions(SEARCH_DIGITALIZATION_ENDPOINT, DIGITALIZER, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(COUNT_DIGITALIZATION_ENDPOINT, DIGITALIZER, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(READ_FACE_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + + EndpointsPermissions.setRequiredPermissions(READ_VITAL_RECORD_ATTACHMENT_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_ATTACHMENT_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + + + EndpointsPermissions.setRequiredPermissions(SEARCH_CIVIL_STATUS_ATTACHMENTS_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(SEARCH_CIVIL_STATUS_MTLB_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(COUNT_CIVIL_STATUS_MTLB_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(CIVIL_STATUS_MTLB_TAG, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(CIVIL_STATUS_MTLB_PENDING_UPDATE, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(CIVIL_STATUS_MTLB_PENDING_REJECT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(CIVIL_STATUS_MTLB_READY_APPROVE, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(CIVIL_STATUS_MTLB_READY_REJECT, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(UPDATE_CIVIL_STATUS_MTLB_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + + EndpointsPermissions.setRequiredPermissions(CREATE_ID_MTLB_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(UPDATE_ID_MTLB_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(READ_ID_MTLB_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(ID_MTLB_TAG, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(ID_MTLB_PENDING_UPDATE, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(ID_MTLB_PENDING_REJECT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(SEARCH_ID_MTLB_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(COUNT_ID_MTLB_ENDPOINT, REGISTRAR, CLERK); + + EndpointsPermissions.setRequiredPermissions(SEARCH_VITAL_RECORD_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(COUNT_VITAL_RECORD_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(READ_VITAL_RECORD_ENDPOINT, DIGITALIZER, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(SEARCH_VITAL_RECORD_ENDPOINT_TAG, REGISTRAR, DIGITALIZER, CLERK); + + EndpointsPermissions.setRequiredPermissions(SEARCH_ISSUED_DOCUMENTS_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(COUNT_ISSUED_DOCUMENTS_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(READ_ISSUED_DOCUMENTS_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(SEARCH_UNION_MTLB, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(COUNT_UNION_MTLB, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(SEARCH_TRANSLATION_ENDPOINT, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(COUNT_TRANSLATION_ENDPOINT, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(READ_TRANSLATION_ENDPOINT, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(CREATE_TRANSLATION_ENDPOINT, REGISTRAR); + + EndpointsPermissions.setRequiredPermissions(SEARCH_OCCUPATION_METADATA_ENDPOINT, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(COUNT_OCCUPATION_METADATA_ENDPOINT, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(READ_OCCUPATION_METADATA_ENDPOINT, REGISTRAR); + EndpointsPermissions.setRequiredPermissions(CREATE_OCCUPATION_METADATA_ENDPOINT, REGISTRAR); + + EndpointsPermissions.setRequiredPermissions(SEARCH_ADDRESS_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + + EndpointsPermissions.setRequiredPermissions(SEARCH_EMAIL_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + + EndpointsPermissions.setRequiredPermissions(SEARCH_PHONE_NUMBER_ENDPOINT, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(ATTACH_DIGITALIZATION_MTLB, REGISTRAR, DIGITALIZER, CLERK); + EndpointsPermissions.setRequiredPermissions(READ_PREFERENCES, EndpointsPermissions.AUTHENTICATED); + EndpointsPermissions.setRequiredPermissions(SAVE_PREFERENCES, EndpointsPermissions.AUTHENTICATED); + + EndpointsPermissions.setRequiredPermissions(LOCATIONS_SEARCH, EndpointsPermissions.AUTHENTICATED); + EndpointsPermissions.setRequiredPermissions(PROVINCE_SEARCH, EndpointsPermissions.AUTHENTICATED); + EndpointsPermissions.setRequiredPermissions(POLLING_STATIONS_SEARCH, EndpointsPermissions.AUTHENTICATED); + + EndpointsPermissions.setRequiredPermissions(WHO_AMI, EndpointsPermissions.AUTHENTICATED); + + EndpointsPermissions.setRequiredPermissions(CREATE_RV4_BIRTH_MTLB_ENDPOINT, RV4_MIGRATION_TOOL); + EndpointsPermissions.setRequiredPermissions(CREATE_RV4_BIRTH_MTLB_ATTACHMENTS_ENDPOINT, RV4_MIGRATION_TOOL); + EndpointsPermissions.setRequiredPermissions(SEARCH_RV4_BIRTH_MTLB_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(READ_RV4_BIRTH_MTLB_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(COUNT_RV4_BIRTH_MTLB_ENDPOINT, REGISTRAR, CLERK); + EndpointsPermissions.setRequiredPermissions(SEARCH_RV4_BIRTH_MTLB_TAG_ENDPOINT, REGISTRAR, CLERK); + + EndpointsPermissions.setRequiredPermissions(SET_GLOBAL_STATE, EndpointsPermissions.AUTHENTICATED); + EndpointsPermissions.setRequiredPermissions(READ_GLOBAL_STATE, EndpointsPermissions.AUTHENTICATED); + EndpointsPermissions.setRequiredPermissions(GET_GLOBAL_STATE, EndpointsPermissions.AUTHENTICATED); + + EndpointsPermissions.setRequiredPermissions(CREATE_GEO_DATA_ENDPOINT, RV4_MIGRATION_TOOL); + + EndpointsPermissions.setRequiredPermissions(CREATE_RV4_DEATH_MTLB_ENDPOINT, RV4_MIGRATION_TOOL); + EndpointsPermissions.setRequiredPermissions(CREATE_RV4_UNION_MTLB_ENDPOINT, RV4_MIGRATION_TOOL); + EndpointsPermissions.setRequiredPermissions(CREATE_RV4_DIVORCE_MTLB_ENDPOINT, RV4_MIGRATION_TOOL); + EndpointsPermissions.setRequiredPermissions(CREATE_RV4_ID_CARD_MTLB_ENDPOINT, RV4_MIGRATION_TOOL); + + EndpointsPermissions.setRequiredPermissions(GET_VOTER_RECORD_LIST, VAN_ELECT); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_RECORD_INFO, E_ID_SERVER); + + EndpointsPermissions.setRequiredPermissions(GENERAL_STATISTICS_REPORT_ENDPOINT, EndpointsPermissions.AUTHENTICATED); + + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_ATTACHMENT_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_ATTACHMENT_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_MEDICAL_NOTIFICATION_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_MEDICAL_NOTIFICATION_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_MEDICAL_NOTIFICATION_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_VITAL_RECORD_ATTACHMENT_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_VITAL_RECORD_ATTACHMENT_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_UNION_RECORD_ATTACHMENT_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_UNION_RECORD_ATTACHMENT_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_UNION_RECORD_ATTACHMENT_DOWNLOAD, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_DEATH_RECORD_ATTACHMENT_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_DEATH_RECORD_ATTACHMENT_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_DEATH_RECORD_ATTACHMENT_DOWNLOAD, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_UNION_MTLB_ATTACHMENT_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_UNION_MTLB_ATTACHMENT_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_VITAL_RECORD_MEDICAL_NOTIFICATION_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_VITAL_RECORD_MEDICAL_NOTIFICATION_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_VITAL_RECORD_MEDICAL_NOTIFICATION_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + + + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_DEATH_NOTIFICATION_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_DEATH_NOTIFICATION_DOWNLOAD_ENDPOINT, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_DEATH_NOTIFICATION_PREVIEW_ENDPOINT, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_FACE_ENDPOINT_IMAGE, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_ID_MTLB_FACE_ENDPOINT_IMAGE, EndpointsPermissions.PUBLIC); + EndpointsPermissions.setRequiredPermissions(READ_CIVIL_STATUS_MTLB_FACE_ENDPOINT_IMAGE, EndpointsPermissions.PUBLIC); + + EndpointsPermissions.setRequiredPermissions(READ_COUNTRY_FLAG_ENDPOINT, EndpointsPermissions.PUBLIC); + } +} \ No newline at end of file diff --git a/src/main/java/systems/archide/core/controller/BirthCertificateController.java b/src/main/java/systems/archide/core/controller/BirthCertificateController.java new file mode 100644 index 0000000..1df8fa6 --- /dev/null +++ b/src/main/java/systems/archide/core/controller/BirthCertificateController.java @@ -0,0 +1,50 @@ +package systems.archide.core.controller; + +import java.time.LocalDate; +import java.time.Period; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import systems.archide.core.pojo.Address; +import systems.archide.core.pojo.BirthCertificateData; +import systems.archide.core.pojo.ChildData; +import systems.archide.core.pojo.DeathCertificateData; +import systems.archide.core.pojo.DeathRecord; +import systems.archide.core.pojo.UnionRecord; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.AddressRepository; +import systems.archide.core.repository.DeathRecordRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.UnionRecordRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@RestController +@RequestMapping("/birth-certificate") +public class BirthCertificateController { + + @Autowired + DeathRecordRepository deathRecordRepository; + + @Autowired + IdcoreCustomQueries queries; + + @GetMapping("/read/{id}") + public ResponseEntity getDeathCertificateData(@PathVariable Long id) { + BirthCertificateData data = queries.getBirthCertificateData(id); + List d = deathRecordRepository.findByVitalRecordId(id); + + if (d.isEmpty()) + data.setDead(false); + else + data.setDead(true); + return ResponseEntity.ok(data); + } + +} diff --git a/src/main/java/systems/archide/core/controller/DeathCertificateController.java b/src/main/java/systems/archide/core/controller/DeathCertificateController.java new file mode 100644 index 0000000..621c53c --- /dev/null +++ b/src/main/java/systems/archide/core/controller/DeathCertificateController.java @@ -0,0 +1,174 @@ +package systems.archide.core.controller; + +import java.time.LocalDate; +import java.time.Period; +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import systems.archide.core.pojo.Address; +import systems.archide.core.pojo.BirthCertificateData; +import systems.archide.core.pojo.ChildData; +import systems.archide.core.pojo.DeathCertificateData; +import systems.archide.core.pojo.DeathRecord; +import systems.archide.core.pojo.UnionRecord; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.AddressRepository; +import systems.archide.core.repository.DeathRecordRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.UnionRecordRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@RestController +@RequestMapping("/death-certificate") +public class DeathCertificateController { + + @Autowired + DeathRecordRepository deathRecordRepository; + + @Autowired + AddressRepository addressRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + UnionRecordRepository unionRecordRepository; + + @Autowired + IdcoreCustomQueries queries; + + @GetMapping("/read/{id}") + public ResponseEntity getDeathCertificateData(@PathVariable Long id) { + DeathRecord deathRecord = deathRecordRepository.findById(id); + DeathCertificateData data = getDeathCertificateData(deathRecord); + return ResponseEntity.ok(data); + } + + private DeathCertificateData getDeathCertificateData(DeathRecord deathRecord) { + DeathCertificateData certificateData = new DeathCertificateData(); + certificateData.setId(deathRecord.getId()); + certificateData.setFirstname(deathRecord.getFirstname()); + certificateData.setDeathPlace(deathRecord.getDeathLocation()); + certificateData.setThirdname(deathRecord.getThirdname()); + certificateData.setFourthname(deathRecord.getFourthname()); + certificateData.setTimeOfDeath(deathRecord.getTimeOfDeath()); + certificateData.setDateOfDeath(deathRecord.getDateOfDeath()); + certificateData.setGender(deathRecord.getGender()); + certificateData.setReportedRecord(false); + certificateData.setVitalRecordId(deathRecord.getVitalRecordId()); + certificateData.setTimestamp(deathRecord.getTimestamp()); + List
addressList = addressRepository.findByVitalRecordId(deathRecord.getVitalRecordId()); + if (!addressList.isEmpty()) + certificateData.setAddress(addressList.get(0).getAreaId()); + if (deathRecord.getFatherId() != null) { + VitalRecord fatherRecord = vitalRecordRepository.findById(deathRecord.getFatherId()); + if (fatherRecord != null) { + certificateData.setFatherName(fatherRecord.getFirstname() + " " + fatherRecord.getFourthname()); + } + } else if (deathRecord.getReportedFatherName() != null) { + certificateData.setFatherName(deathRecord.getReportedFatherName()); + } + if (deathRecord.getMotherId() != null) { + VitalRecord motherRecord = vitalRecordRepository.findById(deathRecord.getMotherId()); + if (motherRecord != null) { + certificateData.setMotherName(motherRecord.getFirstname() + " " + motherRecord.getFourthname()); + } + } else if (deathRecord.getReportedMotherName() != null) { + certificateData.setMotherName(deathRecord.getReportedMotherName()); + } + certificateData.setId(deathRecord.getId()); + + if (deathRecord.getDeclarantId() != null) { + certificateData.setDeclarantId(deathRecord.getDeclarantId()); + VitalRecord dr = vitalRecordRepository.findById(deathRecord.getDeclarantId()); + if (dr != null) { + certificateData.setDeclarantFirstname(dr.getFirstname()); + certificateData.setDeclarantSecondname(dr.getSecondname()); + certificateData.setDeclarantFourthname(dr.getFourthname()); + } + } + + if (deathRecord.getVitalRecordId() != null) { + VitalRecord r = vitalRecordRepository.findById(deathRecord.getVitalRecordId()); + if (r != null) { + certificateData.setBirthdate(r.getBirthdate()); + certificateData.setBirthPlace(r.getBirthPlace()); + certificateData.setGender(r.getGender()); + List uList = null; + if (r.getGender() == 1) { + uList = unionRecordRepository.findByPartner1VitalRecordId(r.getId()); + if (!uList.isEmpty()) + for (UnionRecord u : uList) { + if (u.getDateOfEffect() == null && u.getDateOfOrder() == null) { + certificateData.setSpouseId(u.getPartner2VitalRecordId()); + certificateData.setSpouseName(u.getPartner2Firstname() + " " + u.getPartner2Surname()); + certificateData.setMarriageDate(u.getDateOfMarriage()); + certificateData.setMarriageLocation(u.getPlace()); + } + } + List childrenRecods = queries.getFatherChildren(r.getId()); + if (!childrenRecods.isEmpty()) { + List children = new ArrayList<>(); + for (VitalRecord childRecord : childrenRecods) { + ChildData child = new ChildData(); + child.setAge(Period.between(childRecord.getBirthdate(), LocalDate.now()).getYears()); + child.setName(childRecord.getFirstname() + " " + childRecord.getFourthname()); + child.setGender((childRecord.getGender() == 1)?"MALE":(childRecord.getGender() == 2)?"FEMALE": "Unknown"); + children.add(child); + } + certificateData.setChildren(children); + } + } + else if (r.getGender() == 2) { + uList = unionRecordRepository.findByPartner2VitalRecordId(r.getId()); + if (!uList.isEmpty()) + for (UnionRecord u : uList) { + if (u.getDateOfEffect() == null && u.getDateOfOrder() == null) { + certificateData.setSpouseId(u.getPartner1VitalRecordId()); + certificateData.setSpouseName(u.getPartner2Firstname() + " " + u.getPartner1Surname()); + certificateData.setMarriageDate(u.getDateOfMarriage()); + certificateData.setMarriageLocation(u.getPlace()); + } + } + List childrenRecods = queries.getMotherChildren(r.getId()); + if (!childrenRecods.isEmpty()) { + List children = new ArrayList<>(); + for (VitalRecord childRecord : childrenRecods) { + ChildData child = new ChildData(); + child.setAge(Period.between(childRecord.getBirthdate(), LocalDate.now()).getYears()); + child.setName(childRecord.getFirstname() + " " + childRecord.getFourthname()); + child.setGender((childRecord.getGender() == 1)?"MALE":(childRecord.getGender() == 2)?"FEMALE": "Unknown"); + children.add(child); + } + certificateData.setChildren(children); + } + } + if (r.getMotherId() != null) { + VitalRecord motherRecord = vitalRecordRepository.findById(r.getMotherId()); + if (motherRecord != null) + certificateData.setMotherName(motherRecord.getFirstname() + " " + motherRecord.getFourthname()); + } else + certificateData.setMotherName(r.getReportedMotherName()); + if (r.getFatherId() != null) { + VitalRecord fatherRecord = vitalRecordRepository.findById(r.getFatherId()); + if (fatherRecord != null) + certificateData.setFatherName(fatherRecord.getFirstname() + " " + fatherRecord.getFourthname()); + } else + certificateData.setFatherName(r.getReportedFatherName()); + } + else + certificateData.setReportedRecord(true); + + } + else + certificateData.setReportedRecord(true); + return certificateData; + } +} diff --git a/src/main/java/systems/archide/core/controller/DivorceCertificateController.java b/src/main/java/systems/archide/core/controller/DivorceCertificateController.java new file mode 100644 index 0000000..07de2b3 --- /dev/null +++ b/src/main/java/systems/archide/core/controller/DivorceCertificateController.java @@ -0,0 +1,66 @@ +package systems.archide.core.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import systems.archide.core.pojo.Address; +import systems.archide.core.pojo.DivorceCertificateResponse; +import systems.archide.core.pojo.UnionRecord; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.AddressRepository; +import systems.archide.core.repository.UnionRecordRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@RestController +@RequestMapping("/divorce-certificate") +public class DivorceCertificateController { + + @Autowired + UnionRecordRepository unionRecordRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + AddressRepository addressRepository; + + @GetMapping("/read/{id}") + public ResponseEntity readDivorceCertificateData(@PathVariable Long id) { + UnionRecord u = unionRecordRepository.findById(id); + DivorceCertificateResponse certificate = record2certificate(u); + return ResponseEntity.ok(certificate); + } + + private DivorceCertificateResponse record2certificate(UnionRecord u) { + DivorceCertificateResponse c = new DivorceCertificateResponse(); + c.setDateOfEffect(u.getDateOfEffect()); + c.setDateOfOrder(u.getDateOfOrder()); + c.setDeclarationDate(u.getDateOfMarriage()); + c.setTimeOfMarriage(u.getTimeOfMarriage()); + c.setPartner1Name(u.getPartner1Firstname() + " " + u.getPartner1Surname()); + c.setPartner2Name(u.getPartner2Firstname() + " " + u.getPartner2Surname()); + c.setDeclarationPlace(u.getPlace()); + c.setAnnulmentOrder(u.getAnnulmentOrder()); + c.setUnionRecordId(u.getId()); + if (u.getPartner1VitalRecordId() != null) { + VitalRecord p1Record = vitalRecordRepository.findById(u.getPartner1VitalRecordId()); + if (p1Record != null) { + c.setPartner1Name(p1Record.getFirstname() + " " + p1Record.getFourthname()); + } + if (u.getPartner2VitalRecordId() != null) { + VitalRecord p2Record = vitalRecordRepository.findById(u.getPartner2VitalRecordId()); + if (p2Record != null) { + c.setPartner2Name(p2Record.getFirstname() + " " + p2Record.getFourthname()); + } + } + } + return c; + } + +} diff --git a/src/main/java/systems/archide/core/controller/MarriageCertificateController.java b/src/main/java/systems/archide/core/controller/MarriageCertificateController.java new file mode 100644 index 0000000..4d8ca78 --- /dev/null +++ b/src/main/java/systems/archide/core/controller/MarriageCertificateController.java @@ -0,0 +1,161 @@ +package systems.archide.core.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import systems.archide.core.pojo.Address; +import systems.archide.core.pojo.MarriageCertificateResponse; +import systems.archide.core.pojo.UnionRecord; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.AddressRepository; +import systems.archide.core.repository.UnionRecordRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@RestController +@RequestMapping("/marriage-certificate") +public class MarriageCertificateController { + + @Autowired + UnionRecordRepository unionRecordRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + AddressRepository addressRepository; + + @GetMapping("/read/{id}") + public ResponseEntity readMarriageCertificateData(@PathVariable Long id) { + UnionRecord u = unionRecordRepository.findById(id); + MarriageCertificateResponse certificate = record2certificate(u); + return ResponseEntity.ok(certificate); + } + + private MarriageCertificateResponse record2certificate(UnionRecord u) { + MarriageCertificateResponse c = new MarriageCertificateResponse(); + c.setDeclarationDate(u.getDateOfMarriage()); + c.setPartner1VitalRecordId(u.getPartner1VitalRecordId()); + c.setPartner2VitalRecordId(u.getPartner2VitalRecordId()); + c.setPartner1reported(false); + c.setPartner2reported(false); + if (u.getCelebrantId() != null) { + VitalRecord cr = vitalRecordRepository.findById(u.getCelebrantId()); + if (cr != null) + c.setCelebrant(cr.getFourthname() + " " + cr.getFirstname() ); + } else + c.setCelebrant(u.getReportedCelebrant()); + if (u.getOfficerId() != null) { + VitalRecord or = vitalRecordRepository.findById(u.getOfficerId()); + if (or != null) + c.setOfficer(or.getFourthname() + " " + or.getFirstname() ); + } else + c.setOfficer(u.getReportedOfficer()); + + if (u.getDeclarantId() != null) { + VitalRecord dr = vitalRecordRepository.findById(u.getDeclarantId()); + if (dr != null) + c.setDeclarationFullName(dr.getFourthname() + " " + dr.getFirstname() ); + } else + c.setDeclarationFullName(u.getReportedDeclarant()); + c.setPosition(u.getPosition()); + c.setMarriageType(u.getUnionRegime()); + c.setTimeOfMarriage(u.getTimeOfMarriage()); + c.setDeclarationPlace(u.getAddress()); + c.setRegistrationLocation(u.getRegistrationLocation()); + c.setMentions(u.getMentions()); + if (u.getFirstWitnessId() != null) { + c.setFirstWitnessId(u.getFirstWitnessId()); + VitalRecord fw = vitalRecordRepository.findById(u.getFirstWitnessId()); + if (fw != null) + c.setFirstWitnessName(fw.getFirstname() + " " + fw.getFourthname()); + } + if (u.getSecondWitnessId() != null) { + c.setSecondWitnessId(u.getSecondWitnessId()); + VitalRecord fw = vitalRecordRepository.findById(u.getSecondWitnessId()); + if (fw != null) + c.setSecondWitnessName(fw.getFirstname() + " " + fw.getFourthname()); + } + if (u.getPartner1VitalRecordId() != null) { + VitalRecord p1Record = vitalRecordRepository.findById(u.getPartner1VitalRecordId()); + if (p1Record != null) { + c.setPartner1BirthLocation(p1Record.getBirthPlace()); + c.setPartner1DateOfBirth(p1Record.getBirthdate()); + c.setPartner1FirstNames(p1Record.getFirstname()); + c.setPartner1MelanesianName(p1Record.getThirdname()); + c.setPartner1Surname(p1Record.getFourthname()); + c.setPartner1Sex(p1Record.getGender()); + List
addressList = addressRepository.findByVitalRecordId(p1Record.getId()); + if (!addressList.isEmpty()) + c.setPartner1UsualResidence(addressList.get(0).getAreaId()); + if (p1Record.getFatherId() != null) { + VitalRecord p1FatherRecord = vitalRecordRepository.findById(p1Record.getFatherId()); + if (p1FatherRecord != null) { + c.setPartner1FatherName(p1FatherRecord.getFirstname() + " " + p1FatherRecord.getFourthname()); + } + } else if (p1Record.getReportedFatherName() != null) { + c.setPartner1FatherName(p1Record.getReportedFatherName()); + } + if (p1Record.getMotherId() != null) { + VitalRecord p1MotherRecord = vitalRecordRepository.findById(p1Record.getMotherId()); + if (p1MotherRecord != null) { + c.setPartner1MotherName(p1MotherRecord.getFirstname() + " " + p1MotherRecord.getFourthname()); + } + } else if (p1Record.getReportedMotherName() != null) { + c.setPartner1MotherName(p1Record.getReportedMotherName()); + } + } + else { + c.setPartner1FirstNames(u.getPartner1Firstname()); + c.setPartner1Surname(u.getPartner1Surname()); + c.setPartner1FatherName(u.getPartner1FatherName()); + c.setPartner1MotherName(u.getPartner1MotherName()); + c.setPartner1reported(true); + } + } + if (u.getPartner2VitalRecordId() != null) { + VitalRecord p2Record = vitalRecordRepository.findById(u.getPartner2VitalRecordId()); + if (p2Record != null) { + c.setPartner2BirthLocation(p2Record.getBirthPlace()); + c.setPartner2DateOfBirth(p2Record.getBirthdate()); + c.setPartner2FirstNames(p2Record.getFirstname()); + c.setPartner2MelanesianName(p2Record.getThirdname()); + c.setPartner2Surname(p2Record.getFourthname()); + c.setPartner2Sex(p2Record.getGender()); + List
addressList = addressRepository.findByVitalRecordId(p2Record.getId()); + if (!addressList.isEmpty()) + c.setPartner2UsualResidence(addressList.get(0).getAreaId()); + if (p2Record.getFatherId() != null) { + VitalRecord p2FatherRecord = vitalRecordRepository.findById(p2Record.getFatherId()); + if (p2FatherRecord != null) { + c.setPartner2FatherName(p2FatherRecord.getFirstname() + " " + p2FatherRecord.getFourthname()); + } + } else if (p2Record.getReportedFatherName() != null) { + c.setPartner2FatherName(p2Record.getReportedFatherName()); + } + if (p2Record.getMotherId() != null) { + VitalRecord p2MotherRecord = vitalRecordRepository.findById(p2Record.getMotherId()); + if (p2MotherRecord != null) { + c.setPartner2MotherName(p2MotherRecord.getFirstname() + " " + p2MotherRecord.getFourthname()); + } + } else if (p2Record.getReportedMotherName() != null) { + c.setPartner2MotherName(p2Record.getReportedMotherName()); + + } + } else { + c.setPartner2FirstNames(u.getPartner2Firstname()); + c.setPartner2Surname(u.getPartner2Surname()); + c.setPartner2FatherName(u.getPartner2FatherName()); + c.setPartner2MotherName(u.getPartner2MotherName()); + c.setPartner2reported(true); + } + } + return c; + } + +} diff --git a/src/main/java/systems/archide/core/controller/ReportsController.java b/src/main/java/systems/archide/core/controller/ReportsController.java new file mode 100644 index 0000000..6e94ffb --- /dev/null +++ b/src/main/java/systems/archide/core/controller/ReportsController.java @@ -0,0 +1,41 @@ +package systems.archide.core.controller; + +import java.time.LocalDateTime; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import systems.archide.core.pojo.JobMtlb; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.repository.JobMtlbRepository; + +@RestController +@RequestMapping("/reports") +public class ReportsController { + + @Autowired + JobMtlbRepository jobMtlbRepository; + + @PostMapping("/new-document") + public ResponseEntity newDocument(@RequestBody String name, + Authentication authentication) { + Long id = newDocument(name); + return ResponseEntity.status(HttpStatus.CREATED).body(id); + } + + private Long newDocument(String name) { + JobMtlb job = new JobMtlb(); + job.setTimestamp(LocalDateTime.now()); + job.setMtlbStatus(MtlbStatus.SUBMITTED); + job.setMtlbType(MtlbType.GENERAL_STATISTICS); + return jobMtlbRepository.insert(job); + } + +} \ No newline at end of file diff --git a/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnex.java b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnex.java new file mode 100644 index 0000000..cc059b0 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnex.java @@ -0,0 +1,43 @@ +package systems.archide.core.pojo; + +import java.util.ArrayList; + +import com.fasterxml.jackson.core.JsonProcessingException; + +public class ArchideMtlbAnnex { + ArrayList tags = new ArrayList<>(); + ArrayList notes = new ArrayList<>(); + ArrayList mentions = new ArrayList<>(); + + public ArchideMtlbAnnex() { + super(); + } + + public void addTag(String name, String type, String content) { + tags.add(new ArchideMtlbAnnexTag(name, type, content)); + } + + public void addNote(String author, String type, String message) { + notes.add(new ArchideMtlbAnnexLogEntry(author, type, message)); + } + + public ArrayList getTags() { + return tags; + } + + public ArrayList getNotes() { + return notes; + } + + public ArrayList getMentions() { + return mentions; + } + + public String toJsonString() { + try { + return ArchideMtlbAnnexUtil.objectMapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexLogEntry.java b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexLogEntry.java new file mode 100644 index 0000000..d82c0c9 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexLogEntry.java @@ -0,0 +1,62 @@ +package systems.archide.core.pojo; + +import java.time.LocalDateTime; + +public class ArchideMtlbAnnexLogEntry { + String author; + String type; + String content; + LocalDateTime timestamp; + + public ArchideMtlbAnnexLogEntry() { + super(); + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public LocalDateTime getTimestamp() { + return timestamp; + } + + public void setTimestamp(LocalDateTime timestamp) { + this.timestamp = timestamp; + } + + public ArchideMtlbAnnexLogEntry(String author, String type, String content) { + super(); + this.author = author; + this.content = content; + this.type = type; + this.timestamp = LocalDateTime.now(); + } + + public ArchideMtlbAnnexLogEntry(String author, String type, String content, LocalDateTime timestamp) { + super(); + this.author = author; + this.content = content; + this.type = type; + this.timestamp = timestamp; + } +} diff --git a/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexTag.java b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexTag.java new file mode 100644 index 0000000..196cbf3 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexTag.java @@ -0,0 +1,43 @@ +package systems.archide.core.pojo; + +public class ArchideMtlbAnnexTag { + String name; + String type; + String value; + + public ArchideMtlbAnnexTag() { + super(); + } + + public ArchideMtlbAnnexTag(String name, String type, String value) { + super(); + this.name = name; + this.type = type; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexUtil.java b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexUtil.java new file mode 100644 index 0000000..3058106 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/ArchideMtlbAnnexUtil.java @@ -0,0 +1,15 @@ +package systems.archide.core.pojo; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +public class ArchideMtlbAnnexUtil { + public static final ObjectMapper objectMapper = new ObjectMapper(); + + public static final ArchideMtlbAnnex deserialize(String annex) throws JsonMappingException, JsonProcessingException { + objectMapper.registerModule(new JavaTimeModule()); + return objectMapper.readValue(annex, ArchideMtlbAnnex.class); + } +} diff --git a/src/main/java/systems/archide/core/pojo/ChildData.java b/src/main/java/systems/archide/core/pojo/ChildData.java new file mode 100644 index 0000000..e1aefd4 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/ChildData.java @@ -0,0 +1,32 @@ +package systems.archide.core.pojo; + +public class ChildData { + + String name; + String gender; + int age; + + public ChildData() { + + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getGender() { + return gender; + } + public void setGender(String gender) { + this.gender = gender; + } + public int getAge() { + return age; + } + public void setAge(int age) { + this.age = age; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/DateRange.java b/src/main/java/systems/archide/core/pojo/DateRange.java new file mode 100644 index 0000000..1a0206e --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/DateRange.java @@ -0,0 +1,36 @@ +package systems.archide.core.pojo; + +import java.time.LocalDate; + +public class DateRange { + + LocalDate min; + LocalDate max; + + public DateRange(LocalDate min, LocalDate max) { + super(); + this.min = min; + this.max = max; + } + + public DateRange() { + + } + + public LocalDate getMin() { + return min; + } + + public void setMin(LocalDate min) { + this.min = min; + } + + public LocalDate getMax() { + return max; + } + + public void setMax(LocalDate max) { + this.max = max; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/DeathCertificateData.java b/src/main/java/systems/archide/core/pojo/DeathCertificateData.java new file mode 100644 index 0000000..6c02197 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/DeathCertificateData.java @@ -0,0 +1,268 @@ +package systems.archide.core.pojo; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.List; + +public class DeathCertificateData { + + Long id; + Long vitalRecordId; + String firstname; + LocalDate dateOfDeath; + Short gender; + String thirdname; + String motherName; + String fourthname; + String fatherName; + LocalTime timeOfDeath; + String deathPlace; + String address; + LocalDate birthdate; + String occupation; + String spouseName; + Long spouseId; + LocalDate marriageDate; + String marriageLocation; + String birthPlace; + Long declarantId; + List children; + Boolean reportedRecord; + String declarantFirstname; + String declarantSecondname; + String declarantFourthname; + LocalDateTime timestamp; + + String registrationLocation; + String mentions; + + public DeathCertificateData() { + } + + public String getRegistrationLocation() { + return registrationLocation; + } + + public void setRegistrationLocation(String registrationLocation) { + this.registrationLocation = registrationLocation; + } + + public String getMentions() { + return mentions; + } + + public void setMentions(String mentions) { + this.mentions = mentions; + } + + public String getDeclarantFirstname() { + return declarantFirstname; + } + + public void setDeclarantFirstname(String declarantFirstname) { + this.declarantFirstname = declarantFirstname; + } + + public String getDeclarantSecondname() { + return declarantSecondname; + } + + public void setDeclarantSecondname(String declarantSecondname) { + this.declarantSecondname = declarantSecondname; + } + + public String getDeclarantFourthname() { + return declarantFourthname; + } + + public void setDeclarantFourthname(String declarantFourthname) { + this.declarantFourthname = declarantFourthname; + } + + public LocalDateTime getTimestamp() { + return timestamp; + } + + public void setTimestamp(LocalDateTime timestamp) { + this.timestamp = timestamp; + } + + public String getBirthPlace() { + return birthPlace; + } + + public Long getDeclarantId() { + return declarantId; + } + + public void setDeclarantId(Long declarantId) { + this.declarantId = declarantId; + } + + + public void setBirthPlace(String birthPlace) { + this.birthPlace = birthPlace; + } + + public Boolean getReportedRecord() { + return reportedRecord; + } + + public void setReportedRecord(Boolean reportedRecord) { + this.reportedRecord = reportedRecord; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getVitalRecordId() { + return vitalRecordId; + } + + public void setVitalRecordId(Long vitalRecordId) { + this.vitalRecordId = vitalRecordId; + } + + public String getFirstname() { + return firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public LocalDate getDateOfDeath() { + return dateOfDeath; + } + + public void setDateOfDeath(LocalDate dateOfDeath) { + this.dateOfDeath = dateOfDeath; + } + + public Short getGender() { + return gender; + } + + public void setGender(Short gender) { + this.gender = gender; + } + + public String getThirdname() { + return thirdname; + } + + public void setThirdname(String thirdname) { + this.thirdname = thirdname; + } + + public String getMotherName() { + return motherName; + } + + public void setMotherName(String motherName) { + this.motherName = motherName; + } + + public String getFourthname() { + return fourthname; + } + + public void setFourthname(String fourthname) { + this.fourthname = fourthname; + } + + public String getFatherName() { + return fatherName; + } + + public void setFatherName(String fatherName) { + this.fatherName = fatherName; + } + + public LocalTime getTimeOfDeath() { + return timeOfDeath; + } + + public void setTimeOfDeath(LocalTime timeOfDeath) { + this.timeOfDeath = timeOfDeath; + } + + public String getDeathPlace() { + return deathPlace; + } + + public void setDeathPlace(String deathPlace) { + this.deathPlace = deathPlace; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public LocalDate getBirthdate() { + return birthdate; + } + + public void setBirthdate(LocalDate birthdate) { + this.birthdate = birthdate; + } + + public String getOccupation() { + return occupation; + } + + public void setOccupation(String occupation) { + this.occupation = occupation; + } + + public String getSpouseName() { + return spouseName; + } + + public void setSpouseName(String spouseName) { + this.spouseName = spouseName; + } + + public Long getSpouseId() { + return spouseId; + } + + public void setSpouseId(Long spouseId) { + this.spouseId = spouseId; + } + + public LocalDate getMarriageDate() { + return marriageDate; + } + + public void setMarriageDate(LocalDate marriageDate) { + this.marriageDate = marriageDate; + } + + public String getMarriageLocation() { + return marriageLocation; + } + + public void setMarriageLocation(String marriageLocation) { + this.marriageLocation = marriageLocation; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/DivorceCertificateResponse.java b/src/main/java/systems/archide/core/pojo/DivorceCertificateResponse.java new file mode 100644 index 0000000..1f157ee --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/DivorceCertificateResponse.java @@ -0,0 +1,87 @@ +package systems.archide.core.pojo; + +import java.time.LocalDate; +import java.time.LocalTime; + +public class DivorceCertificateResponse { + + String partner1Name; + LocalDate dateOfEffect; + LocalDate dateOfOrder; + String partner2Name; + LocalDate declarationDate; + String declarationPlace; + String annulmentOrder; + LocalTime timeOfMarriage; + Long unionRecordId; + + public DivorceCertificateResponse() { + + } + + + public Long getUnionRecordId() { + return unionRecordId; + } + + + public void setUnionRecordId(Long unionRecordId) { + this.unionRecordId = unionRecordId; + } + + + public LocalTime getTimeOfMarriage() { + return timeOfMarriage; + } + + + public void setTimeOfMarriage(LocalTime timeOfMarriage) { + this.timeOfMarriage = timeOfMarriage; + } + + + public String getPartner1Name() { + return partner1Name; + } + public void setPartner1Name(String partner1Name) { + this.partner1Name = partner1Name; + } + public LocalDate getDateOfEffect() { + return dateOfEffect; + } + public void setDateOfEffect(LocalDate dateOfEffect) { + this.dateOfEffect = dateOfEffect; + } + public LocalDate getDateOfOrder() { + return dateOfOrder; + } + public void setDateOfOrder(LocalDate dateOfOrder) { + this.dateOfOrder = dateOfOrder; + } + public String getPartner2Name() { + return partner2Name; + } + public void setPartner2Name(String partner2Name) { + this.partner2Name = partner2Name; + } + public LocalDate getDeclarationDate() { + return declarationDate; + } + public void setDeclarationDate(LocalDate declarationDate) { + this.declarationDate = declarationDate; + } + public String getDeclarationPlace() { + return declarationPlace; + } + public void setDeclarationPlace(String declarationPlace) { + this.declarationPlace = declarationPlace; + } + public String getAnnulmentOrder() { + return annulmentOrder; + } + public void setAnnulmentOrder(String annulmentOrder) { + this.annulmentOrder = annulmentOrder; + } + + +} diff --git a/src/main/java/systems/archide/core/pojo/GeneralStatistics.java b/src/main/java/systems/archide/core/pojo/GeneralStatistics.java new file mode 100644 index 0000000..c4c8d7f --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/GeneralStatistics.java @@ -0,0 +1,237 @@ +package systems.archide.core.pojo; + +import java.util.List; + +public class GeneralStatistics { + + Long issuedIdCardsNumber; + Long notExpiredIdCardsNumber; + Long notCancelledIdCardsNumber; + Long activatedIdCardsNumber; + Long distinctIndividualsIdCardsNumber; + Long authorizedBirthRecordsNumber; + Long livingAuthorizedBirthRecordsNumber; + Long livingFemalesAged18To29Number; + Long livingMalesAged18To29Number; + Long livingMalesAgedUnder18Number; + Long livingFemalesAgedUnder18Number; + Long livingMalesAged30To49Number; + Long livingFemalesAged30To49Number; + Long livingMalesAgedOver49Number; + Long livingFemalesAgedOver49Number; + Long livingPeopleWithCardsNumber; + Long livingMalesAgedUnder18WithCardsNumber; + Long livingFemalesAgedUnder18WithCardsNumber; + Long livingMalesAged18To29WithCardsNumber; + Long livingFemalesAged18To29WithCardsNumber; + Long livingMalesAged30To49WithCardsNumber; + Long livingFemalesAged30To49WithCardsNumber; + Long livingMalesAgedOver49WithCardsNumber; + Long livingFemalesAgedOver49WithCardsNumber; + List provinceGeneralStatisticsList; + + public GeneralStatistics() { + + } + + public Long getIssuedIdCardsNumber() { + return issuedIdCardsNumber; + } + + public void setIssuedIdCardsNumber(Long issuedIdCardsNumber) { + this.issuedIdCardsNumber = issuedIdCardsNumber; + } + + public Long getNotExpiredIdCardsNumber() { + return notExpiredIdCardsNumber; + } + + public void setNotExpiredIdCardsNumber(Long notExpiredIdCardsNumber) { + this.notExpiredIdCardsNumber = notExpiredIdCardsNumber; + } + + public Long getNotCancelledIdCardsNumber() { + return notCancelledIdCardsNumber; + } + + public void setNotCancelledIdCardsNumber(Long notCancelledIdCardsNumber) { + this.notCancelledIdCardsNumber = notCancelledIdCardsNumber; + } + + public Long getActivatedIdCardsNumber() { + return activatedIdCardsNumber; + } + + public void setActivatedIdCardsNumber(Long activatedIdCardsNumber) { + this.activatedIdCardsNumber = activatedIdCardsNumber; + } + + public Long getDistinctIndividualsIdCardsNumber() { + return distinctIndividualsIdCardsNumber; + } + + public void setDistinctIndividualsIdCardsNumber(Long distinctIndividualsIdCardsNumber) { + this.distinctIndividualsIdCardsNumber = distinctIndividualsIdCardsNumber; + } + + public Long getAuthorizedBirthRecordsNumber() { + return authorizedBirthRecordsNumber; + } + + public void setAuthorizedBirthRecordsNumber(Long authorizedBirthRecordsNumber) { + this.authorizedBirthRecordsNumber = authorizedBirthRecordsNumber; + } + + public Long getLivingAuthorizedBirthRecordsNumber() { + return livingAuthorizedBirthRecordsNumber; + } + + public void setLivingAuthorizedBirthRecordsNumber(Long livingAuthorizedBirthRecordsNumber) { + this.livingAuthorizedBirthRecordsNumber = livingAuthorizedBirthRecordsNumber; + } + + public Long getLivingFemalesAged18To29Number() { + return livingFemalesAged18To29Number; + } + + public void setLivingFemalesAged18To29Number(Long livingFemalesAged18To29Number) { + this.livingFemalesAged18To29Number = livingFemalesAged18To29Number; + } + + public Long getLivingMalesAged18To29Number() { + return livingMalesAged18To29Number; + } + + public void setLivingMalesAged18To29Number(Long livingMalesAged18To29Number) { + this.livingMalesAged18To29Number = livingMalesAged18To29Number; + } + + public Long getLivingMalesAgedUnder18Number() { + return livingMalesAgedUnder18Number; + } + + public void setLivingMalesAgedUnder18Number(Long livingMalesAgedUnder18Number) { + this.livingMalesAgedUnder18Number = livingMalesAgedUnder18Number; + } + + public Long getLivingFemalesAgedUnder18Number() { + return livingFemalesAgedUnder18Number; + } + + public void setLivingFemalesAgedUnder18Number(Long livingFemalesAgedUnder18Number) { + this.livingFemalesAgedUnder18Number = livingFemalesAgedUnder18Number; + } + + public Long getLivingMalesAged30To49Number() { + return livingMalesAged30To49Number; + } + + public void setLivingMalesAged30To49Number(Long livingMalesAged30To49Number) { + this.livingMalesAged30To49Number = livingMalesAged30To49Number; + } + + public Long getLivingFemalesAged30To49Number() { + return livingFemalesAged30To49Number; + } + + public void setLivingFemalesAged30To49Number(Long livingFemalesAged30To49Number) { + this.livingFemalesAged30To49Number = livingFemalesAged30To49Number; + } + + public Long getLivingMalesAgedOver49Number() { + return livingMalesAgedOver49Number; + } + + public void setLivingMalesAgedOver49Number(Long livingMalesAgedOver49Number) { + this.livingMalesAgedOver49Number = livingMalesAgedOver49Number; + } + + public Long getLivingFemalesAgedOver49Number() { + return livingFemalesAgedOver49Number; + } + + public void setLivingFemalesAgedOver49Number(Long livingFemalesAgedOver49Number) { + this.livingFemalesAgedOver49Number = livingFemalesAgedOver49Number; + } + + public Long getLivingPeopleWithCardsNumber() { + return livingPeopleWithCardsNumber; + } + + public void setLivingPeopleWithCardsNumber(Long livingPeopleWithCardsNumber) { + this.livingPeopleWithCardsNumber = livingPeopleWithCardsNumber; + } + + public Long getLivingMalesAgedUnder18WithCardsNumber() { + return livingMalesAgedUnder18WithCardsNumber; + } + + public void setLivingMalesAgedUnder18WithCardsNumber(Long livingMalesAgedUnder18WithCardsNumber) { + this.livingMalesAgedUnder18WithCardsNumber = livingMalesAgedUnder18WithCardsNumber; + } + + public Long getLivingFemalesAgedUnder18WithCardsNumber() { + return livingFemalesAgedUnder18WithCardsNumber; + } + + public void setLivingFemalesAgedUnder18WithCardsNumber(Long livingFemalesAgedUnder18WithCardsNumber) { + this.livingFemalesAgedUnder18WithCardsNumber = livingFemalesAgedUnder18WithCardsNumber; + } + + public Long getLivingMalesAged18To29WithCardsNumber() { + return livingMalesAged18To29WithCardsNumber; + } + + public void setLivingMalesAged18To29WithCardsNumber(Long livingMalesAged18To29WithCardsNumber) { + this.livingMalesAged18To29WithCardsNumber = livingMalesAged18To29WithCardsNumber; + } + + public Long getLivingFemalesAged18To29WithCardsNumber() { + return livingFemalesAged18To29WithCardsNumber; + } + + public void setLivingFemalesAged18To29WithCardsNumber(Long livingFemalesAged18To29WithCardsNumber) { + this.livingFemalesAged18To29WithCardsNumber = livingFemalesAged18To29WithCardsNumber; + } + + public Long getLivingMalesAged30To49WithCardsNumber() { + return livingMalesAged30To49WithCardsNumber; + } + + public void setLivingMalesAged30To49WithCardsNumber(Long livingMalesAged30To49WithCardsNumber) { + this.livingMalesAged30To49WithCardsNumber = livingMalesAged30To49WithCardsNumber; + } + + public Long getLivingFemalesAged30To49WithCardsNumber() { + return livingFemalesAged30To49WithCardsNumber; + } + + public void setLivingFemalesAged30To49WithCardsNumber(Long livingFemalesAged30To49WithCardsNumber) { + this.livingFemalesAged30To49WithCardsNumber = livingFemalesAged30To49WithCardsNumber; + } + + public Long getLivingMalesAgedOver49WithCardsNumber() { + return livingMalesAgedOver49WithCardsNumber; + } + + public void setLivingMalesAgedOver49WithCardsNumber(Long livingMalesAgedOver49WithCardsNumber) { + this.livingMalesAgedOver49WithCardsNumber = livingMalesAgedOver49WithCardsNumber; + } + + public Long getLivingFemalesAgedOver49WithCardsNumber() { + return livingFemalesAgedOver49WithCardsNumber; + } + + public void setLivingFemalesAgedOver49WithCardsNumber(Long livingFemalesAgedOver49WithCardsNumber) { + this.livingFemalesAgedOver49WithCardsNumber = livingFemalesAgedOver49WithCardsNumber; + } + + public List getProvinceGeneralStatisticsList() { + return provinceGeneralStatisticsList; + } + + public void setProvinceGeneralStatisticsList(List provinceGeneralStatisticsList) { + this.provinceGeneralStatisticsList = provinceGeneralStatisticsList; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/LongRange.java b/src/main/java/systems/archide/core/pojo/LongRange.java new file mode 100644 index 0000000..711b614 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/LongRange.java @@ -0,0 +1,35 @@ +package systems.archide.core.pojo; + +public class LongRange { + + Long min; + Long max; + + public LongRange() { + + } + + public LongRange(Long min, Long max) { + super(); + this.min = min; + this.max = max; + } + + public Long getMin() { + return min; + } + + public void setMin(Long min) { + this.min = min; + } + + public Long getMax() { + return max; + } + + public void setMax(Long max) { + this.max = max; + } + + +} diff --git a/src/main/java/systems/archide/core/pojo/MarriageCertificateResponse.java b/src/main/java/systems/archide/core/pojo/MarriageCertificateResponse.java new file mode 100644 index 0000000..73f27c4 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/MarriageCertificateResponse.java @@ -0,0 +1,552 @@ +package systems.archide.core.pojo; + +import java.time.LocalDate; +import java.time.LocalTime; + +public class MarriageCertificateResponse { + + String partner1Surname; + String partner1FirstNames; + String partner1MelanesianName; + String partner1SurnameAtBirth; + String partner1FirstNamesAtBirth; + short partner1Sex; + LocalDate partner1DateOfBirth; + String partner1BirthLocation; + String partner1UsualResidence; + + String partner2Surname; + String partner2FirstNames; + String partner2MelanesianName; + String partner2SurnameAtBirth; + String partner2FirstNamesAtBirth; + short partner2Sex; + LocalDate partner2DateOfBirth; + String partner2BirthLocation; + String partner2UsualResidence; + + String declarationFullName; + Long declarationNationalIdNumber; + LocalDate declarationDate; + String declarationPlace; + String declarationOfficer; + String declarationPosition; + + String partner1MotherFamilyName; + String partner1MotherFirstNames; + String partner1MotherFamilyNameAtBirth; + Long partner1MotherNationalIdNumber; + String partner1FatherFamilyName; + String partner1FatherFirstNames; + String partner1FatherFamilyNameAtBirth; + Long partner1FatherNationalIdNumber; + + String partner2MotherFamilyName; + String partner2MotherFirstNames; + String partner2MotherFamilyNameAtBirth; + Long partner2MotherNationalIdNumber; + String partner2FatherFamilyName; + String partner2FatherFirstNames; + String partner2FatherFamilyNameAtBirth; + Long partner2FatherNationalIdNumber; + String partner1FatherName; + String partner1MotherName; + String partner2FatherName; + String partner2MotherName; + Long partner2VitalRecordId; + Long partner1VitalRecordId; + String celebrant; + String firstWitnessName; + Long firstWitnessId; + String secondWitnessName; + Long secondWitnessId; + + String position; + String officer; + Integer marriageType; + + LocalTime timeOfMarriage; + + Boolean partner1reported; + Boolean partner2reported; + + String registrationLocation; + String mentions; + + public MarriageCertificateResponse() { + + } + + public String getRegistrationLocation() { + return registrationLocation; + } + + public void setRegistrationLocation(String registrationLocation) { + this.registrationLocation = registrationLocation; + } + + public String getMentions() { + return mentions; + } + + public void setMentions(String mentions) { + this.mentions = mentions; + } + + public Integer getMarriageType() { + return marriageType; + } + + public void setMarriageType(Integer marriageType) { + this.marriageType = marriageType; + } + + public LocalTime getTimeOfMarriage() { + return timeOfMarriage; + } + + public void setTimeOfMarriage(LocalTime timeOfMarriage) { + this.timeOfMarriage = timeOfMarriage; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getOfficer() { + return officer; + } + + public void setOfficer(String officer) { + this.officer = officer; + } + + public Boolean getPartner1reported() { + return partner1reported; + } + + public void setPartner1reported(Boolean partner1reported) { + this.partner1reported = partner1reported; + } + + public Boolean getPartner2reported() { + return partner2reported; + } + + public void setPartner2reported(Boolean partner2reported) { + this.partner2reported = partner2reported; + } + + public String getFirstWitnessName() { + return firstWitnessName; + } + + public void setFirstWitnessName(String firstWitnessName) { + this.firstWitnessName = firstWitnessName; + } + + public Long getFirstWitnessId() { + return firstWitnessId; + } + + public void setFirstWitnessId(Long firstWitnessId) { + this.firstWitnessId = firstWitnessId; + } + + public String getSecondWitnessName() { + return secondWitnessName; + } + + public void setSecondWitnessName(String secondWitnessName) { + this.secondWitnessName = secondWitnessName; + } + + public Long getSecondWitnessId() { + return secondWitnessId; + } + + public void setSecondWitnessId(Long secondWitnessId) { + this.secondWitnessId = secondWitnessId; + } + + public Long getPartner2VitalRecordId() { + return partner2VitalRecordId; + } + + public void setPartner2VitalRecordId(Long partner2VitalRecordId) { + this.partner2VitalRecordId = partner2VitalRecordId; + } + + public Long getPartner1VitalRecordId() { + return partner1VitalRecordId; + } + + public void setPartner1VitalRecordId(Long partner1VitalRecordId) { + this.partner1VitalRecordId = partner1VitalRecordId; + } + + public String getCelebrant() { + return celebrant; + } + + public void setCelebrant(String celebrant) { + this.celebrant = celebrant; + } + + public String getPartner1MotherName() { + return partner1MotherName; + } + + public void setPartner1MotherName(String partner1MotherName) { + this.partner1MotherName = partner1MotherName; + } + + public String getPartner2FatherName() { + return partner2FatherName; + } + + public void setPartner2FatherName(String partner2FatherName) { + this.partner2FatherName = partner2FatherName; + } + + public String getPartner2MotherName() { + return partner2MotherName; + } + + public void setPartner2MotherName(String partner2MotherName) { + this.partner2MotherName = partner2MotherName; + } + + public String getPartner1FatherName() { + return partner1FatherName; + } + + public void setPartner1FatherFirstNames(String partner1FatherFirstNames) { + this.partner1FatherFirstNames = partner1FatherFirstNames; + } + + public String getPartner1Surname() { + return partner1Surname; + } + + public void setPartner1Surname(String partner1Surname) { + this.partner1Surname = partner1Surname; + } + + public String getPartner1FirstNames() { + return partner1FirstNames; + } + + public void setPartner1FirstNames(String partner1FirstNames) { + this.partner1FirstNames = partner1FirstNames; + } + + public String getPartner1MelanesianName() { + return partner1MelanesianName; + } + + public void setPartner1MelanesianName(String partner1MelanesianName) { + this.partner1MelanesianName = partner1MelanesianName; + } + + public String getPartner1SurnameAtBirth() { + return partner1SurnameAtBirth; + } + + public void setPartner1SurnameAtBirth(String partner1SurnameAtBirth) { + this.partner1SurnameAtBirth = partner1SurnameAtBirth; + } + + public String getPartner1FirstNamesAtBirth() { + return partner1FirstNamesAtBirth; + } + + public void setPartner1FirstNamesAtBirth(String partner1FirstNamesAtBirth) { + this.partner1FirstNamesAtBirth = partner1FirstNamesAtBirth; + } + + public short getPartner1Sex() { + return partner1Sex; + } + + public void setPartner1Sex(short partner1Sex) { + this.partner1Sex = partner1Sex; + } + + public LocalDate getPartner1DateOfBirth() { + return partner1DateOfBirth; + } + + public void setPartner1DateOfBirth(LocalDate partner1DateOfBirth) { + this.partner1DateOfBirth = partner1DateOfBirth; + } + + public String getPartner1BirthLocation() { + return partner1BirthLocation; + } + + public void setPartner1BirthLocation(String partner1BirthLocation) { + this.partner1BirthLocation = partner1BirthLocation; + } + + public String getPartner1UsualResidence() { + return partner1UsualResidence; + } + + public void setPartner1UsualResidence(String partner1UsualResidence) { + this.partner1UsualResidence = partner1UsualResidence; + } + + public String getPartner2Surname() { + return partner2Surname; + } + + public void setPartner2Surname(String partner2Surname) { + this.partner2Surname = partner2Surname; + } + + public String getPartner2FirstNames() { + return partner2FirstNames; + } + + public void setPartner2FirstNames(String partner2FirstNames) { + this.partner2FirstNames = partner2FirstNames; + } + + public String getPartner2MelanesianName() { + return partner2MelanesianName; + } + + public void setPartner2MelanesianName(String partner2MelanesianName) { + this.partner2MelanesianName = partner2MelanesianName; + } + + public String getPartner2SurnameAtBirth() { + return partner2SurnameAtBirth; + } + + public void setPartner2SurnameAtBirth(String partner2SurnameAtBirth) { + this.partner2SurnameAtBirth = partner2SurnameAtBirth; + } + + public String getPartner2FirstNamesAtBirth() { + return partner2FirstNamesAtBirth; + } + + public void setPartner2FirstNamesAtBirth(String partner2FirstNamesAtBirth) { + this.partner2FirstNamesAtBirth = partner2FirstNamesAtBirth; + } + + public short getPartner2Sex() { + return partner2Sex; + } + + public void setPartner2Sex(short partner2Sex) { + this.partner2Sex = partner2Sex; + } + + public LocalDate getPartner2DateOfBirth() { + return partner2DateOfBirth; + } + + public void setPartner2DateOfBirth(LocalDate partner2DateOfBirth) { + this.partner2DateOfBirth = partner2DateOfBirth; + } + + public String getPartner2BirthLocation() { + return partner2BirthLocation; + } + + public void setPartner2BirthLocation(String partner2BirthLocation) { + this.partner2BirthLocation = partner2BirthLocation; + } + + public String getPartner2UsualResidence() { + return partner2UsualResidence; + } + + public void setPartner2UsualResidence(String partner2UsualResidence) { + this.partner2UsualResidence = partner2UsualResidence; + } + + public String getDeclarationFullName() { + return declarationFullName; + } + + public void setDeclarationFullName(String declarationFullName) { + this.declarationFullName = declarationFullName; + } + + public Long getDeclarationNationalIdNumber() { + return declarationNationalIdNumber; + } + + public void setDeclarationNationalIdNumber(Long declarationNationalIdNumber) { + this.declarationNationalIdNumber = declarationNationalIdNumber; + } + + public LocalDate getDeclarationDate() { + return declarationDate; + } + + public void setDeclarationDate(LocalDate declarationDate) { + this.declarationDate = declarationDate; + } + + public String getDeclarationPlace() { + return declarationPlace; + } + + public void setDeclarationPlace(String declarationPlace) { + this.declarationPlace = declarationPlace; + } + + public String getDeclarationOfficer() { + return declarationOfficer; + } + + public void setDeclarationOfficer(String declarationOfficer) { + this.declarationOfficer = declarationOfficer; + } + + public String getDeclarationPosition() { + return declarationPosition; + } + + public void setDeclarationPosition(String declarationPosition) { + this.declarationPosition = declarationPosition; + } + + public String getPartner1MotherFamilyName() { + return partner1MotherFamilyName; + } + + public void setPartner1MotherFamilyName(String partner1MotherFamilyName) { + this.partner1MotherFamilyName = partner1MotherFamilyName; + } + + public String getPartner1MotherFirstNames() { + return partner1MotherFirstNames; + } + + public void setPartner1MotherFirstNames(String partner1MotherFirstNames) { + this.partner1MotherFirstNames = partner1MotherFirstNames; + } + + public String getPartner1MotherFamilyNameAtBirth() { + return partner1MotherFamilyNameAtBirth; + } + + public void setPartner1MotherFamilyNameAtBirth(String partner1MotherFamilyNameAtBirth) { + this.partner1MotherFamilyNameAtBirth = partner1MotherFamilyNameAtBirth; + } + + public Long getPartner1MotherNationalIdNumber() { + return partner1MotherNationalIdNumber; + } + + public void setPartner1MotherNationalIdNumber(Long partner1MotherNationalIdNumber) { + this.partner1MotherNationalIdNumber = partner1MotherNationalIdNumber; + } + + public String getPartner1FatherFamilyName() { + return partner1FatherFamilyName; + } + + public void setPartner1FatherFamilyName(String partner1FatherFamilyName) { + this.partner1FatherFamilyName = partner1FatherFamilyName; + } + + public String getPartner1FatherFirstNames() { + return partner1FatherFirstNames; + } + + public void setPartner1FatherName(String partner1FatherName) { + this.partner1FatherName= partner1FatherName; + } + + public String getPartner1FatherFamilyNameAtBirth() { + return partner1FatherFamilyNameAtBirth; + } + + public void setPartner1FatherFamilyNameAtBirth(String partner1FatherFamilyNameAtBirth) { + this.partner1FatherFamilyNameAtBirth = partner1FatherFamilyNameAtBirth; + } + + public Long getPartner1FatherNationalIdNumber() { + return partner1FatherNationalIdNumber; + } + + public void setPartner1FatherNationalIdNumber(Long partner1FatherNationalIdNumber) { + this.partner1FatherNationalIdNumber = partner1FatherNationalIdNumber; + } + + public String getPartner2MotherFamilyName() { + return partner2MotherFamilyName; + } + + public void setPartner2MotherFamilyName(String partner2MotherFamilyName) { + this.partner2MotherFamilyName = partner2MotherFamilyName; + } + + public String getPartner2MotherFirstNames() { + return partner2MotherFirstNames; + } + + public void setPartner2MotherFirstNames(String partner2MotherFirstNames) { + this.partner2MotherFirstNames = partner2MotherFirstNames; + } + + public String getPartner2MotherFamilyNameAtBirth() { + return partner2MotherFamilyNameAtBirth; + } + + public void setPartner2MotherFamilyNameAtBirth(String partner2MotherFamilyNameAtBirth) { + this.partner2MotherFamilyNameAtBirth = partner2MotherFamilyNameAtBirth; + } + + public Long getPartner2MotherNationalIdNumber() { + return partner2MotherNationalIdNumber; + } + + public void setPartner2MotherNationalIdNumber(Long partner2MotherNationalIdNumber) { + this.partner2MotherNationalIdNumber = partner2MotherNationalIdNumber; + } + + public String getPartner2FatherFamilyName() { + return partner2FatherFamilyName; + } + + public void setPartner2FatherFamilyName(String partner2FatherFamilyName) { + this.partner2FatherFamilyName = partner2FatherFamilyName; + } + + public String getPartner2FatherFirstNames() { + return partner2FatherFirstNames; + } + + public void setPartner2FatherFirstNames(String partner2FatherFirstNames) { + this.partner2FatherFirstNames = partner2FatherFirstNames; + } + + public String getPartner2FatherFamilyNameAtBirth() { + return partner2FatherFamilyNameAtBirth; + } + + public void setPartner2FatherFamilyNameAtBirth(String partner2FatherFamilyNameAtBirth) { + this.partner2FatherFamilyNameAtBirth = partner2FatherFamilyNameAtBirth; + } + + public Long getPartner2FatherNationalIdNumber() { + return partner2FatherNationalIdNumber; + } + + public void setPartner2FatherNationalIdNumber(Long partner2FatherNationalIdNumber) { + this.partner2FatherNationalIdNumber = partner2FatherNationalIdNumber; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/PreparedQuery.java b/src/main/java/systems/archide/core/pojo/PreparedQuery.java new file mode 100644 index 0000000..70b9cff --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/PreparedQuery.java @@ -0,0 +1,31 @@ +package systems.archide.core.pojo; + +import java.util.List; + +public class PreparedQuery { + + private String query; + private List parameters; + + public PreparedQuery(String query, List parameters) { + this.query = query; + this.parameters = parameters; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public List getParameters() { + return parameters; + } + + public void setParameters(List parameters) { + this.parameters = parameters; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/ProvinceGeneralStatistics.java b/src/main/java/systems/archide/core/pojo/ProvinceGeneralStatistics.java new file mode 100644 index 0000000..1fc57be --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/ProvinceGeneralStatistics.java @@ -0,0 +1,190 @@ +package systems.archide.core.pojo; + +public class ProvinceGeneralStatistics { + + String provinceName; + Long authorizedBirthRecordsNumber; + Long livingAuthorizedBirthRecordsNumber; + Long livingFemalesAged18To29Number; + Long livingMalesAged18To29Number; + Long livingMalesAgedUnder18Number; + Long livingFemalesAgedUnder18Number; + Long livingMalesAged30To49Number; + Long livingFemalesAged30To49Number; + Long livingMalesAgedOver49Number; + Long livingFemalesAgedOver49Number; + Long livingPeopleWithCardsNumber; + Long livingMalesAgedUnder18WithCardsNumber; + Long livingFemalesAgedUnder18WithCardsNumber; + Long livingMalesAged18To29WithCardsNumber; + Long livingFemalesAged18To29WithCardsNumber; + Long livingMalesAged30To49WithCardsNumber; + Long livingFemalesAged30To49WithCardsNumber; + Long livingMalesAgedOver49WithCardsNumber; + Long livingFemalesAgedOver49WithCardsNumber; + + public ProvinceGeneralStatistics() { + + } + + public String getProvinceName() { + return provinceName; + } + + public void setProvinceName(String provinceName) { + this.provinceName = provinceName; + } + + public Long getAuthorizedBirthRecordsNumber() { + return authorizedBirthRecordsNumber; + } + + public void setAuthorizedBirthRecordsNumber(Long authorizedBirthRecordsNumber) { + this.authorizedBirthRecordsNumber = authorizedBirthRecordsNumber; + } + + public Long getLivingAuthorizedBirthRecordsNumber() { + return livingAuthorizedBirthRecordsNumber; + } + + public void setLivingAuthorizedBirthRecordsNumber(Long livingAuthorizedBirthRecordsNumber) { + this.livingAuthorizedBirthRecordsNumber = livingAuthorizedBirthRecordsNumber; + } + + public Long getLivingFemalesAged18To29Number() { + return livingFemalesAged18To29Number; + } + + public void setLivingFemalesAged18To29Number(Long livingFemalesAged18To29Number) { + this.livingFemalesAged18To29Number = livingFemalesAged18To29Number; + } + + public Long getLivingMalesAged18To29Number() { + return livingMalesAged18To29Number; + } + + public void setLivingMalesAged18To29Number(Long livingMalesAged18To29Number) { + this.livingMalesAged18To29Number = livingMalesAged18To29Number; + } + + public Long getLivingMalesAgedUnder18Number() { + return livingMalesAgedUnder18Number; + } + + public void setLivingMalesAgedUnder18Number(Long livingMalesAgedUnder18Number) { + this.livingMalesAgedUnder18Number = livingMalesAgedUnder18Number; + } + + public Long getLivingFemalesAgedUnder18Number() { + return livingFemalesAgedUnder18Number; + } + + public void setLivingFemalesAgedUnder18Number(Long livingFemalesAgedUnder18Number) { + this.livingFemalesAgedUnder18Number = livingFemalesAgedUnder18Number; + } + + public Long getLivingMalesAged30To49Number() { + return livingMalesAged30To49Number; + } + + public void setLivingMalesAged30To49Number(Long livingMalesAged30To49Number) { + this.livingMalesAged30To49Number = livingMalesAged30To49Number; + } + + public Long getLivingFemalesAged30To49Number() { + return livingFemalesAged30To49Number; + } + + public void setLivingFemalesAged30To49Number(Long livingFemalesAged30To49Number) { + this.livingFemalesAged30To49Number = livingFemalesAged30To49Number; + } + + public Long getLivingMalesAgedOver49Number() { + return livingMalesAgedOver49Number; + } + + public void setLivingMalesAgedOver49Number(Long livingMalesAgedOver49Number) { + this.livingMalesAgedOver49Number = livingMalesAgedOver49Number; + } + + public Long getLivingFemalesAgedOver49Number() { + return livingFemalesAgedOver49Number; + } + + public void setLivingFemalesAgedOver49Number(Long livingFemalesAgedOver49Number) { + this.livingFemalesAgedOver49Number = livingFemalesAgedOver49Number; + } + + public Long getLivingPeopleWithCardsNumber() { + return livingPeopleWithCardsNumber; + } + + public void setLivingPeopleWithCardsNumber(Long livingPeopleWithCardsNumber) { + this.livingPeopleWithCardsNumber = livingPeopleWithCardsNumber; + } + + public Long getLivingMalesAgedUnder18WithCardsNumber() { + return livingMalesAgedUnder18WithCardsNumber; + } + + public void setLivingMalesAgedUnder18WithCardsNumber(Long livingMalesAgedUnder18WithCardsNumber) { + this.livingMalesAgedUnder18WithCardsNumber = livingMalesAgedUnder18WithCardsNumber; + } + + public Long getLivingFemalesAgedUnder18WithCardsNumber() { + return livingFemalesAgedUnder18WithCardsNumber; + } + + public void setLivingFemalesAgedUnder18WithCardsNumber(Long livingFemalesAgedUnder18WithCardsNumber) { + this.livingFemalesAgedUnder18WithCardsNumber = livingFemalesAgedUnder18WithCardsNumber; + } + + public Long getLivingMalesAged18To29WithCardsNumber() { + return livingMalesAged18To29WithCardsNumber; + } + + public void setLivingMalesAged18To29WithCardsNumber(Long livingMalesAged18To29WithCardsNumber) { + this.livingMalesAged18To29WithCardsNumber = livingMalesAged18To29WithCardsNumber; + } + + public Long getLivingFemalesAged18To29WithCardsNumber() { + return livingFemalesAged18To29WithCardsNumber; + } + + public void setLivingFemalesAged18To29WithCardsNumber(Long livingFemalesAged18To29WithCardsNumber) { + this.livingFemalesAged18To29WithCardsNumber = livingFemalesAged18To29WithCardsNumber; + } + + public Long getLivingMalesAged30To49WithCardsNumber() { + return livingMalesAged30To49WithCardsNumber; + } + + public void setLivingMalesAged30To49WithCardsNumber(Long livingMalesAged30To49WithCardsNumber) { + this.livingMalesAged30To49WithCardsNumber = livingMalesAged30To49WithCardsNumber; + } + + public Long getLivingFemalesAged30To49WithCardsNumber() { + return livingFemalesAged30To49WithCardsNumber; + } + + public void setLivingFemalesAged30To49WithCardsNumber(Long livingFemalesAged30To49WithCardsNumber) { + this.livingFemalesAged30To49WithCardsNumber = livingFemalesAged30To49WithCardsNumber; + } + + public Long getLivingMalesAgedOver49WithCardsNumber() { + return livingMalesAgedOver49WithCardsNumber; + } + + public void setLivingMalesAgedOver49WithCardsNumber(Long livingMalesAgedOver49WithCardsNumber) { + this.livingMalesAgedOver49WithCardsNumber = livingMalesAgedOver49WithCardsNumber; + } + + public Long getLivingFemalesAgedOver49WithCardsNumber() { + return livingFemalesAgedOver49WithCardsNumber; + } + + public void setLivingFemalesAgedOver49WithCardsNumber(Long livingFemalesAgedOver49WithCardsNumber) { + this.livingFemalesAgedOver49WithCardsNumber = livingFemalesAgedOver49WithCardsNumber; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/QueryBuilder.java b/src/main/java/systems/archide/core/pojo/QueryBuilder.java new file mode 100644 index 0000000..0bead9b --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/QueryBuilder.java @@ -0,0 +1,176 @@ +package systems.archide.core.pojo; + +import java.util.ArrayList; +import java.util.List; + +import com.google.common.base.CaseFormat; + +import systems.archide.core.controller.search.Fuzziness; + +public class QueryBuilder { + private List parameters = new ArrayList<>(); + + public PreparedQuery buildQuery(SearchQueryInput input, String tableName, Long limit, Long offset, String orderBy) { + StringBuilder query = new StringBuilder("SELECT * FROM " + tableName + " WHERE "); + for (int i = 0; i < input.getColumns().size(); i++) { + if (i < input.getColumns().size() - 1) + appendCondition(query, input.getColumns().get(i), true, input.getCaseSensitiveSearch()); + else + appendCondition(query, input.getColumns().get(i), false, input.getCaseSensitiveSearch()); + } + if (orderBy != null) + query.append(" order by " + orderBy); + if (limit != null) + query.append(" limit " + limit); + if (offset != null) { + query.append(" offset " + offset); + } + return new PreparedQuery(query.toString(), parameters); + } + + private void appendCondition(StringBuilder query, SearchColumn column, Boolean and, Boolean caseSensitiveSearch) { + switch (column.getType().toLowerCase()) { + case "text": + handleTextType(query, column, and, caseSensitiveSearch); + break; + case "number": + handleNumberType(query, column, and); + break; + case "boolean": + handleBooleanType(query, column, and); + break; + case "date": + handleDateType(query, column, and); + break; + case "enum": + handleEnumType(query, column, and); + break; + default: + throw new IllegalArgumentException("Unsupported column type: " + column.getType()); + } + } + + private void handleTextType(StringBuilder query, SearchColumn column, Boolean and, Boolean caseSensitiveSearch) { + if (column.getTextValue() != null) { + if (column.getSearchType().equals("fuzzy")) { + query.append("(SIMILARITY(").append(formatColumnName(column.getName())).append(", ?) > ").append(Fuzziness.AUTO.getFuzzinessValue()).append(") "); + parameters.add(column.getTextValue()); + } else if (column.getSearchType().equals("exact")) { + query.append(formatColumnName(column.getName())).append(" = ?"); + parameters.add(column.getTextValue()); + } else if (column.getSearchType().equals("startsWith")) { + if (caseSensitiveSearch) { + query.append(formatColumnName(column.getName())).append(" LIKE ?"); + } else { + query.append(formatColumnName(column.getName())).append(" ILIKE ?"); + } + parameters.add(column.getTextValue() + "%"); + } else if (column.getSearchType().equals("notStartsWith")) { + if (caseSensitiveSearch) { + query.append(formatColumnName(column.getName())).append(" NOT LIKE ?"); + } else { + query.append(formatColumnName(column.getName())).append(" NOT ILIKE ?"); + } + parameters.add(column.getTextValue() + "%"); + } else { + query.append("(SIMILARITY(").append(formatColumnName(column.getName())).append(", ?) > ").append(Fuzziness.AUTO.getFuzzinessValue()).append(") "); + parameters.add(column.getTextValue()); + } + if (and) + query.append(" ").append("and").append(" "); + else + query.append(" "); + } + } + + private void handleNumberType(StringBuilder query, SearchColumn column, Boolean and) { + if (column.getLongRange() != null) { + query.append(formatColumnName(column.getName())).append(" BETWEEN ? AND ?"); + parameters.add(column.getLongRange().getMin()); + parameters.add(column.getLongRange().getMax()); + if (and) + query.append(" ").append("and").append(" "); + else + query.append(" "); + } else if (column.getLongValue() != null) { + query.append(formatColumnName(column.getName())).append(" = ?"); + parameters.add(column.getLongValue()); // Assuming value is provided + if (and) + query.append(" ").append("and").append(" "); + else + query.append(" "); + } + } + + private void handleDateType(StringBuilder query, SearchColumn column, Boolean and) { + if (column.getDateRange() != null) { + query.append(formatColumnName(column.getName())).append(" BETWEEN ? AND ?"); + parameters.add(column.getDateRange().getMin()); + parameters.add(column.getDateRange().getMax()); + if (and) + query.append(" ").append("and").append(" "); + else + query.append(" "); + } else if (column.getDateValue() != null) { + query.append(formatColumnName(column.getName())).append(" = ?"); + parameters.add(column.getDateValue()); // Assuming value is provided + if (and) + query.append(" ").append("and").append(" "); + else + query.append(" "); + } + } + + private void handleBooleanType(StringBuilder query, SearchColumn column, Boolean and) { + if (column.getBooleanValue() != null) { + query.append(formatColumnName(column.getName())).append(" = ?"); + parameters.add(column.getBooleanValue()); + if (and) + query.append(" ").append("and").append(" "); + else + query.append(" "); + } + } + + //TODO: This is hardcoded enum type (need to add enum type: shor or integer ...) + private void handleEnumType(StringBuilder query, SearchColumn column, Boolean and) { + if (column.getEnumValues() != null) + if (!column.getEnumValues().isEmpty()) { + query.append(formatColumnName(column.getName())).append(" IN ("); + for (int i = 0; i < column.getEnumValues().size(); i++) { + query.append("?"); + if (i < column.getEnumValues().size() - 1) { + query.append(", "); + } + parameters.add(Short.parseShort(column.getEnumValues().get(i))); + } + query.append(")"); + if (and) + query.append(" ").append("and").append(" "); + else + query.append(" "); + } + } + + private String formatColumnName(String columnName) { + return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, columnName); + } + + public PreparedQuery buildQuery(SearchQueryInput input, String tableName) { + if (!input.getColumns().isEmpty()) { + StringBuilder query = new StringBuilder("select count(id) from " + tableName + " WHERE "); + for (int i = 0; i < input.getColumns().size(); i++) { + if (i < input.getColumns().size() - 1) + appendCondition(query, input.getColumns().get(i), true, input.getCaseSensitiveSearch()); + else + appendCondition(query, input.getColumns().get(i), false, input.getCaseSensitiveSearch()); + } + return new PreparedQuery(query.toString(), parameters); + } + return null; + } + +} + + + diff --git a/src/main/java/systems/archide/core/pojo/SearchColumn.java b/src/main/java/systems/archide/core/pojo/SearchColumn.java new file mode 100644 index 0000000..d19f680 --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/SearchColumn.java @@ -0,0 +1,128 @@ +package systems.archide.core.pojo; + +import java.time.LocalDate; +import java.util.List; + +public class SearchColumn { + + String name; + String type; + String searchType; + LongRange longRange; + DateRange dateRange; + List enumValues; + Boolean booleanValue; + String textValue; + Long longValue; + LocalDate dateValue; + Boolean and; + + public SearchColumn(String name, String type, String searchType, LongRange longRange, DateRange dateRange, + List enumValues, Boolean and, Boolean booleanValue, String textValue, Long longValue, LocalDate dateValue) { + super(); + this.name = name; + this.type = type; + this.searchType = searchType; + this.longRange = longRange; + this.dateRange = dateRange; + this.enumValues = enumValues; + this.booleanValue = booleanValue; + this.textValue = textValue; + this.longValue = longValue; + this.dateValue = dateValue; + this.and = and; + } + + public SearchColumn() { + + } + + public Long getLongValue() { + return longValue; + } + + public void setLongValue(Long longValue) { + this.longValue = longValue; + } + + public LocalDate getDateValue() { + return dateValue; + } + + public void setDateValue(LocalDate dateValue) { + this.dateValue = dateValue; + } + + public String getTextValue() { + return textValue; + } + + public void setTextValue(String textValue) { + this.textValue = textValue; + } + + public Boolean getBooleanValue() { + return booleanValue; + } + + public void setBooleanValue(Boolean booleanValue) { + this.booleanValue = booleanValue; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getSearchType() { + return searchType; + } + + public void setSearchType(String searchType) { + this.searchType = searchType; + } + + public LongRange getLongRange() { + return longRange; + } + + public void setLongRange(LongRange longRange) { + this.longRange = longRange; + } + + public DateRange getDateRange() { + return dateRange; + } + + public void setDateRange(DateRange dateRange) { + this.dateRange = dateRange; + } + + public List getEnumValues() { + return enumValues; + } + + public void setEnumValues(List enumValues) { + this.enumValues = enumValues; + } + + public Boolean getAnd() { + return and; + } + + public void setAnd(Boolean and) { + this.and = and; + } + +} diff --git a/src/main/java/systems/archide/core/pojo/SearchQueryInput.java b/src/main/java/systems/archide/core/pojo/SearchQueryInput.java new file mode 100644 index 0000000..e14cbff --- /dev/null +++ b/src/main/java/systems/archide/core/pojo/SearchQueryInput.java @@ -0,0 +1,42 @@ +package systems.archide.core.pojo; + +import java.util.ArrayList; +import java.util.List; + +public class SearchQueryInput { + + List columns; + Boolean caseSensitiveSearch; + + public SearchQueryInput() { + + } + + public List getColumns() { + return columns; + } + + public void setColumns(List columns) { + this.columns = columns; + } + + public Boolean getCaseSensitiveSearch() { + return caseSensitiveSearch; + } + + public void setCaseSensitiveSearch(Boolean caseSensitiveSearch) { + this.caseSensitiveSearch = caseSensitiveSearch; + } + + public void addColumn(SearchColumn column) { + if (columns != null) + this.columns.add(column); + else + { + this.columns = new ArrayList<>(); + this.columns.add(column); + } + + } + +} diff --git a/src/main/java/systems/archide/core/repository/VitalRecordAdvancedSearchRepository.java b/src/main/java/systems/archide/core/repository/VitalRecordAdvancedSearchRepository.java new file mode 100644 index 0000000..8618a18 --- /dev/null +++ b/src/main/java/systems/archide/core/repository/VitalRecordAdvancedSearchRepository.java @@ -0,0 +1,172 @@ +package systems.archide.core.repository; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Repository; + +import com.softomaton.orm.IStore; +import com.softomaton.orm.QueryUtil; +import com.softomaton.orm.UserContext; + +import systems.archide.core.pojo.PreparedQuery; +import systems.archide.core.pojo.QueryBuilder; +import systems.archide.core.pojo.SearchQueryInput; +import systems.archide.core.pojo.VitalRecord; + +@Lazy +@Repository +public class VitalRecordAdvancedSearchRepository { + private static final Logger log = LogManager.getLogger(systems.archide.core.repository.VitalRecordAdvancedSearchRepository.class); + + IStore store; + UserContext userContext; + + public void setUserContext(UserContext userContext) { + this.userContext = userContext; + } + + public UserContext getUserContext() { + return this.userContext; + } + + public void setStore(IStore store) { + this.store = store; + } + + public IStore getStore() { + return store; + } + + public List advancedSearch(SearchQueryInput input, Long limit, Long offset, String orderBy) { + List beans = new ArrayList(); + Connection con = store.getConnection(); + QueryBuilder builder = new QueryBuilder(); + PreparedQuery preparedQuery = builder.buildQuery(input, "vital_record", limit, offset, orderBy); + PreparedStatement ps = null; + if (con != null) { + try { + ps = con.prepareStatement(preparedQuery.getQuery()); + for (int i = 0; i < preparedQuery.getParameters().size(); i++) { + ps.setObject(i + 1, preparedQuery.getParameters().get(i)); + } + ps.execute(); + ResultSet rs = ps.getResultSet(); + while (rs.next()) { + VitalRecord bean = new VitalRecord(); + bean.setId((Long) rs.getObject("id")); + bean.setBirthCountry((Integer) rs.getObject("birth_country")); + bean.setBirthDayUnknown(rs.getBoolean("birth_day_unknown")); + bean.setBirthMonthUnknown(rs.getBoolean("birth_month_unknown")); + bean.setBirthPlace(rs.getString("birth_place")); + bean.setBirthTime(rs.getObject("birth_time", LocalTime.class)); + bean.setBirthTimeUnknown(rs.getBoolean("birth_time_unknown")); + bean.setBirthYearUnknown(rs.getBoolean("birth_year_unknown")); + bean.setBirthdate(rs.getObject("birthdate", LocalDate.class)); + bean.setCardId((Long) rs.getObject("card_id")); + bean.setCommonIdNumber(rs.getString("common_id_number")); + bean.setDisability(rs.getBoolean("disability")); + bean.setDonor(rs.getBoolean("donor")); + bean.setDonorNotes(rs.getString("donor_notes")); + bean.setDraft(rs.getBoolean("draft")); + bean.setFaceId((Long) rs.getObject("face_id")); + bean.setFatherId((Long) rs.getObject("father_id")); + bean.setFifthname(rs.getString("fifthname")); + bean.setFirstname(rs.getString("firstname")); + bean.setFourthname(rs.getString("fourthname")); + bean.setGender(QueryUtil.getNullableShort(rs, "gender")); + bean.setInactive(rs.getBoolean("inactive")); + bean.setIsDeleted(rs.getBoolean("is_deleted")); + bean.setMaritalStatus(QueryUtil.getNullableShort(rs, "marital_status")); + bean.setMarkedInactive(rs.getObject("marked_inactive", LocalDate.class)); + bean.setMotherId((Long) rs.getObject("mother_id")); + bean.setNotes(rs.getString("notes")); + bean.setOtherCitizenshipCsv(rs.getString("other_citizenship_csv")); + bean.setPrimaryCitizenship(rs.getString("primary_citizenship")); + bean.setReportedFatherName(rs.getString("reported_father_name")); + bean.setReportedMotherName(rs.getString("reported_mother_name")); + bean.setSecondname(rs.getString("secondname")); + bean.setThirdname(rs.getString("thirdname")); + bean.setTimestamp(rs.getObject("timestamp", LocalDateTime.class)); + bean.setTouched((Long) rs.getObject("touched")); + bean.setUnknownFather(rs.getBoolean("unknown_father")); + bean.setVoter(rs.getBoolean("voter")); + beans.add(bean); + } + } catch (SQLException e) { + log.error("find where failed", e); + e.printStackTrace(); + } finally { + if (ps != null) + try { + ps.close(); + } catch (SQLException e) { + + log.error("error while closing prepared statement", e); + throw new RuntimeException(e); + } + if (con != null) { + try { + con.close(); + } catch (SQLException e) { + log.error("error while closing connection", e); + throw new RuntimeException(e); + } + } + } + } + return beans; + } + + public long advancedSearchCount(SearchQueryInput input) { + Connection con = store.getConnection(); + QueryBuilder builder = new QueryBuilder(); + PreparedQuery preparedQuery = builder.buildQuery(input, "vital_record"); + PreparedStatement ps = null; + if (con != null) { + try { + ps = con.prepareStatement(preparedQuery.getQuery()); + for (int i = 0; i < preparedQuery.getParameters().size(); i++) { + ps.setObject(i + 1, preparedQuery.getParameters().get(i)); + } + ps.execute(); + ResultSet rs = ps.getResultSet(); + if (rs.next()) { + return rs.getLong(1); + } + } catch (SQLException e) { + log.error("find where failed", e); + e.printStackTrace(); + } finally { + if (ps != null) + try { + ps.close(); + } catch (SQLException e) { + + log.error("error while closing prepared statement", e); + throw new RuntimeException(e); + } + if (con != null) { + try { + con.close(); + } catch (SQLException e) { + log.error("error while closing connection", e); + throw new RuntimeException(e); + } + } + } + } + return -1; + } + +} diff --git a/src/main/java/systems/archide/core/service/hooks/ApplyLogic.java b/src/main/java/systems/archide/core/service/hooks/ApplyLogic.java new file mode 100644 index 0000000..f1ad377 --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/ApplyLogic.java @@ -0,0 +1,410 @@ +package systems.archide.core.service.hooks; + +import java.time.LocalDate; +import java.util.List; + +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.AttachDigitalizationMtlbInput; +import systems.archide.core.pojo.CivilStatusMtlb; +import systems.archide.core.pojo.CivilStatusMtlbAttachment; +import systems.archide.core.pojo.CivilStatusMtlbCreateRequest; +import systems.archide.core.pojo.DigitalizationCreateRequest; +import systems.archide.core.pojo.DocumentType; +import systems.archide.core.pojo.Face; +import systems.archide.core.pojo.GetServiceStatusRequest; +import systems.archide.core.pojo.GetServiceStatusResponse; +import systems.archide.core.pojo.IdMtlb; +import systems.archide.core.pojo.IdMtlbCreateRequest; +import systems.archide.core.pojo.IssueDocumentInput; +import systems.archide.core.pojo.IssuedDocuments; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.Rv4DeathMtlbCreateRequest; +import systems.archide.core.pojo.Rv4DivorceMtlbRequest; +import systems.archide.core.pojo.Rv4IdCardMtlbRequest; +import systems.archide.core.pojo.Rv4MarriageMtlbRequest; +import systems.archide.core.pojo.RvFourBirthMtlbCreateRequest; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.pojo.RvfourDeathMtlb; +import systems.archide.core.pojo.RvfourDivorceMtlb; +import systems.archide.core.pojo.RvfourIdCardMtlb; +import systems.archide.core.pojo.RvfourMarriageMtlb; +import systems.archide.core.pojo.UnionMtlb; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.CivilStatusMtlbAttachmentRepository; +import systems.archide.core.repository.CivilStatusMtlbRepository; +import systems.archide.core.repository.FaceRepository; +import systems.archide.core.repository.IdMtlbRepository; +import systems.archide.core.repository.IssuedDocumentsRepository; +import systems.archide.core.repository.RvfourBirthMtlbRepository; +import systems.archide.core.repository.RvfourDeathMtlbRepository; +import systems.archide.core.repository.RvfourDivorceMtlbRepository; +import systems.archide.core.repository.RvfourIdCardMtlbRepository; +import systems.archide.core.repository.RvfourMarriageMtlbRepository; +import systems.archide.core.repository.UnionMtlbRepository; +import systems.archide.core.repository.VitalRecordRepository; +import systems.archide.core.workflows.utils.MtlbEntity; + +@Component +public class ApplyLogic { + + final Integer EXPIRES_YEARS = 5; + + @Autowired + private CivilStatusMtlbRepository civilStatusMtlbService; + + @Autowired + private CivilStatusMtlbAttachmentRepository civilStatusMtlbAttachmentService; + + @Autowired + private IdMtlbRepository idMtlbService; + + @Autowired + private UnionMtlbRepository unionMtlbService; + + @Autowired + private RvfourBirthMtlbRepository rvfourBirthMtlbRepository; + + @Autowired + private RvfourDeathMtlbRepository rvfourDeathMtlbRepository; + + @Autowired + private VitalRecordRepository vitalRecordService; + + @Autowired + private RvfourMarriageMtlbRepository rvfourMarriageMtlbRepository; + + @Autowired + private RvfourDivorceMtlbRepository rvfourDivorceMtlbRepository; + + @Autowired + private RvfourIdCardMtlbRepository rvfourIdCardMtlbRepository; + + @Autowired + private FaceRepository faceService; + + @Autowired + private IssuedDocumentsRepository issuedDocumentsRepository; + + public final String INITIATED = "INITIATED"; + + public final String FINISHED = "FINISHED"; + + public final Integer CIVIL_STATUS_MTLB_TYPE = 1; + + public final Integer ID_MTLB_TYPE = 2; + + public ResponseEntity createCivilStatusMtlb(CivilStatusMtlbCreateRequest request) { + CivilStatusMtlb civilStatusMtlb = civilStatusMtlbCreateRequest2CivilStatusMtlb(request); + civilStatusMtlb.setMtlbStatus(MtlbStatus.INITIATED); + Long id = civilStatusMtlbService.insert(civilStatusMtlb); + civilStatusMtlb.setId(id); + return ResponseEntity.ok(id); + } + + public ResponseEntity createIdMtlb(IdMtlbCreateRequest request) { + IdMtlb idMtlb = idMtlbCreateRequest2IdMtlb(request); + idMtlb.setMtlbStatus(MtlbStatus.INITIATED); + Long id = idMtlbService.insert(idMtlb); + return ResponseEntity.ok(id); + } + + public UnionMtlb createUnionMtlb(UnionMtlb request) { + request.setMtlbStatus(MtlbStatus.SUBMITTED); + Long id = unionMtlbService.insert(request); + request.setId(id); + return request; + } + + private CivilStatusMtlb civilStatusMtlbCreateRequest2CivilStatusMtlb( + CivilStatusMtlbCreateRequest civilStatusMtlbCreateRequest) { + CivilStatusMtlb civilStatusMtlb = new CivilStatusMtlb(); + civilStatusMtlb.setDraft(civilStatusMtlbCreateRequest.isDraft()); + civilStatusMtlb.setFirstname(civilStatusMtlbCreateRequest.getFirstname()); + civilStatusMtlb.setSecondname(civilStatusMtlbCreateRequest.getSecondname()); + civilStatusMtlb.setThirdname(civilStatusMtlbCreateRequest.getThirdname()); + civilStatusMtlb.setFourthname(civilStatusMtlbCreateRequest.getFourthname()); + civilStatusMtlb.setFifthname(civilStatusMtlbCreateRequest.getFifthname()); + civilStatusMtlb.setMtlbStatus(MtlbStatus.INITIATED); + civilStatusMtlb.setMtlbType(MtlbType.valueOf(civilStatusMtlbCreateRequest.getMtlbType())); + civilStatusMtlb.setBirthdate(civilStatusMtlbCreateRequest.getBirthdate()); + civilStatusMtlb.setGender(civilStatusMtlbCreateRequest.getGender()); + civilStatusMtlb.setFace(civilStatusMtlbCreateRequest.getFace()); + civilStatusMtlb.setFaceMimeType(civilStatusMtlbCreateRequest.getFaceMimeType()); + civilStatusMtlb.setVitalRecordId(civilStatusMtlbCreateRequest.getVitalRecordId()); + civilStatusMtlb.setBirthPlace(civilStatusMtlbCreateRequest.getBirthPlace()); + civilStatusMtlb.setReportedFatherName(civilStatusMtlbCreateRequest.getReportedFatherName()); + civilStatusMtlb.setReportedMotherName(civilStatusMtlbCreateRequest.getReportedMotherName()); + civilStatusMtlb.setFatherId(civilStatusMtlbCreateRequest.getFatherId()); + civilStatusMtlb.setMotherId(civilStatusMtlbCreateRequest.getMotherId()); + civilStatusMtlb.setDeclarantId(civilStatusMtlbCreateRequest.getDeclarantId()); + civilStatusMtlb.setNotes(civilStatusMtlbCreateRequest.getNotes()); + civilStatusMtlb.setMaritalStatus(civilStatusMtlbCreateRequest.getMaritalStatus()); + return civilStatusMtlb; + } + + private IdMtlb idMtlbCreateRequest2IdMtlb(IdMtlbCreateRequest idMtlbCreateRequest) { + IdMtlb idMtlb = new IdMtlb(); + idMtlb.setDraft(idMtlbCreateRequest.isDraft()); + idMtlb.setFace(idMtlbCreateRequest.getFace()); + idMtlb.setFaceMimeType(idMtlbCreateRequest.getFaceMimeType()); + idMtlb.setVitalRecordId(idMtlbCreateRequest.getVitalRecordId()); + idMtlb.setMtlbType(MtlbType.valueOf(idMtlbCreateRequest.getMtlbType())); + return idMtlb; + } + + public ResponseEntity createDigitalizationMtlb(DigitalizationCreateRequest digitalizationCreateRequest) { + CivilStatusMtlb mtlb = new CivilStatusMtlb(); + CivilStatusMtlbAttachment mtlbAttachment = new CivilStatusMtlbAttachment(); + mtlb.setDraft(false); + mtlb.setMtlbStatus(MtlbStatus.NOT_ASSIGNED); + mtlb.setMtlbType(MtlbType.DIGITALIZATION); + Long mtlbId = civilStatusMtlbService.insert(mtlb); + mtlbAttachment.setCivilStatusMtlbId(mtlbId); + mtlbAttachment.setFileName(digitalizationCreateRequest.getFileName()); + mtlbAttachment.setContent(digitalizationCreateRequest.getContent()); + civilStatusMtlbAttachmentService.insert(mtlbAttachment); + return ResponseEntity.ok(mtlbId); + } + + public ResponseEntity attachDigitalizationMtlb(AttachDigitalizationMtlbInput attachDigitalizationMtlbInput) { + CivilStatusMtlb civilStatusMtlb = civilStatusMtlbService + .findById(attachDigitalizationMtlbInput.getCivilStatusMtlbId()); + VitalRecord vr = vitalRecordService.findById(attachDigitalizationMtlbInput.getVitalRecordId()); + Long id = null; + if (civilStatusMtlb != null && vr != null) { + vitalRecord2CivilStatusMtlb(civilStatusMtlb, vr); + civilStatusMtlbService.update(civilStatusMtlb); + id = civilStatusMtlb.getId(); + } + return ResponseEntity.ok(id); + } + + private void vitalRecord2CivilStatusMtlb(CivilStatusMtlb civilStatusMtlb, VitalRecord vr) { + civilStatusMtlb.setFirstname(vr.getFirstname()); + civilStatusMtlb.setSecondname(vr.getSecondname()); + civilStatusMtlb.setThirdname(vr.getThirdname()); + civilStatusMtlb.setFourthname(vr.getFourthname()); + civilStatusMtlb.setFifthname(vr.getFifthname()); + civilStatusMtlb.setBirthdate(vr.getBirthdate()); + civilStatusMtlb.setMtlbStatus(MtlbStatus.READY_FOR_APPROVAL); + civilStatusMtlb.setMtlbType(MtlbType.CIVIL_STATUS_CHANGE); + civilStatusMtlb.setGender(vr.getGender()); + if (vr.getFaceId() != null) { + Face face = faceService.findById(vr.getFaceId()); + civilStatusMtlb.setFace(face.getImage()); + } + civilStatusMtlb.setFaceMimeType("image/png"); + civilStatusMtlb.setBirthTime(vr.getBirthTime()); + civilStatusMtlb.setNotes(vr.getNotes()); + civilStatusMtlb.setReportedFatherName(vr.getReportedFatherName()); + civilStatusMtlb.setFatherId(vr.getFatherId()); + civilStatusMtlb.setMotherId(vr.getMotherId()); + civilStatusMtlb.setReportedMotherName(vr.getReportedMotherName()); + civilStatusMtlb.setVitalRecordId(vr.getId()); + } + + private RvfourBirthMtlb rvFourBirthMtlbCreateRequest2RvfourBirthMtlb( + RvFourBirthMtlbCreateRequest rvFourBirthMtlbCreateRequest) { + RvfourBirthMtlb mtlb = new RvfourBirthMtlb(); + mtlb.setAddress(rvFourBirthMtlbCreateRequest.getAddress()); + mtlb.setBirthdate(rvFourBirthMtlbCreateRequest.getBirthdate()); + mtlb.setBirthDayUnknown(rvFourBirthMtlbCreateRequest.isBirthDayUnknown()); + mtlb.setBirthMonthUnknown(rvFourBirthMtlbCreateRequest.isBirthMonthUnknown()); + mtlb.setBirthPlace(rvFourBirthMtlbCreateRequest.getBirthPlace()); + mtlb.setBirthYearUnknown(rvFourBirthMtlbCreateRequest.isBirthYearUnknown()); + mtlb.setDraft(false); + mtlb.setEmail(rvFourBirthMtlbCreateRequest.getEmail()); + mtlb.setFace(rvFourBirthMtlbCreateRequest.getFace()); + mtlb.setMtlbStatus(MtlbStatus.INITIATED); + mtlb.setTimestamp(rvFourBirthMtlbCreateRequest.getTimestamp()); + mtlb.setMtlbType(MtlbType.valueOf(rvFourBirthMtlbCreateRequest.getType())); + mtlb.setFatherId(rvFourBirthMtlbCreateRequest.getFatherId()); + mtlb.setMotherId(rvFourBirthMtlbCreateRequest.getMotherId()); + mtlb.setReportedFatherName(rvFourBirthMtlbCreateRequest.getReportedFatherName()); + mtlb.setReportedMotherName(rvFourBirthMtlbCreateRequest.getReportedMotherName()); + mtlb.setFirstname(rvFourBirthMtlbCreateRequest.getFirstname()); + mtlb.setSecondname(rvFourBirthMtlbCreateRequest.getSecondname()); + mtlb.setThirdname(rvFourBirthMtlbCreateRequest.getThirdname()); + mtlb.setFourthname(rvFourBirthMtlbCreateRequest.getFourthname()); + mtlb.setFifthname(rvFourBirthMtlbCreateRequest.getFifthname()); + mtlb.setSixthname(rvFourBirthMtlbCreateRequest.getSixthname()); + mtlb.setVitalRecordId(rvFourBirthMtlbCreateRequest.getVitalRecordId()); + if (rvFourBirthMtlbCreateRequest.getBirthtime() != null) + mtlb.setBirthtime(rvFourBirthMtlbCreateRequest.getBirthtime().toLocalTime()); + mtlb.setMultiBirth(rvFourBirthMtlbCreateRequest.isMultiBirth()); + mtlb.setOldAddress(rvFourBirthMtlbCreateRequest.getOldAddress()); + mtlb.setReligion(rvFourBirthMtlbCreateRequest.getReligion()); + mtlb.setOccupation(rvFourBirthMtlbCreateRequest.getOccupation()); + mtlb.setGender(rvFourBirthMtlbCreateRequest.getGender()); + mtlb.setAnnex(rvFourBirthMtlbCreateRequest.getAnnex()); + mtlb.setNumberOfAttachments(rvFourBirthMtlbCreateRequest.getNumberOfAttachments()); + return mtlb; + } + + public ResponseEntity saveRv4BirthMtlbByVitalRecordId(RvFourBirthMtlbCreateRequest rvFourBirthMtlbCreateRequest) { + RvfourBirthMtlb mtlb = rvfourBirthMtlbRepository + .findByVitalRecordId(rvFourBirthMtlbCreateRequest.getVitalRecordId()); + if (mtlb != null && !MtlbType.valueOf(rvFourBirthMtlbCreateRequest.getType()).equals(MtlbType.RV4_VITAL_RECORD_HISTORY)) + return ResponseEntity.ok(mtlb.getId()); + else { + RvfourBirthMtlb newMtlb = rvFourBirthMtlbCreateRequest2RvfourBirthMtlb(rvFourBirthMtlbCreateRequest); + Long id = rvfourBirthMtlbRepository.insert(newMtlb); + return ResponseEntity.ok(id); + } + } + + public ResponseEntity saveRv4DeathMtlbByVitalRecordId(Rv4DeathMtlbCreateRequest rv4DeathMtlbCreateRequest) { + RvfourDeathMtlb mtlb = rvfourDeathMtlbRepository + .findByVitalRecordId(rv4DeathMtlbCreateRequest.getVitalRecordId()); + if (mtlb != null) + return ResponseEntity.ok(mtlb.getId()); + else { + RvfourDeathMtlb newMtlb = rvFourDeathMtlbCreateRequest2RvfourDeathMtlb(rv4DeathMtlbCreateRequest); + return ResponseEntity.ok(rvfourDeathMtlbRepository.insert(newMtlb)); + } + } + + private RvfourDeathMtlb rvFourDeathMtlbCreateRequest2RvfourDeathMtlb( + Rv4DeathMtlbCreateRequest request) { + RvfourDeathMtlb mtlb = new RvfourDeathMtlb(); + mtlb.setAnnex(request.getAnnex()); + mtlb.setDateOfDeath(request.getDateOfDeath()); + mtlb.setDeclarantId(request.getDeclarantId()); + mtlb.setVitalRecordId(request.getVitalRecordId()); + mtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + if (request.getTimeOfDeath() != null) + mtlb.setTimeOfDeath(request.getTimeOfDeath().toLocalTime()); + if (request.getType() != null) + mtlb.setMtlbType(MtlbType.valueOf(request.getType())); + mtlb.setDeathLocation(request.getDeathLocation()); + mtlb.setDeathRecordId(request.getDeathRecordId()); + return mtlb; + } + + public ResponseEntity saveRv4MarraigeMtlbByUnionId(Rv4MarriageMtlbRequest rv4MarriageMtlbRequest) { + RvfourMarriageMtlb mtlb = rvfourMarriageMtlbRepository.findById(rv4MarriageMtlbRequest.getId()); + if (mtlb != null) + return ResponseEntity.ok(mtlb.getId()); + else { + RvfourMarriageMtlb newMtlb = rv4MarriageMtlbRequest2RvfourMarriageMtlb(rv4MarriageMtlbRequest); + return ResponseEntity.ok(rvfourMarriageMtlbRepository.insert(newMtlb)); + } + } + + private RvfourMarriageMtlb rv4MarriageMtlbRequest2RvfourMarriageMtlb( + Rv4MarriageMtlbRequest request) { + RvfourMarriageMtlb mtlb = new RvfourMarriageMtlb(); + mtlb.setAnnex(request.getAnnex()); + mtlb.setDateOfMarriage(request.getDateOfMarriage()); + mtlb.setHusbandId(request.getHusbandId()); + mtlb.setWifeId(request.getWifeId()); + mtlb.setId(request.getId()); + mtlb.setMarriageLocation(request.getMarriageLocation()); + mtlb.setMarriagePlace(request.getPlace()); + mtlb.setMarriageRites(request.getMarriageRites()); + mtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + mtlb.setMtlbType(MtlbType.valueOf(request.getType())); + if (request.getTimeOfMarriage() != null) + mtlb.setTimeOfMarriage(request.getTimeOfMarriage().toLocalTime()); + mtlb.setWitness1Id(request.getWitness1Id()); + mtlb.setWitness2Id(request.getWitness2Id()); + return mtlb; + } + + public ResponseEntity saveRv4DivorceMtlbByUnionId(Rv4DivorceMtlbRequest rv4DivorceMtlbRequest) { + RvfourDivorceMtlb mtlb = new RvfourDivorceMtlb(); + mtlb.setAnnex(rv4DivorceMtlbRequest.getAnnex()); + mtlb.setDateOfEffect(rv4DivorceMtlbRequest.getDateOfEffect()); + mtlb.setDateOfOrder(rv4DivorceMtlbRequest.getDateOfOrder()); + mtlb.setMtlbType(MtlbType.valueOf(rv4DivorceMtlbRequest.getType())); + mtlb.setUnionRecordId(rv4DivorceMtlbRequest.getUnionRecordId()); + mtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + return ResponseEntity.ok(rvfourDivorceMtlbRepository.insert(mtlb)); + } + + public ResponseEntity saveRv4IdCardMtlbByIdCardNumber(Rv4IdCardMtlbRequest rv4IdCardMtlbRequest) { + RvfourIdCardMtlb mtlb = rvfourIdCardMtlbRepository.findByIdCardNumber(rv4IdCardMtlbRequest.getIdCardNumber()); + if (mtlb != null) + return ResponseEntity.ok(mtlb.getId()); + else { + mtlb = new RvfourIdCardMtlb(); + mtlb.setAnnex(rv4IdCardMtlbRequest.getAnnex()); + mtlb.setCancelledDate(rv4IdCardMtlbRequest.getCancelled_date()); + mtlb.setCancelledReason(rv4IdCardMtlbRequest.getCancelled_reason()); + mtlb.setIssuedDate(rv4IdCardMtlbRequest.getIssuedDate()); + mtlb.setExpires(rv4IdCardMtlbRequest.getExpires()); + mtlb.setIdCardNumber(rv4IdCardMtlbRequest.getIdCardNumber()); + mtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + mtlb.setVitalRecordId(rv4IdCardMtlbRequest.getVitalRecordId()); + return ResponseEntity.ok(rvfourIdCardMtlbRepository.insert(mtlb)); + } + } + + public ResponseEntity issueDocument(IssueDocumentInput issueDocumentInput) { + VitalRecord vr = vitalRecordService.findById(issueDocumentInput.getVitalRecordId()); + IdMtlb idMtlb = idMtlbService.findById(issueDocumentInput.getIdMtlbId()); + IssuedDocuments issuedDocument = new IssuedDocuments(); + issuedDocument.setVitalRecordId(issueDocumentInput.getVitalRecordId()); + if (issueDocumentInput.getFace() != null) + issuedDocument.setFace(issueDocumentInput.getFace()); + issuedDocument.setDocumentType(DocumentType.valueOf(issueDocumentInput.getDocumentType())); + String documentId = RandomStringUtils.randomAlphanumeric(12); + issuedDocument.setDocumentId(documentId); + issuedDocument.setIssuedDate(LocalDate.now()); + issuedDocument.setExpires(LocalDate.now().plusYears(EXPIRES_YEARS)); + String fullName=""; + if (!StringUtils.isAllBlank(vr.getFirstname())) + fullName = vr.getFirstname(); + if (!StringUtils.isAllBlank(vr.getSecondname())) + fullName = fullName.concat(" " + vr.getSecondname()); + if (!StringUtils.isAllBlank(vr.getThirdname())) + fullName = fullName.concat(" " + vr.getThirdname()); + if (!StringUtils.isAllBlank(vr.getFourthname())) + fullName = fullName.concat(" " + vr.getFourthname()); + issuedDocument.setFullName(fullName); + /*List oldDocuments = issuedDocumentsRepository.find("vital_record_id='" + issueDocumentInput.getVitalRecordId() + "' ORDER BY id DESC LIMIT 1"); + if (!oldDocuments.isEmpty()) { + IssuedDocuments oldDocument = oldDocuments.get(0); + oldDocument.setCancelledDate(LocalDate.now()); + oldDocument.setCancelledReason("Outdated ID"); + issuedDocumentsRepository.update(oldDocument); + }*/ + List oldDocuments = issuedDocumentsRepository.findByVitalRecordId(issuedDocument.getVitalRecordId()); + for (IssuedDocuments doc: oldDocuments) { + if (doc.getCancelledDate() == null) { + doc.setCancelledDate(LocalDate.now()); + doc.setCancelledReason("Outdated ID"); + issuedDocumentsRepository.update(doc); + } + } + idMtlb.setPrinted(true); + idMtlbService.update(idMtlb); + Long id = issuedDocumentsRepository.insert(issuedDocument); + vr.setCardId(id); + vitalRecordService.update(vr); + return ResponseEntity.ok(documentId); + } + + public ResponseEntity getServiceStatus(GetServiceStatusRequest request) { + GetServiceStatusResponse response = new GetServiceStatusResponse(); + switch (request.getType()) { + case 1 : + CivilStatusMtlb mtlb = civilStatusMtlbService.findById(request.getId()); + if (mtlb != null) + response.setServiceStatus(mtlb.getMtlbStatus().name()); + break; + case 2 : + IdMtlb idMtlb = idMtlbService.findById(request.getId()); + if (idMtlb != null) + response.setServiceStatus(idMtlb.getMtlbStatus().name()); + break; + } + return ResponseEntity.ok(response); + } +} \ No newline at end of file diff --git a/src/main/java/systems/archide/core/service/hooks/CivilRecordInfoServiceLogic.java b/src/main/java/systems/archide/core/service/hooks/CivilRecordInfoServiceLogic.java new file mode 100644 index 0000000..cdbff6e --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/CivilRecordInfoServiceLogic.java @@ -0,0 +1,37 @@ +package systems.archide.core.service.hooks; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.CivilRecordId; +import systems.archide.core.pojo.CivilRecordInfo; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.FaceRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@Component +public class CivilRecordInfoServiceLogic { + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + FaceRepository faceRepository; + + public ResponseEntity read(CivilRecordId civilRecordId) { + VitalRecord vr = vitalRecordRepository.findById(civilRecordId.getId()); + if (vr != null) { + CivilRecordInfo crInfo = new CivilRecordInfo(); + crInfo.setBirthdate(vr.getBirthdate()); + crInfo.setFirstname(vr.getFirstname()); + crInfo.setLastname(vr.getFourthname()); + if (vr.getFaceId() != null) + crInfo.setFace(faceRepository.getImageById(vr.getFaceId())); + ResponseEntity response = ResponseEntity.status(HttpStatus.CREATED).body(crInfo); + return response; + } + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); + } +} diff --git a/src/main/java/systems/archide/core/service/hooks/CivilStatusMtlbDocumentLogic.java b/src/main/java/systems/archide/core/service/hooks/CivilStatusMtlbDocumentLogic.java new file mode 100644 index 0000000..68054f4 --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/CivilStatusMtlbDocumentLogic.java @@ -0,0 +1,256 @@ +package systems.archide.core.service.hooks; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.AdoptiveFathers; +import systems.archide.core.pojo.AdoptiveMothers; +import systems.archide.core.pojo.CivilStatusMtlb; +import systems.archide.core.pojo.CivilStatusMtlbAttachment; +import systems.archide.core.pojo.CivilStatusMtlbDeathNotificationFile; +import systems.archide.core.pojo.CivilStatusMtlbDocument; +import systems.archide.core.pojo.CivilStatusMtlbMedicalNotificationFile; +import systems.archide.core.pojo.DeathRecord; +import systems.archide.core.pojo.DeathRecordAttachment; +import systems.archide.core.pojo.DeathRecordDeathNotificationFile; +import systems.archide.core.pojo.FileStatus; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.VitalRecordAttachment; +import systems.archide.core.pojo.VitalRecordMedicalNotificationFile; +import systems.archide.core.repository.AdoptiveFathersRepository; +import systems.archide.core.repository.AdoptiveMothersRepository; +import systems.archide.core.repository.CivilStatusMtlbAttachmentRepository; +import systems.archide.core.repository.CivilStatusMtlbDeathNotificationFileRepository; +import systems.archide.core.repository.CivilStatusMtlbDocumentRepository; +import systems.archide.core.repository.CivilStatusMtlbMedicalNotificationFileRepository; +import systems.archide.core.repository.DeathRecordAttachmentRepository; +import systems.archide.core.repository.DeathRecordDeathNotificationFileRepository; +import systems.archide.core.repository.DeathRecordRepository; +import systems.archide.core.repository.VitalRecordAttachmentRepository; +import systems.archide.core.repository.VitalRecordMedicalNotificationFileRepository; + +@Component +public class CivilStatusMtlbDocumentLogic { + + @Autowired + CivilStatusMtlbDocumentRepository civilStatusMtlbDocumentRepository; + + @Autowired + CivilStatusMtlbAttachmentRepository civilStatusMtlbAttachmentRepository; + + @Autowired + VitalRecordAttachmentRepository vitalRecordAttachmentRepository; + + @Autowired + VitalRecordMedicalNotificationFileRepository vitalRecordMedicalNotificationFileRepository; + + @Autowired + CivilStatusMtlbMedicalNotificationFileRepository civilStatusMtlbMedicalNotificationFileRepository; + + @Autowired + DeathRecordRepository deathRecordRepository; + + @Autowired + CivilStatusMtlbDeathNotificationFileRepository civilStatusMtlbDeathNotificationFileRepository; + + @Autowired + DeathRecordDeathNotificationFileRepository deathRecordDeathNotificationFileRepository; + + @Autowired + DeathRecordAttachmentRepository deathRecordAttachmentRepository; + + @Autowired + AdoptiveFathersRepository adoptiveFathersRepository; + + @Autowired + AdoptiveMothersRepository adoptiveMothersRepository; + + public Long newDocument(CivilStatusMtlbDocument document) { + CivilStatusMtlb mtlb = new CivilStatusMtlb(); + dto2pojo(document, mtlb); + mtlb.setMtlbStatus(MtlbStatus.INITIATED); + mtlb.setDraft(true); + mtlb.setMtlbType(document.getMtlbType()); + Long id = civilStatusMtlbDocumentRepository.insert(mtlb); + if ((MtlbType.CIVIL_STATUS_CHANGE.equals(mtlb.getMtlbType()) || MtlbType.ADOPTION.equals(mtlb.getMtlbType())) && mtlb.getVitalRecordId() != null) { + List vrAttchmentList = vitalRecordAttachmentRepository.findByVitalRecordId(mtlb.getVitalRecordId()); + for (VitalRecordAttachment a : vrAttchmentList) { + CivilStatusMtlbAttachment attachment = new CivilStatusMtlbAttachment(); + attachment.setCivilStatusMtlbId(id); + attachment.setContent(a.getContent()); + attachment.setDescription(a.getDescription()); + attachment.setFileName(a.getFileName()); + attachment.setFileStatus(FileStatus.DRAFT); + attachment.setPreview(a.getPreview()); + civilStatusMtlbAttachmentRepository.insert(attachment); + } + + List vrMList = vitalRecordMedicalNotificationFileRepository.findByVitalRecordId(mtlb.getVitalRecordId()); + for (VitalRecordMedicalNotificationFile m : vrMList) { + CivilStatusMtlbMedicalNotificationFile attachment = new CivilStatusMtlbMedicalNotificationFile(); + attachment.setCivilStatusMtlbId(id); + attachment.setContent(m.getContent()); + attachment.setDescription(m.getDescription()); + attachment.setFileName(m.getFileName()); + attachment.setFileStatus(FileStatus.DRAFT); + attachment.setPreview(m.getPreview()); + civilStatusMtlbMedicalNotificationFileRepository.insert(attachment); + } + } + if (MtlbType.DEATH_RECORD_CHANGE.equals(mtlb.getMtlbType()) && mtlb.getVitalRecordId() != null) { + addDeathRecordAttachmentsToMtlb(mtlb, mtlb.getVitalRecordId()); + } + return id; + } + + private void addDeathRecordAttachmentsToMtlb(CivilStatusMtlb mtlb, Long vitalRecordId) { + List deathRecordList = deathRecordRepository.findByVitalRecordId(vitalRecordId); + if (!deathRecordList.isEmpty()) { + DeathRecord deathRecord = deathRecordList.get(0); + List drAttchmentList = deathRecordAttachmentRepository.findByDeathRecordId(deathRecord.getId()); + for (DeathRecordAttachment a : drAttchmentList) { + CivilStatusMtlbAttachment attachment = new CivilStatusMtlbAttachment(); + attachment.setCivilStatusMtlbId(mtlb.getId()); + attachment.setContent(a.getContent()); + attachment.setDescription(a.getDescription()); + attachment.setFileName(a.getFileName()); + attachment.setFileStatus(FileStatus.DRAFT); + attachment.setPreview(a.getPreview()); + civilStatusMtlbAttachmentRepository.insert(attachment); + } + + List drDList = deathRecordDeathNotificationFileRepository.findByDeathRecordId(deathRecord.getId()); + if (!drDList.isEmpty()) + mtlb.setDeathNotification(true); + for (DeathRecordDeathNotificationFile m : drDList) { + CivilStatusMtlbDeathNotificationFile attachment = new CivilStatusMtlbDeathNotificationFile(); + attachment.setCivilStatusMtlbId(mtlb.getId()); + attachment.setContent(m.getContent()); + attachment.setDescription(m.getDescription()); + attachment.setFileName(m.getFileName()); + attachment.setFileStatus(FileStatus.DRAFT); + attachment.setPreview(m.getPreview()); + civilStatusMtlbDeathNotificationFileRepository.insert(attachment); + } + + } + } + + public Long editDocument(CivilStatusMtlbDocument document) { + CivilStatusMtlb mtlb = civilStatusMtlbDocumentRepository.findById(document.getId()); + mtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + dto2pojo(document, mtlb); + civilStatusMtlbDocumentRepository.update(mtlb); + return mtlb.getId(); + } + + private void dto2pojo(CivilStatusMtlbDocument document, CivilStatusMtlb mtlb) { + mtlb.setUnknownFather(document.isUnknownFather()); + mtlb.setUnknownMother(document.isUnknownMother()); + mtlb.setBirthDayUnknown(document.isBirthDayUnknown()); + mtlb.setBirthCountry(document.getBirthCountry()); + mtlb.setBirthMonthUnknown(document.isBirthMonthUnknown()); + mtlb.setBirthPlace(document.getBirthPlace()); + mtlb.setBirthTime(document.getBirthTime()); + mtlb.setBirthTimeUnknown(document.isBirthTimeUnknown()); + mtlb.setBirthYearUnknown(document.isBirthYearUnknown()); + mtlb.setBirthdate(document.getBirthdate()); + mtlb.setDateOfDeath(document.getDateOfDeath()); + mtlb.setDeathDayUnknown(document.isDeathDayUnknown()); + mtlb.setDeathMonthUnknown(document.isDeathMonthUnknown()); + mtlb.setDeathTimeUnknown(document.isDeathTimeUnknown()); + mtlb.setBook(document.getBook()); + mtlb.setDeathYearUnknown(document.isDeathYearUnknown()); + mtlb.setDeclarantId(document.getDeclarantId()); + mtlb.setDeduplicationMtlbId(document.getDeduplicationMtlbId()); + mtlb.setDisability(document.isDisability()); + mtlb.setDonor(document.isDonor()); + mtlb.setDonorNotes(document.getDonorNotes()); + mtlb.setDraft(document.isDraft()); + mtlb.setFace(document.getFace()); + mtlb.setFaceMimeType(document.getFaceMimeType()); + mtlb.setFatherId(document.getFatherId()); + mtlb.setFifthname(document.getFifthname()); + mtlb.setFingersMimeType(document.getFingersMimeType()); + mtlb.setFirstname(document.getFirstname()); + mtlb.setFourthname(document.getFourthname()); + mtlb.setGender(document.getGender()); + mtlb.setLeftIndexFinger(document.getLeftIndexFinger()); + mtlb.setLeftMiddleFinger(document.getLeftMiddleFinger()); + mtlb.setLeftPinky(document.getLeftPinky()); + mtlb.setLeftRingFinger(document.getLeftRingFinger()); + mtlb.setLeftThumb(document.getLeftThumb()); + mtlb.setMaritalStatus(document.getMaritalStatus()); + mtlb.setMedicalNotification(document.isMedicalNotification()); + mtlb.setMotherId(document.getMotherId()); + mtlb.setMtlbStatusData(document.getMtlbStatusData()); + mtlb.setMtlbType(document.getMtlbType()); + mtlb.setNotes(document.getNotes()); + mtlb.setNumberOfAttachments(document.getNumberOfAttachments()); + mtlb.setOtherCitizenshipCsv(document.getOtherCitizenshipCsv()); + mtlb.setPage(document.getPage()); + mtlb.setPrimaryCitizenship(document.getPrimaryCitizenship()); + mtlb.setReportedFatherName(document.getReportedFatherName()); + mtlb.setReportedId(document.getReportedId()); + mtlb.setReportedLegacyId(document.getReportedLegacyId()); + mtlb.setReportedMotherName(document.getReportedMotherName()); + mtlb.setRightIndexFinger(document.getRightIndexFinger()); + mtlb.setRightMiddleFinger(document.getRightMiddleFinger()); + mtlb.setRightPinky(document.getRightPinky()); + mtlb.setRightRingFinger(document.getRightRingFinger()); + mtlb.setRightThumb(document.getRightThumb()); + mtlb.setSecondname(document.getSecondname()); + mtlb.setSignature(document.getSignature()); + mtlb.setSignatureMimeType(document.getSignatureMimeType()); + mtlb.setSixthname(document.getSixthname()); + mtlb.setThirdname(document.getThirdname()); + mtlb.setTimeOfDeath(document.getTimeOfDeath()); + mtlb.setTouched(document.getTouched()); + mtlb.setUploaded(document.isUploaded()); + mtlb.setUuid(document.getUuid()); + mtlb.setVitalRecordId(document.getVitalRecordId()); + mtlb.setWitness1Id(document.getWitness1Id()); + mtlb.setWitness2Id(document.getWitness2Id()); + mtlb.setYear(document.getYear()); + mtlb.setAfisId(document.getAfisId()); + mtlb.setTimeOfDeath(document.getTimeOfDeath()); + mtlb.setDeathPlace(document.getDeathPlace()); + mtlb.setTypeOfAcquisition(document.getTypeOfAcquisition()); + mtlb.setVillageOfOrigin(document.getVillageOfOrigin()); + mtlb.setBurialPlace(document.getBurialPlace()); + mtlb.setDeathNotification(document.isDeathNotification()); + mtlb.setAdoptiveFatherId(document.getAdoptiveFatherId()); + mtlb.setAdoptiveMotherId(document.getAdoptiveMotherId()); + mtlb.setVillageOfOriginAdoptive(document.getVillageOfOriginAdoptive()); + mtlb.setMarriageCertificateNumberAdoptive(document.getMarriageCertificateNumberAdoptive()); + mtlb.setCourtAdoptionNumber(document.getCourtAdoptionNumber()); + mtlb.setRegistrationLocation(document.getRegistrationLocation()); + mtlb.setMentions(document.getMentions()); + if (MtlbType.ADOPTION.equals(document.getMtlbType())) { + mtlb.setFatherEndAdoptionDate(document.getFatherEndAdoptionDate()); + mtlb.setMotherEndAdoptionDate(document.getMotherEndAdoptionDate()); + if (document.getAdoptiveFatherId() != null) { + AdoptiveFathers newAdoptiveFather = new AdoptiveFathers(); + newAdoptiveFather.setChildId(document.getVitalRecordId()); + newAdoptiveFather.setCivilStatusMtlbId(document.getId()); + newAdoptiveFather.setCourtAdoptionNumber(document.getCourtAdoptionNumber()); + newAdoptiveFather.setFatherAdoptionDate(document.getFatherAdoptionDate()); + newAdoptiveFather.setVitalRecordId(document.getAdoptiveFatherId()); + adoptiveFathersRepository.insert(newAdoptiveFather); + } + if (document.getAdoptiveMotherId() != null) { + AdoptiveMothers newAdoptiveMother = new AdoptiveMothers(); + newAdoptiveMother.setChildId(document.getVitalRecordId()); + newAdoptiveMother.setCivilStatusMtlbId(document.getId()); + newAdoptiveMother.setCourtAdoptionNumber(document.getCourtAdoptionNumber()); + newAdoptiveMother.setMotherAdoptionDate(document.getMotherAdoptionDate()); + newAdoptiveMother.setVitalRecordId(document.getAdoptiveMotherId()); + adoptiveMothersRepository.insert(newAdoptiveMother); + } + } + } + +} diff --git a/src/main/java/systems/archide/core/service/hooks/GeoDataServiceLogic.java b/src/main/java/systems/archide/core/service/hooks/GeoDataServiceLogic.java new file mode 100644 index 0000000..3ebd6fb --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/GeoDataServiceLogic.java @@ -0,0 +1,35 @@ +package systems.archide.core.service.hooks; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.GeoData; +import systems.archide.core.pojo.GeoDataCreateRequest; +import systems.archide.core.pojo.Locations; +import systems.archide.core.repository.GeoDataRepository; +import systems.archide.core.repository.LocationsRepository; + +@Component +public class GeoDataServiceLogic { + + @Autowired + GeoDataRepository service; + + public ResponseEntity saveByAreaId(GeoDataCreateRequest geoData) { + GeoData location = service.findByAreaId(geoData.getAreaId()); + if (location != null) + return ResponseEntity.ok(location.getId()); + else { + GeoData newLocation = new GeoData(); + newLocation.setId(geoData.getId()); + newLocation.setAreaId(geoData.getAreaId()); + newLocation.setParentId(geoData.getParentId()); + newLocation.setName(geoData.getName()); + newLocation.setType(geoData.getType()); + newLocation.setDisabled(false); + return ResponseEntity.ok(service.insert(newLocation)); + } + } + +} diff --git a/src/main/java/systems/archide/core/service/hooks/GlobalStateLogic.java b/src/main/java/systems/archide/core/service/hooks/GlobalStateLogic.java new file mode 100644 index 0000000..04ecae3 --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/GlobalStateLogic.java @@ -0,0 +1,30 @@ +package systems.archide.core.service.hooks; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.GetGlobalStateRequest; +import systems.archide.core.pojo.GlobalState; +import systems.archide.core.pojo.SetGlobalStateRequest; +import systems.archide.core.repository.GlobalStateRepository; + +@Component +public class GlobalStateLogic { + + @Autowired + private GlobalStateRepository service; + + public ResponseEntity set(SetGlobalStateRequest setGlobalStateRequest) { + GlobalState globalState = new GlobalState(); + globalState.setKey(setGlobalStateRequest.getKey()); + globalState.setValue(setGlobalStateRequest.getValue()); + service.save(globalState); + return ResponseEntity.ok(globalState.getKey()); + } + + public ResponseEntity get(GetGlobalStateRequest getGlobalStateRequest) { + return ResponseEntity.ok(service.getValueByKey(getGlobalStateRequest.getKey())); + } + +} diff --git a/src/main/java/systems/archide/core/service/hooks/GlobalStateSecurityBusinessRules.java b/src/main/java/systems/archide/core/service/hooks/GlobalStateSecurityBusinessRules.java new file mode 100644 index 0000000..1d97d3e --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/GlobalStateSecurityBusinessRules.java @@ -0,0 +1,49 @@ +package systems.archide.core.service.hooks; + +import java.util.HashSet; + +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; + +import com.cocentris.spring.rest.security.SpringRestSecurityUtil; + +import systems.archide.core.RestEndpoints; +import systems.archide.core.pojo.GetGlobalStateRequest; +import systems.archide.core.pojo.SetGlobalStateRequest; + +@Component +public class GlobalStateSecurityBusinessRules { + + public boolean set(SetGlobalStateRequest setGlobalStateRequest, Authentication authentication) { + HashSet roles = null; + try { + roles = SpringRestSecurityUtil.getUserRoles(authentication); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (roles == null) + return false; + + if (roles.contains(RestEndpoints.RV4_MIGRATION_TOOL) && "migration".equals(setGlobalStateRequest.getKey())) + return true; + + return false; + } + + public boolean get(GetGlobalStateRequest getGlobalStateRequest, Authentication authentication) { + HashSet roles = null; + try { + roles = SpringRestSecurityUtil.getUserRoles(authentication); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (roles == null) + return false; + + if (roles.contains(RestEndpoints.RV4_MIGRATION_TOOL) && "migration".equals(getGlobalStateRequest.getKey())) + return true; + + return false; + } + +} diff --git a/src/main/java/systems/archide/core/service/hooks/IdMtlbDocumentLogic.java b/src/main/java/systems/archide/core/service/hooks/IdMtlbDocumentLogic.java new file mode 100644 index 0000000..6774f68 --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/IdMtlbDocumentLogic.java @@ -0,0 +1,44 @@ +package systems.archide.core.service.hooks; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.IdMtlb; +import systems.archide.core.pojo.IdMtlbDocument; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.repository.IdMtlbRepository; + +@Component +public class IdMtlbDocumentLogic { + + @Autowired + private IdMtlbRepository idMtlbService; + + public Long newDocument(IdMtlbDocument document) { + IdMtlb idMtlb = new IdMtlb(); + idMtlbCreateRequest2IdMtlb(document, idMtlb); + idMtlb.setMtlbStatus(MtlbStatus.INITIATED); + idMtlb.setPrinted(false); + return idMtlbService.insert(idMtlb); + } + + private IdMtlb idMtlbCreateRequest2IdMtlb(IdMtlbDocument document, IdMtlb idMtlb) { + idMtlb.setDraft(document.isDraft()); + idMtlb.setFace(document.getFace()); + idMtlb.setFaceMimeType(document.getFaceMimeType()); + idMtlb.setVitalRecordId(document.getVitalRecordId()); + idMtlb.setMtlbType(document.getMtlbType()); + return idMtlb; + } + + public Long editDocument(IdMtlbDocument document) { + IdMtlb idMtlb = idMtlbService.findById(document.getId()); + System.out.println(idMtlb); + System.out.println(idMtlb.isPrinted()); + idMtlbCreateRequest2IdMtlb(document, idMtlb); + idMtlb.setDraft(false); + idMtlbService.update(idMtlb); + return idMtlb.getId(); + } + +} diff --git a/src/main/java/systems/archide/core/service/hooks/Rv4BirthMtlbAttachmentLogic.java b/src/main/java/systems/archide/core/service/hooks/Rv4BirthMtlbAttachmentLogic.java new file mode 100644 index 0000000..9540c8b --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/Rv4BirthMtlbAttachmentLogic.java @@ -0,0 +1,44 @@ +package systems.archide.core.service.hooks; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.Rv4BirthMtlbAttachment; +import systems.archide.core.pojo.RvfourBirthMtlbAttachment; +import systems.archide.core.repository.RvfourBirthMtlbAttachmentRepository; + +@Component +public class Rv4BirthMtlbAttachmentLogic { + + @Autowired + RvfourBirthMtlbAttachmentRepository rvfourBirthMtlbAttachmentRepository; + + public Long create(Rv4BirthMtlbAttachment rv4BirthMtlbAttachment) { + RvfourBirthMtlbAttachment attachment = new RvfourBirthMtlbAttachment(); + attachment.setContent(rv4BirthMtlbAttachment.getContent()); + attachment.setFileName(rv4BirthMtlbAttachment.getFileName()); + attachment.setRvfourBirthMtlbId(rv4BirthMtlbAttachment.getRv4MtlbId()); + return rvfourBirthMtlbAttachmentRepository.insert(attachment); + } + + public ResponseEntity saveByRv4MtlbId(Rv4BirthMtlbAttachment rv4BirthMtlbAttachment) { + RvfourBirthMtlbAttachment newAttachment = new RvfourBirthMtlbAttachment(); + newAttachment.setContent(rv4BirthMtlbAttachment.getContent()); + newAttachment.setFileName(rv4BirthMtlbAttachment.getFileName()); + newAttachment.setRvfourBirthMtlbId(rv4BirthMtlbAttachment.getRv4MtlbId()); + newAttachment.setDescription(rv4BirthMtlbAttachment.getDescription()); + newAttachment.setPreview(rv4BirthMtlbAttachment.getPreview()); + List attachmentList = rvfourBirthMtlbAttachmentRepository.findByFileName(rv4BirthMtlbAttachment.getFileName()); + for (RvfourBirthMtlbAttachment attachment: attachmentList) { + if (rv4BirthMtlbAttachment.getRv4MtlbId() == attachment.getRvfourBirthMtlbId()) { + newAttachment.setId(attachment.getId()); + rvfourBirthMtlbAttachmentRepository.save(newAttachment); + return ResponseEntity.ok(newAttachment.getId()); + } + } + return ResponseEntity.ok(rvfourBirthMtlbAttachmentRepository.insert(newAttachment)); + } +} diff --git a/src/main/java/systems/archide/core/service/hooks/UnionMtlbDocumentLogic.java b/src/main/java/systems/archide/core/service/hooks/UnionMtlbDocumentLogic.java new file mode 100644 index 0000000..2215a15 --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/UnionMtlbDocumentLogic.java @@ -0,0 +1,147 @@ +package systems.archide.core.service.hooks; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.UnionMtlb; +import systems.archide.core.pojo.UnionMtlbAttachment; +import systems.archide.core.pojo.UnionMtlbDocument; +import systems.archide.core.pojo.UnionRecordAttachment; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.UnionMtlbAttachmentRepository; +import systems.archide.core.repository.UnionMtlbDocumentRepository; +import systems.archide.core.repository.UnionMtlbRepository; +import systems.archide.core.repository.UnionRecordAttachmentRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@Component +public class UnionMtlbDocumentLogic { + + @Autowired + UnionMtlbDocumentRepository service; + + @Autowired + private VitalRecordRepository vitalRecordService; + + @Autowired + UnionRecordAttachmentRepository unionRecordAttachmentRepository; + + @Autowired + UnionMtlbAttachmentRepository unionMtlbAttachmentRepository; + + public Long newDocument(UnionMtlbDocument document) { + UnionMtlb uMtlb = new UnionMtlb(); + if (MtlbType.UNION_RECORD_CHANGE.equals(document.getMtlbType()) && document.getUnionRecordId() != null) + dto2pojo(uMtlb, document); + uMtlb.setMtlbStatus(MtlbStatus.INITIATED); + uMtlb.setUnionRecordId(document.getUnionRecordId()); + uMtlb.setMtlbType(document.getMtlbType()); + uMtlb.setDraft(true); + Long id = service.insert(uMtlb); + if (MtlbType.UNION_RECORD_CHANGE.equals(document.getMtlbType()) && document.getUnionRecordId() != null) + addAttachments(id, document.getUnionRecordId()); + return id; + } + + private void addAttachments(Long mtlbId, Long unionRecordId) { + List uaList = unionRecordAttachmentRepository.findByUnionRecordId(unionRecordId); + for (UnionRecordAttachment ua: uaList) { + UnionMtlbAttachment a = new UnionMtlbAttachment(); + a.setContent(ua.getContent()); + a.setDescription(ua.getDescription()); + a.setFileName(ua.getFileName()); + a.setPreview(ua.getPreview()); + a.setUnionMtlbId(mtlbId); + unionMtlbAttachmentRepository.insert(a); + } + } + + public Long editDocument(UnionMtlbDocument document) { + UnionMtlb uMtlb = service.findById(document.getId()); + dto2pojo(uMtlb, document); + uMtlb.setDraft(false); + uMtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + uMtlb.setId(document.getId()); + service.update(uMtlb); + return uMtlb.getId(); + } + + private void dto2pojo(UnionMtlb uMtlb, UnionMtlbDocument document) { + uMtlb.setAddress(document.getAddress()); + uMtlb.setDeclaredDate(document.getDeclaredDate()); + uMtlb.setMtlbStatusData(document.getMtlbStatusData()); + uMtlb.setMtlbType(document.getMtlbType()); + uMtlb.setNotes(document.getNotes()); + uMtlb.setPartner1BirthPlace(document.getPartner1BirthPlace()); + uMtlb.setPartner1FatherId(document.getPartner1FatherId()); + uMtlb.setPartner1FatherName(document.getPartner1FatherName()); + uMtlb.setPartner1Firstname(document.getPartner1Firstname()); + uMtlb.setPartner1IndividualMelanesianName(document.getPartner1IndividualMelanesianName()); + uMtlb.setPartner1MaritalStatus(document.getPartner1MaritalStatus()); + uMtlb.setPartner1MotherId(document.getPartner1MotherId()); + uMtlb.setPartner1MotherName(document.getPartner1MotherName()); + uMtlb.setPartner1Occupation(document.getPartner1Occupation()); + uMtlb.setPartner1ResidenceAddress(document.getPartner1ResidenceAddress()); + uMtlb.setPartner1Surname(document.getPartner1Surname()); + uMtlb.setPartner1VitalRecordId(document.getPartner1VitalRecordId()); + uMtlb.setPartner2BirthPlace(document.getPartner2BirthPlace()); + uMtlb.setPartner2FatherId(document.getPartner2FatherId()); + uMtlb.setPartner2FatherName(document.getPartner2FatherName()); + uMtlb.setPartner2Firstname(document.getPartner2Firstname()); + uMtlb.setPartner2IndividualMelanesianName(document.getPartner2IndividualMelanesianName()); + uMtlb.setPartner2MaritalStatus(document.getPartner2MaritalStatus()); + uMtlb.setPartner2MotherId(document.getPartner2MotherId()); + uMtlb.setPartner2MotherName(document.getPartner2MotherName()); + uMtlb.setPartner2Occupation(document.getPartner2Occupation()); + uMtlb.setPartner2ResidenceAddress(document.getPartner2ResidenceAddress()); + uMtlb.setPartner2Surname(document.getPartner2Surname()); + uMtlb.setPartner2VitalRecordId(document.getPartner2VitalRecordId()); + uMtlb.setPlace(document.getPlace()); + uMtlb.setRites(document.getRites()); + uMtlb.setUnionRegime(document.getUnionRegime()); + uMtlb.setWitness1BirthPlace(document.getWitness1BirthPlace()); + uMtlb.setWitness1Firstname(document.getWitness1Firstname()); + uMtlb.setWitness1Occupation(document.getWitness1Occupation()); + uMtlb.setWitness1ResidenceAddress(document.getWitness1ResidenceAddress()); + uMtlb.setWitness1Surname(document.getWitness1Surname()); + uMtlb.setWitness1VitalRecordId(document.getWitness1VitalRecordId()); + uMtlb.setWitness2BirthPlace(document.getWitness2BirthPlace()); + uMtlb.setWitness2Firstname(document.getWitness2Firstname()); + uMtlb.setWitness2Occupation(document.getWitness2Occupation()); + uMtlb.setWitness2ResidenceAddress(document.getWitness2ResidenceAddress()); + uMtlb.setWitness2Surname(document.getWitness2Surname()); + uMtlb.setWitness2VitalRecordId(document.getWitness2VitalRecordId()); + uMtlb.setTimeOfMarriage(document.getTimeOfMarriage()); + uMtlb.setDateOfOrder(document.getDateOfOrder()); + uMtlb.setDateOfEffect(document.getDateOfEffect()); + uMtlb.setAnnullmentOrder(document.getAnnullmentOrder()); + uMtlb.setUnionRecordId(document.getUnionRecordId()); + uMtlb.setCelebrant(document.getCelebrant()); + uMtlb.setPosition(document.getPosition()); + uMtlb.setOfficer(document.getOfficer()); + uMtlb.setCelebrantId(document.getCelebrantId()); + uMtlb.setDeclarantId(document.getDeclarantId()); + uMtlb.setOfficerId(document.getOfficerId()); + uMtlb.setRegistrationLocation(document.getRegistrationLocation()); + uMtlb.setMentions(document.getMentions()); + if (document.getPartner1VitalRecordId() != null) { + VitalRecord partner1 = vitalRecordService.findById(document.getPartner1VitalRecordId()); + if (partner1 != null) { + uMtlb.setPartner1Firstname(partner1.getFirstname()); + uMtlb.setPartner1Surname(partner1.getFourthname()); + } + } + if (document.getPartner2VitalRecordId() != null) { + VitalRecord partner2 = vitalRecordService.findById(document.getPartner2VitalRecordId()); + if (partner2 != null) { + uMtlb.setPartner2Firstname(partner2.getFirstname()); + uMtlb.setPartner2Surname(partner2.getFourthname()); + } + } + } + +} diff --git a/src/main/java/systems/archide/core/service/hooks/VanElectServiceLogic.java b/src/main/java/systems/archide/core/service/hooks/VanElectServiceLogic.java new file mode 100644 index 0000000..882710a --- /dev/null +++ b/src/main/java/systems/archide/core/service/hooks/VanElectServiceLogic.java @@ -0,0 +1,187 @@ +package systems.archide.core.service.hooks; + +import java.time.LocalDate; +import java.time.Period; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import org.bouncycastle.asn1.ocsp.ResponderID; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.http.ResponseEntity.BodyBuilder; +import org.springframework.stereotype.Component; + +import systems.archide.core.controller.search.VitalRecordOrderBy; +import systems.archide.core.pojo.AddAddressRequest; +import systems.archide.core.pojo.Address; +import systems.archide.core.pojo.CountVoterInBatchRequest; +import systems.archide.core.pojo.DeathRecord; +import systems.archide.core.pojo.DocumentType; +import systems.archide.core.pojo.Face; +import systems.archide.core.pojo.GetVoterListRequest; +import systems.archide.core.pojo.ImportVoterRequest; +import systems.archide.core.pojo.ImportVoterResponse; +import systems.archide.core.pojo.IssuedDocuments; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.pojo.VitalRecordHistory; +import systems.archide.core.pojo.VoterRecord; +import systems.archide.core.repository.AddressRepository; +import systems.archide.core.repository.DeathRecordRepository; +import systems.archide.core.repository.FaceRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.IssuedDocumentsRepository; +import systems.archide.core.repository.VitalRecordHistoryRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@Component +public class VanElectServiceLogic { + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + DeathRecordRepository deathRecordRepository; + + @Autowired + IssuedDocumentsRepository issuedDocumentsRepository; + + @Autowired + FaceRepository faceRepository; + + @Autowired + AddressRepository addressRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Autowired + VitalRecordHistoryRepository vitalRecordHistoryRepository; + + public ResponseEntity> getVoterRecordList(GetVoterListRequest getVoterListRequest) { + List voterRecordList = new ArrayList<>(); + HttpHeaders metadata = new HttpHeaders(); + ResponseEntity> response = null; + long maxId = queries.getMaxVitalRecordId(); + List vitalRecordList = queries.getVoterList(getVoterListRequest.getCutOffDate(), + getVoterListRequest.getCutOffAgeDate().toLocalDate(), getVoterListRequest.getMin(), + getVoterListRequest.getMax()); + List vitalRecordHistoryList = queries.getVoterListFromHistory(getVoterListRequest.getCutOffDate(), + getVoterListRequest.getCutOffAgeDate().toLocalDate(), getVoterListRequest.getMin(), + getVoterListRequest.getMax(), getVoterListRequest.getCutOffDate()); + for (VitalRecord vr : vitalRecordList) { + VoterRecord voter = getValideVoter(vr, getVoterListRequest); + if (voter != null) + voterRecordList.add(voter); + } + for (VitalRecord vr : vitalRecordHistoryList) { + VoterRecord voter = getValideVoter(vr, getVoterListRequest); + if (voter != null) + voterRecordList.add(voter); + } + if (maxId < getVoterListRequest.getMax()) + metadata.add("status", "DONE"); + else + metadata.add("status", "CONTINUE"); + response = ResponseEntity.status(HttpStatus.CREATED).headers(metadata).body(voterRecordList); + return response; + } + + private VoterRecord getValideVoter(VitalRecord vr, GetVoterListRequest getVoterListRequest) { + List drList = deathRecordRepository.findByVitalRecordId(vr.getId()); + if (!drList.isEmpty()) + return null; + List issuedDocumentList = issuedDocumentsRepository.findByVitalRecordId(vr.getId()); + for (IssuedDocuments issuedDocument : issuedDocumentList) { + if (DocumentType.ID_CARD.equals(issuedDocument.getDocumentType()) && "191".equals(vr.getPrimaryCitizenship())) { + VoterRecord voter = new VoterRecord(); + voter.setFirstname(vr.getFirstname()); + voter.setSecondname(vr.getSecondname()); + voter.setThirdname(vr.getThirdname()); + voter.setFourthname(vr.getFourthname()); + voter.setIdCard(issuedDocument.getDocumentId()); + voter.setId(vr.getId()); + voter.setBirthdate(vr.getBirthdate()); + if (vr.getFaceId() != null) { + Face face = faceRepository.findById(vr.getFaceId()); + voter.setFace(face.getImage()); + } + List
vrAdresses = addressRepository.findByVitalRecordId(vr.getId()); + String lastAddress = null; + if (!vrAdresses.isEmpty()) + lastAddress = vrAdresses.get(vrAdresses.size() - 1).getAreaId(); + voter.setAddress(lastAddress); + if (getVoterListRequest.getGeography() != null) { + if (lastAddress != null) + if (lastAddress.startsWith(getVoterListRequest.getGeography())) + return voter; + } + else + return voter; + return null; + } + } + return null; + } + + public ResponseEntity getMaxId() { + return ResponseEntity.ok(queries.getMaxVitalRecordId()); + } + + public ResponseEntity countVotersInBatch(CountVoterInBatchRequest request) { + HashSet votersInBatch = new HashSet<>(); + List mainNumberOfVoters = queries.getMainIdListInBatch(request.getCutOffDate(), request.getCutOffAgeDate().toLocalDate(), + request.getMin(), request.getMax()); + List historyNumberOfVoters = queries.getHistoryIdListInBatch(request.getCutOffDate(), request.getCutOffAgeDate().toLocalDate(), + request.getMin(), request.getMax(), request.getCutOffDate()); + for (Long id: mainNumberOfVoters) + votersInBatch.add(id); + for (Long hId: historyNumberOfVoters) + votersInBatch.add(hId); + return ResponseEntity.ok((long) votersInBatch.size()); + } + + public ResponseEntity addAddress(AddAddressRequest addAddressRequest) { + VitalRecord vr = vitalRecordRepository.findById(addAddressRequest.getVitalRecordId()); + if (vr != null) { + Address address = new Address(); + address.setAreaId(addAddressRequest.getAddress()); + address.setVitalRecordId(vr.getId()); + addressRepository.insert(address); + return ResponseEntity.ok(vr.getId()); + } + return ResponseEntity.notFound().build(); + } + + public ResponseEntity importVoter(ImportVoterRequest importVoterRequest) { + VitalRecord vr = vitalRecordRepository.findById(importVoterRequest.getVitalRecordId()); + if (vr != null) { + ImportVoterResponse v = new ImportVoterResponse(); + v.setBirthdate(vr.getBirthdate()); + v.setFirstname(vr.getFirstname()); + v.setFourthname(vr.getFourthname()); + v.setSecondname(vr.getSecondname()); + v.setThirdname(vr.getThirdname()); + v.setId(vr.getId()); + if (vr.getFaceId() != null) { + Face face = faceRepository.findById(vr.getFaceId()); + v.setFace(face.getImage()); + } + List
vrAdresses = addressRepository.findByVitalRecordId(vr.getId()); + List issuedDocumentList = issuedDocumentsRepository.findByVitalRecordId(vr.getId()); + for (IssuedDocuments issuedDocument : issuedDocumentList) { + if (DocumentType.ID_CARD.equals(issuedDocument.getDocumentType())) + v.setIdCard(issuedDocument.getDocumentId()); + } + String lastAddress = null; + if (!vrAdresses.isEmpty()) + lastAddress = vrAdresses.get(vrAdresses.size() - 1).getAreaId(); + v.setAddress(lastAddress); + return ResponseEntity.ok(v); + } + return ResponseEntity.notFound().build(); + } +} diff --git a/src/main/java/systems/archide/core/workflows/JobMtlbSubmitted.java b/src/main/java/systems/archide/core/workflows/JobMtlbSubmitted.java new file mode 100644 index 0000000..5b627e4 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/JobMtlbSubmitted.java @@ -0,0 +1,209 @@ +package systems.archide.core.workflows; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import systems.archide.core.pojo.DocumentType; +import systems.archide.core.pojo.GeneralStatistics; +import systems.archide.core.pojo.GeoData; +import systems.archide.core.pojo.IssuedDocumentsDto; +import systems.archide.core.pojo.JobMtlb; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.ProvinceGeneralStatistics; +import systems.archide.core.pojo.VitalRecordDto; +import systems.archide.core.repository.GeoDataRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.IssuedDocumentsRepository; +import systems.archide.core.repository.JobMtlbRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@Component +public class JobMtlbSubmitted { + + private static final Logger log = LoggerFactory.getLogger(JobMtlbSubmitted.class); + + private static final Short MALE = 1; + private static final Short FEMALE = 2; + + @Autowired + JobMtlbRepository jobMtlbRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Autowired + GeoDataRepository geoDataRepository; + + @Autowired + IssuedDocumentsRepository issuedDocumentsRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Scheduled(fixedDelay = 5000) + public void fromSubmittedMtlb() { + List mtlbList = jobMtlbRepository.findByMtlbStatus(MtlbStatus.SUBMITTED); + for (JobMtlb mtlb : mtlbList) { + switch (mtlb.getMtlbType()) { + case GENERAL_STATISTICS: + mtlb.setMtlbStatus(MtlbStatus.PROCESSING); + jobMtlbRepository.update(mtlb); + processGeneralStatisticsMtlb(mtlb); + break; + default: + break; + } + } + } + + private void processGeneralStatisticsMtlb(JobMtlb mtlb) { + GeneralStatistics generalStatistics = new GeneralStatistics(); + IssuedDocumentsDto filter = new IssuedDocumentsDto(); + filter.addDocumentType(DocumentType.ID_CARD); + Long issuedIdCardsNumber = issuedDocumentsRepository.countSearchByDocumentType(filter, null, null, null, null, true); + + Long notExpiredIdCardsNumber = queries.getNotExpiredIdCardNumber(); + Long notCancelledIdCardsNumber = queries.getNotCancelledIdCardNumber(); + Long activatedIdCardsNumber = queries.getActiveIdCardNumber(); + Long distinctIndividualsIdCardsNumber = queries.getDistinctVitalRecordIdCardsNumber(); + VitalRecordDto recordFilter = new VitalRecordDto(); + recordFilter.addInactive(false); + Long authorizedBirthRecordsNumber = vitalRecordRepository.count(); + Long livingAuthorizedBirthRecordsNumber = queries.getLivingVitalRecordNumber(); + Long livingFemalesAged18To29Number = queries.getLivingVitalRecordByGenderAndAgeRange(FEMALE, 18, 29); + Long livingMalesAged18To29Number = queries.getLivingVitalRecordByGenderAndAgeRange(MALE, 18, 29); + Long livingMalesAgedUnder18Number = queries.getLivingVitalRecordByGenderAndAgeRange(MALE, 0, 17); + Long livingFemalesAgedUnder18Number = queries.getLivingVitalRecordByGenderAndAgeRange(FEMALE, 0, 17); + Long livingMalesAged30To49Number = queries.getLivingVitalRecordByGenderAndAgeRange(MALE, 30, 49); + Long livingFemalesAged30To49Number = queries.getLivingVitalRecordByGenderAndAgeRange(FEMALE, 30, 49); + Long livingMalesAgedOver49Number = queries.getLivingVitalRecordByGenderAndAgeRange(MALE, 50, 120); + Long livingFemalesAgedOver49Number = queries.getLivingVitalRecordByGenderAndAgeRange(FEMALE, 50, 120); + Long livingPeopleWithCardsNumber = queries.getLivingVitalRecordIdCardsNumber(); + Long livingFemalesAgedUnder18WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(FEMALE, 0, 17); + Long livingMalesAgedUnder18WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(MALE, 0, 17); + Long livingFemalesAged18To29WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(FEMALE, 18, 29); + Long livingMalesAged18To29WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(MALE, 18, 29); + Long livingFemalesAged30To49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(FEMALE, 30, 49); + Long livingMalesAged30To49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(MALE, 30, 49); + Long livingFemalesAgedOver49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(FEMALE, 50, 120); + Long livingMalesAgedOver49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRange(MALE, 50, 120); + generalStatistics.setIssuedIdCardsNumber(issuedIdCardsNumber); + generalStatistics.setNotExpiredIdCardsNumber(notExpiredIdCardsNumber); + generalStatistics.setNotCancelledIdCardsNumber(notCancelledIdCardsNumber); + generalStatistics.setActivatedIdCardsNumber(activatedIdCardsNumber); + generalStatistics.setDistinctIndividualsIdCardsNumber(distinctIndividualsIdCardsNumber); + generalStatistics.setAuthorizedBirthRecordsNumber(authorizedBirthRecordsNumber); + generalStatistics.setLivingFemalesAged18To29Number(livingFemalesAged18To29Number); + generalStatistics.setLivingMalesAged18To29Number(livingMalesAged18To29Number); + generalStatistics.setLivingMalesAgedUnder18Number(livingMalesAgedUnder18Number); + generalStatistics.setLivingFemalesAgedUnder18Number(livingFemalesAgedUnder18Number); + generalStatistics.setLivingMalesAged30To49Number(livingMalesAged30To49Number); + generalStatistics.setLivingFemalesAged30To49Number(livingFemalesAged30To49Number); + generalStatistics.setLivingMalesAgedOver49Number(livingMalesAgedOver49Number); + generalStatistics.setLivingFemalesAgedOver49Number(livingFemalesAgedOver49Number); + generalStatistics.setLivingAuthorizedBirthRecordsNumber(livingAuthorizedBirthRecordsNumber); + generalStatistics.setLivingPeopleWithCardsNumber(livingPeopleWithCardsNumber); + generalStatistics.setLivingMalesAgedUnder18WithCardsNumber(livingMalesAgedUnder18WithCardsNumber); + generalStatistics.setLivingFemalesAgedUnder18WithCardsNumber(livingFemalesAgedUnder18WithCardsNumber); + generalStatistics.setLivingFemalesAged18To29WithCardsNumber(livingFemalesAged18To29WithCardsNumber); + generalStatistics.setLivingMalesAged18To29WithCardsNumber(livingMalesAged18To29WithCardsNumber); + generalStatistics.setLivingFemalesAged30To49WithCardsNumber(livingFemalesAged30To49WithCardsNumber); + generalStatistics.setLivingMalesAged30To49WithCardsNumber(livingMalesAged30To49WithCardsNumber); + generalStatistics.setLivingFemalesAgedOver49WithCardsNumber(livingFemalesAgedOver49WithCardsNumber); + generalStatistics.setLivingMalesAgedOver49WithCardsNumber(livingMalesAgedOver49WithCardsNumber); + List provinceGeneralStatisticsList = getProvinceGeneralStatisticsList(); + generalStatistics.setProvinceGeneralStatisticsList(provinceGeneralStatisticsList); + + ObjectMapper objectMapper = new ObjectMapper(); + String jobContent = null; + try { + jobContent = objectMapper.writeValueAsString(generalStatistics); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + if (jobContent != null) { + mtlb.setContent(jobContent); + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + jobMtlbRepository.update(mtlb); + } + } + + private List getProvinceGeneralStatisticsList() { + List provinceGeneralStatisticsList = new ArrayList<>(); + List provinceList = geoDataRepository.findByType(2); + for (GeoData province : provinceList) { + ProvinceGeneralStatistics provinceGeneralStatistics = new ProvinceGeneralStatistics(); + provinceGeneralStatistics.setProvinceName(province.getName()); + + Long authorizedBirthRecordsNumber = queries + .getVitalRecordByAddressNumber(province.getAreaId() + "%"); + Long livingAuthorizedBirthRecordsNumber = queries + .getLivingVitalRecordByAddressNumber(province.getAreaId() + "%"); + Long livingFemalesAged18To29Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", FEMALE, 18, 29); + Long livingMalesAged18To29Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%",MALE, 18, 29); + Long livingMalesAgedUnder18Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%",MALE, 0, 17); + Long livingFemalesAgedUnder18Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%",FEMALE, 0, 17); + Long livingMalesAged30To49Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%",MALE, 30, 49); + Long livingFemalesAged30To49Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%",FEMALE, 30, 49); + Long livingMalesAgedOver49Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%",MALE, 50, 120); + Long livingFemalesAgedOver49Number = queries.getLivingVitalRecordByGenderAndAgeRangeAndAddress(province.getAreaId() + "%",FEMALE, 50, 120); + Long livingPeopleWithCardsNumber = queries + .getLivingVitalRecordIdCardsByAddressNumber(province.getAreaId() + "%"); + Long livingFemalesAgedUnder18WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", FEMALE, 0, 17); + Long livingMalesAgedUnder18WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", MALE, 0, 17); + Long livingFemalesAged18To29WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", FEMALE, 18, 29); + Long livingMalesAged18To29WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", MALE, 18, 29); + Long livingFemalesAged30To49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", FEMALE, 30, 49); + Long livingMalesAged30To49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", MALE, 30, 49); + Long livingFemalesAgedOver49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", FEMALE, 50, 120); + Long livingMalesAgedOver49WithCardsNumber = queries + .getLivingVitalRecordWithIdCardByGenderAndAgeRangeAndAddress(province.getAreaId() + "%", MALE, 50, 120); + provinceGeneralStatistics.setAuthorizedBirthRecordsNumber(authorizedBirthRecordsNumber); + provinceGeneralStatistics.setLivingFemalesAged18To29Number(livingFemalesAged18To29Number); + provinceGeneralStatistics.setLivingMalesAged18To29Number(livingMalesAged18To29Number); + provinceGeneralStatistics.setLivingMalesAgedUnder18Number(livingMalesAgedUnder18Number); + provinceGeneralStatistics.setLivingFemalesAgedUnder18Number(livingFemalesAgedUnder18Number); + provinceGeneralStatistics.setLivingMalesAged30To49Number(livingMalesAged30To49Number); + provinceGeneralStatistics.setLivingFemalesAged30To49Number(livingFemalesAged30To49Number); + provinceGeneralStatistics.setLivingMalesAgedOver49Number(livingMalesAgedOver49Number); + provinceGeneralStatistics.setLivingFemalesAgedOver49Number(livingFemalesAgedOver49Number); + provinceGeneralStatistics.setLivingAuthorizedBirthRecordsNumber(livingAuthorizedBirthRecordsNumber); + provinceGeneralStatistics.setLivingPeopleWithCardsNumber(livingPeopleWithCardsNumber); + provinceGeneralStatistics.setLivingMalesAgedUnder18WithCardsNumber(livingMalesAgedUnder18WithCardsNumber); + provinceGeneralStatistics + .setLivingFemalesAgedUnder18WithCardsNumber(livingFemalesAgedUnder18WithCardsNumber); + provinceGeneralStatistics.setLivingFemalesAged18To29WithCardsNumber(livingFemalesAged18To29WithCardsNumber); + provinceGeneralStatistics.setLivingMalesAged18To29WithCardsNumber(livingMalesAged18To29WithCardsNumber); + provinceGeneralStatistics.setLivingFemalesAged30To49WithCardsNumber(livingFemalesAged30To49WithCardsNumber); + provinceGeneralStatistics.setLivingMalesAged30To49WithCardsNumber(livingMalesAged30To49WithCardsNumber); + provinceGeneralStatistics.setLivingFemalesAgedOver49WithCardsNumber(livingFemalesAgedOver49WithCardsNumber); + provinceGeneralStatistics.setLivingMalesAgedOver49WithCardsNumber(livingMalesAgedOver49WithCardsNumber); + provinceGeneralStatisticsList.add(provinceGeneralStatistics); + } + return provinceGeneralStatisticsList; + } +} diff --git a/src/main/java/systems/archide/core/workflows/RvFourBirthMtlbInitiated.java b/src/main/java/systems/archide/core/workflows/RvFourBirthMtlbInitiated.java new file mode 100644 index 0000000..73d7c2b --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/RvFourBirthMtlbInitiated.java @@ -0,0 +1,59 @@ +package systems.archide.core.workflows; + +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.RvfourBirthMtlbAttachmentRepository; +import systems.archide.core.repository.RvfourBirthMtlbRepository; + +@Component +public class RvFourBirthMtlbInitiated { + + private static final Logger log = LoggerFactory.getLogger(RvFourBirthMtlbInitiated.class); + + @Autowired + RvfourBirthMtlbRepository rvfourBirthMtlbRepository; + + @Autowired + RvfourBirthMtlbAttachmentRepository rvfourBirthMtlbAttachmentRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Scheduled(fixedDelay = 5000) + public void fromInitiatedStatus() { + List mtlbList = queries.getRandomRv4BirthMtlbByMtlbStatus(MtlbStatus.INITIATED.getValue()); + if (mtlbList.size() > 0) { + AtomicInteger completed = new AtomicInteger(); + mtlbList.parallelStream().forEach((mtlb) -> { //parallel exec for concurrent list + if (!mtlb.isDraft()) { + if (mtlb.getNumberOfAttachments() == null || mtlb.getNumberOfAttachments() == 0) { + mtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + rvfourBirthMtlbRepository.update(mtlb); + } else { + long received = rvfourBirthMtlbAttachmentRepository + .count("rvfour_birth_mtlb_id = " + mtlb.getId()); + if (received>=mtlb.getNumberOfAttachments()) { + mtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + rvfourBirthMtlbRepository.update(mtlb); + completed.getAndIncrement(); + } + } + } + }); + if (completed.get() >0) + log.info("{} Rv4 Birth applications completed transmission", completed); + } + else log.info("no newly initiated Rv4 Birth applications found"); + } + +} diff --git a/src/main/java/systems/archide/core/workflows/RvFourBirthMtlbSubmitted.java b/src/main/java/systems/archide/core/workflows/RvFourBirthMtlbSubmitted.java new file mode 100644 index 0000000..6d239b5 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/RvFourBirthMtlbSubmitted.java @@ -0,0 +1,689 @@ +package systems.archide.core.workflows; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import systems.archide.core.ErrorCodes; +import systems.archide.core.pojo.Address; +import systems.archide.core.pojo.AddressType; +import systems.archide.core.pojo.ArchideMtlbAnnex; +import systems.archide.core.pojo.ArchideMtlbAnnexLogEntry; +import systems.archide.core.pojo.ArchideMtlbAnnexTag; +import systems.archide.core.pojo.ArchideMtlbAnnexUtil; +import systems.archide.core.pojo.CivilStatusMtlb; +import systems.archide.core.pojo.CivilStatusMtlbAttachment; +import systems.archide.core.pojo.CivilStatusMtlbNote; +import systems.archide.core.pojo.CivilStatusMtlbTag; +import systems.archide.core.pojo.Email; +import systems.archide.core.pojo.Face; +import systems.archide.core.pojo.GeoData; +import systems.archide.core.pojo.GlobalState; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.Occupation; +import systems.archide.core.pojo.OccupationMetadata; +import systems.archide.core.pojo.PhoneNumber; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.pojo.RvfourBirthMtlbAttachment; +import systems.archide.core.pojo.RvfourBirthMtlbTag; +import systems.archide.core.pojo.TypeOfAcquisition; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.pojo.VitalRecordAttachment; +import systems.archide.core.pojo.VitalRecordHistory; +import systems.archide.core.pojo.VitalRecordMention; +import systems.archide.core.pojo.VitalRecordNote; +import systems.archide.core.pojo.VitalRecordTag; +import systems.archide.core.repository.AddressRepository; +import systems.archide.core.repository.CivilStatusMtlbAttachmentRepository; +import systems.archide.core.repository.CivilStatusMtlbNoteRepository; +import systems.archide.core.repository.CivilStatusMtlbRepository; +import systems.archide.core.repository.CivilStatusMtlbTagRepository; +import systems.archide.core.repository.EmailRepository; +import systems.archide.core.repository.FaceRepository; +import systems.archide.core.repository.GeoDataRepository; +import systems.archide.core.repository.GlobalStateRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.OccupationMetadataRepository; +import systems.archide.core.repository.OccupationRepository; +import systems.archide.core.repository.PhoneNumberRepository; +import systems.archide.core.repository.RvfourBirthMtlbAttachmentRepository; +import systems.archide.core.repository.RvfourBirthMtlbRepository; +import systems.archide.core.repository.RvfourBirthMtlbTagRepository; +import systems.archide.core.repository.VitalRecordAttachmentRepository; +import systems.archide.core.repository.VitalRecordHistoryRepository; +import systems.archide.core.repository.VitalRecordMentionRepository; +import systems.archide.core.repository.VitalRecordNoteRepository; +import systems.archide.core.repository.VitalRecordRepository; +import systems.archide.core.repository.VitalRecordTagRepository; +import systems.archide.core.workflows.utils.CustomErrorCodes; +import systems.archide.core.workflows.utils.RvFourBirthMtlbUtils; +import systems.archide.core.workflows.utils.Utils; + +@Component +public class RvFourBirthMtlbSubmitted { + + private static final Logger log = LoggerFactory.getLogger(RvFourBirthMtlbSubmitted.class); + + + final static String RELIGION_TAG = "Religion"; + + final static String INVALID_BIRTH_PLACE_DATA = "RV4_ERR_1"; + final static String INVALID_RESIDENCE_ADDRESS_DATA = "RV4_ERR_2"; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + FaceRepository faceRepository; + + @Autowired + VitalRecordTagRepository vitalRecordTagRepository; + + @Autowired + VitalRecordAttachmentRepository vitalRecordAttachmentRepository; + + @Autowired + AddressRepository addressRepository; + + @Autowired + OccupationMetadataRepository occupationMetadataRepository; + + @Autowired + EmailRepository emailRepository; + + @Autowired + PhoneNumberRepository phoneNumberRepository; + + @Autowired + OccupationRepository occupationRepository; + + @Autowired + GeoDataRepository locationsRepository; + + @Autowired + RvfourBirthMtlbRepository rvfourBirthMtlbRepository; + + @Autowired + RvfourBirthMtlbTagRepository rvfourBirthMtlbTagRepository; + + @Autowired + GlobalStateRepository globalStateRepository; + + @Autowired + VitalRecordNoteRepository vitalRecordNoteRepository; + + @Autowired + VitalRecordMentionRepository vitalRecordMentionRepository; + + @Autowired + RvfourBirthMtlbAttachmentRepository rv4BirthMtlbAttachmentRepository; + + @Autowired + RvFourBirthMtlbUtils rvFourBirthMtlbUtils; + + @Autowired + VitalRecordHistoryRepository vitalRecordHistoryRepository; + + @Autowired + CivilStatusMtlbRepository civilStatusMtlbRepository; + + @Autowired + CivilStatusMtlbTagRepository civilStatusMtlbTagRepository; + + @Autowired + CivilStatusMtlbAttachmentRepository civilStatusMtlbAttachmentRepository; + + @Autowired + CivilStatusMtlbNoteRepository civilStatusMtlbNoteRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Autowired + Utils utils; + + @Scheduled(fixedDelay = 5000) + public void fromSubmittedStatus() { + + GlobalState migrationState = globalStateRepository.findByKey("migration"); + List mtlbList = queries.getRandomRv4BirthMtlbByMtlbStatus(MtlbStatus.SUBMITTED.getValue()); + + if (mtlbList.size() > 0) { + log.info("Read {} newly submitted rv4 birth applications", mtlbList.size()); + for (RvfourBirthMtlb mtlb : mtlbList) { + if (mtlb.getVitalRecordId() != null) { + switch (mtlb.getMtlbType()) { + case RV4_BIRTH_VITAL_RECORD: + createVitalRecord(mtlb, migrationState); + break; + case RV4_VITAL_RECORD_HISTORY: + createHistoryRecord(mtlb); + break; + case RV4_BIRTH_APPLICATION: + createBirthApplication(mtlb, migrationState); + break; + default: + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } + rvfourBirthMtlbRepository.save(mtlb); + } else { + mtlb.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + RvfourBirthMtlbTag tag = new RvfourBirthMtlbTag(); + tag.setRvfourBirthMtlbId(mtlb.getId()); + tag.setContent(ErrorCodes.VITAL_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + rvfourBirthMtlbTagRepository.save(tag); + rvfourBirthMtlbRepository.save(mtlb); + } + } + } + } + + private void createBirthApplication(RvfourBirthMtlb mtlb, GlobalState migrationState) { + CivilStatusMtlb csMtlb = new CivilStatusMtlb(); + csMtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + csMtlb.setMtlbType(MtlbType.BIRTH_REGISTRATION); + ArrayList tags = new ArrayList(); + if (mtlb.getFatherId() != null) { + int fatherRecordStatus = utils.checkVitalRecordStatus(mtlb.getFatherId(), migrationState); + if (fatherRecordStatus == Utils.FOUND) + csMtlb.setFatherId(mtlb.getFatherId()); + else if (fatherRecordStatus == Utils.UNKNOWN || fatherRecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (fatherRecordStatus == Utils.CONFIRMED_MISSING) { + CivilStatusMtlbTag tag = null; + tag = new CivilStatusMtlbTag(); + tag.setContent(ErrorCodes.FATHER_NOT_FOUND); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } else if (fatherRecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + CivilStatusMtlbTag tag = null; + tag = new CivilStatusMtlbTag(); + tag.setKey(CustomErrorCodes.RV4_FATHER_FAMILY_TREE_RECORD); + tag.setContent(mtlb.getFatherId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + } + + if (mtlb.getMotherId() != null) { + int motherRecordStatus = utils.checkVitalRecordStatus(mtlb.getMotherId(), migrationState); + if (motherRecordStatus == Utils.FOUND) + csMtlb.setMotherId(mtlb.getMotherId()); + else if (motherRecordStatus == Utils.UNKNOWN) + return; + else if (motherRecordStatus == Utils.CONFIRMED_MISSING) { + CivilStatusMtlbTag tag = null; + tag = new CivilStatusMtlbTag(); + tag.setContent(ErrorCodes.MOTHER_NOT_FOUND); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } else if (motherRecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + CivilStatusMtlbTag tag = null; + tag = new CivilStatusMtlbTag(); + tag.setKey(CustomErrorCodes.RV4_MOTHER_FAMILY_TREE_RECORD); + tag.setContent(mtlb.getMotherId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + } + csMtlb.setFirstname(mtlb.getFirstname()); + csMtlb.setSecondname(mtlb.getSecondname()); + csMtlb.setThirdname(mtlb.getThirdname()); + csMtlb.setFourthname(mtlb.getFourthname()); + csMtlb.setFifthname(mtlb.getFifthname()); + csMtlb.setReportedFatherName(mtlb.getReportedFatherName()); + csMtlb.setReportedMotherName(mtlb.getReportedMotherName()); + csMtlb.setPrimaryCitizenship("191"); + csMtlb.setTypeOfAcquisition(TypeOfAcquisition.BY_DESCENT); + rvFourBirthMtlbUtils.validateBiographic(mtlb); + if (!StringUtils.isAllBlank(mtlb.getBirthPlace())) { + GeoData location = locationsRepository.findByAreaId(mtlb.getBirthPlace()); + if (location != null) + csMtlb.setBirthPlace(location.getAreaId()); + else { + CivilStatusMtlbTag tag = new CivilStatusMtlbTag(); + tag.setContent(mtlb.getBirthPlace()); + tag.setType(Utils.WARNING_TAG_TYPE); + tag.setKey(INVALID_BIRTH_PLACE_DATA); + tags.add(tag); + } + } + + csMtlb.setBirthdate(mtlb.getBirthdate()); + csMtlb.setBirthYearUnknown(mtlb.isBirthYearUnknown()); + csMtlb.setBirthMonthUnknown(mtlb.isBirthMonthUnknown()); + csMtlb.setBirthDayUnknown(mtlb.isBirthDayUnknown()); + if (mtlb.getGender() != null) + csMtlb.setGender(mtlb.getGender().shortValue()); + csMtlb.setMaritalStatus(mtlb.getMaritalStatus()); + + Occupation occupation = null; + if (!StringUtils.isAllBlank(mtlb.getOccupation())) { + String legacyOccupation = mtlb.getOccupation().trim(); + occupation = new Occupation(); + List omList = occupationMetadataRepository.findByName(legacyOccupation); + if (omList.size() > 0) + occupation.setOccupationId(omList.get(0).getId()); + else { + OccupationMetadata om = new OccupationMetadata(); + om.setName(legacyOccupation); + occupationMetadataRepository.insert(om); + occupation.setOccupationId(om.getId()); + } + } + + Email email = null; + if (!StringUtils.isAllBlank(mtlb.getEmail())) { + String legacyEmail = mtlb.getEmail().trim(); + email = new Email(); + email.setEmail(legacyEmail); + } + + PhoneNumber phoneNumber = null; + if (!StringUtils.isAllBlank(mtlb.getPhoneNumber())) { + String legacyPhoneNumber = mtlb.getPhoneNumber().trim(); + phoneNumber = new PhoneNumber(); + phoneNumber.setPhoneNumber(legacyPhoneNumber); + } + + Address address = null; + if (!StringUtils.isAllBlank(mtlb.getAddress())) { + CivilStatusMtlbTag tag = null; + GeoData location =locationsRepository.findByAreaId(mtlb.getAddress()); + if (location != null) { + address = new Address(); + address.setAddressType(AddressType.RESIDENCY); + address.setAreaId(location.getAreaId()); + } + else { + tag = new CivilStatusMtlbTag(); + tag.setContent(mtlb.getBirthPlace()); + tag.setType(Utils.WARNING_TAG_TYPE); + tag.setKey(INVALID_RESIDENCE_ADDRESS_DATA); + tags.add(tag); + } + if (tag != null) + tags.add(tag); + } + + if (mtlb.isMultiBirth()) { + CivilStatusMtlbTag tag = new CivilStatusMtlbTag(); + tag.setContent("Multiple Births"); + tag.setType(Utils.INFO_TAG_TYPE); + tags.add(tag); + } + + if (mtlb.getFace() != null) { + csMtlb.setFace(mtlb.getFace()); + } + + ArchideMtlbAnnex annex = null; + try { + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if (annex.getTags() != null) + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + CivilStatusMtlbTag vt = new CivilStatusMtlbTag(); + vt.setContent(tag.getValue()); + vt.setType(tag.getType()); + vt.setKey(tag.getName()); + tags.add(vt); + } + + + List mtlbTagList = rvfourBirthMtlbTagRepository.findByRvfourBirthMtlbId(mtlb.getId()); + for (RvfourBirthMtlbTag tag : mtlbTagList) { + CivilStatusMtlbTag vt = new CivilStatusMtlbTag(); + vt.setContent(tag.getContent()); + vt.setType(tag.getType()); + vt.setKey(tag.getKey()); + tags.add(vt); + } + ArrayList notes = new ArrayList<>(); + for (ArchideMtlbAnnexLogEntry note : annex.getNotes()) { + CivilStatusMtlbNote vn = new CivilStatusMtlbNote(); + vn.setAddedBy(note.getAuthor()); + vn.setContent(note.getContent()); + vn.setTimestamp(note.getTimestamp()); + notes.add(vn); + } + + ArrayList attachments = new ArrayList<>(); + List mtlbAttachments = rv4BirthMtlbAttachmentRepository + .findByRvfourBirthMtlbId(mtlb.getId()); + for (RvfourBirthMtlbAttachment mtlbAttachment: mtlbAttachments) { + CivilStatusMtlbAttachment attachment = new CivilStatusMtlbAttachment(); + attachment.setContent(mtlbAttachment.getContent()); + attachment.setFileName(mtlbAttachment.getFileName()); + attachment.setDescription(mtlbAttachment.getDescription()); + attachment.setPreview(mtlbAttachment.getPreview()); + attachments.add(attachment); + } + + try { + Long id = civilStatusMtlbRepository.insert(csMtlb); + if (occupation != null) { + occupation.setCivilStatusMtlbId(id); + occupationRepository.insert(occupation); + } + if (email != null) { + email.setCivilStatusMtlbId(id); + emailRepository.insert(email); + } + if (phoneNumber != null) { + phoneNumber.setCivilStatusMtlbId(id); + phoneNumberRepository.insert(phoneNumber); + } + if (address != null) { + address.setCivilStatusMtlbId(id); + addressRepository.insert(address); + } + for (CivilStatusMtlbTag tag : tags) { + tag.setCivilStatusMtlbId(id); + civilStatusMtlbTagRepository.insert(tag); + } + for (CivilStatusMtlbAttachment attachment : attachments) { + attachment.setCivilStatusMtlbId(id); + civilStatusMtlbAttachmentRepository.insert(attachment); + } + for (CivilStatusMtlbNote note : notes) { + note.setCivilStatusMtlbId(id); + civilStatusMtlbNoteRepository.insert(note); + } + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + private void createHistoryRecord(RvfourBirthMtlb mtlb) { + VitalRecordHistory vr = new VitalRecordHistory(); + vr.setId(mtlb.getVitalRecordId()); + vr.setFirstname(mtlb.getFirstname()); + vr.setSecondname(mtlb.getSecondname()); + vr.setThirdname(mtlb.getThirdname()); + vr.setFourthname(mtlb.getFourthname()); + vr.setFifthname(mtlb.getFifthname()); + vr.setReportedFatherName(mtlb.getReportedFatherName()); + vr.setReportedMotherName(mtlb.getReportedMotherName()); + vr.setFatherId(mtlb.getFatherId()); + vr.setMotherId(mtlb.getMotherId()); + if (!StringUtils.isAllBlank(mtlb.getBirthPlace())) { + GeoData location = locationsRepository.findByAreaId(mtlb.getBirthPlace()); + if (location != null) + vr.setBirthPlace(location.getAreaId()); + } + vr.setTimestamp(mtlb.getTimestamp()); + vr.setBirthdate(mtlb.getBirthdate()); + vr.setBirthYearUnknown(mtlb.isBirthYearUnknown()); + vr.setBirthMonthUnknown(mtlb.isBirthMonthUnknown()); + vr.setBirthDayUnknown(mtlb.isBirthDayUnknown()); + vr.setPrimaryCitizenship("191"); + vr.setTypeOfAcquisition(TypeOfAcquisition.BY_DESCENT); + if (mtlb.getGender() != null) + vr.setGender(mtlb.getGender().shortValue()); + vr.setMaritalStatus(mtlb.getMaritalStatus()); + vr.setHistoryTimestamp(mtlb.getTimestamp()); + vitalRecordHistoryRepository.insert(vr); + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } + + private void createVitalRecord(RvfourBirthMtlb mtlb, GlobalState migrationState) { + VitalRecord vr = new VitalRecord(); + vr.setInactive(false); + ArrayList tags = new ArrayList(); + if (mtlb.getFatherId() != null) { + int fatherRecordStatus = utils.checkVitalRecordStatus(mtlb.getFatherId(), migrationState); + if (fatherRecordStatus == Utils.FOUND) + vr.setFatherId(mtlb.getFatherId()); + else if (fatherRecordStatus == Utils.UNKNOWN || fatherRecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (fatherRecordStatus == Utils.CONFIRMED_MISSING) { + VitalRecordTag tag = null; + tag = new VitalRecordTag(); + tag.setVitalRecordId(mtlb.getVitalRecordId()); + tag.setContent(ErrorCodes.FATHER_NOT_FOUND); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } else if (fatherRecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + VitalRecordTag tag = null; + tag = new VitalRecordTag(); + tag.setVitalRecordId(mtlb.getVitalRecordId()); + tag.setKey(CustomErrorCodes.RV4_FATHER_FAMILY_TREE_RECORD); + tag.setContent(mtlb.getFatherId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + } + + if (mtlb.getMotherId() != null) { + int motherRecordStatus = utils.checkVitalRecordStatus(mtlb.getMotherId(), migrationState); + if (motherRecordStatus == Utils.FOUND) + vr.setMotherId(mtlb.getMotherId()); + else if (motherRecordStatus == Utils.UNKNOWN) + return; + else if (motherRecordStatus == Utils.CONFIRMED_MISSING) { + VitalRecordTag tag = null; + tag = new VitalRecordTag(); + tag.setVitalRecordId(mtlb.getVitalRecordId()); + tag.setContent(ErrorCodes.MOTHER_NOT_FOUND); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } else if (motherRecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + VitalRecordTag tag = null; + tag = new VitalRecordTag(); + tag.setVitalRecordId(mtlb.getVitalRecordId()); + tag.setKey(CustomErrorCodes.RV4_MOTHER_FAMILY_TREE_RECORD); + tag.setContent(mtlb.getMotherId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + } + vr.setId(mtlb.getVitalRecordId()); + vr.setFirstname(mtlb.getFirstname()); + vr.setSecondname(mtlb.getSecondname()); + vr.setThirdname(mtlb.getThirdname()); + vr.setFourthname(mtlb.getFourthname()); + vr.setFifthname(mtlb.getFifthname()); + vr.setReportedFatherName(mtlb.getReportedFatherName()); + vr.setReportedMotherName(mtlb.getReportedMotherName()); + vr.setPrimaryCitizenship("191"); + vr.setTypeOfAcquisition(TypeOfAcquisition.BY_DESCENT); + vr.setTimestamp(mtlb.getTimestamp()); + rvFourBirthMtlbUtils.validateBiographic(mtlb); + if (!StringUtils.isAllBlank(mtlb.getBirthPlace())) { + GeoData location = locationsRepository.findByAreaId(mtlb.getBirthPlace()); + if (location != null) + vr.setBirthPlace(location.getAreaId()); + else { + VitalRecordTag tag = new VitalRecordTag(); + tag.setVitalRecordId(mtlb.getVitalRecordId()); + tag.setContent(mtlb.getBirthPlace()); + tag.setType(Utils.WARNING_TAG_TYPE); + tag.setKey(INVALID_BIRTH_PLACE_DATA); + tags.add(tag); + } + } + + vr.setBirthdate(mtlb.getBirthdate()); + vr.setBirthTime(mtlb.getBirthtime()); + vr.setBirthYearUnknown(mtlb.isBirthYearUnknown()); + vr.setBirthMonthUnknown(mtlb.isBirthMonthUnknown()); + vr.setBirthDayUnknown(mtlb.isBirthDayUnknown()); + if (mtlb.getGender() != null) + vr.setGender(mtlb.getGender().shortValue()); + vr.setMaritalStatus(mtlb.getMaritalStatus()); + + Occupation occupation = null; + if (!StringUtils.isAllBlank(mtlb.getOccupation())) { + String legacyOccupation = mtlb.getOccupation().trim(); + occupation = new Occupation(); + List omList = occupationMetadataRepository.findByName(legacyOccupation); + if (omList.size() > 0) + occupation.setOccupationId(omList.get(0).getId()); + else { + OccupationMetadata om = new OccupationMetadata(); + om.setName(legacyOccupation); + occupationMetadataRepository.insert(om); + occupation.setOccupationId(om.getId()); + } + occupation.setVitalRecordId(mtlb.getVitalRecordId()); + } + + Email email = null; + if (!StringUtils.isAllBlank(mtlb.getEmail())) { + String legacyEmail = mtlb.getEmail().trim(); + email = new Email(); + email.setEmail(legacyEmail); + email.setVitalRecordId(mtlb.getVitalRecordId()); + } + + PhoneNumber phoneNumber = null; + if (!StringUtils.isAllBlank(mtlb.getPhoneNumber())) { + String legacyPhoneNumber = mtlb.getPhoneNumber().trim(); + phoneNumber = new PhoneNumber(); + phoneNumber.setPhoneNumber(legacyPhoneNumber); + phoneNumber.setVitalRecordId(mtlb.getVitalRecordId()); + } + + Address address = null; + if (!StringUtils.isAllBlank(mtlb.getAddress())) { + VitalRecordTag tag = null; + GeoData location =locationsRepository.findByAreaId(mtlb.getAddress()); + if (location != null) { + address = new Address(); + address.setAddressType(AddressType.RESIDENCY); + address.setAreaId(location.getAreaId()); + address.setVitalRecordId(mtlb.getVitalRecordId()); + } + else { + tag = new VitalRecordTag(); + tag.setVitalRecordId(mtlb.getVitalRecordId()); + tag.setContent(mtlb.getBirthPlace()); + tag.setType(Utils.WARNING_TAG_TYPE); + tag.setKey(INVALID_RESIDENCE_ADDRESS_DATA); + tags.add(tag); + } + if (tag != null) + tags.add(tag); + } + + if (mtlb.isMultiBirth()) { + VitalRecordTag tag = new VitalRecordTag(); + tag.setContent("Multiple Births"); + tag.setType(Utils.INFO_TAG_TYPE); + tag.setVitalRecordId(mtlb.getVitalRecordId()); + tags.add(tag); + } + + Long faceId = null; + if (mtlb.getFace() != null) { + Face face = new Face(); + face.setImage(mtlb.getFace()); + face.setVitalRecordId(mtlb.getVitalRecordId()); + faceId = faceRepository.insert(face); + } + + ArchideMtlbAnnex annex = null; + try { + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if (annex.getTags() != null) + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + VitalRecordTag vt = new VitalRecordTag(); + vt.setVitalRecordId(mtlb.getVitalRecordId()); + vt.setContent(tag.getValue()); + vt.setType(tag.getType()); + vt.setKey(tag.getName()); + tags.add(vt); + } + + + List mtlbTagList = rvfourBirthMtlbTagRepository.findByRvfourBirthMtlbId(mtlb.getId()); + for (RvfourBirthMtlbTag tag : mtlbTagList) { + VitalRecordTag vt = new VitalRecordTag(); + vt.setVitalRecordId(mtlb.getVitalRecordId()); + vt.setContent(tag.getContent()); + vt.setType(tag.getType()); + vt.setKey(tag.getKey()); + tags.add(vt); + } + ArrayList notes = new ArrayList<>(); + for (ArchideMtlbAnnexLogEntry note : annex.getNotes()) { + VitalRecordNote vn = new VitalRecordNote(); + vn.setAddedBy(note.getAuthor()); + vn.setContent(note.getContent()); + vn.setTimestamp(note.getTimestamp()); + vn.setVitalRecordId(mtlb.getVitalRecordId()); + notes.add(vn); + } + + ArrayList mentions = new ArrayList<>(); + for (ArchideMtlbAnnexLogEntry mention : annex.getMentions()) { + VitalRecordMention vm = new VitalRecordMention(); + vm.setAddedBy(mention.getAuthor()); + vm.setContent(mention.getContent()); + vm.setTimestamp(mention.getTimestamp()); + vm.setVitalRecordId(mtlb.getVitalRecordId()); + mentions.add(vm); + } + + ArrayList attachments = new ArrayList<>(); + List mtlbAttachments = rv4BirthMtlbAttachmentRepository + .findByRvfourBirthMtlbId(mtlb.getId()); + for (RvfourBirthMtlbAttachment mtlbAttachment: mtlbAttachments) { + VitalRecordAttachment attachment = new VitalRecordAttachment(); + attachment.setVitalRecordId(mtlb.getVitalRecordId()); + attachment.setContent(mtlbAttachment.getContent()); + attachment.setFileName(mtlbAttachment.getFileName()); + attachment.setDescription(mtlbAttachment.getDescription()); + attachment.setPreview(mtlbAttachment.getPreview()); + attachments.add(attachment); + } + + try { + vitalRecordRepository.insert(vr); + if (occupation != null) + occupationRepository.insert(occupation); + if (email != null) + emailRepository.insert(email); + if (phoneNumber != null) + phoneNumberRepository.insert(phoneNumber); + if (address != null) + addressRepository.insert(address); + for (VitalRecordTag tag : tags) + vitalRecordTagRepository.insert(tag); + if (faceId != null) { + vitalRecordRepository.setFaceIdById(vr.getId(), faceId); + } + for (VitalRecordAttachment attachment : attachments) + vitalRecordAttachmentRepository.insert(attachment); + for (VitalRecordNote note : notes) + vitalRecordNoteRepository.insert(note); + for (VitalRecordMention mention : mentions) + vitalRecordMentionRepository.insert(mention); + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } catch (Exception e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/systems/archide/core/workflows/RvfourDeathMtlbSubmitted.java b/src/main/java/systems/archide/core/workflows/RvfourDeathMtlbSubmitted.java new file mode 100644 index 0000000..82b2e65 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/RvfourDeathMtlbSubmitted.java @@ -0,0 +1,330 @@ +package systems.archide.core.workflows; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import systems.archide.core.pojo.ArchideMtlbAnnex; +import systems.archide.core.pojo.ArchideMtlbAnnexLogEntry; +import systems.archide.core.pojo.ArchideMtlbAnnexTag; +import systems.archide.core.pojo.ArchideMtlbAnnexUtil; +import systems.archide.core.pojo.CivilStatusMtlb; +import systems.archide.core.pojo.CivilStatusMtlbNote; +import systems.archide.core.pojo.CivilStatusMtlbTag; +import systems.archide.core.pojo.DeathRecord; +import systems.archide.core.pojo.DeathRecordNote; +import systems.archide.core.pojo.DeathRecordTag; +import systems.archide.core.pojo.Face; +import systems.archide.core.pojo.GlobalState; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.pojo.RvfourDeathMtlb; +import systems.archide.core.pojo.RvfourDeathMtlbTag; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.CivilStatusMtlbNoteRepository; +import systems.archide.core.repository.CivilStatusMtlbRepository; +import systems.archide.core.repository.CivilStatusMtlbTagRepository; +import systems.archide.core.repository.DeathRecordNoteRepository; +import systems.archide.core.repository.DeathRecordRepository; +import systems.archide.core.repository.DeathRecordTagRepository; +import systems.archide.core.repository.FaceRepository; +import systems.archide.core.repository.GlobalStateRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.RvfourBirthMtlbRepository; +import systems.archide.core.repository.RvfourDeathMtlbRepository; +import systems.archide.core.repository.RvfourDeathMtlbTagRepository; +import systems.archide.core.repository.VitalRecordRepository; +import systems.archide.core.workflows.utils.CustomErrorCodes; +import systems.archide.core.workflows.utils.Utils; + +@Component +public class RvfourDeathMtlbSubmitted { + + private static final Logger log = LoggerFactory.getLogger(RvFourBirthMtlbSubmitted.class); + + @Autowired + RvfourDeathMtlbRepository rvfourDeathMtlbRepository; + + @Autowired + GlobalStateRepository globalStateRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + RvfourDeathMtlbTagRepository rvfourDeathMtlbTagRepository; + + @Autowired + DeathRecordNoteRepository deathRecordNoteRepository; + + @Autowired + DeathRecordRepository deathRecordRepository; + + @Autowired + RvfourBirthMtlbRepository rvfourBirthMtlbRepository; + + @Autowired + DeathRecordTagRepository deathRecordTagRepository; + + @Autowired + CivilStatusMtlbRepository civilStatusMtlbRepository; + + @Autowired + CivilStatusMtlbTagRepository civilStatusMtlbTagRepository; + + @Autowired + CivilStatusMtlbNoteRepository civilStatusMtlbNoteRepository; + + @Autowired + FaceRepository faceRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Autowired + Utils utils; + + @Scheduled(fixedDelay = 5000) + public void fromSubmittedStatus() { + GlobalState migrationState = globalStateRepository.findByKey("migration"); + List mtlbList = queries.getRandomRv4DeathMtlbByMtlbStatus(MtlbStatus.SUBMITTED.getValue()); + if (mtlbList.size() > 0) { + log.info("Read {} newly submitted rv4 death applications", mtlbList.size()); + for (RvfourDeathMtlb mtlb : mtlbList) { + if (mtlb.getVitalRecordId() != null) { + switch(mtlb.getMtlbType()) { + case RV4_DEATH_RECORD: + createDeathRecord(mtlb, migrationState); + break; + case RV4_DEATH_APPLICATION: + createDeathApplication(mtlb, migrationState); + break; + case RV4_DEATH_RECORD_TRASH: + createDeathRecordTrash(mtlb); + break; + } + rvfourDeathMtlbRepository.save(mtlb); + } + } + } + } + + private void createDeathRecordTrash(RvfourDeathMtlb mtlb) { + // TODO Auto-generated method stub + + } + + private void createDeathApplication(RvfourDeathMtlb mtlb, GlobalState migrationState) { + CivilStatusMtlb cMtlb = new CivilStatusMtlb(); + ArrayList tags = new ArrayList(); + ArrayList notes = new ArrayList(); + int recordStatus = utils.checkVitalRecordStatus(mtlb.getVitalRecordId(), migrationState); + cMtlb.setVitalRecordId(mtlb.getVitalRecordId()); + cMtlb.setMtlbStatus(MtlbStatus.SUBMITTED); + VitalRecord vr = null; + if (recordStatus == Utils.FOUND) { + vr = vitalRecordRepository.findById(mtlb.getVitalRecordId()); + } + else if (recordStatus == Utils.UNKNOWN || recordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (recordStatus == Utils.CONFIRMED_MISSING) { + CivilStatusMtlbTag tag = null; + tag = new CivilStatusMtlbTag(); + tag.setContent(CustomErrorCodes.VITAL_RECORD_ID_MISSING); + tag.setType(Utils.WARNING_TAG_TYPE); + tags.add(tag); + cMtlb.setVitalRecordId(null); + } + else if (recordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + CivilStatusMtlbTag tag = null; + tag = new CivilStatusMtlbTag(); + tag.setKey(CustomErrorCodes.RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getVitalRecordId().toString()); + tag.setType(Utils.WARNING_TAG_TYPE); + tags.add(tag); + RvfourBirthMtlb rvfourBirthMtlb = rvfourBirthMtlbRepository.findByVitalRecordId(mtlb.getVitalRecordId()); + if (rvfourBirthMtlb != null) { + cMtlb.setFirstname(rvfourBirthMtlb.getFirstname()); + cMtlb.setSecondname(rvfourBirthMtlb.getSecondname()); + cMtlb.setThirdname(rvfourBirthMtlb.getThirdname()); + cMtlb.setFourthname(rvfourBirthMtlb.getFourthname()); + cMtlb.setGender(rvfourBirthMtlb.getGender()); + cMtlb.setMaritalStatus(rvfourBirthMtlb.getMaritalStatus()); + cMtlb.setReportedFatherName(rvfourBirthMtlb.getReportedFatherName()); + cMtlb.setReportedMotherName(rvfourBirthMtlb.getReportedMotherName()); + } + cMtlb.setVitalRecordId(null); + } + if (vr != null) { + cMtlb.setFirstname(vr.getFirstname()); + cMtlb.setSecondname(vr.getSecondname()); + cMtlb.setThirdname(vr.getThirdname()); + cMtlb.setFourthname(vr.getFourthname()); + cMtlb.setGender(vr.getGender()); + cMtlb.setMaritalStatus(vr.getMaritalStatus()); + if (vr.getFaceId() != null) { + Face face = faceRepository.findById(vr.getFaceId()); + cMtlb.setFace(face.getImage()); + } + cMtlb.setReportedFatherName(vr.getReportedFatherName()); + cMtlb.setReportedMotherName(vr.getReportedMotherName()); + } + cMtlb.setMtlbType(MtlbType.DEATH_REGISTRATION); + cMtlb.setVitalRecordId(mtlb.getVitalRecordId()); + cMtlb.setTimeOfDeath(mtlb.getTimeOfDeath()); + cMtlb.setDateOfDeath(mtlb.getDateOfDeath()); + cMtlb.setDeclarantId(mtlb.getDeclarantId()); + cMtlb.setDeathPlace(mtlb.getDeathLocation()); + Long id = civilStatusMtlbRepository.insert(cMtlb); + if (id != null) + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + ArchideMtlbAnnex annex = null; + try { + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if (annex.getTags() != null) + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + CivilStatusMtlbTag cTag = new CivilStatusMtlbTag(); + cTag.setCivilStatusMtlbId(id); + cTag.setContent(tag.getValue()); + cTag.setType(tag.getType()); + cTag.setKey(tag.getName()); + tags.add(cTag); + } + for (CivilStatusMtlbTag tag: tags) { + tag.setCivilStatusMtlbId(id); + civilStatusMtlbTagRepository.insert(tag); + } + if (annex.getNotes() != null) + for (ArchideMtlbAnnexLogEntry note : annex.getNotes()) { + CivilStatusMtlbNote cNote = new CivilStatusMtlbNote(); + cNote.setContent(note.getContent()); + cNote.setAddedBy(note.getAuthor()); + cNote.setTimestamp(note.getTimestamp()); + notes.add(cNote); + } + for (CivilStatusMtlbNote note: notes) { + note.setCivilStatusMtlbId(id); + civilStatusMtlbNoteRepository.insert(note); + } + } + + private void createDeathRecord(RvfourDeathMtlb mtlb, GlobalState migrationState) { + DeathRecord dr = new DeathRecord(); + ArrayList tags = new ArrayList(); + int recordStatus = utils.checkVitalRecordStatus(mtlb.getVitalRecordId(), migrationState); + dr.setVitalRecordId(mtlb.getVitalRecordId()); + VitalRecord vr = null; + if (recordStatus == Utils.FOUND) { + vr = vitalRecordRepository.findById(mtlb.getVitalRecordId()); + } + else if (recordStatus == Utils.UNKNOWN || recordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (recordStatus == Utils.CONFIRMED_MISSING) { + DeathRecordTag tag = null; + tag = new DeathRecordTag(); + tag.setDeathRecordId(mtlb.getDeathRecordId()); + tag.setContent(CustomErrorCodes.VITAL_RECORD_ID_MISSING); + tag.setType(Utils.WARNING_TAG_TYPE); + tags.add(tag); + dr.setVitalRecordId(null); + } + else if (recordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + DeathRecordTag tag = null; + tag = new DeathRecordTag(); + tag.setDeathRecordId(mtlb.getDeathRecordId()); + tag.setKey(CustomErrorCodes.RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getVitalRecordId().toString()); + tag.setType(Utils.WARNING_TAG_TYPE); + tags.add(tag); + RvfourBirthMtlb rvfourBirthMtlb = rvfourBirthMtlbRepository.findByVitalRecordId(mtlb.getVitalRecordId()); + if (rvfourBirthMtlb != null) { + dr.setFirstname(rvfourBirthMtlb.getFirstname()); + dr.setSecondname(rvfourBirthMtlb.getSecondname()); + dr.setThirdname(rvfourBirthMtlb.getThirdname()); + dr.setFourthname(rvfourBirthMtlb.getFourthname()); + dr.setGender(rvfourBirthMtlb.getGender()); + dr.setMaritalStatus(rvfourBirthMtlb.getMaritalStatus()); + dr.setReportedFatherName(rvfourBirthMtlb.getReportedFatherName()); + dr.setReportedMotherName(rvfourBirthMtlb.getReportedMotherName()); + } + dr.setVitalRecordId(null); + } + if (vr != null) { + dr.setFirstname(vr.getFirstname()); + dr.setSecondname(vr.getSecondname()); + dr.setThirdname(vr.getThirdname()); + dr.setFourthname(vr.getFourthname()); + dr.setGender(vr.getGender()); + dr.setMaritalStatus(vr.getMaritalStatus()); + dr.setFaceId(vr.getFaceId()); + dr.setReportedFatherName(vr.getReportedFatherName()); + dr.setReportedMotherName(vr.getReportedMotherName()); + } + dr.setId(mtlb.getDeathRecordId()); + dr.setTimeOfDeath(mtlb.getTimeOfDeath()); + dr.setDateOfDeath(mtlb.getDateOfDeath()); + dr.setDraft(false); + dr.setDeathLocation(mtlb.getDeathLocation()); + dr.setDeathPlace(mtlb.getDeathLocation()); + ArchideMtlbAnnex annex = null; + try { + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if (annex.getTags() != null) + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + DeathRecordTag drTag = new DeathRecordTag(); + drTag.setDeathRecordId(mtlb.getDeathRecordId()); + drTag.setContent(tag.getValue()); + drTag.setType(tag.getType()); + drTag.setKey(tag.getName()); + tags.add(drTag); + } + + + List mtlbTagList = rvfourDeathMtlbTagRepository.findByRvfourDeathMtlbId(mtlb.getId()); + for (RvfourDeathMtlbTag tag : mtlbTagList) { + DeathRecordTag vt = new DeathRecordTag(); + vt.setDeathRecordId(mtlb.getDeathRecordId()); + vt.setContent(tag.getContent()); + vt.setType(tag.getType()); + vt.setKey(tag.getKey()); + tags.add(vt); + } + ArrayList notes = new ArrayList<>(); + for (ArchideMtlbAnnexLogEntry note : annex.getNotes()) { + DeathRecordNote vn = new DeathRecordNote(); + vn.setAddedBy(note.getAuthor()); + vn.setContent(note.getContent()); + vn.setTimestamp(note.getTimestamp()); + vn.setDeathRecordId(mtlb.getDeathRecordId()); + notes.add(vn); + } + try { + for (DeathRecordTag tag : tags) + deathRecordTagRepository.insert(tag); + Long id = deathRecordRepository.insert(dr); + if (id != null) + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + for (DeathRecordNote note : notes) + deathRecordNoteRepository.insert(note); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/systems/archide/core/workflows/RvfourDivorceMtlbSubmitted.java b/src/main/java/systems/archide/core/workflows/RvfourDivorceMtlbSubmitted.java new file mode 100644 index 0000000..0e8414a --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/RvfourDivorceMtlbSubmitted.java @@ -0,0 +1,226 @@ +package systems.archide.core.workflows; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import systems.archide.core.pojo.ArchideMtlbAnnex; +import systems.archide.core.pojo.ArchideMtlbAnnexLogEntry; +import systems.archide.core.pojo.ArchideMtlbAnnexTag; +import systems.archide.core.pojo.ArchideMtlbAnnexUtil; +import systems.archide.core.pojo.GlobalState; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.RvfourDivorceMtlb; +import systems.archide.core.pojo.UnionMtlb; +import systems.archide.core.pojo.UnionMtlbTag; +import systems.archide.core.pojo.UnionRecord; +import systems.archide.core.pojo.UnionRecordMention; +import systems.archide.core.pojo.UnionRecordTag; +import systems.archide.core.repository.GlobalStateRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.RvfourDivorceMtlbRepository; +import systems.archide.core.repository.UnionMtlbRepository; +import systems.archide.core.repository.UnionMtlbTagRepository; +import systems.archide.core.repository.UnionRecordMentionRepository; +import systems.archide.core.repository.UnionRecordRepository; +import systems.archide.core.repository.UnionRecordTagRepository; +import systems.archide.core.workflows.utils.CustomErrorCodes; +import systems.archide.core.workflows.utils.Utils; + +@Component +public class RvfourDivorceMtlbSubmitted { + + private static final Logger log = LoggerFactory.getLogger(RvfourMarriageMtlbSubmitted.class); + + @Autowired + GlobalStateRepository globalStateRepository; + + @Autowired + RvfourDivorceMtlbRepository rvfourDivorceMtlbRepository; + + @Autowired + UnionRecordRepository unionRecordRepository; + + @Autowired + UnionRecordMentionRepository unionRecordMentionRepository; + + @Autowired + UnionRecordTagRepository unionRecordTagRepository; + + @Autowired + UnionMtlbRepository unionMtlbRepository; + + @Autowired + UnionMtlbTagRepository unionMtlbTagRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Autowired + Utils utils; + + @Scheduled(fixedDelay = 5000) + public void fromSubmittedStatus() { + GlobalState migrationState = globalStateRepository.findByKey("migration"); + List mtlbList = queries.getRandomRv4DivorceMtlbByMtlbStatus(MtlbStatus.SUBMITTED.getValue()); + if (mtlbList.size() > 0) { + log.info("Read {} newly submitted rv4 divorce applications", mtlbList.size()); + for (RvfourDivorceMtlb mtlb : mtlbList) { + switch (mtlb.getMtlbType()) { + case RV4_UNION_RECORD: + createUnionRecord(mtlb, migrationState); + break; + case RV4_DIVORCE_APPLICATION: + createDivorceApplication(mtlb, migrationState); + break; + case RV4_UNION_RECORD_TRASH: + createUnionRecordTrash(mtlb); + break; + } + rvfourDivorceMtlbRepository.save(mtlb); + + } + } + } + + private void createUnionRecordTrash(RvfourDivorceMtlb mtlb) { + // TODO Auto-generated method stub + + } + + private void createDivorceApplication(RvfourDivorceMtlb mtlb, GlobalState migrationState) { + UnionMtlb um = new UnionMtlb(); + ArrayList tags = new ArrayList(); + um.setDraft(false); + um.setMtlbStatus(MtlbStatus.SUBMITTED); + um.setMtlbType(MtlbType.DIVORCE); + int unionRecordStatus = utils.checkVitalRecordStatus(mtlb.getUnionRecordId(), migrationState); + UnionRecord ur = null; + if (unionRecordStatus == Utils.FOUND) + ur = unionRecordRepository.findById(mtlb.getUnionRecordId()); + else if (unionRecordStatus == Utils.UNKNOWN || unionRecordStatus == Utils.FOUND_BUT_UNION_RECORD_NOT_CREATED_YET) + return; + else if (unionRecordStatus == Utils.CONFIRMED_MISSING) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setContent(CustomErrorCodes.UNION_RECORD_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + um.setDateOfEffect(mtlb.getDateOfEffect()); + um.setDateOfOrder(mtlb.getDateOfOrder()); + if (ur != null) { + um.setPartner1VitalRecordId(ur.getPartner1VitalRecordId()); + um.setPartner2VitalRecordId(ur.getPartner2VitalRecordId()); + um.setPartner1Firstname(ur.getPartner1Firstname()); + um.setPartner2Firstname(ur.getPartner2Firstname()); + um.setPartner1Surname(ur.getPartner1Surname()); + um.setPartner2Surname(ur.getPartner2Surname()); + } + ArchideMtlbAnnex annex = null; + try { + if (mtlb.getAnnex() != null) + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + e1.printStackTrace(); + } + + if (annex != null) { + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + UnionMtlbTag umTag = new UnionMtlbTag(); + umTag.setContent(tag.getValue()); + umTag.setType(tag.getType()); + umTag.setKey(tag.getName()); + tags.add(umTag); + } + if (annex.getMentions() != null) + for (ArchideMtlbAnnexLogEntry mention : annex.getMentions()) { + if ("Annulment Order".equals(mention.getAuthor())) + um.setAnnullmentOrder(mention.getContent()); + } + } + try { + Long id = unionMtlbRepository.insert(um); + for (UnionMtlbTag tag : tags) { + tag.setUnionMtlbId(id); + unionMtlbTagRepository.insert(tag); + } + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + private void createUnionRecord(RvfourDivorceMtlb mtlb, GlobalState migrationState) { + ArrayList tags = new ArrayList(); + int unionRecordStatus = utils.checkVitalRecordStatus(mtlb.getUnionRecordId(), migrationState); + UnionRecord ur = null; + if (unionRecordStatus == Utils.FOUND) + ur = unionRecordRepository.findById(mtlb.getUnionRecordId()); + else if (unionRecordStatus == Utils.UNKNOWN || unionRecordStatus == Utils.FOUND_BUT_UNION_RECORD_NOT_CREATED_YET) + return; + else if (unionRecordStatus == Utils.CONFIRMED_MISSING) { + ur = new UnionRecord(); + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getUnionRecordId()); + tag.setContent(CustomErrorCodes.UNION_RECORD_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + ur.setId(mtlb.getUnionRecordId()); + ur.setDateOfEffect(mtlb.getDateOfEffect()); + ur.setDateOfOrder(mtlb.getDateOfOrder()); + } + ArchideMtlbAnnex annex = null; + ArrayList mentions = new ArrayList<>(); + if (mtlb.getAnnex() != null) + try { + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + e1.printStackTrace(); + } + if (annex != null) { + if (annex.getTags() != null) + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + UnionRecordTag urTag = new UnionRecordTag(); + urTag.setUnionRecordId(mtlb.getUnionRecordId()); + urTag.setContent(tag.getValue()); + urTag.setType(tag.getType()); + urTag.setKey(tag.getName()); + tags.add(urTag); + } + for (ArchideMtlbAnnexLogEntry mention : annex.getMentions()) { + UnionRecordMention vm = new UnionRecordMention(); + vm.setAddedBy(mention.getAuthor()); + vm.setContent(mention.getContent()); + vm.setTimestamp(mention.getTimestamp()); + vm.setUnionRecordId(mtlb.getUnionRecordId()); + mentions.add(vm); + if ("Annulment Order".equals(mention.getAuthor())) + ur.setAnnulmentOrder(mention.getContent()); + } + } + try { + unionRecordRepository.save(ur); + for (UnionRecordMention mention : mentions) + unionRecordMentionRepository.insert(mention); + for (UnionRecordTag tag : tags) + unionRecordTagRepository.insert(tag); + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } catch (Exception e) { + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/systems/archide/core/workflows/RvfourIdCardMtlbSubmitted.java b/src/main/java/systems/archide/core/workflows/RvfourIdCardMtlbSubmitted.java new file mode 100644 index 0000000..353d83c --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/RvfourIdCardMtlbSubmitted.java @@ -0,0 +1,146 @@ +package systems.archide.core.workflows; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.DeathRecordNote; +import systems.archide.core.pojo.DeathRecordTag; +import systems.archide.core.pojo.DocumentType; +import systems.archide.core.pojo.Face; +import systems.archide.core.pojo.GlobalState; +import systems.archide.core.pojo.IssuedDocuments; +import systems.archide.core.pojo.IssuedDocumentsTag; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.pojo.RvfourIdCardMtlb; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.FaceRepository; +import systems.archide.core.repository.GlobalStateRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.IssuedDocumentsRepository; +import systems.archide.core.repository.IssuedDocumentsTagRepository; +import systems.archide.core.repository.RvfourIdCardMtlbRepository; +import systems.archide.core.repository.VitalRecordRepository; +import systems.archide.core.workflows.utils.CustomErrorCodes; +import systems.archide.core.workflows.utils.Utils; + +@Component +public class RvfourIdCardMtlbSubmitted { + + private static final Logger log = LoggerFactory.getLogger(RvfourIdCardMtlbSubmitted.class); + + @Autowired + GlobalStateRepository globalStateRepository; + + @Autowired + RvfourIdCardMtlbRepository rvfourIdCardMtlbRepository; + + @Autowired + IssuedDocumentsRepository issuedDocumentsRepository; + + @Autowired + IssuedDocumentsTagRepository issuedDocumentsTagRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + FaceRepository faceRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Autowired + Utils utils; + + @Scheduled(fixedDelay = 5000) + public void fromSubmittedStatus() { + GlobalState migrationState = globalStateRepository.findByKey("migration"); + List mtlbList = queries.getRandomRv4IdCardMtlbByMtlbStatus(MtlbStatus.SUBMITTED.getValue()); + if (mtlbList.size() > 0) { + log.info("Read {} newly submitted rv4 ID Card applications", mtlbList.size()); + for (RvfourIdCardMtlb mtlb : mtlbList) { + createIssuedDocument(mtlb, migrationState); + rvfourIdCardMtlbRepository.save(mtlb); + } + } + } + + private void createIssuedDocument(RvfourIdCardMtlb mtlb, GlobalState migrationState) { + IssuedDocuments document = new IssuedDocuments(); + ArrayList tags = new ArrayList(); + int personRecordStatus = utils.checkVitalRecordStatus(mtlb.getVitalRecordId(), migrationState); + if (personRecordStatus == Utils.UNKNOWN || personRecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (personRecordStatus == Utils.CONFIRMED_MISSING) { + IssuedDocumentsTag tag = null; + tag = new IssuedDocumentsTag(); + tag.setContent(CustomErrorCodes.VITAL_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + else if (personRecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + IssuedDocumentsTag tag = null; + tag = new IssuedDocumentsTag(); + tag.setKey(CustomErrorCodes.RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getVitalRecordId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + if (personRecordStatus == Utils.FOUND) { + List faceList = faceRepository.findByVitalRecordId(mtlb.getVitalRecordId()); + VitalRecord vr = vitalRecordRepository.findById(mtlb.getVitalRecordId()); + if (!faceList.isEmpty()) + document.setFace(faceList.get(faceList.size() - 1).getImage()); + else { + IssuedDocumentsTag tag = null; + tag = new IssuedDocumentsTag(); + tag.setContent(CustomErrorCodes.NO_PICTURE_FOUND); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + String fullName=""; + if (!StringUtils.isAllBlank(vr.getFirstname())) + fullName = vr.getFirstname(); + if (!StringUtils.isAllBlank(vr.getSecondname())) + fullName = fullName.concat(" " + vr.getSecondname()); + if (!StringUtils.isAllBlank(vr.getThirdname())) + fullName = fullName.concat(" " + vr.getThirdname()); + if (!StringUtils.isAllBlank(vr.getFourthname())) + fullName = fullName.concat(" " + vr.getFourthname()); + document.setFullName(fullName); + } + document.setCancelledDate(mtlb.getCancelledDate()); + document.setCancelledReason(mtlb.getCancelledReason()); + document.setDocumentId(mtlb.getIdCardNumber()); + document.setDocumentType(DocumentType.ID_CARD); + document.setExpires(mtlb.getExpires()); + document.setIssuedDate(mtlb.getIssuedDate()); + document.setVitalRecordId(mtlb.getVitalRecordId()); + + try { + Long id = issuedDocumentsRepository.insert(document); + for (IssuedDocumentsTag tag : tags) { + tag.setIssuedDocumentsId(id); + issuedDocumentsTagRepository.insert(tag); + } + if (personRecordStatus == Utils.FOUND) { + VitalRecord vitalRecord = vitalRecordRepository.findById(mtlb.getVitalRecordId()); + vitalRecord.setCardId(id); + vitalRecordRepository.save(vitalRecord); + } + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/src/main/java/systems/archide/core/workflows/RvfourMarriageMtlbSubmitted.java b/src/main/java/systems/archide/core/workflows/RvfourMarriageMtlbSubmitted.java new file mode 100644 index 0000000..14d3940 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/RvfourMarriageMtlbSubmitted.java @@ -0,0 +1,440 @@ +package systems.archide.core.workflows; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import com.fasterxml.jackson.core.JsonProcessingException; + +import systems.archide.core.pojo.ArchideMtlbAnnex; +import systems.archide.core.pojo.ArchideMtlbAnnexLogEntry; +import systems.archide.core.pojo.ArchideMtlbAnnexTag; +import systems.archide.core.pojo.ArchideMtlbAnnexUtil; +import systems.archide.core.pojo.GlobalState; +import systems.archide.core.pojo.MtlbStatus; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.pojo.RvfourMarriageMtlb; +import systems.archide.core.pojo.UnionMtlb; +import systems.archide.core.pojo.UnionMtlbTag; +import systems.archide.core.pojo.UnionRecord; +import systems.archide.core.pojo.UnionRecordMention; +import systems.archide.core.pojo.UnionRecordTag; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.GlobalStateRepository; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.RvfourBirthMtlbRepository; +import systems.archide.core.repository.RvfourMarriageMtlbRepository; +import systems.archide.core.repository.UnionMtlbRepository; +import systems.archide.core.repository.UnionMtlbTagRepository; +import systems.archide.core.repository.UnionRecordMentionRepository; +import systems.archide.core.repository.UnionRecordRepository; +import systems.archide.core.repository.UnionRecordTagRepository; +import systems.archide.core.repository.VitalRecordRepository; +import systems.archide.core.workflows.utils.CustomErrorCodes; +import systems.archide.core.workflows.utils.Utils; + +@Component +public class RvfourMarriageMtlbSubmitted { + + private static final Logger log = LoggerFactory.getLogger(RvfourMarriageMtlbSubmitted.class); + + @Autowired + GlobalStateRepository globalStateRepository; + + @Autowired + RvfourMarriageMtlbRepository rvfourMarriageMtlbRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + UnionRecordTagRepository unionRecordTagRepository; + + @Autowired + UnionRecordRepository unionRecordRepository; + + @Autowired + UnionRecordMentionRepository unionRecordMentionRepository; + + @Autowired + RvfourBirthMtlbRepository rvfourBirthMtlbRepository; + + @Autowired + UnionMtlbRepository unionMtlbRepository; + + @Autowired + UnionMtlbTagRepository unionMtlbTagRepository; + + @Autowired + IdcoreCustomQueries queries; + + @Autowired + Utils utils; + + @Scheduled(fixedDelay = 5000) + public void fromSubmittedStatus() { + GlobalState migrationState = globalStateRepository.findByKey("migration"); + List mtlbList = queries.getRandomRv4MarriageMtlbByMtlbStatus(MtlbStatus.SUBMITTED.getValue()); + if (mtlbList.size() > 0) { + log.info("Read {} newly submitted rv4 marriage applications", mtlbList.size()); + for (RvfourMarriageMtlb mtlb : mtlbList) { + switch (mtlb.getMtlbType()) { + case RV4_UNION_RECORD: + createUnionRecord(mtlb, migrationState); + break; + case RV4_MARRIAGE_APPLICATION: + createMarriageApplication(mtlb, migrationState); + break; + case RV4_UNION_RECORD_TRASH: + createUnionRecordTrash(mtlb); + break; + } + rvfourMarriageMtlbRepository.save(mtlb); + + } + } + } + + private void createUnionRecordTrash(RvfourMarriageMtlb mtlb) { + // TODO Auto-generated method stub + + } + + private void createMarriageApplication(RvfourMarriageMtlb mtlb, GlobalState migrationState) { + UnionMtlb um = new UnionMtlb(); + ArrayList tags = new ArrayList(); + um.setDraft(false); + um.setMtlbStatus(MtlbStatus.SUBMITTED); + um.setMtlbType(MtlbType.MARRIAGE); + int hrecordStatus = utils.checkVitalRecordStatus(mtlb.getHusbandId(), migrationState); + VitalRecord hvr = null; + if (hrecordStatus == Utils.FOUND) { + hvr = vitalRecordRepository.findById(mtlb.getHusbandId()); + um.setPartner1Firstname(hvr.getFirstname()); + um.setPartner1Surname(hvr.getFourthname()); + } + else if (hrecordStatus == Utils.UNKNOWN || hrecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (hrecordStatus == Utils.CONFIRMED_MISSING) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setContent(CustomErrorCodes.HUSBAND_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + else if (hrecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setKey(CustomErrorCodes.HUSBAND_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getHusbandId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + RvfourBirthMtlb rvfourBirthMtlb = rvfourBirthMtlbRepository.findByVitalRecordId(mtlb.getHusbandId()); + if (rvfourBirthMtlb != null) { + um.setPartner1Firstname(rvfourBirthMtlb.getFirstname()); + um.setPartner1Surname(rvfourBirthMtlb.getFourthname()); + } + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + int wifeRecordStatus = utils.checkVitalRecordStatus(mtlb.getWifeId(), migrationState); + VitalRecord wvr = null; + if (wifeRecordStatus == Utils.FOUND) { + wvr = vitalRecordRepository.findById(mtlb.getWifeId()); + um.setPartner2Firstname(wvr.getFirstname()); + um.setPartner2Surname(wvr.getFourthname()); + } + else if (wifeRecordStatus == Utils.UNKNOWN || wifeRecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (wifeRecordStatus == Utils.CONFIRMED_MISSING) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setContent(CustomErrorCodes.WIFE_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + else if (wifeRecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setKey(CustomErrorCodes.Wife_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getWifeId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + RvfourBirthMtlb rvfourBirthMtlb = rvfourBirthMtlbRepository.findByVitalRecordId(mtlb.getWifeId()); + if (rvfourBirthMtlb != null) { + um.setPartner2Firstname(rvfourBirthMtlb.getFirstname()); + um.setPartner2Surname(rvfourBirthMtlb.getFourthname()); + } + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + int witness1RecordStatus = utils.checkVitalRecordStatus(mtlb.getWitness1Id(), migrationState); + if (witness1RecordStatus == Utils.UNKNOWN || witness1RecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (witness1RecordStatus == Utils.CONFIRMED_MISSING) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setContent(CustomErrorCodes.WITNESS1_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + else if (witness1RecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setKey(CustomErrorCodes.WITNESS1_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getWitness1Id().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + int witness2RecordStatus = utils.checkVitalRecordStatus(mtlb.getWitness2Id(), migrationState); + if (witness2RecordStatus == Utils.UNKNOWN || witness2RecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (witness2RecordStatus == Utils.CONFIRMED_MISSING) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setContent(CustomErrorCodes.WITNESS2_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + else if (witness2RecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionMtlbTag tag = null; + tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setKey(CustomErrorCodes.WITNESS2_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getWitness2Id().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + um.setId(mtlb.getId()); + um.setAddress(mtlb.getMarriageLocation()); + um.setPlace(mtlb.getMarriagePlace()); + um.setPartner1VitalRecordId(mtlb.getHusbandId()); + um.setPartner2VitalRecordId(mtlb.getWifeId()); + um.setDeclaredDate(mtlb.getDateOfMarriage()); + um.setWitness1VitalRecordId(mtlb.getWitness1Id()); + um.setWitness2VitalRecordId(mtlb.getWitness2Id()); + um.setRites(mtlb.getMarriageRites()); + um.setTimeOfMarriage(mtlb.getTimeOfMarriage()); + if (hvr != null && wvr != null) { + if (hvr.getGender() == 2 && wvr.getGender() == 1) { + um.setPartner1VitalRecordId(wvr.getId()); + um.setPartner2VitalRecordId(hvr.getId()); + } else if (hvr.getGender() == wvr.getGender()) { + UnionMtlbTag tag = new UnionMtlbTag(); + tag.setUnionMtlbId(mtlb.getId()); + tag.setContent(hvr.getId() + " : " + wvr.getId()); + tag.setType(Utils.ERROR_TAG_TYPE); + tag.setKey(CustomErrorCodes.SAME_SEX_MARRIAGE); + tags.add(tag); + um.setMtlbStatus(MtlbStatus.MANUAL_CHECK); + } + } + ArchideMtlbAnnex annex = null; + try { + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if (annex.getTags() != null) + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + UnionMtlbTag umTag = new UnionMtlbTag(); + umTag.setUnionMtlbId(mtlb.getId()); + umTag.setContent(tag.getValue()); + umTag.setType(tag.getType()); + umTag.setKey(tag.getName()); + tags.add(umTag); + } + try { + unionMtlbRepository.insert(um); + for (UnionMtlbTag tag : tags) + unionMtlbTagRepository.insert(tag); + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void createUnionRecord(RvfourMarriageMtlb mtlb, GlobalState migrationState) { + UnionRecord ur = new UnionRecord(); + ArrayList tags = new ArrayList(); + + int hrecordStatus = utils.checkVitalRecordStatus(mtlb.getHusbandId(), migrationState); + VitalRecord hvr = null; + if (hrecordStatus == Utils.FOUND) { + hvr = vitalRecordRepository.findById(mtlb.getHusbandId()); + ur.setPartner1Firstname(hvr.getFirstname()); + ur.setPartner1Surname(hvr.getFourthname()); + } + else if (hrecordStatus == Utils.UNKNOWN || hrecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (hrecordStatus == Utils.CONFIRMED_MISSING) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setContent(CustomErrorCodes.HUSBAND_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + else if (hrecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setKey(CustomErrorCodes.HUSBAND_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getHusbandId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + RvfourBirthMtlb rvfourBirthMtlb = rvfourBirthMtlbRepository.findByVitalRecordId(mtlb.getHusbandId()); + if (rvfourBirthMtlb != null) { + ur.setPartner1Firstname(rvfourBirthMtlb.getFirstname()); + ur.setPartner1Surname(rvfourBirthMtlb.getFourthname()); + } + } + int wifeRecordStatus = utils.checkVitalRecordStatus(mtlb.getWifeId(), migrationState); + VitalRecord wvr = null; + if (wifeRecordStatus == Utils.FOUND) { + wvr = vitalRecordRepository.findById(mtlb.getWifeId()); + ur.setPartner2Firstname(wvr.getFirstname()); + ur.setPartner2Surname(wvr.getFourthname()); + } + else if (wifeRecordStatus == Utils.UNKNOWN || wifeRecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (wifeRecordStatus == Utils.CONFIRMED_MISSING) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setContent(CustomErrorCodes.WIFE_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + else if (wifeRecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setKey(CustomErrorCodes.Wife_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getWifeId().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + RvfourBirthMtlb rvfourBirthMtlb = rvfourBirthMtlbRepository.findByVitalRecordId(mtlb.getWifeId()); + if (rvfourBirthMtlb != null) { + ur.setPartner2Firstname(rvfourBirthMtlb.getFirstname()); + ur.setPartner2Surname(rvfourBirthMtlb.getFourthname()); + } + } + int witness1RecordStatus = utils.checkVitalRecordStatus(mtlb.getWitness1Id(), migrationState); + if (witness1RecordStatus == Utils.UNKNOWN || witness1RecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (witness1RecordStatus == Utils.CONFIRMED_MISSING) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setContent(CustomErrorCodes.WITNESS1_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + else if (witness1RecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setKey(CustomErrorCodes.WITNESS1_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getWitness1Id().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + int witness2RecordStatus = utils.checkVitalRecordStatus(mtlb.getWitness2Id(), migrationState); + if (witness2RecordStatus == Utils.UNKNOWN || witness2RecordStatus == Utils.FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET) + return; + else if (witness2RecordStatus == Utils.CONFIRMED_MISSING) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setContent(CustomErrorCodes.WITNESS2_RECORD_ID_MISSING); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + else if (witness2RecordStatus == Utils.FOUND_AS_FAMILY_TREE_RECORD) { + UnionRecordTag tag = null; + tag = new UnionRecordTag(); + tag.setUnionRecordId(mtlb.getId()); + tag.setKey(CustomErrorCodes.WITNESS2_RECORD_FOUND_IN_FAMILY_TREE); + tag.setContent(mtlb.getWitness2Id().toString()); + tag.setType(Utils.ERROR_TAG_TYPE); + tags.add(tag); + } + ur.setId(mtlb.getId()); + ur.setAddress(mtlb.getMarriageLocation()); + ur.setPlace(mtlb.getMarriagePlace()); + ur.setPartner1VitalRecordId(mtlb.getHusbandId()); + ur.setPartner2VitalRecordId(mtlb.getWifeId()); + ur.setDateOfMarriage(mtlb.getDateOfMarriage()); + ur.setFirstWitnessId(mtlb.getWitness1Id()); + ur.setSecondWitnessId(mtlb.getWitness2Id()); + ur.setRites(mtlb.getMarriageRites()); + ur.setTimeOfMarriage(mtlb.getTimeOfMarriage()); + if (hvr != null && wvr != null) { + if (hvr.getGender() == 2 && wvr.getGender() == 1) { + ur.setPartner1VitalRecordId(wvr.getId()); + ur.setPartner2VitalRecordId(hvr.getId()); + } else if (hvr.getGender() == wvr.getGender()) { + UnionRecordTag urTag = new UnionRecordTag(); + urTag.setUnionRecordId(mtlb.getId()); + urTag.setContent(hvr.getId() + " : " + wvr.getId()); + urTag.setType(Utils.ERROR_TAG_TYPE); + urTag.setKey(CustomErrorCodes.SAME_SEX_MARRIAGE); + tags.add(urTag); + } + } + ArchideMtlbAnnex annex = null; + try { + annex = ArchideMtlbAnnexUtil.deserialize(mtlb.getAnnex()); + } catch (JsonProcessingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if (annex.getTags() != null) + for (ArchideMtlbAnnexTag tag : annex.getTags()) { + UnionRecordTag urTag = new UnionRecordTag(); + urTag.setUnionRecordId(mtlb.getId()); + urTag.setContent(tag.getValue()); + urTag.setType(tag.getType()); + urTag.setKey(tag.getName()); + tags.add(urTag); + } + ArrayList mentions = new ArrayList<>(); + for (ArchideMtlbAnnexLogEntry mention : annex.getMentions()) { + UnionRecordMention vm = new UnionRecordMention(); + vm.setAddedBy(mention.getAuthor()); + vm.setContent(mention.getContent()); + vm.setTimestamp(mention.getTimestamp()); + vm.setUnionRecordId(mtlb.getId()); + mentions.add(vm); + } + try { + unionRecordRepository.insert(ur); + for (UnionRecordMention mention : mentions) + unionRecordMentionRepository.insert(mention); + for (UnionRecordTag tag : tags) + unionRecordTagRepository.insert(tag); + mtlb.setMtlbStatus(MtlbStatus.ARCHIVED); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/systems/archide/core/workflows/utils/AgeCalculator.java b/src/main/java/systems/archide/core/workflows/utils/AgeCalculator.java new file mode 100644 index 0000000..6292ea4 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/utils/AgeCalculator.java @@ -0,0 +1,16 @@ +package systems.archide.core.workflows.utils; + + +import java.time.LocalDate; +import java.time.Period; + +public class AgeCalculator { + + public static int calculateAge(LocalDate birthDate, LocalDate currentDate) { + if ((birthDate != null) && (currentDate != null)) { + return Period.between(birthDate, currentDate).getYears(); + } else { + return 0; + } + } +} \ No newline at end of file diff --git a/src/main/java/systems/archide/core/workflows/utils/CivilStatusMtlbUtils.java b/src/main/java/systems/archide/core/workflows/utils/CivilStatusMtlbUtils.java new file mode 100644 index 0000000..a09c5f4 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/utils/CivilStatusMtlbUtils.java @@ -0,0 +1,470 @@ +package systems.archide.core.workflows.utils; + + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import systems.archide.core.ErrorCodes; +import systems.archide.core.pojo.*; +import systems.archide.core.repository.*; + +import java.io.IOException; +import java.sql.Connection; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.util.List; + +@Component +public class CivilStatusMtlbUtils { + + final String ERROR_TAG_TYPE = "ERROR"; + + + + @Autowired + IdcoreCustomQueries customQueries; + @Autowired + CivilStatusMtlbRepository civilStatusMtlbRepository; + @Autowired + CivilStatusMtlbTagRepository civilStatusMtlbTagRepository; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + CivilStatusMtlbAttachmentRepository civilStatusMtlbAttachmentRepository; + + @Autowired + VitalRecordMedicalNotificationFileRepository vitalRecordMedicalNotificationFileRepository; + + @Autowired + CivilStatusMtlbMedicalNotificationFileRepository civilStatusMtlbMedicalNotificationFileRepository; + + @Autowired + AddressRepository addressRepository; + + @Autowired + EmailRepository emailRepository; + + @Autowired + PhoneNumberRepository phoneNumberRepository; + + @Autowired + FaceRepository faceRepository; + + @Autowired + VitalRecordAttachmentRepository vitalRecordAttachmentRepository; + + @Autowired + DigitalizationQueueRepository digitalizationQueueRepository; + + @Autowired + CivilStatusMtlbNoteRepository civilStatusMtlbNoteRepository; + + @Autowired + VitalRecordNoteRepository vitalRecordNoteRepository; + + @Autowired + VitalRecordHistoryRepository vitalRecordHistoryRepository; + + @Autowired + VitalRecordTagRepository vitalRecordTagRepository; + + @Autowired + VitalRecordTagHistoryRepository vitalRecordTagHistoryRepository; + + public boolean mtlbWithoutFingerprints(CivilStatusMtlb mtlb) { + return mtlb.getRightThumb() == null && mtlb.getRightIndexFinger() == null && mtlb.getRightMiddleFinger() == null + && mtlb.getRightRingFinger() == null && mtlb.getRightPinky() == null && mtlb.getLeftThumb() == null + && mtlb.getLeftIndexFinger() == null && mtlb.getLeftMiddleFinger() == null + && mtlb.getLeftRingFinger() == null && mtlb.getLeftPinky() == null; + } + + public boolean validateBiographic(CivilStatusMtlb mtlb) { + boolean validName = validateName(mtlb); + boolean validGenderAndBirthDate = validateGenderAndBirthDate(mtlb); + boolean validAddress = validateAddress(mtlb); + boolean validMedicalNotification = validateMedicalNotification(mtlb); + boolean validFatherAndMother = validateFatherAndMother(mtlb); + return validName && validGenderAndBirthDate && validAddress && validMedicalNotification && validFatherAndMother; + } + + private boolean validateFatherAndMother(CivilStatusMtlb mtlb) { + boolean valid = true; + if (mtlb.getMotherId() != null + || (mtlb.getReportedMotherName() != null && !mtlb.getReportedMotherName().isEmpty())) { + if (mtlb.getMotherId() != null) { + VitalRecord motherRecord = vitalRecordRepository.findById(mtlb.getMotherId()); + if (motherRecord == null) { + createErrorTag(ErrorCodes.MOTHER_NOT_FOUND, mtlb.getId()); + valid = false; + } + } + } else if (!mtlb.isUnknownMother()) { + createErrorTag(ErrorCodes.MOTHER_NOT_FOUND, mtlb.getId()); + valid = false; + } + if (mtlb.getFatherId() != null + || (mtlb.getReportedFatherName() != null && !mtlb.getReportedFatherName().isEmpty())) { + if (mtlb.getFatherId() != null) { + VitalRecord fatherRecord = vitalRecordRepository.findById(mtlb.getFatherId()); + if (fatherRecord == null) { + createErrorTag(ErrorCodes.FATHER_NOT_FOUND, mtlb.getId()); + valid = false; + } + } + } else if (!mtlb.isUnknownFather()) { + createErrorTag(ErrorCodes.FATHER_NOT_FOUND, mtlb.getId()); + valid = false; + } + + return valid; + } + + private boolean validateMedicalNotification(CivilStatusMtlb mtlb) { + if (!mtlb.isMedicalNotification() || mtlb.isMedicalNotification() == null) { + if (mtlb.getWitness1Id() == null || mtlb.getWitness2Id() == null) { + createErrorTag(ErrorCodes.WITNESSES_MISSING, mtlb.getId()); + return false; + } + } else { + boolean attachmentExists = checkAttachments(mtlb); + if (!attachmentExists) + if (mtlb.getWitness1Id() == null || mtlb.getWitness2Id() == null) { + createErrorTag(ErrorCodes.WITNESSES_MISSING, mtlb.getId()); + return false; + } + } + return true; + } + + private boolean checkAttachments(CivilStatusMtlb mtlb) { + List attachmentList = civilStatusMtlbMedicalNotificationFileRepository + .findByCivilStatusMtlbId(mtlb.getId()); + if (attachmentList.isEmpty()) + return false; + return true; + } + + private boolean validateAddress(CivilStatusMtlb mtlb) { + List
addressList = addressRepository.findByCivilStatusMtlbId(mtlb.getId()); + if (addressList.isEmpty()) { + createErrorTag(ErrorCodes.ADDRESS_MISSING, mtlb.getId()); + return false; + } + return true; + } + + private boolean validateGenderAndBirthDate(CivilStatusMtlb mtlb) { + boolean valid = true; + if (mtlb.getGender() == null) { + createErrorTag(ErrorCodes.GENDER_MISSING, mtlb.getId()); + valid = false; + } + if (mtlb.getBirthdate() == null) { + createErrorTag(ErrorCodes.BIRTH_DATE_MISSING, mtlb.getId()); + valid = false; + } + return valid; + } + + private boolean validateName(CivilStatusMtlb mtlb) { + boolean valid = true; + if (StringUtils.isAllBlank(mtlb.getFirstname())) { + createErrorTag(ErrorCodes.FIRST_NAME_MISSING, mtlb.getId()); + valid = false; + } + if (StringUtils.isAllBlank(mtlb.getFourthname())) { + createErrorTag(ErrorCodes.FAMILY_NAME_MISSING, mtlb.getId()); + valid = false; + } + String match = "^[A-Z�-�][A-Za-z�-�]{2,14}$"; + String middleNameMatch = "^[A-Z�-�][A-Za-z�-�]{2,28}$"; + if (mtlb.getFirstname() != null) + if (!mtlb.getFirstname().matches(match)) { + createErrorTag(ErrorCodes.FIRST_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (mtlb.getSecondname() != null) + if (!mtlb.getSecondname().matches(middleNameMatch)) { + createErrorTag(ErrorCodes.SECOND_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (mtlb.getThirdname() != null) + if (!mtlb.getThirdname().matches(match)) { + createErrorTag(ErrorCodes.THIRD_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (mtlb.getFourthname() != null) + if (!mtlb.getFourthname().matches(match)) { + createErrorTag(ErrorCodes.FAMILY_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (mtlb.getFifthname() != null) + if (!mtlb.getFifthname().matches(match)) { + createErrorTag(ErrorCodes.MARRIAGE_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + return valid; + } + + public void createErrorTag(String errorCode, Long mtlbId) { + CivilStatusMtlbTag tag = new CivilStatusMtlbTag(); + tag.setContent(errorCode); + tag.setType(ERROR_TAG_TYPE); + tag.setCivilStatusMtlbId(mtlbId); + civilStatusMtlbTagRepository.insert(tag); + } + + public void createErrorTag(String errorCode, Long mtlbId, String type) { + CivilStatusMtlbTag tag = new CivilStatusMtlbTag(); + tag.setContent(errorCode); + tag.setType(type); + tag.setCivilStatusMtlbId(mtlbId); + civilStatusMtlbTagRepository.insert(tag); + } + + public boolean validateNoExistingCivilStatusMtlbFirstNameAndFourthName(CivilStatusMtlb mtlb) { + List civilMtlIdList = customQueries + .findCivilStatusMtlbByFirstnameAndFourthname(mtlb.getFirstname(), mtlb.getFourthname(), mtlb.getId()); + if (civilMtlIdList.isEmpty()) + return true; + else + createErrorTag(ErrorCodes.BIRTH_APPLICATION_FIRSTNAME_FOURTHNAME_DUPLICATED, mtlb.getId()); + return true; + } + + public boolean validateNoExistingVitalRecordFirstNameAndFourthName(CivilStatusMtlb mtlb) { + List vitalRecordIdList = customQueries.findVitalRecordByFirstnameAndFourthname(mtlb.getFirstname(), + mtlb.getFourthname(), mtlb.getId()); + if (vitalRecordIdList.isEmpty()) + return true; + else + createErrorTag(ErrorCodes.BIRTH_VITALRECORD_FIRSTNAME_FOURTHNAME_DUPLICATED, mtlb.getId()); + return true; + } + + public boolean validateNoExistingCivilStatusMtlbOrVitalRecordFirstNameAndFourthName(CivilStatusMtlb mtlb) { + return validateNoExistingCivilStatusMtlbFirstNameAndFourthName(mtlb) + && validateNoExistingVitalRecordFirstNameAndFourthName(mtlb); + } + + public boolean validateNoExistingSimilarBReq(CivilStatusMtlb mtlb) { + List civilMtlIdList = customQueries.findCivilStatusMtlbByBirthdateAndMotherIdAndType( + mtlb.getMotherId(), mtlb.getMtlbType().getValue(), mtlb.getBirthdate(), mtlb.getId()); + List vitalRecordIdList = customQueries.findVitalRecordByBirthdateAndMotherId(mtlb.getMotherId(), + mtlb.getBirthdate(), mtlb.getId()); + if (civilMtlIdList.isEmpty() && vitalRecordIdList.isEmpty()) + return true; + if (!civilMtlIdList.isEmpty()) + createErrorTag(ErrorCodes.BIRTH_APPLICATION_DUPLICATED, mtlb.getId()); + if (!vitalRecordIdList.isEmpty()) + createErrorTag(ErrorCodes.BIRTH_VITALRECORD_DUPLICATED, mtlb.getId()); + return true; + } + + public Long saveFace(byte[] image, Long vitalRecordId) { + Face face = new Face(); + face.setImage(image); + face.setVitalRecordId(vitalRecordId); + return faceRepository.insert(face); + } + + public Long createVitalRecordFromCivilStatusMtlb(CivilStatusMtlb mtlb) { + VitalRecord vitalRecord = new VitalRecord(); + mtlbToVitalRecord(mtlb, vitalRecord); + return vitalRecordRepository.insert(vitalRecord); + } + + public void addFace2VitalRecord(Long faceId, Long vitalRecordId) { + VitalRecord vitalRecord = vitalRecordRepository.findById(vitalRecordId); + vitalRecord.setFaceId(faceId); + vitalRecordRepository.update(vitalRecord); + } + + public void saveAttachments(Long mtlbId, Long vitalRecordId) { + List civilStatusMtlbAttachments = civilStatusMtlbAttachmentRepository + .findByCivilStatusMtlbId(mtlbId); + for (CivilStatusMtlbAttachment civilStatusMtlbAttachment : civilStatusMtlbAttachments) { + VitalRecordAttachment vitalRecordAttachment = new VitalRecordAttachment(); + vitalRecordAttachment.setFileName(civilStatusMtlbAttachment.getFileName()); + vitalRecordAttachment.setContent(civilStatusMtlbAttachment.getContent()); + vitalRecordAttachment.setVitalRecordId(vitalRecordId); + vitalRecordAttachment.setPreview(civilStatusMtlbAttachment.getPreview()); + vitalRecordAttachment.setDescription(civilStatusMtlbAttachment.getDescription()); + vitalRecordAttachmentRepository.insert(vitalRecordAttachment); + } + List medicalNotifList = civilStatusMtlbMedicalNotificationFileRepository + .findByCivilStatusMtlbId(mtlbId); + for (CivilStatusMtlbMedicalNotificationFile m : medicalNotifList) { + VitalRecordMedicalNotificationFile vitalRecordMedicalNotif = new VitalRecordMedicalNotificationFile(); + vitalRecordMedicalNotif.setFileName(m.getFileName()); + vitalRecordMedicalNotif.setContent(m.getContent()); + vitalRecordMedicalNotif.setVitalRecordId(vitalRecordId); + vitalRecordMedicalNotif.setDescription(m.getDescription()); + vitalRecordMedicalNotif.setPreview(m.getPreview()); + vitalRecordMedicalNotificationFileRepository.insert(vitalRecordMedicalNotif); + } + } + + public void saveVitalRecordAdminInfo(Long civilStatusMtlbId, Long vitalRecordId) { + List
addressList = addressRepository.findByCivilStatusMtlbId(civilStatusMtlbId); + List emailList = emailRepository.findByCivilStatusMtlbId(civilStatusMtlbId); + List phoneNumberList = phoneNumberRepository.findByCivilStatusMtlbId(civilStatusMtlbId); + for (Address address : addressList) { + address.setVitalRecordId(vitalRecordId); + addressRepository.update(address); + } + for (Email email : emailList) { + email.setVitalRecordId(vitalRecordId); + emailRepository.update(email); + } + for (PhoneNumber phone : phoneNumberList) { + phone.setVitalRecordId(vitalRecordId); + phoneNumberRepository.update(phone); + } + } + + public Long saveDeathRecordFace(byte[] image, Long deathRecordId) { + Face face = new Face(); + face.setImage(image); + face.setDeathRecordId(deathRecordId); + return faceRepository.insert(face); + } + + + public void deleteDigitalizationFromQueue(Long mtlbId) { + List civilStatusMtlbAttachments = civilStatusMtlbAttachmentRepository + .findByCivilStatusMtlbId(mtlbId); + for (CivilStatusMtlbAttachment civilStatusMtlbAttachment : civilStatusMtlbAttachments) { + List digitalizationQueues = digitalizationQueueRepository + .findByFileName(civilStatusMtlbAttachment.getFileName()); + for (DigitalizationQueue digitalizationQueue : digitalizationQueues) + digitalizationQueueRepository.deleteById(digitalizationQueue.getId()); + } + } + + public void mtlbToVitalRecord(CivilStatusMtlb mtlb, VitalRecord vitalRecord) { + vitalRecord.setFirstname(mtlb.getFirstname()); + vitalRecord.setSecondname(mtlb.getSecondname()); + vitalRecord.setThirdname(mtlb.getThirdname()); + vitalRecord.setFourthname(mtlb.getFourthname()); + vitalRecord.setFifthname(mtlb.getFifthname()); + vitalRecord.setBirthdate(mtlb.getBirthdate()); + vitalRecord.setBirthPlace(mtlb.getBirthPlace()); + vitalRecord.setBirthCountry(mtlb.getBirthCountry()); + vitalRecord.setBirthDayUnknown(mtlb.isBirthDayUnknown()); + vitalRecord.setBirthMonthUnknown(mtlb.isBirthMonthUnknown()); + vitalRecord.setBirthYearUnknown(mtlb.isBirthYearUnknown()); + vitalRecord.setGender(mtlb.getGender()); + vitalRecord.setDisability(mtlb.isDisability()); + vitalRecord.setMaritalStatus(mtlb.getMaritalStatus()); + vitalRecord.setNotes(mtlb.getNotes()); + vitalRecord.setPrimaryCitizenship(mtlb.getPrimaryCitizenship()); + vitalRecord.setOtherCitizenshipCsv(mtlb.getOtherCitizenshipCsv()); + vitalRecord.setFatherId(mtlb.getFatherId()); + vitalRecord.setMotherId(mtlb.getMotherId()); + vitalRecord.setReportedFatherName(mtlb.getReportedFatherName()); + vitalRecord.setReportedMotherName(mtlb.getReportedMotherName()); + vitalRecord.setInactive(false); + vitalRecord.setTypeOfAcquisition(mtlb.getTypeOfAcquisition()); + vitalRecord.setVillageOfOrigin(mtlb.getVillageOfOrigin()); + vitalRecord.setUnknownFather(mtlb.isUnknownFather()); + vitalRecord.setUnknownMother(mtlb.isUnknownMother()); + vitalRecord.setBirthTime(mtlb.getBirthTime()); + vitalRecord.setTimestamp(LocalDateTime.now()); + vitalRecord.setAdoptiveFatherId(mtlb.getAdoptiveFatherId()); + vitalRecord.setAdoptiveMotherId(mtlb.getAdoptiveMotherId()); + vitalRecord.setMarriageCertificateNumberAdoptive(mtlb.getMarriageCertificateNumberAdoptive()); + vitalRecord.setCourtAdoptionNumber(mtlb.getCourtAdoptionNumber()); + vitalRecord.setVillageOfOriginAdoptive(mtlb.getVillageOfOriginAdoptive()); + vitalRecord.setDeclarantId(mtlb.getDeclarantId()); + vitalRecord.setWitness1Id(mtlb.getWitness1Id()); + vitalRecord.setWitness2Id(mtlb.getWitness2Id()); + vitalRecord.setRegistrationLocation(mtlb.getRegistrationLocation()); + vitalRecord.setMentions(mtlb.getMentions()); + } + + public void updateVitalRecordFromCivilStatusMtlb(CivilStatusMtlb mtlb, VitalRecord vitalRecord) { + saveHistory(vitalRecord); + mtlbToVitalRecord(mtlb, vitalRecord); + vitalRecordRepository.update(vitalRecord); + } + + private void saveHistory(VitalRecord vitalRecord) { + VitalRecordHistory history = new VitalRecordHistory(); + history.setFirstname(vitalRecord.getFirstname()); + history.setFifthname(vitalRecord.getFifthname()); + history.setSecondname(vitalRecord.getSecondname()); + history.setThirdname(vitalRecord.getThirdname()); + history.setFourthname(vitalRecord.getFourthname()); + history.setBirthdate(vitalRecord.getBirthdate()); + history.setBirthPlace(vitalRecord.getBirthPlace()); + history.setBirthCountry(vitalRecord.getBirthCountry()); + history.setBirthDayUnknown(vitalRecord.isBirthDayUnknown()); + history.setBirthMonthUnknown(vitalRecord.isBirthMonthUnknown()); + history.setBirthYearUnknown(vitalRecord.isBirthYearUnknown()); + history.setGender(vitalRecord.getGender()); + history.setDisability(vitalRecord.isDisability()); + history.setMaritalStatus(vitalRecord.getMaritalStatus()); + history.setNotes(vitalRecord.getNotes()); + history.setPrimaryCitizenship(vitalRecord.getPrimaryCitizenship()); + history.setOtherCitizenshipCsv(vitalRecord.getOtherCitizenshipCsv()); + history.setFatherId(vitalRecord.getFatherId()); + history.setMotherId(vitalRecord.getMotherId()); + history.setReportedFatherName(vitalRecord.getReportedFatherName()); + history.setReportedMotherName(vitalRecord.getReportedMotherName()); + history.setInactive(false); + history.setHistoryTimestamp(LocalDateTime.now()); + history.setTimestamp(vitalRecord.getTimestamp()); + history.setId(vitalRecord.getId()); + history.setAdoptiveFatherId(vitalRecord.getAdoptiveFatherId()); + history.setAdoptiveMotherId(vitalRecord.getAdoptiveMotherId()); + history.setVillageOfOriginAdoptive(vitalRecord.getVillageOfOriginAdoptive()); + history.setMarriageCertificateNumberAdoptive(vitalRecord.getMarriageCertificateNumberAdoptive()); + history.setCourtAdoptionNumber(vitalRecord.getCourtAdoptionNumber()); + history.setDeclarantId(vitalRecord.getDeclarantId()); + history.setWitness1Id(vitalRecord.getWitness1Id()); + history.setWitness2Id(vitalRecord.getWitness2Id()); + vitalRecordHistoryRepository.insert(history); + } + + public void saveNotes(Long id, Long vitalRecordId) { + List cnoteList = civilStatusMtlbNoteRepository.findByCivilStatusMtlbId(id); + for (CivilStatusMtlbNote cnote : cnoteList) { + VitalRecordNote vnote = new VitalRecordNote(); + vnote.setAddedBy(cnote.getAddedBy()); + vnote.setContent(cnote.getContent()); + vnote.setTimestamp(cnote.getTimestamp()); + vnote.setVitalRecordId(vitalRecordId); + vitalRecordNoteRepository.insert(vnote); + } + + } + + public void deleteRecordAttachments(Long vitalRecordId) { + List attachmentList = vitalRecordAttachmentRepository.findByVitalRecordId(vitalRecordId); + List medicalNotificationFileList = vitalRecordMedicalNotificationFileRepository.findByVitalRecordId(vitalRecordId); + for (VitalRecordAttachment a : attachmentList) + vitalRecordAttachmentRepository.purge(a); + for (VitalRecordMedicalNotificationFile f : medicalNotificationFileList) + vitalRecordMedicalNotificationFileRepository.delete(f); + } + + public void saveVitalRecordHistoryTags(Long id) { + List recordTags = vitalRecordTagRepository.findByVitalRecordId(id); + if (!recordTags.isEmpty()) { + for (VitalRecordTag tag : recordTags) { + VitalRecordTagHistory htag = new VitalRecordTagHistory(); + htag.setContent(tag.getContent()); + htag.setKey(tag.getKey()); + htag.setId(tag.getId()); + htag.setType(tag.getType()); + htag.setVitalRecordId(tag.getVitalRecordId()); + vitalRecordTagHistoryRepository.insert(htag); + vitalRecordTagRepository.purgeById(tag.getId()); + } + } + + } +} diff --git a/src/main/java/systems/archide/core/workflows/utils/CustomErrorCodes.java b/src/main/java/systems/archide/core/workflows/utils/CustomErrorCodes.java new file mode 100644 index 0000000..c475522 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/utils/CustomErrorCodes.java @@ -0,0 +1,16 @@ +package systems.archide.core.workflows.utils; + +import systems.archide.core.ErrorCodes; + +public class CustomErrorCodes extends ErrorCodes{ + + public static final String RV4_FATHER_FAMILY_TREE_RECORD = "E20"; + public static final String RV4_MOTHER_FAMILY_TREE_RECORD = "E21"; + public static final String RECORD_FOUND_IN_FAMILY_TREE = "E22"; + public static final String HUSBAND_RECORD_FOUND_IN_FAMILY_TREE = "E25"; + public static final String Wife_RECORD_FOUND_IN_FAMILY_TREE = "E27"; + public static final String WITNESS1_RECORD_FOUND_IN_FAMILY_TREE = "E29"; + public static final String WITNESS2_RECORD_FOUND_IN_FAMILY_TREE = "E31"; + public static final String UNION_RECORD_MISSING = "E70"; + +} diff --git a/src/main/java/systems/archide/core/workflows/utils/MtlbEntity.java b/src/main/java/systems/archide/core/workflows/utils/MtlbEntity.java new file mode 100644 index 0000000..bcea0de --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/utils/MtlbEntity.java @@ -0,0 +1,40 @@ +package systems.archide.core.workflows.utils; + +import java.util.HashMap; +import java.util.Map; + +public enum MtlbEntity { + + CIVIL_STATUS_MTLB(1), + + ID_MTLB(2), + + UNION_MTLB(3); + + private java.lang.Integer value; + + MtlbEntity(java.lang.Integer value) { + this.value = value; + } + + public java.lang.Integer getValue() { + return this.value; + } + + private static final Map toTypeMap = new HashMap<>(); + static { + for (MtlbEntity type : MtlbEntity.values()) { + toTypeMap.put(type.value, type); + } + } + + public static MtlbEntity fromValue(java.lang.Integer val) { + if (val == null) + return null; + MtlbEntity mtlbEntity = toTypeMap.get(java.lang.Integer.valueOf(val)); + if (mtlbEntity == null) + throw new RuntimeException("Invalid value for MtlbEntity: " + val); + return mtlbEntity; + } + +} diff --git a/src/main/java/systems/archide/core/workflows/utils/RvFourBirthMtlbUtils.java b/src/main/java/systems/archide/core/workflows/utils/RvFourBirthMtlbUtils.java new file mode 100644 index 0000000..7c5dac9 --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/utils/RvFourBirthMtlbUtils.java @@ -0,0 +1,103 @@ +package systems.archide.core.workflows.utils; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import systems.archide.core.ErrorCodes; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.pojo.RvfourBirthMtlbTag; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.IdcoreCustomQueries; +import systems.archide.core.repository.RvfourBirthMtlbTagRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@Component +public class RvFourBirthMtlbUtils { + + final String ERROR_TAG_TYPE = "ERROR"; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + IdcoreCustomQueries customQueries; + + @Autowired + RvfourBirthMtlbTagRepository rvfourBirthMtlbTagRepository; + + public boolean validateBiographic(RvfourBirthMtlb mtlb) { + boolean validName = validateName(mtlb); + boolean validGenderAndBirthDate = validateGenderAndBirthDate(mtlb); + return validName && validGenderAndBirthDate; + } + + + private boolean validateGenderAndBirthDate(RvfourBirthMtlb mtlb) { + boolean valid = true; + if (mtlb.getGender() == null) { + createErrorTag(ErrorCodes.GENDER_MISSING, mtlb.getId()); + valid = false; + } + if (mtlb.getBirthdate() == null) { + createErrorTag(ErrorCodes.BIRTH_DATE_MISSING, mtlb.getId()); + valid = false; + } + return valid; + } + + private boolean validateName(RvfourBirthMtlb mtlb) { + boolean valid = true; + if (StringUtils.isAllBlank(mtlb.getFirstname())) { + createErrorTag(ErrorCodes.FIRST_NAME_MISSING, mtlb.getId()); + valid = false; + } + if (StringUtils.isAllBlank(mtlb.getFourthname())) { + createErrorTag(ErrorCodes.FAMILY_NAME_MISSING, mtlb.getId()); + valid = false; + } + String match = "^[aA-zZ�-�]{4,14}$"; + if (!StringUtils.isAllBlank(mtlb.getFirstname())) + if (!mtlb.getFirstname().matches(match)) { + createErrorTag(ErrorCodes.FIRST_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (!StringUtils.isAllBlank(mtlb.getSecondname())) + if (!mtlb.getSecondname().matches(match)) { + createErrorTag(ErrorCodes.SECOND_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (!StringUtils.isAllBlank(mtlb.getThirdname())) + if (!mtlb.getThirdname().matches(match)) { + createErrorTag(ErrorCodes.THIRD_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (!StringUtils.isAllBlank(mtlb.getFourthname())) + if (!mtlb.getFourthname().matches(match)) { + createErrorTag(ErrorCodes.FAMILY_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + if (!StringUtils.isAllBlank(mtlb.getFifthname())) + if (!mtlb.getFifthname().matches(match)) { + createErrorTag(ErrorCodes.MARRIAGE_NAME_CHAR_RULES, mtlb.getId()); + valid = false; + } + return valid; + } + + public void createErrorTag(String errorCode, Long mtlbId) { + RvfourBirthMtlbTag tag = new RvfourBirthMtlbTag(); + tag.setContent(errorCode); + tag.setType(ERROR_TAG_TYPE); + tag.setRvfourBirthMtlbId(mtlbId); + rvfourBirthMtlbTagRepository.insert(tag); + } + + public void createErrorTag(String errorCode, Long mtlbId, String type) { + RvfourBirthMtlbTag tag = new RvfourBirthMtlbTag(); + tag.setContent(errorCode); + tag.setType(type); + tag.setRvfourBirthMtlbId(mtlbId); + rvfourBirthMtlbTagRepository.insert(tag); + } +} diff --git a/src/main/java/systems/archide/core/workflows/utils/ServicesStatusManager.java b/src/main/java/systems/archide/core/workflows/utils/ServicesStatusManager.java new file mode 100644 index 0000000..9eb737f --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/utils/ServicesStatusManager.java @@ -0,0 +1,46 @@ +package systems.archide.core.workflows.utils; + +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class ServicesStatusManager { + + public static void publishStatus(String key, String message, String service) { + OkHttpClient client = new OkHttpClient(); + + MediaType mediaType = MediaType.parse("application/json"); + + // Your Centrifugo API endpoint + String centrifugoEndpoint = "http://localhost:8000/api/"; + + // Your Centrifugo API key + String apiKey = "9ce8f014-b367-4162-b20b-495ed14ab1be"; + + // Channel to publish the message + String channel = service; + + // Data to be sent to the SPA via Centrifugo + String dataToSend = "{\"channel\": \"" + channel + "\", \"data\": {\"value\": {\"key\": \"" + key + "\", \"value\": \"" + message + "\"}}}"; + + RequestBody body = RequestBody.create(mediaType, dataToSend); + + Request request = new Request.Builder() + .url(centrifugoEndpoint + "publish") // Publish API endpoint + .addHeader("Content-Type", "application/json") + .addHeader("Authorization", "apikey " + apiKey) + .post(body) + .build(); + + try { + Response response = client.newCall(request).execute(); + System.out.println(response.body().string()); + } catch (Exception e) { + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/systems/archide/core/workflows/utils/Utils.java b/src/main/java/systems/archide/core/workflows/utils/Utils.java new file mode 100644 index 0000000..22db54f --- /dev/null +++ b/src/main/java/systems/archide/core/workflows/utils/Utils.java @@ -0,0 +1,79 @@ +package systems.archide.core.workflows.utils; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import systems.archide.core.pojo.GlobalState; +import systems.archide.core.pojo.MtlbType; +import systems.archide.core.pojo.RvfourBirthMtlb; +import systems.archide.core.pojo.RvfourMarriageMtlb; +import systems.archide.core.pojo.UnionRecord; +import systems.archide.core.pojo.VitalRecord; +import systems.archide.core.repository.RvfourBirthMtlbRepository; +import systems.archide.core.repository.RvfourMarriageMtlbRepository; +import systems.archide.core.repository.UnionRecordRepository; +import systems.archide.core.repository.VitalRecordRepository; + +@Component +public class Utils { + + public final static String INFO_TAG_TYPE = "INFO"; + public final static String WARNING_TAG_TYPE = "WARNING"; + public final static String ERROR_TAG_TYPE = "ERROR"; + + public final static int FOUND = 0; + public final static int UNKNOWN = 1; + public final static int CONFIRMED_MISSING = 2; + public final static int FOUND_AS_FAMILY_TREE_RECORD = 3; + public final static int FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET = 4; + public static final int FOUND_BUT_UNION_RECORD_NOT_CREATED_YET = 5; + + @Autowired + VitalRecordRepository vitalRecordRepository; + + @Autowired + RvfourBirthMtlbRepository rvfourBirthMtlbRepository; + + @Autowired + RvfourMarriageMtlbRepository rvfourMarriageMtlbRepository; + + @Autowired + UnionRecordRepository unionRecordRepository; + + public int checkVitalRecordStatus(Long id, GlobalState migrationState) { + VitalRecord vitalRecord = vitalRecordRepository.findById(id); + if (vitalRecord != null) + return FOUND; + RvfourBirthMtlb mtlb = rvfourBirthMtlbRepository.findByVitalRecordId(id); + if (mtlb == null) { + if (!"FINISHED".equals(migrationState.getValue())) + return UNKNOWN; + else + return CONFIRMED_MISSING; + } else { + if (mtlb.getMtlbType() == MtlbType.RV4_BIRTH_VITAL_RECORD) + return FOUND_BUT_VITAL_RECORD_NOT_CREATED_YET; + else + return FOUND_AS_FAMILY_TREE_RECORD; + } + } + + public int checkUnionRecordStatus(Long id, GlobalState migrationState) { + UnionRecord unionRecord = unionRecordRepository.findById(id); + if (unionRecord != null) + return FOUND; + RvfourMarriageMtlb mtlb = rvfourMarriageMtlbRepository.findById(id); + if (mtlb == null) { + if (!"FINISHED".equals(migrationState.getValue())) + return UNKNOWN; + else + return CONFIRMED_MISSING; + } else { + if (mtlb.getMtlbType() == MtlbType.RV4_UNION_RECORD) + return FOUND_BUT_UNION_RECORD_NOT_CREATED_YET; + else + return CONFIRMED_MISSING; + } + } + +} diff --git a/src/main/proto/systems.archide.core/AdjuticationService.proto b/src/main/proto/systems.archide.core/AdjuticationService.proto new file mode 100644 index 0000000..b0e62ec --- /dev/null +++ b/src/main/proto/systems.archide.core/AdjuticationService.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; +option java_multiple_files = true; +option java_outer_classname = "AdjuticationServiceProto"; +option java_package = "systems.archide.core.proto"; +package adjutication_service; + +service AdjuticationService { + rpc readAdjutication (IdMtlbMessage) returns (ProbeInformationOutput) {} +} + +message ProbeInformationOutput { + optional int64 vitalRecordId = 1; + optional int64 fingerprintsId = 2; + optional int64 probeAfisId = 3; + optional int64 faceId = 4; +} + +message IdMtlbMessage { + optional int64 mtlbId = 1; +} \ No newline at end of file diff --git a/src/main/proto/systems.archide.core/CivilStatusAdjuticationService.proto b/src/main/proto/systems.archide.core/CivilStatusAdjuticationService.proto new file mode 100644 index 0000000..e2eec38 --- /dev/null +++ b/src/main/proto/systems.archide.core/CivilStatusAdjuticationService.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; +option java_multiple_files = true; +option java_outer_classname = "CivilStatusAdjuticationServiceProto"; +option java_package = "systems.archide.core.proto"; +package civil_status_adjutication_service; + +service CivilStatusAdjuticationService { + rpc adjuticate (CivilStatusAdjuticationMessage) returns (CivilStatusMtlbIdMessage) {} +} + +message CivilStatusAdjuticationMessage { + optional int64 mtlbId = 1; + optional int64 probeAfisId = 2; + optional bool duplicated = 3; + } + +message CivilStatusMtlbIdMessage { + optional int64 mtlbId = 1; +} \ No newline at end of file diff --git a/src/main/proto/systems.archide.core/DigitalizationAdjudicationService.proto b/src/main/proto/systems.archide.core/DigitalizationAdjudicationService.proto new file mode 100644 index 0000000..fc4dd4a --- /dev/null +++ b/src/main/proto/systems.archide.core/DigitalizationAdjudicationService.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +option java_multiple_files = true; +option java_outer_classname = "DigitalizationAdjuticationServiceProto"; +option java_package = "systems.archide.core.proto"; +package digitalization_adjutication_service; + +service DigitalizationAdjuticationService { + rpc adjuticate (DigitalizationAdjuticationMessage) returns (AdjudicationVitalRecordIdMessage) {} +} + +message DigitalizationAdjuticationMessage { + optional int64 vitalRecordId = 1; + optional int64 fileId = 2; + } + +message AdjudicationVitalRecordIdMessage { + optional int64 vitalRecordId = 1; +} \ No newline at end of file diff --git a/src/main/proto/systems.archide.core/IdCardVerificationService.proto b/src/main/proto/systems.archide.core/IdCardVerificationService.proto new file mode 100644 index 0000000..d486a7a --- /dev/null +++ b/src/main/proto/systems.archide.core/IdCardVerificationService.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +option java_multiple_files = true; +option java_outer_classname = "IdCardVerificationProto"; +option java_package = "systems.archide.core.proto"; + +import "MaritalStatus.proto"; +import "Gender.proto"; +import "IdCardVerificationOutcome.proto"; + +package id_card_verification_service; +service IdCardVerificationService { + rpc verify (IdCardVerificationRequest) returns (IdCardVerificationResponse) {} +} + +message IdCardVerificationRequest { + int64 cardId = 1; + optional bytes encryptedCode = 2; +} + +message IdCardVerificationResponse { + + IdCardVerificationOutcome verified = 1; + optional int64 cardId = 2; + optional int64 vitalRecordId = 3; + optional bytes faceImage = 4; + optional bool birthDayUnknown = 5; + optional bool birthMonthUnknown = 6; + optional bool birthYearUnknown = 7; + optional int64 birthdate = 8; + optional string birthPlace = 9; + optional string birthCountry = 10; + optional string firstname = 11; + optional string secondname = 12; + optional string thirdname = 13; + optional string fourthname = 14; + optional Gender gender = 15; + optional MaritalStatus maritalStatus = 16; + optional int32 primaryCitizenship = 17; + optional string otherCitizenshipCsv = 18; + optional int64 fatherVitalRecordId = 19; + optional int64 motherVitalRecordId = 20; + optional bool disability = 21; +} diff --git a/src/main/proto/systems.archide.core/IdMtlbAdjuticationService.proto b/src/main/proto/systems.archide.core/IdMtlbAdjuticationService.proto new file mode 100644 index 0000000..e5beb8c --- /dev/null +++ b/src/main/proto/systems.archide.core/IdMtlbAdjuticationService.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +option java_multiple_files = true; +option java_outer_classname = "IdMtlbAdjuticationServiceProto"; +option java_package = "systems.archide.core.proto"; +package id_mtlb_adjutication_service; + +service IdMtlbAdjuticationService { + rpc adjuticate (IdMtlbAdjuticationMessage) returns (IdMtlbIdMessage) {} +} + +message IdMtlbAdjuticationMessage { + optional int64 mtlbId = 1; + optional int64 probeAfisId = 2; + optional bool duplicated = 3; + } + message IdMtlbIdMessage { + optional int64 mtlbId = 1; +} diff --git a/src/main/proto/systems.archide.core/VitalRecordVerificationService.proto b/src/main/proto/systems.archide.core/VitalRecordVerificationService.proto new file mode 100644 index 0000000..73da58e --- /dev/null +++ b/src/main/proto/systems.archide.core/VitalRecordVerificationService.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +option java_multiple_files = true; +option java_outer_classname = "VitalRecordVerificationProto"; +option java_package = "systems.archide.core.proto"; + +package vital_record_verification_service; +service VitalRecordVerificationService { + rpc findVitalRecordByFirstNameAndBirthDate (VitalRecordVerificationRequest) returns (VitalRecordIdVerificationResponse) {} +} + +message VitalRecordVerificationRequest { + optional string firstname = 1; + int64 birthdate = 2; +} + +message VitalRecordIdVerificationResponse { + repeated int64 id = 1; +} diff --git a/src/main/resources/idcore.properties b/src/main/resources/idcore.properties new file mode 100644 index 0000000..237ec60 --- /dev/null +++ b/src/main/resources/idcore.properties @@ -0,0 +1,3 @@ +db.url=jdbc:postgresql://localhost/idcore +db.username=idcore +db.password=idcore \ No newline at end of file diff --git a/src/main/resources/keycloak.properties b/src/main/resources/keycloak.properties new file mode 100644 index 0000000..89e6ed0 --- /dev/null +++ b/src/main/resources/keycloak.properties @@ -0,0 +1,3 @@ +db.url=jdbc:postgresql://localhost/keycloak +db.username=keycloak +db.password=keycloak \ No newline at end of file diff --git a/src/templates/LocalConstants.java b/src/templates/LocalConstants.java new file mode 100644 index 0000000..40fa147 --- /dev/null +++ b/src/templates/LocalConstants.java @@ -0,0 +1,7 @@ +package systems.archide.core; + +public class LocalConstants { + + public final static String PERSONS_FILES_PREFIX = "{{rv4_images_path}}"; + +}