# Product Origin Text - Developer Notes ## Technical Implementation ### Architecture This module adds a simple free-text origin field to products. **Models:** 1. **product.template** - Base model with the `origin_text` field - Field: `origin_text` (Char) - This is where the actual data is stored - Editable directly on the product form 2. **product.product** - Related field for variant access - Field: `origin_text` (Char, related to `product_tmpl_id.origin_text`) - `readonly=False` allows editing from variant views - Changes propagate to the template ### Why This Architecture? The `origin_text` field is stored in `product.template` because: - Origin typically applies to all variants of a product - Simplifies data management (one source of truth) - Avoids duplication across variants - Standard Odoo pattern for product-level attributes The related field in `product.product` with `readonly=False` allows: - Seamless access from variant views - Editing from either template or variant forms - Automatic synchronization between template and variants ### Previous Architecture (Deprecated) The previous version stored `origin_text` in `product.supplierinfo` with computed fields in template/product. This was deprecated because: - Supplierinfo records don't always exist when products are created - Added unnecessary complexity with computed fields - Required `product_main_seller` dependency - Origin semantically belongs to the product, not the supplier relationship ### Dependencies - **product** - Core product module (only dependency) ### Performance Considerations - Simple stored field with no computation overhead - Related field access is efficient in Odoo ORM - No additional queries needed for variant access ### Testing Strategy Tests cover: 1. **Basic field storage** - Set origin on template 2. **Related field access** - Verify variant sees template origin 3. **Write from variant** - Verify changes propagate to template 4. **Empty cases** - Products without origin 5. **Multiple products** - Independent origins 6. **Variants** - All variants share same origin ## Code Quality - Follows OCA guidelines - Black formatted (line length 88) - isort for imports - Minimal dependencies (only `product`) ## Migration from v1.x If upgrading from the previous supplier-based architecture: 1. Data in `product.supplierinfo.origin_text` will need manual migration 2. Run migration script to copy main supplier origin to product template 3. Remove dependency on `product_main_seller` if no longer needed ## Version History - **18.0.2.0.0** (2026-03-06) - Simplified architecture - Field directly on product.template - Related field in product.product - Removed dependency on product_main_seller - **18.0.1.0.0** (2026-02-25) - Initial release (deprecated) - Free-text origin field per supplier - Automatic display based on main vendor