@startuml
class WorkItem {
    + Id : int <<get>> <<set>>
    + ActivityId : int <<get>> <<set>>
    + WorkAreaId : int <<get>> <<set>>
    + PlannedWork : int <<get>> <<set>>
    + CompletedWork : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
WorkItem --> "WorkArea" WorkArea
WorkItem --> "ActivityMaster" ActivityMaster
WorkItem --> "TaskDate" DateTime
WorkItem --> "Tenant" Tenant
class WorkItemMapping {
    + Id : int <<get>> <<set>>
    + WorkAreaId : int <<get>> <<set>>
    + WorkItemId : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
WorkItemMapping --> "WorkArea" WorkArea
WorkItemMapping --> "WorkItem" WorkItem
WorkItemMapping --> "Tenant" Tenant
class Attendance {
    + Id : int <<get>> <<set>>
    + Comment : string <<get>> <<set>>
    + EmployeeID : int <<get>> <<set>>
    + ShiftId : int <<get>> <<set>>
    + Latitude : decimal? <<get>> <<set>>
    + Longitude : decimal? <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
    + UpdatedBy : string? <<get>> <<set>>
}
Attendance --> "Employee" Employee
Attendance --> "InTime" DateTime
Attendance --> "OutTime" DateTime
Attendance --> "WorkShift" WorkShift
Attendance --> "Tenant" Tenant
class Employee {
    + Id : int <<get>> <<set>>
    + FirstName : string <<get>> <<set>>
    + LastName : string <<get>> <<set>>
    + MiddleName : string? <<get>> <<set>>
    + Gender : string <<get>> <<set>>
    + PeramnentAddress : string <<get>> <<set>>
    + CurrentAddress : string <<get>> <<set>>
    + PhoneNumber : string <<get>> <<set>>
    + EmergencyPhoneNumber : string <<get>> <<set>>
    + AadharNumber : string? <<get>> <<set>>
    + PanNumber : string? <<get>> <<set>>
    + ApplicationUserId : string? <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
Employee --> "BirthDate" DateTime
Employee --> "ApplicationUser" ApplicationUser
Employee --> "Tenant" Tenant
class EmployeeAllocation {
    + Id : int <<get>> <<set>>
    + EmployeeId : int <<get>> <<set>>
    + ProjectId : int <<get>> <<set>>
    + BuildingId : int <<get>> <<set>>
    + WorkAreaId : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
class "List`1"<T> {
}
EmployeeAllocation --> "Employee" Employee
EmployeeAllocation --> "EmployeeRole" EMP_ROLES
EmployeeAllocation --> "Project" Project
EmployeeAllocation --> "Building" Building
EmployeeAllocation --> "AllocationDate" DateTime
EmployeeAllocation --> "WorkArea" WorkArea
EmployeeAllocation --> "AllotedTask<ActivityMaster>" "List`1"
EmployeeAllocation --> "Tenant" Tenant
class EmployeeDetails {
    + ProjectId : int <<get>> <<set>>
}
Employee <|-- EmployeeDetails
class WorkShift {
    + Id : int <<get>> <<set>>
    + Name : string <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
WorkShift --> "StartTime" TimeOnly
WorkShift --> "EndTime" TimeOnly
WorkShift --> "Tenant" Tenant
class ActivityMaster {
    + Id : int <<get>> <<set>>
    + ActivityName : string <<get>> <<set>>
    + UnitOfMeasurement : string <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
ActivityMaster --> "Tenant" Tenant
class ApplicationUser {
    + Role : string <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
    + IsRootUser : bool? <<get>> <<set>>
}
IdentityUser <|-- ApplicationUser
class AppModule {
    + Id : int <<get>> <<set>>
    + Name : string <<get>> <<set>>
    + ModuleKey : string <<get>> <<set>>
}
class AppModuleRoleMapping {
    + AppModuleRoleMapping()
    + Id : int <<get>> <<set>>
    + RoleId : int <<get>> <<set>>
    + ModuleId : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
    + AllowView : bool <<get>> <<set>>
    + AllowCreate : bool <<get>> <<set>>
    + AllowUpdate : bool <<get>> <<set>>
    + AllowDelete : bool <<get>> <<set>>
}
AppModuleRoleMapping --> "Role" EmployeeRole
AppModuleRoleMapping --> "Module" AppModule
AppModuleRoleMapping --> "Tenant" Tenant
class EmployeeRole {
    + Id : int <<get>> <<set>>
    + Role : string <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
EmployeeRole --> "Tenant" Tenant
class StatusMaster {
    + Id : int <<get>> <<set>>
    + Status : string <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
StatusMaster --> "Tenant" Tenant
class Tenant {
    + Id : int <<get>> <<set>>
    + Name : string <<get>> <<set>>
    + Description : string <<get>> <<set>>
    + DomainName : string <<get>> <<set>>
    + ContactName : string <<get>> <<set>>
    + ContactNumber : string <<get>> <<set>>
}
Tenant --> "OnBoardingDate" DateTime
class Building {
    + Id : int <<get>> <<set>>
    + Name : string <<get>> <<set>>
    + ProjectId : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
Building --> "Tenant" Tenant
class Floor {
    + Id : int <<get>> <<set>>
    + FloorName : string <<get>> <<set>>
    + BuildingId : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
Floor --> "Building" Building
Floor --> "Tenant" Tenant
class PhotoGallary {
    + Id : int <<get>> <<set>>
    + Description : string <<get>> <<set>>
    + ProjectId : int <<get>> <<set>>
    + AddedBy : string <<get>> <<set>>
    + <<required>> Imagebase64 : string <<get>> <<set>>
}
PhotoGallary --> "Project" Project
PhotoGallary --> "ApplicationUser" ApplicationUser
PhotoGallary --> "AddedOn" DateTime
class Project {
    + Id : int <<get>> <<set>>
    + Name : string <<get>> <<set>>
    + ProjectAddress : string <<get>> <<set>>
    + ContactPerson : string <<get>> <<set>>
    + ProjectStatusId : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
Project --> "StartDate" DateTime
Project --> "EndDate" DateTime
Project --> "ProjectStatus" StatusMaster
Project --> "Tenant" Tenant
class WorkArea {
    + Id : int <<get>> <<set>>
    + AreaName : string <<get>> <<set>>
    + FloorId : int <<get>> <<set>>
    + TenantId : int <<get>> <<set>>
}
WorkArea --> "Floor" Floor
WorkArea --> "Tenant" Tenant
class AttendanceVM {
}
class "IEnumerable`1"<T> {
}
AttendanceVM --> "Employee" Employee
AttendanceVM --> "Attendance" Attendance
AttendanceVM --> "AttendanceList<Attendance>" "IEnumerable`1"
class ProjectDetailsVM {
}
class "List`1"<T> {
}
ProjectDetailsVM --> "project" Project
ProjectDetailsVM --> "employeeAllocation<EmployeeAllocation>" "List`1"
ProjectDetailsVM --> "employees<EmployeeDetails>" "List`1"
ProjectDetailsVM --> "buildings<Building>" "List`1"
ProjectDetailsVM --> "floors<Floor>" "List`1"
ProjectDetailsVM --> "workAreas<WorkArea>" "List`1"
ProjectDetailsVM --> "workItems<WorkItem>" "List`1"
@enduml
