diff --git a/.vscode/launch.json b/.vscode/launch.json index 95e6faa..eb1e198 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -61,6 +61,7 @@ "REDIS_PASSWORD": "M@triXR3d1s@6202", "REDIS_DATABASE": "1", "REDIS_SSL": "false", + "CYGNUS_QUERY_CACHE_ENABLED": "false", "CYGNUS_CLOUD_BASE_URL": "http://localhost:8090", "CYGNUS_TOKEN_URL": "http://localhost:8090/oauth2/token", "CYGNUS_CLIENT_ID": "matrix", diff --git a/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java b/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java index 43fb7be..6c5c11f 100644 --- a/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java +++ b/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java @@ -42,6 +42,9 @@ public enum ApplicationMessage { "The application details were saved successfully.", ""), APPLICATIONS_LOADED(200, "APP-2002", "Applications loaded", "The application records were loaded successfully.", ""), + APPLICATION_LOAD_FAILED(500, "APP-5002", "Applications could not be loaded", + "Cygnus could not load the application details.", + "Try again. If the issue continues, share the reference ID with support."), APPLICATION_SAVE_FAILED(500, "APP-5001", "Application could not be saved", "Cygnus could not save the application details.", "Try again. If the issue continues, share the reference ID with support."), diff --git a/cygnus-lib/src/main/java/lib/models/EditCaseSummary.java b/cygnus-lib/src/main/java/lib/models/EditCaseSummary.java new file mode 100644 index 0000000..20a449b --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/EditCaseSummary.java @@ -0,0 +1,19 @@ +package lib.models; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class EditCaseSummary { + private String documentCaseId; + private String mvCode; + private String fileNumber; + private String customerName; + private String applicationType; + private String product; + private String receivedOn; + private String punchedBy; + private String branchCode; + private Short portfolioId; +} diff --git a/cygnus-lib/src/main/java/lib/models/LocalityData.java b/cygnus-lib/src/main/java/lib/models/LocalityData.java new file mode 100644 index 0000000..009879c --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/LocalityData.java @@ -0,0 +1,10 @@ +package lib.models; + +import java.util.List; + +/** Localities returned to the case-initiation autocomplete. */ +public record LocalityData(List localities) { + public LocalityData { + localities = localities == null ? List.of() : List.copyOf(localities); + } +} diff --git a/cygnus-lib/src/main/java/lib/models/LocalityOption.java b/cygnus-lib/src/main/java/lib/models/LocalityOption.java new file mode 100644 index 0000000..616d663 --- /dev/null +++ b/cygnus-lib/src/main/java/lib/models/LocalityOption.java @@ -0,0 +1,4 @@ +package lib.models; + +/** One company-authorized locality autocomplete result. */ +public record LocalityOption(Integer id, String location, String pincode, String city) {} diff --git a/cygnus-lib/target/classes/lib/constants/ApplicationMessage.class b/cygnus-lib/target/classes/lib/constants/ApplicationMessage.class deleted file mode 100644 index 1c78a10..0000000 Binary files a/cygnus-lib/target/classes/lib/constants/ApplicationMessage.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/exceptions/ApplicationException.class b/cygnus-lib/target/classes/lib/exceptions/ApplicationException.class deleted file mode 100644 index fed6543..0000000 Binary files a/cygnus-lib/target/classes/lib/exceptions/ApplicationException.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/ApiResponse.class b/cygnus-lib/target/classes/lib/models/ApiResponse.class deleted file mode 100644 index dbdf179..0000000 Binary files a/cygnus-lib/target/classes/lib/models/ApiResponse.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/ApplicationDetails.class b/cygnus-lib/target/classes/lib/models/ApplicationDetails.class deleted file mode 100644 index cb996f5..0000000 Binary files a/cygnus-lib/target/classes/lib/models/ApplicationDetails.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/ApplicationSaveData.class b/cygnus-lib/target/classes/lib/models/ApplicationSaveData.class deleted file mode 100644 index abae585..0000000 Binary files a/cygnus-lib/target/classes/lib/models/ApplicationSaveData.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/ApplicationSaveResult.class b/cygnus-lib/target/classes/lib/models/ApplicationSaveResult.class deleted file mode 100644 index 8b0b300..0000000 Binary files a/cygnus-lib/target/classes/lib/models/ApplicationSaveResult.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/CasePunching.class b/cygnus-lib/target/classes/lib/models/CasePunching.class deleted file mode 100644 index a7267e5..0000000 Binary files a/cygnus-lib/target/classes/lib/models/CasePunching.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/CaseSaveRequest.class b/cygnus-lib/target/classes/lib/models/CaseSaveRequest.class deleted file mode 100644 index 3bf8e43..0000000 Binary files a/cygnus-lib/target/classes/lib/models/CaseSaveRequest.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/MessageDetails.class b/cygnus-lib/target/classes/lib/models/MessageDetails.class deleted file mode 100644 index c118e26..0000000 Binary files a/cygnus-lib/target/classes/lib/models/MessageDetails.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/Option.class b/cygnus-lib/target/classes/lib/models/Option.class deleted file mode 100644 index 2df6df0..0000000 Binary files a/cygnus-lib/target/classes/lib/models/Option.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class b/cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class deleted file mode 100644 index af44226..0000000 Binary files a/cygnus-lib/target/classes/lib/models/UserSession$UserSessionBuilder.class and /dev/null differ diff --git a/cygnus-lib/target/classes/lib/models/UserSession.class b/cygnus-lib/target/classes/lib/models/UserSession.class deleted file mode 100644 index 5fb4f06..0000000 Binary files a/cygnus-lib/target/classes/lib/models/UserSession.class and /dev/null differ diff --git a/cygnus-lib/target/cygnus-lib-1.0.0-SNAPSHOT.jar b/cygnus-lib/target/cygnus-lib-1.0.0-SNAPSHOT.jar deleted file mode 100644 index 7feaa46..0000000 Binary files a/cygnus-lib/target/cygnus-lib-1.0.0-SNAPSHOT.jar and /dev/null differ diff --git a/cygnus-lib/target/maven-archiver/pom.properties b/cygnus-lib/target/maven-archiver/pom.properties deleted file mode 100644 index ccdce53..0000000 --- a/cygnus-lib/target/maven-archiver/pom.properties +++ /dev/null @@ -1,3 +0,0 @@ -artifactId=cygnus-lib -groupId=com.cygnus -version=1.0.0-SNAPSHOT diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index da08045..0000000 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1,12 +0,0 @@ -lib/models/CasePunching.class -lib/models/ApiResponse.class -lib/models/ApplicationSaveResult.class -lib/constants/ApplicationMessage.class -lib/models/ApplicationSaveData.class -lib/models/UserSession$UserSessionBuilder.class -lib/models/MessageDetails.class -lib/exceptions/ApplicationException.class -lib/models/Option.class -lib/models/UserSession.class -lib/models/CaseSaveRequest.class -lib/models/ApplicationDetails.class diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 4264197..0000000 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1,13 +0,0 @@ -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/constants/ApplicationMessage.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/exceptions/ApplicationException.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApiResponse.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApplicationDetails.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApplicationSaveData.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/ApplicationSaveResult.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/CasePunching.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/CaseSaveRequest.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/DuplicateDetailsData.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/MessageDetails.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/Option.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/PunchedRecordsData.java -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/main/java/lib/models/UserSession.java diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst deleted file mode 100644 index f382137..0000000 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +++ /dev/null @@ -1 +0,0 @@ -lib/models/MessageDetailsTest.class diff --git a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst deleted file mode 100644 index 5b52a0d..0000000 --- a/cygnus-lib/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ /dev/null @@ -1 +0,0 @@ -/Users/maddy/Projects/cygnus/matrix/cygnus-lib/src/test/java/lib/models/MessageDetailsTest.java diff --git a/cygnus-lib/target/test-classes/lib/models/MessageDetailsTest.class b/cygnus-lib/target/test-classes/lib/models/MessageDetailsTest.class deleted file mode 100644 index 491ee27..0000000 Binary files a/cygnus-lib/target/test-classes/lib/models/MessageDetailsTest.class and /dev/null differ diff --git a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/editcases.jsp b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/editcases.jsp index 96c9357..b9ee053 100644 --- a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/editcases.jsp +++ b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/editcases.jsp @@ -13,43 +13,42 @@ - + - - - - - - -Cygnus 1.0 | Edit Cases + + + + +Cygnus 1.0 | Edit Cases + - +
-<%@ include file="/WEB-INF/app/fragments/app-title.jspf" %> +<%@ include file="/WEB-INF/app/fragments/app-title.jspf" %> -
- +
+
- - List of Cases -
- - - - - - -
- -
+ + List of Cases + + + + + + + +
@@ -69,19 +68,19 @@ - + - - - - - - - - + + + + + + + + @@ -103,4 +102,4 @@ - + diff --git a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp index 41c0a8e..218745f 100644 --- a/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp +++ b/cygnus-onprem-app/build/WebContent/WEB-INF/app/edp/punching/initcase.jsp @@ -17,18 +17,17 @@ - - - - - + + + + + - - - + + + - - + @@ -37,11 +36,11 @@ - + - - + + @@ -58,7 +57,7 @@ @@ -77,16 +76,19 @@ +
- - - - + + + @@ -117,7 +119,7 @@ Appl No.
- +
@@ -125,7 +127,7 @@ Bank Code
- +
@@ -134,13 +136,13 @@
- - - - + + + @@ -154,10 +156,10 @@
- - + @@ -169,7 +171,7 @@ Name
- +
@@ -186,10 +188,10 @@
- - + @@ -205,7 +207,7 @@ @@ -266,10 +268,10 @@
Residence Details -
- RVR  - Same Resi - RTV +
+ RVR  + Same Resi + RTV
@@ -316,7 +318,7 @@ - + @@ -374,11 +376,11 @@
Office Details -
- OVR  - RCO  - Same Office - OTV +
+ OVR  + RCO  + Same Office + OTV
@@ -434,7 +436,7 @@ - + @@ -475,7 +477,7 @@

- +
@@ -492,8 +494,10 @@ Office Phone-Extn

-
- - +
+ + +
@@ -510,11 +514,11 @@
Property Details -
- PVR  - RCP  - OCP  - Same Property +
+ PVR  + RCP  + OCP  + Same Property
@@ -529,7 +533,7 @@

- +
@@ -561,7 +565,7 @@ - + @@ -584,7 +588,7 @@

- +
@@ -610,7 +614,7 @@
Reference Details -
+
Ref Check 
@@ -675,7 +679,7 @@
Document Details -
+
Doc VR 
@@ -694,17 +698,17 @@ - - + + - -
+ +
- + @@ -722,9 +726,9 @@ diff --git a/cygnus-onprem-app/build/WebContent/css/add-cases-v4.css b/cygnus-onprem-app/build/WebContent/css/add-cases-v4.css index 18edeee..28ddb0d 100644 --- a/cygnus-onprem-app/build/WebContent/css/add-cases-v4.css +++ b/cygnus-onprem-app/build/WebContent/css/add-cases-v4.css @@ -66,6 +66,40 @@ font-weight: 400; } +.matrix-add-cases .matrix-phone-extension { + display: grid; + grid-template-columns: minmax(0, 1fr) auto 48px; + align-items: center; + gap: 4px; +} + +.matrix-add-cases .matrix-phone-extension > input { + width: 100% !important; + min-width: 0; +} + +.matrix-add-cases .matrix-edit-back { + display: inline-flex; + align-items: center; + gap: 5px; + min-height: 28px; + margin-left: auto; + padding: 3px 10px; + color: #245f91; + font-size: 12px; + font-weight: 600; + border: 1px solid #9eb5c8; + border-radius: 4px; + background: #f6f9fb; +} + +.matrix-add-cases .matrix-edit-back:hover, +.matrix-add-cases .matrix-edit-back:focus-visible { + color: #fff; + border-color: #28699d; + background: #28699d; +} + .matrix-add-cases .matrix-form-controls .widget:has(#splist), .matrix-add-cases .matrix-form-controls .widget:has(textarea), .matrix-add-cases .matrix-form-controls .widget:has(input[id*="Address"]), diff --git a/cygnus-onprem-app/build/WebContent/css/edit-cases-v1.css b/cygnus-onprem-app/build/WebContent/css/edit-cases-v1.css index 79619dd..e49dabd 100644 --- a/cygnus-onprem-app/build/WebContent/css/edit-cases-v1.css +++ b/cygnus-onprem-app/build/WebContent/css/edit-cases-v1.css @@ -4,19 +4,66 @@ background: #f4f8fb; } -.matrix-edit-cases .matrix-tool-workspace__content > .title .divselect { - width: min(330px, 38vw) !important; - margin-left: auto; - position: static !important; +.matrix-edit-cases #caseGrid > div > .title { + display: flex !important; + align-items: center; + flex-wrap: nowrap !important; + gap: 7px; } -.matrix-edit-cases .matrix-tool-workspace__content > .title select { - width: 100% !important; - min-height: 28px; - padding: 3px 28px 3px 7px; - border: 1px solid #9fb1c1; - border-radius: 3px; - background-color: #fff; +.matrix-edit-cases #caseGrid > div > .title > .matrix-title-text { + flex: 0 0 auto; + white-space: nowrap; +} + +.matrix-edit-cases #caseGrid > div > .title > .matrix-edit-cases__portfolio-select { + width: 0 !important; + min-width: 0; + flex: 1 1 auto; + margin: 0 !important; + font-family: Tahoma, Arial, sans-serif; + font-size: 10pt; + font-weight: 400; + padding: 2px 30px 2px 7px !important; +} + +.matrix-edit-cases #caseGrid > div > .title > .matrix-edit-cases__refresh { + box-sizing: border-box !important; + width: 27px !important; + height: 27px !important; + min-width: 27px !important; + min-height: 27px !important; + margin: 0 !important; + flex: 0 0 27px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 !important; + border: 0 !important; + border-radius: 0 !important; + outline: 0 !important; + appearance: none; + background: transparent !important; + box-shadow: none !important; +} + +.matrix-edit-cases #caseGrid > div > .title > .matrix-edit-cases__refresh:hover, +.matrix-edit-cases #caseGrid > div > .title > .matrix-edit-cases__refresh:focus, +.matrix-edit-cases #caseGrid > div > .title > .matrix-edit-cases__refresh:focus-visible, +.matrix-edit-cases #caseGrid > div > .title > .matrix-edit-cases__refresh:active { + width: 27px !important; + height: 27px !important; + margin: 0 !important; + padding: 0 !important; + border: 0 !important; + outline: 0 !important; + background: transparent !important; + box-shadow: none !important; +} + +.matrix-edit-cases .matrix-edit-cases__refresh img { + width: 16px; + height: 16px; } .matrix-edit-cases .tableContainer { @@ -55,12 +102,4 @@ width: 100% !important; } - .matrix-edit-cases .matrix-tool-workspace__content > .title { - flex-wrap: wrap; - } - - .matrix-edit-cases .matrix-tool-workspace__content > .title .divselect { - width: 100% !important; - order: 3; - } } diff --git a/cygnus-onprem-app/build/WebContent/js/ajax-dynamic-list.js b/cygnus-onprem-app/build/WebContent/js/ajax-dynamic-list.js index 22756fe..048b1c4 100644 --- a/cygnus-onprem-app/build/WebContent/js/ajax-dynamic-list.js +++ b/cygnus-onprem-app/build/WebContent/js/ajax-dynamic-list.js @@ -31,8 +31,7 @@ Owner of DHTMLgoodies.com var ajax_list_externalFile = 'getlocality'; // Path to external file var minimumLettersBeforeLookup = 1; // Number of letters entered before a lookup is performed. - var ajax_list_objects = new Array(); - var ajax_list_cachedLists = new Array(); + var ajax_list_cachedLists = new Array(); var ajax_list_activeInput = false; var ajax_list_activeItem; var ajax_list_optionDivFirstItem = false; @@ -75,11 +74,11 @@ Owner of DHTMLgoodies.com ajax_list_activeInput.value = tmpValue; if(document.getElementsByName(ajax_list_activeInput.name + '_hidden')[0]) { - document.getElementsByName(ajax_list_activeInput.name + '_hidden')[0].value = inputObj.id.split("#-#")[0]; - if(ajax_list_externalFile == 'getlocality') - { - document.getElementsByName(ajax_list_activeInput.name + '_pincode')[0].value = inputObj.id.split("#-#")[1]; - document.getElementsByName(ajax_list_activeInput.name + '_citylist')[0].value = inputObj.id.split("#-#")[2]; + document.getElementsByName(ajax_list_activeInput.name + '_hidden')[0].value = inputObj.dataset.localityId; + if(ajax_list_externalFile == 'getlocality') + { + document.getElementsByName(ajax_list_activeInput.name + '_pincode')[0].value = inputObj.dataset.pincode; + document.getElementsByName(ajax_list_activeInput.name + '_citylist')[0].value = inputObj.dataset.city; } } ajax_options_hide(); @@ -113,7 +112,7 @@ Owner of DHTMLgoodies.com ajax_optionDiv.innerHTML = ''; ajax_list_activeItem = false; - if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length<=1){ + if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length===0){ ajax_options_hide(); return; } @@ -123,19 +122,20 @@ Owner of DHTMLgoodies.com ajax_list_optionDivFirstItem = false; var optionsAdded = false; for(var no=0;no"); - }*/ - $("#uuid").val($("#"+SelectedRow.id+"uuid").val()); - SubmitForm("caseedit", "_blank", "caseGrid"); -} -function keyListen(param1,param2,e) { - var keycode = e.keyCode; - if(keycode==13) - { - GetRowData(document.getElementById("row"+currow)); - } - else - { - if(keycode==40) - { - currow=currow+1; - if(currow>=$('#casetable tr').length){currow=1;lastrow=$('#casetable tr').length-1;} - } - if(keycode==38) - { - currow=currow-1; - if(currow<=0){currow=$('#casetable tr').length-1;lastrow=1;} - } - $('#row'+currow).addClass('rowhover'); - $('#row'+lastrow).removeClass('rowhover'); - document.getElementById('row'+currow).focus(); - lastrow=currow; - } -} - -function callkeydownhandler(evnt) { - var ev = evnt; - var focusedRow = ev.target && ev.target.tagName === "TR" ? ev.target : null; - if ((ev.key === "Enter" || ev.keyCode === 13) && focusedRow) { - ev.preventDefault(); - GetRowData(focusedRow); - return; - } - keyListen('','',ev); -} - -window.document.addEventListener("keydown", callkeydownhandler, false); diff --git a/cygnus-onprem-app/build/WebContent/js/edp/punching/edit-cases.js b/cygnus-onprem-app/build/WebContent/js/edp/punching/edit-cases.js new file mode 100644 index 0000000..11e2fe7 --- /dev/null +++ b/cygnus-onprem-app/build/WebContent/js/edp/punching/edit-cases.js @@ -0,0 +1,112 @@ +(function () { + "use strict"; + + var currentRow = 0; + var lastRow = 0; + + function rows() { + return Array.prototype.slice.call(document.querySelectorAll("#casetable tbody tr")); + } + + function rowNumber(row) { + return Number((row.id || "").replace("row", "")) || 0; + } + + function setActiveRow(row) { + if (!row) { + return; + } + rows().forEach(function (item) { + item.classList.remove("rowhover"); + }); + row.classList.add("rowhover"); + currentRow = rowNumber(row); + lastRow = currentRow; + row.focus(); + } + + function hiddenValue(row, suffix) { + var input = document.getElementById(row.id + suffix); + return input ? input.value : ""; + } + + function submitForm(action, target, formId) { + if (typeof SubmitForm === "function") { + SubmitForm(action, target, formId); + return; + } + var form = document.getElementById(formId); + if (!form) { + return; + } + form.action = action; + form.target = target; + form.submit(); + } + + function openRow(row) { + if (!row) { + return; + } + var uuid = hiddenValue(row, "uuid"); + var portfolioId = hiddenValue(row, "portid"); + if (!uuid || !portfolioId) { + return; + } + document.getElementById("uuid").value = uuid; + document.getElementById("portlist").value = portfolioId; + submitForm("caseedit", "_parent", "caseGrid"); + } + + function moveSelection(direction) { + var allRows = rows(); + if (allRows.length === 0) { + return; + } + var nextIndex = currentRow > 0 ? currentRow - 1 + direction : 0; + if (nextIndex < 0) { + nextIndex = allRows.length - 1; + } + if (nextIndex >= allRows.length) { + nextIndex = 0; + } + setActiveRow(allRows[nextIndex]); + } + + function handleKeydown(event) { + var row = event.target && event.target.closest ? event.target.closest("#casetable tbody tr") : null; + if (event.key === "Enter" && row) { + event.preventDefault(); + openRow(row); + return; + } + if (event.key === "ArrowDown") { + event.preventDefault(); + moveSelection(1); + return; + } + if (event.key === "ArrowUp") { + event.preventDefault(); + moveSelection(-1); + } + } + + function init() { + rows().forEach(function (row) { + row.addEventListener("mouseenter", function () { + setActiveRow(row); + }); + row.addEventListener("click", function () { + openRow(row); + }); + }); + document.addEventListener("keydown", handleKeydown, false); + } + + window.CygnusEditCases = { + init: init, + openRow: openRow + }; + + window.InitPage = init; +}()); diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/controller/Ajax.java b/cygnus-onprem-app/src/main/java/matrix/nimble/controller/Ajax.java index 399c10d..b4aaae8 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/controller/Ajax.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/controller/Ajax.java @@ -95,21 +95,6 @@ public class Ajax { } return response; } - @RequestMapping(value="getlocality",method=RequestMethod.POST ) - public @ResponseBody String GetLocality(@RequestParam String city, @RequestParam String letters) - { - DBFunctions DBF=new DBFunctions("1001"); - DBF.setProcessFlag(true); - - String val1="and 1=1"; - if(!(city.toUpperCase().equals("-1") || city.toUpperCase().equals("UNKNOWN"))) - { - val1="and upper(city)=upper('"+city+"')"; - } - String response= DBF.FetchRunQuery(13, (letters.toUpperCase()+GlobalClass.ColDelim+val1+GlobalClass.ColDelim).split(GlobalClass.ColDelim)); - response=response.replace(GlobalClass.ColDelim+GlobalClass.RowDelim, GlobalClass.RowDelim); - return response; - } @RequestMapping(value="listservprovider",method=RequestMethod.POST ) public @ResponseBody String ListServProvider(@RequestParam String city, @RequestParam String letters) { diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/EditCasesGrid.java b/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/EditCasesGrid.java deleted file mode 100644 index a190195..0000000 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/EditCasesGrid.java +++ /dev/null @@ -1,60 +0,0 @@ -package matrix.nimble.edp.punching.controllers; - -import java.util.HashMap; - -import jakarta.servlet.http.HttpServletRequest; - -import matrix.nimble.edp.punching.model.CaseGrid; -import matrix.nimble.model.Session; -import matrix.nimble.utilities.GlobalClass; -import matrix.nimble.utilities.ModuleFunctions; - -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.SessionAttributes; - -@Controller -@SessionAttributes({ "Sessvals" }) -public class EditCasesGrid { - @RequestMapping(value = "editgrid", method = RequestMethod.POST) - public String OpenEditGrid(ModelMap model, HttpServletRequest request, - @ModelAttribute(value = "Sessvals") Session Sessvals) { - String[][] CaseList = null; - CaseGrid CG = new CaseGrid(); - model.addAttribute("Sessvals", Sessvals); - model.addAttribute("caseList", CaseList); - model.addAttribute("caseGrid", CG); - model.addAttribute("portlist", FillPortList(Sessvals.getBranchID(), Sessvals.getUserID())); - return "edp/punching/editcases"; - } - - @RequestMapping(value = "caselist", method = RequestMethod.POST) - public String ListCases(ModelMap model, HttpServletRequest request, - @ModelAttribute(value = "Sessvals") Session Sessvals, - @ModelAttribute(value = "caseGrid") CaseGrid caseGrid) { - CaseGrid CG = new CaseGrid(); - CG.setErrCode("1002"); - CG.setPortfolioId(caseGrid.getPortfolioId()); - String[][] CaseList = CG.FillCaseList(caseGrid.getPortfolioId(), Sessvals.getBranchID()); - if (CG.isProcessFlag()) { - model.addAttribute("caseList", CaseList); - model.addAttribute("caseGrid", CG); - } else { - caseGrid.setErrMsg(CG.getErrMsg()); - model.addAttribute("caseList", CaseList); - model.addAttribute("caseGrid", caseGrid); - } - model.addAttribute("Sessvals", Sessvals); - model.addAttribute("portlist", FillPortList(Sessvals.getBranchID(), Sessvals.getUserID())); - return "edp/punching/editcases"; - } - - public String[][] FillPortList(String BranchId, String userId) { - return new ModuleFunctions("1002").GetResultArray(249, - (BranchId + GlobalClass.ColDelim + userId + GlobalClass.ColDelim).split(GlobalClass.ColDelim)); - } - -} diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java b/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java index 13eb8aa..11f9ecc 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/controllers/PunchingController.java @@ -27,6 +27,8 @@ import lib.models.CaseSaveRequest; import lib.models.MessageDetails; import lib.models.PunchedRecordsData; import lib.models.DuplicateDetailsData; +import lib.models.LocalityData; +import matrix.nimble.edp.punching.model.CaseGrid; import lib.constants.ApplicationMessage; import matrix.nimble.security.PayloadCryptoService; import lib.exceptions.ApplicationException; @@ -42,6 +44,8 @@ public class PunchingController extends AbstractAuthenticatedController { private static final String CASE_ADD_ROUTE = "caseadd"; private static final String CASE_EDIT_ROUTE = "caseedit"; private static final String DUPLICATE_DETAILS_ROUTE = "findsdet"; + private static final String LOCALITY_ROUTE = "getlocality"; + private static final String EDIT_GRID_ROUTE = "editgrid"; private final PunchingService punchingService; private final PayloadCryptoService cryptoService; @@ -121,6 +125,33 @@ public class PunchingController extends AbstractAuthenticatedController { } } + @RequestMapping(value = LOCALITY_ROUTE, method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public ResponseEntity> findLocalities( + @RequestParam("city") String city, + @RequestParam("letters") String letters, + HttpSession httpSession) { + ApiAuthorization authorization = authorizeApiPage(INIT_VIEW_ROUTE, httpSession); + if (!authorization.isGranted()) { + return ResponseEntity.status(authorization.error().getHttpStatus()) + .body(ApiResponse.failure(authorization.error())); + } + try { + LocalityData data = punchingService.findLocalities(city, letters, authorization.session()); + return ResponseEntity.ok(ApiResponse.success( + data, new MessageDetails(ApplicationMessage.APPLICATIONS_LOADED))); + } catch (ApplicationException exception) { + LOGGER.log(Level.WARNING, "Locality search was rejected", exception); + MessageDetails details = new MessageDetails(exception.getApplicationMessage()); + return ResponseEntity.status(details.getHttpStatus()).body(ApiResponse.failure(details)); + } catch (RuntimeException exception) { + LOGGER.log(Level.SEVERE, "Unable to search localities", exception); + MessageDetails details = new MessageDetails(ApplicationMessage.INTERNAL_SERVER_ERROR); + return ResponseEntity.status(details.getHttpStatus()).body(ApiResponse.failure(details)); + } + } + @RequestMapping(value = "application-save", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -207,4 +238,52 @@ public class PunchingController extends AbstractAuthenticatedController { session.getCompanyId(), session.getUserId())); return "edp/punching/initcase"; } + + @RequestMapping(value = EDIT_GRID_ROUTE, method = RequestMethod.POST) + public String openEditGrid( + ModelMap model, + HttpSession httpSession, + HttpServletResponse response) { + PageAuthorization authorization = authorizePage( + EDIT_GRID_ROUTE, model, httpSession, response); + if (!authorization.isGranted()) { + return authorization.viewName(); + } + populateEditGrid(model, new CaseGrid(), authorization.session(), false); + return "edp/punching/editcases"; + } + + @RequestMapping(value = "caselist", method = RequestMethod.POST) + public String listEditableCases( + @ModelAttribute("caseGrid") CaseGrid caseGrid, + ModelMap model, + HttpSession httpSession, + HttpServletResponse response) { + PageAuthorization authorization = authorizePage( + EDIT_GRID_ROUTE, model, httpSession, response); + if (!authorization.isGranted()) { + return authorization.viewName(); + } + populateEditGrid(model, caseGrid, authorization.session(), true); + return "edp/punching/editcases"; + } + + private void populateEditGrid( + ModelMap model, CaseGrid caseGrid, UserSession session, boolean loadCases) { + Short portfolioId = selectedPortfolio(caseGrid); + model.addAttribute("caseGrid", caseGrid); + model.addAttribute("portlist", punchingService.loadEditCasePortfolios(session)); + model.addAttribute("caseList", loadCases && portfolioId != null + ? punchingService.loadEditableCases(portfolioId, session) + : java.util.List.of()); + } + + private Short selectedPortfolio(CaseGrid caseGrid) { + try { + short portfolioId = Short.parseShort(caseGrid.getPortfolioId()); + return portfolioId > 0 ? portfolioId : null; + } catch (NumberFormatException | NullPointerException ignored) { + return null; + } + } } diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/model/CaseGrid.java b/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/model/CaseGrid.java index 6459a04..16b4bb9 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/model/CaseGrid.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/edp/punching/model/CaseGrid.java @@ -1,10 +1,6 @@ package matrix.nimble.edp.punching.model; -import matrix.nimble.utilities.DBFunctions; -import matrix.nimble.utilities.GlobalClass; -import matrix.nimble.utilities.StringFunctions; - -public class CaseGrid { +public class CaseGrid { private String ErrMsg; private String ErrDesc; private String ErrCode; @@ -48,23 +44,4 @@ public class CaseGrid { public void setCaseID(String caseID) { CaseID = caseID; } - public String[][] FillCaseList(String PortfolioID,String CompBranchId) - { - String [][]CaseList=null; - DBFunctions DBF=new DBFunctions(getErrCode()); - DBF.setProcessFlag(true); - String ResultData=DBF.FetchRunQuery(23, (PortfolioID+GlobalClass.ColDelim+CompBranchId+GlobalClass.ColDelim).split(GlobalClass.ColDelim)); - if(DBF.isProcessFlag()) - { - setProcessFlag(DBF.isProcessFlag()); - CaseList=new StringFunctions(getErrCode()).ConverTo2DArray(ResultData, GlobalClass.RowDelim, GlobalClass.ColDelim); - } - else - { - setProcessFlag(false); - setErrMsg(DBF.getErrMsg()); - setErrDesc(DBF.getErrDesc()); - } - return CaseList; - } -} +} diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/query/DirectQueryProvider.java b/cygnus-onprem-app/src/main/java/matrix/nimble/query/DirectQueryProvider.java new file mode 100644 index 0000000..2787a6c --- /dev/null +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/query/DirectQueryProvider.java @@ -0,0 +1,21 @@ +package matrix.nimble.query; + +import java.util.Objects; + +public final class DirectQueryProvider implements QueryProvider { + private final QuerySource source; + + public DirectQueryProvider(QuerySource source) { + this.source = Objects.requireNonNull(source, "source"); + } + + @Override + public String getQuery(int queryId) { + return source.fetch(queryId); + } + + @Override + public String getQuery(String queryKey) { + return source.fetch(queryKey); + } +} diff --git a/cygnus-onprem-app/src/main/java/matrix/nimble/query/QueryProviderConfiguration.java b/cygnus-onprem-app/src/main/java/matrix/nimble/query/QueryProviderConfiguration.java index 1708ccd..2eb3c9e 100644 --- a/cygnus-onprem-app/src/main/java/matrix/nimble/query/QueryProviderConfiguration.java +++ b/cygnus-onprem-app/src/main/java/matrix/nimble/query/QueryProviderConfiguration.java @@ -23,12 +23,14 @@ public class QueryProviderConfiguration implements DisposableBean { OnPremRedisCacheService cache, CloudIdentityClient cloudClient, CloudClientProperties cloudProperties, + @Value("${CYGNUS_QUERY_CACHE_ENABLED:true}") boolean cacheEnabled, @Value("${CYGNUS_QUERY_CACHE_AES_KEY:}") String configuredKey) { - byte[] key = queryCacheKey(configuredKey, cloudProperties.clientAssertion()); - installed = new RedisCachingQueryProvider( - cache, - new CloudQuerySource(cloudClient), - new AesGcmQueryCipher(key)); + QuerySource cloudSource = new CloudQuerySource(cloudClient); + installed = cacheEnabled + ? new RedisCachingQueryProvider( + cache, cloudSource, new AesGcmQueryCipher( + queryCacheKey(configuredKey, cloudProperties.clientAssertion()))) + : new DirectQueryProvider(cloudSource); QueryProviders.install(installed); return installed; } diff --git a/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java b/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java index 6e05fd4..ce0e2d5 100644 --- a/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java +++ b/cygnus-onprem-app/src/main/java/matrix/services/edp/PunchingService.java @@ -25,6 +25,9 @@ import lib.models.MessageDetails; import lib.models.Option; import lib.models.PunchedRecordsData; import lib.models.DuplicateDetailsData; +import lib.models.EditCaseSummary; +import lib.models.LocalityData; +import lib.models.LocalityOption; import lib.models.UserSession; import lib.constants.ApplicationMessage; import lib.exceptions.ApplicationException; @@ -45,6 +48,9 @@ public class PunchingService { private static final Short ACTIVE = Short.valueOf((short) 1); private static final int PUNCHED_RECORDS_QUERY = 24; + private static final int EDIT_CASES_QUERY = 23; + private static final int EDIT_CASE_PORTFOLIOS_QUERY = 249; + private static final int LOCALITY_QUERY = 13; private static final int RESIDENCE_DETAILS_QUERY = 19; private static final int OFFICE_DETAILS_QUERY = 20; private static final int PROPERTY_DETAILS_QUERY = 21; @@ -100,6 +106,40 @@ public class PunchingService { } } + public List
- - + + ${status.count}${casedet[1]}${casedet[2]}${casedet[3]}${casedet[4]}${casedet[5]}${casedet[6]}${casedet[7]}${casedet[8]}${casedet.mvCode}${casedet.fileNumber}${casedet.customerName}${casedet.applicationType}${casedet.product}${casedet.receivedOn}${casedet.punchedBy}${casedet.branchCode}