Fix HR module and text visibility issues
- Added missing HR endpoints: /hr/departments and /hr/positions - Fixed text color visibility (removed dark mode causing white text) - Ensured all input fields have proper dark text color - Added proper placeholder styling for forms Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -123,6 +123,28 @@ export class HRController {
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
|
||||
// ========== DEPARTMENTS ==========
|
||||
|
||||
async findAllDepartments(req: AuthRequest, res: Response, next: NextFunction) {
|
||||
try {
|
||||
const departments = await hrService.findAllDepartments();
|
||||
res.json(ResponseFormatter.success(departments));
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
|
||||
// ========== POSITIONS ==========
|
||||
|
||||
async findAllPositions(req: AuthRequest, res: Response, next: NextFunction) {
|
||||
try {
|
||||
const positions = await hrService.findAllPositions();
|
||||
res.json(ResponseFormatter.success(positions));
|
||||
} catch (error) {
|
||||
next(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export const hrController = new HRController();
|
||||
|
||||
@@ -29,5 +29,13 @@ router.post('/leaves/:id/approve', authorize('hr', 'leaves', 'approve'), hrContr
|
||||
|
||||
router.post('/salaries/process', authorize('hr', 'salaries', 'process'), hrController.processSalary);
|
||||
|
||||
// ========== DEPARTMENTS ==========
|
||||
|
||||
router.get('/departments', authorize('hr', 'all', 'read'), hrController.findAllDepartments);
|
||||
|
||||
// ========== POSITIONS ==========
|
||||
|
||||
router.get('/positions', authorize('hr', 'all', 'read'), hrController.findAllPositions);
|
||||
|
||||
export default router;
|
||||
|
||||
|
||||
@@ -377,6 +377,35 @@ class HRService {
|
||||
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||||
return diffDays + 1;
|
||||
}
|
||||
|
||||
// ========== DEPARTMENTS ==========
|
||||
|
||||
async findAllDepartments() {
|
||||
const departments = await prisma.department.findMany({
|
||||
where: { isActive: true },
|
||||
orderBy: { name: 'asc' }
|
||||
});
|
||||
return departments;
|
||||
}
|
||||
|
||||
// ========== POSITIONS ==========
|
||||
|
||||
async findAllPositions() {
|
||||
const positions = await prisma.position.findMany({
|
||||
where: { isActive: true },
|
||||
include: {
|
||||
department: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
nameAr: true
|
||||
}
|
||||
}
|
||||
},
|
||||
orderBy: { title: 'asc' }
|
||||
});
|
||||
return positions;
|
||||
}
|
||||
}
|
||||
|
||||
export const hrService = new HRService();
|
||||
|
||||
@@ -3,27 +3,32 @@
|
||||
@tailwind utilities;
|
||||
|
||||
:root {
|
||||
--foreground-rgb: 0, 0, 0;
|
||||
--background-start-rgb: 214, 219, 220;
|
||||
--background-end-rgb: 255, 255, 255;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--foreground-rgb: 255, 255, 255;
|
||||
--background-start-rgb: 0, 0, 0;
|
||||
--background-end-rgb: 0, 0, 0;
|
||||
}
|
||||
--foreground-rgb: 17, 24, 39;
|
||||
--background-rgb: 255, 255, 255;
|
||||
}
|
||||
|
||||
body {
|
||||
color: rgb(var(--foreground-rgb));
|
||||
background: linear-gradient(
|
||||
to bottom,
|
||||
transparent,
|
||||
rgb(var(--background-end-rgb))
|
||||
)
|
||||
rgb(var(--background-start-rgb));
|
||||
background: rgb(var(--background-rgb));
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
/* Force dark text for all text elements */
|
||||
* {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea,
|
||||
select {
|
||||
color: rgb(17, 24, 39) !important;
|
||||
}
|
||||
|
||||
/* Ensure placeholder text is visible */
|
||||
input::placeholder,
|
||||
textarea::placeholder {
|
||||
color: rgb(156, 163, 175) !important;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* Font Families */
|
||||
|
||||
Reference in New Issue
Block a user