pmtool / src /types /index.ts
devarshia5's picture
Upload 487 files
d97b8f9 verified
Raw
History Blame Contribute Delete
27.7 kB
export type UserRole =
| 'CEO'
| 'COO'
| 'Account Manager'
| 'Project Manager'
| 'Tech Lead'
| 'Senior Developer'
| 'Developer'
| 'Testing Manager'
| 'Senior Tester'
| 'Tester'
| 'HR Manager'
| 'HR';
export interface User {
id: string;
name: string;
email: string;
role: UserRole;
avatar?: string;
}
export type ProjectStatus = 'Completed' | 'Overdue' | 'In Progress';
export interface Project {
id: string;
name: string;
description: string;
status: ProjectStatus;
progress: number;
startDate: string;
endDate: string;
teamId?: string;
leadId?: string;
}
export interface Team {
id: number;
name: string;
description: string;
}
export interface TeamCreateRequest {
id: number;
name: string;
description: string;
}
export interface TeamUpdateRequest {
id: number;
name: string;
description: string;
}
export interface TeamMember {
id: number;
description: string;
teamsId: number;
employeeId: number;
roleId: number;
isActive?: string;
}
export interface TeamMemberCreateRequest {
id: number;
description: string;
teamsId: number;
employeeId: number;
roleId: number;
}
export interface TeamMemberUpdateRequest {
id: number;
description: string;
teamsId: number;
employeeId: number;
roleId: number;
}
export type IssuePriority = 'Low' | 'Medium' | 'High' | 'Critical';
export type IssueStatus = 'New' | 'In Progress' | 'In Review' | 'Done';
export type IssueType = 'Bug' | 'Feature' | 'Task' | 'Improvement';
export interface Issue {
id: string;
title: string;
description: string;
projectId: string;
assigneeId?: string;
reporterId: string;
priority: IssuePriority;
status: IssueStatus;
type: IssueType;
createdAt: string;
updatedAt: string;
}
export interface Task {
id: string;
title: string;
description: string;
issueId?: string;
assigneeId?: string;
status: IssueStatus;
priority: IssuePriority;
dueDate?: string;
createdAt: string;
updatedAt: string;
}
export interface DashboardStats {
projects: number;
employees: number;
tasks: number;
clients: number;
revenue: number;
expenses: number;
profit: number;
completedTasks: number;
pendingTasks: number;
inProgressTasks: number;
onHoldTasks: number;
reviewTasks: number;
}
export interface ChartData {
name: string;
value: number;
color?: string;
}
export interface ResponseData<T> {
data: T;
success: boolean;
message?: string;
}
export interface LoginResponse {
userId: number;
email: string;
firstName: string;
lastName: string;
roleId: number;
roleName: string | null;
token: string;
employeeId: number;
}
export interface Employee {
empCode: any;
id: number;
firstName: string;
lastName: string;
email: string;
roleId: number;
phone?: string;
department?: string;
position?: string;
joiningDate?: string;
profileImage?: string | null;
address?: string;
city?: string;
state?: string;
country?: string;
postalCode?: string;
managerId?: number | null;
userId: number;
reportingToId?: number | null;
}
export interface EmployeeRegistrationRequest {
id: number;
empCode: string;
firstName: string;
middleName: string;
lastName: string;
email: string;
mobile: string;
type: string;
academics: string;
financialData: string;
description: string;
passwordHash: string;
roleId: number;
status?: string;
}
export interface Role {
roleId: number;
roleName: string;
description: string;
}
export interface RoleCreateRequest {
roleName: string;
description: string;
}
export interface RoleUpdateRequest {
roleId: number;
roleName: string;
description: string;
}
export interface ProjectApi {
id: number;
projectName: string;
projectCode: string;
category: string;
projectManager: string;
client: string;
startDate: string;
endDate: string;
description: string;
teamId: number;
taskStartDate?: string;
taskEndDate?: string;
status?: string;
}
export interface ProjectCreateRequest {
projectName: string;
projectCode: string;
category: string;
projectManager: string;
client: string;
startDate: string;
endDate: string;
description: string;
teamId: number;
}
export interface ProjectUpdateRequest {
id: number;
projectName: string;
projectCode: string;
category: string;
projectManager: string;
client: string;
startDate: string;
endDate: string;
description: string;
teamId: number;
}
export interface Deliverable {
id: number;
name: string;
description: string;
deliveryDate: string;
projectId: number;
status?: string;
startDate?: string;
endDate?: string;
}
export interface DeliverableCreateRequest {
name: string;
description: string;
deliveryDate: string;
projectId: number;
status?: string;
startDate?: string;
endDate?: string;
}
export interface DeliverableUpdateRequest {
id: number;
name: string;
description: string;
deliveryDate: string;
projectId: number;
status?: string;
startDate?: string;
endDate?: string;
}
export interface IssueApi {
id: number;
biCode: string;
type: string;
description: string;
estimates: string;
esUnit: number;
priority: string;
severity: string;
reportedBy: number;
assignedTo: number;
remainingHr: number;
title: string;
projectId: number;
deliverablesId: number;
status?: string;
startDate?: string;
endDate?: string;
}
export interface IssueCreateRequest {
biCode: string;
type: string;
description: string;
estimates: string;
esUnit: number;
priority: string;
severity: string;
reportedBy: number;
assignedTo: number;
remainingHr: number;
title: string;
projectId: number;
deliverablesId: number;
status?: string;
startDate?: string;
endDate?: string;
}
export interface IssueUpdateRequest {
id: number;
biCode: string;
type: string;
description: string;
estimates: string;
esUnit: number;
priority: string;
severity: string;
reportedBy: number;
assignedTo: number;
remainingHr: number;
title: string;
projectId: number;
deliverablesId: number;
status?: string;
startDate?: string;
endDate?: string;
}
export interface ProjectTeamApi {
id: number;
description: string | null;
teamsId: number;
projectId: number;
}
export interface Permission {
permissionId: number;
permissionName: string;
description: string;
}
export interface RolePermission {
rolePermissionID: number;
roleId: number;
permissionId: number;
}
export interface RolePermissionCreateRequest {
rolePermissionID: number;
roleId: number;
permissionId: number;
}
export interface Feature {
featureId: number;
featureName: string;
description?: string;
category?: string;
isActive?: boolean;
}
export interface FeatureCreateRequest {
featureId: number;
featureName: string;
description?: string;
category?: string;
isActive?: boolean;
}
export interface FeatureUpdateRequest {
featureId: number;
featureName: string;
description?: string;
category?: string;
isActive?: boolean;
}
export interface RoleFeature {
roleFeatureId: number;
roleId: number;
featureId: number;
permissionIds: number[];
}
export interface RoleFeatureCreateRequest {
roleFeatureId: number;
roleId: number;
featureId: number;
permissionIds: number[];
}
export interface RoleFeatureUpdateRequest {
roleFeatureId: number;
roleId: number;
featureId: number;
permissionIds: number[];
}
// Attendance types
export interface AttendanceRecord {
id: number;
employeeId: number;
date: string;
inTime: string | null;
outTime: string | null;
status: 'Present' | 'Absent' | 'Half Day' | 'Leave';
comments?: string;
}
export interface AttendanceUploadRequest {
month: string;
year: number;
records: AttendanceRecord[];
}
export interface AttendanceResponse {
success: boolean;
message: string;
data: AttendanceRecord[];
}
export type LeaveStatus = 'Pending' | 'Approved' | 'Rejected' | 'Cancelled';
export type LeaveType =
| 'Annual'
| 'Sick'
| 'Personal'
| 'Unpaid'
| 'Maternity'
| 'Paternity'
| 'Bereavement'
| 'Compensatory'
| 'Half Day'
| 'Other';
export interface Leave {
id: number;
employeeId: number;
leaveMasterId?: number;
startDate: string;
endDate: string;
reason: string;
type: LeaveType;
status: LeaveStatus;
appliedOn: string;
approvedById?: number;
approvedOn?: string;
actionDate?: string;
comments?: string;
documents?: string;
halfDay?: boolean;
workingDays?: number;
compOff?: boolean;
updatedByName?: string;
}
export interface LeaveCreateRequest {
id?: number;
employeeId: number;
leaveMasterId?: number;
startDate: string;
endDate: string;
reason: string;
type: LeaveType;
status?: LeaveStatus;
appliedOn?: string;
comments?: string;
documents?: string;
halfDay?: boolean;
halfDayPortion?: 'first' | 'second';
workingDays?: number;
compOff?: boolean;
}
export interface LeaveUpdateRequest {
id: number;
employeeId: number;
leaveMasterId?: number;
startDate: string;
endDate: string;
reason: string;
type: LeaveType;
status: LeaveStatus;
appliedOn: string;
approvedById?: number;
approvedOn?: string;
actionDate?: string;
comments?: string;
documents?: string;
halfDay?: boolean;
halfDayPortion?: 'first' | 'second';
workingDays?: number;
compOff?: boolean;
}
export interface LeaveStatusUpdateRequest {
id: number;
status: LeaveStatus;
approvedById: number;
approverId?: number;
comments?: string;
actionDate: string;
}
export interface LeaveBalance {
id: number;
employeeId: number;
year: number;
leavesMasterId: number;
allocated: number;
used: number;
pending: number;
carryForward: number;
leaveType?: string;
createdBy?: number;
createdAt?: string;
createdByName?: string;
updatedBy?: number;
updatedAt?: string;
updatedByName?: string;
}
export interface LeaveMaster {
id: number;
leaveType: string;
description: string;
defaultDays: number;
carryForwardLimit: number;
isActive: boolean;
maxConsecutiveDays?: number;
minDaysBeforeApply: number;
requiresApproval: boolean;
requiresDocumentation: boolean;
applyToRoles: string; // Comma-separated list of role IDs
createdAt: string;
updatedAt: string;
}
export interface LeaveMasterCreateRequest {
leaveType: string;
description: string;
defaultDays: number;
carryForwardLimit: number;
isActive: boolean;
maxConsecutiveDays?: number;
minDaysBeforeApply: number;
requiresApproval: boolean;
requiresDocumentation: boolean;
applyToRoles: string;
}
export interface LeaveMasterUpdateRequest extends LeaveMasterCreateRequest {
id: number;
}
export interface LeaveCalendarEvent {
id: string;
title: string;
start: string;
end: string;
allDay: boolean;
employeeId: number;
employeeName: string;
leaveType: LeaveType;
status: LeaveStatus;
}
// Add a utility function to map API responses that might have different property names
export function mapApiProject(apiProject: any): ProjectApi {
// Robust status field detection
// Handle various possible field names and normalize null/undefined to empty string
const apiStatus = apiProject.status ?? apiProject.projectStatus ?? apiProject.Status ?? apiProject.ProjectStatus ?? '';
return {
id: apiProject.id,
projectName: apiProject.projectName || apiProject.name || `Project #${apiProject.id}`,
projectCode: apiProject.projectCode || apiProject.code || '',
category: apiProject.category || '',
projectManager: apiProject.projectManager || '',
client: apiProject.client || '',
startDate: apiProject.startDate || '',
endDate: apiProject.endDate || '',
description: apiProject.description || '',
teamId: apiProject.teamId || 0,
taskStartDate: apiProject.taskStartDate || apiProject.TaskStartDate || '',
taskEndDate: apiProject.taskEndDate || apiProject.TaskEndDate || '',
status: (apiStatus !== null && apiStatus !== undefined) ? String(apiStatus) : '',
};
}
// Add a utility function to map API issues with different property names
export function mapApiIssue(apiIssue: any): IssueApi {
if (!apiIssue) {
console.warn('Received null or undefined apiIssue object');
return {
id: 0,
biCode: '',
type: 'Task',
description: '',
estimates: '',
esUnit: 0,
priority: 'Medium',
severity: 'Minor',
reportedBy: 0,
assignedTo: 0,
remainingHr: 0,
title: '',
projectId: 0,
deliverablesId: 0,
status: 'New'
};
}
console.log(`Mapping issue ID=${apiIssue.id}, title=${apiIssue.title || 'Untitled'}`);
// Check for project ID in various formats
let projectId = 0;
if (apiIssue.projectId !== undefined && apiIssue.projectId !== null) {
projectId = typeof apiIssue.projectId === 'string'
? parseInt(apiIssue.projectId, 10)
: apiIssue.projectId;
} else if (apiIssue.project_id !== undefined && apiIssue.project_id !== null) {
projectId = typeof apiIssue.project_id === 'string'
? parseInt(apiIssue.project_id, 10)
: apiIssue.project_id;
} else if (apiIssue.project && apiIssue.project.id) {
projectId = typeof apiIssue.project.id === 'string'
? parseInt(apiIssue.project.id, 10)
: apiIssue.project.id;
}
// Check for deliverable ID in various formats
let deliverableId = 0;
const possibleDeliverableProps = ['deliverablesId', 'deliverableId', 'deliverable_id', 'deliverableID', 'deliverable_Id'];
for (const prop of possibleDeliverableProps) {
if (apiIssue[prop] !== undefined && apiIssue[prop] !== null) {
// Convert to number if it's a string
const value = typeof apiIssue[prop] === 'string'
? parseInt(apiIssue[prop], 10)
: apiIssue[prop];
if (!isNaN(value)) {
deliverableId = value;
console.log(`Found deliverable ID ${deliverableId} in property ${prop} for issue ID=${apiIssue.id}`);
break;
}
}
}
// Check if issue has a deliverable object with an id property
if (deliverableId === 0 && apiIssue.deliverable) {
if (typeof apiIssue.deliverable === 'number') {
deliverableId = apiIssue.deliverable;
console.log(`Found deliverable ID ${deliverableId} as direct number value for issue ID=${apiIssue.id}`);
} else if (apiIssue.deliverable.id) {
deliverableId = typeof apiIssue.deliverable.id === 'string'
? parseInt(apiIssue.deliverable.id, 10)
: apiIssue.deliverable.id;
console.log(`Found deliverable ID ${deliverableId} in nested deliverable.id property for issue ID=${apiIssue.id}`);
}
}
// Get status from various possible fields
let status = apiIssue.status || 'New';
if (!status && apiIssue.issueStatus) {
status = apiIssue.issueStatus;
} else if (!status && apiIssue.state) {
status = apiIssue.state;
}
return {
id: apiIssue.id || 0,
biCode: apiIssue.biCode || apiIssue.code || '',
type: apiIssue.type || apiIssue.issueType || 'Task',
description: apiIssue.description || '',
estimates: apiIssue.estimates || apiIssue.estimatedTime || '',
esUnit: apiIssue.esUnit || apiIssue.estimationUnit || 0,
priority: apiIssue.priority || 'Medium',
severity: apiIssue.severity || 'Minor',
reportedBy: apiIssue.reportedBy || apiIssue.reporter || 0,
assignedTo: apiIssue.assignedTo || apiIssue.assignee || 0,
remainingHr: apiIssue.remainingHr || apiIssue.remainingHours || 0,
title: apiIssue.title || apiIssue.summary || '',
projectId: projectId,
deliverablesId: deliverableId,
status: status,
startDate: apiIssue.startDate || '',
endDate: apiIssue.endDate || ''
};
}
export interface Todo {
id: number;
title: string;
description: string;
status: 'Pending' | 'In Progress' | 'Completed';
priority: 'Low' | 'Medium' | 'High';
dueDate: string;
assigneeId?: number;
projectId?: number;
createdAt: string;
updatedAt: string;
}
export interface TodoCreateRequest {
title: string;
description: string;
status: 'Pending' | 'In Progress' | 'Completed';
priority: 'Low' | 'Medium' | 'High';
dueDate: string;
assigneeId?: number;
projectId?: number;
}
export interface TodoUpdateRequest {
id: number;
title: string;
description: string;
status: 'Pending' | 'In Progress' | 'Completed';
priority: 'Low' | 'Medium' | 'High';
dueDate: string;
assigneeId?: number;
projectId?: number;
}
export interface Holiday {
id: number;
name: string;
date: string;
description: string;
isRecurring: boolean;
appliesTo: string;
}
export interface HolidayCreateRequest {
id?: number;
name: string;
date: string;
description: string;
isRecurring: boolean;
appliesTo: string;
}
export interface HolidayUpdateRequest {
id: number;
name: string;
date: string;
description: string;
isRecurring: boolean;
appliesTo: string;
}
// Appraisal Module Types
export interface AppraisalCycle {
cycleId: number;
name: string;
startDate: string;
endDate: string;
}
export interface AppraisalCycleCreateRequest {
name: string;
startDate: string;
endDate: string;
}
export interface AppraisalCycleUpdateRequest {
cycleId: number;
name: string;
startDate: string;
endDate: string;
}
export interface Appraisal {
appraisalId: number;
employeeId: number;
appraiserId: number;
cycleId: number;
dateOfAppraisal: string;
place: string;
status: 'Draft' | 'SelfSubmitted' | 'ManagerReviewed' | 'Completed';
}
export interface AppraisalCreateRequest {
employeeId: number;
appraiserId: number;
cycleId: number;
dateOfAppraisal: string;
place: string;
}
export interface AppraisalUpdateRequest {
appraisalId: number;
employeeId: number;
appraiserId: number;
cycleId: number;
dateOfAppraisal: string;
place: string;
status: 'Draft' | 'SelfSubmitted' | 'ManagerReviewed' | 'Completed';
}
export interface AssessmentArea {
areaId: number;
title: string;
}
export interface AssessmentAreaCreateRequest {
title: string;
}
export interface AssessmentAreaUpdateRequest {
areaId: number;
title: string;
}
export interface RoleAssessmentQuestion {
questionId: number;
roleId: number;
areaId: number;
questionText: string;
}
export interface RoleAssessmentQuestionCreateRequest {
roleId: number;
areaId: number;
questionText: string;
}
export interface RoleAssessmentQuestionUpdateRequest {
questionId: number;
roleId: number;
areaId: number;
questionText: string;
}
export interface AssessmentAnswer {
answerId: number;
appraisalId: number;
questionId: number;
selfRemarks: string;
appraiserRemarks: string;
createdBy?: number;
createdAt?: string;
createdByName?: string;
updatedBy?: number;
updatedAt?: string;
updatedByName?: string;
}
export interface AssessmentAnswerCreateRequest {
appraisalId: number;
questionId: number;
selfRemarks: string;
appraiserRemarks?: string;
createdBy?: number;
createdAt?: string;
createdByName?: string;
updatedBy?: number;
updatedAt?: string;
updatedByName?: string;
}
export interface AssessmentAnswerUpdateRequest {
answerId: number;
appraisalId: number;
questionId: number;
selfRemarks: string;
appraiserRemarks: string;
updatedBy?: number;
updatedAt?: string;
updatedByName?: string;
}
export type CompetencyCategory = 'Core' | 'Technical' | 'Leadership' | 'Communication' | 'Teamwork';
export interface Competency {
competencyId: number;
title: string;
weightage: number;
category: CompetencyCategory;
}
export interface CompetencyCreateRequest {
title: string;
weightage: number;
category: CompetencyCategory;
}
export interface CompetencyUpdateRequest {
competencyId: number;
title: string;
weightage: number;
category: CompetencyCategory;
}
export interface CompetencyIndicator {
indicatorId: number;
competencyId: number;
indicatorText: string;
}
export interface CompetencyIndicatorCreateRequest {
competencyId: number;
indicatorText: string;
}
export interface CompetencyIndicatorUpdateRequest {
indicatorId: number;
competencyId: number;
indicatorText: string;
}
export interface CompetencyRating {
ratingId: number;
appraisalId: number;
indicatorId: number;
selfRating: number;
appraiserRating: number;
weightedScore: number;
appraiserRemark: string;
}
export interface CompetencyRatingCreateRequest {
appraisalId: number;
indicatorId: number;
selfRating: number;
appraiserRating?: number;
weightedScore?: number;
appraiserRemark?: string;
}
export interface CompetencyRatingUpdateRequest {
ratingId: number;
appraisalId: number;
indicatorId: number;
selfRating: number;
appraiserRating: number;
weightedScore: number;
appraiserRemark: string;
}
export interface TrainingNeed {
trainingId: number;
appraisalId: number;
needDescription: string;
}
export interface TrainingNeedCreateRequest {
appraisalId: number;
needDescription: string;
}
export interface TrainingNeedUpdateRequest {
trainingId: number;
appraisalId: number;
needDescription: string;
}
export interface HrRemark {
hrRemarkId: number;
appraisalId: number;
remarks: string;
}
export interface HrRemarkCreateRequest {
appraisalId: number;
remarks: string;
}
export interface HrRemarkUpdateRequest {
hrRemarkId: number;
appraisalId: number;
remarks: string;
}
// Meeting Room Booking Types
export interface MeetingRoom {
id: number;
name: string;
capacity: number;
location: string;
features: string[];
isAvailable: boolean;
description?: string;
imageUrl?: string;
}
export interface MeetingRoomCreateRequest {
name: string;
capacity: number;
location: string;
features: string[];
isAvailable: boolean;
description?: string;
imageUrl?: string;
}
export interface MeetingRoomUpdateRequest {
id: number;
name?: string;
capacity?: number;
location?: string;
features?: string[];
isAvailable?: boolean;
description?: string;
imageUrl?: string;
}
export interface RoomBooking {
id: number;
roomId: number;
roomName: string;
employeeId: number;
employeeName: string;
title: string;
startTime: string;
endTime: string;
attendees: number[];
bookingAttendees?: string;
description?: string;
status: string;
createdAt: string;
updatedAt: string;
}
export interface RoomBookingCreateRequest {
roomId: number;
roomName?: string;
employeeId: number;
employeeName?: string;
title: string;
startTime: string;
endTime: string;
attendees: number[];
description?: string;
status?: 'pending' | 'approved' | 'rejected' | 'cancelled';
createdAt?: string;
updatedAt?: string;
}
export interface RoomBookingUpdateRequest {
id: number;
roomId?: number;
title?: string;
startTime?: string;
endTime?: string;
attendees?: number[];
description?: string;
status?: 'pending' | 'approved' | 'rejected' | 'cancelled';
}
// Communication Trail Types
export interface Communication {
communicationId: number;
communicationDate: string;
topic: string;
details: string;
decisionMade: string;
mode: string;
participants: string;
projectId?: number | null;
createdBy: number | null;
createdAt: string | null;
createdByName: string | null;
updatedBy: number | null;
updatedAt: string | null;
updatedByName: string | null;
}
export interface CommunicationCreateRequest {
communicationId?: number;
communicationDate: string;
topic: string;
details: string;
decisionMade: string;
mode: string;
participants: string;
projectId?: number | null;
}
export interface CommunicationUpdateRequest {
communicationId: number;
communicationDate: string;
topic: string;
details: string;
decisionMade: string;
mode: string;
participants: string;
projectId?: number | null;
}
export interface ManagementRemark {
id: number;
appraisalId: number;
designation: string;
remarks: string;
createdBy?: number | null;
createdAt?: string | null;
createdByName?: string | null;
updatedBy?: number | null;
updatedAt?: string | null;
updatedByName?: string | null;
}
export interface ManagementRemarkCreateRequest {
appraisalId: number;
designation: string;
remarks: string;
}
export interface ManagementRemarkUpdateRequest {
id: number;
appraisalId: number;
designation: string;
remarks: string;
}
export interface MaintenanceAmcDate {
maintenanceId: number;
projectId: number;
maintenanceType: string;
startDate: string;
endDate: string;
notes: string;
createdBy: number | null;
createdAt: string;
createdByName: string | null;
updatedBy: number;
updatedAt: string;
updatedByName: string | null;
}
export interface MaintenanceAmcDateCreateRequest {
maintenanceId?: number;
projectId: number;
maintenanceType: string;
startDate: string;
endDate: string;
notes: string;
}
export interface MaintenanceAmcDateUpdateRequest {
maintenanceId: number;
projectId: number;
maintenanceType: string;
startDate: string;
endDate: string;
notes: string;
}
export interface ReleaseDate {
releaseId: number;
projectId: number;
releaseName: string;
releaseDateValue: string;
description: string;
createdBy: number | null;
createdAt: string;
createdByName: string | null;
updatedBy: number;
updatedAt: string;
updatedByName: string | null;
}
export interface ReleaseDateCreateRequest {
releaseId?: number;
projectId: number;
releaseName: string;
releaseDateValue: string;
description: string;
}
export interface ReleaseDateUpdateRequest {
releaseId: number;
projectId: number;
releaseName: string;
releaseDateValue: string;
description: string;
}
export interface EmployeeProjectDetail {
id: number;
employeeId: number;
projectName: string;
clientCompany: string;
startDate: string;
endDate: string;
technologiesUsed: string;
role: string;
responsibilities: string;
projectDetails: string;
sector: string;
createdBy?: number | null;
createdAt?: string;
createdByName?: string | null;
updatedBy?: number | null;
updatedAt?: string;
updatedByName?: string | null;
}
// Asset Management Module Types
export * from './asset-management';
// Asset Request Management Module Types
export * from './asset-request';