Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deployment #120

Open
wants to merge 114 commits into
base: master
Choose a base branch
from
Open

Deployment #120

wants to merge 114 commits into from

Conversation

Mandar-Beehyv
Copy link
Contributor

@Mandar-Beehyv Mandar-Beehyv commented Jan 21, 2025

  1. Added yaml file to generate war and app.js file for NMSReportingSuite and app respectively.
  2. Added node modules.
  3. Added bower components.
  4. added urls.js present in scripts

Summary by CodeRabbit

  • New Features

    • Introduced detailed Kilkari usage reports for mothers and children, now available from the reports menu.
    • Standardized report naming for enhanced clarity in performance dashboards.
  • Chores

    • Automated build and deployment with a new CI workflow.
    • Updated configurations, dependency management, and SMS templates to improve overall stability and consistency.

Copy link

coderabbitai bot commented Feb 12, 2025

Walkthrough

This pull request introduces a new GitHub Actions workflow to automate build and deployment for the NMS Reporting Suite. It updates reporting functionality by adding methods for generating usage reports for mothers and children, with corresponding changes in service interfaces, implementations, and controllers. New DAO interfaces and implementations have been added for Kilkari usage data, and entity as well as enum definitions are updated with additional fields. SMS properties have been revised and extensive new files for AngularJS libraries and supporting assets are introduced.

Changes

File(s) Change Summary
.github/workflows/NMSReportingSuite-deployment.yaml New GitHub Actions workflow file to build and deploy on pushes to the deployment branch.
.gitignore Removed entries for app/bower_components/, app/node_modules/, and app/scripts/global/urls.js to allow tracking these assets.
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/...
AggregateKilkariReportsService.java
AggregateKilkariReportsServiceImpl.java
AggregateReportsServiceImpl.java
UserController.java
Added new methods (getMotherUsageReport, getChildUsageReport) and updated method signatures and internal report logic to support differentiated usage reports.
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/...
KilkariUsageChildDao.java
KilkariUsageMotherDao.java
...DaoImpl.java
New DAO interfaces and implementations for retrieving Kilkari usage data for mothers and children using Hibernate criteria queries.
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/entity/...
KilkariAggregateBeneficiariesDto.java
AggregateCumulativeBeneficiary.java
Added new fields and corresponding getter/setter methods (motherSubscriptionJoined, childSubscriptionJoined) to support enhanced reporting.
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/enums/...
EtlJobForNotifications.java
ReportType.java
Updated and added new enum constants and string parameters for report types including usage reports for mothers and children, and updated existing report names.
NMSReportingSuite/src/main/resources/sms.properties Updated SMS template IDs and added new entries for Asha certificate downloads.
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/...
Home.java
Reports.java
UserManualMobileAcademyAgg.java
Modified conditional checks and display text for report selection to align with updated naming conventions.
app/bower_components/... Numerous new files added for AngularJS libraries (e.g., angular-animate, angular-aria, angular-bootstrap, angular-cookies, angular-cryptography, angular-highlightjs, angular-idle-service, angular-material) including metadata (bower, package.json), source code, documentation, licenses, and configuration files to support front-end functionalities.

Sequence Diagram(s)

sequenceDiagram
    participant U as User
    participant UC as UserController
    participant AS as AggregateKilkariReportsServiceImpl
    participant DAO as KilkariUsageMotherDao/ChildDao
    U->>UC: Request "usageMother" or "usageChild" report
    UC->>AS: Invoke respective report method with reportRequest, currentUser
    AS->>DAO: Query Kilkari usage data (mother/child)
    DAO-->>AS: Return usage data
    AS-->>UC: Compile and return the report
    UC-->>U: Deliver report response
Loading

Possibly related PRs

  • Add columns agg beneficiary report #122: Introduces similar enhancements for tracking mother and child subscriptions in Aggregate Beneficiary Reports, aligning data structures and logic with the changes in this PR.

Suggested reviewers

  • dinesh-beehyv
  • Kantas2601
  • atishbeehyv123

Poem

I'm a bunny coding under starlit skies,
Hopping through workflows with curious eyes.
New reports for mothers and children abound,
DAO and enums perfectly sound.
With a twitch of my tail and a joyful leap,
I celebrate these changes—hop, skip, and peep!

✨ Finishing Touches
  • 📝 Generate Docstrings (Beta)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 33

🔭 Outside diff range comments (5)
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/AggregateCumulativeBeneficiaryDaoImpl.java (1)

78-82: ⚠️ Potential issue

Fix incorrect parameter name in Block query.

The query for Block level data uses :stateId in the WHERE clause but binds the parameter as :blockId.

Apply this fix:

-            Query query = getSession().createSQLQuery("select count(DISTINCT bcm.pregnancy_id) from beneficiary_call_measure bcm left join pregnancy p on bcm.pregnancy_id = p.id where p.healthBlock_id = :stateId and bcm.modificationDate < :Date and bcm.call_source = 'OBD'")
+            Query query = getSession().createSQLQuery("select count(DISTINCT bcm.pregnancy_id) from beneficiary_call_measure bcm left join pregnancy p on bcm.pregnancy_id = p.id where p.healthBlock_id = :blockId and bcm.modificationDate < :Date and bcm.call_source = 'OBD'")
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/UserManualMobileAcademyAgg.java (2)

62-62: 🛠️ Refactor suggestion

Remove hardcoded URLs from the content.

The URL "http://192.168.200.13:8080/" is hardcoded in multiple locations. This makes the content environment-specific and difficult to maintain.

Consider:

  1. Moving the URL to a configuration file
  2. Using a template variable that can be replaced at runtime
  3. Using relative URLs instead of absolute URLs

Example implementation:

-                        <p>1) The users can login into the system using the URL: <a href=\"http://192.168.200.13:8080/\">http://192.168.200.13:8080/</a>.\n" +
+                        <p>1) The users can login into the system using the URL: <a href=\"${baseUrl}\">${baseUrl}</a>.\n" +

Also applies to: 275-275, 332-332, 412-412, 489-489, 546-546, 626-626, 702-702, 759-759, 839-839


4-879: 🛠️ Refactor suggestion

Improve code maintainability by restructuring the content.

The current implementation has several maintainability issues:

  1. Long string literals make the code difficult to read and maintain
  2. Duplicate content for different user roles increases the risk of inconsistencies
  3. HTML content is mixed with Java code

Consider these improvements:

  1. Move the HTML content to separate template files
  2. Use a templating engine to handle dynamic content
  3. Create reusable components for common sections
  4. Use a resource bundle for text content

Example implementation:

public class UserManualMobileAcademyAgg {
    private static final String TEMPLATE_PATH = "/templates/user-manual/";
    
    public static String getPageContent(String role) {
        String template = loadTemplate(TEMPLATE_PATH + "mobile-academy-agg.html");
        Map<String, Object> context = new HashMap<>();
        context.put("role", role);
        context.put("baseUrl", getConfiguredBaseUrl());
        return renderTemplate(template, context);
    }
    
    private static String loadTemplate(String path) {
        // Load template file from resources
    }
    
    private static String renderTemplate(String template, Map<String, Object> context) {
        // Use a template engine to render the content
    }
}
NMSReportingSuite/src/main/resources/sms.properties (2)

5-5: ⚠️ Potential issue

Verify the authentication key security.

The authentication key is hardcoded in the properties file. This could pose a security risk if the repository is public or widely accessible.

Consider:

  1. Moving sensitive credentials to a secure configuration management system
  2. Using environment variables
  3. Implementing a secure key rotation mechanism

47-48: ⚠️ Potential issue

Verify the file path and notification URL configuration.

The configuration uses hardcoded paths and localhost URLs which may not be suitable for production:

  • /usr/local/SmsTargetFiles
  • http://localhost:8080/NMSReportingSuite/nms/mail/notify-dummy

Consider:

  1. Making these paths configurable per environment
  2. Using relative paths where possible
  3. Implementing proper URL configuration for different environments
🧹 Nitpick comments (75)
app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.min.css (1)

1-6: Consider using package managers instead of committing vendor files.

Third-party library files should not be committed to version control. Instead:

  1. Use package managers (npm/bower) to manage dependencies
  2. Add the library to your package.json/bower.json
  3. Add bower_components/ to .gitignore

Example bower.json configuration:

{
  "dependencies": {
    "angular-material": "1.1.9"
  }
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)


[error] 6-6: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-cookies/README.md (2)

7-48: Consider adding package lockfile recommendations.

The installation instructions are clear and accurate. Consider adding a note about using package lockfiles (package-lock.json for npm and bower.json for bower) to ensure dependency version consistency and security across installations.


59-59: Fix markdown linting issue with bare URL.

The bare URL should be properly formatted as a markdown link.

-Copyright (c) 2010-2012 Google, Inc. http://angularjs.org
+Copyright (c) 2010-2012 Google, Inc. [http://angularjs.org](http://angularjs.org)
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

59-59: Bare URL used
null

(MD034, no-bare-urls)

app/bower_components/angular-aria/README.md (3)

3-4: Format the bare URL in markdown style.

The URL to the main AngularJS repository is already properly formatted, but for consistency with markdown best practices, consider using markdown link syntax for all URLs in the document.


40-43: Consider enhancing the documentation section.

While the link to official documentation is helpful, consider adding:

  • Version compatibility information
  • Browser support details
  • Quick start examples or common use cases

49-49: Format the URL in the copyright line.

The URL in the copyright line should be formatted using markdown link syntax for consistency.

-Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
+Copyright (c) 2010-2015 Google, Inc. [http://angularjs.org](http://angularjs.org)
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

49-49: Bare URL used
null

(MD034, no-bare-urls)

app/bower_components/angular-material/README.md (5)

1-3: Improve grammar in the introduction.

Consider rephrasing to avoid using 'installs' as a noun.

-This repository is used for publishing the AngularJS Material v1.x library and localized installs
+This repository is used for publishing the AngularJS Material v1.x library and for local installation
 using `npm`. The component source-code for this library is in the
 [AngularJS Material repository](https://github.com/angular/material).
🧰 Tools
🪛 LanguageTool

[grammar] ~1-~1: The word ‘installs’ is not a noun.
Context: ...rJS Material v1.x library and localized installs using npm. The component source-code ...

(A_INSTALL)


150-152: Add missing comma after 'Instead'.

For better readability and correct grammar.

-Instead simply reference the CDN urls to easily use those remote library files. 
+Instead, simply reference the CDN urls to easily use those remote library files. 
🧰 Tools
🪛 LanguageTool

[uncategorized] ~150-~150: A comma may be missing after the conjunctive/linking adverb ‘Instead’.
Context: ...local copies of the distribution files. Instead simply reference the CDN urls to easily...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)


156-168: Consider using version placeholders in CDN examples.

Using specific versions (1.1.9, 1.7.2) in examples may lead to confusion when these versions become outdated. Consider using placeholders or adding a note about checking for the latest compatible versions.

-    <!-- Angular Material CSS now available via Google CDN; version 1.1.9 used here -->
-    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/1.1.9/angular-material.min.css">
+    <!-- Angular Material CSS now available via Google CDN; replace {version} with desired version -->
+    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/angular_material/{version}/angular-material.min.css">

     <!-- Angular Material Dependencies -->
-    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular.min.js"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular-animate.min.js"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular-aria.min.js"></script>
-    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular-messages.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/{version}/angular.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/{version}/angular-animate.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/{version}/angular-aria.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/{version}/angular-messages.min.js"></script>

181-184: Fix markdown list indentation.

The unordered list items should have 2 spaces indentation according to markdown standards.

-*  Angular Mocks
-    * **angular-mocks.js** from `/node_modules/angular-mocks/angular-mocks.js`
-*  Angular Material Mocks
-    * **angular-material-mocks.js** from `/node_modules/angular-material/angular-material-mocks.js`
+* Angular Mocks
+  * **angular-mocks.js** from `/node_modules/angular-mocks/angular-mocks.js`
+* Angular Material Mocks
+  * **angular-material-mocks.js** from `/node_modules/angular-material/angular-material-mocks.js`
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

182-182: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


184-184: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


24-26: Make version compatibility warnings more prominent.

Consider using a more visible warning format for the version compatibility notes to ensure users don't miss this crucial information.

-**Please note**: AngularJS Material requires **AngularJS 1.4.x** to **AngularJS 1.7.x**.
-
-**Please note**: AngularJS Material does not support AngularJS 1.7.1. 
+> ⚠️ **Version Compatibility**
+> - AngularJS Material requires **AngularJS 1.4.x** to **AngularJS 1.7.x**
+> - AngularJS Material does not support AngularJS 1.7.1
app/bower_components/angular-material/modules/closure/button/button.min.css (1)

1-6: Avoid committing third-party library files directly.

This is a minified file from the AngularJS Material library. Instead of committing it directly:

  1. Use Bower's package management to handle dependencies
  2. Add bower_components to .gitignore
  3. Document the dependency in bower.json
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/AggregateCumulativeBeneficiaryDaoImpl.java (3)

39-41: Improve code readability by using meaningful variable names and constants.

The current implementation uses the same variable 'a' for multiple parameters and a magic number '0', making the code harder to understand.

Consider this improvement:

-            Long a = (long)0;
-            AggregateCumulativeBeneficiary aggregateCumulativeBeneficiary = new AggregateCumulativeBeneficiary(0,locationType,locationId,toDate,a,a,a,a,a,a,a,a,a,"",a);
+            final Long DEFAULT_COUNT = 0L;
+            final int DEFAULT_ID = 0;
+            AggregateCumulativeBeneficiary aggregateCumulativeBeneficiary = new AggregateCumulativeBeneficiary(
+                DEFAULT_ID,
+                locationType,
+                locationId,
+                toDate,
+                DEFAULT_COUNT, // joinedSubscription
+                DEFAULT_COUNT, // childSubscriptionJoined
+                DEFAULT_COUNT, // motherSubscriptionJoined
+                DEFAULT_COUNT, // childCompletion
+                DEFAULT_COUNT, // motherCompletion
+                DEFAULT_COUNT, // lowListenership
+                DEFAULT_COUNT, // selfDeactivated
+                DEFAULT_COUNT, // notAnswering
+                DEFAULT_COUNT, // systemDeactivation
+                "", // periodType
+                DEFAULT_COUNT  // subscriptionsRejected
+            );

44-53: Reduce code duplication in null checks.

The code has multiple similar null checks that could be refactored into a utility method for better maintainability.

Consider this improvement:

+    private Long getValueOrDefault(Long value) {
+        return value == null ? 0L : value;
+    }
+
     @Override
     public AggregateCumulativeBeneficiary getCumulativeBeneficiary(Long locationId, String locationType, Date toDate,String periodType) {
         // ... existing code ...
-        aggregateCumulativeBeneficiary.setJoinedSubscription(aggregateCumulativeBeneficiary.getJoinedSubscription() == null ? 0 : aggregateCumulativeBeneficiary.getJoinedSubscription());
-        aggregateCumulativeBeneficiary.setChildSubscriptionJoined(aggregateCumulativeBeneficiary.getChildSubscriptionJoined() == null ? 0 : aggregateCumulativeBeneficiary.getChildSubscriptionJoined());
-        aggregateCumulativeBeneficiary.setMotherSubscriptionJoined(aggregateCumulativeBeneficiary.getMotherSubscriptionJoined() == null ? 0 : aggregateCumulativeBeneficiary.getMotherSubscriptionJoined());
-        aggregateCumulativeBeneficiary.setChildCompletion(aggregateCumulativeBeneficiary.getChildCompletion() == null ? 0 : aggregateCumulativeBeneficiary.getChildCompletion());
-        aggregateCumulativeBeneficiary.setMotherCompletion(aggregateCumulativeBeneficiary.getMotherCompletion() == null ? 0 : aggregateCumulativeBeneficiary.getMotherCompletion());
-        aggregateCumulativeBeneficiary.setLowListenership(aggregateCumulativeBeneficiary.getLowListenership() == null ? 0 : aggregateCumulativeBeneficiary.getLowListenership());
-        aggregateCumulativeBeneficiary.setSelfDeactivated(aggregateCumulativeBeneficiary.getSelfDeactivated() == null ? 0 : aggregateCumulativeBeneficiary.getSelfDeactivated());
-        aggregateCumulativeBeneficiary.setNotAnswering(aggregateCumulativeBeneficiary.getNotAnswering() == null ? 0 : aggregateCumulativeBeneficiary.getNotAnswering());
-        aggregateCumulativeBeneficiary.setSystemDeactivation(aggregateCumulativeBeneficiary.getSystemDeactivation() == null ? 0 : aggregateCumulativeBeneficiary.getSystemDeactivation());
-        aggregateCumulativeBeneficiary.setSubscriptionsRejected(aggregateCumulativeBeneficiary.getSubscriptionsRejected() == null ? 0 : aggregateCumulativeBeneficiary.getSubscriptionsRejected());
+        aggregateCumulativeBeneficiary.setJoinedSubscription(getValueOrDefault(aggregateCumulativeBeneficiary.getJoinedSubscription()));
+        aggregateCumulativeBeneficiary.setChildSubscriptionJoined(getValueOrDefault(aggregateCumulativeBeneficiary.getChildSubscriptionJoined()));
+        aggregateCumulativeBeneficiary.setMotherSubscriptionJoined(getValueOrDefault(aggregateCumulativeBeneficiary.getMotherSubscriptionJoined()));
+        aggregateCumulativeBeneficiary.setChildCompletion(getValueOrDefault(aggregateCumulativeBeneficiary.getChildCompletion()));
+        aggregateCumulativeBeneficiary.setMotherCompletion(getValueOrDefault(aggregateCumulativeBeneficiary.getMotherCompletion()));
+        aggregateCumulativeBeneficiary.setLowListenership(getValueOrDefault(aggregateCumulativeBeneficiary.getLowListenership()));
+        aggregateCumulativeBeneficiary.setSelfDeactivated(getValueOrDefault(aggregateCumulativeBeneficiary.getSelfDeactivated()));
+        aggregateCumulativeBeneficiary.setNotAnswering(getValueOrDefault(aggregateCumulativeBeneficiary.getNotAnswering()));
+        aggregateCumulativeBeneficiary.setSystemDeactivation(getValueOrDefault(aggregateCumulativeBeneficiary.getSystemDeactivation()));
+        aggregateCumulativeBeneficiary.setSubscriptionsRejected(getValueOrDefault(aggregateCumulativeBeneficiary.getSubscriptionsRejected()));

156-195: Improve SQL query construction for IN clauses.

The current implementation uses string concatenation for IN clauses, which could be improved using Hibernate's built-in features.

Consider using Hibernate's setParameterList instead:

-        StringBuilder locationIdPlaceholders = new StringBuilder();
-        for (int i = 0; i < locationIds.size(); i++) {
-            locationIdPlaceholders.append("?");
-            if (i < locationIds.size() - 1) {
-                locationIdPlaceholders.append(",");
-            }
-        }
         String sql = "SELECT location_id, SUM(joined_subscription) " +
                 "FROM agg_aggregate_beneficiaries " +
-                "WHERE location_id IN (" + locationIdPlaceholders.toString() + ") " +
+                "WHERE location_id IN (:locationIds) " +
                 "AND location_type = :locationType " +
                 "AND period_type = :periodType " +
                 "AND date BETWEEN :fromDate AND :toDate " +
                 "GROUP BY location_id ";

         SQLQuery query = getSession().createSQLQuery(sql);
-        for (int i = 0; i < locationIds.size(); i++) {
-            query.setParameter(i, locationIds.get(i));
-        }
+        query.setParameterList("locationIds", locationIds);
app/bower_components/angular-material/layouts/angular-material.layouts.scss (1)

918-934: Remove duplicate responsive attributes documentation.

The same documentation about responsive attributes appears twice in the file. Consider keeping it in one location to improve maintainability.

Remove one instance of the documentation to avoid duplication.

Also applies to: 480-490

app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css (3)

24-30: Consider using relative units for button positioning.

The clear button uses absolute positioning with fixed pixel values, which might not scale well with different font sizes or viewport sizes.

-      top: 20px;
-      width: 30px;
-      height: 30px;
+      top: 50%;
+      transform: translateY(-50%);
+      width: 2rem;
+      height: 2rem;

56-64: Improve progress linear component positioning.

The progress linear component uses negative positioning and fixed pixel values, which could cause layout issues. Consider using a more robust positioning approach.

-      bottom: -2px;
+      bottom: 0;
+      transform: translateY(100%);

164-194: Consider using modern CSS features.

The implementation is solid, but could be enhanced with modern CSS features:

  • Use gap property for spacing instead of margins
  • Consider using CSS custom properties for values like colors and dimensions
  • Use overflow-wrap: anywhere for better text handling
 .md-virtual-repeat-container.md-autocomplete-suggestions-container {
   position: absolute;
-  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
+  box-shadow: var(--md-shadow-elevation-2);
   z-index: 100;
   height: 100%;
 }

 .md-autocomplete-suggestions {
   margin: 0;
   list-style: none;
   padding: 0;
+  display: flex;
+  flex-direction: column;
+  gap: 0.25rem;
 }
app/bower_components/angular-highlightjs/README.md (1)

66-66: Improve sentence clarity in documentation.

The sentence structure could be improved for better readability.

-The directive automatically escapes its content HTML entities by default. Can be turned off with explicitly configuration `escape="{expression evaled to false}"` or `no-escape`, and **they're only applicable for "just-`hljs`" usage**.
+The directive automatically escapes HTML entities in its content by default. This behavior can be turned off by setting `escape="{expression evaled to false}"` or using the `no-escape` attribute. These options are only applicable when using the standalone `hljs` directive.
🧰 Tools
🪛 LanguageTool

[style] ~66-~66: To form a complete sentence, be sure to include a subject.
Context: ...s its content HTML entities by default. Can be turned off with explicitly configura...

(MISSING_IT_THERE)

app/bower_components/angular-cryptography/README.md (3)

4-4: Fix grammar in module description.

Change "that integrate" to "that integrates" for correct subject-verb agreement.

-AngularJS Module that integrate cryptography functionality offers from the [crypto-js](https://code.google.com/p/crypto-js/) project.
+AngularJS Module that integrates cryptography functionality offered by the [crypto-js](https://code.google.com/p/crypto-js/) project.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~4-~4: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...================ AngularJS Module that integrate cryptography functionality offers from ...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


15-16: Clarify bower installation paths.

The square brackets in the path [bower_components/] might confuse users. Consider removing them or clarifying that this is a placeholder.

-<script type='text/javascript' src="[bower_components/]cryptojslib/rollups/aes.js"></script>
-<script type='text/javascript' src="[bower_components/]angular-cryptography/mdo-angular-cryptography.js"></script>
+<script type='text/javascript' src="bower_components/cryptojslib/rollups/aes.js"></script>
+<script type='text/javascript' src="bower_components/angular-cryptography/mdo-angular-cryptography.js"></script>

59-61: Add security warning about key management.

The example shows using different keys for encryption and decryption. Consider adding a warning about proper key management and the importance of using the same key for encryption and decryption.

 var encrypted = $crypto.encrypt('some plain text data', 'some custom key');
-var decrypted = $crypto.decrypt(encrypted, 'some other custom key');
+var decrypted = $crypto.decrypt(encrypted, 'some custom key'); // Use the same key for decryption
+// Note: Ensure proper key management and storage in production environments
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

59-59: Hard tabs
Column: 1

(MD010, no-hard-tabs)


60-60: Hard tabs
Column: 1

(MD010, no-hard-tabs)

app/bower_components/angular-material/modules/closure/autocomplete/autocomplete-default-theme.css (1)

7-17: LGTM! Theme implementation follows best practices.

The autocomplete theme implementation correctly uses Angular Material's theming system with proper color variables and state handling.

Consider creating a custom theme file to override these default styles if you need to match your application's design system, rather than modifying the library files directly.

Also applies to: 18-23

app/bower_components/angular-material/modules/closure/button/button-default-theme.css (1)

7-114: LGTM! Comprehensive button theming implementation.

The button theme implementation provides thorough coverage of all button types and states, with proper color contrast handling for accessibility.

Consider creating a custom theme file to override these default styles if you need to match your application's design system, rather than modifying the library files directly.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AshaTargetFileServiceImpl.java (2)

137-140: Remove commented code instead of leaving it in place.

The commented code related to OTP message handling should be removed rather than left in the codebase. Commented code can lead to confusion and maintenance issues.

Apply this diff to clean up the code:

-//                            String otpMessage = formatCertificateOTPMessage(beneficiary, SMS_CONTENT_ASHACERTIFICATE_OTP_PREFIX, languageCode);
                             templateId = formatTemplateId(languageCode);
                            writeMessage(writer, msisdn, stateName, productName, templateId, messageText);
-//                            writeMessage(writer, msisdn, stateName, productName, SMS_CONTENT_CERTIFICATETemplateId_OTP_PREFIX, otpMessage);

284-321: Consider improving error logging in getFailureDatesForLastNDays.

The method contains multiple LOGGER.error statements that seem to be used for debugging rather than actual error conditions. This could make it harder to identify real errors in production.

Apply this diff to improve logging:

-        LOGGER.error("inside getfailure date method");
+        LOGGER.debug("Fetching failure dates for the last N days");
         List<Date> failureDates = new ArrayList<>();
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

         for (int i = 1; i < 3; i++) {
             Date dateToCheck = DateTime.now().minusDays(i).toDate();

             boolean hasFailure = false;
             try {
-                LOGGER.error("calling hasfailure");
+                LOGGER.debug("Checking for failures on date: {}", dateToCheck);
                 hasFailure = targetFileAuditDao.hasFailureOnDate(dateToCheck);
-                LOGGER.error("this is response from hasfailure method: {},{}",hasFailure,dateToCheck);
+                LOGGER.debug("Failure check result for {}: {}", dateToCheck, hasFailure);
app/bower_components/angular-idle-service/src/KeepAlive/keepAlive.ts (4)

1-1: Use namespace instead of module.
Using the module keyword is deprecated in modern TypeScript and can be confusing due to ES modules. Switching to namespace is a more up-to-date best practice.

- module IdlePackage.Modules {
+ namespace IdlePackage.Modules {
🧰 Tools
🪛 Biome (1.9.4)

[error] 1-1: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)


22-23: Correct the spelling in the doc comment.
There's a small typo: "requesct" should be "request" for clarity and consistency.

/**
 * Sets the http configurations for the keepalive ping.
- * @params url A URL or a Angular HTTP requesct configuration object.
+ * @params url A URL or an Angular HTTP request configuration object.
 */

48-53: Rename setInterval to avoid confusion.
Naming a function setInterval might overshadow the native JavaScript function. Consider renaming it to something more descriptive like setPingInterval or configureInterval.

- setInterval: this.setInterval.bind(this),
+ setPingInterval: this.setInterval.bind(this),

80-82: Replace deprecated .success() and .error() methods.
In newer versions of AngularJS, .success() and .error() are deprecated. Consider using .then() and .catch() or the success/error properties on the promise directly.

- this.$http(this.options.http)
-   .success(this.handleKeepaliveResponse.bind(this))
-   .error(this.handleKeepaliveResponse.bind(this));
+ this.$http(this.options.http)
+   .then(
+     response => this.handleKeepaliveResponse(response.data, response.status),
+     error => this.handleKeepaliveResponse(error.data, error.status)
+   );
app/bower_components/angular-idle-service/src/Idle/idle.ts (2)

1-1: Use namespace instead of module.
As with the KeepAlive file, replacing module with namespace ensures modern TypeScript compatibility and avoids confusion with ECMAScript modules.

- module IdlePackage.Modules {
+ namespace IdlePackage.Modules {
🧰 Tools
🪛 Biome (1.9.4)

[error] 1-1: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)


220-221: Use optional chaining for cleaner null checks.
This can simplify your logic and improve readability.

- return obj && obj.time ? new Date(obj.time) : null;
+ return obj?.time ? new Date(obj.time) : null;
🧰 Tools
🪛 Biome (1.9.4)

[error] 221-221: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

app/bower_components/angular-idle-service/src/app.ts (1)

4-4: Use namespace instead of module.
Following modern TypeScript conventions helps reduce confusion with ES module systems.

- module IdlePackage {
+ namespace IdlePackage {
🧰 Tools
🪛 Biome (1.9.4)

[error] 3-4: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)

app/bower_components/angular-idle-service/src/IdleStorage/idleStorage.ts (2)

22-24: Define explicit return type instead of using 'Object'.

Using 'Object' as a return type is too broad and reduces type safety. Define an explicit interface for the stored data.

+    interface StoredData {
+        [key: string]: any;  // Define more specific types based on actual usage
+    }
+
-    get(key: string): Object {
+    get(key: string): StoredData | null {
         return angular.fromJson(this.storage.getItem(`idle.${key}`));
     }
🧰 Tools
🪛 Biome (1.9.4)

[error] 22-22: Don't use 'Object' as a type.

Prefer explicitly define the object shape. This type means "any non-nullable value", which is slightly better than 'unknown', but it's still a broad type.

(lint/complexity/noBannedTypes)


31-75: Improve type safety in AlternativeStorage implementation.

The storage property uses 'any' type which reduces type safety. Consider using a more specific type.

     class AlternativeStorage implements Storage {
         [index: number]: string;
-        private storage: any;
+        private storage: { [key: string]: string | undefined } = {};
         public length: number;

         constructor() {
+            this.length = 0;
         }

         setItem(key: string, value: string): void {
             this.storage[key] = value;
+            this.length = Object.keys(this.storage).length;
         }

         removeItem(key: string): void {
             this.storage[key] = undefined;
+            this.length = Object.keys(this.storage).length;
         }
app/bower_components/angular-aria/angular-aria.js (2)

6-6: Remove redundant 'use strict' directive.

Modern JavaScript modules by default enforce strict mode, making the 'use strict'; directive unnecessary in this context.

Applying a brief diff for clarity:

- (function(window, angular) {'use strict';
+ (function(window, angular) {
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Redundant use strict directive.

The entire contents of JavaScript modules are automatically in strict mode, with no statement needed to initiate it.
Safe fix: Remove the redundant use strict directive.

(lint/suspicious/noRedundantUseStrict)


146-146: Avoid invoking hasOwnProperty on the instance object.

It's recommended to rely on Object.hasOwn() to check for an own property. This prevents subtle issues if an object has overridden its prototype.

Example fix:

- if (attr.hasOwnProperty(ARIA_DISABLE_ATTR)) return;
+ if (Object.hasOwn(attr, ARIA_DISABLE_ATTR)) return;

Also applies to: 267-267, 310-313, 337-337, 365-365, 377-377, 414-414

🧰 Tools
🪛 Biome (1.9.4)

[error] 146-148: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)

app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.js (4)

332-332: Use Object.hasOwn() instead of hasOwnProperty.

Similar to the ARIA file, avoid accessing hasOwnProperty from the instance object.

- if (elements.hasOwnProperty(key)) obj[key] = angular.element(elements[key]);
+ if (Object.hasOwn(elements, key)) obj[key] = angular.element(elements[key]);
🧰 Tools
🪛 Biome (1.9.4)

[error] 332-332: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


749-749: Simplify needless boolean-ternary expression.

You can return a boolean directly by converting the array length into a boolean with !!.

- return ctrl.matches.length ? true : false;
+ return !!ctrl.matches.length;
🧰 Tools
🪛 Biome (1.9.4)

[error] 749-749: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)


757-757: Refactor to remove boolean literals in a ternary.

You can directly return a boolean from ctrl.scope.selectedItem.

- return ctrl.scope.selectedItem ? true : false;
+ return !!ctrl.scope.selectedItem;
🧰 Tools
🪛 Biome (1.9.4)

[error] 757-757: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)


1684-1684: Leverage optional chaining if supported.

Using optional chaining can simplify the null-check logic here:

- return term && term.toString().replace(/[\\^$*+?.()|{}[\]]/g, '\\$&');
+ return term?.toString().replace(/[\\^$*+?.()|{}[\]]/g, '\\$&');
🧰 Tools
🪛 Biome (1.9.4)

[error] 1684-1684: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/KilkariUsageChildDao.java (1)

10-14: Add Javadoc for better clarity.

Consider adding Javadoc for method parameters and return value in getUsage(...), improving maintainability and readability. Also verify unit test coverage for this new interface.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/KilkariUsageMotherDao.java (1)

7-12: Enhance method documentation.

Add detailed Javadoc for the getUsage method describing:

  • Purpose of each parameter
  • Return value description
  • Any constraints or validation rules
 public interface KilkariUsageMotherDao {
+    /**
+     * Retrieves Kilkari usage data for mothers based on location and time criteria.
+     * @param locationId The ID of the location to filter data
+     * @param locationType The type of location (e.g., state, district)
+     * @param toDate The end date for the usage data
+     * @param periodType The type of period for aggregation
+     * @return KilkariUsageMother object containing usage statistics
+     */
     KilkariUsageMother getUsage(Integer locationId, String locationType, Date toDate, String periodType);
 }
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/KilkariUsageChildDaoImpl.java (6)

32-36: Replace magic numbers with constants.

The constructor call uses magic numbers and could be improved for readability.

+    private static final Long DEFAULT_COUNT = 0L;
+    private static final String DEFAULT_EMPTY_STRING = "";
+    private static final int DEFAULT_ID = 0;
 
     if(result.isEmpty()){
-        Long a = (long)0;
-        KilkariUsageChild kilkariUsageChild = new KilkariUsageChild(0,locationType,locationId.longValue(),toDate,a,a,a,a,a,a,a,"");
+        KilkariUsageChild kilkariUsageChild = new KilkariUsageChild(
+            DEFAULT_ID, locationType, locationId.longValue(), toDate,
+            DEFAULT_COUNT, DEFAULT_COUNT, DEFAULT_COUNT, DEFAULT_COUNT,
+            DEFAULT_COUNT, DEFAULT_COUNT, DEFAULT_COUNT, DEFAULT_EMPTY_STRING);
         return kilkariUsageChild;

33-34: Improve variable naming and magic numbers.

The variable a is not descriptive. Consider using a more meaningful name like defaultValue. Also, consider extracting the call percentage ranges (1-25, 25-50, etc.) as constants.

-            Long a = (long)0;
-            KilkariUsageChild kilkariUsageChild = new KilkariUsageChild(0,locationType,locationId.longValue(),toDate,a,a,a,a,a,a,a,"");
+            Long defaultValue = 0L;
+            KilkariUsageChild kilkariUsageChild = new KilkariUsageChild(
+                0,
+                locationType,
+                locationId.longValue(),
+                toDate,
+                defaultValue,
+                defaultValue,
+                defaultValue,
+                defaultValue,
+                defaultValue,
+                defaultValue,
+                defaultValue,
+                ""
+            );

38-44: Extract repeated null checks into a utility method.

The repeated pattern of null checks could be extracted into a utility method to improve code maintainability.

+    private Long getValueOrDefault(Long value) {
+        return value == null ? 0L : value;
+    }
+
     // In getUsage method:
-        kilkariUsageChild.setCalls_1_25(kilkariUsageChild.getCalls_1_25() == null ? 0 : kilkariUsageChild.getCalls_1_25());
-        kilkariUsageChild.setCalls_25_50(kilkariUsageChild.getCalls_25_50() == null ? 0 : kilkariUsageChild.getCalls_25_50());
-        kilkariUsageChild.setCalls_50_75(kilkariUsageChild.getCalls_50_75() == null ? 0 : kilkariUsageChild.getCalls_50_75());
-        kilkariUsageChild.setCalls_75_100(kilkariUsageChild.getCalls_75_100() == null ? 0 : kilkariUsageChild.getCalls_75_100());
-        kilkariUsageChild.setCalledInbox(kilkariUsageChild.getCalledInbox() == null ? 0 : kilkariUsageChild.getCalledInbox());
-        kilkariUsageChild.setAnsweredAtleastOneCall(kilkariUsageChild.getAnsweredAtleastOneCall() == null ? 0 : kilkariUsageChild.getAnsweredAtleastOneCall());
-        kilkariUsageChild.setTotalBeneficiariesCalled(kilkariUsageChild.getTotalBeneficiariesCalled() == null ? 0 : kilkariUsageChild.getTotalBeneficiariesCalled());
+        kilkariUsageChild.setCalls_1_25(getValueOrDefault(kilkariUsageChild.getCalls_1_25()));
+        kilkariUsageChild.setCalls_25_50(getValueOrDefault(kilkariUsageChild.getCalls_25_50()));
+        kilkariUsageChild.setCalls_50_75(getValueOrDefault(kilkariUsageChild.getCalls_50_75()));
+        kilkariUsageChild.setCalls_75_100(getValueOrDefault(kilkariUsageChild.getCalls_75_100()));
+        kilkariUsageChild.setCalledInbox(getValueOrDefault(kilkariUsageChild.getCalledInbox()));
+        kilkariUsageChild.setAnsweredAtleastOneCall(getValueOrDefault(kilkariUsageChild.getAnsweredAtleastOneCall()));
+        kilkariUsageChild.setTotalBeneficiariesCalled(getValueOrDefault(kilkariUsageChild.getTotalBeneficiariesCalled()));

32-36: Improve variable naming and magic numbers.

The variable name 'a' is not descriptive, and the magic number '0' should be defined as a constant.

-            Long a = (long)0;
-            KilkariUsageChild kilkariUsageChild = new KilkariUsageChild(0,locationType,locationId.longValue(),toDate,a,a,a,a,a,a,a,"");
+            private static final long DEFAULT_COUNT = 0L;
+            private static final int DEFAULT_ID = 0;
+            KilkariUsageChild kilkariUsageChild = new KilkariUsageChild(
+                DEFAULT_ID, locationType, locationId.longValue(), toDate,
+                DEFAULT_COUNT, DEFAULT_COUNT, DEFAULT_COUNT, DEFAULT_COUNT,
+                DEFAULT_COUNT, DEFAULT_COUNT, DEFAULT_COUNT, "");

31-46: Consider using Optional to handle empty results.

The current implementation using list().get(0) could be improved using Optional for better null handling and to follow modern Java practices.

-        List<KilkariUsageChild> result = criteria.list();
-        if(result.isEmpty()){
-            Long a = (long)0;
-            KilkariUsageChild kilkariUsageChild = new KilkariUsageChild(0,locationType,locationId.longValue(),toDate,a,a,a,a,a,a,a,"");
-            return kilkariUsageChild;
-        }
-        KilkariUsageChild kilkariUsageChild =  result.get(0);
+        return Optional.ofNullable(criteria.uniqueResult())
+            .map(result -> {
+                KilkariUsageChild kilkariUsageChild = (KilkariUsageChild) result;
+                initializeNullMetrics(kilkariUsageChild);
+                return kilkariUsageChild;
+            })
+            .orElseGet(() -> createDefaultUsageChild(locationId, locationType, toDate));

37-44: Extract null handling logic to a separate method.

The repeated null checks could be extracted to a separate method for better maintainability.

+    private void initializeNullMetrics(KilkariUsageChild usage) {
+        usage.setCalls_1_25(usage.getCalls_1_25() == null ? 0 : usage.getCalls_1_25());
+        usage.setCalls_25_50(usage.getCalls_25_50() == null ? 0 : usage.getCalls_25_50());
+        usage.setCalls_50_75(usage.getCalls_50_75() == null ? 0 : usage.getCalls_50_75());
+        usage.setCalls_75_100(usage.getCalls_75_100() == null ? 0 : usage.getCalls_75_100());
+        usage.setCalledInbox(usage.getCalledInbox() == null ? 0 : usage.getCalledInbox());
+        usage.setAnsweredAtleastOneCall(usage.getAnsweredAtleastOneCall() == null ? 0 : usage.getAnsweredAtleastOneCall());
+        usage.setTotalBeneficiariesCalled(usage.getTotalBeneficiariesCalled() == null ? 0 : usage.getTotalBeneficiariesCalled());
+    }
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/KilkariUsageMotherDaoImpl.java (1)

18-45: Consider creating a common base class for usage DAOs.

The implementation is nearly identical to KilkariUsageChildDaoImpl. Consider extracting common functionality to a base class to reduce code duplication.

Create an abstract base class:

public abstract class AbstractKilkariUsageDao<T> extends AbstractDao<Integer, T> {
    protected static final Long DEFAULT_COUNT = 0L;
    protected static final String DEFAULT_EMPTY_STRING = "";
    protected static final int DEFAULT_ID = 0;

    protected Long getValueOrDefault(Long value) {
        return value == null ? 0L : value;
    }

    protected Criteria createUsageCriteria(Integer locationId, String locationType, 
                                         Date toDate, String periodType) {
        Criteria criteria = createEntityCriteria().addOrder(Order.asc("locationId"));
        criteria.add(Restrictions.and(
                Restrictions.eq("locationId", locationId.longValue()),
                Restrictions.eq("locationType", locationType),
                Restrictions.eq("periodType", periodType),
                Restrictions.eq("date", toDate)
        ));
        return criteria;
    }
}

Then simplify both implementations by extending this base class.

app/bower_components/angular-material/modules/closure/backdrop/backdrop.js (2)

30-31: Consider using a constant for the error message.

The error message string should be defined as a constant at the module level for better maintainability and reusability.

+  var STATIC_PARENT_ERROR = '<md-backdrop> may not work properly in a scrolled, static-positioned parent container.';
-  var ERROR_CSS_POSITION = '<md-backdrop> may not work properly in a scrolled, static-positioned parent container.';

51-54: Consider using requestAnimationFrame directly for resize handler.

The resize handler is already debounced, but for better performance, consider using requestAnimationFrame directly instead of $$rAF since it's a resize event.

-          var resizeHandler = $mdUtil.debounce(function(){
+          var resizeHandler = $mdUtil.debounce(function() {
+            window.requestAnimationFrame(function() {
               bodyStyles = $window.getComputedStyle($document[0].body);
               resize();
+            });
           }, 60, null, false);
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/entity/KilkariAggregateBeneficiariesDto.java (1)

22-23: Add field documentation.

The newly added fields lack documentation explaining their purpose and usage. Consider adding Javadoc comments.

+    /**
+     * Number of mother subscriptions that joined during the reporting period.
+     */
     private Long motherSubscriptionJoined;
+    /**
+     * Number of child subscriptions that joined during the reporting period.
+     */
     private Long childSubscriptionJoined;
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/model/KilkariUsageMother.java (1)

51-52: Remove consecutive empty lines.

There are two consecutive empty lines between fields and constructor.

     private String periodType;

-

     public KilkariUsageMother(Integer id, String locationType, Long locationId, Date date,
app/bower_components/angular-material/modules/closure/button/button.js (1)

189-189: Consider using optional chaining for safer property access.

The code can be improved by using optional chaining for safer property access in compile checks.

Apply this diff to improve the code:

-          if (compileCheck && compileCheck(scope)) {
+          if (compileCheck?.(scope)) {
-            if (compileCheck && compileCheck(scope)) {
+            if (compileCheck?.(scope)) {
-                  if (compileCheck && compileCheck(scope)) {
+                  if (compileCheck?.(scope)) {

Also applies to: 251-251, 341-341

app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.js (3)

35-37: Consider using optional chaining for destroy() call.

The destroy() method call could be safer with optional chaining to prevent potential null/undefined errors.

-      $mdBottomSheet.destroy();
+      $mdBottomSheet?.destroy();

309-309: Replace delete operator with undefined assignment.

Using the delete operator can impact performance. Consider using undefined assignment instead.

-          delete options.restoreScroll;
+          options.restoreScroll = undefined;
🧰 Tools
🪛 Biome (1.9.4)

[error] 309-309: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)


312-312: Consider using optional chaining for cleanupGestures call.

The cleanupGestures function call could be safer with optional chaining to prevent potential null/undefined errors.

-        options.cleanupGestures && options.cleanupGestures();
+        options.cleanupGestures?.();
🧰 Tools
🪛 Biome (1.9.4)

[error] 312-312: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AggregateReportsServiceImpl.java (1)

975-1012: Consider refactoring report settings to a configuration map.

The repetitive if-else blocks for setting cellWidth and tableMargin could be refactored into a configuration map for better maintainability.

+ private static final Map<String, ReportSettings> REPORT_SETTINGS = Map.of(
+   "Mobile Academy Performance Report", new ReportSettings(10f, 60, 7),
+   "Kilkari Repeat Listener Month Wise", new ReportSettings(10f, 60, 7),
+   "MA Subscriber", new ReportSettings(15f, 75, 7),
+   // ... add other settings
+ );

+ private static class ReportSettings {
+   final float cellWidth;
+   final float tableMargin;
+   final float tableFont;
+   
+   ReportSettings(float cellWidth, float tableMargin, float tableFont) {
+     this.cellWidth = cellWidth;
+     this.tableMargin = tableMargin;
+     this.tableFont = tableFont;
+   }
+ }

- if (gridData.getReportName().equalsIgnoreCase("Mobile Academy Performance Report")...) {
-   cellWidth = 10f;
-   tableMargin = 60;
-   tableFont = 7;
- } else if...

+ ReportSettings settings = REPORT_SETTINGS.getOrDefault(
+   gridData.getReportName(),
+   new ReportSettings(10f, 30, 7) // default settings
+ );
+ cellWidth = settings.cellWidth;
+ tableMargin = settings.tableMargin;
+ tableFont = settings.tableFont;
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/UserManualMobileAcademyAgg.java (1)

1-881: Consider adding input validation and error handling.

The class provides static content without any validation or error handling. This could lead to issues if the content is malformed or if resources are missing.

Consider adding:

  1. Validation for template loading
  2. Error handling for missing resources
  3. Logging for debugging purposes
  4. Content sanitization if the content is dynamically generated

Example implementation:

public class UserManualMobileAcademyAgg {
    private static final Logger logger = LoggerFactory.getLogger(UserManualMobileAcademyAgg.class);
    
    public static String getPageContent(String role) {
        try {
            validateRole(role);
            String content = loadAndRenderContent(role);
            return sanitizeContent(content);
        } catch (Exception e) {
            logger.error("Failed to load user manual content", e);
            throw new UserManualException("Failed to load user manual content", e);
        }
    }
    
    private static void validateRole(String role) {
        if (role == null || role.trim().isEmpty()) {
            throw new IllegalArgumentException("Role cannot be null or empty");
        }
        // Add more validation as needed
    }
}
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AggregateKilkariReportsServiceImpl.java (2)

1454-1710: Consider refactoring to reduce code duplication.

The mother and child usage report methods share very similar logic and structure. Consider extracting common code into helper methods to improve maintainability:

  1. Create a generic method for usage data processing
  2. Pass the appropriate DAO as a parameter
  3. Use enums for report types

Example refactor:

+ private enum UsageReportType {
+   MOTHER, CHILD
+ }

+ private List<UsageDto> getUsageReportByType(
+   ReportRequest request, 
+   UsageReportType type,
+   BaseKilkariUsageDao dao) {
+   // Common processing logic here
+ }

- public List<UsageDto> getMotherUsageReport(...) {
-   // Duplicate code
- }

+ public List<UsageDto> getMotherUsageReport(
+   ReportRequest request, 
+   User currentUser) {
+   return getUsageReportByType(
+     request, 
+     UsageReportType.MOTHER,
+     kilkariUsageMotherDao);
+ }

1638-1655: Enhance error handling and logging.

The error handling could be improved:

  1. Add more detailed error messages
  2. Use consistent logging levels
  3. Document error scenarios

Example enhancement:

+ private static final String ERR_DATA_NOT_FOUND = "No data found for location: {}";
+ private static final String ERR_INVALID_LOCATION = "Invalid location type: {}";

  beneficiariesCalled+=districtCountDto.getBeneficiariesCalled();
  calls_75_100+=districtCountDto.getCalls_75_100();
  calls_50_75+=districtCountDto.getCalls_50_75();
- // ... more additions
+ try {
+   // ... calculations
+ } catch (ArithmeticException e) {
+   LOGGER.error("Calculation error for location {}: {}", 
+     locationId, e.getMessage());
+   throw new ReportGenerationException(
+     "Failed to generate report", e);
+ }
.github/workflows/NMSReportingSuite-deployment.yaml (3)

23-24: Add error handling for Maven build.

The Maven build step should include error handling and timeout settings.

       - name: Build with Maven
-        run: mvn clean install -f NMSReportingSuite/pom.xml
+        run: |
+          set -e
+          mvn clean install -f NMSReportingSuite/pom.xml
+        timeout-minutes: 15

27-31: Add error handling for frontend build.

The frontend build step should include error handling, timeout settings, and npm caching.

       - name: Install Frontend Dependencies and Build with Grunt
+        timeout-minutes: 10
         run: |
+          set -e
           cd app
           npm install
           grunt package
+      - name: Cache npm dependencies
+        uses: actions/cache@v4
+        with:
+          path: ~/.npm
+          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
+          restore-keys: |
+            ${{ runner.os }}-node-

34-43: Configure artifact retention and timeout settings.

Add retention period and timeout settings for the artifact upload step.

       - uses: actions/upload-artifact@v4
         with:
           name: my-artifact
+          retention-days: 5
+          if-no-files-found: error
           path: |
             NMSReportingSuite/target/*.war
             app/index.html
             app/scripts/
             app/views/
             app/styles/
             app/dist/
+        timeout-minutes: 5
NMSReportingSuite/src/main/resources/sms.properties (1)

60-60: Verify template ID consistency.

The certificate template ID 1007118129107537794 is duplicated in both the default and language-specific sections. This could lead to maintenance issues if one value is updated but not the other.

Consider:

  1. Using a single property as a reference
  2. Adding comments to explain the relationship between these IDs
-sms.default.templateId.certificate=1007118129107537794
+# Base template ID for certificates
+sms.templateId.certificate.base=1007118129107537794
+# Language-specific template IDs reference the base
+sms.default.templateId.certificate=${sms.templateId.certificate.base}

Also applies to: 71-75

app/bower_components/angular-material/modules/closure/card/card.css (1)

196-198: Consider adding a comment explaining the high-contrast media query.

The media query for high-contrast mode lacks documentation about its purpose and browser support.

+/* High-contrast mode adds border for better visibility in Windows High Contrast Mode */
 @media screen and (-ms-high-contrast: active) {
   md-card {
     border: 1px solid #fff; } }
🧰 Tools
🪛 Biome (1.9.4)

[error] 196-196: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-bootstrap/README.md (2)

8-19: Fix markdown list indentation and style consistency.

The quick links section has inconsistent list indentation and mixed list styles.

Apply these changes:

  1. Use consistent 2-space indentation for nested lists
  2. Use dashes (-) consistently for all unordered lists
  3. Fix the hierarchy of installation sub-items
- - [Demo](#demo)
- - [Installation](#installation)
-     - [NPM](#install-with-npm)
-     - [Bower](#install-with-bower)
+ - [Demo](#demo)
+ - [Installation](#installation)
+   - [NPM](#install-with-npm)
+   - [Bower](#install-with-bower)
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


14-14: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


16-16: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


17-17: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


18-18: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


19-19: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


26-26: Fix bare URLs in markdown.

Several URLs are used without proper markdown link syntax.

Wrap the URLs in proper markdown link syntax:

-Do you want to see directives in action? Visit http://angular-ui.github.io/bootstrap/!
+Do you want to see directives in action? Visit [http://angular-ui.github.io/bootstrap/](http://angular-ui.github.io/bootstrap/)!

Also applies to: 57-57, 62-62, 85-85

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

26-26: Bare URL used
null

(MD034, no-bare-urls)

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/AggregateKilkariReportsService.java (2)

24-26: Consider consolidating usage report methods.

The new methods getMotherUsageReport and getChildUsageReport appear to be specialized versions of getUsageReport. Consider refactoring to use a single method with a type parameter to reduce code duplication.

-    List<UsageDto> getUsageReport(ReportRequest reportRequest, User currentUser);
-    List<UsageDto> getMotherUsageReport(ReportRequest reportRequest, User currentUser);
-    List<UsageDto> getChildUsageReport(ReportRequest reportRequest, User currentUser);
+    List<UsageDto> getUsageReport(ReportRequest reportRequest, User currentUser, UsageType type);

24-26: Consider consolidating usage report methods.

The new methods getMotherUsageReport and getChildUsageReport could potentially be consolidated with the existing getUsageReport method by adding a report type parameter, following the DRY principle.

Example refactor:

-    List<UsageDto> getUsageReport(ReportRequest reportRequest, User currentUser);
-    List<UsageDto> getMotherUsageReport(ReportRequest reportRequest, User currentUser);
-    List<UsageDto> getChildUsageReport(ReportRequest reportRequest, User currentUser);
+    List<UsageDto> getUsageReport(ReportRequest reportRequest, User currentUser, UsageReportType type);
app/bower_components/angular-material/modules/closure/card/card.js (1)

132-140: Consider enhancing error handling in the directive.

The directive's link function could benefit from additional error handling for edge cases.

 function mdCardDirective($mdTheming) {
   return {
     restrict: 'E',
     link: function ($scope, $element, attr) {
+      if (!$element) {
+        return;
+      }
       $element.addClass('_md');     // private md component indicator for styling
       $mdTheming($element);
     }
   };
 }
app/bower_components/angular-material/angular-material-mocks.js (1)

16-17: Remove redundant 'use strict' directive.

The 'use strict' directive is redundant in modules as they are automatically in strict mode.

-'use strict';
🧰 Tools
🪛 Biome (1.9.4)

[error] 16-17: Redundant use strict directive.

The entire contents of JavaScript modules are automatically in strict mode, with no statement needed to initiate it.
Safe fix: Remove the redundant use strict directive.

(lint/suspicious/noRedundantUseStrict)

app/bower_components/angular-highlightjs/angular-highlightjs.js (1)

189-194: Modernize code with optional chaining.

Use optional chaining to make the code more concise and safer.

-if (compileCheck && compileCheck(scope)) {
+if (compileCheck?.(scope)) {
🧰 Tools
🪛 Biome (1.9.4)

[error] 189-189: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f0ef196 and a991681.

⛔ Files ignored due to path filters (49)
  • app/bower_components/angular-animate/angular-animate.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-animate/angular-animate.min.js.map is excluded by !**/*.map, !**/*.min.js.map
  • app/bower_components/angular-aria/angular-aria.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-aria/angular-aria.min.js.map is excluded by !**/*.map, !**/*.min.js.map
  • app/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-bootstrap/ui-bootstrap.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-cookies/angular-cookies.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-cookies/angular-cookies.min.js.map is excluded by !**/*.map, !**/*.min.js.map
  • app/bower_components/angular-highlightjs/angular-highlightjs.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-idle-service/dist/angular-idle-service.d.ts is excluded by !**/dist/**
  • app/bower_components/angular-idle-service/dist/angular-idle-service.js is excluded by !**/dist/**
  • app/bower_components/angular-idle-service/dist/angular-idle-service.js.map is excluded by !**/dist/**, !**/*.map
  • app/bower_components/angular-material/angular-material.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/button/button.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/card/card.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/checkbox/checkbox.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/chips/chips.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/colors/colors.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/content/content.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/core/core.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/datepicker/datepicker.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/dialog/dialog.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/divider/divider.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/fabActions/fabActions.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/fabToolbar/fabToolbar.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/fabTrigger/fabTrigger.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/gridList/gridList.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/icon/icon.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/input/input.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/list/list.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/menu/menu.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/menuBar/menuBar.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/navBar/navBar.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/panel/panel.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/progressCircular/progressCircular.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/progressLinear/progressLinear.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/radioButton/radioButton.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/select/select.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/showHide/showHide.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/sidenav/sidenav.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/slider/slider.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/sticky/sticky.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/subheader/subheader.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/swipe/swipe.min.js is excluded by !**/*.min.js
  • app/bower_components/angular-material/modules/closure/switch/switch.min.js is excluded by !**/*.min.js
📒 Files selected for processing (107)
  • .github/workflows/NMSReportingSuite-deployment.yaml (1 hunks)
  • .gitignore (0 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/AggregateKilkariReportsService.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AggregateKilkariReportsServiceImpl.java (20 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AggregateReportsServiceImpl.java (5 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AshaTargetFileServiceImpl.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/controller/UserController.java (2 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/KilkariUsageChildDao.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/KilkariUsageMotherDao.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/AggregateCumulativeBeneficiaryDaoImpl.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/KilkariUsageChildDaoImpl.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/KilkariUsageMotherDaoImpl.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/entity/KilkariAggregateBeneficiariesDto.java (2 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/enums/EtlJobForNotifications.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/enums/ReportType.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/Home.java (5 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/Reports.java (5 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/UserManualMobileAcademyAgg.java (5 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/model/AggregateCumulativeBeneficiary.java (3 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/model/KilkariUsageChild.java (1 hunks)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/model/KilkariUsageMother.java (1 hunks)
  • NMSReportingSuite/src/main/resources/sms.properties (1 hunks)
  • app/bower_components/angular-animate/.bower.json (1 hunks)
  • app/bower_components/angular-animate/LICENSE.md (1 hunks)
  • app/bower_components/angular-animate/README.md (1 hunks)
  • app/bower_components/angular-animate/bower.json (1 hunks)
  • app/bower_components/angular-animate/index.js (1 hunks)
  • app/bower_components/angular-animate/package.json (1 hunks)
  • app/bower_components/angular-aria/.bower.json (1 hunks)
  • app/bower_components/angular-aria/LICENSE.md (1 hunks)
  • app/bower_components/angular-aria/README.md (1 hunks)
  • app/bower_components/angular-aria/angular-aria.js (1 hunks)
  • app/bower_components/angular-aria/bower.json (1 hunks)
  • app/bower_components/angular-aria/index.js (1 hunks)
  • app/bower_components/angular-aria/package.json (1 hunks)
  • app/bower_components/angular-bootstrap/.bower.json (1 hunks)
  • app/bower_components/angular-bootstrap/.gitignore (1 hunks)
  • app/bower_components/angular-bootstrap/.npmignore (1 hunks)
  • app/bower_components/angular-bootstrap/README.md (1 hunks)
  • app/bower_components/angular-bootstrap/bower.json (1 hunks)
  • app/bower_components/angular-bootstrap/index.js (1 hunks)
  • app/bower_components/angular-bootstrap/package.json (1 hunks)
  • app/bower_components/angular-bootstrap/ui-bootstrap-csp.css (1 hunks)
  • app/bower_components/angular-cookies/.bower.json (1 hunks)
  • app/bower_components/angular-cookies/README.md (1 hunks)
  • app/bower_components/angular-cookies/angular-cookies.js (1 hunks)
  • app/bower_components/angular-cookies/bower.json (1 hunks)
  • app/bower_components/angular-cookies/package.json (1 hunks)
  • app/bower_components/angular-cryptography/.bower.json (1 hunks)
  • app/bower_components/angular-cryptography/.gitignore (1 hunks)
  • app/bower_components/angular-cryptography/LICENSE (1 hunks)
  • app/bower_components/angular-cryptography/README.md (1 hunks)
  • app/bower_components/angular-cryptography/angular-cryptography.d.ts (1 hunks)
  • app/bower_components/angular-cryptography/bower.json (1 hunks)
  • app/bower_components/angular-cryptography/mdo-angular-cryptography.js (1 hunks)
  • app/bower_components/angular-highlightjs/.bower.json (1 hunks)
  • app/bower_components/angular-highlightjs/LICENSE (1 hunks)
  • app/bower_components/angular-highlightjs/README.md (1 hunks)
  • app/bower_components/angular-highlightjs/angular-highlightjs.js (1 hunks)
  • app/bower_components/angular-highlightjs/bower.json (1 hunks)
  • app/bower_components/angular-idle-service/.bower.json (1 hunks)
  • app/bower_components/angular-idle-service/LICENSE (1 hunks)
  • app/bower_components/angular-idle-service/bower.json (1 hunks)
  • app/bower_components/angular-idle-service/index.html (1 hunks)
  • app/bower_components/angular-idle-service/index.js (1 hunks)
  • app/bower_components/angular-idle-service/package.json (1 hunks)
  • app/bower_components/angular-idle-service/readme.md (1 hunks)
  • app/bower_components/angular-idle-service/src/Idle/idle.ts (1 hunks)
  • app/bower_components/angular-idle-service/src/IdleStorage/idleStorage.ts (1 hunks)
  • app/bower_components/angular-idle-service/src/KeepAlive/keepAlive.ts (1 hunks)
  • app/bower_components/angular-idle-service/src/app.ts (1 hunks)
  • app/bower_components/angular-idle-service/tsconfig.json (1 hunks)
  • app/bower_components/angular-idle-service/tsd.json (1 hunks)
  • app/bower_components/angular-material/.bower.json (1 hunks)
  • app/bower_components/angular-material/.gitignore (1 hunks)
  • app/bower_components/angular-material/LICENSE (1 hunks)
  • app/bower_components/angular-material/README.md (1 hunks)
  • app/bower_components/angular-material/angular-material-mocks.js (1 hunks)
  • app/bower_components/angular-material/bower.json (1 hunks)
  • app/bower_components/angular-material/index.js (1 hunks)
  • app/bower_components/angular-material/layouts/angular-material.layout-attributes.scss (1 hunks)
  • app/bower_components/angular-material/layouts/angular-material.layouts.ie_fixes.css (1 hunks)
  • app/bower_components/angular-material/layouts/angular-material.layouts.scss (1 hunks)
  • app/bower_components/angular-material/modules/closure/autocomplete/autocomplete-default-theme.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/autocomplete/autocomplete-default-theme.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.js (1 hunks)
  • app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop-default-theme.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop-default-theme.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop.js (1 hunks)
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet-default-theme.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet-default-theme.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.js (1 hunks)
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/button/button-default-theme.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/button/button-default-theme.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/button/button.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/button/button.js (1 hunks)
  • app/bower_components/angular-material/modules/closure/button/button.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/card/card-default-theme.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/card/card-default-theme.min.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/card/card.css (1 hunks)
  • app/bower_components/angular-material/modules/closure/card/card.js (1 hunks)
⛔ Files not processed due to max files limit (39)
  • app/bower_components/angular-material/modules/closure/card/card.min.css
  • app/bower_components/angular-material/modules/closure/checkbox/checkbox-default-theme.css
  • app/bower_components/angular-material/modules/closure/checkbox/checkbox-default-theme.min.css
  • app/bower_components/angular-material/modules/closure/checkbox/checkbox.css
  • app/bower_components/angular-material/modules/closure/checkbox/checkbox.js
  • app/bower_components/angular-material/modules/closure/checkbox/checkbox.min.css
  • app/bower_components/angular-material/modules/closure/chips/chips-default-theme.css
  • app/bower_components/angular-material/modules/closure/chips/chips-default-theme.min.css
  • app/bower_components/angular-material/modules/closure/chips/chips.css
  • app/bower_components/angular-material/modules/closure/chips/chips.js
  • app/bower_components/angular-material/modules/closure/chips/chips.min.css
  • app/bower_components/angular-material/modules/closure/colors/colors.js
  • app/bower_components/angular-material/modules/closure/content/content-default-theme.css
  • app/bower_components/angular-material/modules/closure/content/content-default-theme.min.css
  • app/bower_components/angular-material/modules/closure/content/content.css
  • app/bower_components/angular-material/modules/closure/content/content.js
  • app/bower_components/angular-material/modules/closure/content/content.min.css
  • app/bower_components/angular-material/modules/closure/core/core-default-theme.css
  • app/bower_components/angular-material/modules/closure/core/core-default-theme.min.css
  • app/bower_components/angular-material/modules/closure/core/default-theme.js
  • app/bower_components/angular-material/modules/closure/datepicker/datepicker-default-theme.css
  • app/bower_components/angular-material/modules/closure/datepicker/datepicker-default-theme.min.css
  • app/bower_components/angular-material/modules/closure/datepicker/datepicker.css
  • app/bower_components/angular-material/modules/closure/datepicker/datepicker.min.css
  • app/bower_components/angular-material/modules/closure/dialog/dialog-default-theme.css
  • app/bower_components/angular-material/modules/closure/dialog/dialog-default-theme.min.css
  • app/bower_components/angular-material/modules/closure/dialog/dialog.css
  • app/bower_components/angular-material/modules/closure/dialog/dialog.js
  • app/bower_components/angular-material/modules/closure/dialog/dialog.min.css
  • app/bower_components/angular-material/modules/closure/divider/divider-default-theme.css
  • app/bower_components/angular-material/modules/closure/divider/divider-default-theme.min.css
  • app/bower_components/angular-material/modules/closure/divider/divider.css
  • app/bower_components/angular-material/modules/closure/divider/divider.js
  • app/bower_components/angular-material/modules/closure/divider/divider.min.css
  • app/bower_components/angular-material/modules/closure/fabActions/fabActions.js
  • app/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.css
  • app/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.js
  • app/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.min.css
  • app/bower_components/angular-material/modules/closure/fabToolbar/fabToolbar.css
💤 Files with no reviewable changes (1)
  • .gitignore
✅ Files skipped from review due to trivial changes (50)
  • app/bower_components/angular-bootstrap/.gitignore
  • app/bower_components/angular-animate/index.js
  • app/bower_components/angular-material/index.js
  • app/bower_components/angular-bootstrap/index.js
  • app/bower_components/angular-bootstrap/.npmignore
  • app/bower_components/angular-animate/LICENSE.md
  • app/bower_components/angular-aria/index.js
  • app/bower_components/angular-bootstrap/bower.json
  • app/bower_components/angular-material/LICENSE
  • app/bower_components/angular-material/.gitignore
  • app/bower_components/angular-bootstrap/.bower.json
  • app/bower_components/angular-material/modules/closure/card/card-default-theme.min.css
  • app/bower_components/angular-aria/LICENSE.md
  • app/bower_components/angular-idle-service/index.html
  • app/bower_components/angular-aria/bower.json
  • app/bower_components/angular-cryptography/bower.json
  • app/bower_components/angular-material/modules/closure/card/card-default-theme.css
  • app/bower_components/angular-idle-service/bower.json
  • app/bower_components/angular-material/.bower.json
  • app/bower_components/angular-idle-service/LICENSE
  • app/bower_components/angular-cookies/bower.json
  • app/bower_components/angular-bootstrap/package.json
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet-default-theme.min.css
  • app/bower_components/angular-highlightjs/LICENSE
  • app/bower_components/angular-animate/package.json
  • app/bower_components/angular-idle-service/tsconfig.json
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop.min.css
  • app/bower_components/angular-animate/bower.json
  • app/bower_components/angular-material/layouts/angular-material.layouts.ie_fixes.css
  • app/bower_components/angular-idle-service/package.json
  • app/bower_components/angular-aria/.bower.json
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop-default-theme.min.css
  • app/bower_components/angular-material/bower.json
  • app/bower_components/angular-idle-service/tsd.json
  • app/bower_components/angular-material/modules/closure/autocomplete/autocomplete-default-theme.min.css
  • app/bower_components/angular-highlightjs/bower.json
  • app/bower_components/angular-cookies/.bower.json
  • app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet-default-theme.css
  • app/bower_components/angular-cookies/package.json
  • app/bower_components/angular-material/modules/closure/button/button-default-theme.min.css
  • app/bower_components/angular-animate/.bower.json
  • app/bower_components/angular-cryptography/LICENSE
  • app/bower_components/angular-animate/README.md
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop-default-theme.css
  • app/bower_components/angular-highlightjs/.bower.json
  • app/bower_components/angular-aria/package.json
  • app/bower_components/angular-material/modules/closure/backdrop/backdrop.css
  • app/bower_components/angular-cryptography/.bower.json
  • app/bower_components/angular-cryptography/.gitignore
  • app/bower_components/angular-idle-service/.bower.json
👮 Files not reviewed due to content moderation or server errors (4)
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/KilkariUsageMotherDao.java
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/AggregateKilkariReportsService.java
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/KilkariUsageChildDaoImpl.java
  • NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/impl/KilkariUsageMotherDaoImpl.java
🧰 Additional context used
🪛 Biome (1.9.4)
app/bower_components/angular-idle-service/src/app.ts

[error] 3-4: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)

app/bower_components/angular-cryptography/angular-cryptography.d.ts

[error] 6-6: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)

app/bower_components/angular-material/modules/closure/card/card.css

[error] 196-196: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-material/modules/closure/button/button.css

[error] 192-192: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-material/angular-material-mocks.js

[error] 15-15: Do not shadow the global "undefined" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)


[error] 16-17: Redundant use strict directive.

The entire contents of JavaScript modules are automatically in strict mode, with no statement needed to initiate it.
Safe fix: Remove the redundant use strict directive.

(lint/suspicious/noRedundantUseStrict)

app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.css

[error] 168-168: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css

[error] 158-158: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)


[error] 195-195: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-idle-service/src/IdleStorage/idleStorage.ts

[error] 1-1: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)


[error] 22-22: Don't use 'Object' as a type.

Prefer explicitly define the object shape. This type means "any non-nullable value", which is slightly better than 'unknown', but it's still a broad type.

(lint/complexity/noBannedTypes)

app/bower_components/angular-cookies/angular-cookies.js

[error] 6-6: Do not shadow the global "undefined" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)


[error] 6-6: Redundant use strict directive.

The entire contents of JavaScript modules are automatically in strict mode, with no statement needed to initiate it.
Safe fix: Remove the redundant use strict directive.

(lint/suspicious/noRedundantUseStrict)

app/bower_components/angular-idle-service/src/KeepAlive/keepAlive.ts

[error] 1-1: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)

app/bower_components/angular-idle-service/src/Idle/idle.ts

[error] 1-1: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)


[error] 221-221: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

app/bower_components/angular-highlightjs/angular-highlightjs.js

[error] 189-189: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)


[error] 251-251: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)


[error] 341-341: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.js

[error] 297-297: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)


[error] 309-309: Avoid the delete operator which can impact performance.

Unsafe fix: Use an undefined assignment instead.

(lint/performance/noDelete)


[error] 312-312: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

app/bower_components/angular-aria/angular-aria.js

[error] 6-6: Redundant use strict directive.

The entire contents of JavaScript modules are automatically in strict mode, with no statement needed to initiate it.
Safe fix: Remove the redundant use strict directive.

(lint/suspicious/noRedundantUseStrict)


[error] 146-148: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 267-269: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 310-310: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 311-311: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 312-312: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 313-313: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 337-337: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 365-367: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 377-379: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 414-416: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)

app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.js

[error] 332-332: Do not access Object.prototype method 'hasOwnProperty' from target object.

It's recommended using Object.hasOwn() instead of using Object.hasOwnProperty().
See MDN web docs for more details.

(lint/suspicious/noPrototypeBuiltins)


[error] 749-749: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)


[error] 757-757: Unnecessary use of boolean literals in conditional expression.

Simplify your code by directly assigning the result without using a ternary operator.
If your goal is negation, you may use the logical NOT (!) or double NOT (!!) operator for clearer and concise code.
Check for more details about NOT operator.
Unsafe fix: Remove the conditional expression with

(lint/complexity/noUselessTernary)


[error] 1684-1684: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.min.css

[error] 6-6: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)


[error] 6-6: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.min.css

[error] 6-6: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-material/modules/closure/button/button.min.css

[error] 6-6: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

🪛 actionlint (1.7.4)
.github/workflows/NMSReportingSuite-deployment.yaml

13-13: the runner of "actions/checkout@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)


17-17: the runner of "actions/setup-java@v3" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 LanguageTool
app/bower_components/angular-material/README.md

[grammar] ~1-~1: The word ‘installs’ is not a noun.
Context: ...rJS Material v1.x library and localized installs using npm. The component source-code ...

(A_INSTALL)


[uncategorized] ~150-~150: A comma may be missing after the conjunctive/linking adverb ‘Instead’.
Context: ...local copies of the distribution files. Instead simply reference the CDN urls to easily...

(SENT_START_CONJUNCTIVE_LINKING_ADVERB_COMMA)

app/bower_components/angular-idle-service/readme.md

[uncategorized] ~4-~4: A comma might be missing here.
Context: ...e and perform certain actions when this happens like warning them about this inactivity...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[uncategorized] ~4-~4: A comma might be missing here.
Context: ...s inactivity or logging them out of the application for example. ### This module requires ...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[uncategorized] ~13-~13: Possible missing comma found.
Context: ...ar-idle-service depends on AngularJS to work you need to reference the script after ...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~171-~171: Please check the verb form.
Context: ...Back This event fires when the user has return from idle, and before being considered ...

(SHE_LIVE)

app/bower_components/angular-bootstrap/README.md

[style] ~31-~31: Consider a shorter alternative to avoid wordiness.
Context: ...in the module dependencies for your app in order to enable animation. #### Install with NP...

(IN_ORDER_TO_PREMIUM)


[uncategorized] ~67-~67: Possible missing comma found.
Context: ...oading all the dependencies and project files the only remaining part is to add depen...

(AI_HYDRA_LEO_MISSING_COMMA)


[style] ~96-~96: Consider an alternative to avoid wordiness and to strengthen your wording.
Context: ...* Safari Modern mobile browsers should work without problems. ## Need help? Need help using UI Boo...

(WORKS_WITHOUT_PROBLEMS)


[style] ~108-~108: To make your writing clearer, consider a more direct alternative.
Context: ... UI Bootstrap** ## Found a bug? Please take a look at [CONTRIBUTING.md](CONTRIBUTING....

(TAKE_A_LOOK)


[style] ~116-~116: Consider a different adverb to strengthen your wording.
Context: ... # Contributing to the project We are always looking for the quality contributions! ...

(ALWAYS_CONSTANTLY)

app/bower_components/angular-cryptography/README.md

[uncategorized] ~4-~4: This verb does not appear to agree with the subject. Consider using a different form.
Context: ...================ AngularJS Module that integrate cryptography functionality offers from ...

(AI_EN_LECTOR_REPLACEMENT_VERB_AGREEMENT)


[grammar] ~13-~13: There seems to be a noun/verb agreement error. Did you mean “installs” or “installed”?
Context: ...ups/aes.js) ##Install (bower) * bower install angular-cryptography ```html <script ty...

(SINGULAR_NOUN_VERB_AGREEMENT)

app/bower_components/angular-highlightjs/README.md

[style] ~66-~66: To form a complete sentence, be sure to include a subject.
Context: ...s its content HTML entities by default. Can be turned off with explicitly configura...

(MISSING_IT_THERE)

🪛 markdownlint-cli2 (0.17.2)
app/bower_components/angular-material/README.md

182-182: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


184-184: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

app/bower_components/angular-aria/README.md

49-49: Bare URL used
null

(MD034, no-bare-urls)

app/bower_components/angular-bootstrap/README.md

10-10: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


11-11: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


12-12: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


13-13: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


14-14: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


16-16: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


17-17: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


18-18: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


19-19: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


26-26: Bare URL used
null

(MD034, no-bare-urls)


33-33: Heading levels should only increment by one level at a time
Expected: h2; Actual: h4

(MD001, heading-increment)


36-36: Dollar signs used before commands without showing output
null

(MD014, commands-show-output)


43-43: Dollar signs used before commands without showing output
null

(MD014, commands-show-output)


57-57: Bare URL used
null

(MD034, no-bare-urls)


62-62: Bare URL used
null

(MD034, no-bare-urls)


85-85: Bare URL used
null

(MD034, no-bare-urls)


90-90: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


91-91: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


92-92: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


93-93: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


94-94: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


102-102: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


103-103: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


105-105: Emphasis used instead of a heading
null

(MD036, no-emphasis-as-heading)


118-118: Trailing punctuation in heading
Punctuation: '.'

(MD026, no-trailing-punctuation)

app/bower_components/angular-cookies/README.md

59-59: Bare URL used
null

(MD034, no-bare-urls)

app/bower_components/angular-cryptography/README.md

8-8: Spaces inside link text
null

(MD039, no-space-in-links)


11-11: No space after hash on atx style heading
null

(MD018, no-missing-space-atx)


13-13: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


19-19: No space after hash on atx style heading
null

(MD018, no-missing-space-atx)


21-21: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


22-22: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


23-23: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


29-29: No space after hash on atx style heading
null

(MD018, no-missing-space-atx)


31-31: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


36-36: Unordered list style
Expected: dash; Actual: asterisk

(MD004, ul-style)


39-39: Hard tabs
Column: 1

(MD010, no-hard-tabs)


48-48: Hard tabs
Column: 1

(MD010, no-hard-tabs)


49-49: Hard tabs
Column: 1

(MD010, no-hard-tabs)


59-59: Hard tabs
Column: 1

(MD010, no-hard-tabs)


60-60: Hard tabs
Column: 1

(MD010, no-hard-tabs)

🔇 Additional comments (35)
app/bower_components/angular-cookies/README.md (2)

1-5: LGTM! Clear package introduction and source repository reference.

The package information is well-documented with proper reference to the main AngularJS repository for issues and pull requests.


50-53: LGTM! Clear documentation reference.

The link to the official AngularJS documentation is properly formatted and accessible.

app/bower_components/angular-aria/README.md (1)

7-38: LGTM! Clear and comprehensive installation instructions.

The installation section effectively covers both npm and bower package managers with accurate code examples and proper module dependency setup instructions.

app/bower_components/angular-cryptography/angular-cryptography.d.ts (1)

1-5: LGTM! Well-documented type definition header.

The header follows the standard TypeScript definition file format with proper attribution and references.

app/bower_components/angular-material/layouts/angular-material.layouts.scss (3)

69-140: Well-structured typography and layout mixins.

The implementation follows Material Design specifications and provides a robust foundation for consistent typography and layouts.


141-479: Comprehensive utility mixins with good cross-browser support.

The mixins handle various browser-specific implementations, RTL support, and component styling effectively.


1-6: Verify if Angular Material version 1.1.10 has known security vulnerabilities.

The version being used is quite old. Let's check for any security advisories and the latest version.

✅ Verification successful

🌐 Web query:

What is the latest version of Angular Material? Are there any known security vulnerabilities in version 1.1.10?

💡 Result:

The latest version of Angular Material as of February 2025 is v19.1.0 (stable release) with a prerelease version 19.2.0-next.0 also available[7]. This aligns with Angular v19's release cycle mentioned in multiple sources[1][5].

Regarding security vulnerabilities in version 1.1.10:

  • Security scans from Snyk[6][8] and Socket.dev[10] show no direct vulnerabilities for angular-material 1.1.10
  • However, these reports note:
    • The package appears deprecated or no longer maintained[10]
    • Version 1.1.x is over 7 years older than current releases (v19.x)
    • Modern versions receive active security maintenance from the Angular team[7][9]

For production use, it's strongly recommended to use current Angular Material versions (v18+), which include:

  • Active LTS support until May 2025 (v18) or May 2026 (v19)[5]
  • Security updates and browser compatibility fixes
  • Modern features like Material 3 theming and improved accessibility[1][3][9]

The Angular team maintains rigorous security standards for modern releases, with components that are internationalized, accessible, and well-tested[7][9].

Citations:


AngularJS Material v1.1.10 Security Verification

  • Security scans (Snyk, Socket.dev) confirm no direct vulnerabilities in v1.1.10.
  • However, this version is over 7 years old and deprecated, while the latest stable release is v19.1.0, which benefits from active security maintenance and modern features.
  • For improved security, support, and compatibility, consider upgrading to a maintained version.
app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css (2)

158-162: LGTM! Good accessibility support.

The implementation includes proper high contrast mode support for Microsoft browsers, which is essential for accessibility.

Also applies to: 195-198

🧰 Tools
🪛 Biome (1.9.4)

[error] 158-158: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)


1-6: Consider updating Angular Material to the latest version.

The current version (v1.1.10) is outdated. Consider updating to the latest stable version for bug fixes, security patches, and new features.

✅ Verification successful

🌐 Web query:

What is the latest version of Angular Material?

💡 Result:

The latest stable version of Angular Material is 19.1.3, released on February 5, 2025[4]. This information comes directly from the official npm registry listing for @angular/material[4].

For developers tracking upcoming features, there's also a prerelease version available:

  • 19.2.0-next.3 (as of February 5, 2025)[3], which includes experimental changes like removing animation module dependencies from multiple components[3].

Key sources confirming this version information:

  1. The npm package page shows 19.1.3 as the latest stable release[4]
  2. GitHub releases list both stable and prerelease versions[3]
  3. Angular Material's documentation aligns with these version numbers[5][7]

When installing Angular Material, using npm install @angular/material will automatically get version 19.1.3 unless specific version syntax is used[1][4].

Citations:


Update Angular Material Version in License Header

The license header in the file app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css still indicates version v1.1.10, which is outdated. The latest stable release is v19.1.3 (as verified by the web query). Consider updating the version information in the license header or documentation to reflect the current stable release for improved support, security, and performance.

  • File: app/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css (lines 1-6)
app/bower_components/angular-highlightjs/README.md (2)

71-81: Code examples are well-structured and comprehensive.

The examples effectively demonstrate various use cases of the directive, including:

  • Basic usage
  • Dynamic content
  • Template inclusion
  • Language specification
  • Compilation options

Also applies to: 93-102, 107-109, 121-123, 127-129, 140-145, 159-160


1-162: Documentation is comprehensive and well-structured.

The README provides:

  • Clear installation instructions
  • Configuration options with examples
  • Detailed directive usage guidelines
  • Live examples for each feature
  • Type information and default values for all options
🧰 Tools
🪛 LanguageTool

[style] ~66-~66: To form a complete sentence, be sure to include a subject.
Context: ...s its content HTML entities by default. Can be turned off with explicitly configura...

(MISSING_IT_THERE)

app/bower_components/angular-material/modules/closure/autocomplete/autocomplete-default-theme.css (1)

1-6: Consider upgrading Angular Material version.

The file is using Angular Material v1.1.10, which is outdated. The latest version is 1.2.5 and includes important bug fixes and improvements.

✅ Verification successful

🌐 Web query:

What is the latest version of Angular Material 1.x and what are the key differences from v1.1.10?

💡 Result:

The latest version of Angular Material 1.x is v1.2.5, released on April 12, 2022[8]. This represents the final stable release in the AngularJS (v1.x) Material series before development shifted to Angular Material (v2+).

Key differences between v1.2.x (latest) and v1.1.10:

Feature/Aspect v1.1.10 (2016-08-17) Latest v1.x (v1.2.x)
Browser Support Legacy browser support Modern browser optimizations
Accessibility Basic ARIA compliance Enhanced a11y features
Component Fixes Initial chip/select fixes[3] Additional layout/theme repairs
Theme System Basic theme support Expanded dark mode capabilities
Documentation Core documentation Added demo examples
Memory Management Partial leak fixes[3] Additional performance tweaks
Dependency Support AngularJS 1.x compatibility Extended compatibility patches

Significant improvements in later 1.x versions included:

  • Enhanced dark theme support for components like datepicker and menu-bar[3][8]
  • Additional memory leak fixes beyond those addressed in v1.1.10[8]
  • Expanded documentation with new demo implementations[3][9]
  • Improved cross-browser compatibility and mobile responsiveness[9]
  • Better TypeScript definition files for type checking[8]

Development of AngularJS Material (v1.x) concluded with version 1.2.x as focus shifted to Angular Material (v2+) for Angular versions 2+[9]. The final versions maintained backward compatibility while addressing critical bugs and security issues[7][9].

Citations:


Upgrade Angular Material Version

The file in question is using Angular Material v1.1.10. As confirmed, the latest version for Angular Material 1.x is v1.2.5, which offers enhanced dark mode support, improved accessibility, component fixes, better performance, and additional documentation improvements. Upgrading would help address potential security vulnerabilities and ensure better compatibility.

app/bower_components/angular-material/modules/closure/button/button-default-theme.css (1)

1-6: Ensure consistent Angular Material version across components.

This file also uses Angular Material v1.1.10. Ensure all Angular Material components are upgraded together to maintain consistency.

✅ Verification successful

🏁 Script executed:

#!/bin/bash
# Check Angular Material version consistency across components
find . -name "*.js" -o -name "*.css" | grep -i "angular.*material" | xargs grep -l "v[0-9]\+\.[0-9]\+\.[0-9]\+"

Length of output: 37990


Angular Material Version Consistency Verified

- The file under review explicitly shows Angular Material v1.1.10.
- The grep search across the bower_components revealed that all Angular Material component files report a version number matching the expected pattern, and there’s no indication of a mismatched release.

Based on this evidence, the version is consistent across components.

app/bower_components/angular-idle-service/src/Idle/idle.ts (1)

60-60: Cross-tab storage event listening looks good.
Attaching a listener to the browser’s storage event is a useful way to keep session or idle state consistent across multiple tabs.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/AggregateKilkariReportsService.java (1)

24-27: LGTM! Well-structured additions.

The new methods for mother and child usage reports follow the established pattern and maintain consistency with existing report methods.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/enums/ReportType.java (1)

9-9: LGTM!

The changes improve report naming clarity and add new report types for mother and child usage tracking. The implementation follows the existing pattern and maintains consistency.

Also applies to: 13-14, 19-19

app/bower_components/angular-material/modules/closure/button/button.js (2)

1-195: LGTM!

The implementation is well-documented, follows AngularJS best practices, and includes proper error handling and accessibility features. The code demonstrates good separation of concerns between the anchor and button directives.


1-365: LGTM!

The implementation is well-structured with clear separation of concerns and includes performance optimization through caching. The code effectively integrates highlight.js with AngularJS.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/enums/EtlJobForNotifications.java (1)

52-59: LGTM!

The new ETL job entries for mother and child usage reports are well-structured and maintain consistency with the existing pattern. The implementation covers all required time periods.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/Reports.java (1)

190-190: LGTM! Report name updates are consistent.

The changes to report name conditions are consistent and properly handle the new report types.

Also applies to: 320-320, 322-322, 382-382

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/htmlpages/Home.java (1)

234-234: LGTM! Report name updates are consistent.

The changes to report name conditions are consistent with the updates in Reports.java.

Also applies to: 254-254, 270-270, 348-348, 408-408

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AggregateReportsServiceImpl.java (1)

476-478: Variable name improvement for better readability.

The loop variable has been renamed from 'i' to 'columnNumber' which improves code readability.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/controller/UserController.java (2)

758-770: LGTM! New endpoints for mother and child usage reports.

The implementation follows the established pattern for report endpoints and properly integrates with the existing reporting infrastructure.


1842-1855: LGTM! Menu items for new report types.

The menu items are properly configured with all required fields and follow the consistent pattern used for other report types.

NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/AggregateKilkariReportsServiceImpl.java (1)

85-90: LGTM! Clean dependency injection.

The new DAO dependencies for mother and child usage data are properly autowired following the established pattern.

app/bower_components/angular-bootstrap/ui-bootstrap-csp.css (1)

1-115: LGTM!

This is a vendor file from the UI Bootstrap library that provides essential styles for UI components in CSP mode. The file should not be modified directly.

app/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.css (1)

1-171: LGTM!

This is a vendor file from the Angular Material library that provides essential styles for the bottom sheet component. The file should not be modified directly.

🧰 Tools
🪛 Biome (1.9.4)

[error] 168-168: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-idle-service/readme.md (1)

1-192: LGTM! Document the idle service configuration.

This is a vendor file from the angular-idle-service library that provides documentation for user idle detection. The file should not be modified directly.

Please ensure that the idle service configuration aligns with your session timeout requirements. Consider documenting the chosen configuration values in your application's documentation.

Run the following script to find the current idle service configuration in your application:

✅ Verification successful

🏁 Script executed:

#!/bin/bash
# Description: Find the idle service configuration in the application code.

rg -A 5 '\$idleProvider.setIdleTime|\.config\(\$idleProvider' app/

Length of output: 1830


Idle Service Configuration Consistency and Documentation

The vendor file's documentation shows example configuration values (idle time of 270 seconds and timeout of 15 seconds), but your application is actually configured in two places:

  • app/scripts/app.js: Sets idle time to 1800 seconds.
  • app/scripts/controllers/main.js: Sets idle time to 1800 seconds and timeout time to 10 seconds.

Since the vendor file is provided for reference and should not be modified directly, it's advisable to update your application's documentation to clearly state that you are using 1800 seconds for idle time and 10 seconds for the timeout. This will ensure that the session timeout requirements are transparently communicated to your team and future maintainers.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~4-~4: A comma might be missing here.
Context: ...e and perform certain actions when this happens like warning them about this inactivity...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[uncategorized] ~4-~4: A comma might be missing here.
Context: ...s inactivity or logging them out of the application for example. ### This module requires ...

(AI_EN_LECTOR_MISSING_PUNCTUATION_COMMA)


[uncategorized] ~13-~13: Possible missing comma found.
Context: ...ar-idle-service depends on AngularJS to work you need to reference the script after ...

(AI_HYDRA_LEO_MISSING_COMMA)


[grammar] ~171-~171: Please check the verb form.
Context: ...Back This event fires when the user has return from idle, and before being considered ...

(SHE_LIVE)

app/bower_components/angular-material/modules/closure/button/button.css (1)

1-196: LGTM!

This is a vendor file from the Angular Material library that provides essential styles for button components. The file should not be modified directly.

🧰 Tools
🪛 Biome (1.9.4)

[error] 192-192: Don't use unknown media feature names.

Unexpected unknown media feature name.
You should use media feature names defined in the CSS Specifications.

(lint/correctness/noUnknownMediaFeatureName)

app/bower_components/angular-material/layouts/angular-material.layout-attributes.scss (1)

119-120: Update the comment about gulp-sass.

The comment about gulp-sass failing is outdated and should be verified with current tooling.

✅ Verification successful

🌐 Web query:

What is the current status of gulp-sass line splitting support?

💡 Result:

gulp-sass currently supports line splitting through Sass's output style configuration, though implementation details depend on the Sass compiler and gulp-sass version in use. Here's the key information:

  1. Configuration via style option
    In gulp-sass v6+, line splitting is controlled using:

    .pipe(sass({ style: 'expanded' }).on('error', sass.logError))

    The outputStyle parameter was renamed to style in recent versions[3][6].

  2. Compiler dependencies
    Line splitting behavior ultimately depends on your chosen Sass compiler:

    • Dart Sass (recommended) fully supports all output styles including expanded (with line breaks) and compressed[3][6]
    • Node Sass (legacy) has similar capabilities but is deprecated[3][7]
  3. Current best practices
    For modern implementations:

    const sass = require('gulp-sass')(require('sass'));
    
    function buildStyles() {
      return gulp.src('./src/**/*.scss')
        .pipe(sass({ style: 'expanded' })) // Expanded = line splits
        .pipe(gulp.dest('./dist/css'));
    }

    Synchronous compilation with sass.sync() is recommended for better performance[3][6].

  4. Troubleshooting
    If line splitting isn't working:

    1. Verify you're using Dart Sass v1.67+
    2. Check for conflicting PostCSS plugins
    3. Ensure no minification plugins are overriding the style[6][8]

The current stable release (v6.x as of 2025) maintains full support for CSS formatting options through Dart Sass integration[3][9]. Migrate from legacy versions using the official guide to avoid deprecated features[3][7].

Citations:


Update outdated gulp-sass comment with current status

The web query confirms that modern versions of gulp-sass (v6+ with Dart Sass) fully support splitting definitions across multiple lines when using the appropriate output style (e.g., using style: 'expanded'). The comment is outdated and should be updated or removed to reflect this.

  • File: app/bower_components/angular-material/layouts/angular-material.layout-attributes.scss, Lines 119-120
  • Action: Revise or remove the outdated note regarding gulp-sass failures with multiline definitions
NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/dao/KilkariUsageMotherDao.java (2)

1-14: LGTM! Well-structured interface.

The interface follows the single responsibility principle and has a clear, well-defined method signature.


1-14: LGTM! Well-structured interface.

The interface is well-defined with clear method signature and appropriate parameters.

app/bower_components/angular-material/modules/closure/card/card.js (2)

1-6: LGTM! Well-documented module header.

The file header properly documents the license and version information.


16-20: LGTM! Clean module definition.

The module is properly defined with its dependency on 'material.core'.

app/bower_components/angular-material/angular-material-mocks.js (1)

42-60: LGTM! Well-implemented cache factory.

The cache factory implementation using $cacheFactory is clean and follows Angular best practices.

Comment on lines +6 to +17
declare module mdo.cryptography {
interface ICryptService {
encrypt(message: string);
encrypt(message: string, key: string);
decrypt(message: string);
decrypt(message: string, key: string);
}

interface ICryptProvider {
setCryptographyKey(key: string);
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Update deprecated TypeScript syntax and improve type safety.

  1. Replace the deprecated module keyword with namespace
  2. Add return type annotations to interface methods
  3. Consider simplifying method overloads using optional parameters

Apply this diff to address the issues:

-declare module mdo.cryptography {
+declare namespace mdo.cryptography {
     interface ICryptService {
-        encrypt(message: string);
-        encrypt(message: string, key: string);
-        decrypt(message: string);
-        decrypt(message: string, key: string);
+        encrypt(message: string, key?: string): string;
+        decrypt(message: string, key?: string): string;
     }

     interface ICryptProvider {
-        setCryptographyKey(key: string);
+        setCryptographyKey(key: string): void;
     }
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
declare module mdo.cryptography {
interface ICryptService {
encrypt(message: string);
encrypt(message: string, key: string);
decrypt(message: string);
decrypt(message: string, key: string);
}
interface ICryptProvider {
setCryptographyKey(key: string);
}
}
declare namespace mdo.cryptography {
interface ICryptService {
encrypt(message: string, key?: string): string;
decrypt(message: string, key?: string): string;
}
interface ICryptProvider {
setCryptographyKey(key: string): void;
}
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 6-6: Use the namespace keyword instead of the outdated module keyword.

The module keyword is deprecated to avoid any confusion with the ECMAScript modules which are often called modules.
Safe fix: Use namespace instead.

(lint/suspicious/useNamespaceKeyword)

* AngularJS Material Design
* https://github.com/angular/material
* @license MIT
* v1.1.9-master-41c9d00
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify the AngularJS Material version for updates.

The current version (v1.1.9-master-41c9d00) appears to be from a master branch. Consider using a stable release version.


🌐 Web query:

What is the latest stable version of AngularJS Material?

💡 Result:

The latest stable version of AngularJS Material is 1.2.5, released in September 2024[2]. This was the final release before AngularJS Material entered its Long Term Support (LTS) period and ultimately reached End-of-Life status in January 2022[1][7].

Key details:

  • Requires AngularJS 1.7.x to 1.8.x[1]
  • Includes accessibility improvements and bug fixes for components like autocomplete, datepicker, and dialog[2]
  • Migrated from node-sass to Dart Sass (sass) for SCSS compilation[2]
  • Contains IE11 compatibility fixes for layout and theming systems[4]

Though development has ceased, developers can still install this final version via:

npm install angular-material@1.2.5

or use CDN links referencing this version[1][10]. For modern Angular projects (v2+), Google recommends migrating to @angular/material instead[6].

Citations:


Update AngularJS Material Dependency

  • The file at app/bower_components/angular-material/modules/closure/button/button.min.css shows a version string of v1.1.9-master-41c9d00, which indicates a master branch build rather than a stable release.
  • According to the latest stable information, AngularJS Material's stable version is 1.2.5.
  • It is recommended to update the dependency to the stable release (v1.2.5) to benefit from the finalized features, bug fixes, and improved compatibility.

Comment on lines +7 to +8
$font-family: Roboto, 'Helvetica Neue', sans-serif !default;
$font-size: 10px !default;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider using a more accessible base font size.

The base font size of 10px is unconventional and may cause accessibility issues. Most browsers default to 16px, and reducing it to 10px could make text too small for some users.

-$font-size:   10px !default;
+$font-size:   16px !default;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
$font-family: Roboto, 'Helvetica Neue', sans-serif !default;
$font-size: 10px !default;
$font-family: Roboto, 'Helvetica Neue', sans-serif !default;
$font-size: 16px !default;

Comment on lines +23 to +24
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/github.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Update CDN links to use the latest stable versions.

The CDN links reference outdated versions of the libraries:

  • highlight.js v8.3 (from 2014)
  • AngularJS v1.2.26 (from 2014)

Using outdated versions may expose the application to security vulnerabilities.

Also applies to: 29-30


🌐 Web query:

What are the latest stable versions of highlight.js and AngularJS?

💡 Result:

The latest stable versions as of February 2025 are:

highlight.js
Current stable version: 11.11.1

  • Released December 2024[7][10]
  • Supports automatic language detection and includes updates for Rust grammar fixes[7]

Angular
Current stable version: 19.x

  • Version 19 released November 2024 with active support until May 2025[2][8]
  • Uses Ivy renderer by default and drops legacy View Engine[5][8]

AngularJS

  • Not actively supported - final major release was 1.8.x
  • All versions marked EOL by Google since December 2023[8]
  • Legacy framework replaced by modern Angular (v2+)[8]

Key differences:

Modern Angular Legacy AngularJS
Architecture Component-based MVC
Language TypeScript JavaScript
Latest Version v19 v1.8
Support Status Active Discontinued

For new projects requiring syntax highlighting with modern Angular (v17+), use ngx-highlightjs@14.x which supports highlight.js v11[3][6].

Citations:


Update outdated CDN links in the documentation.

The current CDN links in the README reference highlight.js v8.3 and AngularJS v1.2.26, both dating back to 2014. Based on the latest information:

  • highlight.js: Update the link to use version 11.11.1 (released December 2024) to benefit from improved language detection and bug fixes.
  • AngularJS: Although AngularJS is no longer actively supported (with its final major release being v1.8.x and EOL since December 2023), if the project continues to require AngularJS, update the documentation accordingly. Alternatively, consider migrating to modern Angular (v19 as of November 2024) along with using modules like ngx-highlightjs@14.x for syntax highlighting support.

Please update the links on lines 23–24 and 29–30 to reflect these versions and consider including a note about the migration paths or support status for AngularJS.

Comment on lines +38 to +41
angular.module.('app').config(['$cryptoProvider', function($cryptoProvider){
$cryptoProvider.setCryptographyKey('ABCD123');
});
```
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix configuration example syntax.

There's a syntax error in the Angular module configuration.

-angular.module.('app').config(['$cryptoProvider', function($cryptoProvider){
+angular.module('app').config(['$cryptoProvider', function($cryptoProvider){
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
angular.module.('app').config(['$cryptoProvider', function($cryptoProvider){
$cryptoProvider.setCryptographyKey('ABCD123');
});
```
angular.module('app').config(['$cryptoProvider', function($cryptoProvider){
$cryptoProvider.setCryptographyKey('ABCD123');
});
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

39-39: Hard tabs
Column: 1

(MD010, no-hard-tabs)

* - Captures flush exceptions from $$rAF
*
*/
(function(window, angular, undefined) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove parameter shadowing of global 'undefined'.

The parameter shadows the global 'undefined' property which could lead to confusion.

-(function(window, angular, undefined) {
+(function(window, angular) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
(function(window, angular, undefined) {
(function(window, angular) {
🧰 Tools
🪛 Biome (1.9.4)

[error] 15-15: Do not shadow the global "undefined" property.

Consider renaming this variable. It's easy to confuse the origin of variables when they're named after a known global.

(lint/suspicious/noShadowRestrictedNames)

Comment on lines +85 to +106
$delegate.flush = function() {
try { ngFlush(); }
catch(e) { ; }
};

return $delegate;
});

/**
* Capture $timeout.flush() errors: "No deferred tasks to be flushed"
* errors
*/
$provide.decorator('$timeout', function throttleInjector($delegate){

var ngFlush = $delegate.flush;
$delegate.flush = function() {
var args = Array.prototype.slice.call(arguments);
try { ngFlush.apply($delegate, args); }
catch(e) { }
};

return $delegate;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Consider adding error logging in catch blocks.

The catch blocks silently swallow errors which could make debugging difficult.

 catch(e) {
+  console.error('Error during flush:', e);
   ;
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
$delegate.flush = function() {
try { ngFlush(); }
catch(e) { ; }
};
return $delegate;
});
/**
* Capture $timeout.flush() errors: "No deferred tasks to be flushed"
* errors
*/
$provide.decorator('$timeout', function throttleInjector($delegate){
var ngFlush = $delegate.flush;
$delegate.flush = function() {
var args = Array.prototype.slice.call(arguments);
try { ngFlush.apply($delegate, args); }
catch(e) { }
};
return $delegate;
$delegate.flush = function() {
try { ngFlush(); }
catch(e) {
console.error('Error during flush:', e);
;
}
};
return $delegate;
});
/**
* Capture $timeout.flush() errors: "No deferred tasks to be flushed"
* errors
*/
$provide.decorator('$timeout', function throttleInjector($delegate){
var ngFlush = $delegate.flush;
$delegate.flush = function() {
var args = Array.prototype.slice.call(arguments);
try { ngFlush.apply($delegate, args); }
catch(e) { }
};
return $delegate;

Comment on lines +300 to +318
$http.get(src, {
cache: $templateCache,
transformResponse: function(data, headersGetter) {
// Return the raw string, so $http doesn't parse it
// if it's json.
return data;
}
}).success(function (code) {
if (thisChangeId !== changeCounter) {
return;
}
dfd.resolve(code);
}).error(function() {
if (thisChangeId === changeCounter) {
ctrl.clear();
}
dfd.resolve();
});
templateCachePromise = dfd.promise;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Enhance error handling in HTTP requests.

The error handling in the HTTP request could be more informative and provide better feedback.

 }).error(function() {
+  console.error('Failed to load source from:', src);
   if (thisChangeId === changeCounter) {
     ctrl.clear();
   }
   dfd.resolve();
 });
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
$http.get(src, {
cache: $templateCache,
transformResponse: function(data, headersGetter) {
// Return the raw string, so $http doesn't parse it
// if it's json.
return data;
}
}).success(function (code) {
if (thisChangeId !== changeCounter) {
return;
}
dfd.resolve(code);
}).error(function() {
if (thisChangeId === changeCounter) {
ctrl.clear();
}
dfd.resolve();
});
templateCachePromise = dfd.promise;
$http.get(src, {
cache: $templateCache,
transformResponse: function(data, headersGetter) {
// Return the raw string, so $http doesn't parse it
// if it's json.
return data;
}
}).success(function (code) {
if (thisChangeId !== changeCounter) {
return;
}
dfd.resolve(code);
}).error(function() {
console.error('Failed to load source from:', src);
if (thisChangeId === changeCounter) {
ctrl.clear();
}
dfd.resolve();
});
templateCachePromise = dfd.promise;

Comment on lines +341 to +346
if (compileCheck && compileCheck(scope)) {
// compile the new DOM and link it to the current scope.
// NOTE: we only compile .childNodes so that
// we don't get into infinite loop compiling ourselves
$compile(iElm.find('code').contents())(scope);
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Add safety checks before compilation.

Add additional safety checks before compiling dynamic content.

-if (compileCheck && compileCheck(scope)) {
+if (compileCheck?.(scope) && iElm.find('code').length) {
   $compile(iElm.find('code').contents())(scope);
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (compileCheck && compileCheck(scope)) {
// compile the new DOM and link it to the current scope.
// NOTE: we only compile .childNodes so that
// we don't get into infinite loop compiling ourselves
$compile(iElm.find('code').contents())(scope);
}
if (compileCheck?.(scope) && iElm.find('code').length) {
// compile the new DOM and link it to the current scope.
// NOTE: we only compile .childNodes so that
// we don't get into infinite loop compiling ourselves
$compile(iElm.find('code').contents())(scope);
}
🧰 Tools
🪛 Biome (1.9.4)

[error] 341-341: Change to an optional chain.

Unsafe fix: Change to an optional chain.

(lint/complexity/useOptionalChain)

Comment on lines +1 to +47
package com.beehyv.nmsreporting.dao.impl;

import com.beehyv.nmsreporting.dao.AbstractDao;
import com.beehyv.nmsreporting.dao.KilkariUsageMotherDao;
import com.beehyv.nmsreporting.model.KilkariUsageMother;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
* Created by beehyv on 27/02/25.
*/
@Repository("usageMotherDao")
public class KilkariUsageMotherDaoImpl extends AbstractDao<Integer, KilkariUsageMother> implements KilkariUsageMotherDao {

@Override
public KilkariUsageMother getUsage(Integer locationId, String locationType, Date toDate, String periodType){

Criteria criteria = createEntityCriteria().addOrder(Order.asc("locationId"));
criteria.add(Restrictions.and(
Restrictions.eq("locationId",locationId.longValue()),
Restrictions.eq("locationType",locationType),
Restrictions.eq("periodType",periodType),
Restrictions.eq("date",toDate)
));
List<KilkariUsageMother> result = criteria.list();
if(result.isEmpty()){
Long a = (long)0;
KilkariUsageMother kilkariUsageMother = new KilkariUsageMother(0,locationType,locationId.longValue(),toDate,a,a,a,a,a,a,a,"");
return kilkariUsageMother;
}
KilkariUsageMother kilkariUsageMother = result.get(0);
kilkariUsageMother.setCalls_1_25(kilkariUsageMother.getCalls_1_25() == null ? 0 : kilkariUsageMother.getCalls_1_25());
kilkariUsageMother.setCalls_25_50(kilkariUsageMother.getCalls_25_50() == null ? 0 : kilkariUsageMother.getCalls_25_50());
kilkariUsageMother.setCalls_50_75(kilkariUsageMother.getCalls_50_75() == null ? 0 : kilkariUsageMother.getCalls_50_75());
kilkariUsageMother.setCalls_75_100(kilkariUsageMother.getCalls_75_100() == null ? 0 : kilkariUsageMother.getCalls_75_100());
kilkariUsageMother.setCalledInbox(kilkariUsageMother.getCalledInbox() == null ? 0 : kilkariUsageMother.getCalledInbox());
kilkariUsageMother.setAnsweredAtleastOneCall(kilkariUsageMother.getAnsweredAtleastOneCall() == null ? 0 : kilkariUsageMother.getAnsweredAtleastOneCall());
kilkariUsageMother.setTotalBeneficiariesCalled(kilkariUsageMother.getTotalBeneficiariesCalled() == null ? 0 : kilkariUsageMother.getTotalBeneficiariesCalled());
return kilkariUsageMother;
}

}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Extract common functionality to a base class.

This implementation is nearly identical to KilkariUsageChildDaoImpl. Consider creating a common base class to reduce code duplication.

Example refactor:

@MappedSuperclass
public abstract class AbstractKilkariUsageDao<T> extends AbstractDao<Integer, T> {
    protected static final long DEFAULT_COUNT = 0L;
    protected static final int DEFAULT_ID = 0;

    protected T getUsageInternal(Integer locationId, String locationType, 
                               Date toDate, String periodType,
                               Function<Object[], T> constructor) {
        Criteria criteria = createEntityCriteria()
            .addOrder(Order.asc("locationId"))
            .add(Restrictions.and(
                Restrictions.eq("locationId", locationId.longValue()),
                Restrictions.eq("locationType", locationType),
                Restrictions.eq("periodType", periodType),
                Restrictions.eq("date", toDate)
            ));
            
        return Optional.ofNullable(criteria.uniqueResult())
            .map(result -> {
                T usage = (T) result;
                initializeNullMetrics(usage);
                return usage;
            })
            .orElseGet(() -> createDefaultUsage(locationId, locationType, 
                                               toDate, constructor));
    }

    protected abstract void initializeNullMetrics(T usage);
    protected abstract T createDefaultUsage(Integer locationId, 
        String locationType, Date toDate, Function<Object[], T> constructor);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants