- Add fallback values for display_price in t-attf-data-product-price attribute to prevent TypeError when display_price is None - Add fallback for product.uom_id.category_id.name to prevent None errors - Use chained 'or' operators to ensure safe fallback: * display_price or product.list_price or 0 * product.uom_id.category_id.name if exists else empty string This fixes the QWeb rendering error: 'TypeError: NoneType object is not callable' The error occurred when the template tried to render data attributes with None values. Now the template safely handles missing or None values by using sensible defaults. |
||
|---|---|---|
| .. | ||
| controllers | ||
| data | ||
| i18n | ||
| migrations | ||
| models | ||
| readme | ||
| security | ||
| static | ||
| tests | ||
| views | ||
| .codeclimate.yml | ||
| .editorconfig | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| __init__.py | ||
| __manifest__.py | ||
| CHANGELOG.md | ||
| LICENSE.txt | ||
| README.md | ||
| README.rst | ||
| setup.py | ||
Website Sale - Aplicoop
Author: Criptomart License: AGPL-3 Maintainer: Criptomart SL
Summary
Modern replacement for legacy Aplicoop - Cooperative group ordering system with separate carts and multi-language support.
Description
Website Sale Aplicoop provides a complete group ordering system designed for cooperative consumption groups. It replaces the legacy Aplicoop system with a modern, scalable solution where customers organize collaborative orders, manage group memberships, and handle separate shopping carts. Perfect for food cooperatives, buying groups, and collective purchasing organizations.
Features
- ✅ Group order management with full lifecycle (draft → confirmed → completed)
- ✅ Separate shopping carts per order group
- ✅ Group membership tracking with active/inactive states
- ✅ Order collection and cutoff dates with validation
- ✅ Pickup day configuration and fulfillment tracking
- ✅ Multi-language support (ES, PT, GL, CA, EU, FR, IT)
- ✅ Partner location management for group coordination
- ✅ Product ecosystem integration (ribbons, pricing, margins)
- ✅ Order state transitions with email notifications
- ✅ Delivery tracking and group order fulfillment
- ✅ Financial tracking per group member
- ✅ Automatic translation of UI elements
- ✅ Lazy Loading: Configurable product pagination for fast page loads
Installation
- Place addon in Odoo addons folder:
/addons/website_sale_aplicoop - Activate developer mode
- Go to Apps → Update Apps List
- Search for "Website Sale - Aplicoop"
- Click Install
Requirements
- Odoo 18.0+
- Website module
- Sale module
- Product module
- Account module
Dependencies
- base
- web
- website
- sale
- product
- account
Usage
Administrator Setup
1. Create a Group Order
- Go to Website Sale → Group Orders (or Coops → Órdenes de Grupo)
- Click Create
- Fill in:
- Name: e.g., "Weekly Cooperative Order #5"
- Group: Select the cooperative group
- Collection Date: When orders will be collected
- Cutoff Date: Last moment to add items
- Pickup Date: When group members collect their orders
- Save
2. Configure Pickup Dates
- Go to Settings → Website → Shop Settings
- Configure Pickup Days: Define which days are available
- Set Group Settings: Default locations, delivery partners
3. Add Group Members
- Open a Group Order
- In the Members tab, click Add
- Select partner(s)
- Set active/inactive status
- Save
Customer Experience
For Group Members on Website
- Browse Products: Members see products with eco-ribbons, pricing, margin info
- Add to Cart: Select items (cart is separate per group order)
- Review Cart: See order summary before cutoff date
- Submit Order: Confirm before cutoff time
- Receive Notification: Get email with pickup details
- Pickup: Collect order on designated pickup date
Order Workflow
Draft → Confirmed → Collected → Invoiced → Completed
↓
Cancelled (if member opts out)
Configuration
Basic Configuration
Required:
- Create group orders with collection/cutoff/pickup dates
- Assign group members to orders
- Set available pickup dates
Optional:
- Configure custom email templates
- Set up product-specific group restrictions
- Customize group order report
Multi-Language Setup
The addon automatically translates:
- Interface elements
- Form labels
- Report headers
- Email notifications
Supported Languages: ES, PT, GL, CA, EU, FR, IT
Translations are managed in:
i18n/[language].pofiles- Auto-extracted from templates
- See
docs/TRANSLATION_CONVENTIONS.mdfor translation patterns
Website Customization
Edit templates in: views/website_templates.xml
Key customizable sections:
eskaera_page: Main group order displayeskaera_details: Order details viewmember_cart: Individual member cart interface
Technical Details
Core Models
group.order (Main group order)
name(Char): Order identifiergroup_id(Many2one): Link to groupstate(Selection): draft/confirmed/collected/invoiced/completed/cancelledcollection_date(Date): When group collectscutoff_date(Datetime): Last moment to orderpickup_date(Date): Member pickup dayline_ids(One2many): Order linesmember_ids(One2many): Group membersactive(Boolean): Soft delete
group.order.line (Order items per member)
order_id(Many2one): Parent group ordermember_id(Many2one): Which group memberproduct_id(Many2one): Ordered productquantity(Float): Amount orderedunit_price(Float): Price per unitsubtotal(Float): Computed (qty × price)
group.partner (Group member tracking)
partner_id(Many2one): Odoo partnergroup_id(Many2one): Which groupactive(Boolean): Active member statusrole(Selection): admin/member
Extended Models
product.template
group_order_allowed(Boolean): Can be in group orderseco_ribbon_id(Many2one): Environmental ribbonmargin_type_id(Many2one): Pricing margin
sale.order
group_order_id(Many2one): Parent group order (if applicable)
Views & Templates
Backend Views:
group.orderlist/form viewsgroup.order.lineinline formgroup.partnerconfiguration view
Frontend Templates:
eskaera_page: Main group order displayeskaera_details: Order details/summarymember_cart: Individual cart interfacegroup_members: Member list view
Integration Points
This addon integrates with:
-
Product Modules
product_eco_ribbon- Eco-friendly product indicatorsproduct_margin_type- Dynamic product pricingproduct_pricing_margins- Cost management
-
Website/E-commerce
elika_bilbo_website_theme- Custom website themewebsite_sale- Core shop functionalitywebsite_legal_es- Legal compliance (Spanish)
-
Sales/Accounting
sale- Sales order generationaccount- Invoicing
Testing
Run tests with:
cd /home/snt/Documentos/lab/odoo/kidekoop/odoo-addons
python -m pytest website_sale_aplicoop/tests/ -v
Test Coverage:
- ✅ Group order creation/deletion
- ✅ Member management
- ✅ Order line addition/removal
- ✅ State transitions
- ✅ Cutoff date validation
- ✅ Pickup date assignment
- ✅ Translation extraction (7 languages)
- ✅ Website template rendering
Known Limitations
- Group orders are company-specific
- Cannot change pickup date after order is confirmed
- Members cannot modify orders after cutoff
- Automatic invoicing must be triggered manually
Changelog
18.0.1.3.0 (2026-02-16)
- Performance: Lazy loading of products for faster page loads
- Configurable product pagination (default: 20 per page)
- New Settings: Enable Lazy Loading, Products Per Page
- Page 1: 500-800ms load time (vs 10-20s before)
- Subsequent pages: 200-400ms via AJAX
- New endpoint:
GET /eskaera/<order_id>/load-page?page=N
- Templates: Split product rendering into reusable template
- New:
eskaera_shop_productstemplate - Backend:
_get_products_paginated()in group_order model
- New:
- JavaScript: Load More button with event handling
_attachLoadMoreListener()for AJAX pagination- Spinner during load (button disabled + "Loading..." text)
- Re-attach event listeners for new products
- Auto-hide button when no more products
- Documentation: Added
docs/LAZY_LOADING.mdwith full technical details
18.0.1.2.0 (2026-02-02)
- UI Improvements:
- Increased cart text size (2x) for better readability
- Increased cart icon sizes (1.2rem) with proper button proportions
- Enlarged "Save as Draft" button in checkout (2x text and icon)
- Date Calculation Fixes:
- Fixed pickup_date calculation (was adding extra week incorrectly)
- Simplified pickup_date computation logic
- Display Enhancements:
- Added delivery_date display to all order pages
- Improved date field visibility on order cards and product pages
18.0.1.0.0 (2024-12-20)
- Initial release
- Core group order functionality
- Multi-language translation support
- Complete member management
- Order state machine implementation
18.0.1.1.0 (2025-01-10)
- Fixed translation extraction for "Pickup day" and "Cutoff day"
- Improved QWeb template for better performance
- Added comprehensive documentation
Support
For issues, feature requests, or contributions:
- Repository: https://git.criptomart.net/KideKoop/kidekoop/odoo-addons
- Main Documentation:
/docs/folder (transversal docs) - Addon Documentation: This README +
/docs/ODOO18_TRANSLATIONS_LEARNINGS.md - Maintainer: Criptomart SL
Documentation References
- Translation Patterns: See
docs/TRANSLATION_CONVENTIONS.md - Translation Examples: See
docs/TRANSLATION_EXAMPLES.md - Odoo 18 Translation Guide: See
docs/ODOO18_TRANSLATIONS_LEARNINGS.md - Project Architecture: See
docs/ARCHITECTURE.md
Related Modules
product_eco_ribbon- Product environmental classificationproduct_margin_type- Dynamic product pricingproduct_pricing_margins- Complete pricing systemelika_bilbo_website_theme- Custom website themewebsite_legal_es- Legal compliance
Version: 18.0.1.2.0 Odoo: 18.0+ License: AGPL-3 Maintainer: Criptomart SL Repository: https://git.criptomart.net/KideKoop/kidekoop/odoo-addons