Progress
Live completion across each roadmap. Pick a course and continue from where you left off.
- 1roadmaps
- 0lessons complete
- 0projects complete
- 0%overall complete
Stored only in this browser. Export a backup before you clear site data.
1.1 BUSINESS PROCESSES1.2 DEPARTMENTS1.3 CROSS-DEPARTMENT WORKFLOWS1.4 MASTER DATA1.5 TRANSACTIONS1.6 SINGLE SOURCE OF TRUTH1.7 ERP VS CRM1.8 ERP VS STANDALONE BUSINESS SOFTWARE1.9 BUSINESS PROCESS MAPPINGE Chapter ExerciseP Chapter Project2.1 WHAT ODOO IS2.2 ODOO ECOSYSTEM2.3 COMMUNITY EDITION2.4 ENTERPRISE EDITION2.5 ODOO ONLINE2.6 ODOO.SH2.7 ON-PREMISE ODOO2.8 ODOO APPS2.9 MODULES / ADDONS2.10 USERS2.11 COMPANIES2.12 SHARED BUSINESS RECORDS2.13 STANDARD VS CUSTOM MODULES2.14 ODOO STUDIO CONCEPTE Chapter ExerciseP Chapter Project3.1 CONTACTS3.2 CRM3.3 SALES3.4 PURCHASE3.5 INVENTORY3.6 ACCOUNTING / INVOICING3.7 EMPLOYEES / HR3.8 PROJECTS3.9 TIMESHEETS3.10 MANUFACTURING3.11 MAINTENANCE3.12 WEBSITE3.13 ECOMMERCE3.14 POINT OF SALE3.15 HELPDESK3.16 END-TO-END DOCUMENT FLOWE Chapter ExerciseP Chapter Project4.1 THREE-TIERS ARCHITECTURE4.2 BROWSER4.3 ODOO WEB CLIENT4.4 HTTP REQUEST4.5 ODOO APPLICATION SERVER4.6 PYTHON RUNTIME4.7 ORM4.8 POSTGRESQL4.9 FILESTORE4.10 ADDONS4.11 REGISTRY4.12 HTTP LAYER4.13 SESSIONS4.14 WORKERS4.15 CRON WORKERS4.16 LONG-POLLING / WEBSOCKET CONCEPTSE Chapter ExerciseP Chapter Project5.1 PYTHON ENVIRONMENT5.2 PYTHON VIRTUAL ENVIRONMENTS5.3 PYTHON DEPENDENCIES5.4 POSTGRESQL SETUP5.5 POSTGRESQL USER5.6 ODOO SOURCE5.7 GIT CLONE5.8 ODOO CONFIGURATION FILE5.9 ADDONS_PATH5.10 CUSTOM ADDONS DIRECTORY5.11 DATABASE CREATION5.12 DEVELOPER MODE5.13 DEVELOPER MODE WITH ASSETS5.14 LOGGING5.15 IDE SETUP5.16 DEBUGGER SETUPE Chapter ExerciseP Chapter Project6.1 ODOO/6.2 ADDONS/6.3 CORE FRAMEWORK6.4 API.PY CONCEPTS6.5 FIELDS.PY CONCEPTS6.6 MODELS.PY CONCEPTS6.7 HTTP6.8 SERVICES6.9 TOOLS6.10 REGISTRY6.11 MODULES LOADER6.12 READING OFFICIAL ADDONS6.13 TRACING MODEL DEFINITIONS6.14 TRACING XML IDS6.15 TRACING METHODSE Chapter ExerciseP Chapter Project7.1 Addon Directory7.2 __manifest__.py7.3 __init__.py7.4 models/7.5 views/7.6 security/7.7 data/7.8 demo/7.9 static/7.10 controllers/7.11 wizard/7.12 report/7.13 i18n/7.14 tests/7.15 README7.16 Coding Conventions8.1 Module Discovery8.2 Manifest Metadata8.3 Dependencies8.4 Installation8.5 Initialization8.6 Registry Loading8.7 Upgrade8.8 Uninstall8.9 Data Load Order8.10 application Flag8.11 installable Flag8.12 auto_install8.13 External Dependencies8.14 Module Version9.1 models.Model9.2 models.AbstractModel9.3 models.TransientModel9.4 _name9.5 _description9.6 _rec_name9.7 _order9.8 _inherit9.9 _inherits Introduction9.10 Automatic Fields9.11 id9.12 create_date9.13 create_uid9.14 write_date9.15 write_uid9.16 Reserved Field Names10.1 Char10.2 Text10.3 Html10.4 Integer10.5 Float10.6 Boolean10.7 Date10.8 Datetime10.9 Selection10.10 Monetary10.11 Binary10.12 Image10.13 Many2one Introduction10.14 Field string10.15 required10.16 readonly10.17 default10.18 help10.19 index10.20 copy10.21 groups10.22 tracking10.23 translate10.24 company_dependent11.1 Many2one11.2 One2many11.3 Many2many11.4 Inverse Fields11.5 Related Fields11.6 Relational Commands11.7 Command.create()11.8 Command.update()11.9 Command.delete()11.10 Command.unlink()11.11 Command.link()11.12 Command.clear()11.13 Command.set()11.14 Relationship Ownership11.15 Cascading Behavior11.16 ondelete11.17 Referential Integrity12.1 compute12.2 @api.depends12.3 @api.depends_context12.4 Stored Computed Fields12.5 Non-Stored Computed Fields12.6 inverse12.7 Custom Search Methods12.8 Related Fields12.9 Default Values12.10 default_get()12.11 copy()12.12 Compute Dependencies12.13 Recompute Behavior12.14 Performance of Stored vs Non-Stored Fields13.1 env13.2 self13.3 Recordsets13.4 Empty Recordsets13.5 Singleton Records13.6 Multiple Records13.7 env.user13.8 env.company13.9 env.companies13.10 env.context13.11 Context13.12 with_context()13.13 with_user()13.14 with_company()13.15 sudo()13.16 with_env()13.17 Recordset Immutability14.1 create()14.2 browse()14.3 search()14.4 search_fetch()14.5 fetch()14.6 read()14.7 write()14.8 unlink()14.9 copy()14.10 exists()14.11 Display Name Concepts14.12 CRUD Return Values14.13 CRUD Side Effects14.14 Bulk CRUD15.1 Domain Syntax15.2 Comparison Operators15.3 = / !=15.4 > / >= / < / <=15.5 in / not in15.6 like / not like15.7 ilike / not ilike15.8 =like / =ilike15.9 child_of15.10 parent_of15.11 AND15.12 OR15.13 NOT15.14 search_count()15.15 search_read()15.16 Ordering15.17 Limit15.18 Offset15.19 Dynamic Domains16.1 Iteration16.2 filtered()16.3 filtered_domain()16.4 mapped()16.5 sorted()16.6 ensure_one()16.7 Recordset Membership16.8 Recordset Union16.9 Recordset Intersection16.10 Recordset Difference16.11 Batch Operations16.12 Avoiding Per-Record Queries17.1 Prefetching17.2 Prefetch Sets17.3 ORM Cache17.4 Transactions17.5 Flush17.6 flush_model()17.7 flush_recordset()17.8 Cache Invalidation17.9 invalidate_model()17.10 invalidate_recordset()17.11 modified()17.12 N+1 Queries17.13 Batch Creation17.14 Batch Updates17.15 Aggregation17.16 read_group()17.17 Raw SQL17.18 SQL Wrapper Concepts17.19 ORM vs SQL17.20 Security Implications of SQL17.21 Algorithmic Complexity18.1 Model Methods18.2 Recordset Methods18.3 @api.model18.4 @api.model_create_multi18.5 create() Override18.6 write() Override18.7 unlink() Override18.8 copy() Override18.9 super()18.10 Return Values18.11 Business Actions18.12 Private Methods18.13 Public Methods18.14 Method Design19.1 Business Validation19.2 Python Constraints19.3 @api.constrains19.4 SQL Constraints19.5 ValidationError19.6 UserError19.7 AccessError19.8 MissingError19.9 Validation Timing19.10 Constraint Performance19.11 Database vs Application Constraints20.1 @api.onchange20.2 Defaults20.3 default_get()20.4 Context Defaults20.5 Dynamic Forms20.6 Returning Warnings20.7 Onchange Limitations20.8 Onchange vs Compute20.9 Onchange vs Constraint21.1 State Fields21.2 Draft21.3 Confirmed21.4 Approved21.5 Done21.6 Cancelled21.7 Legal State Transitions21.8 Workflow Buttons21.9 Workflow Validation21.10 Immutable States21.11 Reopening Records21.12 Auditability22.1 XML Syntax22.2 XML Declaration22.3 <odoo>22.4 <data>22.5 <record>22.6 External IDs22.7 ref()22.8 eval22.9 Data Files22.10 XML Loading22.11 noupdate23.1 Form Views23.2 List Views23.3 Field Display23.4 Buttons23.5 Groups23.6 Sheets23.7 Notebook23.8 Pages23.9 Widgets23.10 Decorations23.11 Header23.12 Statusbar23.13 Smart Buttons23.14 Invisible / Readonly Logic23.15 Editable Lists24.1 Search Views24.2 Filters24.3 Group By24.4 Search Panels24.5 Kanban24.6 Kanban Templates24.7 Calendar24.8 Pivot24.9 Graph24.10 Activity Views24.11 Cohort Concepts24.12 Dashboard Concepts25.1 Actions25.2 Action Bindings25.3 Window Actions25.4 ir.actions.act_window25.5 URL Actions25.6 Server Actions25.7 Report Actions25.8 Client Actions25.9 Scheduled Actions25.10 Menus25.11 Parent Menus25.12 Menu Sequence25.13 Context25.14 Domains25.15 Navigation26.1 inherit_id26.2 XPath26.3 position26.4 before26.5 after26.6 inside26.7 replace26.8 attributes26.9 Adding Elements26.10 Removing Elements Safely26.11 Moving Elements26.12 View Priority26.13 View Resolution26.14 Debugging Inherited Views26.15 Avoiding Brittle XPath27.1 Users27.2 Internal Users27.3 Portal Users27.4 Public User27.5 Groups27.6 Group Membership27.7 Implied Groups27.8 Application Categories27.9 Permission Design27.10 Role Design28.1 ACL Concepts28.2 ir.model.access28.3 ir.model.access.csv28.4 Read Permission28.5 Write Permission28.6 Create Permission28.7 Unlink Permission28.8 Group ACLs28.9 Additive Permissions28.10 Default-Deny Thinking29.1 ir.rule29.2 domain_force29.3 Global Rules29.4 Group Rules29.5 Rule Composition29.6 Row-Level Security29.7 User-Based Rules29.8 Company-Based Rules29.9 Ownership Rules29.10 Multi-Group Interactions30.1 sudo()30.2 with_user()30.3 Access Checks30.4 check_access()30.5 Field Security30.6 View / Menu Groups30.7 Public Method Security30.8 Unsafe Raw SQL30.9 Controller Security30.10 Security Bypass Risks30.11 Least Privilege30.12 Avoiding Unnecessary sudo()30.13 Input Validation31.1 res.company31.2 company_id31.3 company_ids31.4 env.company31.5 env.companies31.6 with_company()31.7 Company-Dependent Fields31.8 _check_company31.9 Multi-Company Domains31.10 Cross-Company Security31.11 Shared Records31.12 Company-Specific Sequences31.13 Multi-Company Defaults32.1 Extension Inheritance32.2 _inherit32.3 Classical Inheritance32.4 Method Overriding32.5 Field Extension32.6 super()32.7 Multiple Inheritance32.8 Method Resolution Order32.9 Extension Conflicts33.1 _inherits33.2 Delegated Fields33.3 Delegation vs Extension33.4 AbstractModel33.5 Mixins33.6 Reusable Model Behavior33.7 Composition33.8 mail.thread33.9 mail.activity.mixin33.10 portal.mixin Concepts34.1 Finding Parent Views34.2 External IDs34.3 XPath Targeting34.4 Adding Fields34.5 Modifying Attributes34.6 Replacing Elements34.7 Moving Elements34.8 View Priority34.9 Conflicting Inheritances34.10 Debugging Inheritance Conflicts35.1 res.partner35.2 product.template35.3 product.product35.4 crm.lead35.5 sale.order35.6 sale.order.line35.7 purchase.order35.8 stock.picking35.9 stock.move35.10 account.move35.11 hr.employee35.12 project.project35.13 Existing Workflows35.14 Extension Points35.15 Upgrade-Safe Customization36.1 TransientModel36.2 Wizard Fields36.3 Wizard Views36.4 target="new"36.5 active_model36.6 active_id36.7 active_ids36.8 Context36.9 Defaults36.10 Multi-Step Wizards36.11 Wizard Security37.1 ir.sequence37.2 next_by_code()37.3 Prefix37.4 Suffix37.5 Padding37.6 Date-Based Sequences37.7 Company-Specific Sequences37.8 Business References37.9 Concurrency Considerations38.1 ir.cron38.2 Scheduling38.3 Intervals38.4 Cron Methods38.5 Batch Processing38.6 Progress38.7 Failure Handling38.8 Idempotency38.9 Cron Security38.10 Long-Running Jobs38.11 Transaction Boundaries39.1 Automated Actions39.2 Triggers39.3 Conditions39.4 Server Actions39.5 Evaluation Context39.6 Action Chaining39.7 Webhook Automation Concepts39.8 Maintainability39.9 Security39.10 When to Use Code Instead40.1 mail.thread40.2 mail.activity.mixin40.3 Messages40.4 Followers40.5 Tracking40.6 Activities40.7 Activity Types40.8 Notifications40.9 Email Templates40.10 Sending Mail40.11 Incoming Mail Concepts40.12 Mail Aliases40.13 Mail Queue40.14 Subtypes41.1 QWeb41.2 QWeb Templates41.3 t-if41.4 t-foreach41.5 t-field41.6 t-esc / t-out41.7 Report Actions41.8 Report Templates41.9 PDF Reports41.10 HTML Reports41.11 Paper Formats41.12 Custom Report Data41.13 Translatable Reports41.14 Barcodes41.15 Report Attachments42.1 XML Data42.2 CSV Data42.3 External IDs42.4 env.ref()42.5 noupdate42.6 Demo Data42.7 Seed Data42.8 Import42.9 Export42.10 Data Load Order42.11 XML Data Operations42.12 Updating Existing Records42.13 Reference Integrity42.14 Large Imports43.1 Translatable Strings43.2 _() Translation Function43.3 Translatable Fields43.4 i18n/43.5 .po Files43.6 .pot Templates43.7 Exporting Translations43.8 Importing Translations43.9 Languages43.10 Locale / Formatting43.11 Dates & Times43.12 Numbers43.13 Currencies43.14 Translatable QWeb43.15 Localization Modules43.16 Accounting Localization Concept43.17 Country-Specific Behavior44.1 http.Controller44.2 @http.route44.3 request44.4 Request Environment44.5 route type="http"44.6 route type="json"44.7 HTTP Methods44.8 Parameters44.9 Responses44.10 Authentication44.11 auth="user"44.12 auth="public"44.13 auth="none"44.14 CSRF44.15 Sessions44.16 Cookies Concepts44.17 Error Handling44.18 Controller Inheritance44.19 Controller Security45.1 Website Architecture45.2 Website Pages45.3 QWeb Templates45.4 Dynamic Content45.5 Website Controllers45.6 Frontend Assets45.7 Website Forms45.8 Form Validation45.9 Snippets Concepts45.10 SEO Basics45.11 Routing45.12 Multi-Website45.13 Website-Specific Records46.1 Portal Users46.2 Portal Controllers46.3 Customer Pages46.4 Portal Layout46.5 Portal Security46.6 Customer-Owned Records46.7 Pagination46.8 Search46.9 Filters46.10 Sort46.11 Access Tokens46.12 Chatter in Portal46.13 Downloads47.1 Client / Server47.2 Resources47.3 Endpoints47.4 HTTP Methods47.5 JSON47.6 Authentication47.7 Authorization47.8 Status Codes47.9 Headers47.10 Pagination47.11 Rate Limits47.12 API Contracts47.13 Idempotency48.1 External API Architecture48.2 Integration Users48.3 Authentication48.4 Calling Models48.5 CRUD Remotely48.6 Calling Methods48.7 Domains48.8 Permissions48.9 Context48.10 Error Handling48.11 Version Compatibility48.12 API Keys49.1 API Routes49.2 Request Parsing49.3 Input Validation49.4 Serialization49.5 Response Design49.6 Authentication49.7 Authorization49.8 Pagination49.9 Filtering49.10 Sorting49.11 Error Responses49.12 Consistent Error Schema49.13 API Versioning Concepts49.14 Logging50.1 Incoming Webhooks50.2 Outgoing Events50.3 Payload Validation50.4 Signatures50.5 Secrets50.6 Timestamp Validation50.7 Replay Attacks50.8 Idempotency50.9 Retries50.10 Duplicate Events50.11 Audit Logging50.12 Dead-Letter Concepts51.1 REST APIs51.2 API Authentication51.3 OAuth Concepts51.4 Mapping External Data51.5 Data Ownership51.6 Synchronization51.7 One-Way Sync51.8 Two-Way Sync51.9 Incremental Sync51.10 Scheduled Sync51.11 Retries / Backoff51.12 Rate Limiting51.13 Conflict Resolution51.14 Error Handling51.15 Integration Logs52.1 Payment Architecture52.2 Payment Providers52.3 Payment Transactions52.4 Checkout Flow52.5 Redirects52.6 Tokens52.7 Callbacks52.8 Webhooks52.9 Payment Status52.10 Pending Payments52.11 Failure Handling52.12 Refund Concepts52.13 Security52.14 Idempotency53.1 Web Client53.2 JavaScript Modules53.3 Native JS Modules53.4 Frontend Environment53.5 Components53.6 Registries53.7 Services53.8 Hooks53.9 Backend ↔ Frontend Communication53.10 ORM Service53.11 RPC53.12 Actions53.13 Frontend Debugging54.1 Components54.2 Templates54.3 Props54.4 State54.5 Events54.6 Lifecycle54.7 Composition54.8 Subcomponents54.9 Reactive UI54.10 Event Handlers54.11 Conditional Rendering54.12 Loops55.1 Registries55.2 Registry Categories55.3 Services55.4 Service Dependencies55.5 useService()55.6 ORM Service55.7 RPC Service55.8 Notification Service55.9 Action Service55.10 Router Concepts55.11 Hooks55.12 useBus55.13 useAssets55.14 Custom Hooks56.1 Asset Bundles56.2 JavaScript Assets56.3 SCSS / CSS56.4 XML Templates56.5 Manifest Assets56.6 Bundle Ordering56.7 Lazy Loading56.8 Asset Debugging56.9 Cache Busting Concepts57.1 Patching Code57.2 patch()57.3 Patching Components57.4 Extending Components57.5 Extending Registries57.6 Custom Field Widgets57.7 View Extensions57.8 Upgrade Safety57.9 Conflict Risks57.10 When Not to Patch58.1 Client Actions58.2 Action Registry58.3 OWL Client Components58.4 Loading Server Data58.5 Custom Dashboards58.6 Generic Components58.7 Dialogs58.8 Notifications58.9 Error Handling58.10 Error Boundaries58.11 Odoo Editor Concepts58.12 Mobile Web APIs58.13 Responsive Odoo UI58.14 Accessibility59.1 ir.attachment59.2 Binary Fields59.3 Image Fields59.4 Database vs Filestore59.5 Attachment Relationships59.6 Uploads59.7 Downloads59.8 MIME Types59.9 File Names59.10 Attachment Access59.11 Attachment Security59.12 Public / Private Files59.13 Access Tokens59.14 Large File Considerations59.15 Image Processing Concepts60.1 Models → Tables60.2 Fields → Columns60.3 Many2one Foreign Keys60.4 Many2many Relation Tables60.5 Foreign Keys60.6 Metadata Tables60.7 ir_model60.8 ir_model_fields60.9 ir_model_data60.10 Inspecting the Schema61.1 SELECT61.2 WHERE61.3 JOIN61.4 GROUP BY61.5 Aggregates61.6 Subqueries61.7 CTE Concepts61.8 Constraints61.9 psql61.10 Database Inspection61.11 Information Schema62.1 Transactions62.2 Commit62.3 Rollback62.4 Isolation62.5 Locks62.6 Row Locks62.7 Deadlocks62.8 Concurrent Updates62.9 Lost Update Concepts62.10 Savepoints62.11 Retry Patterns63.1 Indexes63.2 B-Tree Intuition63.3 Selectivity63.4 Composite Indexes63.5 EXPLAIN63.6 EXPLAIN ANALYZE63.7 Query Plans63.8 Sequential Scan63.9 Index Scan63.10 When to Add an Index63.11 Over-Indexing64.1 Query Counts64.2 Batch Operations64.3 Prefetch64.4 Cache64.5 N+1 Problems64.6 Computed Field Costs64.7 Stored Computations64.8 Efficient Domains64.9 Algorithms & Complexity64.10 Database Indexes from Models64.11 read_group()64.12 Avoiding Loops over Queries65.1 Odoo Profiler65.2 SQL Profiling65.3 Query Collector65.4 Periodic Collector65.5 Finding Bottlenecks65.6 Measuring Before Optimizing65.7 Benchmarking65.8 Baselines65.9 Performance Regression65.10 Memory Considerations66.1 Log Levels66.2 Server Logs66.3 Stack Traces66.4 Python Debugger66.5 Breakpoints66.6 Odoo Shell66.7 Browser Developer Tools66.8 Developer Mode66.9 Reproducing Bugs66.10 Root Cause Analysis66.11 Minimal Reproduction67.1 Test Module Structure67.2 TransactionCase67.3 Savepoint / Transaction Concepts67.4 Test Data67.5 setUp()67.6 Assertions67.7 Test Tags67.8 Running Selected Tests67.9 Form Helper Concepts67.10 Deterministic Tests68.1 CRUD Tests68.2 Computed Field Tests68.3 Constraint Tests68.4 Workflow Tests68.5 Cron Tests68.6 Wizard Tests68.7 Edge Cases68.8 Regression Tests68.9 Error Tests69.1 User Context69.2 ACL Tests69.3 Record Rule Tests69.4 sudo() Tests69.5 Field Security Tests69.6 Multi-Company Tests69.7 Portal Access Tests69.8 Public Access Tests69.9 Permission Regression70.1 HTTP Tests70.2 Controller Tests70.3 browser_js70.4 Test Tours70.5 Integration Tours70.6 JavaScript Unit Tests70.7 HOOT70.8 @odoo/hoot-dom70.9 Web Test Helpers70.10 Mock Server70.11 Mocking RPC70.12 End-to-End Flows71.1 Query Count Tests71.2 assertQueryCount()71.3 --log-sql71.4 Performance Budgets71.5 Regression Detection71.6 Repeatable Benchmarks71.7 Large Dataset Tests72.1 odoo-bin / odoo72.2 Configuration File72.3 Database Selection72.4 -i Install72.5 -u Upgrade72.6 --addons-path72.7 --dev72.8 --log-level72.9 --log-sql72.10 --test-enable72.11 --test-tags72.12 --stop-after-init72.13 shell72.14 scaffold72.15 Database Commands72.16 Neutralize Concepts73.1 odoo.conf73.2 addons_path73.3 db_host73.4 db_port73.5 db_user73.6 db_password73.7 dbfilter73.8 Logging73.9 Proxy Mode73.10 Secrets73.11 Environment-Specific Configuration73.12 Resource Limits74.1 Linux User74.2 Filesystem Layout74.3 Python Environment74.4 Source Deployment74.5 Addons74.6 File Permissions74.7 PostgreSQL74.8 systemd74.9 Service Management74.10 Logs74.11 Deployment User Security75.1 Reverse Proxy75.2 Nginx75.3 Domains75.4 DNS75.5 TLS / HTTPS75.6 Certificates75.7 Proxy Headers75.8 WebSocket / Long-Lived Connections75.9 Static Content75.10 Secure Production Exposure76.1 Development Mode76.2 Multi-Processing76.3 Workers76.4 Worker Sizing76.5 CPU Considerations76.6 Memory Limits76.7 Request Time Limits76.8 Cron Workers76.9 Long-Polling / WebSocket Worker Concepts76.10 Capacity Planning77.1 Database Users77.2 Connections77.3 Connection Limits77.4 Maintenance77.5 VACUUM Concepts77.6 ANALYZE77.7 Monitoring77.8 Basic Tuning77.9 Disk Usage77.10 Slow Queries78.1 Database Backup78.2 Filestore Backup78.3 Configuration Backup78.4 Restore78.5 Backup Scheduling78.6 Off-Site Backups78.7 Encryption78.8 Retention78.9 Recovery Testing78.10 Recovery Point Objective78.11 Recovery Time Objective78.12 Disaster Recovery Plan79.1 Odoo.sh Architecture79.2 Projects79.3 Git Integration79.4 Branches79.5 Development79.6 Staging79.7 Production79.8 Builds79.9 Logs79.10 Shell Access79.11 Database Management79.12 Backups80.1 Images80.2 Containers80.3 Volumes80.4 Networking80.5 Environment Variables80.6 Odoo Container80.7 PostgreSQL Container80.8 Persistent Filestore80.9 Docker Compose80.10 Custom Addons Mounts80.11 Configuration80.12 Container Logs81.1 Application Logs81.2 PostgreSQL Logs81.3 CPU81.4 Memory81.5 Disk81.6 Database Connections81.7 Slow Requests81.8 Failed Jobs81.9 Error Monitoring81.10 Health Checks81.11 Alerting Concepts81.12 Incident Diagnosis81.13 Incident Timeline81.14 Root Cause Analysis82.1 Manifest Version82.2 Semantic Change Thinking82.3 Release Changes82.4 Compatibility82.5 Dependencies82.6 Version Control Strategy82.7 Changelog82.8 Release Notes83.1 Adding Fields83.2 Renaming Fields83.3 Changing Field Types83.4 Changing Relationships83.5 Removing Fields83.6 Constraints83.7 Defaults83.8 Required Fields83.9 Index Changes83.10 Safe Schema Evolution84.1 Migration Scripts84.2 Pre-Migration84.3 Post-Migration84.4 Transforming Records84.5 Renaming Data84.6 Preserving Relationships84.7 Validation84.8 Large Dataset Considerations84.9 Batching84.10 Idempotent Migrations84.11 Rollback Planning85.1 Version Differences85.2 Deprecated APIs85.3 Framework Changes85.4 Module Compatibility85.5 Database Upgrade85.6 Upgrade Scripts85.7 Upgrade Utilities85.8 Frontend Migration85.9 XML / View Migration85.10 Asset Migration85.11 Post-Upgrade Testing86.1 Hooks Concept86.2 pre_init_hook86.3 post_init_hook86.4 uninstall_hook86.5 Environment During Hooks86.6 Data Initialization86.7 Appropriate Uses86.8 Avoiding Hook Abuse87.1 Never Modify Core Directly87.2 Extension Points87.3 Model Inheritance87.4 View Inheritance87.5 Stable Overrides87.6 Dependency Management87.7 Avoiding Hard-Coding87.8 Configuration-Driven Design87.9 Stable XML IDs87.10 Future-Proof Design88.1 Read Before Changing88.2 Trace Dependencies88.3 Trace Execution88.4 Reproduce Existing Behavior88.5 Characterization Tests88.6 Backward Compatibility88.7 Safe Refactoring88.8 Deprecation88.9 Technical Debt88.10 Incremental Modernization89.1 Contacts89.2 CRM89.3 Sales89.4 Purchase89.5 Inventory89.6 Accounting Concepts89.7 Invoicing89.8 Employees89.9 Recruitment89.10 Time Off89.11 Attendances89.12 Projects89.13 Timesheets89.14 Manufacturing89.15 Maintenance89.16 Helpdesk Concept89.17 Website89.18 eCommerce89.19 Point of Sale89.20 End-to-End Business Flow90.1 Stakeholder Interviews90.2 Business Requirements90.3 Functional Requirements90.4 Non-Functional Requirements90.5 Business Process Mapping90.6 As-Is Process90.7 Pain Points90.8 To-Be Process90.9 Data Requirements90.10 Roles90.11 Permissions90.12 Integrations90.13 Reporting Requirements90.14 Acceptance Criteria90.15 Edge Cases90.16 Change Requests91.1 Module Boundaries91.2 Model Ownership91.3 Dependencies91.4 Shared Models91.5 Integration Boundaries91.6 Security Architecture91.7 Multi-Company Architecture91.8 Data Flow91.9 Reusability91.10 Configuration91.11 Reporting91.12 Performance91.13 Deployment91.14 Upgrade Strategy92.1 Standard Odoo92.2 Configuration92.3 Studio Concepts92.4 Custom Module92.5 Third-Party Module92.6 External Integration92.7 Data Ownership92.8 Upgrade Costs92.9 Maintenance Costs92.10 User Training Costs92.11 Technical Debt92.12 Choosing the Simplest Correct Solution93.1 Naming93.2 Small Methods93.3 Separation of Concerns93.4 Cohesion93.5 Low Coupling93.6 Reusable Mixins93.7 Configuration over Hard-Coding93.8 Constants93.9 Error Handling93.10 Logging93.11 Documentation93.12 Upgrade Safety93.13 Performance Awareness93.14 Security Awareness93.15 Testability93.16 Avoiding Premature Abstraction94.1 Repository94.2 Branches94.3 Commits94.4 Commit Messages94.5 Pull Requests94.6 Merge94.7 Rebase Concepts94.8 Conflict Resolution94.9 Release Branches94.10 Tags94.11 Code Review for Correctness94.12 Security Review94.13 ORM Performance Review94.14 Upgrade-Safety Review94.15 Test Review94.16 Documentation Review94.17 CI Concepts94.18 Automated Tests in CI94.19 Linting / Static Quality Checks94.20 Staging Workflow94.21 Production Release Workflow95.1 Problem Discovery95.2 Business Requirements95.3 Process Maps95.4 Architecture95.5 Module Boundaries95.6 Data Models95.7 Relational Design95.8 ORM95.9 Business Rules95.10 Security95.11 Multi-Company95.12 Views95.13 Workflows95.14 Wizards95.15 Chatter & Activities95.16 Automation95.17 Reports95.18 Attachments95.19 Translations95.20 Website95.21 Portal95.22 API95.23 Webhooks95.24 External Integration95.25 OWL Dashboard95.26 PostgreSQL Optimization95.27 Automated Tests95.28 Security Tests95.29 Performance Tests95.30 Migration Strategy95.31 Backup Strategy95.32 Deployment95.33 Monitoring95.34 README95.35 Architecture Diagram95.36 Technical Documentation95.37 Functional Documentation95.38 User Roles Matrix95.39 API Documentation95.40 Deployment Documentation95.41 Disaster Recovery Documentation95.42 Test Evidence95.43 Performance Baseline95.44 Security Review95.45 Upgrade Review95.46 Final Production Readiness Review96.1 ERP Fundamentals96.2 Odoo Functional Knowledge96.3 Odoo Architecture96.4 Module Anatomy96.5 Python96.6 Models96.7 Fields96.8 Relationships96.9 ORM96.10 Recordsets96.11 Domains96.12 Computed Fields96.13 Constraints96.14 Workflows96.15 XML96.16 Views96.17 Actions96.18 Security96.19 Multi-Company96.20 Inheritance96.21 Mixins96.22 Wizards96.23 Cron / Automation96.24 Chatter96.25 QWeb / Reports96.26 Internationalization96.27 Controllers96.28 APIs96.29 Webhooks96.30 Integrations96.31 OWL96.32 JavaScript Framework96.33 PostgreSQL96.34 Performance96.35 Testing96.36 Debugging96.37 CLI96.38 Deployment96.39 Odoo.sh96.40 Docker96.41 Upgrades96.42 Migrations96.43 Requirements Analysis96.44 Solution Architecture96.45 Live Module Design96.46 Live Debugging96.47 Code Review96.48 Portfolio Walkthrough96.49 Python / OOP Interview96.50 ORM Interview96.51 Security Interview96.52 Functional Odoo Interview96.53 PostgreSQL Interview96.54 OWL Interview96.55 Integration Interview96.56 Deployment Interview96.57 Architecture Interview96.58 Live Coding96.59 Live Debugging96.60 System Design96.61 Portfolio Defense96.62 Final Mock Odoo Engineer Interview
Chapter 1CHAPTER 1: WHAT IS ERP?