Odoo Developer
2024-12 → now- Implemented Odoo from scratch for a travel agency and modelled the company's existing business flows inside the system.
- Provide ongoing remote support, fixes and enhancements as the business's needs evolve.
Python developer with 4+ years of hands-on Odoo experience: end-to-end implementations, custom module development, version migrations (v8 to v14) and long-term support for small and mid-sized companies. Background in technical support and QA for web platforms. Currently supporting a live Odoo deployment remotely.
class TravelBooking(models.Model): _name = "travel.booking" _inherit = ["mail.thread"] partner_id = fields.Many2one("res.partner", required=True) departure = fields.Date(required=True) state = fields.Selection( [("draft", "Draft"), ("confirmed", "Confirmed"), ("invoiced", "Invoiced")], default="draft", tracking=True) def action_confirm(self): self.write({"state": "confirmed"}) return self._create_invoice()
Full implementation from zero for Ati Parvaz: modelled the agency's real booking and invoicing flow inside Odoo, then stayed on for support and enhancements.
# map legacy v8 records to the rebuilt v14 models for old in legacy.env["sale.order"].search([]): vals = { "partner_id": partner_map[old.partner_id.id], "date_order": old.date_order, "order_line": [(0, 0, line_vals(l)) for l in old.order_line], } new = env["sale.order"].create(vals) id_map["sale.order"][old.id] = new.id
Led the migration of company data and custom modules across six major versions at Aria Baniz, rebuilding the project from the ground up.
async def answer(q: str, company_key: str | None): qvec = (await embed([q]))[0] rows = s.execute( select(Chunk) .order_by(Chunk.embedding.cosine_distance(qvec)) .limit(6) ).scalars() return await claude(context=rows, question=q)
Résumé → embeddings → pgvector → Claude. Re-ranks sections against a pasted job ad; answers only from retrieved résumé chunks. Self-hosted with Docker on Oracle Cloud, CI deploys from GitHub.