Platform ERP thΓ΄ng minh - GiαΊ£i phΓ‘p toΓ n diα»n cho hα»c phαΊ§n Thα»±c tαΊp doanh nghiα»p
Platform ERP Δược xΓ’y dα»±ng trΓͺn nα»n tαΊ£ng Odoo mΓ£ nguα»n mα», tΓch hợp cΓ‘c cΓ΄ng nghα» tiΓͺn tiαΊΏn nhΖ° AI, Chα»― kΓ½ sα», vΓ Tα»± Δα»ng hΓ³a quy trΓ¬nh. Hα» thα»ng cung cαΊ₯p giαΊ£i phΓ‘p quαΊ£n lΓ½ tΓch hợp cho:
|
TΓ i sαΊ£n QuαΊ£n lΓ½ vΓ²ng Δα»i |
PhΓ²ng hα»p ΔαΊ·t lα»ch thΓ΄ng minh |
NhΓ’n sα»± QuαΊ£n lΓ½ tα» chα»©c |
VΔn bαΊ£n Luα»ng phΓͺ duyα»t |
π€ AI Assistant β TαΊ‘o biΓͺn bαΊ£n, gợi Γ½ thα»i gian hα»p tα»± Δα»ng
π Chα»― kΓ½ sα» β PhΓͺ duyα»t Δiα»n tα», xΓ‘c thα»±c ngΖ°α»i kΓ½
β‘ Tα»± Δα»ng hΓ³a β Quy trΓ¬nh phΓͺ duyα»t, nhαΊ―c viα»c thΓ΄ng minh
π TΓch hợp Δa nα»n tαΊ£ng β Zoom, Google Calendar, Email
Module quαΊ£n lΓ½ tΓ i sαΊ£n vΓ phΓ²ng hα»p vα»i AI vΓ tα»± Δα»ng hΓ³a
| TΓnh nΔng | MΓ΄ tαΊ£ |
|---|---|
| π Danh mα»₯c | QuαΊ£n lΓ½ danh mα»₯c, mΓ£ tΓ i sαΊ£n, vα» trΓ, trαΊ‘ng thΓ‘i |
| π₯ GΓ‘n tΓ i sαΊ£n | GΓ‘n cho nhΓ’n viΓͺn, theo dΓ΅i lα»ch sα» gΓ‘n |
| π Mượn/TrαΊ£ | Quy trΓ¬nh phΓͺ duyα»t tα»± Δα»ng, nhαΊ―c quΓ‘ hαΊ‘n |
| π§ BαΊ£o trΓ¬ | TαΊ‘o yΓͺu cαΊ§u, phΓ’n cΓ΄ng kα»Ή thuαΊt viΓͺn, lα»ch Δα»nh kα»³ |
| π BΓ‘o cΓ‘o | Dashboard tα»ng quan, bΓ‘o cΓ‘o chi tiαΊΏt, thα»ng kΓͺ |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ΔαΊ·t lα»ch β Kiα»m tra xung Δα»t β PhΓͺ duyα»t tα»± Δα»ng β
β β β β β
β Calendar Zoom Link Email thΓ΄ng bΓ‘o β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| TΓnh nΔng | Chi tiαΊΏt |
|---|---|
| β Smart Booking | Kiα»m tra xung Δα»t thα»i gian, gợi Γ½ phΓ²ng/khung giα» khΓ‘c |
| β Approval Flow | Tα»± Δα»ng tαΊ‘o vΔn bαΊ£n ΔαΊΏn β PhΓͺ duyα»t β VΔn bαΊ£n Δi |
| β Check-in/out | Tα»± Δα»ng cαΊp nhαΊt trαΊ‘ng thΓ‘i, theo dΓ΅i sα» dα»₯ng |
| β Integration | Zoom meeting, Google Calendar, Email notification |
| AI Feature | CΓ΄ng dα»₯ng |
|---|---|
| π€ Meeting Minutes | TαΊ‘o biΓͺn bαΊ£n cuα»c hα»p tα»± Δα»ng tα»« thΓ΄ng tin booking |
| π Smart Scheduling | Gợi Γ½ thα»i gian hα»p dα»±a trΓͺn lα»ch ngΖ°α»i tham dα»± |
| π Agenda Generator | TαΊ‘o chΖ°Ζ‘ng trΓ¬nh hα»p chi tiαΊΏt |
| π¬ AI Chat | Trợ lΓ½ αΊ£o tΖ° vαΊ₯n quαΊ£n lΓ½ tΓ i sαΊ£n/phΓ²ng hα»p |
| π Document Flow | Chuyα»n biΓͺn bαΊ£n AI thΓ nh vΔn bαΊ£n chΓnh thα»©c |
QuαΊ£n lΓ½ nhΓ’n sα»± vΓ cαΊ₯u trΓΊc tα» chα»©c
|
π’ CαΊ₯u trΓΊc tα» chα»©c
|
π Hα» sΖ‘ nhΓ’n viΓͺn
|
π PhΓ’n quyα»n
|
QuαΊ£n lΓ½ vΔn bαΊ£n vα»i chα»― kΓ½ sα» vΓ quy trΓ¬nh phΓͺ duyα»t tα»± Δα»ng
graph LR
A[TiαΊΏp nhαΊn] --> B[PhΓ’n loαΊ‘i]
B --> C{LoαΊ‘i VB}
C -->|PhΓͺ duyα»t| D[Chα» kΓ½]
C -->|ThΓ΄ng thΖ°α»ng| E[Xα» lΓ½]
D --> F[KΓ½ sα»]
F --> G[Duyα»t]
G --> H[TαΊ‘o VB Δi]
| Chα»©c nΔng | MΓ΄ tαΊ£ |
|---|---|
| π¨ TiαΊΏp nhαΊn | PhΓ’n loαΊ‘i vΔn bαΊ£n ΔαΊΏn, gΓ‘n ngΖ°α»i xα» lΓ½ |
| βοΈ Chα»― kΓ½ sα» | KΓ½ Δiα»n tα» vα»i xΓ‘c thα»±c ngΖ°α»i kΓ½ |
| π Theo dΓ΅i | TrαΊ‘ng thΓ‘i: pending β signed β approved |
| π LiΓͺn kαΊΏt | KαΊΏt nα»i vα»i booking/lending Δα» phΓͺ duyα»t |
| Nguα»n tαΊ‘o | Quy trΓ¬nh |
|---|---|
| π€ Tα»± Δα»ng | Tα»« vΔn bαΊ£n ΔαΊΏn ΔΓ£ phΓͺ duyα»t (mΓ£: PD/2026/xxxx) |
| βοΈ Thα»§ cΓ΄ng | SoαΊ‘n thαΊ£o, duyα»t, phΓ‘t hΓ nh (mΓ£: YC/2026/xxxx) |
Booking/Lending Request
β
VΔn bαΊ£n ΔαΊΏn (YC/2026/xxxx)
β
KΓ½ sα» + PhΓͺ duyα»t
β
VΔn bαΊ£n Δi (PD/2026/xxxx)
β
CαΊp nhαΊt trαΊ‘ng thΓ‘i nguα»n
TΓch hợp liΓͺn thΓ΄ng giα»―a cΓ‘c phΓ’n hα»
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β NhΓ’n sα»± ββββββΆβ VΔn bαΊ£n βββββββ TΓ i sαΊ£n β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β β β
ββββββββββββββββββββββΌβββββββββββββββββββββ
β
ββββββΌβββββ
β AI β
βββββββββββ
| Luα»ng | MΓ΄ tαΊ£ |
|---|---|
| π― Asset β HR | GΓ‘n tΓ i sαΊ£n cho nhΓ’n viΓͺn, lα»ch sα» gΓ‘n |
| π Meeting β Document | Booking β VΔn bαΊ£n ΔαΊΏn β PhΓͺ duyα»t β VΔn bαΊ£n Δi |
| π€ AI β Document | BiΓͺn bαΊ£n AI β VΔn bαΊ£n ΔαΊΏn β KΓ½ duyα»t |
| π§ Email Notification | Tα»± Δα»ng gα»i thΓ΄ng bΓ‘o cho cΓ‘c bΓͺn liΓͺn quan |
π Giao diα»n trα»±c quan vΓ thΓ’n thiα»n vα»i ngΖ°α»i dΓΉng
|
π Danh sΓ‘ch tΓ i sαΊ£n
[Screenshot coming soon] |
π Chi tiαΊΏt tΓ i sαΊ£n
[Screenshot coming soon] |
|
ποΈ Calendar View
[Screenshot coming soon] |
β Approval Workflow
[Screenshot coming soon] |
|
π₯ Incoming Documents
[Screenshot coming soon] |
π€ Outgoing Documents
[Screenshot coming soon] |
|
π§ AI Wizard
[Screenshot coming soon] |
π¬ AI Chat Interface
[Screenshot coming soon] |
π‘ SΖ‘ Δα» nghiα»p vα»₯ chi tiαΊΏt - Hiα»n thα» trα»±c tiαΊΏp trΓͺn GitHub/GitLab
flowchart LR
A[TαΊ‘o tΓ i sαΊ£n] --> B{TrαΊ‘ng thΓ‘i}
B -->|SαΊ΅n sΓ ng| C[Sα» dα»₯ng nα»i bα»]
C --> D[GΓ‘n cho nhΓ’n viΓͺn]
D --> E[Thu hα»i / LuΓ’n chuyα»n]
E --> B
B -->|Δang mượn| F[Mượn/TrαΊ£ tΓ i sαΊ£n]
F --> B
B -->|BαΊ£o trΓ¬| G[TαΊ‘o yΓͺu cαΊ§u bαΊ£o trΓ¬]
G --> H[Thα»±c hiα»n/HoΓ n thΓ nh]
H --> B
B -->|Thanh lΓ½| I[Δα» xuαΊ₯t / PhΓͺ duyα»t]
I --> J[Thanh lΓ½ / Ghi nhαΊn]
J --> K[ΔΓ£ thanh lΓ½]
style A fill:#e1f5ff
style K fill:#ffe1e1
style B fill:#fff4e1
flowchart TD
U[π€ NgΖ°α»i dΓΉng tαΊ‘o phiαΊΏu mượn] --> V[π Chα»n tΓ i sαΊ£n + thα»i hαΊ‘n]
V --> W{π TΓ i sαΊ£n khαΊ£ dα»₯ng?}
W -->|β KhΓ΄ng| X[β οΈ ThΓ΄ng bΓ‘o khΓ΄ng khαΊ£ dα»₯ng]
W -->|β
CΓ³| Y[π TαΊ‘o vΔn bαΊ£n ΔαΊΏn tα»± Δα»ng]
Y --> Z[π€ Gα»i Ban GiΓ‘m Δα»c phΓͺ duyα»t]
Z --> AA{π€ PhΓͺ duyα»t?}
AA -->|β Tα»« chα»i| AB[π§ ThΓ΄ng bΓ‘o tα»« chα»i]
AA -->|β
ChαΊ₯p nhαΊn| AC[βοΈ KΓ½ sα» trΓͺn vΔn bαΊ£n]
AC --> AD[π TαΊ‘o vΔn bαΊ£n Δi + CαΊp nhαΊt trαΊ‘ng thΓ‘i]
AD --> AE[π Δang mượn]
AE --> AF{π
ΔαΊΏn hαΊ‘n?}
AF -->|β
ΔΓΊng| AG[β° Tα»± Δα»ng ΔΓ‘nh dαΊ₯u quΓ‘ hαΊ‘n + nhαΊ―c trαΊ£]
AF -->|β ChΖ°a| AE
AE --> AH[π TrαΊ£ tΓ i sαΊ£n]
AG --> AH
AH --> AI[β
HoΓ n tαΊ₯t + cαΊp nhαΊt trαΊ‘ng thΓ‘i tΓ i sαΊ£n]
style Y fill:#e3f2fd
style AC fill:#f3e5f5
style AI fill:#e8f5e9
flowchart TD
M[β οΈ PhΓ‘t sinh sα»± cα» / lα»ch Δα»nh kα»³] --> N[π TαΊ‘o yΓͺu cαΊ§u bαΊ£o trΓ¬]
N --> O[π· PhΓ’n cΓ΄ng kα»Ή thuαΊt viΓͺn]
O --> P[βοΈ Δang xα» lΓ½]
P --> Q{β
HoΓ n thΓ nh?}
Q -->|β ChΖ°a| P
Q -->|β
CΓ³| R[π HoΓ n thΓ nh + cαΊp nhαΊt tΓ i sαΊ£n]
S[π€ Cron: NhαΊ―c lα»ch bαΊ£o trΓ¬] --> N
T[π€ Cron: NhαΊ―c quΓ‘ hαΊ‘n mượn] --> AG[π§ ThΓ΄ng bΓ‘o quΓ‘ hαΊ‘n]
style S fill:#fff3e0
style T fill:#fff3e0
style R fill:#e8f5e9
flowchart TD
A1[π€ NgΖ°α»i dΓΉng tαΊ‘o booking] --> A2[π Chα»n phΓ²ng + thα»i gian + ngΖ°α»i tham dα»±]
A2 --> A3{π Kiα»m tra xung Δα»t}
A3 -->|β οΈ CΓ³ xung Δα»t| A4[π‘ Gợi Γ½ phΓ²ng/khung giα» khΓ‘c]
A4 --> A2
A3 -->|β
KhΓ΄ng| A5[π TαΊ‘o vΔn bαΊ£n ΔαΊΏn tα»± Δα»ng]
A5 --> A6[π€ Gα»i Ban GiΓ‘m Δα»c phΓͺ duyα»t]
A6 --> A7{π€ PhΓͺ duyα»t?}
A7 -->|β Tα»« chα»i| A8[π§ ThΓ΄ng bΓ‘o tα»« chα»i + Hα»§y booking]
A7 -->|β
ChαΊ₯p nhαΊn| A9[βοΈ KΓ½ sα» trΓͺn vΔn bαΊ£n]
A9 --> A10[π TαΊ‘o vΔn bαΊ£n Δi + XΓ‘c nhαΊn booking]
A10 --> A11[π§ Gα»i email xΓ‘c nhαΊn]
A10 --> A12[π
Δα»ng bα» sα»± kiα»n Calendar]
A10 --> A13[π₯ TαΊ‘o/ΔΓnh kΓ¨m Zoom meeting]
A14[π€ Sau cuα»c hα»p: AI tαΊ‘o biΓͺn bαΊ£n] --> A15[π LΖ°u biΓͺn bαΊ£n lΓ m vΔn bαΊ£n ΔαΊΏn]
A15 --> A6
A16[β
Check-in/Check-out] --> A17[π CαΊp nhαΊt trαΊ‘ng thΓ‘i booking]
style A9 fill:#f3e5f5
style A14 fill:#e1f5fe
style A12 fill:#f1f8e9
style A13 fill:#f1f8e9
flowchart TD
D1[π₯ VΔn bαΊ£n ΔαΊΏn] --> D2[π TiαΊΏp nhαΊn + phΓ’n loαΊ‘i]
D2 --> D3{π LoαΊ‘i vΔn bαΊ£n}
D3 -->|β‘ YΓͺu cαΊ§u phΓͺ duyα»t| D4[π Booking/Lending/Meeting Minutes]
D3 -->|π VΔn bαΊ£n thΖ°α»ng| D5[π₯ PhΓ’n cΓ΄ng xα» lΓ½]
D4 --> D6[β³ Chα» phΓͺ duyα»t - Pending]
D6 --> D7{π Ban GiΓ‘m Δα»c xα» lΓ½}
D7 -->|βοΈ KΓ½ sα»| D8[β
TrαΊ‘ng thΓ‘i: Signed]
D8 --> D9[π PhΓͺ duyα»t/Tα»« chα»i]
D9 --> D10{β KαΊΏt quαΊ£}
D10 -->|β
Approved| D11[π€ TαΊ‘o vΔn bαΊ£n Δi + CαΊp nhαΊt nguα»n]
D10 -->|β Rejected| D12[π§ ThΓ΄ng bΓ‘o tα»« chα»i]
D5 --> D13[π Theo dΓ΅i tiαΊΏn Δα»/nhαΊ―c viα»c]
D13 --> D14[β
HoΓ n tαΊ₯t + lΖ°u trα»―]
E1[π€ VΔn bαΊ£n Δi] --> E2{π Nguα»n tαΊ‘o}
E2 -->|π€ Tα»± Δα»ng tα»« phΓͺ duyα»t| E3[π NhαΊn nα»i dung tα»« vΔn bαΊ£n ΔαΊΏn]
E2 -->|βοΈ SoαΊ‘n thαΊ£o thα»§ cΓ΄ng| E4[π SoαΊ‘n thαΊ£o nα»i dung]
E3 --> E5[π¨ PhΓ‘t hΓ nh + lΖ°u trα»―]
E4 --> E6[β
Duyα»t/ban hΓ nh]
E6 --> E5
style D8 fill:#f3e5f5
style D11 fill:#e8f5e9
style D12 fill:#ffebee
flowchart TD
H1[π’ TαΊ‘o ΔΖ‘n vα»/phΓ²ng ban] --> H2[π TαΊ‘o chα»©c vα»₯]
H2 --> H3[π€ TαΊ‘o hα» sΖ‘ nhΓ’n viΓͺn]
H3 --> H4[π CαΊp nhαΊt lα»ch sα» cΓ΄ng tΓ‘c]
H3 --> H5[π QuαΊ£n lΓ½ chα»©ng chα»/bαΊ±ng cαΊ₯p]
H6[π PhΓ’n quyα»n ngΖ°α»i dΓΉng] --> H3
H7[π NhΓ’n viΓͺn liΓͺn kαΊΏt vα»i vΔn bαΊ£n] --> H8[βοΈ PhΓͺ duyα»t/kΓ½ vΔn bαΊ£n]
H3 --> H7
style H3 fill:#e3f2fd
style H8 fill:#f3e5f5
flowchart TD
AI1[π
Cuα»c hα»p diα»
n ra] --> AI2[π§ Mα» AI Meeting Wizard]
AI2 --> AI3[π€ AI tαΊ‘o biΓͺn bαΊ£n tα»± Δα»ng]
AI3 --> AI4{π€ NgΖ°α»i dΓΉng}
AI4 -->|βοΈ Chα»nh sα»a| AI3
AI4 -->|πΎ LΖ°u lΓ m vΔn bαΊ£n ΔαΊΏn| AI5[π TαΊ‘o vΔn bαΊ£n ΔαΊΏn]
AI5 --> AI6[π€ Gα»i Ban GiΓ‘m Δα»c]
AI6 --> AI7[βοΈ KΓ½ sα» + PhΓͺ duyα»t]
AI7 --> AI8[π TαΊ‘o vΔn bαΊ£n Δi - BiΓͺn bαΊ£n chΓnh thα»©c]
AI8 --> AI9[π§ Gα»i cho cΓ‘c bΓͺn liΓͺn quan]
style AI3 fill:#e1f5fe
style AI7 fill:#f3e5f5
style AI8 fill:#e8f5e9
π HΖ°α»ng dαΊ«n cΓ i ΔαΊ·t tα»« A-Z
| Component | Requirement |
|---|---|
| OS | Ubuntu 20.04+ / Debian 11+ / WSL2 |
| Python | 3.10 |
| PostgreSQL | 12+ (via Docker recommended) |
| RAM | Minimum: 4GB | Recommended: 8GB+ |
| Storage | Minimum: 10GB free space |
| Browser | Chrome 90+ / Firefox 88+ / Edge 90+ |
git clone https://gitlab.com/anhlta/odoo-fitdnu.git
cd odoo-fitdnusudo apt-get update && sudo apt-get install -y \
libxml2-dev libxslt-dev libldap2-dev libsasl2-dev \
libssl-dev python3.10-distutils python3.10-dev \
build-essential libffi-dev zlib1g-dev python3.10-venv \
libpq-dev wkhtmltopdf# Create virtual environment
python3.10 -m venv ./venv
# Activate
source venv/bin/activate # Linux/Mac
# or
.\venv\Scripts\activate # Windows
# Install Python packages
pip3 install --upgrade pip
pip3 install -r requirements.txt# Install Docker (if not installed)
sudo apt-get install docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker
# Start PostgreSQL container
sudo docker-compose up -d
# Verify container is running
sudo docker psπ¦ Docker Compose Configuration
version: '3'
services:
postgres:
image: postgres:14
environment:
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoo
POSTGRES_DB: postgres
ports:
- "5431:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:# Copy configuration template
cp odoo.conf.template odoo.confEdit odoo.conf:
[options]
addons_path = addons
db_host = localhost
db_password = odoo
db_user = odoo
db_port = 5431
xmlrpc_port = 8069
limit_time_cpu = 600
limit_time_real = 1200
workers = 2# First time setup - Install base modules
./odoo-bin -c odoo.conf -d fitdnu_db \
-i base,nhan_su,quan_ly_van_ban,dnu_meeting_asset
# Wait for installation to complete...# Normal mode
./odoo-bin -c odoo.conf
# Development mode (with auto-reload)
./odoo-bin -c odoo.conf --dev=allπ URL: http://localhost:8069
πΎ Database: fitdnu_db
π€ Username: admin
π Password: admin
- Login to Odoo as admin
- Go to Settings β Technical β OpenAI Configuration
- Enter your OpenAI API Key
- Select model:
gpt-4orgpt-3.5-turbo - Click Save and Test Connection
# Get API key from: https://platform.openai.com/api-keys
OPENAI_API_KEY = "sk-..."- Go to Settings β Integrations β Google Calendar
- Create OAuth2 credentials at Google Cloud Console
- Configure callback URL:
http://localhost:8069/google_calendar/authentication - Enter Client ID and Client Secret
- Click Connect and authorize
- Create Zoom App at Zoom Marketplace
- Get API Key and API Secret
- In Odoo: Settings β Integrations β Zoom
- Enter credentials and activate
- Go to Settings β Technical β Outgoing Mail Servers
- Create new server with SMTP details:
SMTP Server: smtp.gmail.com
SMTP Port: 587
Security: TLS
Username: your-email@gmail.com
Password: app-password- Click Test Connection
# Update module after code changes
./odoo-bin -c odoo.conf -d fitdnu_db -u dnu_meeting_asset --stop-after-init
# Update multiple modules
./odoo-bin -c odoo.conf -d fitdnu_db \
-u dnu_meeting_asset,quan_ly_van_ban --stop-after-init
# Clear cache
rm -rf ~/.local/share/Odoo/sessions/*
# Restart Odoo
# Press Ctrl+C to stop, then start againπ‘ HΖ°α»ng dαΊ«n sα» dα»₯ng cΓ‘c tΓnh nΔng chΓnh
graph LR
A[Create<br/>Booking] --> B[Auto<br/>Document]
B --> C[Approve &<br/>Sign]
C --> D[Confirmed]
style A fill:#e3f2fd
style C fill:#f3e5f5
style D fill:#e8f5e9
Detailed Steps:
-
Create Booking
- Navigate to:
Meeting Room β Create Booking - Fill in: Room, Date/Time, Participants
- Add meeting purpose and notes
- Navigate to:
-
Automatic Process
- System creates incoming document automatically
- Sends notification to Board of Directors
- Document code:
YC/2026/xxxx
-
Approval
- Board accesses:
Incoming Documents - Reviews booking details
- Signs digitally and approves/rejects
- Board accesses:
-
Confirmation
- System creates outgoing document:
PD/2026/xxxx - Updates booking status β
Confirmed - Sends email confirmation
- Syncs with Google Calendar
- Creates Zoom meeting link
- System creates outgoing document:
-
Open AI Wizard
Meeting Room β [Select Meeting] β AI Meeting Wizard -
Generate Minutes
- Select: "Create Meeting Minutes"
- AI analyzes: participants, time, room, purpose
- Generates complete minutes automatically
-
Review & Edit
- Review AI-generated content
- Edit if needed
- Add additional notes
-
Save as Document
- Click: "Save as Incoming Document"
- Document sent to Board for approval
- After approval β Official document created
AI Features:
| Feature | Description |
|---|---|
| π Smart Content | AI understands context and generates appropriate content |
| π― Structured Format | Follows official meeting minutes format |
| β‘ Fast | Generates in seconds |
| π Editable | Can be modified before saving |
ββββββββββββββββββββββββββββββββββββ
β Draw your signature here β
β β
β [Signature Canvas] β
β β
β [Clear] [Save] β
ββββββββββββββββββββββββββββββββββββ
How to Sign:
- Open document requiring signature
- Click "Sign" button
- Draw signature using mouse/touchscreen
- Click "Save"
- Signature is saved with:
- β Timestamp
- β User authentication
- β Department linkage
- β Cannot be edited
| Step | Action | System Response |
|---|---|---|
| 1οΈβ£ | Create lending request | Check asset availability |
| 2οΈβ£ | Select asset & duration | Auto-create document |
| 3οΈβ£ | Wait for approval | Notification sent |
| 4οΈβ£ | Board approves | Asset status β "Lending" |
| 5οΈβ£ | Use asset | Auto-reminder before due |
| 6οΈβ£ | Return asset | Status β "Available" |
Auto-Reminders:
- π§ 3 days before due date
- π§ On due date
- π§ After overdue (daily)
For Bookings:
Meeting Room β Bookings β Filter: Pending
β Click [Approve] or [Reject]
β Enter reason (if rejecting)
β Done!
For Lending:
Assets β Lending Requests β Filter: Pending
β Click [Approve] or [Reject]
β System updates automatically
Benefits:
- β‘ No need to open document
- π Batch approval possible
- π Real-time status update
- π§ Auto-notification
Business-Internship/
β
βββ π addons/ # Custom Odoo Modules
β β
β βββ π¦ nhan_su/ # HR Management Module
β β βββ models/ # Python models
β β β βββ chuc_vu.py # Position model
β β β βββ don_vi.py # Department model
β β β βββ nhan_vien.py # Employee model
β β β βββ lich_su_cong_tac.py # Work history
β β βββ views/ # XML views
β β βββ security/ # Access rights
β β β βββ ir.model.access.csv
β β β βββ security.xml
β β βββ data/ # Master data
β β
β βββ π¦ quan_ly_van_ban/ # Document Management
β β βββ models/
β β β βββ van_ban_den.py # Incoming documents + approval
β β β βββ van_ban_di.py # Outgoing documents
β β β βββ van_ban_task.py # Task reminders
β β βββ wizards/
β β β βββ van_ban_sign_wizard.py # Digital signature wizard
β β βββ views/
β β β βββ van_ban_den_views.xml
β β β βββ van_ban_di_views.xml
β β βββ data/
β β βββ sequence.xml # Document numbering
β β
β βββ π¦ dnu_meeting_asset/ # Asset & Meeting Module
β βββ models/
β β βββ dnu_asset.py # Asset management
β β βββ dnu_meeting_booking.py # Meeting booking
β β βββ dnu_asset_lending.py # Asset lending
β β βββ openai_service.py # OpenAI integration
β β βββ ai_history.py # AI request logs
β βββ wizards/
β β βββ ai_wizard.py # AI assistant wizard
β βββ views/
β β βββ dnu_meeting_booking_views.xml
β β βββ dnu_asset_views.xml
β β βββ ai_wizard_views.xml
β βββ data/
β β βββ openai_data.xml # OpenAI config
β βββ static/src/
β β βββ js/
β β β βββ signature_widget.js # Signature widget
β β βββ css/
β β βββ signature_widget.css
β βββ security/
β βββ ir.model.access.csv
β βββ security.xml
β
βββ π odoo/ # Odoo Core Framework
βββ π doc/ # Official Documentation
βββ π docs/ # Project Documentation
β βββ logo/ # Logos & Images
β βββ projects/ # Student Projects
β βββ K15/ # Year 2024 projects
β
βββ π odoo-bin # Odoo Executable
βββ π odoo.conf # Configuration File
βββ π docker-compose.yml # Docker PostgreSQL Setup
βββ π requirements.txt # Python Dependencies
βββ π README.md # This File
graph TD
A[base] --> B[nhan_su]
A --> C[quan_ly_van_ban]
A --> D[dnu_meeting_asset]
B --> C
B --> D
C --> D
style A fill:#e3f2fd
style B fill:#fff3e0
style C fill:#f3e5f5
style D fill:#e8f5e9
| Asset & Meeting Management | |
|---|---|
| Meeting User |
β
Create bookings β View own bookings β Cannot approve |
| Meeting Manager |
β
All Meeting User rights β Manage all bookings β Configure meeting rooms β View reports |
| Asset User |
β
Create lending requests β View own assets β Return borrowed assets β Cannot manage assets |
| Asset Manager |
β
All Asset User rights β Create/Edit assets β Assign assets to employees β Manage maintenance β View all reports |
| Document Management | |
|---|---|
| Document User |
β
View documents β Search & filter β Cannot create/edit |
| Document Manager |
β
All Document User rights β Create/Edit documents β Assign tasks β Manage document flow β Cannot approve |
| Document Approver (Board of Directors) |
β
All Document Manager rights β Digital Signature β Approve/Reject requests β Create outgoing documents |
| Human Resource Management | |
|---|---|
| HR User |
β
View employee information β View departments β Cannot edit |
| HR Manager |
β
All HR User rights β Create/Edit employees β Manage departments β Manage positions β Work history tracking β Certificate management |
| Permission | Required Role | Description |
|---|---|---|
| Digital Signature | Document Approver | Only Board members can sign |
| AI Features | All Users | Anyone can use AI assistant |
| Auto Document Creation | System | Triggered by booking/lending |
| Email Notifications | System | Auto-sent to relevant users |
# 1. Start test database
./odoo-bin -c odoo.conf -d test_db --test-enable
# 2. Test scenariosTest Cases:
| # | Scenario | Expected Result |
|---|---|---|
| 1 | Create booking | Auto-create incoming document |
| 2 | Approve booking | Create outgoing document + update status |
| 3 | Reject booking | Send rejection notification |
| 4 | Create lending | Check asset availability |
| 5 | Overdue lending | Auto-reminder sent |
| 6 | AI meeting minutes | Generate content successfully |
Steps:
- Configure OpenAI API key
- Go to:
Settings β Technical β OpenAI Configuration - Click "Test Connection"
- Try each AI feature:
- β Meeting minutes generation
- β Smart scheduling
- β Agenda creation
- β AI chat
- Check AI History for logs
Verify:
# Check AI service status
Settings β Technical β AI History
β View request/response logs
β Check success rate- Open incoming document
- Click "Sign" button
- Draw signature
- Save and verify:
- β Signature image saved
- β Timestamp recorded
- β User info linked
- β Cannot edit after saving
# Check PostgreSQL container
sudo docker ps
# Expected output:
CONTAINER ID IMAGE STATUS
xxxxx postgres:14 Up 10 minutes
# If not running:
sudo docker-compose up -d
# Check port:
sudo netstat -tulpn | grep 5431# Option 1: Upgrade module
./odoo-bin -c odoo.conf -d your_db -u module_name --stop-after-init
# Option 2: Clear cache
rm -rf ~/.local/share/Odoo/sessions/*
rm -rf ~/.local/share/Odoo/filestore/*
# Option 3: Reinstall
./odoo-bin -c odoo.conf -d your_db -i module_name --stop-after-initChecklist:
- β API key configured correctly
- β Internet connection available
- β API key has credits
- β
Model name correct (
gpt-4orgpt-3.5-turbo)
# Test API key manually
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
# Check Odoo logs
tail -f /var/log/odoo/odoo.log | grep -i "openai"# Clear browser cache
Ctrl + Shift + Delete
# Check JavaScript console
F12 β Console β Look for errors
# Upgrade module
./odoo-bin -c odoo.conf -d your_db -u quan_ly_van_ban --stop-after-init
# Check static files
ls -la addons/dnu_meeting_asset/static/src/js/Check:
- SMTP server configured:
Settings β Technical β Outgoing Mail Servers - Test connection in Odoo
- Check firewall: port 587 or 465 open
- Gmail users: Use app password, not regular password
-- Connect to PostgreSQL
sudo docker exec -it postgres_container psql -U odoo
-- Reindex database
REINDEX DATABASE your_db_name;
-- Vacuum analyze
VACUUM ANALYZE;
-- Check database size
SELECT pg_database.datname,
pg_size_pretty(pg_database_size(pg_database.datname)) AS size
FROM pg_database;# odoo.conf - Production settings
[options]
workers = 4 # CPU cores * 2
max_cron_threads = 2
limit_memory_hard = 2684354560 # 2.5 GB
limit_memory_soft = 2147483648 # 2 GB
limit_time_cpu = 600
limit_time_real = 1200
db_maxconn = 64Performance Tips:
- β Use workers > 0 for production
- β Set memory limits to prevent crashes
- β Regular database vacuum
- β Monitor logs for slow queries
- β Use PostgreSQL 14+ for better performance
π― HΖ°α»ng dαΊ«n ΔΓ³ng gΓ³p cho dα»± Γ‘n
|
Python (PEP 8) # Good β
class AssetLending(models.Model):
_name = 'dnu.asset.lending'
_description = 'Asset Lending'
def action_approve(self):
"""Approve lending request"""
self.state = 'approved' |
JavaScript (ES6+) // Good β
const signatureWidget = {
init() {
this.canvas = document.getElementById('canvas');
this.context = this.canvas.getContext('2d');
},
clear() {
this.context.clearRect(0, 0, width, height);
}
}; |
General Rules:
- β Use meaningful variable/function names
- β Add docstrings for Python functions
- β Comment complex logic
- β Follow existing code style
- β Write modular, reusable code
gitGraph
commit id: "main"
branch feature/booking-approval
checkout feature/booking-approval
commit id: "Add booking model"
commit id: "Add approval logic"
commit id: "Add tests"
checkout main
merge feature/booking-approval
commit id: "Release v1.1"
Steps:
# 1. Create feature branch
git checkout -b feature/your-feature-name
# 2. Make changes and commit
git add .
git commit -m "feat: add new feature description"
# 3. Push to remote
git push origin feature/your-feature-name
# 4. Create Merge Request on GitLab
# Go to: https://gitlab.com/anhlta/odoo-fitdnu
# Click: "Create Merge Request"We follow Conventional Commits standard:
<type>(<scope>): <subject>
<body>
<footer>
Types:
| Type | Description | Example |
|---|---|---|
feat |
New feature | feat(asset): add lending approval |
fix |
Bug fix | fix(booking): resolve conflict check |
docs |
Documentation | docs(readme): update install guide |
style |
Code formatting | style: apply PEP8 formatting |
refactor |
Code restructuring | refactor(meeting): optimize query |
test |
Add tests | test(lending): add approval tests |
chore |
Dependencies, configs | chore: update requirements.txt |
perf |
Performance improvement | perf(asset): optimize search |
Examples:
# Good β
git commit -m "feat(ai): add meeting minutes generator"
git commit -m "fix(signature): resolve canvas size issue"
git commit -m "docs: update API documentation"
# Bad β
git commit -m "update"
git commit -m "fix bug"
git commit -m "changes"Checklist:
# 1. Check Python syntax
python -m py_compile addons/your_module/**/*.py
# 2. Test module installation
./odoo-bin -c odoo.conf -d test_db -i your_module --stop-after-init
# 3. Test module upgrade
./odoo-bin -c odoo.conf -d test_db -u your_module --stop-after-init
# 4. Check for errors
tail -f odoo.log | grep -i error
# 5. Test in browser
# - Clear cache (Ctrl + Shift + Delete)
# - Test functionality
# - Check JavaScript console (F12)PR Title Format:
[Module] Brief description
Example:
[dnu_meeting_asset] Add AI meeting minutes generation
[quan_ly_van_ban] Implement digital signature
PR Description Template:
## Description
Brief description of what this PR does
## Changes
- Added feature X
- Fixed bug Y
- Updated documentation Z
## Screenshots
(If applicable, add screenshots)
## Testing
- [ ] Tested locally
- [ ] Module installs correctly
- [ ] No console errors
- [ ] All features working
## Related Issues
Closes #123For Reviewers:
- Code follows style guidelines
- Changes are well documented
- No hardcoded values
- Security: no SQL injection risks
- Performance: no N+1 queries
- i18n: strings are translatable
- Tests pass successfully
- Documentation updated
|
aiotlab@dainam.edu.vn |
AIoTLab DNU |
Website DaiNam University |
GitLab odoo-fitdnu |
| Resource | Link |
|---|---|
| Odoo Documentation | π docs.odoo.com |
| Python 3.10 Docs | π docs.python.org |
| PostgreSQL Guide | π postgresql.org |
| OpenAI API | π platform.openai.com |
Found a bug? Have a suggestion?
- Check existing issues
- If not found, create new issue
- Provide details:
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Environment (OS, Python version, etc.)
Internship Opportunities:
- π§ Contact: aiotlab@dainam.edu.vn
- π Duration: 12 weeks
- π― Topics: ERP Development, AI Integration, Business Process
Requirements:
- Basic Python & JavaScript knowledge
- Interest in ERP systems
- Willing to learn Odoo framework
Copyright Β© 2024 AIoTLab
Faculty of Information Technology
DaiNam University
All rights reserved.
License Information:
- This project is proprietary software for educational purposes
- Based on Odoo Community Edition (LGPL v3)
- Custom modules are property of DaiNam University
- For commercial use, contact: aiotlab@dainam.edu.vn
Special Thanks To:
- π DaiNam University - For providing resources and support
- π₯ Faculty of Information Technology - For guidance and mentorship
- π§βπ» Odoo Community - For the amazing open-source platform
- π€ OpenAI - For GPT-4 API integration
- π¨βπ Students - For testing and feedback
If you find this project helpful, please give it a β on GitLab!
Made with β€οΈ by AIoTLab - DaiNam University
Last Updated: January 2026



