44 lines
1.7 KiB
Python
44 lines
1.7 KiB
Python
from odoo import models, fields, api
|
|
from pyresparser import ResumeParser
|
|
import base64
|
|
import tempfile
|
|
|
|
class ResumeParserModel(models.Model):
|
|
_name = 'resume.parser'
|
|
_description = 'Resume Parser'
|
|
|
|
name = fields.Char(string="Candidate Name")
|
|
email = fields.Char(string="Email")
|
|
phone = fields.Char(string="Phone")
|
|
skills_text = fields.Text(string="Skills")
|
|
experience_text = fields.Text(string="Experience")
|
|
degree_text = fields.Text(string="Degree")
|
|
resume_file = fields.Binary(string="Resume File")
|
|
resume_filename = fields.Char(string="Filename")
|
|
|
|
def action_parse_resume(self):
|
|
for record in self:
|
|
if not record.resume_file:
|
|
raise ValueError('Please upload a resume file first.')
|
|
|
|
# Save file temporarily
|
|
temp_dir = tempfile.gettempdir()
|
|
file_path = f"{temp_dir}/{record.resume_filename}"
|
|
with open(file_path, 'wb') as f:
|
|
f.write(base64.b64decode(record.resume_file))
|
|
|
|
# Parse Resume using AI (pyresparser)
|
|
try:
|
|
data = ResumeParser(file_path).get_extracted_data()
|
|
|
|
# Update fields
|
|
record.name = data.get('name', '')
|
|
record.email = data.get('email', '')
|
|
record.phone = data.get('phone', '')
|
|
record.skills_text = ', '.join(data.get('skills', [])) if data.get('skills') else ''
|
|
record.experience_text = '\n'.join(data.get('experience', [])) if data.get('experience') else ''
|
|
record.degree_text = ', '.join(data.get('degree', [])) if data.get('degree') else ''
|
|
|
|
except Exception as e:
|
|
raise ValueError(f"Error parsing resume: {str(e)}")
|