π Odoo: Data Mapping & Synchronisation
This guide details the exact data flow and schema mapping between your Odoo environment and Optiply. It outlines the synchronisation schedule, available configuration flags, and the specific logic used for every data entity.
β±οΈ Synchronisation General Board
The following table outlines the data entities and their update frequencies.
Entity | Direction | Frequency |
Products | Odoo β Optiply | Every 30 min |
Product Deletions | Odoo β Optiply | Every 30 min |
Product Compositions | Odoo β Optiply | Every 30 min |
Stocks | Odoo β Optiply | Every 30 min |
Suppliers | Odoo β Optiply | Every 30 min |
Supplier Products | Odoo β Optiply | Every 30 min |
Supplier Products Deletions | Odoo β Optiply | Every 30 min |
Sell Orders | Odoo β Optiply | Every 30 min |
Sell Order Deletions | Odoo β Optiply | Every 30 min |
Buy Orders | Odoo β Optiply | Every 30 min |
Buy Order Line Added | Odoo β Optiply | Every 30 min |
Buy Order Line Changes | Odoo β Optiply | Every 30 min |
Buy Order Line Cancellation | Odoo β Optiply | Every 30 min |
Receipt Lines (Deliveries) | Odoo β Optiply | Every 30 min |
Buy Orders (Export) | Optiply β Odoo | Every 15 min |
βοΈ Flags and Features (Configuration)
The Odoo integration offers extensive customisation through backend flags. Please contact Customer Support to adjust these variables based on your specific Odoo setup.
use_templates: Determines whether we create products based on templates.sell_price_with_taxes: Iftrue, we will sync product prices with taxes already included.sync_purchase_price: Determines if we sync purchase prices for Supplier Products.average_purchase_price: Iftrue(andsync_purchase_priceis also true), we sync the average cost (avg_cost) on Supplier Products.pullAllOrders: Iffalse, we only pull Sell Orders with the status"sale"(or"cancel"for deletions). Iftrue, we pull all orders regardless of status.map_preferred: Iftrue, we sync the main preferred supplier for each product.language: Dictates the language brought from the remote system (e.g.,en_US,nl_NL). Default:en_US.map_sellOrdersPOS: Iftrue, we pull and sync Sell Orders originating from the Point of Sale (POS) module.map_stockLevel: Determines the exact Odoo field used to map the stock level. Default:available_quantity.export_BOLine_price: Determines if we send thebuyOrderLine.pricewhen exporting Buy Orders to Odoo. Default:true(Note: This is required for Odoo v18+).bo_completed_on_receipt: Iftrue, Buy Orders in Optiply will be marked completed upon full receipt of goods, ignoring invoice status. Default:false.
πΊοΈ Data Mapping Details
1. Products
Optiply | Odoo | Logic / Notes |
Remote ID |
| - |
Name |
| The language is determined by the |
SKU Code |
| - |
Article Code |
| - |
Price |
| If |
Stock Level |
| This field can be changed using the |
Status |
| IF |
EAN Code |
| - |
Assembled |
| IF |
Unlimited Stock | Not explicitly mapped | - |
β οΈ Filter Rule: We only sync where Product.Type = Product. However, if the is_Storable field exists in your Odoo version, we will also sync items where Product.Type = Consu AND Product.is_Storable = true.
2. Product Compositions
Source: mrp.bom_lines (Requires the MRP / Production module in Odoo).
Optiply | Odoo |
Composed Product ID |
|
Part Product ID |
|
Part Quantity |
|
Remote ID |
|
3. Suppliers
Optiply | Odoo |
Name |
|
Remote ID |
|
Emails |
|
4. Supplier Products
Optiply | Odoo | Logic / Notes |
Name |
| - |
Remote ID | Calculated |
|
Price |
| - |
SKU Code |
| - |
Status | Calculated |
|
Min Purchase Qty |
| - |
Delivery Time |
| - |
Supplier ID |
| Internal link. |
Product ID |
| Internal link. |
Preferred |
| Only synced if |
Cost Note: If both sync_purchase_price and average_purchase_price flags are true, we will sync the avg_cost.
5. Sell Orders (Standard)
β οΈ Limitation: We do not sync Order changes in any way. Order line changes, line deletions, or new lines added to existing Orders will not be updated in Optiply.
Optiply | Odoo | Notes |
Total Value |
| - |
Remote ID |
| - |
Placed Date |
| - |
Note: By default, we only pull orders with Status = sale. Change the pullAllOrders flag to pull all statuses.
6. Sell Order Lines (Standard):
Optiply | Odoo |
Product ID |
|
Quantity |
|
Subtotal Value |
|
Remote ID |
|
Sell Order ID |
|
7. Sell Orders (Point of Sale - POS)
Requires map_sellOrdersPOS flag to be true.
β οΈ Limitation: Just like standard orders, we do not sync POS order changes in any way.
Optiply | Odoo |
Total Value |
|
Remote ID |
|
Placed Date |
|
8. Sell Order Lines (POS):
Optiply | Odoo |
Product ID |
|
Quantity |
|
Subtotal Value |
|
Remote ID |
|
Sell Order ID |
|
9. Buy Orders (Import: Odoo β Optiply)
Filter: Only syncs where state = "purchase" or "done".
Optiply | Odoo | Logic / Notes |
Supplier ID |
| - |
Placed Date |
| - |
Completed Date | Calculated |
|
Expected Delivery |
| - |
Total Value |
| - |
Remote ID |
| - |
10. Buy Order Lines (Import):
Optiply | Odoo |
Subtotal Value |
|
Quantity |
|
Remote ID |
|
Buy Order ID |
|
Product ID |
|
Expected Delivery |
|
11. Buy Orders (Export: Optiply β Odoo)
Optiply | Odoo |
Supplier Remote ID |
|
Buy Order ID |
|
Completed Date |
|
Expected Delivery |
|
12. Buy Order Lines (Export):
Optiply | Odoo | Notes |
Quantity |
| - |
Product Remote ID |
| - |
Note: The buyOrderLine.price is also exported by default via the export_BOLine_price flag.
13. Receipt Lines (Import: Odoo β Optiply)
Optiply | Odoo |
Quantity |
|
Occurred Date |
|
Remote ID |
|
β Frequently Asked Questions (FAQs)
Why are my Point of Sale (POS) orders missing?
By default, Optiply only syncs standard web or backend sales. To pull POS data, you must ask Support to enable the map_sellOrdersPOS flag on your account.
If a customer changes their order, will Optiply update the stock requirement?
No. Optiply does not sync post-creation order changes, line deletions, or line additions for either standard Sell Orders or POS Sell Orders.
Can I sync products that aren't strictly classified as "Products" in Odoo?
Yes. If your Odoo setup utilises the is_Storable field, Optiply will recognise and sync items where Product.Type = Consu as long as Product.is_Storable is true.
