0% found this document useful (0 votes)
7 views11 pages

Dashboard Maturity

The document outlines an ASP.NET web page for an Investments Dashboard, featuring filters for investment status, type, maturity date, and interest rates. It includes summary cards for today's and upcoming maturities, charts for visual data representation, and a grid view for detailed maturity information. The page is designed with Bootstrap for responsive layout and utilizes Chart.js for graphical displays.

Uploaded by

teemutuke
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views11 pages

Dashboard Maturity

The document outlines an ASP.NET web page for an Investments Dashboard, featuring filters for investment status, type, maturity date, and interest rates. It includes summary cards for today's and upcoming maturities, charts for visual data representation, and a grid view for detailed maturity information. The page is designed with Bootstrap for responsive layout and utilizes Chart.js for graphical displays.

Uploaded by

teemutuke
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 11

<%@ Page Language="vb" AutoEventWireup="true" CodeBehind="Maturities2.aspx.

vb"
Inherits="Ticket_Help_Desk_System.Maturities2" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Investments Dashboard</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/
all.min.css" rel="stylesheet" />

<style>
.card {
transition: transform 0.3s ease, box-shadow 0.3s ease;
border-radius: 15px;
}

.card:hover {
transform: translateY(-5px);
box-shadow: 0 6px 15px rgba(0, 0, 0, 0.2);
}

.card i {
opacity: 0.9;
}

.chart-container {
position: relative;
margin: auto;
height: 400px;
width: 100%;
}

.current-date {
font-size: 1.1rem;
color: #6c757d;
margin-bottom: 1rem;
}

.table th {
background-color: #f8f9fa;
}

.table td, .table th {


text-align: center;
}

.filter-section {
margin-bottom: 20px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="container mt-4">
<!-- Header Section with Current Date -->
<div class="row mb-3 align-items-center">
<div class="col-md-6">
<h2>Investments Dashboard</h2>
</div>
<div class="col-md-6 text-right">
<asp:Label ID="lblCurrentDate" runat="server"
CssClass="current-date"></asp:Label>
</div>
</div>

<!-- Filter Section -->


<div class="row filter-section">
<!-- Status Filter -->
<div class="col-md-3">
<label for="ddlStatusFilter">Filter by Status</label>
<asp:DropDownList ID="ddlStatusFilter" runat="server"
CssClass="form-control" AutoPostBack="True" OnSelectedIndexChanged="ApplyFilters">
<asp:ListItem Text="All" Value="All" />
<asp:ListItem Text="Active" Value="IM" />
<asp:ListItem Text="Matured" Value="IB" />
</asp:DropDownList>
</div>

<!-- Investment Type Filter -->


<div class="col-md-3">
<label for="ddlAssetType">Investment Type</label>
<asp:DropDownList ID="ddlAssetType" runat="server"
CssClass="form-control" AutoPostBack="True" OnSelectedIndexChanged="ApplyFilters">
<asp:ListItem Text="All" Value="All" />
<asp:ListItem Text="Money Market" Value="MMKT" />
<asp:ListItem Text="Stocks" Value="EQTY" />
</asp:DropDownList>
</div>

<!-- Maturity Date Range -->


<div class="col-md-3">
<label for="txtFromDate">From Date</label>
<asp:TextBox ID="txtFromDate" runat="server" CssClass="form-
control" TextMode="Date"></asp:TextBox>
</div>
<div class="col-md-3">
<label for="txtToDate">To Date</label>
<asp:TextBox ID="txtToDate" runat="server" CssClass="form-
control" TextMode="Date"></asp:TextBox>
</div>
</div>

<!-- Interest Rate Filter and Apply Button -->


<div class="row filter-section">
<!-- Interest Rate Filter -->
<div class="col-md-3">
<label for="txtMinRate">Min Rate (%)</label>
<asp:TextBox ID="txtMinRate" runat="server" CssClass="form-
control" TextMode="Number"></asp:TextBox>
</div>
<div class="col-md-3">
<label for="txtMaxRate">Max Rate (%)</label>
<asp:TextBox ID="txtMaxRate" runat="server" CssClass="form-
control" TextMode="Number"></asp:TextBox>
</div>

<!-- Apply Filter Button -->


<div class="col-md-3">
<label>&nbsp;</label>
<asp:Button ID="btnApplyFilters" runat="server" Text="Apply
Filters" CssClass="btn btn-primary btn-block" OnClick="ApplyFilters" />
</div>
</div>

<!-- Summary Cards -->


<div class="row">
<!-- Today's Maturities -->
<div class="col-md-4">
<div class="card bg-warning text-white shadow-lg rounded-lg">
<div class="card-body text-center">
<i class="fas fa-calendar-day fa-3x mb-3"></i>
<h5 class="card-title font-weight-bold">Today's
Maturities</h5>
<h3 class="display-4">
<asp:Label ID="lblTodayMaturityCount"
runat="server" Text="0"></asp:Label>
</h3>
<p class="mb-0">Total Value:</p>
<h4>
<asp:Label ID="lblTodayMaturityValue"
runat="server" Text="$0.00"></asp:Label>
</h4>
</div>
</div>
</div>

<!-- Upcoming Maturities -->


<div class="col-md-4">
<div class="card bg-primary text-white shadow-lg rounded-lg">
<div class="card-body text-center">
<i class="fas fa-hourglass-half fa-3x mb-3"></i>
<h5 class="card-title font-weight-bold">Upcoming
Maturities</h5>
<h3 class="display-4">
<asp:Label ID="lblUpcomingMaturityCount"
runat="server" Text="0"></asp:Label>
</h3>
<p class="mb-0">Total Value:</p>
<h4>
<asp:Label ID="lblUpcomingMaturityValue"
runat="server" Text="$0.00"></asp:Label>
</h4>
</div>
</div>
</div>

<!-- Equities Maturities -->


<div class="col-md-4">
<div class="card bg-success text-white shadow-lg rounded-lg">
<div class="card-body text-center">
<i class="fas fa-chart-line fa-3x mb-3"></i>
<h5 class="card-title font-weight-bold">Equities
Maturities</h5>
<h3 class="display-4">
<asp:Label ID="Label1" runat="server"
Text="0"></asp:Label>
</h3>
<p class="mb-0">Total Value:</p>
<h4>
<asp:Label ID="Label2" runat="server"
Text="$0.00"></asp:Label>
</h4>
</div>
</div>
</div>
</div>

<!-- Chart Section -->


<div class="row">
<!-- Bar Chart -->
<div class="col-md-6">
<div class="chart-container">
<canvas id="investmentChart"></canvas>
<asp:Literal ID="litChartData" runat="server"
Visible="false"></asp:Literal>
</div>
</div>

<!-- Pie Chart -->


<div class="col-md-6">
<div class="chart-container">
<canvas id="pieChart"></canvas>
<asp:Literal ID="litPieChartData" runat="server"
Visible="false"></asp:Literal>
</div>
</div>
</div>

<!-- GridView for Maturities -->


<asp:GridView ID="gvMaturities" runat="server" CssClass="table table-
striped table-hover"
AutoGenerateColumns="false" AllowSorting="true"
OnSorting="gvMaturities_Sorting"
AllowPaging="true" PageSize="10"
OnPageIndexChanging="gvMaturities_PageIndexChanging">
<Columns>
<asp:BoundField DataField="InvestmentID" HeaderText="Investment
ID" SortExpression="InvestmentID" />
<asp:BoundField DataField="AssetName" HeaderText="Investment
Type" SortExpression="AssetName" />
<asp:BoundField DataField="Amount" HeaderText="Maturity Value"
SortExpression="Amount" />
<asp:BoundField DataField="MaturityDate" HeaderText="Maturity
Date" SortExpression="MaturityDate" DataFormatString="{0:yyyy-MM-dd}" />
<asp:BoundField DataField="Status" HeaderText="Status"
SortExpression="Status" />
<asp:BoundField DataField="D_TranDate" HeaderText="Transaction
Date" SortExpression="D_TranDate" DataFormatString="{0:yyyy-MM-dd}" />
<asp:BoundField DataField="M_Interest" HeaderText="Interest
Amount" SortExpression="M_Interest" />
<asp:BoundField DataField="C_AssetID" HeaderText="Asset ID"
SortExpression="C_AssetID" />
<asp:BoundField DataField="C_Other" HeaderText="Other Details"
SortExpression="C_Other" />
<asp:BoundField DataField="M_NominalValue" HeaderText="Nominal
Value" SortExpression="M_NominalValue" DataFormatString="{0:N2}" />
<asp:BoundField DataField="N_Rate" HeaderText="Rate (%)"
SortExpression="N_Rate" DataFormatString="{0:N2}" />
</Columns>
</asp:GridView>

<!-- Breakdown by Asset Class -->


<h3>Breakdown by Asset Class</h3>
<asp:GridView ID="gvAssetBreakdown" runat="server" CssClass="table
table-striped table-hover" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="AssetClass" HeaderText="Asset Class"
/>
<asp:BoundField DataField="TodayValue" HeaderText="Today's
Maturity Value" DataFormatString="{0:C}" />
<asp:BoundField DataField="UpcomingValue" HeaderText="Upcoming
Maturity Value" DataFormatString="{0:C}" />
</Columns>
</asp:GridView>
</div>

<!-- Chart.js Script -->


<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
// Bar Chart
var barChartData = JSON.parse('<%= litChartData.Text %>');
var barCtx =
document.getElementById('investmentChart').getContext('2d');
var barChart = new Chart(barCtx, {
type: 'bar',
data: {
labels: barChartData.map(data => data.Label),
datasets: [{
label: 'Total Maturity Value',
data: barChartData.map(data => data.Count),
backgroundColor: 'blue'
}]
}
});

// Pie Chart
var pieChartData = JSON.parse('<%= litPieChartData.Text %>');
var pieCtx = document.getElementById('pieChart').getContext('2d');
var pieChart = new Chart(pieCtx, {
type: 'pie',
data: {
labels: pieChartData.map(data => data.Label),
datasets: [{
label: 'Asset Distribution',
data: pieChartData.map(data => data.Count),
backgroundColor: [
'rgba(255, 99, 132, 0.6)',
'rgba(54, 162, 235, 0.6)',
'rgba(255, 206, 86, 0.6)',
'rgba(75, 192, 192, 0.6)',
'rgba(153, 102, 255, 0.6)'
]
}]
}
});
</script>
</form>
</body>
</html>

Imports System
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Web.UI.DataVisualization.Charting
Imports System.Web.Script.Serialization

Partial Class Maturities2


Inherits System.Web.UI.Page

Private connectionString As String =


ConfigurationManager.ConnectionStrings("DefaultConnection").ConnectionString

Private Property GridSortExpression() As String


Get
If ViewState("SortExpression") IsNot Nothing Then
Return ViewState("SortExpression").ToString()
Else
Return "N_ID"
End If
End Get
Set(ByVal value As String)
ViewState("SortExpression") = value
End Set
End Property

Private Property GridSortDirection() As String


Get
If ViewState("SortDirection") IsNot Nothing Then
Return ViewState("SortDirection").ToString()
Else
Return "ASC"
End If
End Get
Set(ByVal value As String)
ViewState("SortDirection") = value
End Set
End Property

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load


If Not IsPostBack Then
BindMaturitiesGrid()
BindCardsData()
BindChartData()
BindPieChartData()

lblCurrentDate.Text = DateTime.Now.ToString("dddd, MMMM dd, yyyy")


End If
End Sub

Private Sub BindMaturitiesGrid()


Dim dt As New DataTable()
Dim filterStatus As String = ddlStatusFilter.SelectedValue

Using conn As New SqlConnection(connectionString)


Dim query As String = "SELECT N_ID AS InvestmentID, C_InvestType AS
AssetName, D_MaturityDate AS MaturityDate, " &
"M_MaturityValue AS Amount, C_Status AS Status, D_TranDate,
M_Interest, C_AssetID, C_Other, " &
"M_NominalValue, N_Rate " &
"FROM Investments"

If filterStatus <> "All" Then


query &= " WHERE C_Status = @Status"
End If

query &= " ORDER BY D_MaturityDate"


Using cmd As New SqlCommand(query, conn)
If filterStatus <> "All" Then
cmd.Parameters.AddWithValue("@Status", filterStatus)
End If
Using da As New SqlDataAdapter(cmd)
da.Fill(dt)
End Using
End Using
End Using

gvMaturities.DataSource = dt
gvMaturities.DataBind()
End Sub

Protected Sub ddlStatusFilter_SelectedIndexChanged(sender As Object, e As


EventArgs)
BindMaturitiesGrid()
End Sub

Private Sub BindCardsData()


Using conn As New SqlConnection(connectionString)
Dim query As String = "SELECT
SUM(CASE WHEN D_MaturityDate = CAST(GETDATE() AS DATE) THEN 1 ELSE 0
END) AS TodayCount,
SUM(CASE WHEN D_MaturityDate = CAST(GETDATE() AS DATE) THEN
M_MaturityValue ELSE 0 END) AS TodayValue,
SUM(CASE WHEN D_MaturityDate > CAST(GETDATE() AS DATE) THEN 1 ELSE 0
END) AS UpcomingCount,
SUM(CASE WHEN D_MaturityDate > CAST(GETDATE() AS DATE) THEN
M_MaturityValue ELSE 0 END) AS UpcomingValue
FROM Investments"

Using cmd As New SqlCommand(query, conn)


conn.Open()
Dim reader As SqlDataReader = cmd.ExecuteReader()
If reader.Read() Then
lblTodayMaturityCount.Text = reader("TodayCount").ToString()
lblTodayMaturityValue.Text =
FormatCurrency(reader("TodayValue"))
lblUpcomingMaturityCount.Text =
reader("UpcomingCount").ToString()
lblUpcomingMaturityValue.Text =
FormatCurrency(reader("UpcomingValue"))
End If
conn.Close()
End Using
End Using

End Sub

Private Sub BindChartData()


Dim dt As New DataTable()
Using conn As New SqlConnection(connectionString)
Dim query As String = "SELECT FORMAT(D_MaturityDate, 'yyyy-MM') AS
MaturityMonth, SUM(M_MaturityValue) AS TotalMaturity FROM Investments GROUP BY
FORMAT(D_MaturityDate, 'yyyy-MM') ORDER BY MaturityMonth"

Using cmd As New SqlCommand(query, conn)


Using da As New SqlDataAdapter(cmd)
da.Fill(dt)
End Using
End Using
End Using

Dim chartPoints As New List(Of ChartDataPoint)()


For Each row As DataRow In dt.Rows
chartPoints.Add(New ChartDataPoint With {.Label =
row("MaturityMonth").ToString(), .Count = Convert.ToInt32(row("TotalMaturity"))})
Next

Dim serializer As New JavaScriptSerializer()


litChartData.Text = serializer.Serialize(chartPoints)
End Sub

Private Sub BindAssetBreakdown()


Dim dt As New DataTable()
Using conn As New SqlConnection(connectionString)
Dim query As String = "SELECT
C_InvestType AS AssetClass,
SUM(CASE WHEN D_MaturityDate = CAST(GETDATE() AS DATE) THEN
M_MaturityValue ELSE 0 END) AS TodayValue,
SUM(CASE WHEN D_MaturityDate > CAST(GETDATE() AS DATE) THEN
M_MaturityValue ELSE 0 END) AS UpcomingValue
FROM Investments
GROUP BY C_InvestType"

Using cmd As New SqlCommand(query, conn)


Using da As New SqlDataAdapter(cmd)
da.Fill(dt)
End Using
End Using
End Using

gvAssetBreakdown.DataSource = dt
gvAssetBreakdown.DataBind()
End Sub
Protected Sub gvMaturities_RowDataBound(sender As Object, e As
GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim maturityDate As DateTime =
Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "MaturityDate"))
Dim timeRemaining As TimeSpan = maturityDate - DateTime.Now

If timeRemaining.TotalDays < 0 Then


e.Row.CssClass = "overdue"
ElseIf timeRemaining.TotalDays <= 7 Then
e.Row.CssClass = "urgent"
ElseIf timeRemaining.TotalDays <= 14 Then
e.Row.CssClass = "warning"
End If
End If
End Sub

Protected Sub gvMaturities_Sorting(sender As Object, e As


GridViewSortEventArgs)
If GridSortExpression = e.SortExpression Then
GridSortDirection = If(GridSortDirection = "ASC", "DESC", "ASC")
Else
GridSortExpression = e.SortExpression
GridSortDirection = "ASC"
End If
BindMaturitiesGrid()
End Sub

Public Class ChartDataPoint


Public Property Label As String
Public Property Count As Integer
End Class

Protected Sub gvMaturities_PageIndexChanging(sender As Object, e As


GridViewPageEventArgs)
gvMaturities.PageIndex = e.NewPageIndex
BindMaturitiesGrid()
End Sub
Protected Sub ApplyFilters(ByVal sender As Object, ByVal e As EventArgs)
BindGridData()
End Sub

Private Sub BindGridData()


Dim query As String = "SELECT
N_InvID AS InvestmentID,
C_InvestType AS AssetName,
M_MaturityValue AS Amount,
D_MaturityDate AS MaturityDate,
C_Status AS Status,
D_TranDate,
M_Interest,
C_AssetID,
C_Other,
M_NominalValue,
N_Rate
FROM Investments WHERE 1=1"

' Apply Status Filter


If ddlStatusFilter.SelectedValue <> "All" Then
query &= " AND C_Status = @StatusFilter"
End If

' Apply Investment Type Filter


If ddlAssetType.SelectedValue <> "All" Then
query &= " AND C_InvestType = @AssetName"
End If

' Apply Maturity Date Range Filter


If Not String.IsNullOrEmpty(txtFromDate.Text) Then
query &= " AND D_MaturityDate >= @FromDate"
End If
If Not String.IsNullOrEmpty(txtToDate.Text) Then
query &= " AND D_MaturityDate <= @ToDate"
End If

query &= " ORDER BY D_MaturityDate"

Using conn As New SqlConnection(connectionString)


Using cmd As New SqlCommand(query, conn)
' Add Parameters
If ddlStatusFilter.SelectedValue <> "All" Then
cmd.Parameters.AddWithValue("@StatusFilter",
ddlStatusFilter.SelectedValue)
End If
If ddlAssetType.SelectedValue <> "All" Then
cmd.Parameters.AddWithValue("@AssetName",
ddlAssetType.SelectedValue)
End If
If Not String.IsNullOrEmpty(txtFromDate.Text) Then
cmd.Parameters.AddWithValue("@FromDate",
Convert.ToDateTime(txtFromDate.Text))
End If
If Not String.IsNullOrEmpty(txtToDate.Text) Then
cmd.Parameters.AddWithValue("@ToDate",
Convert.ToDateTime(txtToDate.Text))
End If

' Fill DataTable


Dim dt As New DataTable()
Using da As New SqlDataAdapter(cmd)
da.Fill(dt)
End Using

' Bind GridView


gvMaturities.DataSource = dt
gvMaturities.DataBind()
End Using
End Using
End Sub
Private Sub BindPieChartData()
Dim dt As New DataTable()
Using conn As New SqlConnection(connectionString)
Dim query As String = "SELECT C_InvestType AS AssetName,
SUM(M_MaturityValue) AS TotalValue FROM Investments GROUP BY C_InvestType"

Using cmd As New SqlCommand(query, conn)


Using da As New SqlDataAdapter(cmd)
da.Fill(dt)
End Using
End Using
End Using

Dim pieChartData As New List(Of ChartDataPoint)()


For Each row As DataRow In dt.Rows
pieChartData.Add(New ChartDataPoint With {
.Label = row("AssetName").ToString(),
.Count = Convert.ToInt32(row("TotalValue"))
})
Next

Dim serializer As New JavaScriptSerializer()


litPieChartData.Text = serializer.Serialize(pieChartData)
End Sub

End Class

You might also like