📖 Overview
The Hajjaj.Pro App Builder is a powerful Odoo 18 addon that empowers non-developers to create custom data-entry applications directly within Odoo, without writing any code. Build complete business applications with models, fields, views, and menus through an intuitive visual interface.
💡 Perfect For:
- Business analysts who need custom data tracking
- Department managers wanting to digitize processes
- Teams that need quick prototypes before full development
- Small businesses without dedicated developers
✨ Key Features
🎨 Visual Model Builder
Create data models through an intuitive interface. No SQL or Python knowledge required.
📊 Automatic View Generation
List, form, and kanban views are automatically created with proper layouts and widgets.
🔄 12 Field Types
Char, Text, HTML, Integer, Float, Boolean, Date, Datetime, Selection, Many2one, One2many, Many2many
🎯 Smart Widgets
21 widget options including monetary, daterange, tags, badges, progress bars, and more.
💬 Chatter Integration
Automatic messaging and activity tracking for all created models.
📈 Workflow Support
Built-in state management with 4 standard transitions and tracking.
🔄 Model Updates
Modify models without losing data. Add/remove fields safely with validation.
📤 Export/Import
Export module definitions to JSON and import them to other instances.
⚡ Instant Activation
Models become usable immediately without server restart.
📁 Organized Structure
Group related models into business apps for better organization.
🔍 Editable List Views
Quick inline editing with editable="bottom" on all list views.
🎴 Kanban Views
Beautiful card-based kanban views with field labels and state colors.
📥 Installation
-
Copy Module: Place the
Hajjaj.Pro_app_builder
folder in your Odoo addons directory/path/to/odoo/addons/Hajjaj.Pro_app_builder - Update Apps List: Go to Settings → Apps → Update Apps List
- Install: Search for "Hajjaj.Pro App Builder" and click Install
- Start Building: Navigate to App Builder menu
🎯 How to Use
Step 1: Create a Business App
- Navigate to App Builder → Builder Modules
- Click Create
- Enter:
- App Name: "Customer Management" (human-readable)
- Technical Name: "customer_mgmt" (lowercase, underscores)
- Description: What your app does
- Save the module
Step 2: Add Models
- In the Builder Module form, go to the Models tab
- Add a new model:
- Model Name: "Customer Order" (display name)
- Technical Name: "customer_order" (identifier)
- Description: What the model represents
- Save the model
Step 3: Define Fields
- Open the Builder Model
- In the
Fields tab, add fields inline or open field form:
- Field Label: "Customer Name"
- Technical Name: "customer_name"
- Field Type: Select from 12 types
- Widget: Choose from 21 widget options
- Required/Readonly: Check as needed
- Tracking: Enable for chatter tracking
- For
Selection fields: Enter values as
key:Label
, one per line - For Relational fields: Select the target model
Step 4: Activate Your App
- Go back to the Builder Module
- Click Activate App button
- The system will:
- Create all models with
x_builder_
prefix - Generate kanban, list, and form views
- Create window actions and server actions
- Add menu items under "Builder Apps"
- Enable chatter and activities
- Create all models with
Step 5: Use Your App
✓ Your app is ready!
- Navigate to App Builder → Builder Apps → [Your App Name]
- Click on any model to start creating records
- All standard Odoo features work: search, filters, grouping, export, etc.
- Use chatter to log notes and schedule activities
- Track changes with field-level tracking
🔤 Field Types & Widgets
Supported Field Types
Field Type | Best For | Example Use Cases |
---|---|---|
char | Short text, names, codes | Customer Name, Product Code, Email |
text | Long text, descriptions | Product Description, Notes, Comments |
html | Rich formatted text | Email Body, Rich Descriptions |
integer | Whole numbers | Quantity, Age, Count, Stock Level |
float | Decimals, prices | Price, Weight, Percentage, Amount |
boolean | Yes/No, True/False | Active, Is Available, Enabled |
date | Date only | Birth Date, Due Date, Start Date |
datetime | Date and time | Order Time, Last Modified, Meeting Time |
selection | Dropdown choices | Status, Priority, Category, Type |
many2one | Link to one record | Customer, Product, Assigned User |
one2many | Reverse link (lines) | Order Lines, Tasks, Attachments |
many2many | Link to many records | Tags, Categories, Skills, Teams |
Available Widgets (21 Options)
📛 badge
Colored badge display for selection/char fields
🔘 boolean_toggle
Toggle switch for boolean fields
Email validation and mailto link
📞 phone
Phone formatting and click-to-call
🔗 url
Clickable URL links
🖼️ image
Image preview and upload
💰 monetary
Currency formatting (auto-creates currency_id)
📊 percentage
Percentage display with % symbol
⭐ priority
Star rating for selection fields
📈 progress
Progress bar for numeric fields
🎨 color
Color picker widget
🏷️ many2many_tags
Tag-style display for many2many
📊 statusbar
Status bar for selection workflow
🔘 radio
Radio buttons for selection
📝 html
Rich text editor
⏱️ float_time
Duration in hours:minutes
📅 daterange
Date range picker (auto-creates end date)
↕️ handle
Drag handle for sorting
💡 Smart Auto-Creation:
-
Monetary Widget: Automatically creates
currency_id
field - Daterange Widget: Automatically creates corresponding end date field
- State Field: Automatically added with 4 transitions and tracking
💼 Real-World Examples
Example 1: Task Manager
Fields Configuration:
Field Label | Technical Name | Type | Widget | Required | Options |
---|---|---|---|---|---|
Task Name | name | char | - | ✓ | - |
Description | description | text | - | - | |
Due Date | due_date | date | - | - | |
Priority | priority | selection | priority | low:Low | medium:Medium | high:High | urgent:Urgent | |
Status | status | selection | statusbar | ✓ | new:New | in_progress:In Progress | done:Done | cancelled:Cancelled - Tracking: Yes |
Assigned To | assigned_to | many2one | - | Related Model: res.users |
✓ Result: Full task management system with status workflow and user assignments
Example 2: Customer CRM
Model 1: Customer
Field Label | Technical Name | Type | Widget | Required |
---|---|---|---|---|
Customer Name | name | char | - | ✓ |
char | ||||
Phone | phone | char | phone | |
Address | address | text | - | |
Active | active | boolean | boolean_toggle | |
Registration Date | registration_date | date | - | |
Customer Type | customer_type | selection | badge |
Selection values for Customer Type: individual:Individual | company:Company
Model 2: Customer Order
Field Label | Technical Name | Type | Widget | Required | Options |
---|---|---|---|---|---|
Order Number | order_number | char | - | ✓ | - |
Customer | customer_id | many2one | - | Related: x_builder_customer | |
Order Date | order_date | date | - | ✓ | - |
Amount | amount | float | monetary | Auto-creates currency_id | |
Status | status | selection | statusbar | draft:Draft | confirmed:Confirmed | delivered:Delivered | cancelled:Cancelled - Tracking: Yes | |
Notes | notes | text | - | - |
✓ Result: Complete CRM with customers and orders, linked relationships
Example 3: Inventory System
Product Model Fields:
Field Label | Technical Name | Type | Widget | Required | Notes |
---|---|---|---|---|---|
Product Name | name | char | - | ✓ | - |
SKU | sku | char | - | ✓ | Stock Keeping Unit |
Description | description | html | - | Rich text description | |
Category | category | selection | badge | electronics | furniture | supplies | other | |
Unit Price | unit_price | float | monetary | - | |
Quantity | quantity | integer | - | Current stock level | |
Reorder Level | reorder_level | integer | - | Minimum stock threshold | |
Active | active | boolean | boolean_toggle | - |
✓ Result: Product catalog with stock tracking and HTML descriptions
Example 4: Event Management
Event Model Fields:
Field Label | Technical Name | Type | Widget | Required | Configuration |
---|---|---|---|---|---|
Event Name | name | char | - | ✓ | - |
Description | description | html | html | Rich text editor | |
Event Date | event_date | datetime | - | ✓ | Date and time |
Location | location | char | - | - | |
Max Attendees | max_attendees | integer | - | Capacity limit | |
Registration Progress | progress | integer | progress | Visual progress bar (0-100) | |
Tags | tag_ids | many2many | many2many_tags | Related: x_builder_tag | |
Status | status | selection | statusbar | planned | open | closed | completed |
✓ Result: Event management with progress tracking and tags
💡 Tips & Best Practices
✅ Do's
- Use descriptive names for apps and models
- Use lowercase with underscores for technical names
- Test with a few fields before creating complex models
- Enable tracking on important fields
- Use appropriate widgets for better UX
- Export modules as JSON for backup
- Document your models in the description field
- Start simple and iterate
❌ Don'ts
- ❌ Don't use spaces or special characters in technical names
- ❌ Don't delete active modules without deactivating first
- ❌ Don't start technical names with numbers
- ❌ Don't make too many fields required
- ❌ Don't forget to backup before major changes
🎯 Pro Tips
Plan First
Sketch your models and relationships on paper before building
Use Widgets
Leverage widgets for better user experience (monetary, daterange, tags)
Export Often
Use Export to JSON feature to backup your configurations
Test Early
Activate and test with sample data immediately
Enable Tracking
Use field tracking for audit trails on important fields
Iterate
Use Update Model feature to add/remove fields without data loss
🔧 Common Patterns
Status Workflow Pattern
User Assignment Pattern
Date Range Pattern
Contact Info Pattern
📤 Export & Import
Export Module
- Open any Builder Module
- Click Export to JSON button
- JSON file downloads automatically with complete module definition
- Includes: models, fields, widgets, selections, relationships
Import Module
- Open a Builder Module (or create new)
- Click Import from JSON button
- Choose import mode:
- Create New Module: Import as brand new module
- Replace Existing Module: Replace current module (must be draft)
- Select JSON file and click Import
- Module opens automatically with all content
- Deactivate modules before importing/replacing
- Relational fields require target models to exist
- Export regularly as backup
🔧 Technical Details
Architecture
The addon uses Odoo's meta-model system to dynamically create database objects:
Component | Creates | Purpose |
---|---|---|
Hajjaj.Pro.builder.module | ir.ui.menu | Business app container |
Hajjaj.Pro.builder.model | ir.model | Model definition |
ir.ui.view (kanban, list, form) | Automatic view generation | |
ir.actions.act_window | Window actions | |
ir.actions.server (4x) | State transition buttons | |
Hajjaj.Pro.builder.field | ir.model.fields | Field definitions |
Naming Conventions
Type | Prefix | Example |
---|---|---|
Models | x_builder_ | x_builder_customer |
Fields | x_ | x_customer_name |
Views | x_builder_ | x_builder_customer.kanban |
Actions | x_builder_ | x_builder_customer_action |
Compatibility
- Odoo Version: 18.0
- Python: 3.10+
- Dependencies: base, web, mail
- License: LGPL-3
❓ Frequently Asked Questions
Can I modify models after activation?
Yes! Use the Update Model button. The system will add new fields, update existing ones, and safely remove unused fields without losing data.
What happens to my data if I deactivate?
Deactivation removes the models but keeps the Builder Module configuration. You can reactivate later. However, all data in the models will be lost.
Can I create computed fields?
Not yet. This version focuses on basic fields. Computed fields require Python code.
Can I customize the views?
Generated views are automatic. For custom layouts, you'll need to edit the XML views in developer mode or create a custom module.
How do I backup my work?
Use the Export to JSON feature to save module definitions. Also backup your Odoo database regularly.
Can I share modules with other Odoo instances?
Yes! Export to JSON and import on the target instance. Ensure dependencies (related models) exist.
💬 Support & Resources
📚 Documentation
Complete guides and references
💼 Examples
Real-world use cases
🐛 Report Issues
Bug reports & features
Before Requesting Support:
- Check the documentation and examples
- Enable developer mode to see technical details
- Review Odoo server logs
- Try with a simple test case
- Verify Odoo 18 compatibility