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)}")