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

[Templates] Charts functionality #3548

Merged
merged 5 commits into from
Mar 8, 2024
Merged

[Templates] Charts functionality #3548

merged 5 commits into from
Mar 8, 2024

Conversation

ThuF
Copy link
Contributor

@ThuF ThuF commented Mar 6, 2024

Overview

  • https://www.chartjs.org is used as a framework for the charts.
  • Adds support for Bar, Line, Pie, Doughnut, Polar Area and Radar charts.
  • Support of multiple datasets (multiple properties in the entity/report definition).
    • For better visualization of the Pie and Doughnut charts use single dataset (just one property in the entity/report definition).

Demo

charts-demo.mp4

Chart Data Queries

Data Count

select count(*) from
(
    select PROJECT_NAME as "Project",
        sum(TIMESHEET_HOURS) as "TotalHours",
        convert(avg(TIMESHEET_RATE), float) as "AverageRate",
        convert(sum(TIMESHEET_HOURS * TIMESHEET_RATE), float) AS "Total"
    from ${tablePrefix}PROJECT, ${tablePrefix}PROJECTASSIGNMENT, ${tablePrefix}TIMESHEET
    where PROJECT_ID = PROJECTASSIGNMENT_PROJECT and PROJECTASSIGNMENT_ID = TIMESHEET_PROJECTASSIGNMENT
    ${
        filter.Project && filter.StartPeriod && filter.EndPeriod ?
            'and PROJECT_ID = ? and TIMESHEET_STARTPERIOD >= ? and TIMESHEET_ENDPERIOD <= ?'
        :
        filter.Project && filter.StartPeriod ?
            'and PROJECT_ID = ? and TIMESHEET_STARTPERIOD >= ?'
        :
        filter.Project && filter.EndPeriod ?
            'and PROJECT_ID = ? and TIMESHEET_ENDPERIOD <= ?'
        :
        filter.StartPeriod && filter.EndPeriod ?
            'and TIMESHEET_STARTPERIOD >= ? and TIMESHEET_ENDPERIOD <= ?'
        :
        filter.Project ?
            'and PROJECT_ID = ?'
        :
        filter.StartPeriod ?
            'and TIMESHEET_STARTPERIOD >= ?'
        :
        filter.EndPeriod ?
            'and TIMESHEET_ENDPERIOD <= ?'
        :
            ''
    }
    group by PROJECT_NAME
)

Data Query

select PROJECT_NAME as "Project",
    sum(TIMESHEET_HOURS) as "TotalHours",
    convert(avg(TIMESHEET_RATE), float) as "AverageRate",
    convert(sum(TIMESHEET_HOURS * TIMESHEET_RATE), float) AS "Total"
from ${tablePrefix}PROJECT, ${tablePrefix}PROJECTASSIGNMENT, ${tablePrefix}TIMESHEET
where PROJECT_ID = PROJECTASSIGNMENT_PROJECT and PROJECTASSIGNMENT_ID = TIMESHEET_PROJECTASSIGNMENT
${
    filter.Project && filter.StartPeriod && filter.EndPeriod ?
        'and PROJECT_ID = ? and TIMESHEET_STARTPERIOD >= ? and TIMESHEET_ENDPERIOD <= ?'
    :
    filter.Project && filter.StartPeriod ?
        'and PROJECT_ID = ? and TIMESHEET_STARTPERIOD >= ?'
    :
    filter.Project && filter.EndPeriod ?
        'and PROJECT_ID = ? and TIMESHEET_ENDPERIOD <= ?'
    :
    filter.StartPeriod && filter.EndPeriod ?
        'and TIMESHEET_STARTPERIOD >= ? and TIMESHEET_ENDPERIOD <= ?'
    :
    filter.Project ?
        'and PROJECT_ID = ?'
    :
    filter.StartPeriod ?
        'and TIMESHEET_STARTPERIOD >= ?'
    :
    filter.EndPeriod ?
        'and TIMESHEET_ENDPERIOD <= ?'
    :
        ''
}
group by PROJECT_NAME
${
    filter["$limit"] && filter["$offset"] ?
        'limit ? offset ?'
    :
    filter["$limit"] ?
        'limit ?'
    :
    filter["$offset"] ?
        'offset ?'
    :
        ''
}

Bar Chart

Screenshot 2024-03-08 at 19 12 14

Line Chart

Screenshot 2024-03-08 at 19 26 31

Pie Chart

Screenshot 2024-03-08 at 19 28 42

Pie Chart (Single Dataset)

Screenshot 2024-03-08 at 19 37 45

Doughnut Chart

Screenshot 2024-03-08 at 19 27 58

Doughnut Chart (Single Dataset)

Screenshot 2024-03-08 at 19 36 55

Polar Area

Screenshot 2024-03-08 at 19 32 19

Radar

Screenshot 2024-03-08 at 19 33 55

Fixes: #3307

@ThuF
Copy link
Contributor Author

ThuF commented Mar 8, 2024

TODO

  • Consider using WebJar instead of CDN:

    "org.webjars.npm" % "chart.js" % "4.4.2"
    
    <dependency>
      <groupId>org.webjars.npm</groupId>
      <artifactId>chart.js</artifactId>
      <version>4.4.2</version>
    </dependency>

Currently the CDN distribution is being used, as using the WebJar results into the following error:

Screenshot 2024-03-08 at 19 45 22
		<!-- <script src="/webjars/chart.js/4.4.2/dist/chart.js"></script> -->
		<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

@ThuF ThuF marked this pull request as ready for review March 8, 2024 17:46
@ThuF ThuF merged commit 87cd042 into master Mar 8, 2024
7 checks passed
@ThuF ThuF deleted the edm-charts branch March 8, 2024 17:46
@ThuF ThuF mentioned this pull request Mar 25, 2024
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.

[Templates] Charts functionality
1 participant