Lewati ke isi

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

  1. Never modify Odoo core (odoo/, addons/) or OpenEduCat (openeducat_*)
  2. Always use _inherit to extend existing models
  3. API controllers go in controllers/ directory within each module
  4. Security defined in security/ directory (groups, ACL, record rules)
  5. 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