#!/usr/bin/env python3
"""
Script to import all active employees from CSV into Odoo
"""
import csv
import sys
import os
from datetime import datetime
# Add the src directory to Python path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
from odoo_mcp.odoo_client import get_odoo_client
def parse_date(date_str):
"""Parse date string in M/D/YYYY format to Odoo format YYYY-MM-DD"""
if not date_str or date_str.strip() == '':
return None
try:
# Handle M/D/YYYY format
dt = datetime.strptime(date_str.strip(), '%m/%d/%Y')
return dt.strftime('%Y-%m-%d')
except ValueError:
try:
# Handle MM/DD/YYYY format
dt = datetime.strptime(date_str.strip(), '%m/%d/%Y')
return dt.strftime('%Y-%m-%d')
except ValueError:
print(f"Warning: Could not parse date '{date_str}'")
return None
def clean_phone(phone):
"""Clean phone number format"""
if not phone:
return None
# Remove any spaces and ensure it starts with +966
phone = phone.strip().replace(' ', '')
if phone.startswith('966'):
phone = '+' + phone
return phone
def create_employee_from_csv_row(client, row):
"""Create an employee record from CSV row data"""
try:
# Map CSV fields to Odoo employee fields
employee_data = {
'name': row['Name'].strip() if row['Name'] else 'Unknown',
'work_phone': clean_phone(row['mobile_number']),
'work_email': f"{row['Name'].lower().replace(' ', '.')}@barqapp.com" if row['Name'] else None,
}
# Add optional fields if available
if row['id_number']:
employee_data['identification_id'] = row['id_number'].strip()
if row['Date Of Birth']:
dob = parse_date(row['Date Of Birth'])
if dob:
employee_data['birthday'] = dob
if row['Nationality']:
employee_data['country_id'] = 1 # Default to first country, should be mapped properly
if row['Joining Date']:
joining_date = parse_date(row['Joining Date'])
if joining_date:
employee_data['first_contract_date'] = joining_date
# Set department based on project
if row['Project']:
project = row['Project'].strip()
if project in ['Food', 'Ecommerce']:
employee_data['department_id'] = 1 # Should be mapped to actual department IDs
print(f"Creating employee: {employee_data['name']}")
result = client.create_record('hr.employee', employee_data)
if isinstance(result, list) and len(result) > 0:
employee_id = result[0]
print(f"✓ Created employee '{employee_data['name']}' with ID: {employee_id}")
return employee_id
else:
print(f"✗ Failed to create employee '{employee_data['name']}': {result}")
return None
except Exception as e:
print(f"✗ Error creating employee '{row.get('Name', 'Unknown')}': {str(e)}")
return None
def import_active_employees():
"""Import all active employees from CSV"""
csv_file = '/Users/ramizmohamed/Downloads/Asset Managment - COURIER MASTER SHEET (1).csv'
try:
# Initialize Odoo client
print("Connecting to Odoo...")
client = get_odoo_client()
print("Connected successfully!")
# Read CSV file
print(f"Reading CSV file: {csv_file}")
created_count = 0
failed_count = 0
with open(csv_file, 'r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row_num, row in enumerate(reader, start=2): # Start from 2 since row 1 is headers
# Only process active employees
if row['Status'].strip().lower() == 'active':
print(f"\nProcessing row {row_num}: {row['Name']}")
# Skip if this is Nizam uddin (already created as test)
if row['Name'].strip() == 'Nizam uddin':
print("Skipping Nizam uddin (already created as test)")
continue
employee_id = create_employee_from_csv_row(client, row)
if employee_id:
created_count += 1
else:
failed_count += 1
else:
print(f"Skipping row {row_num}: {row['Name']} (Status: {row['Status']})")
print(f"\n=== Import Summary ===")
print(f"Successfully created: {created_count} employees")
print(f"Failed to create: {failed_count} employees")
print(f"Total processed: {created_count + failed_count} active employees")
except Exception as e:
print(f"Error during import: {str(e)}")
import traceback
traceback.print_exc()
if __name__ == '__main__':
import_active_employees()