diff --git a/.gitignore b/.gitignore index ee8da6cd39d..dcd1462d23b 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ frontend/micro-ui-internals/node_modules/* .idea index.lock +/.metadata/ +/.sonarlint +.checkstyle +.pmd \ No newline at end of file diff --git a/Migration/ApplicantAddress.txt b/Migration/ApplicantAddress.txt new file mode 100644 index 00000000000..031a26f413b --- /dev/null +++ b/Migration/ApplicantAddress.txt @@ -0,0 +1,14 @@ +CREATE TABLE IF NOT EXISTS eg_fm_applicantaddress +( + id character varying(64) PRIMARY KEY, + tenantid character varying(64), + houseno character varying(64), + housename character varying(64), + street character varying(64), + pincode character varying(64), + postofficename character varying(64), + createdby character varying(64), + createdat bigint, + lastmodifiedby character varying(64), + lastmodifiedat bigint +) \ No newline at end of file diff --git a/Migration/ApplicantDet.txt b/Migration/ApplicantDet.txt new file mode 100644 index 00000000000..2e9cdafe2ae --- /dev/null +++ b/Migration/ApplicantDet.txt @@ -0,0 +1,17 @@ +CREATE TABLE IF NOT EXISTS eg_fm_applicantpersonal +( + id character varying(64) PRIMARY KEY, + aadhaarno character varying(64), + email character varying(64), + firstname character varying(64), + lastname character varying(64), + title character varying(64), + mobileno character varying(64), + tenantid character varying(64), + createdby character varying(64), + createdat bigint, + lastmodifiedby character varying(64), + lastmodifiedat bigint, + applicantaddressid character varying(64) + +) \ No newline at end of file diff --git a/Migration/ApplicantServiceDet.txt b/Migration/ApplicantServiceDet.txt new file mode 100644 index 00000000000..60a1d5421ba --- /dev/null +++ b/Migration/ApplicantServiceDet.txt @@ -0,0 +1,15 @@ +CREATE TABLE IF NOT EXISTS eg_fm_applicantdetails +( + id character varying(64) PRIMARY KEY, + tenantid character varying(64), + servicedetailsid character varying(64), + applicantpersonalid character varying(64), + fatherfirstname character varying(64), + fatherlastname character varying(64), + motherfirstname character varying(64), + motherlastname character varying(64), + createdby character varying(64), + createdat bigint, + lastmodifiedby character varying(64), + lastmodifiedat bigint +) \ No newline at end of file diff --git a/Migration/ServiceMaster.txt b/Migration/ServiceMaster.txt new file mode 100644 index 00000000000..56ca36a779e --- /dev/null +++ b/Migration/ServiceMaster.txt @@ -0,0 +1,14 @@ +CREATE TABLE IF NOT EXISTS eg_fm_servicedetails +( + id character varying(64) PRIMARY KEY, + tenantid character varying(64), + servicecode character varying(64), + servicename character varying(64), + servicedescription character varying(64), + businessservice character varying(64), + workflowcode character varying(64), + createdby character varying(64), + createdat bigint, + lastmodifiedby character varying(64), + lastmodifiedat bigint +) \ No newline at end of file diff --git a/build/build-config.yml b/build/build-config.yml index b60a9f7adb7..7537671749e 100644 --- a/build/build-config.yml +++ b/build/build-config.yml @@ -394,6 +394,11 @@ config: image-name: "xstate-webchat-db" #Municipal Services + - name: "builds/upyog/municipal-services/egov-filemgmnt" + build: + - work-dir: "municipal-services/egov-filemgmnt" + image-name: "egov-filemgmnt" + dockerfile: "build/maven/Dockerfile" - name: "builds/upyog/municipal-services/egov-user-event" build: diff --git a/core-services/egov-notification-mail/src/main/resources/application.properties b/core-services/egov-notification-mail/src/main/resources/application.properties index eb6024db33c..64ee25fb31d 100644 --- a/core-services/egov-notification-mail/src/main/resources/application.properties +++ b/core-services/egov-notification-mail/src/main/resources/application.properties @@ -13,13 +13,13 @@ spring.kafka.consumer.properties.spring.json.use.type.headers=false #Email Configuration mail.enabled=true -mail.sender.username=test -mail.sender.password=test +mail.sender.username=info-ksmart.ikm@kerala.gov.in +mail.sender.password=X7&vD5$fP3 mail.smtps.auth=true mail.smtps.starttls.enable=true mail.smtps.debug=false mail.port=465 -mail.host=smtp.gmail.com +mail.host=smtp.mail.gov.in mail.protocol=smtps #Localization config @@ -35,7 +35,7 @@ egov.localization.default.locale= egov.user.host=https://dev.digit.org egov.user.context.path=/user egov.user.search.endpoint=/_search -egov.user.state.tenant.id=pb +egov.user.state.tenant.id=kl -email.subject=UPYOG Notification +email.subject=KSMART Notification diff --git a/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/BaseSMSService.java b/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/BaseSMSService.java index a412bf6e8ef..3ad631bcdbd 100644 --- a/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/BaseSMSService.java +++ b/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/BaseSMSService.java @@ -158,10 +158,10 @@ public MultiValueMap getSmsRequestBody(Sms sms) { if (value.startsWith("$")) { switch (value) { case "$username": - map.add(key, /*smsProperties.getUsername()*/"pbdwss.sms"); + map.add(key, smsProperties.getUsername()); break; case "$password": - map.add(key, /*smsProperties.getPassword()*/"Nkyf%403254"); + map.add(key, smsProperties.getPassword()); break; case "$senderid": map.add(key, smsProperties.getSenderid()); diff --git a/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/impl/NICSMSServiceImpl.java b/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/impl/NICSMSServiceImpl.java index 31d3316f89a..773a8763b68 100644 --- a/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/impl/NICSMSServiceImpl.java +++ b/core-services/egov-notification-sms/src/main/java/org/egov/web/notification/sms/service/impl/NICSMSServiceImpl.java @@ -26,9 +26,13 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ClassPathResource; import lombok.extern.slf4j.Slf4j; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; @Service @Slf4j @@ -47,20 +51,53 @@ private void postConstruct() { log.info("postConstruct() start"); try { + //sslContext = SSLContext.getInstance("TLSv1.2"); sslContext = SSLContext.getInstance("TLSv1.2"); if(smsProperties.isVerifyCertificate()) { log.info("checking certificate"); - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + //KeyStore trustStore = KeyStore.getInstance("pkcs11"); + //System.out.println(KeyStore.getDefaultType()); //File file = new File(System.getenv("JAVA_HOME")+"/lib/security/cacerts"); - File file = new File(getClass().getClassLoader().getResource("smsgwsmsgovin-Mar22.cer").getFile()); - InputStream is = new FileInputStream(file); - trustStore.load(is, "changeit".toCharArray()); - TrustManagerFactory trustFactory = TrustManagerFactory - .getInstance(TrustManagerFactory.getDefaultAlgorithm()); - trustFactory.init(trustStore); - - TrustManager[] trustManagers = trustFactory.getTrustManagers(); - sslContext.init(null, trustManagers, null); + //File file = new File(Thread.currentThread().getContextClassLoader().getResource("smsgwsmsgovin-sep22.cer").getFile()); + //InputStream is = new FileInputStream(file); + //Resource resource = (Resource) new ClassPathResource("smsgwsmsgovin-sep22.cer"); + //InputStream is = resource.getInputStream(); + //InputStream is = getClass().getClassLoader().getResourceAsStream("smsgwsmsgovin-sep22.cer"); + //trustStore.load(is, "changeit".toCharArray()); + + + try (InputStream is = getClass().getClassLoader() + .getResourceAsStream("smsgwsmsgovin-sep22.cer")) { + + //KeyStore trustStore = KeyStore.getInstance("pkcs12"); + //trustStore.load(is, "changeit".toCharArray()); + + CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); + X509Certificate caCert = (X509Certificate) certFactory.generateCertificate(is); + + KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + trustStore.load(null); + trustStore.setCertificateEntry("caCert", caCert); + + TrustManagerFactory trustFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + trustFactory.init(trustStore); + + TrustManager[] trustManagers = trustFactory.getTrustManagers(); + sslContext.init(null, trustManagers, null); + } + catch(Exception e) { + e.printStackTrace(); + log.error("Not able to load SMS certificate from the specified path"); + } + + + //TrustManagerFactory trustFactory = TrustManagerFactory + // .getInstance(TrustManagerFactory.getDefaultAlgorithm()); + //trustFactory.init(trustStore); + + //TrustManager[] trustManagers = trustFactory.getTrustManagers(); + //sslContext.init(null, trustManagers, null); + //System.out.println(sslContext.getSocketFactory()); } else { log.info("not checking certificate"); @@ -95,19 +132,20 @@ protected void submitToExternalSmsService(Sms sms) { String final_data=""; final_data+="username="+ smsProperties.getUsername(); - final_data+="&pin="+ smsProperties.getPassword(); - + //final_data+="&pin="+ smsProperties.getPassword(); + final_data+="&pin="+ "GHt%40%23321ter"; String smsBody = sms.getMessage(); if(smsBody.split("#").length > 1) { - String templateId = smsBody.split("#")[1]; - + //String templateId = smsBody.split("#")[1]; + String templateId=smsBody.substring(smsBody.lastIndexOf("#")+1, smsBody.length()); sms.setTemplateId(templateId); - smsBody = smsBody.split("#")[0]; + //smsBody = smsBody.split("#")[0]; + smsBody=smsBody.substring(0,smsBody.lastIndexOf("#")-1); }else if(StringUtils.isEmpty(sms.getTemplateId())){ log.info("No template Id, Message Not sent"+smsBody); - return; + //return; } String message= "" + smsBody ; @@ -125,11 +163,16 @@ protected void submitToExternalSmsService(Sms sms) { else final_data+="&dlt_template_id="+sms.getTemplateId(); + log.info("URL which is sending+"+final_data); if(smsProperties.isSmsEnabled()) { HttpsURLConnection conn = (HttpsURLConnection) new URL(smsProperties.getUrl()+"?"+final_data).openConnection(); conn.setSSLSocketFactory(sslContext.getSocketFactory()); + conn.setDoInput(true); conn.setDoOutput(true); - conn.setRequestMethod("GET"); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.connect(); + final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); final StringBuffer stringBuffer = new StringBuffer(); String line; diff --git a/core-services/egov-notification-sms/src/main/resources/application.properties b/core-services/egov-notification-sms/src/main/resources/application.properties index b18bc24d992..a12fde73f99 100644 --- a/core-services/egov-notification-sms/src/main/resources/application.properties +++ b/core-services/egov-notification-sms/src/main/resources/application.properties @@ -5,23 +5,23 @@ sms.provider.class=NIC sms.provider.requestType=POST sms.provider.url=https://smsgw.sms.gov.in/failsafe/MLink sms.provider.contentType=application/json -sms.provider.username=iupyo.sms -sms.provider.password=C6%rE4#jM3 +sms.provider.username=ikmlsg.sms +sms.provider.password=GHt%40%23321ter sms.verify.response = true sms.print.response = true sms.verify.responseContains="success":true sms.verify.ssl = true -sms.senderid=UPYOG +sms.senderid=IKMLSG sms.mobile.prefix= sms.sender.secure.key=value sms.blacklist.numbers=9999X,5* sms.whitelist.numbers= sms.success.codes=200,201,202 sms.error.codes= -sms.verify.certificate=false +sms.verify.certificate=true sms.msg.append="" -sms.provider.entityid=1001842650153206278 -sms.default.tmplid=1 +sms.provider.entityid=1701159193290176741 +sms.default.tmplid=1707165950461405440 sms.debug.msggateway=true sms.enabled=true #msdg diff --git a/core-services/egov-notification-sms/src/main/resources/smsgwsmsgovin-Mar22.cer b/core-services/egov-notification-sms/src/main/resources/smsgwsmsgovin-Mar22.cer deleted file mode 100644 index 6b7327ce80c..00000000000 Binary files a/core-services/egov-notification-sms/src/main/resources/smsgwsmsgovin-Mar22.cer and /dev/null differ diff --git a/core-services/egov-notification-sms/src/main/resources/smsgwsmsgovin-sep22.cer b/core-services/egov-notification-sms/src/main/resources/smsgwsmsgovin-sep22.cer new file mode 100644 index 00000000000..f7acd10f5ba Binary files /dev/null and b/core-services/egov-notification-sms/src/main/resources/smsgwsmsgovin-sep22.cer differ diff --git a/core-services/egov-persister/src/main/resources/application-local.properties b/core-services/egov-persister/src/main/resources/application-local.properties new file mode 100644 index 00000000000..22cc8ab6d8d --- /dev/null +++ b/core-services/egov-persister/src/main/resources/application-local.properties @@ -0,0 +1 @@ +egov.persist.yml.repo.path=classpath:egov-pg-service-persister.yml \ No newline at end of file diff --git a/core-services/egov-url-shortening/src/main/resources/application.properties b/core-services/egov-url-shortening/src/main/resources/application.properties index 809ff984538..980aebc9a58 100644 --- a/core-services/egov-url-shortening/src/main/resources/application.properties +++ b/core-services/egov-url-shortening/src/main/resources/application.properties @@ -9,12 +9,12 @@ spring.redis.port=6379 app.timezone=UTC spring.datasource.driver-class-name=org.postgresql.Driver -spring.datasource.url=jdbc:postgresql://localhost:5432/urlshortening -spring.datasource.username=postgres -spring.datasource.password=postgres +spring.datasource.url=jdbc:postgresql://ikm-firstqa-eks-db.c865b3gqkoui.ap-south-1.rds.amazonaws.com:5432/ikmeksqadb +spring.datasource.username=ikmeksqadb +spring.datasource.password=ikm123456 #----------------------------- FLYWAY CONFIGURATIONS ------------------------------# -spring.flyway.url=jdbc:postgresql://localhost:5432/urlshortening +spring.flyway.url=jdbc:postgresql://ikm-firstqa-eks-db.c865b3gqkoui.ap-south-1.rds.amazonaws.com:5432/ikmeksqadb spring.flyway.user=postgres spring.flyway.password=postgres spring.flyway.table=public @@ -52,10 +52,10 @@ url.shorten.indexer.topic=save-url-shortening-deatils db.persistance.enabled=true -host.name=https://qa.digit.org/ -egov.user.host=http://egov-user.egov:8080/ +host.name=https://ksmart-qa.lsgkerala.gov.in/ +egov.user.host=https://ksmart-qa.lsgkerala.gov.in/ egov.user.search.path=user/_search -state.level.tenant.id=pb +state.level.tenant.id=kl hashids.salt=randomsalt -hsahids.min.length=3 \ No newline at end of file +hsahids.min.length=3 diff --git a/frontend/micro-ui/web/.env b/frontend/micro-ui/web/.env new file mode 100644 index 00000000000..5df9e74f91b --- /dev/null +++ b/frontend/micro-ui/web/.env @@ -0,0 +1,2 @@ +REACT_APP_STATE_LEVEL_TENANT_ID=kl +REACT_APP_PROXY_URL=https://ksmart-qa.lsgkerala.gov.in/ diff --git a/frontend/micro-ui/web/micro-ui-internals/packages/css/example/index.html b/frontend/micro-ui/web/micro-ui-internals/packages/css/example/index.html index 4f1ea4bf81b..5662b192939 100644 --- a/frontend/micro-ui/web/micro-ui-internals/packages/css/example/index.html +++ b/frontend/micro-ui/web/micro-ui-internals/packages/css/example/index.html @@ -351,7 +351,7 @@

There is a problem

-
Pin Complaint Location
+
Pin Test Complaint Location

Click and hold to drop the pin to complaint location. If you are not able to pin the location you can skip the continue for next step.

@@ -360,6 +360,7 @@

There is a problem

+ diff --git a/frontend/micro-ui/web/micro-ui-internals/packages/css/example/map.js b/frontend/micro-ui/web/micro-ui-internals/packages/css/example/map.js index d9d46e12de0..0897d7bde4d 100644 --- a/frontend/micro-ui/web/micro-ui-internals/packages/css/example/map.js +++ b/frontend/micro-ui/web/micro-ui-internals/packages/css/example/map.js @@ -1,7 +1,7 @@ "use strict"; let map; var script = document.createElement("script"); -const key = globalConfigs?.getConfig("GMAPS_API_KEY"); +const key = globalConfigs?.getConfig("gmaps_api_key"); script.src = `https://maps.googleapis.com/maps/api/js?key=${key}&callback=initAutocomplete&libraries=places`; script.defer = true; window.initAutocomplete = function () { diff --git a/frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/Home/index.js b/frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/Home/index.js index 55eec38704d..17bcdeab1c2 100644 --- a/frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/Home/index.js +++ b/frontend/micro-ui/web/micro-ui-internals/packages/modules/core/src/pages/citizen/Home/index.js @@ -41,11 +41,11 @@ const Home = () => { Icon: , onClick: () => history.push("/digit-ui/citizen/pgr-home"), }, - { - name: t("MODULE_PT"), - Icon: , - onClick: () => history.push("/digit-ui/citizen/pt-home"), - }, + //{ + // name: t("MODULE_PT"), + // Icon: , + // onClick: () => history.push("/digit-ui/citizen/pt-home"), + // }, { name: t("MODULE_TL"), Icon: , @@ -57,9 +57,14 @@ const Home = () => { // onClick: () => history.push("/digit-ui/citizen") // }, { - name: t("CS_COMMON_INBOX_BPA"), + name: t("ACTION_TEST_BIRTH"), + Icon: , + onClick: () => history.push("/citizen/birth-citizen/home"), + }, + { + name: t("ACTION_TEST_DEATH"), Icon: , - onClick: () => history.push("/digit-ui/citizen/obps-home"), + onClick: () => history.push("/citizen/death-citizen/home"), }, ], styles: { display: "flex", flexWrap: "wrap", justifyContent: "flex-start", width: "100%" }, diff --git a/frontend/mono-ui/web/rainmaker/dev-packages/egov-bnd-dev/src/ui-config/screens/specs/birth-citizen/newRegistration.js b/frontend/mono-ui/web/rainmaker/dev-packages/egov-bnd-dev/src/ui-config/screens/specs/birth-citizen/newRegistration.js new file mode 100644 index 00000000000..a91b076d4e8 --- /dev/null +++ b/frontend/mono-ui/web/rainmaker/dev-packages/egov-bnd-dev/src/ui-config/screens/specs/birth-citizen/newRegistration.js @@ -0,0 +1,262 @@ +import { getCommonHeader } from "egov-ui-framework/ui-config/screens/specs/utils"; +import { + handleScreenConfigurationFieldChange as handleField, + prepareFinalObject, +} from "egov-ui-framework/ui-redux/screen-configuration/actions"; //returns action object +import { getQueryArg } from "egov-ui-framework/ui-utils/commons"; +import { getTenantId } from "egov-ui-kit/utils/localStorageUtils"; +import get from "lodash/get"; +import { + convertEpochToDateCustom, + loadFullCertDetails, + loadHospitals, +} from "../utils"; +import { addHospitalDialog } from "./addHospitalDialog"; +import { newRegistrationForm } from "./newRegistrationCard"; +import { confirmationDialog } from "./newRegistrationConfirmDialog"; +import { footer } from "./newRegistrationFooter"; +import "./index.css"; +import { set } from "lodash"; + +const header = getCommonHeader({ + labelName: "Search Certificate", + labelKey: "ACTION_TEST_BIRTH_CERTIFICATE", +}); + +export const showHideConfirmationPopup = (state, dispatch) => { + let toggle = get( + state.screenConfiguration.screenConfig["newRegistration"], + "components.confirmationDialog.props.open", + false + ); + dispatch( + handleField( + "newRegistration", + "components.confirmationDialog", + "props.open", + !toggle + ) + ); +}; + +export const showHideAddHospitalDialog = (state, dispatch) => { + let toggle = get( + state.screenConfiguration.screenConfig["newRegistration"], + "components.hospitalDialog.props.open", + false + ); + dispatch( + handleField( + "newRegistration", + "components.hospitalDialog", + "props.open", + !toggle + ) + ); +}; + +const prepareEditScreenData = (action, state, dispatch, response) => { + setTimeout(() => { + if (response.BirthCertificate[0].dateofbirth) { + dispatch( + handleField( + "newRegistration", + "components.div2.children.details.children.cardContent.children.childInfo.children.cardContent.children.infoOfChild.children.dob", + "props.value", + convertEpochToDateCustom(response.BirthCertificate[0].dateofbirth) + ) + ); + } + if (response.BirthCertificate[0].dateofreport) { + dispatch( + handleField( + "newRegistration", + "components.div2.children.details.children.cardContent.children.registrationInfo.children.cardContent.children.registrationInfoCont.children.dateOfReporting", + "props.value", + convertEpochToDateCustom(response.BirthCertificate[0].dateofreport) + ) + ); + } + if (response.BirthCertificate[0].hospitalname) { + dispatch( + handleField( + "newRegistration", + "components.div2.children.details.children.cardContent.children.registrationInfo.children.cardContent.children.registrationInfoCont.children.hospitalName", + "props.value", + response.BirthCertificate[0].hospitalname + ) + ); + } + }, 1); +}; + +const newRegistration = { + uiFramework: "material-ui", + name: "newRegistration", + beforeInitScreen: (action, state, dispatch) => { + let userAction = getQueryArg(window.location.href, "action"); + let id = getQueryArg(window.location.href, "certificateId"); + let module = getQueryArg(window.location.href, "module"); + dispatch( + prepareFinalObject("bnd",{})); + loadHospitals(action, state, dispatch, "birth", getTenantId()).then( + (response) => { + if ( + response && + response.MdmsRes && + response.MdmsRes["birth-death-service"] && + response.MdmsRes["birth-death-service"].hospitalList + ) { + const hptList = response.MdmsRes["birth-death-service"].hospitalList; + const newList = [ + ...hptList.filter((hos) => hos.active), + { + hospitalName: "Others", + }, + ]; + for (let hospital of newList) { + hospital.code = hospital.hospitalName; + hospital.name = hospital.hospitalName; + } + dispatch(prepareFinalObject("bnd.allHospitals", newList)); + } else { + dispatch( + prepareFinalObject("bnd.allHospitals", [ + { code: "Others", name: "Others" }, + ]) + ); + } + + if (userAction == "EDIT" && id && module) { + set( + action.screenConfig, + "components.div2.children.details.children.cardContent.children.registrationInfo.children.cardContent.children.registrationInfoCont.children.hospitalName.props.isDisabled", + true + ); + set( + action.screenConfig, + "components.div2.children.details.children.cardContent.children.registrationInfo.children.cardContent.children.registrationInfoCont.children.registrationNo.props.disabled", + true + ); + loadFullCertDetails(action, state, dispatch, { + tenantId: getTenantId(), + id: id, + module: module, + }).then((response) => { + if ( + response && + response.BirthCertificate && + response.BirthCertificate.length > 0 + ) { + dispatch( + prepareFinalObject( + "bnd.birth.newRegistration", + response.BirthCertificate[0] + ) + ); + dispatch( + prepareFinalObject( + "bnd.birth.newRegistration.isLegacyRecord", + response.BirthCertificate[0].counter == 1 + ) + ); + prepareEditScreenData(action, state, dispatch, response); + } + }); + } else { + dispatch( + prepareFinalObject("bnd.birth.newRegistration", { + birthFatherInfo: {}, + birthMotherInfo: {}, + birthPresentaddr: {}, + birthPermaddr: {}, + }) + ); + } + } + ); + + return action; + }, + components: { + div2: { + uiFramework: "custom-atoms", + componentPath: "Div", + props: { + className: "common-div-css", + }, + children: { + headerDiv: { + uiFramework: "custom-atoms", + componentPath: "Container", + children: { + header: { + gridDefination: { + xs: 12, + sm: 6, + }, + ...header, + }, + }, + }, + details: newRegistrationForm, + }, + }, + div: { + uiFramework: "custom-atoms", + componentPath: "Div", + props: { + className: "common-div-css", + }, + children: { + details: footer, + }, + }, + confirmationDialog: { + componentPath: "Dialog", + props: { + open: false, + maxWidth: "sm", + disableValidation: true, + }, + children: { + dialogContent: { + componentPath: "DialogContent", + props: { + classes: { + root: "city-picker-dialog-style", + }, + // style: { minHeight: "180px", minWidth: "365px" } + }, + children: { + popup: confirmationDialog, + }, + }, + }, + }, + hospitalDialog: { + componentPath: "Dialog", + props: { + open: false, + maxWidth: "sm", + disableValidation: true, + }, + children: { + dialogContent: { + componentPath: "DialogContent", + props: { + classes: { + root: "city-picker-dialog-style", + }, + // style: { minHeight: "180px", minWidth: "365px" } + }, + children: { + popup: addHospitalDialog, + }, + }, + }, + }, + }, +}; + +export default newRegistration; diff --git a/municipal-services/birth-death-services/src/main/resources/application.properties b/municipal-services/birth-death-services/src/main/resources/application.properties index d9a0991f84a..b99b5589153 100644 --- a/municipal-services/birth-death-services/src/main/resources/application.properties +++ b/municipal-services/birth-death-services/src/main/resources/application.properties @@ -5,9 +5,9 @@ app.timezone=UTC ##----------------------------- SPRING DS CONFIGURATIONS ------------------------------# spring.datasource.driver-class-name=org.postgresql.Driver -spring.datasource.url=jdbc:postgresql://localhost:5432/bel_cb_dev -spring.datasource.username=postgres -spring.datasource.password=postgres +spring.datasource.url=jdbc:postgresql://ikm-firstqa-eks-db.c865b3gqkoui.ap-south-1.rds.amazonaws.com:5432/ikmeksqadb +spring.datasource.username=ikmeksqadb +spring.datasource.password=ikm123456 ##----------------------------- FLYWAY CONFIGURATIONS ------------------------------# spring.flyway.url=jdbc:postgresql://localhost:5432/bel_cb_dev @@ -54,7 +54,7 @@ persister.update.death.topic=update-death-topic kafka.topics.receipt.create=egov.collection.payment-create #idgen configurations -egov.idgen.host=http://localhost:8088/ +egov.idgen.host=https://ksmart-qa.lsgkerala.gov.in/ egov.idgen.path=egov-idgen/id/_generate #birth and death idFormat config @@ -64,35 +64,35 @@ egov.idgen.deathapplnum.name=death_cert.receipt.id egov.idgen.deathapplnum.format=DT/CB/[cb.name]/[fy:yyyy]/[SEQ_EGOV_COMMON] #mdms configurations -egov.mdms.host=http://localhost:8094 +egov.mdms.host=https://ksmart-qa.lsgkerala.gov.in/ egov.mdms.search.endpoint=/egov-mdms-service/v1/_search #billing-service -egov.billingservice.host=http://localhost:8081 +egov.billingservice.host=https://ksmart-qa.lsgkerala.gov.in/ egov.demand.create.endpoint=/billing-service/demand/_create egov.bill.gen.endpoint=/billing-service/bill/v2/_fetchbill #download path config -egov.pdf.host=http://localhost:8087/ +egov.pdf.host=https://ksmart-qa.lsgkerala.gov.in/ egov.pdf.birthcert.postendpoint=egov-pdf/download/BIRTHDEATH/birth-certificate?tenantId=$tenantId egov.pdf.deathcert.postendpoint=egov-pdf/download/BIRTHDEATH/death-certificate?tenantId=$tenantId #pdf service path config -egov.pdfservice.host=https://dev.digit.org/ +egov.pdfservice.host=https://ksmart-qa.lsgkerala.gov.in/ egov.pdf.birthcert.createEndPoint=pdf-service/v1/_create?key=birth-certificate&tenantId=$tenantId egov.pdf.deathcert.createEndPoint=pdf-service/v1/_create?key=death-certificate&tenantId=$tenantId #view certificate path config -egov.ui.app.host=https://13.71.65.215.nip.io/ +egov.ui.app.host=https://ksmart-qa.lsgkerala.gov.in/ egov.bnd.birthcert.link=citizen/withoutAuth/bnd/viewcertificate?id=$id&tenantId=$tenantId&module=birth®No=$regNo&dateofbirth=$dateofbirth&gender=$gender&birthcertificateno=$birthcertificateno egov.bnd.deathcert.link=citizen/withoutAuth/bnd/viewcertificate?id=$id&tenantId=$tenantId&module=death®No=$regNo&dateofdeath=$dateofdeath&gender=$gender&deathcertificateno=$deathcertificateno #egov-url-shortening service config -egov.url.shortner.host=http://localhost:8093 +egov.url.shortner.host=https://ksmart-qa.lsgkerala.gov.in/ egov.url.shortner.endpoint=/egov-url-shortening/shortener #state level tenant -egov.state.level.tenant.id=pb +egov.state.level.tenant.id=kl #decryption enable decryption.abac.enabled=false @@ -103,8 +103,8 @@ egov.enc.encrypt.endpoint=/egov-enc-service/crypto/v1/_encrypt egov.enc.decrypt.endpoint=/egov-enc-service/crypto/v1/_decrypt #testing tenants -egov.bnd.freedownload.tenants=pb.testing -egov.bnd.live.citizen.tenants=pb.testing +egov.bnd.freedownload.tenants=kl.cochin +egov.bnd.live.citizen.tenants=kl.cochin #download limit egov.bnd.download.bufferdays=3 @@ -114,4 +114,4 @@ egov.bnd.max.limit=100 #collection service config egov.collection.service.host=http://localhost:8091 -egov.payment.search.endpoint=/collection-services/payments/_search \ No newline at end of file +egov.payment.search.endpoint=/collection-services/payments/_search diff --git a/municipal-services/egov-filemgmnt/.gitignore b/municipal-services/egov-filemgmnt/.gitignore new file mode 100644 index 00000000000..5dd0208155f --- /dev/null +++ b/municipal-services/egov-filemgmnt/.gitignore @@ -0,0 +1,18 @@ +### STS ### +.apt_generated +.settings +.checkstyle +.classpath +.factorypath +/.pmd +.project +/.sonarlint + +### maven ### +target/ +reports/ +docker_data/ + +### local only files ### +compose.yml +SearchQueries.sql \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/.mvn/wrapper/maven-wrapper.jar b/municipal-services/egov-filemgmnt/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 00000000000..c1dd12f1764 Binary files /dev/null and b/municipal-services/egov-filemgmnt/.mvn/wrapper/maven-wrapper.jar differ diff --git a/municipal-services/egov-filemgmnt/.mvn/wrapper/maven-wrapper.properties b/municipal-services/egov-filemgmnt/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 00000000000..b74bf7fcd64 --- /dev/null +++ b/municipal-services/egov-filemgmnt/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/municipal-services/egov-filemgmnt/README.md b/municipal-services/egov-filemgmnt/README.md new file mode 100644 index 00000000000..a2e8a9f7b84 --- /dev/null +++ b/municipal-services/egov-filemgmnt/README.md @@ -0,0 +1,18 @@ +# Swagger generated server + +Spring Boot Server + + +## Overview +This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. +By using the [OpenAPI-Spec](https://github.com/swagger-api/swagger-core), you can easily generate a server stub. +This is an example of building a swagger-enabled server in Java using the SpringBoot framework. + +The underlying library integrating swagger to SpringBoot is [springfox](https://github.com/springfox/springfox) + +Start your server as an simple java application + +You can view the api documentation in swagger-ui by pointing to +http://localhost:8080/ + +Change default port value in application.properties \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/mvnw b/municipal-services/egov-filemgmnt/mvnw new file mode 100644 index 00000000000..8a8fb2282df --- /dev/null +++ b/municipal-services/egov-filemgmnt/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/municipal-services/egov-filemgmnt/mvnw.cmd b/municipal-services/egov-filemgmnt/mvnw.cmd new file mode 100644 index 00000000000..1d8ab018eaf --- /dev/null +++ b/municipal-services/egov-filemgmnt/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/municipal-services/egov-filemgmnt/pom.xml b/municipal-services/egov-filemgmnt/pom.xml new file mode 100644 index 00000000000..c451a75b2eb --- /dev/null +++ b/municipal-services/egov-filemgmnt/pom.xml @@ -0,0 +1,141 @@ + + 4.0.0 + org.egov + egov-filemgmnt + egov-filemgmnt + 1.0.0 + jar + + 1.8 + ${java.version} + ${java.version} + + 42.5.0 + 1.18.24 + + + org.springframework.boot + spring-boot-starter-parent + 2.2.6.RELEASE + + + src/main/java + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-jdbc + + + + org.postgresql + postgresql + + + org.springframework.boot + spring-boot-starter-test + test + + + + + org.egov.services + tracer + 2.0.0-SNAPSHOT + + + org.egov.services + services-common + 1.0.1-SNAPSHOT + + + + org.egov + mdms-client + 0.0.2-SNAPSHOT + compile + + + org.projectlombok + lombok + true + + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + javax.validation + validation-api + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + org.springdoc + springdoc-openapi-ui + 1.6.11 + + + org.apache.commons + commons-collections4 + 4.4 + + + + + repo.egovernments.org + eGov ERP Releases Repository + https://nexus-repo.egovernments.org/nexus/content/repositories/releases/ + + + repo.egovernments.org.snapshots + eGov ERP Releases Repository + https://nexus-repo.egovernments.org/nexus/content/repositories/snapshots/ + + + repo.egovernments.org.public + eGov Public Repository Group + https://nexus-repo.egovernments.org/nexus/content/groups/public/ + + + repo.digit.org + eGov DIGIT Releases Repository + https://nexus-repo.digit.org/nexus/content/repositories/snapshots/ + + + diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/Main.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/Main.java new file mode 100644 index 00000000000..c807128f2c6 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/Main.java @@ -0,0 +1,19 @@ +package org.egov.filemgmnt; + +import org.egov.tracer.config.TracerConfiguration; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; + +@Import({ TracerConfiguration.class }) +@SpringBootApplication +@ComponentScan(basePackages = { "org.egov.filemgmnt", "org.egov.filemgmnt.web.controllers", + "org.egov.filemgmnt.config" }) +public class Main { // NOPMD + + public static void main(String[] args) { // NOPMD + SpringApplication.run(Main.class, args); + } + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/FilemgmntConfiguration.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/FilemgmntConfiguration.java new file mode 100644 index 00000000000..f21f189dc8f --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/FilemgmntConfiguration.java @@ -0,0 +1,24 @@ +package org.egov.filemgmnt.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@Component +public class FilemgmntConfiguration { + + @Value("${app.timezone}") + private String timeZone; + + @Value("${persister.save.applicantpersonal.topic}") + private String saveApplicantPersonalTopic; + + @Value("${persister.update.applicantpersonal.topic}") + private String updateApplicantPersonalTopic; +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/JsonMapperConfiguration.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/JsonMapperConfiguration.java new file mode 100644 index 00000000000..34c6ceb0e13 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/JsonMapperConfiguration.java @@ -0,0 +1,50 @@ +package org.egov.filemgmnt.config; + +import java.util.TimeZone; + +import javax.annotation.PostConstruct; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; + +@Configuration +class JsonMapperConfiguration { + + private final FilemgmntConfiguration filemgmntConfig; + + @Autowired + JsonMapperConfiguration(FilemgmntConfiguration filemgmntConfig) { + this.filemgmntConfig = filemgmntConfig; + } + + @PostConstruct + void initialize() { + TimeZone.setDefault(TimeZone.getTimeZone(filemgmntConfig.getTimeZone())); + } + + @Bean + public ObjectMapper objectMapper() { + + return JsonMapper.builder() + .addModules(new JavaTimeModule()) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS) +// .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES) + .defaultTimeZone(TimeZone.getTimeZone(filemgmntConfig.getTimeZone())) + .build(); + } + + @Bean + @Autowired + public MappingJackson2HttpMessageConverter jacksonConverter(ObjectMapper objectMapper) { + return new MappingJackson2HttpMessageConverter(objectMapper); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/OpenApiDocConfiguration.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/OpenApiDocConfiguration.java new file mode 100644 index 00000000000..cc0ba2ba7b0 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/config/OpenApiDocConfiguration.java @@ -0,0 +1,31 @@ +package org.egov.filemgmnt.config; + +import org.springdoc.core.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.servers.Server; + +@Configuration +class OpenApiDocConfiguration { + + @Bean + GroupedOpenApi fileMgmntApi() { + return GroupedOpenApi.builder() + .group("1.0.0") + .pathsToMatch("/v1/**") + .packagesToScan("org.egov.filemgmnt.web") + .build(); + } + + @Bean + OpenAPI fileMgmntApiInfo() { + return new OpenAPI().info(new Info().title("File Management API's") + .description("egov File Management Service API's") + .version("1.0.0")) + .addServersItem(new Server().url("http://localhost:8080/filemgmnt") + .description("Local Development Server")); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/ApplicantPersonalEnrichment.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/ApplicantPersonalEnrichment.java new file mode 100644 index 00000000000..320973c86d2 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/ApplicantPersonalEnrichment.java @@ -0,0 +1,39 @@ +package org.egov.filemgmnt.enrichment; + +import java.util.UUID; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.contract.request.User; +import org.egov.filemgmnt.web.models.ApplicantPersonalRequest; +import org.egov.filemgmnt.web.models.AuditDetails; +import org.springframework.stereotype.Component; + +@Component +public class ApplicantPersonalEnrichment implements BaseEnrichment { + + public void enrichCreate(ApplicantPersonalRequest request) { + + RequestInfo requestInfo = request.getRequestInfo(); + User userInfo = requestInfo.getUserInfo(); + + AuditDetails auditDetails = buildAuditDetails(userInfo.getUuid(), Boolean.TRUE); + + request.getApplicantPersonals() + .forEach(personal -> { + personal.setId(UUID.randomUUID() + .toString()); + personal.setAuditDetails(auditDetails); + }); + } + + public void enrichUpdate(ApplicantPersonalRequest request) { + + RequestInfo requestInfo = request.getRequestInfo(); + User userInfo = requestInfo.getUserInfo(); + + AuditDetails auditDetails = buildAuditDetails(userInfo.getUuid(), Boolean.FALSE); + + request.getApplicantPersonals() + .forEach(personal -> personal.setAuditDetails(auditDetails)); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/ApplicantServiceEnrichment.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/ApplicantServiceEnrichment.java new file mode 100644 index 00000000000..2f58dcb5d6e --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/ApplicantServiceEnrichment.java @@ -0,0 +1,39 @@ +package org.egov.filemgmnt.enrichment; + +import java.util.UUID; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.contract.request.User; +import org.egov.filemgmnt.web.models.ApplicantServiceRequest; +import org.egov.filemgmnt.web.models.AuditDetails; +import org.springframework.stereotype.Component; + +@Component +public class ApplicantServiceEnrichment implements BaseEnrichment { + + public void enrichCreate(ApplicantServiceRequest request) { + + RequestInfo requestInfo = request.getRequestInfo(); + User userInfo = requestInfo.getUserInfo(); + + AuditDetails auditDetails = buildAuditDetails(userInfo.getUuid(), Boolean.TRUE); + + request.getApplicantServices() + .forEach(personal -> { + personal.setId(UUID.randomUUID() + .toString()); + personal.setAuditDetails(auditDetails); + }); + } + +// public void enrichUpdate(ApplicantPersonalRequest request) { +// +// RequestInfo requestInfo = request.getRequestInfo(); +// User userInfo = requestInfo.getUserInfo(); +// +// AuditDetails auditDetails = buildAuditDetails(userInfo.getUuid(), Boolean.FALSE); +// +// request.getApplicantPersonals() +// .forEach(personal -> personal.setAuditDetails(auditDetails)); +// } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/BaseEnrichment.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/BaseEnrichment.java new file mode 100644 index 00000000000..339f644b54c --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/enrichment/BaseEnrichment.java @@ -0,0 +1,26 @@ +package org.egov.filemgmnt.enrichment; + +import org.egov.filemgmnt.web.models.AuditDetails; + +interface BaseEnrichment { + + default AuditDetails buildAuditDetails(String by, Boolean create) { + AuditDetails auditDetails; + + Long currentTime = Long.valueOf(System.currentTimeMillis()); + if (create) { + auditDetails = AuditDetails.builder() + .createdBy(by) + .createdTime(currentTime) + .lastModifiedBy(by) + .lastModifiedTime(currentTime) + .build(); + } else { + auditDetails = AuditDetails.builder() + .lastModifiedBy(by) + .lastModifiedTime(currentTime) + .build(); + } + return auditDetails; + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/kafka/Producer.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/kafka/Producer.java new file mode 100644 index 00000000000..c7f22b50ef6 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/kafka/Producer.java @@ -0,0 +1,15 @@ +package org.egov.filemgmnt.kafka; + +import org.egov.tracer.kafka.CustomKafkaTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class Producer { + @Autowired + private CustomKafkaTemplate kafkaTemplate; + + public void push(String topic, Object value) { + kafkaTemplate.send(topic, value); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ApplicantPersonalRepository.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ApplicantPersonalRepository.java new file mode 100644 index 00000000000..0bdac0ada9f --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ApplicantPersonalRepository.java @@ -0,0 +1,39 @@ +package org.egov.filemgmnt.repository; + +import java.util.ArrayList; +import java.util.List; + +import org.egov.filemgmnt.repository.querybuilder.ApplicantPersonalQueryBuilder; +import org.egov.filemgmnt.repository.rowmapper.ApplicantPersonalRowMapper; +import org.egov.filemgmnt.web.models.ApplicantPersonal; +import org.egov.filemgmnt.web.models.ApplicantPersonalSearchCriteria; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +@Repository +public class ApplicantPersonalRepository { + + private final JdbcTemplate jdbcTemplate; + private final ApplicantPersonalQueryBuilder queryBuilder; + private final ApplicantPersonalRowMapper rowMapper; + + @Autowired + ApplicantPersonalRepository(JdbcTemplate jdbcTemplate, ApplicantPersonalQueryBuilder queryBuilder, + ApplicantPersonalRowMapper rowMapper) { + this.jdbcTemplate = jdbcTemplate; + this.queryBuilder = queryBuilder; + this.rowMapper = rowMapper; + } + + public List getApplicantPersonals(ApplicantPersonalSearchCriteria criteria) { + List preparedStmtValues = new ArrayList<>(); + + String query = queryBuilder.getApplicantPersonalSearchQuery(criteria, preparedStmtValues, Boolean.FALSE); + + List result = jdbcTemplate.query(query, preparedStmtValues.toArray(), rowMapper); + + return result; + } + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ApplicantServiceRepository.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ApplicantServiceRepository.java new file mode 100644 index 00000000000..2593d76d211 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ApplicantServiceRepository.java @@ -0,0 +1,37 @@ +package org.egov.filemgmnt.repository; + +import java.util.ArrayList; +import java.util.List; + +import org.egov.filemgmnt.web.models.ApplicantService; +import org.egov.filemgmnt.web.models.ApplicantServiceSearchCriteria; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +@Repository +public class ApplicantServiceRepository { + + private final JdbcTemplate jdbcTemplate; + private final ApplicantServiceQueryBuilder queryBuilder; + private final ApplicantServiceRowMapper rowMapper; + + @Autowired + ApplicantServiceRepository(JdbcTemplate jdbcTemplate, ApplicantServiceQueryBuilder queryBuilder, + ApplicantServiceRowMapper rowMapper) { + this.jdbcTemplate = jdbcTemplate; + this.queryBuilder = queryBuilder; + this.rowMapper = rowMapper; + } + + public List getApplicantServices(ApplicantServiceSearchCriteria criteria) { + List preparedStmtValues = new ArrayList<>(); + + String query = queryBuilder.getApplicantServiceSearchQuery(criteria, preparedStmtValues, Boolean.FALSE); + + List result = jdbcTemplate.query(query, preparedStmtValues.toArray(), rowMapper); + + return result; + } + +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ServiceRequestRepository.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ServiceRequestRepository.java new file mode 100644 index 00000000000..699c5069217 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/ServiceRequestRepository.java @@ -0,0 +1,44 @@ +package org.egov.filemgmnt.repository; + +import java.util.Map; + +import org.egov.tracer.model.ServiceCallException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +import lombok.extern.slf4j.Slf4j; + +@Repository +@Slf4j +public class ServiceRequestRepository { + + private final ObjectMapper mapper; + + private final RestTemplate restTemplate; + + @Autowired + public ServiceRequestRepository(ObjectMapper mapper, RestTemplate restTemplate) { + this.mapper = mapper; + this.restTemplate = restTemplate; + } + + public Object fetchResult(StringBuilder uri, Object request) { + mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + Object response = null; + try { + response = restTemplate.postForObject(uri.toString(), request, Map.class); + } catch (HttpClientErrorException e) { + log.error("External Service threw an Exception: ", e); + throw new ServiceCallException(e.getResponseBodyAsString()); + } catch (Exception e) { + log.error("Exception while fetching from searcher: ", e); + } + + return response; + } +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/ApplicantPersonalQueryBuilder.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/ApplicantPersonalQueryBuilder.java new file mode 100644 index 00000000000..5cb65686a02 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/ApplicantPersonalQueryBuilder.java @@ -0,0 +1,27 @@ +package org.egov.filemgmnt.repository.querybuilder; + +import java.util.List; + +import javax.validation.constraints.NotNull; + +import org.egov.filemgmnt.web.models.ApplicantPersonalSearchCriteria; +import org.springframework.stereotype.Component; + +@Component +public class ApplicantPersonalQueryBuilder extends BaseQueryBuilder { + + private static final String QUERY = new StringBuilder().append(" SELECT ap.id, ap.aadhaarno, ap.email, ap.firstname, ap.lastname, ap.title, ap.mobileno, ap.tenantid") + .append(" , ap.createdby, ap.createdat, ap.lastmodifiedby, ap.lastmodifiedat") + .append(" FROM eg_fm_applicantpersonal ap") + .toString(); + + public String getApplicantPersonalSearchQuery(@NotNull ApplicantPersonalSearchCriteria criteria, + @NotNull List preparedStmtValues, Boolean isCount) { + + StringBuilder query = new StringBuilder(QUERY); + + addIdsFilter("ap.id", criteria.getIds(), query, preparedStmtValues); + + return query.toString(); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/ApplicantServiceQueryBuilder.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/ApplicantServiceQueryBuilder.java new file mode 100644 index 00000000000..226fe683652 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/ApplicantServiceQueryBuilder.java @@ -0,0 +1,27 @@ +package org.egov.filemgmnt.repository.querybuilder; + +import java.util.List; + +import javax.validation.constraints.NotNull; + +import org.egov.filemgmnt.web.models.ApplicantServiceSearchCriteria; +import org.springframework.stereotype.Component; + +@Component +public class ApplicantServiceQueryBuilder extends BaseQueryBuilder { + + private static final String QUERY = new StringBuilder().append(" SELECT aps.id, aps.applicantpersonalid, aps.serviceid, aps.servicecode, aps.businessservice, aps.workflowcode") + .append(" , ap.createdby, ap.createddate, ap.lastmodifiedby, ap.lastmodifieddate") + .append(" FROM eg_fm_servicedetails aps") + .toString(); + + public String getApplicantServiceSearchQuery(@NotNull ApplicantServiceSearchCriteria criteria, + @NotNull List preparedStmtValues, Boolean isCount) { + + StringBuilder query = new StringBuilder(QUERY); + + addIdsFilter("ap.id", criteria.getIds(), query, preparedStmtValues); + + return query.toString(); + } +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/BaseQueryBuilder.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/BaseQueryBuilder.java new file mode 100644 index 00000000000..69730a6b05e --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/querybuilder/BaseQueryBuilder.java @@ -0,0 +1,35 @@ +package org.egov.filemgmnt.repository.querybuilder; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.commons.collections4.CollectionUtils; + +class BaseQueryBuilder { + + void addIdsFilter(String column, List ids, StringBuilder query, List paramValues) { + if (CollectionUtils.isNotEmpty(ids)) { + addWhereClause(paramValues, query); + query.append(column) + .append(" IN (") + .append(getStatementParameters(ids.size())) + .append(')'); + ids.forEach(paramValues::add); + } + } + + private void addWhereClause(List values, StringBuilder query) { + if (CollectionUtils.isEmpty(values)) { + query.append(" WHERE "); + } else { + query.append(" AND "); + } + } + + private String getStatementParameters(int count) { + return Collections.nCopies(count, "LOWER(?)") + .stream() + .collect(Collectors.joining(", ")); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/ApplicantPersonalRowMapper.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/ApplicantPersonalRowMapper.java new file mode 100644 index 00000000000..9a78c6ad9f5 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/ApplicantPersonalRowMapper.java @@ -0,0 +1,36 @@ +package org.egov.filemgmnt.repository.rowmapper; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.egov.filemgmnt.web.models.ApplicantPersonal; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.ResultSetExtractor; +import org.springframework.stereotype.Component; + +@Component +public class ApplicantPersonalRowMapper implements ResultSetExtractor>, BaseRowMapper { + + @Override + public List extractData(ResultSet rs) throws SQLException, DataAccessException { // NOPMD + + List result = new ArrayList<>(); + while (rs.next()) { + result.add(ApplicantPersonal.builder() + .id(rs.getString("id")) + .aadhaarNo(rs.getString("aadhaarno")) + .email(rs.getString("email")) + .firstName(rs.getString("firstname")) + .lastName(rs.getString("lastname")) + .title(rs.getString("title")) + .mobileNo(rs.getString("mobileno")) + .tenantId(rs.getString("tenantid")) + .auditDetails(getAuditDetails(rs)) + .build()); + } + + return result; + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/ApplicantServiceRowMapper.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/ApplicantServiceRowMapper.java new file mode 100644 index 00000000000..c376d075f65 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/ApplicantServiceRowMapper.java @@ -0,0 +1,34 @@ +package org.egov.filemgmnt.repository.rowmapper; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.egov.filemgmnt.web.models.ApplicantService; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.ResultSetExtractor; +import org.springframework.stereotype.Component; + +@Component +public class ApplicantServiceRowMapper implements ResultSetExtractor>, BaseRowMapper { + + @Override + public List extractData(ResultSet rs) throws SQLException, DataAccessException { // NOPMD + + List result = new ArrayList<>(); + while (rs.next()) { + result.add(ApplicantService.builder() + .id(rs.getString("id")) + .applicantPersonalId(rs.getString("applicantpersonalid")) + .serviceId(rs.getString("serviceid")) + .serviceCode(rs.getString("servicecode")) + .businessService(rs.getString("businessservice")) + .workflowCode(rs.getString("workflowcode")) + .auditDetails(getAuditDetails(rs)) + .build()); + } + + return result; + } +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/BaseRowMapper.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/BaseRowMapper.java new file mode 100644 index 00000000000..cd40735be73 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/repository/rowmapper/BaseRowMapper.java @@ -0,0 +1,19 @@ +package org.egov.filemgmnt.repository.rowmapper; + +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.egov.filemgmnt.web.models.AuditDetails; + +interface BaseRowMapper { + + default AuditDetails getAuditDetails(ResultSet rs) throws SQLException { + return AuditDetails.builder() + .createdBy(rs.getString("createdby")) + .createdTime(Long.valueOf(rs.getLong("createdat"))) + .lastModifiedBy(rs.getString("lastmodifiedby")) + .lastModifiedTime(Long.valueOf(rs.getLong("lastmodifiedat"))) + .build(); + } + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/service/ApplicantPersonalService.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/service/ApplicantPersonalService.java new file mode 100644 index 00000000000..2523740efb3 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/service/ApplicantPersonalService.java @@ -0,0 +1,79 @@ +package org.egov.filemgmnt.service; + +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.egov.filemgmnt.config.FilemgmntConfiguration; +import org.egov.filemgmnt.enrichment.ApplicantPersonalEnrichment; +import org.egov.filemgmnt.kafka.Producer; +import org.egov.filemgmnt.repository.ApplicantPersonalRepository; +import org.egov.filemgmnt.validators.ApplicantPersonalValidator; +import org.egov.filemgmnt.web.models.ApplicantPersonal; +import org.egov.filemgmnt.web.models.ApplicantPersonalRequest; +import org.egov.filemgmnt.web.models.ApplicantPersonalSearchCriteria; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ApplicantPersonalService { + + private final Producer producer; + private final FilemgmntConfiguration filemgmntConfig; + private final ApplicantPersonalValidator validatorService; + private final ApplicantPersonalEnrichment enrichmentService; + private final ApplicantPersonalRepository repository; + + @Autowired + ApplicantPersonalService(ApplicantPersonalValidator validatorService, ApplicantPersonalEnrichment enrichmentService, + ApplicantPersonalRepository repository, Producer producer, + FilemgmntConfiguration filemgmntConfig) { + this.validatorService = validatorService; + this.enrichmentService = enrichmentService; + this.repository = repository; + this.producer = producer; + this.filemgmntConfig = filemgmntConfig; + } + + public List create(ApplicantPersonalRequest request) { + // validate request + validatorService.validateCreate(request); + + // enrich request + enrichmentService.enrichCreate(request); + + producer.push(filemgmntConfig.getSaveApplicantPersonalTopic(), request); + + return request.getApplicantPersonals(); + } + + public List search(ApplicantPersonalSearchCriteria criteria) { + + if (CollectionUtils.isEmpty(criteria.getIds())) { +// throw new GlobalException(ErrorCodes.APPLICANT_PERSONAL_INVALID_SEARCH_CRITERIA, +// "At least one applicant id is required."); + } + + return repository.getApplicantPersonals(criteria); + } + + public List update(ApplicantPersonalRequest request) { + + List ids = new LinkedList<>(); + request.getApplicantPersonals() + .forEach(personal -> ids.add(personal.getId())); + + // search database + List searchResult = repository.getApplicantPersonals(ApplicantPersonalSearchCriteria.builder() + .ids(ids) + .build()); + // validate request + validatorService.validateUpdate(request, searchResult); + + enrichmentService.enrichUpdate(request); + + producer.push(filemgmntConfig.getSaveApplicantPersonalTopic(), request); + + return request.getApplicantPersonals(); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/service/ApplicantServiceService.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/service/ApplicantServiceService.java new file mode 100644 index 00000000000..35c428a0653 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/service/ApplicantServiceService.java @@ -0,0 +1,26 @@ +package org.egov.filemgmnt.service; + +import java.util.List; + +import javax.validation.Valid; + +import org.egov.filemgmnt.web.models.ApplicantService; +import org.egov.filemgmnt.web.models.ApplicantServiceRequest; +import org.apache.commons.collections4.CollectionUtils; +import org.egov.filemgmnt.config.FilemgmntConfiguration; +import org.egov.filemgmnt.enrichment.ApplicantServiceEnrichment; +import org.egov.filemgmnt.kafka.Producer; +import org.egov.filemgmnt.repository.ApplicantServiceRepository; +import org.egov.filemgmnt.validators.ApplicantPersonalValidator; +import org.egov.filemgmnt.web.models.ApplicantPersonalSearchCriteria; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +public class ApplicantServiceService { + + public List create(@Valid ApplicantServiceRequest request) { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/CoreUtils.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/CoreUtils.java new file mode 100644 index 00000000000..81824a30327 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/CoreUtils.java @@ -0,0 +1,12 @@ +package org.egov.filemgmnt.util; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class CoreUtils { + + public static void ignore(Throwable t) { + // Ignore error + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/GlobalException.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/GlobalException.java new file mode 100644 index 00000000000..06dd3371b2f --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/GlobalException.java @@ -0,0 +1,14 @@ +package org.egov.filemgmnt.util; + +import org.egov.filemgmnt.web.enums.ErrorCodes; +import org.egov.tracer.model.CustomException; + +public class GlobalException extends CustomException { + + private static final long serialVersionUID = -5316203007519923839L; + + public GlobalException(ErrorCodes errorCode, String message) { + super(errorCode.getCode(), message); + } + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/IdgenUtil.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/IdgenUtil.java new file mode 100644 index 00000000000..cb36f008dfa --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/IdgenUtil.java @@ -0,0 +1,65 @@ +package org.egov.filemgmnt.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.filemgmnt.repository.ServiceRequestRepository; +import org.egov.filemgmnt.web.models.idgen.IdGenerationRequest; +import org.egov.filemgmnt.web.models.idgen.IdGenerationResponse; +import org.egov.filemgmnt.web.models.idgen.IdRequest; +import org.egov.filemgmnt.web.models.idgen.IdResponse; +import org.egov.tracer.model.CustomException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import com.fasterxml.jackson.databind.ObjectMapper; + +@Component +public class IdgenUtil { + + @Value("${egov.idgen.host}") + private String idGenHost; + + @Value("${egov.idgen.path}") + private String idGenPath; + + @Autowired + private ObjectMapper mapper; + + @Autowired + private ServiceRequestRepository restRepo; + + public List getIdList(RequestInfo requestInfo, String tenantId, String idName, String idformat, + Integer count) { + List reqList = new ArrayList<>(); + for (int i = 0; i < count; i++) { + reqList.add(IdRequest.builder() + .idName(idName) + .format(idformat) + .tenantId(tenantId) + .build()); + } + + IdGenerationRequest request = IdGenerationRequest.builder() + .idRequests(reqList) + .requestInfo(requestInfo) + .build(); + StringBuilder uri = new StringBuilder(idGenHost).append(idGenPath); + IdGenerationResponse response = mapper.convertValue(restRepo.fetchResult(uri, request), + IdGenerationResponse.class); + + List idResponses = response.getIdResponses(); + + if (CollectionUtils.isEmpty(idResponses)) { + throw new CustomException("IDGEN ERROR", "No ids returned from idgen Service"); + } + + return idResponses.stream() + .map(IdResponse::getId) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/MdmsUtil.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/MdmsUtil.java new file mode 100644 index 00000000000..f1c8fb43272 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/MdmsUtil.java @@ -0,0 +1,79 @@ +package org.egov.filemgmnt.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.mdms.model.MasterDetail; +import org.egov.mdms.model.MdmsCriteria; +import org.egov.mdms.model.MdmsCriteriaReq; +import org.egov.mdms.model.ModuleDetail; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import com.jayway.jsonpath.JsonPath; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class MdmsUtil { + + @Autowired + private RestTemplate restTemplate; + + @Value("${egov.mdms.host}") + private String mdmsHost; + + @Value("${egov.mdms.search.endpoint}") + private String mdmsUrl; + + @Value("${egov.mdms.master.name}") + private String masterName; + + @Value("${egov.mdms.module.name}") + private String moduleName; + + public Integer fetchRegistrationChargesFromMdms(RequestInfo requestInfo, String tenantId) { + StringBuilder uri = new StringBuilder(); + uri.append(mdmsHost) + .append(mdmsUrl); + MdmsCriteriaReq mdmsCriteriaReq = getMdmsRequestForCategoryList(requestInfo, tenantId); + + Integer rate = 0; + try { + Object response = restTemplate.postForObject(uri.toString(), mdmsCriteriaReq, Map.class); + rate = JsonPath.read(response, "$.MdmsRes.VTR.RegistrationCharges.[0].amount"); + } catch (Exception e) { + log.error("Exception occurred while fetching category lists from mdms: ", e); + } + // log.info(ulbToCategoryListMap.toString()); + return rate; + } + + private MdmsCriteriaReq getMdmsRequestForCategoryList(RequestInfo requestInfo, String tenantId) { + MasterDetail masterDetail = new MasterDetail(); + masterDetail.setName(masterName); + List masterDetailList = new ArrayList<>(); + masterDetailList.add(masterDetail); + + ModuleDetail moduleDetail = new ModuleDetail(); + moduleDetail.setMasterDetails(masterDetailList); + moduleDetail.setModuleName(moduleName); + List moduleDetailList = new ArrayList<>(); + moduleDetailList.add(moduleDetail); + + MdmsCriteria mdmsCriteria = new MdmsCriteria(); + mdmsCriteria.setTenantId(tenantId.split("\\.")[0]); + mdmsCriteria.setModuleDetails(moduleDetailList); + + MdmsCriteriaReq mdmsCriteriaReq = new MdmsCriteriaReq(); + mdmsCriteriaReq.setMdmsCriteria(mdmsCriteria); + mdmsCriteriaReq.setRequestInfo(requestInfo); + + return mdmsCriteriaReq; + } +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/ResponseInfoFactory.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/ResponseInfoFactory.java new file mode 100644 index 00000000000..3d172087111 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/ResponseInfoFactory.java @@ -0,0 +1,33 @@ +package org.egov.filemgmnt.util; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.contract.response.ResponseInfo; +import org.springframework.stereotype.Component; + +@Component +public class ResponseInfoFactory { + + public ResponseInfo createResponseInfoFromRequestInfo(final RequestInfo requestInfo, final Boolean success) { + + final String apiId = requestInfo != null ? requestInfo.getApiId() : ""; + final String ver = requestInfo != null ? requestInfo.getVer() : ""; + Long ts = null; + if (requestInfo != null) { + ts = requestInfo.getTs(); + } + String resMsgId = "uief87324"; // FIXME : Hard-coded + String msgId = requestInfo != null ? requestInfo.getMsgId() : ""; + String responseStatus = success ? "successful" : "failed"; + + return ResponseInfo.builder() + .apiId(apiId) + .ver(ver) + .ts(ts) + .resMsgId(resMsgId) + .msgId(msgId) + .resMsgId(resMsgId) + .status(responseStatus) + .build(); + } + +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/UrlShortenerUtil.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/UrlShortenerUtil.java new file mode 100644 index 00000000000..73d86c1be7f --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/util/UrlShortenerUtil.java @@ -0,0 +1,42 @@ +package org.egov.filemgmnt.util; + +import java.util.HashMap; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Component +public class UrlShortenerUtil { + + @Autowired + private RestTemplate restTemplate; + + @Value("${egov.url.shortner.host}") + private String urlShortnerHost; + + @Value("${egov.url.shortner.endpoint}") + private String urShortnerPath; + + public String getShortenedUrl(String url) { + + HashMap body = new HashMap<>(); + body.put("url", url); + StringBuilder builder = new StringBuilder(urlShortnerHost); + builder.append(urShortnerPath); + String res = restTemplate.postForObject(builder.toString(), body, String.class); + + if (StringUtils.isEmpty(res)) { + log.error("URL_SHORTENING_ERROR", "Unable to shorten url: " + url); + return url; + } else { + return res; + } + } + +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/validators/ApplicantPersonalValidator.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/validators/ApplicantPersonalValidator.java new file mode 100644 index 00000000000..1ba5a231ed6 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/validators/ApplicantPersonalValidator.java @@ -0,0 +1,47 @@ +package org.egov.filemgmnt.validators; + +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.egov.filemgmnt.util.GlobalException; +import org.egov.filemgmnt.web.enums.ErrorCodes; +import org.egov.filemgmnt.web.models.ApplicantPersonal; +import org.egov.filemgmnt.web.models.ApplicantPersonalRequest; +import org.springframework.stereotype.Component; + +/** + * The Class ApplicantPersonalValidator. + */ +@Component +public class ApplicantPersonalValidator { + + /** + * Validate applicant personal create request. + * + * @param request the {@link ApplicantPersonalRequest} + */ + public void validateCreate(ApplicantPersonalRequest request) { + if (CollectionUtils.isEmpty(request.getApplicantPersonals())) { + new GlobalException(ErrorCodes.APPLICANT_PERSONAL_REQUIRED, "Atleast one applicant personal is required."); + } + } + + /** + * Validate applicant personal update request. + * + * @param request the {@link ApplicantPersonalRequest} + */ + public void validateUpdate(ApplicantPersonalRequest request, List searchResult) { + List applicantPersonals = request.getApplicantPersonals(); + + if (CollectionUtils.isEmpty(applicantPersonals)) { + new GlobalException(ErrorCodes.APPLICANT_PERSONAL_REQUIRED, "Atleast one applicant personal is required."); + } + + if (applicantPersonals.size() != searchResult.size()) { + throw new GlobalException(ErrorCodes.APPLICANT_PERSONAL_INVALID_UPDATE, + "Applicant Personal(s) not found in database."); + } + } + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/validators/ApplicantServiceValidator.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/validators/ApplicantServiceValidator.java new file mode 100644 index 00000000000..e69de29bb2d diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/.gitkeep b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/ApplicantPersonalsController.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/ApplicantPersonalsController.java new file mode 100644 index 00000000000..5ed957799bf --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/ApplicantPersonalsController.java @@ -0,0 +1,62 @@ +package org.egov.filemgmnt.web.controllers; + +import java.util.List; + +import javax.validation.Valid; + +import org.egov.filemgmnt.service.ApplicantPersonalService; +import org.egov.filemgmnt.util.ResponseInfoFactory; +import org.egov.filemgmnt.web.models.ApplicantPersonal; +import org.egov.filemgmnt.web.models.ApplicantPersonalRequest; +import org.egov.filemgmnt.web.models.ApplicantPersonalResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/v1") +@Validated +public class ApplicantPersonalsController { + + @Autowired + private ResponseInfoFactory responseInfoFactory; + + private final ApplicantPersonalService personalService; + + @Autowired + public ApplicantPersonalsController(ApplicantPersonalService personalService) { + + this.personalService = personalService; + } + + @PostMapping("/applicantpersonals/_create") + public ResponseEntity create(@Valid @RequestBody ApplicantPersonalRequest request) { + + List personals = personalService.create(request); + + ApplicantPersonalResponse response = ApplicantPersonalResponse.builder() + .responseInfo(responseInfoFactory.createResponseInfoFromRequestInfo(request.getRequestInfo(), + Boolean.TRUE)) + .applicantPersonals(personals) + .build(); + return ResponseEntity.ok(response); + } + + @PutMapping("/applicantpersonals/_update") + public ResponseEntity update(@Valid @RequestBody ApplicantPersonalRequest request) { + + List personals = personalService.update(request); + + ApplicantPersonalResponse response = ApplicantPersonalResponse.builder() + .responseInfo(responseInfoFactory.createResponseInfoFromRequestInfo(request.getRequestInfo(), + Boolean.TRUE)) + .applicantPersonals(personals) + .build(); + return ResponseEntity.ok(response); + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/ApplicantServiceController.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/ApplicantServiceController.java new file mode 100644 index 00000000000..8855a63fe88 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/controllers/ApplicantServiceController.java @@ -0,0 +1,51 @@ + +package org.egov.filemgmnt.web.controllers; + +import java.util.List; + +import javax.validation.Valid; + +import org.egov.filemgmnt.service.ApplicantServiceService; +import org.egov.filemgmnt.util.ResponseInfoFactory; +import org.egov.filemgmnt.web.models.ApplicantService; +import org.egov.filemgmnt.web.models.ApplicantServiceRequest; +import org.egov.filemgmnt.web.models.ApplicantServiceResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +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; + +@RestController +@RequestMapping("/v1") +@Validated + +public class ApplicantServiceController { + + @Autowired + private ResponseInfoFactory responseInfoFactory; + + private final ApplicantServiceService serviceService; + + @Autowired + public ApplicantServiceController(ApplicantServiceService serviceService) { + + this.serviceService = serviceService; + } + + @PostMapping("/applicantservices/_create") + public ResponseEntity create(@Valid @RequestBody ApplicantServiceRequest request) { + + List services = serviceService.create(request); + + ApplicantServiceResponse response = ApplicantServiceResponse.builder() + .responseInfo(responseInfoFactory.createResponseInfoFromRequestInfo(request.getRequestInfo(), + Boolean.TRUE)) + .applicantServices(services) + .build(); + return ResponseEntity.ok(response); + } + +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/enums/ErrorCodes.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/enums/ErrorCodes.java new file mode 100644 index 00000000000..4c6b1027e57 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/enums/ErrorCodes.java @@ -0,0 +1,17 @@ +package org.egov.filemgmnt.web.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ErrorCodes { + + // Applicant Personal + APPLICANT_PERSONAL_REQUIRED("REQUIRED"), + APPLICANT_PERSONAL_NOT_FOUND("NOT_FOUND"), + APPLICANT_PERSONAL_INVALID_SEARCH_CRITERIA("INVALID_CRITERIA"), + APPLICANT_PERSONAL_INVALID_UPDATE("INVALID_UPDATE"); + + private String code; +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonal.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonal.java new file mode 100644 index 00000000000..de612e5d87e --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonal.java @@ -0,0 +1,60 @@ +package org.egov.filemgmnt.web.models; + +import javax.validation.constraints.Size; + +import org.springframework.validation.annotation.Validated; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Schema(description = "A Object holds the basic data for a Applicant Personal") +@Validated + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ApplicantPersonal { + + @Size(max = 64) + @JsonProperty("id") + private String id; + + @Size(max = 64) + @JsonProperty("aadhaarNo") + private String aadhaarNo; + + @Size(max = 64) + @JsonProperty("email") + private String email; + + @Size(max = 64) + @JsonProperty("firstName") + private String firstName; + + @Size(max = 64) + @JsonProperty("lastName") + private String lastName; + + @Size(max = 64) + @JsonProperty("title") + private String title; + + @Size(max = 15) + @JsonProperty("mobileNo") + private String mobileNo; + + @Size(max = 64) + @JsonProperty("tenantId") + private String tenantId; + + @JsonProperty("auditDetails") + private AuditDetails auditDetails; +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalRequest.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalRequest.java new file mode 100644 index 00000000000..67766f89848 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalRequest.java @@ -0,0 +1,41 @@ +package org.egov.filemgmnt.web.models; + +import java.util.ArrayList; +import java.util.List; + +import javax.validation.Valid; + +import org.egov.common.contract.request.RequestInfo; +import org.springframework.validation.annotation.Validated; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Validated +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ApplicantPersonalRequest { + @JsonProperty("RequestInfo") + private RequestInfo requestInfo; + + @JsonProperty("ApplicantPersonals") + @Valid + private List applicantPersonals; + + public ApplicantPersonalRequest addApplicantPersonal(ApplicantPersonal applicantPersonal) { + if (applicantPersonals == null) { + applicantPersonals = new ArrayList<>(); + } + applicantPersonals.add(applicantPersonal); + + return this; + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalResponse.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalResponse.java new file mode 100644 index 00000000000..5f0694293a8 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalResponse.java @@ -0,0 +1,45 @@ +package org.egov.filemgmnt.web.models; + +import java.util.ArrayList; +import java.util.List; + +import javax.validation.Valid; + +import org.egov.common.contract.response.ResponseInfo; +import org.springframework.validation.annotation.Validated; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Validated +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ApplicantPersonalResponse { + + @JsonProperty("ResponseInfo") + private ResponseInfo responseInfo; + + @JsonProperty("ApplicantPersonals") + @Valid + private List applicantPersonals; + + @JsonProperty("Count") + private int count; + + public ApplicantPersonalResponse addApplicantPersonal(ApplicantPersonal applicantPersonal) { + if (applicantPersonals == null) { + applicantPersonals = new ArrayList<>(); + } + applicantPersonals.add(applicantPersonal); + + return this; + } +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalSearchCriteria.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalSearchCriteria.java new file mode 100644 index 00000000000..7a3fcdad579 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantPersonalSearchCriteria.java @@ -0,0 +1,22 @@ +package org.egov.filemgmnt.web.models; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ApplicantPersonalSearchCriteria { + + @JsonProperty("ids") + private List ids; +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantService.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantService.java new file mode 100644 index 00000000000..e52b3ded046 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantService.java @@ -0,0 +1,54 @@ +package org.egov.filemgmnt.web.models; + +import javax.validation.constraints.Size; + +import org.springframework.validation.annotation.Validated; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Schema(description = "A Object holds the data for a Applicant Service") +@Validated + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder + +public class ApplicantService { + + @Size(max = 64) + @JsonProperty("id") + private String id; + + @Size(max = 64) + @JsonProperty("applicantPersonalId") + private String applicantPersonalId; + + @Size(max = 64) + @JsonProperty("serviceId") + private String serviceId; + + @Size(max = 64) + @JsonProperty("serviceCode") + private String serviceCode; + + @Size(max = 64) + @JsonProperty("businessService") + private String businessService; + + @Size(max = 64) + @JsonProperty("workflowCode") + private String workflowCode; + + @JsonProperty("auditDetails") + private AuditDetails auditDetails; + +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceRequest.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceRequest.java new file mode 100644 index 00000000000..cf5c4b11e5c --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceRequest.java @@ -0,0 +1,42 @@ +package org.egov.filemgmnt.web.models; + +import java.util.ArrayList; +import java.util.List; + +import javax.validation.Valid; + +import org.egov.common.contract.request.RequestInfo; +import org.springframework.validation.annotation.Validated; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Validated +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder + +public class ApplicantServiceRequest { + @JsonProperty("RequestInfo") + private RequestInfo requestInfo; + + @JsonProperty("ApplicantServices") + @Valid + private List applicantServices; + + public ApplicantServiceRequest addApplicantService(ApplicantService applicantService) { + if (applicantServices == null) { + applicantServices = new ArrayList<>(); + } + applicantServices.add(applicantService); + + return this; + } +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceResponse.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceResponse.java new file mode 100644 index 00000000000..55fd697241d --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceResponse.java @@ -0,0 +1,47 @@ +package org.egov.filemgmnt.web.models; + +import java.util.ArrayList; +import java.util.List; + +import javax.validation.Valid; + +import org.egov.common.contract.response.ResponseInfo; +import org.springframework.validation.annotation.Validated; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Validated +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder + +public class ApplicantServiceResponse { + + @JsonProperty("ResponseInfo") + private ResponseInfo responseInfo; + + @JsonProperty("ApplicantServices") + @Valid + private List applicantServices; + + @JsonProperty("Count") + private int count; + + public ApplicantServiceResponse addApplicantService(ApplicantService applicantService) { + if (applicantServices == null) { + applicantServices = new ArrayList<>(); + } + applicantServices.add(applicantService); + + return this; + + } +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceSearchCriteria.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceSearchCriteria.java new file mode 100644 index 00000000000..12de47cf779 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/ApplicantServiceSearchCriteria.java @@ -0,0 +1,22 @@ +package org.egov.filemgmnt.web.models; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ApplicantServiceSearchCriteria { + + @JsonProperty("ids") + private List ids; +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/AuditDetails.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/AuditDetails.java new file mode 100644 index 00000000000..529a994bdab --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/AuditDetails.java @@ -0,0 +1,35 @@ +package org.egov.filemgmnt.web.models; + +import javax.validation.constraints.Size; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Schema(description = "Collection of audit related fields used by most models") + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class AuditDetails { + @Size(max = 64) + @JsonProperty("createdBy") + private String createdBy; + + @Size(max = 64) + @JsonProperty("lastModifiedBy") + private String lastModifiedBy; + + @JsonProperty("createdTime") + private Long createdTime; + + @JsonProperty("lastModifiedTime") + private Long lastModifiedTime; +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdGenerationRequest.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdGenerationRequest.java new file mode 100644 index 00000000000..b625d384032 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdGenerationRequest.java @@ -0,0 +1,31 @@ +package org.egov.filemgmnt.web.models.idgen; + +import java.util.List; + +import org.egov.common.contract.request.RequestInfo; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

IdGenerationRequest

+ * + * @author VISHAL_GENIUS + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class IdGenerationRequest { + + @JsonProperty("RequestInfo") + private RequestInfo requestInfo; + + private List idRequests; + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdGenerationResponse.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdGenerationResponse.java new file mode 100644 index 00000000000..82946fe51a9 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdGenerationResponse.java @@ -0,0 +1,28 @@ +package org.egov.filemgmnt.web.models.idgen; + +import java.util.List; + +import org.egov.common.contract.response.ResponseInfo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

IdGenerationResponse

+ * + * @author VISHAL_GENIUS + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class IdGenerationResponse { + + private ResponseInfo responseInfo; + + private List idResponses; + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdRequest.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdRequest.java new file mode 100644 index 00000000000..a813ac1f0b6 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdRequest.java @@ -0,0 +1,35 @@ +package org.egov.filemgmnt.web.models.idgen; + +import javax.validation.constraints.NotNull; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

IdRequest

+ * + * @author Narendra + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class IdRequest { + + @JsonProperty("idName") + @NotNull + private String idName; + + @NotNull + @JsonProperty("tenantId") + private String tenantId; + + @JsonProperty("format") + private String format; + +} diff --git a/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdResponse.java b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdResponse.java new file mode 100644 index 00000000000..142c76363c1 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/java/org/egov/filemgmnt/web/models/idgen/IdResponse.java @@ -0,0 +1,22 @@ +package org.egov.filemgmnt.web.models.idgen; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + *

IdResponse

+ * + * @author Narendra + * + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class IdResponse { + + private String id; + +} diff --git a/municipal-services/egov-filemgmnt/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/municipal-services/egov-filemgmnt/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000000..390c3006cb6 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,85 @@ +{ + "properties": [ + { + "name": "app.timezone", + "type": "java.lang.String" + }, + { + "name": "persister.save.applicantpersonal.topic", + "type": "java.lang.String", + "description": "File management applicant personal save topic" + }, + { + "name": "persister.update.applicantpersonal.topic", + "type": "java.lang.String", + "description": "File management applicant personal update topic" + }, + { + "name": "server.context-path", + "type": "java.lang.String" + }, + { + "name": "kafka.config.bootstrap_server_config", + "type": "java.lang.String" + }, + { + "name": "kafka.producer.config.retries_config", + "type": "java.lang.Long" + }, + { + "name": "kafka.producer.config.batch_size_config", + "type": "java.lang.Long" + }, + { + "name": "kafka.producer.config.linger_ms_config", + "type": "java.lang.Long" + }, + { + "name": "kafka.producer.config.buffer_memory_config", + "type": "java.lang.Long" + }, + { + "name": "egov.idgen.host", + "type": "java.lang.String" + }, + { + "name": "egov.idgen.path", + "type": "java.lang.String" + }, + { + "name": "egov.mdms.host", + "type": "java.lang.String" + }, + { + "name": "egov.mdms.search.endpoint", + "type": "java.lang.String" + }, + { + "name": "egov.mdms.master.name", + "type": "java.lang.String" + }, + { + "name": "egov.mdms.module.name", + "type": "java.lang.String" + }, + { + "name": "egov.url.shortner.host", + "type": "java.lang.String" + }, + { + "name": "egov.url.shortner.endpoint", + "type": "java.lang.String" + } + ], + "hints": [ + { + "name": "app.timezone", + "values": [ + { + "value": "UTC", + "description": "Coordinated Universal Time, (IST, India Standard Time, Asia/Kolkata = UTC+05:30)." + } + ] + } + ] +} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/resources/application-local.properties b/municipal-services/egov-filemgmnt/src/main/resources/application-local.properties new file mode 100644 index 00000000000..e879c2ba514 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/resources/application-local.properties @@ -0,0 +1,26 @@ +#DATABASE CONFIGURATION +spring.datasource.url=jdbc:postgresql://localhost:5432/egov_filemgmnt +spring.datasource.username=postgres +spring.datasource.password=123 + +#FLYWAY CONFIGURATION +spring.flyway.locations=classpath:/db/migration/main +spring.flyway.enabled=false + +# KAFKA SERVER CONFIGURATIONS +spring.kafka.bootstrap-servers=localhost:9092 + +# logging +logging.level.root=INFO +logging.level.org.egov.filemgmnt=DEBUG + +# springdoc openapi config +springdoc.api-docs.enabled=true +springdoc.api-docs.path=/api-docs +springdoc.swagger-ui.enabled=true +springdoc.swagger-ui.path=/swagger +springdoc.swagger-ui.supportedSubmitMethods= + +# mvnw clean package -DskipTests +# mvnw clean compile +# mvnw clean install -DskipTests \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/resources/application.properties b/municipal-services/egov-filemgmnt/src/main/resources/application.properties new file mode 100644 index 00000000000..5f8d82426e6 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/resources/application.properties @@ -0,0 +1,99 @@ +server.contextPath=/filemgmnt +server.servlet.context-path=/filemgmnt +server.port=8080 +app.timezone=UTC + +# Persister topic config +persister.save.applicantpersonal.topic=save-fm-applicantpersonal +persister.update.applicantpersonal.topic=update-fm-applicantpersonal + +#DATABASE CONFIGURATION +spring.datasource.driver-class-name=org.postgresql.Driver +spring.datasource.url=jdbc:postgresql://localhost:5432/egov_filemgmnt +spring.datasource.username=postgres +spring.datasource.password=postgres + +#FLYWAY CONFIGURATION +#spring.flyway.url=jdbc:postgresql://localhost:5432/postgres +#spring.flyway.user=postgres +#spring.flyway.password=postgres +#spring.flyway.table=public +#spring.flyway.baseline-on-migrate=true +#spring.flyway.outOfOrder=true +#spring.flyway.locations=classpath:/db/migration/main +#spring.flyway.enabled=true + +# KAFKA SERVER CONFIGURATIONS +kafka.config.bootstrap_server_config=localhost:9092 +spring.kafka.consumer.value-deserializer=org.egov.tracer.kafka.deserializer.HashMapDeserializer +spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer +spring.kafka.consumer.group-id=voter-registration +spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer +spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer +spring.kafka.listener.missing-topics-fatal=false +spring.kafka.consumer.properties.spring.json.use.type.headers=false + +# KAFKA CONSUMER CONFIGURATIONS +#kafka.consumer.config.auto_commit=true +#kafka.consumer.config.auto_commit_interval=100 +#kafka.consumer.config.session_timeout=15000 +#kafka.consumer.config.auto_offset_reset=earliest +# KAFKA PRODUCER CONFIGURATIONS +kafka.producer.config.retries_config=0 +kafka.producer.config.batch_size_config=16384 +kafka.producer.config.linger_ms_config=1 +kafka.producer.config.buffer_memory_config=33554432 + +#Localization config +#egov.localization.host=https://dev.digit.org +#egov.localization.workDir.path=/localization/messages/v1 +#egov.localization.context.path=/localization/messages/v1 +#egov.localization.search.endpoint=/_search +#egov.localization.statelevel=true + +#mdms urls +egov.mdms.host=https://dev.digit.org +egov.mdms.search.endpoint=/egov-mdms-service/v1/_search +egov.mdms.master.name=RegistrationCharges +egov.mdms.module.name=VTR + +#hrms urls +#egov.hrms.host=https://dev.digit.org +#egov.hrms.search.endpoint=/egov-hrms/employees/_search + +#User config +#egov.user.host=https://dev.digit.org +#egov.user.context.path=/user/users +#egov.user.create.path=/_createnovalidate +#egov.user.search.path=/user/_search +#egov.user.update.path=/_updatenovalidate + +#Idgen Config +egov.idgen.host=https://dev.digit.org/ +egov.idgen.path=egov-idgen/id/_generate + +#Workflow config +#is.workflow.enabled=true +#egov.workflow.host=https://dev.digit.org +#egov.workflow.transition.path=/egov-workflow-v2/egov-wf/process/_transition +#egov.workflow.businessservice.search.path=/egov-workflow-v2/egov-wf/businessservice/_search +#egov.workflow.processinstance.search.path=/egov-workflow-v2/egov-wf/process/_search + +#url shortner +egov.url.shortner.host=https://dev.digit.org +egov.url.shortner.endpoint=/egov-url-shortening/shortener + +#egov.sms.notification.topic=egov.core.notification.sms +#kafka.topics.receipt.create=dss-collection + +# The value of the following field should be changed to service specific name +#kafka.topics.consumer=service-consumer-topic + +# springdoc openapi config +springdoc.api-docs.enabled=false +springdoc.swagger-ui.enabled=false + + + + + diff --git a/municipal-services/egov-filemgmnt/src/main/resources/banner.txt b/municipal-services/egov-filemgmnt/src/main/resources/banner.txt new file mode 100644 index 00000000000..2e37e2e16f6 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/resources/banner.txt @@ -0,0 +1,10 @@ + + _______ __ __ _______ .___ ___. _______ .___ ___. .__ __. .___________. +| ____|| | | | | ____|| \/ | / _____|| \/ | | \ | | | | +| |__ | | | | | |__ | \ / | | | __ | \ / | | \| | `---| |----` +| __| | | | | | __| | |\/| | | | |_ | | |\/| | | . ` | | | +| | | | | `----.| |____ | | | | | |__| | | | | | | |\ | | | +|__| |__| |_______||_______||__| |__| \______| |__| |__| |__| \__| |__| + +${application.title} ${application.version} +Powered by Spring Boot ${spring-boot.version} \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/resources/db/Dockerfile b/municipal-services/egov-filemgmnt/src/main/resources/db/Dockerfile new file mode 100644 index 00000000000..a5699ff7d99 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/resources/db/Dockerfile @@ -0,0 +1,9 @@ +FROM egovio/flyway:4.1.2 + +COPY ./migration/main /flyway/sql + +COPY migrate.sh /usr/bin/migrate.sh + +RUN chmod +x /usr/bin/migrate.sh + +CMD ["/usr/bin/migrate.sh"] diff --git a/municipal-services/egov-filemgmnt/src/main/resources/db/migrate.sh b/municipal-services/egov-filemgmnt/src/main/resources/db/migrate.sh new file mode 100644 index 00000000000..43960b25cdb --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/resources/db/migrate.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +flyway -url=$DB_URL -table=$SCHEMA_TABLE -user=$FLYWAY_USER -password=$FLYWAY_PASSWORD -locations=$FLYWAY_LOCATIONS -baselineOnMigrate=true -outOfOrder=true -ignoreMissingMigrations=true migrate \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/main/resources/persister/filemgmnt.yml b/municipal-services/egov-filemgmnt/src/main/resources/persister/filemgmnt.yml new file mode 100644 index 00000000000..cc01be75e39 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/main/resources/persister/filemgmnt.yml @@ -0,0 +1,68 @@ +serviceMaps: + serviceName: egov-filemgmnt + mappings: + - version: 1.0 + description: Persists applicant details in egov_filemgmnt database, eg_fm_applicantpersonal table + fromTopic: save-fm-applicantpersonal + isTransaction: true + queryMaps: + - query: > + INSERT INTO eg_fm_applicantpersonal(id, aadhaarno, email, firstname, lastname, title, mobileno, tenantid, createdby, createdtime, lastmodifiedby, lastmodifiedtime) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + basePath: ApplicantPersonals.* + jsonMaps: + - jsonPath: $.ApplicantPersonals.*.id + + - jsonPath: $.ApplicantPersonals.*.aadhaarNo + + - jsonPath: $.ApplicantPersonals.*.email + + - jsonPath: $.ApplicantPersonals.*.firstName + + - jsonPath: $.ApplicantPersonals.*.lastName + + - jsonPath: $.ApplicantPersonals.*.title + + - jsonPath: $.ApplicantPersonals.*.mobileNo + + - jsonPath: $.ApplicantPersonals.*.tenantId + + - jsonPath: $.ApplicantPersonals.*.auditDetails.createdBy + + - jsonPath: $.ApplicantPersonals.*.auditDetails.createdTime + + - jsonPath: $.ApplicantPersonals.*.auditDetails.lastModifiedBy + + - jsonPath: $.ApplicantPersonals.*.auditDetails.lastModifiedTime + + - version: 1.0 + description: Update applicant details in egov_filemgmnt database, eg_fm_applicantpersonal table + fromTopic: update-fm-applicantpersonal + isTransaction: true + queryMaps: + - query: > + UPDATE eg_fm_applicantpersonal + SET aadhaarno = ?, email = ?, firstname = ?, lastname = ?, title = ?, mobileno = ?, applicantaddressid = ?, lastmodifiedby = ?, lastmodifiedat = ? + WHERE id = ?; + basePath: ApplicantPersonals.* + jsonMaps: + - jsonPath: $.ApplicantPersonals.*.aadhaarNo + + - jsonPath: $.ApplicantPersonals.*.email + + - jsonPath: $.ApplicantPersonals.*.firstName + + - jsonPath: $.ApplicantPersonals.*.lastName + + - jsonPath: $.ApplicantPersonals.*.title + + - jsonPath: $.ApplicantPersonals.*.mobileNo + + - jsonPath: $.ApplicantPersonals.*.auditDetails.lastModifiedBy + + - jsonPath: $.ApplicantPersonals.*.auditDetails.lastModifiedTime + + - jsonPath: $.ApplicantPersonals.*.id + + + \ No newline at end of file diff --git a/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/TestConfig.java b/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/TestConfig.java new file mode 100644 index 00000000000..ac323ada493 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/TestConfig.java @@ -0,0 +1,33 @@ +package org.egov.filemgmnt; + +import static org.mockito.Mockito.mock; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.web.client.RestTemplate; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@TestConfiguration +@NoArgsConstructor(access = AccessLevel.PACKAGE) +public class TestConfig { // NOPMD + + @Bean + @SuppressWarnings("unchecked") + public KafkaTemplate kafkaTemplate() { + return mock(KafkaTemplate.class); + } + + @Bean + public JdbcTemplate jdbcTemplate() { + return mock(JdbcTemplate.class); + } + + @Bean + public RestTemplate restTemplate() { + return mock(RestTemplate.class); + } +} diff --git a/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/service/ApplicantPersonalServiceTests.java b/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/service/ApplicantPersonalServiceTests.java new file mode 100644 index 00000000000..e001e924ca3 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/service/ApplicantPersonalServiceTests.java @@ -0,0 +1,76 @@ +package org.egov.filemgmnt.service; + +import java.util.List; +import java.util.UUID; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.contract.request.User; +import org.egov.filemgmnt.util.CoreUtils; +import org.egov.filemgmnt.web.models.ApplicantPersonal; +import org.egov.filemgmnt.web.models.ApplicantPersonalRequest; +import org.egov.filemgmnt.web.models.ApplicantPersonalSearchCriteria; +import org.egov.filemgmnt.web.models.AuditDetails; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.TestPropertySource; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import lombok.extern.slf4j.Slf4j; + +@Disabled +@SpringBootTest +//@Import(TestConfig.class) +@TestPropertySource(locations = { "classpath:test.properties" }) +@SuppressWarnings({ "PMD.JUnitTestsShouldIncludeAssert" }) +@Slf4j +class ApplicantPersonalServiceTests { + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private ApplicantPersonalService service; + + @Test + @Order(1) + void create() { + ApplicantPersonalRequest request = ApplicantPersonalRequest.builder() + .requestInfo(RequestInfo.builder() + .userInfo(User.builder() + .uuid(UUID.randomUUID() + .toString()) + .build()) + .build()) + .build(); + request.addApplicantPersonal(ApplicantPersonal.builder() + .id(UUID.randomUUID() + .toString()) + .firstName("FirstName") + .lastName("LastName") + .mobileNo("1234567890") + .auditDetails(new AuditDetails()) + .build()); + service.create(request); + } + + @Test + @Order(2) + void search() { + List result = service.search(ApplicantPersonalSearchCriteria.builder() + .build()); + result.forEach(personal -> { + try { + log.info(" *** APPLICANT PERSONAL JSON \n {}", + objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(personal)); + } catch (JsonProcessingException e) { + CoreUtils.ignore(e); + } + }); + } +} diff --git a/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/web/models/ApplicantPersonalRequestTests.java b/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/web/models/ApplicantPersonalRequestTests.java new file mode 100644 index 00000000000..90acff9b95a --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/test/java/org/egov/filemgmnt/web/models/ApplicantPersonalRequestTests.java @@ -0,0 +1,57 @@ +package org.egov.filemgmnt.web.models; + +import java.util.UUID; + +import org.egov.common.contract.request.RequestInfo; +import org.egov.common.contract.request.User; +import org.egov.filemgmnt.TestConfig; +import org.egov.filemgmnt.util.CoreUtils; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.TestPropertySource; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import lombok.extern.slf4j.Slf4j; + +@Disabled +@SpringBootTest +@Import(TestConfig.class) +@TestPropertySource(locations = { "classpath:test.properties" }) +@SuppressWarnings({ "PMD.JUnitTestsShouldIncludeAssert" }) +@Slf4j +class ApplicantPersonalRequestTests { + + @Autowired + private ObjectMapper objectMapper; + + @Test + void requestJson() { + ApplicantPersonalRequest request = ApplicantPersonalRequest.builder() + .requestInfo(RequestInfo.builder() + .userInfo(User.builder() + .uuid(UUID.randomUUID() + .toString()) + .build()) + .build()) + .build(); + request.addApplicantPersonal(ApplicantPersonal.builder() + .id(UUID.randomUUID() + .toString()) + .firstName("FirstName") + .auditDetails(new AuditDetails()) + .build()); + try { + log.info(" *** APPLICANT PERSONAL JSON \n {}", + objectMapper.writerWithDefaultPrettyPrinter() + .writeValueAsString(request)); + } catch (JsonProcessingException e) { + CoreUtils.ignore(e); + } + } + +} diff --git a/municipal-services/egov-filemgmnt/src/test/resources/test.properties b/municipal-services/egov-filemgmnt/src/test/resources/test.properties new file mode 100644 index 00000000000..53af3592de8 --- /dev/null +++ b/municipal-services/egov-filemgmnt/src/test/resources/test.properties @@ -0,0 +1,11 @@ +spring.profiles.active=test +spring.flyway.enabled=false + +spring.datasource.url=jdbc:postgresql://localhost:5432/egov_filemngmnt +spring.datasource.username=postgres +spring.datasource.password=123 + +spring.kafka.bootstrap-servers=localhost:9092 + +logging.level.root=INFO +logging.level.org.egov.filemgmnt=INFO \ No newline at end of file diff --git a/municipal-services/tl-calculator/src/main/java/org/egov/tlcalculator/service/CalculationService.java b/municipal-services/tl-calculator/src/main/java/org/egov/tlcalculator/service/CalculationService.java index 90aebae7e6a..1c23b158426 100644 --- a/municipal-services/tl-calculator/src/main/java/org/egov/tlcalculator/service/CalculationService.java +++ b/municipal-services/tl-calculator/src/main/java/org/egov/tlcalculator/service/CalculationService.java @@ -29,12 +29,10 @@ import static org.egov.tlcalculator.utils.TLCalculatorConstants.businessService_TL; - @Service @Slf4j public class CalculationService { - @Autowired private BillingslabRepository repository; @@ -64,160 +62,174 @@ public class CalculationService { /** * Calculates tax estimates and creates demand + * * @param calculationReq The calculationCriteria request - * @return List of calculations for all applicationNumbers or tradeLicenses in calculationReq + * @return List of calculations for all applicationNumbers or tradeLicenses in + * calculationReq */ - public List calculate(CalculationReq calculationReq, Boolean isEstimate){ - String tenantId = calculationReq.getCalulationCriteria().get(0).getTenantId(); - Object mdmsData = mdmsService.mDMSCall(calculationReq.getRequestInfo(),tenantId); - List calculations = getCalculation(calculationReq.getRequestInfo(), - calculationReq.getCalulationCriteria(),mdmsData); - CalculationRes calculationRes = CalculationRes.builder().calculations(calculations).build(); - if(!isEstimate){ - demandService.generateDemand(calculationReq.getRequestInfo(),calculations,mdmsData,businessService_TL); - producer.push(config.getSaveTopic(),calculationRes); - } - return calculations; - } - + public List calculate(CalculationReq calculationReq, Boolean isEstimate) { + String tenantId = calculationReq.getCalulationCriteria().get(0).getTenantId(); + Object mdmsData = mdmsService.mDMSCall(calculationReq.getRequestInfo(), tenantId); + List calculations = getCalculation(calculationReq.getRequestInfo(), + calculationReq.getCalulationCriteria(), mdmsData); + CalculationRes calculationRes = CalculationRes.builder().calculations(calculations).build(); + if (!isEstimate) { + demandService.generateDemand(calculationReq.getRequestInfo(), calculations, mdmsData, businessService_TL); + producer.push(config.getSaveTopic(), calculationRes); + } + return calculations; + } /*** * Calculates tax estimates + * * @param requestInfo The requestInfo of the calculation request - * @param criterias list of CalculationCriteria containing the tradeLicense or applicationNumber - * @return List of calculations for all applicationNumbers or tradeLicenses in criterias + * @param criterias list of CalculationCriteria containing the tradeLicense or + * applicationNumber + * @return List of calculations for all applicationNumbers or tradeLicenses in + * criterias */ - public List getCalculation(RequestInfo requestInfo, List criterias,Object mdmsData){ - List calculations = new LinkedList<>(); - for(CalulationCriteria criteria : criterias) { - TradeLicense license; - if (criteria.getTradelicense()==null && criteria.getApplicationNumber() != null) { - license = utils.getTradeLicense(requestInfo, criteria.getApplicationNumber(), criteria.getTenantId()); - criteria.setTradelicense(license); - } - EstimatesAndSlabs estimatesAndSlabs = getTaxHeadEstimates(criteria,requestInfo,mdmsData); - List taxHeadEstimates = estimatesAndSlabs.getEstimates(); - FeeAndBillingSlabIds tradeTypeFeeAndBillingSlabIds = estimatesAndSlabs.getTradeTypeFeeAndBillingSlabIds(); - FeeAndBillingSlabIds accessoryFeeAndBillingSlabIds = null; - if(estimatesAndSlabs.getAccessoryFeeAndBillingSlabIds()!=null) - accessoryFeeAndBillingSlabIds = estimatesAndSlabs.getAccessoryFeeAndBillingSlabIds(); - Calculation calculation = new Calculation(); - calculation.setTradeLicense(criteria.getTradelicense()); - calculation.setTenantId(criteria.getTenantId()); - calculation.setTaxHeadEstimates(taxHeadEstimates); - calculation.setTradeTypeBillingIds(tradeTypeFeeAndBillingSlabIds); - if(accessoryFeeAndBillingSlabIds!=null) - calculation.setAccessoryBillingIds(accessoryFeeAndBillingSlabIds); - - calculations.add(calculation); - - } - return calculations; - } - + public List getCalculation(RequestInfo requestInfo, List criterias, + Object mdmsData) { + List calculations = new LinkedList<>(); + for (CalulationCriteria criteria : criterias) { + TradeLicense license; + if (criteria.getTradelicense() == null && criteria.getApplicationNumber() != null) { + license = utils.getTradeLicense(requestInfo, criteria.getApplicationNumber(), criteria.getTenantId()); + criteria.setTradelicense(license); + } + EstimatesAndSlabs estimatesAndSlabs = getTaxHeadEstimates(criteria, requestInfo, mdmsData); + List taxHeadEstimates = estimatesAndSlabs.getEstimates(); + FeeAndBillingSlabIds tradeTypeFeeAndBillingSlabIds = estimatesAndSlabs.getTradeTypeFeeAndBillingSlabIds(); + FeeAndBillingSlabIds accessoryFeeAndBillingSlabIds = null; + if (estimatesAndSlabs.getAccessoryFeeAndBillingSlabIds() != null) + accessoryFeeAndBillingSlabIds = estimatesAndSlabs.getAccessoryFeeAndBillingSlabIds(); + Calculation calculation = new Calculation(); + calculation.setTradeLicense(criteria.getTradelicense()); + calculation.setTenantId(criteria.getTenantId()); + calculation.setTaxHeadEstimates(taxHeadEstimates); + calculation.setTradeTypeBillingIds(tradeTypeFeeAndBillingSlabIds); + if (accessoryFeeAndBillingSlabIds != null) + calculation.setAccessoryBillingIds(accessoryFeeAndBillingSlabIds); + + calculations.add(calculation); + + } + return calculations; + } /** * Creates TacHeadEstimates - * @param calulationCriteria CalculationCriteria containing the tradeLicense or applicationNumber - * @param requestInfo The requestInfo of the calculation request + * + * @param calulationCriteria CalculationCriteria containing the tradeLicense or + * applicationNumber + * @param requestInfo The requestInfo of the calculation request * @return TaxHeadEstimates and the billingSlabs used to calculate it */ - private EstimatesAndSlabs getTaxHeadEstimates(CalulationCriteria calulationCriteria, RequestInfo requestInfo,Object mdmsData){ - List estimates = new LinkedList<>(); - EstimatesAndSlabs estimatesAndSlabs = getBaseTax(calulationCriteria,requestInfo,mdmsData); - - estimates.addAll(estimatesAndSlabs.getEstimates()); + private EstimatesAndSlabs getTaxHeadEstimates(CalulationCriteria calulationCriteria, RequestInfo requestInfo, + Object mdmsData) { + List estimates = new LinkedList<>(); + EstimatesAndSlabs estimatesAndSlabs = getBaseTax(calulationCriteria, requestInfo, mdmsData); - if(calulationCriteria.getTradelicense().getTradeLicenseDetail().getAdhocPenalty()!=null) - estimates.add(getAdhocPenalty(calulationCriteria)); + estimates.addAll(estimatesAndSlabs.getEstimates()); - if(calulationCriteria.getTradelicense().getTradeLicenseDetail().getAdhocExemption()!=null) - estimates.add(getAdhocExemption(calulationCriteria)); + if (calulationCriteria.getTradelicense().getTradeLicenseDetail().getAdhocPenalty() != null) + estimates.add(getAdhocPenalty(calulationCriteria)); - estimatesAndSlabs.setEstimates(estimates); + if (calulationCriteria.getTradelicense().getTradeLicenseDetail().getAdhocExemption() != null) + estimates.add(getAdhocExemption(calulationCriteria)); - return estimatesAndSlabs; - } + estimatesAndSlabs.setEstimates(estimates); + return estimatesAndSlabs; + } /** * Calculates base tax and cretaes its taxHeadEstimate - * @param calulationCriteria CalculationCriteria containing the tradeLicense or applicationNumber - * @param requestInfo The requestInfo of the calculation request + * + * @param calulationCriteria CalculationCriteria containing the tradeLicense or + * applicationNumber + * @param requestInfo The requestInfo of the calculation request * @return BaseTax taxHeadEstimate and billingSlabs used to calculate it */ - private EstimatesAndSlabs getBaseTax(CalulationCriteria calulationCriteria, RequestInfo requestInfo,Object mdmsData){ - TradeLicense license = calulationCriteria.getTradelicense(); - EstimatesAndSlabs estimatesAndSlabs = new EstimatesAndSlabs(); - BillingSlabSearchCriteria searchCriteria = new BillingSlabSearchCriteria(); - searchCriteria.setTenantId(license.getTenantId()); - searchCriteria.setStructureType(license.getTradeLicenseDetail().getStructureType()); - searchCriteria.setLicenseType(license.getLicenseType().toString()); - - - Map calculationTypeMap = mdmsService.getCalculationType(requestInfo,license,mdmsData); - String tradeUnitCalculationType = (String)calculationTypeMap.get(TLCalculatorConstants.MDMS_CALCULATIONTYPE_TRADETYPE); - String accessoryCalculationType = (String)calculationTypeMap.get(TLCalculatorConstants.MDMS_CALCULATIONTYPE_ACCESSORY); - - FeeAndBillingSlabIds tradeTypeFeeAndBillingSlabIds = getTradeUnitFeeAndBillingSlabIds(license,CalculationType - .fromValue(tradeUnitCalculationType)); - BigDecimal tradeUnitFee = tradeTypeFeeAndBillingSlabIds.getFee(); - - estimatesAndSlabs.setTradeTypeFeeAndBillingSlabIds(tradeTypeFeeAndBillingSlabIds); - BigDecimal accessoryFee = new BigDecimal(0); - - if(!CollectionUtils.isEmpty(license.getTradeLicenseDetail().getAccessories())){ - FeeAndBillingSlabIds accessoryFeeAndBillingSlabIds = getAccessoryFeeAndBillingSlabIds(license,CalculationType - .fromValue(accessoryCalculationType)); - accessoryFee = accessoryFeeAndBillingSlabIds.getFee(); - estimatesAndSlabs.setAccessoryFeeAndBillingSlabIds(accessoryFeeAndBillingSlabIds); - } - - TaxHeadEstimate estimate = new TaxHeadEstimate(); - List estimateList = new ArrayList<>(); - BigDecimal totalTax = tradeUnitFee.add(accessoryFee); - - if(totalTax.compareTo(BigDecimal.ZERO)==-1) - throw new CustomException("INVALID AMOUNT","Tax amount is negative"); - - estimate.setEstimateAmount(totalTax); - estimate.setCategory(Category.TAX); - if(license.getApplicationType() != null && license.getApplicationType().toString().equals(TLCalculatorConstants.APPLICATION_TYPE_RENEWAL)){ - estimate.setTaxHeadCode(config.getRenewTaxHead()); - estimateList.add(estimate); - estimateList.addAll(tlRenewal.tlRenewalCalculation(requestInfo,calulationCriteria,mdmsData,totalTax)); - }else{ - estimate.setTaxHeadCode(config.getBaseTaxHead()); - estimateList.add(estimate); - } - - estimatesAndSlabs.setEstimates(estimateList); - - return estimatesAndSlabs; - } + private EstimatesAndSlabs getBaseTax(CalulationCriteria calulationCriteria, RequestInfo requestInfo, + Object mdmsData) { + TradeLicense license = calulationCriteria.getTradelicense(); + EstimatesAndSlabs estimatesAndSlabs = new EstimatesAndSlabs(); + BillingSlabSearchCriteria searchCriteria = new BillingSlabSearchCriteria(); + searchCriteria.setTenantId(license.getTenantId()); + searchCriteria.setStructureType(license.getTradeLicenseDetail().getStructureType()); + searchCriteria.setLicenseType(license.getLicenseType().toString()); + + Map calculationTypeMap = mdmsService.getCalculationType(requestInfo, license, mdmsData); + String tradeUnitCalculationType = (String) calculationTypeMap + .get(TLCalculatorConstants.MDMS_CALCULATIONTYPE_TRADETYPE); + String accessoryCalculationType = (String) calculationTypeMap + .get(TLCalculatorConstants.MDMS_CALCULATIONTYPE_ACCESSORY); + + FeeAndBillingSlabIds tradeTypeFeeAndBillingSlabIds = getTradeUnitFeeAndBillingSlabIds(license, CalculationType + .fromValue(tradeUnitCalculationType)); + BigDecimal tradeUnitFee = tradeTypeFeeAndBillingSlabIds.getFee(); + + estimatesAndSlabs.setTradeTypeFeeAndBillingSlabIds(tradeTypeFeeAndBillingSlabIds); + BigDecimal accessoryFee = new BigDecimal(0); + + if (!CollectionUtils.isEmpty(license.getTradeLicenseDetail().getAccessories())) { + FeeAndBillingSlabIds accessoryFeeAndBillingSlabIds = getAccessoryFeeAndBillingSlabIds(license, + CalculationType + .fromValue(accessoryCalculationType)); + accessoryFee = accessoryFeeAndBillingSlabIds.getFee(); + estimatesAndSlabs.setAccessoryFeeAndBillingSlabIds(accessoryFeeAndBillingSlabIds); + } + TaxHeadEstimate estimate = new TaxHeadEstimate(); + List estimateList = new ArrayList<>(); + BigDecimal totalTax = tradeUnitFee.add(accessoryFee); + + if (totalTax.compareTo(BigDecimal.ZERO) == -1) + throw new CustomException("INVALID AMOUNT", "Tax amount is negative"); + + estimate.setEstimateAmount(totalTax); + estimate.setCategory(Category.TAX); + if (license.getApplicationType() != null + && license.getApplicationType().toString().equals(TLCalculatorConstants.APPLICATION_TYPE_RENEWAL)) { + estimate.setTaxHeadCode(config.getRenewTaxHead()); + estimateList.add(estimate); + estimateList.addAll(tlRenewal.tlRenewalCalculation(requestInfo, calulationCriteria, mdmsData, totalTax)); + } else { + estimate.setTaxHeadCode(config.getBaseTaxHead()); + estimateList.add(estimate); + } + + estimatesAndSlabs.setEstimates(estimateList); + + return estimatesAndSlabs; + } /** - * Creates taxHeadEstimates for AdhocPenalty - * @param calulationCriteria CalculationCriteria containing the tradeLicense or applicationNumber + * Creates taxHeadEstimates for AdhocPenalty + * + * @param calulationCriteria CalculationCriteria containing the tradeLicense or + * applicationNumber * @return AdhocPenalty taxHeadEstimates */ - private TaxHeadEstimate getAdhocPenalty(CalulationCriteria calulationCriteria){ - TradeLicense license = calulationCriteria.getTradelicense(); - TaxHeadEstimate estimate = new TaxHeadEstimate(); - estimate.setEstimateAmount(license.getTradeLicenseDetail().getAdhocPenalty()); - estimate.setTaxHeadCode(config.getAdhocPenaltyTaxHead()); - estimate.setCategory(Category.PENALTY); - return estimate; - } - + private TaxHeadEstimate getAdhocPenalty(CalulationCriteria calulationCriteria) { + TradeLicense license = calulationCriteria.getTradelicense(); + TaxHeadEstimate estimate = new TaxHeadEstimate(); + estimate.setEstimateAmount(license.getTradeLicenseDetail().getAdhocPenalty()); + estimate.setTaxHeadCode(config.getAdhocPenaltyTaxHead()); + estimate.setCategory(Category.PENALTY); + return estimate; + } /** - * Creates taxHeadEstimates for AdhocRebate - * @param calulationCriteria CalculationCriteria containing the tradeLicense or applicationNumber + * Creates taxHeadEstimates for AdhocRebate + * + * @param calulationCriteria CalculationCriteria containing the tradeLicense or + * applicationNumber * @return AdhocRebate taxHeadEstimates */ - private TaxHeadEstimate getAdhocExemption(CalulationCriteria calulationCriteria){ + private TaxHeadEstimate getAdhocExemption(CalulationCriteria calulationCriteria) { TradeLicense license = calulationCriteria.getTradelicense(); TaxHeadEstimate estimate = new TaxHeadEstimate(); estimate.setEstimateAmount(license.getTradeLicenseDetail().getAdhocExemption()); @@ -226,166 +238,182 @@ private TaxHeadEstimate getAdhocExemption(CalulationCriteria calulationCriteria) return estimate; } - /** - * @param license TradeLicense for which fee has to be calculated + * @param license TradeLicense for which fee has to be calculated * @param calculationType Calculation logic to be used * @return TradeUnit Fee and billingSlab used to calculate it */ - private FeeAndBillingSlabIds getTradeUnitFeeAndBillingSlabIds(TradeLicense license, CalculationType calculationType){ - - List tradeUnitFees = new LinkedList<>(); - List tradeUnits = license.getTradeLicenseDetail().getTradeUnits(); - List billingSlabIds = new LinkedList<>(); - int i = 0; - for(TradeUnit tradeUnit : tradeUnits) - { if(tradeUnit.getActive()) - { - List preparedStmtList = new ArrayList<>(); - BillingSlabSearchCriteria searchCriteria = new BillingSlabSearchCriteria(); - searchCriteria.setTenantId(license.getTenantId()); - searchCriteria.setStructureType(license.getTradeLicenseDetail().getStructureType()); - searchCriteria.setApplicationType(license.getApplicationType().toString()); - searchCriteria.setLicenseType(license.getLicenseType().toString()); - searchCriteria.setTradeType(tradeUnit.getTradeType()); - if(tradeUnit.getUomValue()!=null) - { - searchCriteria.setUomValue(Double.parseDouble(tradeUnit.getUomValue())); - searchCriteria.setUom(tradeUnit.getUom()); - } - // Call the Search - String query = queryBuilder.getSearchQuery(searchCriteria, preparedStmtList); - log.info("query "+query); - log.info("preparedStmtList "+preparedStmtList.toString()); - List billingSlabs = repository.getDataFromDB(query, preparedStmtList); - - if(billingSlabs.size()>1) - throw new CustomException("BILLINGSLAB ERROR","Found multiple BillingSlabs for the given TradeType"); - if(CollectionUtils.isEmpty(billingSlabs)) - throw new CustomException("BILLINGSLAB ERROR","No BillingSlab Found for the given tradeType"); - System.out.println("TradeUnit: "+tradeUnit.getTradeType()+ " rate: "+billingSlabs.get(0).getRate()); - - billingSlabIds.add(billingSlabs.get(0).getId()+"|"+i+"|"+tradeUnit.getId()); - - if(billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.FLAT)) - tradeUnitFees.add(billingSlabs.get(0).getRate()); - // tradeUnitTotalFee = tradeUnitTotalFee.add(billingSlabs.get(0).getRate()); - - if(billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.RATE)){ - BigDecimal uomVal = new BigDecimal(tradeUnit.getUomValue()); - tradeUnitFees.add(billingSlabs.get(0).getRate().multiply(uomVal)); - //tradeUnitTotalFee = tradeUnitTotalFee.add(billingSlabs.get(0).getRate().multiply(uomVal)); - } - i++; - } - } - - BigDecimal tradeUnitTotalFee = getTotalFee(tradeUnitFees,calculationType); - - FeeAndBillingSlabIds feeAndBillingSlabIds = new FeeAndBillingSlabIds(); - feeAndBillingSlabIds.setFee(tradeUnitTotalFee); - feeAndBillingSlabIds.setBillingSlabIds(billingSlabIds); - feeAndBillingSlabIds.setId(UUID.randomUUID().toString()); - - return feeAndBillingSlabIds; - } - + private FeeAndBillingSlabIds getTradeUnitFeeAndBillingSlabIds(TradeLicense license, + CalculationType calculationType) { + + List tradeUnitFees = new LinkedList<>(); + List tradeUnits = license.getTradeLicenseDetail().getTradeUnits(); + List billingSlabIds = new LinkedList<>(); + int i = 0; + for (TradeUnit tradeUnit : tradeUnits) { + if (tradeUnit.getActive()) { + List preparedStmtList = new ArrayList<>(); + BillingSlabSearchCriteria searchCriteria = new BillingSlabSearchCriteria(); + searchCriteria.setTenantId(license.getTenantId()); + searchCriteria.setStructureType(license.getTradeLicenseDetail().getStructureType()); + searchCriteria.setApplicationType(license.getApplicationType().toString()); + searchCriteria.setLicenseType(license.getLicenseType().toString()); + searchCriteria.setTradeType(tradeUnit.getTradeType()); + if (tradeUnit.getUomValue() != null) { + searchCriteria.setUomValue(Double.parseDouble(tradeUnit.getUomValue())); + searchCriteria.setUom(tradeUnit.getUom()); + } + // Call the Search + String query = queryBuilder.getSearchQuery(searchCriteria, preparedStmtList); + log.info("query " + query); + log.info("preparedStmtList " + preparedStmtList.toString()); + List billingSlabs = repository.getDataFromDB(query, preparedStmtList); + + if (billingSlabs.size() > 1) + throw new CustomException("BILLINGSLAB ERROR", + "Found multiple BillingSlabs for the given TradeType"); + if (CollectionUtils.isEmpty(billingSlabs)) { + preparedStmtList.clear(); + searchCriteria.setTenantId(license.getTenantId().toString().split("\\.")[0]); + query = queryBuilder.getSearchQuery(searchCriteria, preparedStmtList); + log.info("query " + query); + log.info("preparedStmtList " + preparedStmtList.toString()); + billingSlabs = repository.getDataFromDB(query, preparedStmtList); + if (billingSlabs.size() > 1) + throw new CustomException("BILLINGSLAB ERROR", + "Found multiple BillingSlabs for the given TradeType"); + if (CollectionUtils.isEmpty(billingSlabs)) + throw new CustomException("BILLINGSLAB ERROR", "No BillingSlab Found for the given tradeType"); + } + + System.out + .println("TradeUnit: " + tradeUnit.getTradeType() + " rate: " + billingSlabs.get(0).getRate()); + + billingSlabIds.add(billingSlabs.get(0).getId() + "|" + i + "|" + tradeUnit.getId()); + + if (billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.FLAT)) + tradeUnitFees.add(billingSlabs.get(0).getRate()); + // tradeUnitTotalFee = tradeUnitTotalFee.add(billingSlabs.get(0).getRate()); + + if (billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.RATE)) { + BigDecimal uomVal = new BigDecimal(tradeUnit.getUomValue()); + tradeUnitFees.add(billingSlabs.get(0).getRate().multiply(uomVal)); + // tradeUnitTotalFee = + // tradeUnitTotalFee.add(billingSlabs.get(0).getRate().multiply(uomVal)); + } + i++; + } + } + + BigDecimal tradeUnitTotalFee = getTotalFee(tradeUnitFees, calculationType); + + FeeAndBillingSlabIds feeAndBillingSlabIds = new FeeAndBillingSlabIds(); + feeAndBillingSlabIds.setFee(tradeUnitTotalFee); + feeAndBillingSlabIds.setBillingSlabIds(billingSlabIds); + feeAndBillingSlabIds.setId(UUID.randomUUID().toString()); + + return feeAndBillingSlabIds; + } /** - * @param license TradeLicense for which fee has to be calculated + * @param license TradeLicense for which fee has to be calculated * @param calculationType Calculation logic to be used * @return Accessory Fee and billingSlab used to calculate it */ - private FeeAndBillingSlabIds getAccessoryFeeAndBillingSlabIds(TradeLicense license, CalculationType calculationType){ - - List accessoryFees = new LinkedList<>(); - List billingSlabIds = new LinkedList<>(); - - List accessories = license.getTradeLicenseDetail().getAccessories(); - int i = 0; - for(Accessory accessory : accessories) - { if(accessory.getActive()) - { - List preparedStmtList = new ArrayList<>(); - BillingSlabSearchCriteria searchCriteria = new BillingSlabSearchCriteria(); - searchCriteria.setTenantId(license.getTenantId()); - searchCriteria.setAccessoryCategory(accessory.getAccessoryCategory()); - searchCriteria.setApplicationType(license.getApplicationType().toString()); - if(accessory.getUomValue()!=null) - { - searchCriteria.setUomValue(Double.parseDouble(accessory.getUomValue())); - searchCriteria.setUom(accessory.getUom()); - } - // Call the Search - String query = queryBuilder.getSearchQuery(searchCriteria, preparedStmtList); - List billingSlabs = repository.getDataFromDB(query, preparedStmtList); - - if(billingSlabs.size()>1) - throw new CustomException("BILLINGSLAB ERROR","Found multiple BillingSlabs for the given accessories "); - if(CollectionUtils.isEmpty(billingSlabs)) - throw new CustomException("BILLINGSLAB ERROR","No BillingSlab Found for the given accessory"); - System.out.println("Accessory: "+accessory.getAccessoryCategory()+ " rate: "+billingSlabs.get(0).getRate()); - billingSlabIds.add(billingSlabs.get(0).getId()+"|"+i+"|"+accessory.getId()); - if(billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.FLAT)){ - BigDecimal count = accessory.getCount()==null ? BigDecimal.ONE : new BigDecimal(accessory.getCount()); - accessoryFees.add(billingSlabs.get(0).getRate().multiply(count)); - } - // accessoryTotalFee = accessoryTotalFee.add(billingSlabs.get(0).getRate()); - - if(billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.RATE)){ - BigDecimal uomVal = new BigDecimal(accessory.getUomValue()); - accessoryFees.add(billingSlabs.get(0).getRate().multiply(uomVal)); - // accessoryTotalFee = accessoryTotalFee.add(billingSlabs.get(0).getRate().multiply(uomVal)); - } - i++; - } - } - - BigDecimal accessoryTotalFee = getTotalFee(accessoryFees,calculationType); - FeeAndBillingSlabIds feeAndBillingSlabIds = new FeeAndBillingSlabIds(); - feeAndBillingSlabIds.setFee(accessoryTotalFee); - feeAndBillingSlabIds.setBillingSlabIds(billingSlabIds); - feeAndBillingSlabIds.setId(UUID.randomUUID().toString()); - - - return feeAndBillingSlabIds; - } - + private FeeAndBillingSlabIds getAccessoryFeeAndBillingSlabIds(TradeLicense license, + CalculationType calculationType) { + + List accessoryFees = new LinkedList<>(); + List billingSlabIds = new LinkedList<>(); + + List accessories = license.getTradeLicenseDetail().getAccessories(); + int i = 0; + for (Accessory accessory : accessories) { + if (accessory.getActive()) { + List preparedStmtList = new ArrayList<>(); + BillingSlabSearchCriteria searchCriteria = new BillingSlabSearchCriteria(); + searchCriteria.setTenantId(license.getTenantId()); + searchCriteria.setAccessoryCategory(accessory.getAccessoryCategory()); + searchCriteria.setApplicationType(license.getApplicationType().toString()); + if (accessory.getUomValue() != null) { + searchCriteria.setUomValue(Double.parseDouble(accessory.getUomValue())); + searchCriteria.setUom(accessory.getUom()); + } + // Call the Search + String query = queryBuilder.getSearchQuery(searchCriteria, preparedStmtList); + List billingSlabs = repository.getDataFromDB(query, preparedStmtList); + + if (billingSlabs.size() > 1) + throw new CustomException("BILLINGSLAB ERROR", + "Found multiple BillingSlabs for the given accessories "); + if (CollectionUtils.isEmpty(billingSlabs)) { + preparedStmtList.clear(); + searchCriteria.setTenantId(license.getTenantId().toString().split("\\.")[0]); + query = queryBuilder.getSearchQuery(searchCriteria, preparedStmtList); + billingSlabs = repository.getDataFromDB(query, preparedStmtList); + if (billingSlabs.size() > 1) + throw new CustomException("BILLINGSLAB ERROR", + "Found multiple BillingSlabs for the given accessories "); + if (CollectionUtils.isEmpty(billingSlabs)) + throw new CustomException("BILLINGSLAB ERROR", "No BillingSlab Found for the given accessory"); + } + + System.out.println( + "Accessory: " + accessory.getAccessoryCategory() + " rate: " + billingSlabs.get(0).getRate()); + billingSlabIds.add(billingSlabs.get(0).getId() + "|" + i + "|" + accessory.getId()); + if (billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.FLAT)) { + BigDecimal count = accessory.getCount() == null ? BigDecimal.ONE + : new BigDecimal(accessory.getCount()); + accessoryFees.add(billingSlabs.get(0).getRate().multiply(count)); + } + // accessoryTotalFee = accessoryTotalFee.add(billingSlabs.get(0).getRate()); + + if (billingSlabs.get(0).getType().equals(BillingSlab.TypeEnum.RATE)) { + BigDecimal uomVal = new BigDecimal(accessory.getUomValue()); + accessoryFees.add(billingSlabs.get(0).getRate().multiply(uomVal)); + // accessoryTotalFee = + // accessoryTotalFee.add(billingSlabs.get(0).getRate().multiply(uomVal)); + } + i++; + } + } + + BigDecimal accessoryTotalFee = getTotalFee(accessoryFees, calculationType); + FeeAndBillingSlabIds feeAndBillingSlabIds = new FeeAndBillingSlabIds(); + feeAndBillingSlabIds.setFee(accessoryTotalFee); + feeAndBillingSlabIds.setBillingSlabIds(billingSlabIds); + feeAndBillingSlabIds.setId(UUID.randomUUID().toString()); + + return feeAndBillingSlabIds; + } /** * Calculates total fee of by applying logic on list based on calculationType - * @param fees List of fee for different tradeType or accessories + * + * @param fees List of fee for different tradeType or accessories * @param calculationType Calculation logic to be used * @return Total Fee */ - private BigDecimal getTotalFee(List fees,CalculationType calculationType){ - BigDecimal totalFee = BigDecimal.ZERO; - //Summation - if(calculationType.equals(CalculationType.SUM)) - totalFee = fees.stream().reduce(BigDecimal.ZERO, BigDecimal::add); - - //Average - if(calculationType.equals(CalculationType.AVERAGE)) - totalFee = (fees.stream().reduce(BigDecimal.ZERO, BigDecimal::add) - .divide(new BigDecimal(fees.size()))).setScale(2,2); - - //Max - if(calculationType.equals(CalculationType.MAX)) - totalFee = fees.stream().reduce(BigDecimal::max).get(); - - //Min - if(calculationType.equals(CalculationType.MIN)) - totalFee = fees.stream().reduce(BigDecimal::min).get(); - - return totalFee; - } - - - - - - - - + private BigDecimal getTotalFee(List fees, CalculationType calculationType) { + BigDecimal totalFee = BigDecimal.ZERO; + // Summation + if (calculationType.equals(CalculationType.SUM)) + totalFee = fees.stream().reduce(BigDecimal.ZERO, BigDecimal::add); + + // Average + if (calculationType.equals(CalculationType.AVERAGE)) + totalFee = (fees.stream().reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(new BigDecimal(fees.size()))).setScale(2, 2); + + // Max + if (calculationType.equals(CalculationType.MAX)) + totalFee = fees.stream().reduce(BigDecimal::max).get(); + + // Min + if (calculationType.equals(CalculationType.MIN)) + totalFee = fees.stream().reduce(BigDecimal::min).get(); + + return totalFee; + } }