Skip to main content

Odoo - Data Mapping & Synchronisation

A comprehensive technical guide to the Odoo integration with Optiply. Covers synchronisation frequencies, extensive configuration flags, and detailed field mappings for inventory, sales, POS, and purchasing data.

Written by Marc de Graaf
Updated over 2 weeks ago

πŸ”— 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: If true, we will sync product prices with taxes already included.

  • sync_purchase_price: Determines if we sync purchase prices for Supplier Products.

  • average_purchase_price: If true (and sync_purchase_price is also true), we sync the average cost (avg_cost) on Supplier Products.

  • pullAllOrders: If false, we only pull Sell Orders with the status "sale" (or "cancel" for deletions). If true, we pull all orders regardless of status.

  • map_preferred: If true, 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: If true, 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 the buyOrderLine.price when exporting Buy Orders to Odoo. Default: true (Note: This is required for Odoo v18+).

  • bo_completed_on_receipt: If true, 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

product.id

-

Name

product.name

The language is determined by the language flag.

SKU Code

product.default_code

-

Article Code

product.code

-

Price

product.price

If sell_price_with_taxes is true, we sync the tax_string.

Stock Level

stock.available_quantity

This field can be changed using the map_stockLevel flag.

Status

product.active

IF true β†’ enabled. Otherwise β†’ disabled.

EAN Code

product.product.barcode

-

Assembled

product.product.bom_count

IF bom_count > 0 β†’ true (Uses the production module).

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

mrp.bom.parent_product_tmpl_id

Part Product ID

mrp.bom.product_id

Part Quantity

mrp.bom.product_qty

Remote ID

mrp.bom.id

3. Suppliers

Optiply

Odoo

Name

suppliers.display_name

Remote ID

suppliers.ID

Emails

suppliers.email_normalized

4. Supplier Products

Optiply

Odoo

Logic / Notes

Name

product.name

-

Remote ID

Calculated

optiplySupplierId + _ + optiplyProductId

Price

product.supplierinfo.price

-

SKU Code

product.supplierinfo.product_code

-

Status

Calculated

enabled IF start_date < now AND end_date > now.

Min Purchase Qty

product.supplierinfo.min_qty

-

Delivery Time

product.supplierinfo.delay

-

Supplier ID

optiplySupplierId

Internal link.

Product ID

optiplyProductId

Internal link.

Preferred

product.supplier_id

Only synced if map_preferred flag is true.

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

sale.order.amount_untaxed

-

Remote ID

sale.order.id

-

Placed Date

sale.order.date_order

-

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

sale.order.line.product_id

Quantity

sale.order.line.product_uom_qty

Subtotal Value

sale.order.line.price_subtotal

Remote ID

sale.order.line.id

Sell Order ID

sale.order.line.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

pos_order.amount_total

Remote ID

pos_order.id

Placed Date

pos_order.date_order

8. Sell Order Lines (POS):

Optiply

Odoo

Product ID

pos_order_line.product_uom_id

Quantity

pos_order_line.qty

Subtotal Value

pos_order_line.price_subtotal_incl

Remote ID

pos_order_line.id

Sell Order ID

pos_order_line.order_id

9. Buy Orders (Import: Odoo β†’ Optiply)

Filter: Only syncs where state = "purchase" or "done".

Optiply

Odoo

Logic / Notes

Supplier ID

purchase.order.partner_id

-

Placed Date

purchase.order.date_order

-

Completed Date

Calculated

date.now() when status = "done" or "closed".

Expected Delivery

purchase.order.date_planned

-

Total Value

purchase.order.amount_total

-

Remote ID

purchase.order.id

-

10. Buy Order Lines (Import):

Optiply

Odoo

Subtotal Value

purchase.order.line.price_subtotal

Quantity

purchase.order.line.product_qty

Remote ID

purchase.order.line.id

Buy Order ID

purchase.order.line.order_id

Product ID

purchase.order.line.product_id

Expected Delivery

date_planned

11. Buy Orders (Export: Optiply β†’ Odoo)

Optiply

Odoo

Supplier Remote ID

partner_id

Buy Order ID

name

Completed Date

effective_date

Expected Delivery

date_planned

12. Buy Order Lines (Export):

Optiply

Odoo

Notes

Quantity

product_qty

-

Product Remote ID

productId

-

Note: The buyOrderLine.price is also exported by default via the export_BOLine_price flag.

13. Receipt Lines (Import: Odoo β†’ Optiply)

Optiply

Odoo

Quantity

purchase.order.line.product_qty

Occurred Date

purchase.order.line.date

Remote ID

purchase.order.line.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.

Did this answer your question?