Commit Graph

62 Commits (40edc092a38eef8b582c5b20d916d91cdf5946b6)

Author SHA1 Message Date
ahmed.mujtaba 40edc092a3 top limit maitnained 2026-08-20 18:40:24 +05:00
ahmed.mujtaba b79009679c Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Implementing_limitListing 2026-08-20 18:22:40 +05:00
ahmed.mujtaba 867fea495a m. 2026-08-20 18:22:33 +05:00
ahmed.mujtaba f1758ac9bd Add mailbox sync functionality and related API endpoints
- Introduced a new `MailboxSyncRun` model to manage mailbox synchronization jobs, allowing for tracking of sync status and results.
- Implemented API endpoints for starting mailbox sync and fetching sync status, enabling asynchronous processing of email synchronization.
- Updated the `Email` service to handle mailbox sync operations, including enqueueing tasks and managing sync results.
- Enhanced frontend components to initiate mailbox sync and display sync status, improving user experience and feedback during the sync process.
- Added necessary query keys and local storage management for tracking sync runs in the UI.

This commit enhances the application's email synchronization capabilities, providing a more robust and user-friendly experience for managing mailbox data.
2026-08-20 17:55:17 +05:00
ahmed.mujtaba c7fc2fed10 Implement candidate history tracking and enhance email URL configuration
- Added a new `CandidateHistory` model to maintain an append-only audit log for candidate actions.
- Introduced `HistoryRecorder` functionality to log significant events across various modules, including interviews, feedback, and notes.
- Updated existing methods to include `current_user` for tracking who performed actions.
- Enhanced the `EMAIL_URL` configuration in `docker-compose.yml` to allow for environment variable overrides.
- Updated frontend components to support fetching and displaying candidate history.

This commit improves the application's ability to track changes and actions related to candidates, enhancing accountability and transparency.
2026-08-20 17:22:22 +05:00
ahmed.mujtaba cd35af8161 Enhance interview and job functionalities
- Updated the interview model to include `graph_event_id` and `web_link` for calendar integration.
- Added methods for setting calendar events and retrieving job titles associated with interviews.
- Modified serializers to include new fields in the interview response.
- Enhanced the job post model to include applicant counts.
- Updated frontend components to handle new fields and improve user experience with calendar event management.
- Introduced image upload functionality in job forms with validation for file types and sizes.
- Improved dashboard and calendar UI for better data presentation.

This commit streamlines interview scheduling and job management processes, enhancing overall application functionality.
2026-08-20 16:41:21 +05:00
ahmed.mujtaba 1c1a774dc8 Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into UI_CHANGES 2026-08-19 19:34:57 +05:00
ahmed.mujtaba 039a37747a theme updated 2026-08-19 19:34:16 +05:00
ahmed.mujtaba 8e95adb320 mark as read and unread woth correct position 2026-08-19 19:30:02 +05:00
ahmed.mujtaba 63a0fbf857 horizontal expansion 2026-08-19 19:12:42 +05:00
ahmed.mujtaba 24f3c5df53 mark correc t 2026-08-19 19:07:53 +05:00
ahmed.mujtaba 71d9803db2 Assing corrected 2026-08-19 18:52:48 +05:00
Talha Ahmed 84f2918e43 AI field assist on job forms + channel-free internal job creation
Deploy to S3 / deploy (push) Successful in 33s Details
- New POST /job/assist-field (job_board.create OR jobs.edit): per-field
  AI fix/suggest via backend/job_assist package on the shared llm_call.
  Suggest is gated on title + experience anchors; decisive typo repair;
  provider failures return a generic 503.
- AiFieldAssist component: sparkle button per field with fix/suggest,
  loading, preview-before-apply, abort on close; wired into JobForm and
  EditJobForm with per-field suggest hints.
- Create Job no longer requires a Buffer channel: without channel_id or
  platform the backend saves an internal-only requisition (platform
  internal) and never calls Buffer; publishing stays on the Job Board.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-19 18:51:56 +05:00
ahmed.mujtaba ee2f0c8ef8 . 2026-08-19 18:46:24 +05:00
ahmed.mujtaba c106aad567 ui cahnges 2026-08-19 18:14:26 +05:00
ahmed.mujtaba 238cb38dc2 Permission and roles are completed 2026-08-18 15:20:30 +05:00
ahmed.mujtaba 04455c4a3b . 2026-08-18 14:48:05 +05:00
ahmed.mujtaba 27b5bc94c4 Merge branch 'Talha' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Vibe-Coding 2026-08-18 12:47:25 +05:00
ahmed.mujtaba 0e91b24ed2 ip changed in dockerfile 2026-08-18 12:20:47 +05:00
ahmed.mujtaba 64eae32259 . 2026-08-17 20:37:30 +05:00
Talha Ahmed dfb565cd63 fix ats issue 2026-08-17 19:40:24 +05:00
ahmed.mujtaba f7778538dd push the scoring connect 2026-08-17 14:31:30 +05:00
ahmed.mujtaba a1f0b4797a Merge branch 'RecruiterHub' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into RecruiterHub 2026-08-13 19:25:45 +05:00
ahmed.mujtaba 786c159ff6 candidatye page 2026-08-13 19:25:42 +05:00
ahmed.mujtaba 4297badb43 insiode data ai match wired 2026-08-13 18:51:07 +05:00
ahmed.mujtaba 4cb1961373 Merge branch 'main' into RecruiterHub 2026-08-13 13:37:27 +00:00
ahmed.mujtaba 664b33b94b /ppelline completde 2026-08-13 18:34:52 +05:00
ahmed.mujtaba c1e44356e9 . 2026-08-13 18:21:35 +05:00
Talha Ahmed 6eefaa2fad Tasks: recruiter-only assignees, role-gated creation, assignees API
- Assignees restricted to recruiter-role users (role id resolved from the
  roles table per request, not hardcoded); server 422s any other role on
  create and update
- New GET /tasks/assignees/fetch: active recruiter users for the picker,
  separate from /users/fetch so assigning never needs rbac_users.view
- Creation gated to system_administrator / hr_administrator / recruiter:
  allowed role ids searched from the DB and compared to the callers
  role_id, on top of the tasks.create permission tag
- manual/005_tasks_rbac_restrict.sql: permission DB follows suit -
  hiring_manager / department_head / ceo swap tasks_management for a
  view-only tasks_viewer bundle (idempotent, auto-applies at boot)
- UI: assignee dropdown lists recruiters from the new endpoint with
  required-field validation; recruiters get an assign-to-me default; the
  New Task button honours the creator roles

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 17:54:50 +05:00
ahmed.mujtaba 0899342c34 listy of pipeline done 2026-08-13 17:25:50 +05:00
Talha Ahmed b3483d9a6e Tasks domain: real backend + live screen with DB users/roles as assignees
- New backend/tasks/ package (offer/ house style): tasks table
  (title/status/priority/due_date/assignee_id -> users.id, optional
  inbox_id/job_post_id links, soft delete), routes /tasks/fetch|create|
  update|delete guarded by new tasks.* permission tags
- Assignees validated against users+roles: must exist, not deleted, not
  candidate-role; omitted assignee defaults to the caller; responses carry
  assignee_name/assignee_role from one batched join
- TASKS permission module (104 -> 112 tags); manual/004_tasks_rbac.sql
  seeds the tags + tasks_management bundle onto 6 staff roles (auto-applies
  at startup)
- Tasks.jsx cut over from seed to live: real create/complete/reopen with
  optimistic flip, two-click delete in the detail modal, assignee picker
  listing real users with roles; live sidebar badge (open-task total);
  route now requires tasks.view

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 16:27:19 +05:00
ahmed.mujtaba 3b7e83a4a7 pipline code done 2026-08-13 13:13:19 +05:00
ahmed.mujtaba 1491931d95 Merge branch 'Talha' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into RecruiterHub 2026-08-13 13:01:22 +05:00
Talha Ahmed 5c0eaef86d ATS scores land on inbox tables + ats_results history; manual SQL auto-applies on boot
- inbox_messages.ats_score/ats_band written on every completed inbox score;
  inbox.ats_id always points at the current ats_results row
- ats_results now holds the supersede-chained history for BOTH inbox and
  upload scores (new candidate_id link, inbox_id nullable for uploads)
- migrations/manual/*.sql apply automatically at startup, tracked once per
  database in manual_migrations - developers just pull and boot
- 002_backfill_inbox_ats.sql backfills pre-existing scores
- Add Candidate modal: Matching-style role picker above the CV dropzone,
  and the CV is scored via /candidate/score after creation

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 20:44:46 +05:00
ahmed.mujtaba 6463b7f377 add job create 2026-08-12 20:04:45 +05:00
ahmed.mujtaba 7ded865ceb /jobs page done 2026-08-12 19:47:03 +05:00
ahmed.mujtaba 1478e8052e . 2026-08-12 19:05:50 +05:00
ahmed.mujtaba 4d56f987f7 /candidate page is done and completedc 2026-08-12 18:11:42 +05:00
ahmed.mujtaba a49022b757 added finishe /candidate 2026-08-12 17:49:21 +05:00
ahmed.mujtaba 8ddd83bc51 new frontend index.htm; 2026-08-12 16:30:47 +05:00
ahmed.mujtaba 17279b567b Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Dashboard_Wiring 2026-08-12 16:16:55 +05:00
ahmed.mujtaba 29ee228eaa Dashboard seems to work 2026-08-12 16:11:36 +05:00
Talha Ahmed 8ada794b29 Merge origin/main (PR #10: manual candidate upload) into Talha
Conflict resolutions:
- backend/job/app.py: dropped duplicate pydantic import (already present below)
- backend/job/candidate/views.py: union of both sides — kept Talha's
  _recommendation/_scores_by_message helpers alongside main's manual-upload
  create_candidate, merged import lists and module-level config
- frontend/src/lib/apiClient.js: both sides made the same FormData fix;
  kept main's version that reuses the shared multipart const
- frontend/src/screens/Candidates.jsx: kept Talha's live-data screen and
  ported main's AddCandidate modal onto it — server POST via
  candidatesApi.createManual with live job posts, seed-shaped buildRow
  replaced by a candidates query invalidation; seed-only BulkAssign dropped

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 16:08:42 +05:00
ahmed.mujtaba 6e1ecb6d72 Merge branch 'main' of https://git.utopiadeals.com/utopia-ai/HR-ATS-Portal into Dashboard_Wiring 2026-08-12 14:00:07 +05:00
ahmed.mujtaba 038d89ced1 update 2026-08-12 13:57:53 +05:00
ahmed.mujtaba 84daea9efe /candidates completed with manual upload 2026-08-12 13:33:35 +05:00
Talha Ahmed 7c593d32ce Surface real ATS scores in the talent-pool profile
Main stubbed ai_score/recommendation as None in the candidate-profile payload;
fill them from the scoring engine's candidates table, joined by inbox message
(one batched query for the list, assigned-job-preferred for the detail). The
detail payload also gains matched/missing keywords, the critique, and which job
the score was against.

Frontend: TalentPool cards and the profile hero prefer the real score over the
seed placeholder, and the profile grows a Score-with-ATS button (shown when the
candidate has an assigned job and an inbox message) that runs the existing
score_inbox pipeline and repaints via the detail refetch.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 19:22:29 +05:00
Talha Ahmed eb95d7a2c0 Merge origin/main (PR #9: interviews, notes, activity, feedback + job matching) into Talha
Union resolution, same policy as the previous merge — both feature sets kept:

- app.py: scoring routes kept; main's richer GET /job/fetch (search/top/skip/ids)
  adopted, with the dual JOB_BOARD_VIEW-or-CANDIDATES_VIEW permission restored so
  recruiters with only candidate rights keep the CV Import job picker.
- candidate/models.py: Candidates (scoring) coexists with main's new Interviews,
  Notes, Activity, Feedback models.
- candidate/serializers.py: serialize_candidate kept alongside main's
  detail-mode serialize_candidate_profile.
- CandidateProfile.jsx: main's rich tabbed profile (interviews/notes/feedback/
  activity) is now THE CandidateProfile, used by TalentPool; the scored-CV modal
  moved to ScoredCandidateProfile.jsx, used by Candidates.jsx. The two payload
  shapes share almost no fields, hence two components.

Backend imports verified; frontend builds clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 19:10:45 +05:00
ahmed.mujtaba 38249cc6f2 job_matching assignment by recruiter added 2026-08-11 19:01:24 +05:00
ahmed.mujtaba a81107cb96 frontend integrated 2026-08-11 18:19:30 +05:00