(OLD)Task Management System

(OLD)Task Management System

TaskTypeMaster

Discuss Changes

  • No Need to add NOT NULL in CREATE TABLE
  • TaskTypeMaster > TaskFlowType, TaskFlowUser,TaskFlowPlan
  • CommitDate > CommitedDate

Overview

Task Type Master manages different categories of tasks in the Task Management System. It allows administrators to define and maintain task types that can be assigned to tasks.

Table Structure

CREATE TABLE TaskTypeMaster (
    Id INT PRIMARY KEY IDENTITY(1,1),
    TaskTypeId NVARCHAR(3) NOT NULL, - TaskTypeCode
    TaskTypeName NVARCHAR(25) NOT NULL,
    IsActive BIT NOT NULL DEFAULT 1 -- Take NVARCHAR (1) 'Y','N'
);

1. Index Page — Fields

Label NameProperty Name
Task Type IDTaskTypeId
Task Type NameTaskTypeName
Is ActiveIsActiveName
Actions
  • Create
  • Modify
  • Delete

2. Details Page — Fields

Label NameProperty Name
Task Type IDTaskTypeId
Task Type NameTaskTypeName
Is ActiveIsActiveName
Actions
  • Create
  • Modify
  • Delete

3. Modify Page — Fields

Label NameProperty NameEditable?
Task Type IDTaskTypeIdReadOnly
Task Type NameTaskTypeNameEditable
Is ActiveIsActiveEditable

4. Create Page — Fields

Label NameProperty Name
Task Type NameTaskTypeName

5. Model Class

public class TaskTypeMaster
{
    public int Id { get; set; }
    public string TaskTypeId { get; set; } = string.Empty;
    [Required(ErrorMessage = "Task Type Name needs to be filled.")]
    [StringLength(25, ErrorMessage = "Task Type Name can be upto 25 characters only.")]
    public string TaskTypeName { get; set; } = string.Empty;
    public bool IsActive { get; set; } = true;
    public string IsActiveName => IsActive ? "Yes" : "No"; //We will use Sql Only
}

Features

  • TaskTypeIndex
  • TaskTypeDetails
  • TaskTypeCreate
  • TaskTypeModify
  • TaskTypeDelete
  • TaskTypeValidateCreateModify
  • GetTaskTypeDeleteCount

File Names

  1. Controller: TaskTypeController
  2. Repository: TaskTypeRepository
  3. Service: TaskTypeService
  4. Razor Page: TaskTypeIndex, TaskTypeDetails, TaskTypeCreate, TaskTypeModify
  5. Method Names: TaskTypeIndex, TaskTypeDetails, TaskTypeCreate, TaskTypeModify, TaskTypeDelete, TaskTypeValidateCreateModify, GetTaskTypeDeleteCount

TaskUserMaster

Overview

Task User Master manages users who can be assigned tasks in the Task Management System. It links ERP users with task management capabilities and maintains their contact information.

Table Structure

CREATE TABLE TaskUserMaster (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    TaskUserId NVARCHAR(3) NOT NULL, -- TaskUserCode
    UserName NVARCHAR(25) NOT NULL,
    Email NVARCHAR(100) NOT NULL,
    Phone NVARCHAR(15) NOT NULL,
    ErpUserId NVARCHAR(8) NOT NULL,
    IsActive BIT NOT NULL DEFAULT 1
);

1. Index Page — Fields

Label NameProperty Name
Task User IDTaskUserId
User NameUserName
EmailEmail
PhonePhone
ERP UserErpUserName
Is ActiveIsActiveName
Actions
  • Create
  • Details
  • Modify
  • Delete

2. Details Page — Fields

Label NameProperty Name
Task User IDTaskUserId
User NameUserName
EmailEmail
PhonePhone
ERP UserErpUserName
Is ActiveIsActiveName
Actions
  • Create
  • Modify
  • Delete

3. Modify Page — Fields

Label NameProperty NameEditable?
Task User IDTaskUserIdReadOnly
User NameUserNameEditable
EmailEmailEditable
PhonePhoneEditable
ERP UserErpUserNameIdEditable
Is ActiveIsActiveEditable

4. Create Page — Fields

Label NameProperty Name
User NameUserName
EmailEmail
PhonePhone
ERP UserErpUserNameId

Changes

  • We will only all user of login db like udit_demo then only demo db user should show in combo
  • We will only show user Type U only

5. Model Class

public class TaskUserMaster
{
    public int Id { get; set; }
    public string TaskUserId { get; set; } = string.Empty;
    [Required(ErrorMessage = "User Name needs to be filled.")]
    [StringLength(25, ErrorMessage = "User Name can be upto 25 characters only.")]
    public string UserName { get; set; } = string.Empty;
    [Required(ErrorMessage = "Email needs to be filled.")]
    [EmailAddress(ErrorMessage = "Please enter a valid email address.")]
    public string Email { get; set; } = string.Empty;
    [Required(ErrorMessage = "Phone needs to be filled.")]
    [Phone(ErrorMessage = "Please enter a valid phone number.")]
    public string Phone { get; set; } = string.Empty;
    public string ErpUserId { get; set; } = string.Empty;
    public bool IsActive { get; set; } = true;
    public string IsActiveName => IsActive ? "Yes" : "No";
    public string ErpUserName { get; set; } = string.Empty; // For display
    [Required(ErrorMessage = "ERP User ID needs to be filled.")]
    public string ErpUserNameId { get; set; } = string.Empty; // For MudAutocomplete binding
}

Features

  • TaskUserMasterIndex
  • TaskUserMasterDetails
  • TaskUserMasterCreate
  • TaskUserMasterModify
  • TaskUserMasterDelete
  • TaskUserMasterValidateCreateModify
  • GetTaskUserMasterDeleteCount
  • ErpUserCombo

File Names

  1. Controller: TaskUserMasterController
  2. Repository: TaskUserMasterRepository
  3. Service: TaskUserMasterService
  4. Razor Page: TaskUserMasterIndex, TaskUserMasterDetails, TaskUserMasterCreate, TaskUserMasterModify
  5. Method Names: TaskUserMasterIndex, TaskUserMasterDetails, TaskUserMasterCreate, TaskUserMasterModify, TaskUserMasterDelete, TaskUserMasterValidateCreateModify, GetTaskUserMasterDeleteCount, ErpUserCombo

TaskPlanner

Overview

Task Planner is the main module for creating, assigning, tracking, and managing tasks in the Task Management System. It supports task lifecycle management, approval workflows, repeating tasks, and comprehensive reporting.

Table Structure

CREATE TABLE TaskPlanner (
    Id INT PRIMARY KEY IDENTITY(1,1),
    TaskId NVARCHAR(8) NOT NULL UNIQUE, -- TaskFlowPlanId
    TaskType NVARCHAR(3) NOT NULL, -- TaskFlowType
    RefTaskId NVARCHAR(8) NULL,
    Title NVARCHAR(50) NOT NULL,
    Description NVARCHAR(250) NULL,
    Priority NVARCHAR(10) NULL,
    AssignedBy NVARCHAR(3) NOT NULL,
    AssignedTo NVARCHAR(3) NOT NULL,
    AssignedByName NVARCHAR(25) NULL, -- No Need We will join with task Flow User Table
    AssignedToName NVARCHAR(25) NULL, -- No Need We will join with task Flow User Table
    StartDate DATETIME NOT NULL,
    TargetDate DATETIME NOT NULL,
    CommitDate DATETIME NULL, -- CommitedDate
    CompletedDate DATETIME NULL,
    Party NVARCHAR(6) NULL DEFAULT '000000', -- PartyId , DEFAULT No need 
    SoMfgDate DATETIME NULL, -- RefDate
    ItemRm NVARCHAR(6) NULL DEFAULT '000000', -- ItemRmId , DEFAULT No need 
    ItemFg NVARCHAR(6) NULL DEFAULT '000000', -- ItemFgId , DEFAULT No need 
    Quantity DECIMAL(18,3) NULL,
    IsRepeating BIT NOT NULL DEFAULT 0, -- NVARCHAR(1) , Y,N
    Frequency NVARCHAR(20) NULL,
    RepeatUntil DATETIME NULL,
    Status CHAR(1) NOT NULL DEFAULT 'T'
        CHECK (Status IN ('T', 'U', 'R', 'D')), -- NVARCHAR (1), No need of CHECK and DEFAULT
    RemarksAssigner NVARCHAR(500) NULL,
    RemarksAssignee NVARCHAR(500) NULL,
    CreatedAt DATETIME NOT NULL DEFAULT GETDATE(),
    UpdatedAt DATETIME NOT NULL DEFAULT GETDATE()
);

1. Index Page — Fields

Label NameProperty Name
Task IDTaskId
Task TypeTaskType
TitleTitle
Assigned ByAssignedByName
Assigned ToAssignedToName
Start DateStartDate
StatusStatusName
Actions
  • Create
  • Details
  • Modify
  • Delete

2. Details Page — Fields

Label NameProperty Name
Task IDTaskId
Task TypeTaskType
TitleTitle
DescriptionDescription
PriorityPriority
Assigned ByAssignedByName
Assigned ToAssignedToName
Start DateStartDate
Target DateTargetDate
Commit DateCommitDate
Completed DateCompletedDate
PartyParty
SO/MFG DateSoMfgDate
Item RMItemRm
Item FGItemFg
QuantityQuantity
StatusStatusName
Is RepeatingIsRepeating
FrequencyFrequency
Repeat UntilRepeatUntil
Reference Task IDRefTaskId
Remarks (Assigner)RemarksAssigner
Remarks (Assignee)RemarksAssignee
Actions
  • Create
  • Modify
  • Delete
  • Request Completion (if assignee and status = T)
  • Approve Completion (if assigner and status = I)
  • Rework Task (if assigner and status = I)
  • Make Repeating Task (if status = T and no RefTaskId)
    • When discuss in depth > right now we will delete all

3. Modify Page — Fields

Label NameProperty NameEditable?
Task IDTaskIdReadOnly
Task TypeTaskTypeReadOnly
TitleTitleReadOnly
DescriptionDescriptionEditable
PriorityPriorityEditable
Assigned ByAssignedByReadOnly
Assigned ToAssignedToReadOnly
Start DateStartDateReadOnly
Target DateTargetDateReadOnly
Commit DateCommitDateEditable (assignee only)
PartyPartyEditable
SO/MFG DateSoMfgDateEditable
Item RMItemRmEditable
Item FGItemFgEditable
QuantityQuantityEditable
Remarks (Assigner)RemarksAssignerEditable
Remarks (Assignee)RemarksAssigneeEditable

Changes

  • If Task Is Done Modify is not allowed.
  • We will have 2 page and will be implemeted in next part for assignee and Assigner
  • Admin user will not able to Assignee task , only he can manage

4. Create Page — Fields

Label NameProperty Name
Task TypeTaskType
TitleTitle
DescriptionDescription
PriorityPriority
Assigned ByAssignedBy
Assigned ToAssignedTo
Start DateStartDate
Target DateTargetDate
PartyParty
SO/MFG DateSoMfgDate
Item RMItemRm
Item FGItemFg
QuantityQuantity
Remarks (Assigner)RemarksAssigner

5. Model Class

public class TaskPlanner
{
    public int Id { get; set; }

    // Task Identification
    public string TaskId { get; set; } = string.Empty;
    [Required(ErrorMessage = "Task Type is required.")]
    public string TaskType { get; set; } = string.Empty;
    public string RefTaskId { get; set; } = string.Empty;

    // Task Details
    [Required(ErrorMessage = "Title is required.")]
    [StringLength(50, ErrorMessage = "Title cannot exceed 50 characters.")]
    public string Title { get; set; } = string.Empty;

    [StringLength(250, ErrorMessage = "Description cannot exceed 250 characters.")]
    public string Description { get; set; } = string.Empty;

    public string Priority { get; set; } = string.Empty; // Low/Medium/High

    // Assignment
    [Required(ErrorMessage = "Assigned By is required.")]
    public string AssignedBy { get; set; } = string.Empty;

    [Required(ErrorMessage = "Assigned To is required.")]
    public string AssignedTo { get; set; } = string.Empty;

    public string AssignedByName { get; set; } = string.Empty;
    public string AssignedToName { get; set; } = string.Empty;

    // Dates
    [Required(ErrorMessage = "Start Date is required.")]
    public DateTime StartDate { get; set; } = DateTime.Now;

    [Required(ErrorMessage = "Target Date is required.")]
    public DateTime TargetDate { get; set; } = DateTime.Now;

    public DateTime? CommitDate { get; set; } = DateTime.Now;
    public DateTime? CompletedDate { get; set; } = DateTime.Now;

    // ERP Integration
    public string Party { get; set; } = string.Empty;
    public DateTime? SoMfgDate { get; set; } = DateTime.Now;
    public string ItemRm { get; set; } = string.Empty;
    public string ItemFg { get; set; } = string.Empty;
    public decimal? Quantity { get; set; }

    // Repeating Configuration
    public bool IsRepeating { get; set; }
    public string Frequency { get; set; } = string.Empty; // Daily/Weekly/Monthly/Yearly
    public DateTime? RepeatUntil { get; set; } = DateTime.Now;

    // Status & Tracking
    public string Status { get; set; } = "T"; // T=ToDo, I=InReview, R=Rework, D=Done

    [StringLength(500, ErrorMessage = "Remarks cannot exceed 500 characters.")]
    public string RemarksAssigner { get; set; } = string.Empty;

    [StringLength(500, ErrorMessage = "Remarks cannot exceed 500 characters.")]
    public string RemarksAssignee { get; set; } = string.Empty;

    // Computed Properties
    public string StatusName => Status switch
    {
        "T" => "To Do",
        "I" => "In Review",
        "R" => "Rework",
        "D" => "Done",
        _ => "Unknown"
    };

    public bool IsOverdue => Status != "D" && TargetDate < DateTime.Today;
    public int DaysPending => Status != "D" ? (DateTime.Today - StartDate).Days : 0;
    public int DaysOverdue => IsOverdue ? (DateTime.Today - TargetDate).Days : 0;
}

Features

  • TaskPlannerIndex
  • TaskPlannerDetails
  • TaskPlannerValidateCreateModify
  • GenerateRepeatingTaskValidate
  • TaskPlannerCreate
  • TaskPlannerModify
  • TaskPlannerDelete
  • RequestCompletion
  • ApproveCompletion
  • ReworkTask
  • GenerateRepeatingTask
  • TaskTypeCombo
  • TaskUserCombo
  • PartyCombo
  • RmItemCombo
  • FgItemCombo
  • ItemCombo
  • GetTaskPlannerDeleteCount

File Names

  1. Controller: TaskPlannerController
  2. Repository: TaskPlannerRepository
  3. Service: TaskPlannerService
  4. Razor Page: TaskPlannerIndex, TaskPlannerDetails, TaskPlannerCreate, TaskPlannerModify
  5. Method Names: TaskPlannerIndex, TaskPlannerDetails, TaskPlannerCreate, TaskPlannerModify, TaskPlannerDelete, TaskPlannerValidateCreateModify, RequestCompletion, ApproveCompletion, ReworkTask, GenerateRepeatingTask, TaskTypeCombo, TaskUserCombo, PartyCombo, RmItemCombo, FgItemCombo, ItemCombo, GetTaskPlannerDeleteCount

🚧 Unimplemented Features (Future Development)

1. Notifications System

  • Email Integration: SMTP-based email alerts for task events and scheduled reports
  • WhatsApp Integration: SIM-based WhatsApp notifications for task assignments and updatesAccount will created by party
  • Saturday 8:30 AM – Performance Summary
  • Monday 8:30 AM – New Tasks Summary

2. Access Control & Security

  • Role-Based Filtering: Assignee sees own tasks, Assigner sees created tasks and Assigneed tasks, Admin sees all
  • Field Locking: Certain fields locked after task creation based on user roles

3. Performance Dashboard

  • Interactive Widgets: Weekly summaries, completion analysis, and pending task breakdowns
  • Real-time Updates: Live dashboard with filtering and export capabilities

4. Reporting System

  • Standard Reports: Pending, Completed, and Overdue task reports with Excel export
  • Advanced Filtering: Date ranges, user filters, and scheduled report delivery

5. Advanced Features

  • Excel Import/Export: Bulk task creation and updates via Excel templates
  • Audit Logging: We will write in ERP lof