@page "/reports/issues"
@using Microsoft.AspNetCore.Authorization
@using TaskTrackingSystem.Shared
@using TaskTrackingSystem.Shared.Enums
@using TaskTrackingSystem.Shared.Models.Issue
@using TaskTrackingSystem.Shared.Models.Project
@rendermode @(new InteractiveServerRenderMode(prerender: false))
@attribute [Authorize]
@inject ApiClientService ApiClient
@inject IJSRuntime JS
@AppLocalization.PageDescription("issueReport", "Track daily execution, backlog health, and issue-level effort.")
| @AppLocalization.Text("common.issue", "Issue") | @AppLocalization.Text("common.taskProject", "Task / Project") | @AppLocalization.Text("common.assignee", "Assignee") | @AppLocalization.Text("common.status", "Status") | @AppLocalization.Text("common.hours", "Hours") | @AppLocalization.Text("common.dueDate", "Due") | @AppLocalization.Text("common.risk", "Risk") |
|---|---|---|---|---|---|---|
|
@if (expandedIssues.Contains(issue.Id))
{
@(string.IsNullOrWhiteSpace(issue.Description) ? AppLocalization.Text("common.noDescription", "No description") : issue.Description)
@AppLocalization.Text("report.delay", "Delay"): @(string.IsNullOrWhiteSpace(issue.DelayReason) ? AppLocalization.Text("common.noneRecorded", "None recorded") : issue.DelayReason)
@AppLocalization.Text("report.blockedBy", "Blocked by"): @(string.IsNullOrWhiteSpace(issue.BlockedBy) ? AppLocalization.Text("common.none", "None") : issue.BlockedBy)
|
@if (expandedTaskDetails.Contains(issue.Id))
{
@issue.TaskTitle
@issue.ProjectName
|
@(issue.AssignedToName ?? AppLocalization.Text("common.unassigned", "Unassigned")) | @GetStatusLabel(issue.StatusId) | @((issue.EstimatedHours ?? 0).ToString("N1")) / @((issue.ActualHours ?? 0).ToString("N1")) | @DisplayFormats.Date(issue.DueDate) | @RiskBadge(issue) |
{label}
{value}