A custom Odoo mini‑ERP to manage student clubs, campus events, budgets, sponsors, and purchase requests in one place.
- A custom Odoo module named
campus_event_erp, not a standalone app - Built for Windows Odoo installation (tested with Odoo 17)
- Focused on BITS‑style campus fests (Oasis), club events, and approvals
Core capabilities:
- Clubs and members (with faculty advisor, budgets)
- Events with dates, venues, media, and attachments
- Budget lines per event
- Purchase requests with approval state
- Sponsors and sponsorship amounts
- Computed financials (planned budget, actual spend, sponsorship, net cost)
- Windows 10/11
- Odoo installed from official Windows installer
- PostgreSQL set up by the Odoo installer
- Admin database created (e.g.
admin)
-
Clone / Download
- Clone this repo or download ZIP and extract, e.g. to
C:\Development\Odoo_hackathon\
- Clone this repo or download ZIP and extract, e.g. to
-
Copy module
-
Copy:
C:\Development\Odoo_hackathon\server\Hackathon\campus_event_erp\ -
Into your Odoo addons folder, for example:
C:\Program Files\Odoo\server\addons\campus_event_erp\ -
Or keep it in place and include the
Hackathonpath inaddons_path.
-
-
Configure
odoo.confEdit the config used by your Odoo server and ensure:
[options] addons_path = C:\Program Files\Odoo\server\addons,C:\Development\Odoo_hackathon\server\Hackathon db_host = localhost db_port = 5432 db_user = postgres db_password = YOUR_POSTGRES_PASSWORD db_name = admin data_dir = C:\Users\YOUR_USERNAME\AppData\Local\OpenERP S.A.\Odoo http_port = 8069 logfile = C:\Development\Odoo_hackathon\server\logs\odoo.log
Adjust paths, username, and database name to match your machine.
-
Restart Odoo
From an elevated Command Prompt:
net stop Odoo net start Odoo
-
Install the module
- Open
http://localhost:8069 - Log in as admin
- Go to Apps → search for Campus Club Event Manager or
campus_event_erp - Click Install
After install you should see a Campus Management menu with Clubs, Events, Purchase Requests, Sponsors, Reporting.
- Open
Model files
models/campus_club.pymodels/campus_club_member.py(inside same file)
CampusClub (campus.club)
name: Club name (required)code: Short unique code (e.g. RAGA, DANC)faculty_advisor_id:res.partner(faculty contact)currency_id:res.currency(defaults to company currency)total_budget: Monetary, overall club budgetevent_ids: One2many tocampus.eventmember_ids: One2many tocampus.club.memberactive: Boolean flag- SQL constraint: club code must be unique
Actions
action_open_events(): Open all events for this club (tree/form)action_open_members(): Open all members for this club (tree/form)
CampusClubMember (campus.club.member)
club_id: Many2one tocampus.club(required)partner_id: Many2one tores.partner(student contact)role: Selection – president, treasurer, core, volunteerjoin_date: Join date (defaults to today)is_core: Boolean, computed: true for president, treasurer, core
Model file
models/campus_event.py
CampusEventBudgetLine (campus.event.budget.line)
name: Line label (e.g. “Stage & Lights”)event_id: Many2one tocampus.eventcategory: Selection – decor, catering, printing, tech, prizes, otheramount: Monetarycurrency_id:res.currency(defaults to company)
CampusEvent (campus.event)
Basic fields:
name: Event name (required)club_id: Many2one tocampus.club(required)date: Event start date (required)end_date: Event end date (optional)venue: Text venue descriptionstate: Selection – idea, to_approve, approved, completed, cancelledplanned_attendees,actual_attendees: Integers
Media and attachments:
event_logo: Image field (poster/banner)attachment_ids: Many2manyir.attachmentfor extra files
Relations:
budget_line_ids: One2many tocampus.event.budget.linepurchase_request_ids: One2many tocampus.purchase.requestsponsor_ids: One2many tocampus.sponsorcurrency_id:res.currency
Computed monetary fields:
planned_budget_total: Sum ofbudget_line_ids.amountactual_spent_total: Sum ofpurchase_request_ids.amountfor states approved/paidsponsorship_total: Sum ofsponsor_ids.amountnet_cost:actual_spent_total - sponsorship_total
State transition helpers:
action_to_approve()→ sets stateto_approveaction_approve()→ sets stateapprovedaction_complete()→ sets statecompletedaction_cancel()→ sets statecancelled
Venue double‑booking constraint is present in comments and can be re‑enabled later; it is disabled in the hackathon build for stability.
Model file
models/campus_purchase_request.py
Key ideas:
name: Request reference / sequenceevent_id: Many2one tocampus.eventvendor_id: Many2one tores.partner(supplier)category: Linked to spending typeamount: Monetarycurrency_id:res.currencystate: workflow (draft → submitted → approved → paid / cancelled)
Approved/paid requests automatically roll into actual_spent_total on the event.
Model file
models/campus_sponsor.py
Key ideas:
name: Internal sponsorship labelevent_id: Many2one tocampus.eventpartner_id: Many2one tores.partner(sponsor)amount: Monetary contributionbenefits: Text explaining sponsor benefits
Sponsor amounts roll into sponsorship_total on the event.
View files
views/campus_menus.xml– main menu and actionsviews/campus_club_views.xml– clubs & members viewsviews/campus_event_views.xml– event list/form/kanban, image & attachmentsviews/campus_purchase_request_views.xml– PR viewsviews/campus_sponsor_views.xml– sponsor viewsviews/campus_reporting_views.xml– basic reporting
Top‑level menu (example):
- Campus Management
- Clubs
- Members
- Events
- Purchase Requests
- Sponsors
- Reporting
File
security/ir.model.access.csv
Grants basic user access to:
campus.clubcampus.club.membercampus.eventcampus.purchase.requestcampus.sponsor
A res.groups entry like Campus Event Manager (in campus_menus.xml) can be assigned to power users inside Odoo for tighter control.
If you run Odoo from VS Code instead of the Windows service:
- Add a launch config pointing to your
odoo-binandodoo.conf. - In the Run and Debug panel:
- Select “Odoo Campus Event ERP” (or your config name).
- Click Run Without Debugging (Ctrl+F5) to start the Odoo server quickly without attaching the debugger.
Then open http://localhost:8069 in the browser.
To show everything end‑to‑end:
- Create Contacts for faculty, students, vendors, sponsors.
- Create Clubs with faculty advisors and budgets.
- Add Members (president, treasurer, core, volunteers).
- Create a realistic fest event (dates, venue, logo, attachments).
- Add Budget Lines → watch Planned Budget update.
- Create Purchase Requests and approve/pay them → show Actual Spent.
- Add Sponsors → show Sponsorship and Net Cost.
- Use list, form, and kanban views plus Reporting to summarize.
- Module not in Apps → verify
addons_path, restart Odoo service. - DB errors → check
db_user,db_password,db_nameinodoo.conf. - Port conflict → change
http_portand use that in the browser. - Weird “search must be callable / method name” errors → never set
search=Trueon fields; either removesearchor point it to a real search method.