| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Website (website)
• eCommerce (website_sale) • Discuss (mail) • Invoicing (account) |
| Lines of code | 7061 |
| Technical Name |
ecommerce_wishlist |
| License | OPL-1 |
| Website | https://www.hexalian.com |
| Versions | 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Website (website)
• eCommerce (website_sale) • Discuss (mail) • Invoicing (account) |
| Lines of code | 7061 |
| Technical Name |
ecommerce_wishlist |
| License | OPL-1 |
| Website | https://www.hexalian.com |
| Versions | 17.0 18.0 19.0 |
Ecommerce Wishlist - Save Favorite Products
Complete wishlist functionality for your Odoo e-commerce store
Overview
Let customers save their favorite products for later
The Ecommerce Wishlist module adds comprehensive wishlist functionality to your Odoo e-commerce store. Customers can save their favorite products, view them later, and easily add them to cart when ready to purchase.
Built with modern web technologies, this module offers instant AJAX operations, beautiful responsive design, and enterprise-grade security. Works perfectly on desktop, tablet, and mobile devices.
Improves Customer Experience: Customers can save products while browsing, reducing cart abandonment and encouraging return visits. Perfect for stores with large product catalogs.
Secure & Private: Each customer has their own private wishlist stored securely in the database. Authentication required with full record-level security rules.
Key Features
Everything you need for wishlist functionality
Add to Wishlist
Heart icon on product pages allows customers to save favorites with one click
Wishlist Page
Beautiful card grid layout displaying all saved items with images and details
Quick Add to Cart
Add wishlist items to cart instantly without page reload
Easy Management
Remove items individually with smooth animations
Database Storage
Wishlists persisted in database, not session-based
Fully Responsive
Perfect experience on all devices and screen sizes
Core Functionality
For Customers
- Heart Icon: On all product pages for easy access
- Instant Feedback: AJAX operations without page reload
- Dedicated Page: Beautiful wishlist view at /shop/wishlist
- Stock Status: See real-time product availability
- Smart Notifications: Integrated "Notify Me" button for out-of-stock items
- Shareable: Generate unique links to share your wishlist with friends
- Direct Add: Add wishlist items to cart with one click
- Bulk Actions: Add entire wishlist to cart in seconds
- Remove Anytime: Easy item removal with confirmation
- Counter Badge: Header shows wishlist item count
- Empty State: Beautiful message when wishlist is empty
For Store Owners
- Customer Insights: Track which products are most desired
- Advanced Analytics: Backend Pivot & Graph views for wishlist data
- Inventory Planning: See what customers want to buy
- Ecosystem Integration: Works seamlessly with Stock Notification module
- Recover Sales: Encourage return visits from wishlist users
- Engagement Tool: Improve customer retention
- Easy Configuration: Enable/disable via settings
- Data Management: Clear wishlist data when needed
- Security Built-in: User-specific access controls
🎨 Full Product Variant Support
Save exact colors, sizes, and configurations
Smart Variant Detection:
The wishlist intelligently captures specific product variants when customers add items. If a customer selects "Red T-Shirt - Size Large", that exact variant is saved - not just the generic product.
How It Works:
- Dynamic Detection: JavaScript automatically reads the selected variant from Odoo's configurator
- Real-time Updates: When users change color/size dropdowns, the wishlist captures their final choice
- Attribute Display: Wishlist shows full variant name: "T-Shirt (Red, Large)"
- Unique Constraint: Prevents duplicate product+variant combinations
What Gets Saved:
- Product Variant ID: The exact variant they selected
- All Attributes: Color, size, material, etc.
- Variant Price: Specific pricing for that configuration
- Variant Stock: Availability of their exact choice
Benefits:
- Better UX: Customers see exactly what they saved
- Accurate Notifications: Stock alerts for their specific variant
- Price Tracking: Monitor price changes for exact configurations
- No Confusion: Clear distinction between "Red S" and "Red XL"
🎯 Enhanced Business Intelligence Analytics
Transform wishlist data into actionable insights
The wishlist module now includes comprehensive analytics that help you understand customer behavior, track product demand, monitor price changes, and optimize your inventory. Make data-driven decisions with 11 intelligent metrics and 13 smart filters.
⚙️ Module Settings & Configuration
Complete control from one centralized settings screen
Settings Screen - Main Features
Access all wishlist configuration options from Settings → Website. The module provides a beautifully organized settings interface with four main sections for complete control over your wishlist functionality.
Main Settings Panel: Enable/disable wishlist functionality, smart stock alerts, price drop alerts, and wishlist reminders - all with intuitive toggle switches. The clean interface makes configuration simple and straightforward.
📊 Advanced Settings & Data Management
Reporting, notification frequency, and data controls
Notification Frequency:
- Run Checks Every: Configure interval (Minutes, Hours, Days, Weeks, Months)
- Global Control: One setting controls ALL notification types (Stock, Price, Reminders)
- Smart Scheduling: Automatically updates cron jobs when you change frequency
- Resource Optimization: Balance between user experience and server load
Cart & Reporting Controls:
- Wishlist Reporting: Enable/disable advanced analytics menu in Website → Reporting
- Out-of-Stock Add to Cart: Control whether customers can add out-of-stock items to cart from wishlist
- Stock Badge Display: When disabled, out-of-stock items show "Agotado" badge instead of cart button
- Business Intelligence: Access pivot tables and comprehensive analytics
Data Management:
- Enable Data Cleanup: Unlock the "Danger Zone" management tools
- Clear All Data: Secure button with confirmation to remove ALL wishlist data
- Permanent Action: Cannot be reversed - requires explicit confirmation
- Use Cases: Testing, data refresh, store reset, GDPR compliance
🛒 Out-of-Stock Cart Control
Flexible inventory management for wishlist items
Take full control over whether customers can add out-of-stock wishlist items to their cart. This powerful setting gives you the flexibility to match your business model - whether you allow backorders or prefer to prevent purchases of unavailable items.
Setting Disabled - Strict Stock Control
When Disabled:
- Stock Badge Shown: Out-of-stock items display "Agotado" (Out of Stock) badge
- No Cart Button: Add to Cart button is hidden for unavailable items
- Clear Communication: Customers immediately see product availability status
- Prevents Frustration: No false expectations about purchasing unavailable items
- Best For: Stores that don't allow backorders or pre-orders
Setting Enabled - Flexible Purchasing
When Enabled:
- Cart Button Always Shown: Add to Cart available regardless of stock status
- Flexible Ordering: Customers can purchase items even when out of stock
- Backorder Support: Perfect for stores that accept pre-orders or backorders
- No Lost Sales: Capture orders even when temporarily out of stock
- Best For: Drop-shipping, made-to-order, or pre-order business models
⚙️ Configuration:
Toggle this setting at Settings → Website → Ecommerce Wishlist → Out-of-Stock Add to Cart. The change takes effect immediately across all wishlist pages. This gives you complete control to adapt to seasonal demand, inventory policies, and business strategy changes without any code modifications.
🔐 Authentication & User Experience
Secure wishlist access with seamless login integration
Guest User Protection:
When a guest user (not logged in) clicks the "Add to Wishlist" button, they see an elegant modal dialog prompting them to log in or create an account. This ensures all wishlist data is securely associated with authenticated user accounts, preventing data loss and improving customer tracking.
Automatic Login Redirect:
When a non-authenticated user clicks the heart icon button, they are seamlessly redirected to the
/web/login endpoint. After successful login, users can return to the product and add it
to their wishlist. This smooth authentication flow encourages account creation and improves
conversion rates.
❤️ Add to Wishlist - Live Feedback
Instant confirmation with dynamic visual updates
Success Message:
- Instant Feedback: The "Add to Wishlist" button changes to display "Product added to wishlist"
- AJAX Operation: No page reload - smooth, modern user experience
- Visual Confirmation: Clear text message confirms the action was successful
Dynamic Counter Badge:
- Heart Icon Update: The heart button icon displays a number badge showing total wishlist items
- Real-time Count: Badge updates immediately to show "1" (or current count) after adding
- Header Integration: Counter visible in the site header for easy access to wishlist
📋 My Wishlist - Complete Management
Beautiful card layout with full product details and actions
Comprehensive Product Cards:
The wishlist page at /shop/wishlist displays all saved products in an elegant card
grid layout.
Each product card includes:
Product Information:
- Product Image: High-quality thumbnail
- Product Name: Full name with variant details
- Description: Sales description text
- Current Price: Live updated pricing
- Date Added: Timestamp of when item was wishlisted
Stock Status:
- In Stock: Green badge showing availability
- Out of Stock: Clear visual indicator
- Quantity Available: Real-time stock levels
- Smart Notifications: "Notify Me" button for OOS items
Action Buttons:
- Add to Cart: Individual item purchase
- Remove: Delete from wishlist
- Share List: Generate shareable link
- Add All to Cart: Bulk cart addition
🛒 Seamless Cart Integration
Add wishlist items to cart with one click
Individual Item Addition:
When you click the "Add to Cart" button on any wishlist item, a beautiful confirmation modal appears displaying "Product added to cart successfully". The AJAX-powered operation happens instantly without requiring a page refresh, providing a smooth shopping experience that encourages additional purchases.
Bulk Cart Addition:
The "Add All to Cart" button allows customers to purchase their entire wishlist at once. After clicking, a confirmation message shows "x items added to cart" where x is the actual count of products added. This feature significantly reduces friction in the checkout process and increases average order values.
🎨 Beautiful Empty State
Encouraging engagement even with no items
Thoughtful Design:
- Friendly Message: "Your wishlist is empty" with welcoming icon
- Clear Call-to-Action: "Start Shopping" button to drive engagement
- Modern Styling: Clean, attractive design that matches your store theme
- Helpful Context: Encourages users to browse products and save favorites
User Experience Benefits:
Instead of showing a blank or error page, the empty state provides a positive experience that guides users back to shopping. This reduces bounce rates and keeps customers engaged with your store, even when their wishlist is currently empty.
🔗 Wishlist Sharing Functionality
Share your favorites with friends and family
Shareable Links:
- Unique URLs: Generate secure, shareable links to your wishlist
- User Attribution: Shared lists display the owner's name (e.g., "Michel Admin's Wishlist")
- Public Access: Friends can view items without requiring an account
- Gift Registry: Perfect for birthdays, weddings, and special occasions
Real-Time Synchronization:
- Live Updates: Changes to your wishlist automatically reflect in shared links
- Product Details: Shows current prices, stock status, and full product information
- Direct Purchase: Shared links include "Add to Cart" buttons for easy gifting
- Social Commerce: Leverage word-of-mouth marketing through wishlist sharing
📧 Premium Email Notifications
Beautiful, responsive emails that drive conversion
Three professionally designed email templates automatically notify customers about important wishlist events. All emails feature rich HTML layouts, real product images, brand identity, and smart call-to-action buttons that work perfectly across all email clients (Outlook, Gmail, Apple Mail, Yahoo, etc.).
Back in Stock
Sent automatically when out-of-stock wishlist items become available again. Features a vibrant purple gradient header and displays product images, current prices, and direct "Add to Cart" links.
Still Interested?
Gentle reminder emails sent after a configurable number of days (default: 7) to re-engage customers with items they've saved. Uses a soft pink-purple gradient to maintain a friendly, non-pushy tone.
Price Drop Alert
Alerts customers when wishlist item prices decrease. Shows both old and new prices with clear savings calculation. Features a fresh green gradient header to convey the excitement of a deal.
Email Features & Compatibility:
- Responsive Design: Perfect display on desktop and mobile email clients
- Table-Based Layouts: Guaranteed compatibility with even the oldest email clients
- Dynamic Content: Real product images fetched from your Odoo database
- Brand Integration: Automatically uses your company name, logo, and email address
- Multi-Language: Full Spanish and English translation support
- Smart Tracking: Prevents duplicate notifications with "Last Notified Price" tracking
💰 Price Tracking Intelligence
Monitor price changes and customer savings automatically
Price Tracking Features:
- Price at Addition: Frozen history of price when first wishlisted
- Current Value: Live product price (updates automatically)
- Price Change: Exact monetary difference ($)
- Avg Price Change %: Smart averaging (not summing) for accurate trends
- Last Notified Price: Intelligent tracking to prevent spamming users
- Savings Amount: Calculates actual customer savings opportunity
Price Analytics Dashboard:
Current Value Filter
Current Value: View the live, real-time price of all wishlisted products. This filter helps identify high-value wishlist opportunities and track the total potential revenue from customer wishlists.
Price at Addition Filter
Price at Addition: Historical price snapshot frozen when customers first added items to their wishlist. Compare against current prices to measure price changes and discount opportunities.
Price Change Filter
Price Change: Monetary difference between current and original prices. Positive values indicate price increases, negative values show discounts. Perfect for identifying repricing opportunities.
💹 Advanced Price Metrics
Percentage changes, savings, and notification tracking
Price Change %
Percentage change from original to current price. Intelligently averaged (not summed) across multiple products for accurate trend analysis. Ideal for spotting significant discount patterns.
Customer Savings
Total monetary savings available to customers when prices drop below original wishlist price. Calculate aggregate customer benefit and use this data to create targeted "Deal Alert" campaigns.
Last Notified Price
Smart tracking field preventing notification spam. Records the price at which the last alert was sent to customers, ensuring they only receive new alerts when prices change significantly from the last notification.
📦 Stock Availability Intelligence
Track stock changes and identify restocking priorities
Stock Notifications Analytics
Stock Notifications Sent: Track how many times each customer has been notified about a product returning to stock. High notification counts identify "patient waiters" - highly engaged customers with strong purchase intent who are waiting for specific items to become available.
Stock Tracking Features:
- Notification Count: Track "High Intent" users who have been alerted multiple times.
- Stock Status Changed: Detects when availability flips (In -> Out -> In).
- Back in Stock Filter: Find products that recently returned to inventory.
- Out of Stock Filter: Identify restocking priorities based on wishlists.
Business Benefits:
- Prioritize restocking based on ACTUAL demand (not just guesses).
- Identify "Patient Waiters" via Notification Count.
- Notify customers automatically when desired items return.
🔥 Popularity & Demand Analytics
See which products customers desire most
Demand Tracking:
- Popularity Score: Count of unique users who wishlisted each product
- High Demand Filter: Products wishlisted by 5+ users
- Very Popular Filter: Products wishlisted by 10+ users
- Trend Analysis: Track demand over time with graph view
Use Cases:
- Identify trending products before they sell out
- Plan marketing campaigns around popular items
- Adjust pricing based on demand
- Prioritize product photography/descriptions for high-demand items
- Use popularity data for homepage promotions
Real-World Applications:
Marketing Strategy: Use popularity data to create targeted campaigns around trending products.
Inventory Planning: Stock up on high-demand items before they sell out.
Pricing Optimization: Adjust prices based on actual customer demand signals.
🔍 13 Smart Filters for Deep Insights
Find exactly what you need with intelligent filtering
Price & Discount Filters:
- Discounted Items - Products cheaper now
- View customer savings opportunities
- Target users with price drop alerts
Stock Filters:
- Out of Stock - Restocking priorities
- Back in Stock - Returned products
- Identify stock status changes
Demand Filters:
- High Demand (5+) - Popular items
- Very Popular (10+) - Trending products
- Focus on high-value opportunities
Time-Based Engagement Filters:
- Recent (Last 7 Days): Hot leads, high purchase intent
- Stale (30+ Days): Needs reminder or discount
- Very Stale (60+ Days): Re-engagement opportunity
- Abandoned (90+ Days): Win-back campaign targets
Combined Filters:
Powerful Combinations: Stack multiple filters to create highly targeted result sets.
Example: Find "Discounted + High Demand + Stale" items for flash sale campaigns.
Save Time: Pre-configured filters give you instant insights without manual data analysis.
📊 Powerful Analytics Views
Graph, Pivot, and detailed reporting
Graph View Capabilities:
- Visualize Trends: Bar charts, line graphs, and pie charts for wishlist data
- Time-based Analysis: Track how wishlist metrics change over days, weeks, or months
- Product Comparison: See which products have the highest demand or savings
- Export Data: Download graphs and share with your team
Pivot View Features:
- Multi-Dimensional Analysis: Cross-reference multiple data points simultaneously
- Dynamic Grouping: Group by product, user, date, stock status, and more
- Custom Aggregations: Sum, average, count - choose what matters to you
- Drill-Down: Expand/collapse data hierarchies for detailed investigation
Available Measures:
- Total Current Value - Overall wishlist value
- Total Savings Amount - Customer discount opportunities
- Average Price Change % - Price trend analysis
- Average Days in Wishlist - Engagement timing
- Total Popularity - Product demand count
⚡ Real-Time Auto-Update
Analytics stay current automatically
How It Works:
All analytics fields use Odoo's computed field mechanism with automatic dependency tracking. When you change product data, the system automatically recalculates all affected metrics.
Automatic Updates Triggered By:
- Product Price Change: All price analytics update instantly
- Stock Change: Stock status fields recalculate
- Time Passage: Days in wishlist updates automatically
- New Wishlist Additions: Popularity counts refresh
Example Flow:
-
User adds Product X to wishlist at $100
→ price_at_addition = $100 (frozen)
→ current_value = $100
→ price_change = $0 -
Admin changes Product X price to $80
→ Odoo automatically triggers recalculation
→ current_value = $80
→ price_change = -$20
→ has_discount = True
→ savings_amount = $20 -
User views analytics
→ Sees updated savings and discount immediately!
Settings & Configuration
Easy management from Odoo settings
Access wishlist settings through Settings → Website where you'll find the Ecommerce Wishlist app section with comprehensive configuration options.
Available Settings:
- Enable Wishlist: Toggle wishlist functionality on/off for your entire store
- Clear Data: Remove all wishlist data with one click (with confirmation)
- View Statistics: See technical information about the module
Configuration Features:
- Browser-based configuration (no code required)
- Instant enable/disable without module uninstall
- Data cleanup button with safety confirmation
- Detailed help text for each setting
- View module technical specifications
- Security information display
Technical Excellence
Built with best practices
Security
- Authentication required for all operations
- User-specific wishlists (record rules)
- CSRF protection on all forms
- SQL injection prevention (ORM only)
- XSS protection via templates
- Secure session handling
Performance
- AJAX operations (no page reload)
- Optimized database queries
- Indexed fields for fast lookup
- Concurrency handling with retry logic
- Minimal page load impact
- Efficient data structures
Clean Code
- Smart Cleanup: Auto-uninstall hook wipes all data instantly (Zero residue)
- Follows Odoo best practices
- Modular architecture
- Comprehensive documentation
- Well-commented code
- Consistent naming conventions
- Professional development standards
RESTful API Endpoints
Comprehensive controller routes
HTTP Routes
/wishlist/add- Add product to wishlist (POST/GET)/shop/wishlist- Display wishlist page (GET)
JSON-RPC Endpoints
/shop/wishlist/add_to_cart/<id>- Add wishlist item to cart/shop/wishlist/remove/<id>- Remove from wishlist/shop/wishlist/remove/product/<product_id>- Remove by product/shop/wishlist/check_access- Check authentication status/shop/wishlist/count- Get wishlist item count
API Features:
- CSRF Protection: All endpoints secured
- Authentication: Login required for operations
- Error Handling: Proper error responses
- Variant Support: Works with product variants
- Concurrency Safe: Retry logic for conflicts
- JSON Responses: Standard format for AJAX
Database Structure
Robust data model
Model: ecommerce_wishlist.wishlist
Complete wishlist storage with 11 fields:
- product_id: M2O to product.product (required, indexed)
- user_id: M2O to res.users (required, indexed)
- active: Boolean (default True)
- create_date: Datetime (indexed, read-only)
- price_unit: Float (computed, stored)
- product_name: Related field (stored)
- product_image: Related field
- product_description: Related field
- website_published: Related field
- qty_available: Related field
Constraints & Rules:
- Unique Constraint: One product per user (product_user_uniq)
- Cascade Delete: Auto-cleanup when product/user deleted
- Default Ordering: By create_date desc (newest first)
Security Rules:
- Public Users: Read-only (redirected to login)
- Portal Users: Full CRUD on own items
- Internal Users: Full CRUD on own items
- Sales Managers: Full CRUD on all items
Complete Multi-language Support
Professional translations included
English (EN): Complete translation of all UI elements, buttons, messages, and backend labels. Professional terminology throughout.
Spanish (ES): Full professional Spanish translation covering frontend, backend, settings, and portal interfaces. 200+ translated strings.
Translated Components:
- All frontend buttons and labels
- Settings screen and descriptions
- Portal pages and messages
- Error and success notifications
- Empty state messages
- Confirmation dialogs
- Help text and tooltips
- Model fields and descriptions
- Controller messages
- JavaScript strings
Mobile-First Responsive Design
Perfect on all devices
Mobile Optimizations:
- Touch-Friendly: Large buttons and tap targets
- Responsive Grid: Cards stack on mobile
- Fast Loading: Optimized for mobile networks
- Swipe Support: Natural mobile gestures
- Orientation: Works in portrait and landscape
- 6 CSS Files: Specialized responsive styling
Responsive Features:
- Product cards adapt to screen size
- Wishlist button accessible on mobile product pages
- Add to cart works perfectly on touch devices
- Empty state displays beautifully on mobile
- Header counter visible on all screen sizes
- Settings screen mobile-friendly
Easy Installation & Setup
Get started in minutes
Installation Steps:
- Download the module from Odoo App Store or upload folder
- Place in your Odoo addons directory
- Update Apps List in Odoo
- Search for "Ecommerce Wishlist"
- Click Install
- That's it - wishlist is ready to use!
Note: No additional configuration required. Module works out of the box with sensible defaults.
Configuration (Optional):
Navigate to Settings → Website to:
- Enable/disable wishlist functionality
- Clear all wishlist data if needed
- View technical information
Compatibility
Requirements:
- Odoo Version: 18.0+ (Community or Enterprise)
- Python: 3.8+
- PostgreSQL: 12+
- Browsers: Chrome, Firefox, Safari, Edge (latest versions)
- Mobile: iOS Safari, Chrome Mobile
Required Odoo Modules:
- base
- web
- website
- website_sale
- product
- sale
All standard Odoo modules - no external dependencies required!
Professional Support in English & Spanish
We're here to help you succeed
Email Support
support@hexalian.com
🇺🇸 English | 🇪🇸 Español
Response within 24 hours
+1 (724) 215-3235
Quick responses in both languages
Business hours support
Website
www.hexalian.com
Documentation & Resources
Video tutorials available
🚀 Ready to Boost Your Sales?
Install now and transform your customer experience
✅ Install in minutes - No coding required
✅ Works instantly - Pre-configured settings
✅ Fully responsive - Perfect on mobile
✅ Secure & tested - Enterprise-grade code
✅ Support included - We're here to help
Questions? Contact us anytime:
📧 support@hexalian.com | 🌐 www.hexalian.com
⭐ Join Odoo store owners who are already using our modules
💳 Secure payment via Odoo Apps marketplace
🔒 Your satisfaction is guaranteed
Ecommerce Wishlist v18.0.1.0.0
Developed by Hexalian
LLC
Licensed under OPL-1 | Compatible with Odoo 18.0+
Contact Us:
Email: support@hexalian.com
WhatsApp: +1 (724) 215-3235
Website: www.hexalian.com
Let customers save their favorites today!
Ecommerce Wishlist Module
Overview
The Ecommerce Wishlist module provides comprehensive wishlist functionality for your Odoo 17 e-commerce store. This standalone module was extracted from the web_commerce_suite and allows customers to save products they're interested in for later purchase, improving user experience and potentially increasing sales.
The module features a beautiful heart icon button on product pages, AJAX-powered operations for smooth interactions, and a modern card-based wishlist page with responsive design.
Key Features
Core Functionality
- Add to Wishlist: Customers can add products to their wishlist from product pages
- Wishlist Page: Dedicated page displaying all wishlist items in a modern card grid layout
- Quick Add to Cart: Add wishlist items directly to cart without leaving the wishlist page
- Remove Items: Remove individual items from the wishlist
- Product Variants: Full support for product variants
- Real-time Counter: Wishlist counter in header updates in real-time
- Stock Status: Display product availability and stock status
User Experience
- Authentication Required: Secure, user-specific wishlists (public users redirected to login)
- AJAX Operations: Smooth interactions without page reloads
- Responsive Design: Works perfectly on all devices with 6 specialized CSS files
- Heart Icon Button: Beautiful heart icon on product pages (desktop and mobile)
- Empty State: Beautiful empty wishlist widget with animated heart and quick action links
- Modern Card Layout: Product cards with images, prices, availability badges, and action buttons
Technical Features
- Database Storage: Persistent storage using ecommerce_wishlist.wishlist model
- Security Rules: 4 record rules + 4 access rights for comprehensive security
- Concurrency Handling: Robust handling with 3 retry attempts and exponential backoff
- Multi-language: English and Spanish translations included
- Performance: Optimized queries with indexes on product_id, user_id, and create_date
- Installation Hooks: Post-install and uninstall hooks for data management
- Product Variants: Full support for configurable product variants
Installation
Prerequisites
- Odoo 17.0 or later
- website_sale module installed
- portal module installed
Installation Steps
Copy the module to your Odoo addons directory:
cp -r ecommerce_wishlist /path/to/odoo/addons/
Update the apps list:
- Go to Apps menu
- Click "Update Apps List"
- Search for "Ecommerce Wishlist"
Install the module:
- Click "Install" button
- The post_init_hook will run automatically and log successful installation
Configuration
No Configuration Required
The module works out of the box with no configuration required. All wishlist features are enabled by default upon installation.
Permissions
The module includes the following access rights and security rules:
Access Rights (ir.model.access.csv):
- Public Users: Read-only access
- Portal Users: Read, Write, Create (no Delete)
- Internal Users: Read, Write, Create (no Delete)
- Sales Managers: Full CRUD access (including Delete)
Record Rules (ir.rule):
- Public Users: Can read all wishlist items
- Portal Users: Can manage only their own wishlist items (domain: user_id = current user)
- Internal Users: Can manage only their own wishlist items (domain: user_id = current user)
- Sales Managers: Can manage all wishlist items (no domain restriction)
Usage
For Customers
Adding Products to Wishlist
- Navigate to any product page
- Click the "Add to Wishlist" button below the "Add to Cart" button
- Login if prompted (wishlist requires authentication)
Viewing Wishlist
- Visit /shop/wishlist directly
- The wishlist page displays all items in a modern card grid layout
Managing Wishlist Items
- Add to Cart: Click the "Add to Cart" button on any wishlist item
- Remove: Click the "Remove" button to delete an item
- View Product: Click the product name or image to view details
For Administrators
View All Wishlists
- Go to Sales → Configuration → Wishlist (if menu is enabled)
- Or access via Settings → Technical → Database Structure → Models → Search for "ecommerce.wishlist"
Cleanup Wishlist Data
# In Odoo shell or code self.env['ecommerce_wishlist.wishlist'].sudo().cleanup_all_wishlist_data()
For Developers
Model Access Examples
# Get wishlist items for current user wishlist_items = request.env['ecommerce_wishlist.wishlist'].get_wishlist_products() # Get wishlist items for specific user wishlist_items = request.env['ecommerce_wishlist.wishlist'].get_wishlist_products(user_id=user_id) # Add product to wishlist request.env['ecommerce_wishlist.wishlist'].sudo().create({ 'product_id': product_id, 'user_id': user_id, }) # Add wishlist item to cart wishlist_item = request.env['ecommerce_wishlist.wishlist'].browse(wishlist_id) result = wishlist_item.add_to_cart() # Returns: {'success': bool, 'message': str} # Cleanup all wishlist data count = request.env['ecommerce_wishlist.wishlist'].sudo().cleanup_all_wishlist_data()
API Reference
HTTP Endpoints
Add to Wishlist
- Route: POST /wishlist/add
- Auth: Public (redirects to login if not authenticated)
- CSRF: Required
- Parameters:
- product_id - Product template ID
- variant_id (optional) - Specific product variant ID
- Returns: Redirect to /shop/wishlist or JSON response
View Wishlist Page
- Route: GET /shop/wishlist
- Auth: Public (redirects to login if not authenticated)
- Returns: Rendered wishlist page template
JSON-RPC Endpoints
Add Wishlist Item to Cart
- Route: POST /shop/wishlist/add_to_cart/<wishlist_id>
- Type: JSON
- Auth: Public
- Returns: {'success': bool, 'message': str, 'show_cart_link': bool, 'cart_url': str}
Remove Item from Wishlist
- Route: POST /shop/wishlist/remove/<wishlist_id>
- Type: JSON
- Auth: Public (requires authentication)
- Concurrency: 3 retry attempts with exponential backoff
- Returns: {'success': bool, 'message': str}
Remove Product from Wishlist
- Route: POST /shop/wishlist/remove/product/<product_id>
- Type: JSON
- Auth: Public (requires authentication)
- Returns: {'success': bool, 'message': str}
Check Authentication Status
- Route: POST /shop/wishlist/check_access
- Type: JSON
- Auth: Public
- Returns: {'success': bool, 'is_authenticated': bool, 'can_access': bool, 'redirect_url': str}
Get Wishlist Count
- Route: POST /shop/wishlist/count
- Type: JSON
- Auth: Public
- Returns: {'count': int}
Database Structure
Model: ecommerce_wishlist.wishlist
| Field | Type | Description |
|---|---|---|
| product_id | Many2one | Reference to product.product (required, indexed, cascade delete) |
| user_id | Many2one | Reference to res.users (required, indexed, cascade delete) |
| active | Boolean | Active status (default: True) |
| create_date | Datetime | Date added to wishlist (readonly, indexed) |
| price_unit | Float | Product price (computed, stored) |
| product_name | Char | Product name (related, stored) |
| product_image | Binary | Product image 128x128 (related) |
| product_description | Text | Product sale description (related) |
| website_published | Boolean | Published status (related) |
| qty_available | Float | Available quantity (related) |
Constraints
- SQL Unique Constraint: product_user_uniq - Each product can only appear once per user in the wishlist
- Cascade Delete: Wishlist items are automatically deleted when product or user is deleted
Customization
Extending the Model
from odoo import models, fields class ProductWishlist(models.Model): _inherit = 'ecommerce.wishlist' custom_field = fields.Char(string='Custom Field')
Customizing Templates
Override the wishlist page template:
<template id="custom_wishlist_page_custom" inherit_id="ecommerce_wishlist.custom_wishlist_page"> <xpath expr="//div[@class='wishlist-page']" position="before"> <div class="custom-header"> <!-- Your custom content --> </div> </xpath> </template>
Styling
Override CSS by creating a new CSS file and adding it to assets:
'web.assets_frontend': [
'your_module/static/src/css/wishlist_custom.css',
],
Troubleshooting
Wishlist Button Not Showing
- Check if the module is installed and enabled
- Clear browser cache and reload the page
- Regenerate assets: Settings → Technical → User Interface → Views → Regenerate Assets Bundles
- Check browser console for JavaScript errors
Items Not Adding to Wishlist
- Ensure user is logged in (wishlist requires authentication - public users are redirected to login)
- Check browser console for JavaScript errors
- Verify CSRF token is present in the page
- Check Odoo logs for server-side errors
Concurrency Errors
The module includes built-in concurrency handling with 3 retry attempts and exponential backoff. If you still experience issues:
- Check database logs for deadlock errors
- Ensure PostgreSQL is properly configured
- The retry mechanism should handle most concurrent delete operations automatically
Duplicate Product Error
If you see "This product is already in your wishlist!" error:
- This is expected behavior - the SQL constraint prevents duplicate entries
- The product is already in the wishlist
- No action needed - this is working as designed
Module Structure
Assets
CSS Files (web.assets_frontend):
- wishlist_enhanced.css - Main wishlist styles and animations
- wishlist_cart_wrapper.css - Cart integration styles
- wishlist_add_to_cart_fix.css - Add to cart button fixes
- wishlist_responsive.css - Mobile responsive styles
- wishlist_layout_fix.css - Layout fixes and adjustments
- wishlist_card_responsive.css - Wishlist card responsive design
JavaScript Files (web.assets_frontend):
- wishlist_header_button.js - Header wishlist button functionality
- wishlist_auth.js - Authentication handling
- wishlist_ajax.js - AJAX operations for wishlist
- wishlist_fixes.js - Various fixes and enhancements
- wishlist_add_to_cart.js - Add to cart functionality
QWeb Templates (web.assets_qweb):
- wishlist_button.xml - Wishlist button template
Installation Hooks
Post-Install Hook (post_init_hook):
- Logs successful installation
- Confirms wishlist functionality is available
Uninstall Hook (uninstall_hook):
- Cleans up all wishlist data from database
- Logs cleanup statistics
Performance Optimization
Database Indexes
The module automatically creates indexes on:
- product_id - For fast product lookups
- user_id - For fast user wishlist queries
- create_date - For sorting by date added
Query Optimization
- Uses sudo() for efficient database access
- Implements exists() checks before operations
- Stores computed and related fields for faster access
- Uses domain filters to minimize data retrieval
Caching
Consider implementing caching for:
- Wishlist count queries (already optimized with search_count)
- Product availability checks (uses related fields)
Compatibility
- Odoo Version: 17.0+
- Python Version: 3.8+
- Browsers: Chrome, Firefox, Safari, Edge (latest versions)
- Mobile: iOS Safari, Chrome Mobile
Dependencies
Required Modules
- base - Odoo core
- web - Web interface
- website - Website builder
- website_sale - E-commerce functionality
- product - Product management
- sale - Sales management
Note: The portal module is NOT required as a dependency, though portal users can use the wishlist feature.
License
This module is licensed under the Odoo Proprietary License v1.0 (OPL-1).
Changelog
Version 1.0.0
- Initial release extracted from web_commerce_suite module
- Core wishlist functionality with database storage
- Heart icon button on product pages (desktop and mobile responsive)
- AJAX-based operations for smooth user experience
- Multi-language support (EN/ES)
- Fully responsive design with 6 specialized CSS files
- 5 JavaScript files for enhanced functionality
- Comprehensive security rules and access rights
- Concurrency handling with retry logic (3 attempts, exponential backoff)
- Post-install and uninstall hooks for data management
- Beautiful empty wishlist state with quick action buttons
- Support for product variants
- Authentication required for wishlist operations
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module