Backend Stack¶
Teknologi dan arsitektur backend Scola (Odoo).
Last verified: 2026-03-16
Tech Stack¶
| Component | Technology | Version |
|---|---|---|
| ERP Framework | Odoo | 17.0 (Community) |
| Education Base | OpenEduCat | 17.0 |
| Database | PostgreSQL | 14+ |
| Web Server | Nginx | reverse proxy |
| Language | Python | 3.10+ |
| ORM | Odoo ORM | built-in |
Architecture¶
Nginx (reverse proxy)
├── / → serve dist/ (frontend)
├── /api/* → Odoo (port 8074)
└── /web/* → Odoo (port 8074)
Odoo Server (port 8074)
├── addons/ # Odoo standard addons (READ-ONLY)
├── custom_addons/
│ ├── openeducat_*/ # OpenEduCat modules (REFERENCE ONLY)
│ └── scola-odoo-module/ # Custom Scola modules (EDITABLE)
└── odoo.conf # Server configuration
Custom Modules Overview¶
| Module | Category | Extends | Purpose |
|---|---|---|---|
scola_core |
Base | base, hr, openeducat_core |
Auth, roles, security groups, base models |
scola_parent |
Base | openeducat_parent |
Parent management, NIK login |
scola_lesson_hours |
Academic | base |
Lesson hour definitions |
scola_timetable |
Academic | openeducat_timetable |
Timetable extensions |
scola_lms |
Academic | openeducat_core |
LMS: syllabus, discussions, grades |
scola_report_card |
Academic | openeducat_core |
Report card generation |
scola_cbt |
Assessment | base, mail, portal |
Computer-Based Testing |
scola_fees |
Finance | openeducat_fees |
Fee management, SPP |
scola_account |
Finance | l10n_id, om_account_accountant |
School accounting |
scola_payroll |
HR | om_hr_payroll |
Payroll extensions |
scola_hr |
HR | hr, hr_contract, hr_holidays |
Leave types, calendars, HR configuration |
scola_admission |
Admission | openeducat_admission |
SPMB/admission |
scola_attendance |
Attendance | openeducat_attendance |
Attendance + RFID |
Development Rules¶
- Never modify Odoo core (
odoo/,addons/) or OpenEduCat (openeducat_*) - Always use
_inheritto extend existing models - API controllers go in
controllers/directory within each module - Security defined in
security/directory (groups, ACL, record rules) - Data files in
data/(default records, cron jobs)
Server Configuration (odoo.conf)¶
[options]
admin_passwd = <admin_password>
db_host = localhost
db_port = 5432
db_user = odoo
db_password = <db_password>
addons_path = /home/scola/odoo/addons,/home/scola/odoo/custom_addons
http_port = 8074
proxy_mode = True
API Pattern¶
Scola uses JSON-RPC (Odoo standard) + custom REST controllers:
# JSON-RPC (Odoo standard)
POST /api/dataset/model.name → search_read, create, write, unlink
# Custom REST (Scola controllers)
GET /api/v1/<domain>/<resource> → read/list
POST /api/v1/<domain>/<resource> → create/action