Starshipit shipping

# Starshipit shipping

Starshipit is a shipping service operator that facilitates the integration of Australasian
shipping couriers with Odoo. Once integrated, users can create shipping methods that will
automatically get rates from specific couriers (such as Australia Post, NZ Post, DHL,â¦)
based on predefined conditions.
- Automatically calculate shipping
Automatically calculate shipping
- Integrate other third-party couriers
Integrate other third-party couriers

## Setup in Starshipit

### Create an account and activate couriers

To get started, go to Starshipitâs platform to configure the account
and generate the connector credentials. Log in with the Starshipit account, or create a new one if
needed.

### Pickup address configuration

Once logged into the Starshipit account, navigate to Settings â£ Pickup address ,
and fill in the Pickup address . Ensure this field matches the warehouse address.

### Couriers configuration

To integrate with third-party couriers, navigate to Settings â£ Couriers , and
select Couriers .
For details on integrating with different couriers, refer to Starshipitâs support center .

### Checkout rates

To configure shipping rate calculations, navigate to Settings â£ Checkout rates .
The selected delivery costs are automatically applied in Odoo when calculating shipping costs.

### Starshipit API key

Configure shipping rules to assign the correct shipping methods to orders based on specific
conditions.
To create a rule, go to Settings â£ Rules and click Add a new rule .
While there are multiple ways to configure rules, it is recommended to set:
- Condition to Contains
Condition to Contains
- Value to the product code
Value to the product code
- Action to Set Courier & Product Code
Action to Set Courier & Product Code

### Finding Starshipit API credentials

In the Starshipit account, navigate to Settings â£ API in the side menu.
This page contains the API keys needed to connect to
Odoo.

## Setup in Odoo

### Install the Starshipit module

After the Starshipit account is set up, integrate it with the Odoo database. To do that, go to
Odooâs Apps module, search for the Starshipit Shipping module, and click Activate to install it.

### Configure a Starshipit delivery method

Once installed, activate the feature by going to Inventory â£ Configuration â£
Settings . Under the Shipping Connectors section, activate the Starshipit
Connector option.
After activating Starshipit Connector , click the Starshipit Shipping Methods link below the listed connector. Once on the Delivery Methods page, click Create .
Delivery Methods can also be accessed by going to Inventory â£
Configuration â£ Delivery â£ Delivery Methods .
Configure a Starshipit delivery method in Odoo by filling out the fields on the Delivery Methods form as
follows:
- Delivery Method : type Starshipit .
Delivery Method : type Starshipit .
`Starshipit`
- Provider : select Starshipit from the drop-down menu.
Provider : select Starshipit from the drop-down menu.
- Delivery Product : assign or create the delivery product that will appear on the sales
order line when the cost of shipping is computed. Note The fields discussed in this section are specific to configuring Starshipit. For more information
about the other fields, refer to Delivery methods .
Delivery Product : assign or create the delivery product that will appear on the sales
order line when the cost of shipping is computed.
The fields discussed in this section are specific to configuring Starshipit. For more information
about the other fields, refer to Delivery methods .
In the Starshipit Configuration tab, fill out these fields:
- Starshipit API Key : enter the API key obtained from Starshipit .
Starshipit API Key : enter the API key obtained from Starshipit .
- Starshipit Subscription Key : enter the subscription key obtained from the same place
as the API key .
Starshipit Subscription Key : enter the subscription key obtained from the same place
as the API key .
- Origin Address : Enter the address where products are shipped from. This field is
crucial for calculating shipping rates and generating shipping labels .
Origin Address : Enter the address where products are shipped from. This field is
crucial for calculating shipping rates and generating shipping labels .
- Default Package Type : Set a default package type to include the weight of the empty
package when automatically calculating shipping rates.
Default Package Type : Set a default package type to include the weight of the empty
package when automatically calculating shipping rates.
To set a default package type, the Packages feature must be enabled in Inventory â£ Configuration â£ Settings .
Click the (Save manually) icon at the top of the page to save the changes.
To load the newly configured shipping products, click Select a service linked to your
starshipit account at the bottom of the Starshipit Configuration tab, and a Choose Starshipit Shipping Service pop-up window appears. In the Delivery Service field, select the desired shipping service for deliveries and returns
from the drop-down menu.
The list of services shown during initial configuration may be incomplete. Starshipit determines
service availability based on shipment details such as the destination address and package
weight, which are not yet available at this stage. To select from the full list of services
available for a specific order, use the Get more delivery methods option directly
from the sales order. See Generate a label with Starshipit for details.
Click Confirm and the selected delivery service populates in the Shipping Method and Starshipit Service Code fields.
Sample of a Starshipit shipping product configured in Odoo:
`SendleDelivery`
`STANDARD-DROPOFF`
Starshipit does not provide test keys when a company tests the sending of a package in Odoo. This
means that if a package is created, the account may be charged.
Odoo has a built-in layer of protection against unwanted charges when using test environments.
Within a test environment, if a shipping method is used to create labels, then those labels are
immediately cancelled after creation â this occurs automatically. Please note that depending on
the shipping provider being used, the account might be charged for printing label, unless the
order is cancelled manually on the couriersâs portal.
Switch between the test and production environment by clicking the Environment smart
button at the top of the shipping method form.

### Generate a label with Starshipit

When creating a quotation in Odoo, add the Starshipit shipping method by clicking the Add
shipping button.
In the Add a shipping method pop-up window, select a Starshipit shipping method in the Shipping Method field.
If the desired service is not available, click Get more delivery methods . This sends the
actual order details (including the destination address, weight, and volume) to Starshipit, which
returns the complete list of services available for that specific shipment. A new Starshipit
delivery method is then created automatically and selected in the Shipping Method field.
Calculate the shipping rate by clicking Get rate .
Finally, click Add to include the cost of shipping to the sales order line, labeled as
the delivery product .
Automatically calculate shipping costs for Starshipit in both Odoo Sales and eCommerce applications.
Then, Validate the delivery. Shipping label documents are automatically generated in the
chatter, which includes the following:
- Shipping label(s) depending on the number of packages.
Shipping label(s) depending on the number of packages.
- Tracking number(s) if the selected courier supports it.
Tracking number(s) if the selected courier supports it.
- Return label(s) if the Starshipit connector is configured for returns.
Return label(s) if the Starshipit connector is configured for returns.
Package weight in Odoo is calculated by adding the weights of the products plus the empty package
saved in the database. Ensure the correct shipping option is selected, as the package weight is
not automatically verified.
Verify the destination address, as Starshipit checks it when the order is created.
Finally, some couriers may require other information, such as an email address or phone number.
Please ensure that all necessary information are set upon sending a shipping order.

### Returns

- Australia Post eParcel
Australia Post eParcel
- Couriers Please
- Aramex
- StarTrack
- DHL Express
- NZ Post Domestic
This can be done by clicking the Return smart button on the intended delivery order.
If the selected courier supports returns, the Print Return Label button will be
available.

### Cancellations

If a delivery order is cancelled in Odoo, it will be automatically archived in Starshipit.
However, the cancellation will not be sent to the courier itself, so make sure to log onto the
courierâs platform to handle the cancellation manually.

Setup in Starshipit
Create an account and activate couriers
Pickup address configuration
Couriers configuration
Checkout rates
Starshipit API key
Finding Starshipit API credentials
Setup in Odoo
Install the Starshipit module
Configure a Starshipit delivery method
Generate a label with Starshipit
Returns
Cancellations


Third-party shipping carriers

# Third-party shipping carriers

Users can link third-party shipping carriers to Odoo databases, in order to verify carriersâ
delivery to specific addresses, automatically calculate shipping costs , and generate shipping labels .
In Odoo, shipping carriers can be applied to a sales order (SO), invoice, or delivery order. For
tips on resolving common issues when configuring shipping connectors, skip to the Troubleshooting section.
- DHL integration
- Sendcloud integration
Sendcloud integration
- UPS integration
The following is a list of available shipping connectors in Odoo:
United States of America
Some European countries (see details below)
Australia and New Zealand
Other services from DHL are not supported.
Sendcloud currently supports shipping from Austria, Belgium, France, Germany, Italy, the
Netherlands, Spain, and the United Kingdom, and to any European country.

## Configuration

To ensure proper setup of a third-party shipping carrier with Odoo, follow these steps:
- Install the shipping connector .
Install the shipping connector .
- Set up delivery method .
Set up delivery method .
- Activate production environment .
Activate production environment .
- Configure warehouse .
Configure warehouse .
- Specify weight of products .
Specify weight of products .

### Install shipping connector

To install shipping connectors, go to Inventory app â£ Configuration â£ Settings .
Under the Shipping Connectors section, tick the third-party shipping carrierâs checkbox
to install it. Multiple third-party shipping connectors can be selected at once. Then, click Save .
Delivery methods can also be integrated with operations in the Sales , eCommerce , and Website apps. To install, refer to the install apps and modules documentation.

### Delivery method

To configure the API credentials, and activate the shipping carrier, begin by going to Inventory app â£ Configuration â£ Shipping Methods , and select the desired
delivery method.
The list often includes two delivery methods from the same Provider : one for
international shipping and one for domestic shipping.
Additional delivery methods can be created for specific purposes, such as packaging .
Configure delivery methods
Ensure the delivery method is published when it should be available on the Website app. To
publish a delivery method on the website, click the desired delivery method, then click the Unpublished smart button. Doing so changes that smart button to read: Published .
The Shipping Method page contains details about the provider, including:
- Shipping Method ( Required field ): the name of the delivery method (e.g. FedEx US , FedEx EU , etc.).
Shipping Method ( Required field ): the name of the delivery method (e.g. FedEx US , FedEx EU , etc.).
`FedExUS`
`FedExEU`
- Website : configure shipping methods for an eCommerce page that is connected to a
specific website in the database. Select the applicable website from the drop-down menu, or leave
it blank to apply the method to all web pages.
Website : configure shipping methods for an eCommerce page that is connected to a
specific website in the database. Select the applicable website from the drop-down menu, or leave
it blank to apply the method to all web pages.
- Provider ( Required field ): choose the third-party delivery service, like FedEx. Upon
choosing a provider, the Integration Level , Invoicing Policy and Insurance Percentage fields become available.
Provider ( Required field ): choose the third-party delivery service, like FedEx. Upon
choosing a provider, the Integration Level , Invoicing Policy and Insurance Percentage fields become available.
- Integration Level : choose Get Rate to simply get an estimated
shipment cost on an SO or invoice. Important Select Get Rate and Create Shipment to also generate shipping labels .
Integration Level : choose Get Rate to simply get an estimated
shipment cost on an SO or invoice.
Select Get Rate and Create Shipment to also generate shipping labels .
- Company : if the shipping method should apply to a specific company, select it from the
drop-down menu. Leave the field blank to apply the method to all companies.
Company : if the shipping method should apply to a specific company, select it from the
drop-down menu. Leave the field blank to apply the method to all companies.
- Delivery Product ( Required field ): the delivery charge name that is added to the SO or invoice.
Delivery Product ( Required field ): the delivery charge name that is added to the SO or invoice.
- Invoicing Policy : select and calculate an Estimated cost of shipping
directly from the shipping carrier. If the Real cost of shipping is wanted instead,
refer to Invoice real shipping costs document.
Invoicing Policy : select and calculate an Estimated cost of shipping
directly from the shipping carrier. If the Real cost of shipping is wanted instead,
refer to Invoice real shipping costs document.
- Margin on Rate : specify an additional percentage amount added to the base shipping
rate to cover extra costs, such as handling fees, packaging materials, exchange rates, etc.
Margin on Rate : specify an additional percentage amount added to the base shipping
rate to cover extra costs, such as handling fees, packaging materials, exchange rates, etc.
- Free if order amount is above : enables free shipping for orders surpassing a specified
amount entered in the corresponding Amount field.
Free if order amount is above : enables free shipping for orders surpassing a specified
amount entered in the corresponding Amount field.
- Insurance Percentage : specify a percentage amount of the shipping costs reimbursed to
the senders if the package is lost or stolen in transit.
Insurance Percentage : specify a percentage amount of the shipping costs reimbursed to
the senders if the package is lost or stolen in transit.
Shipping Method configuration page for FedEx US .
`FedExUS`
In the Configuration tab, fill out the API credential fields (e.g. API key, password,
account number, etc.). Depending on the third-party shipping carrier chosen in the Provider field, the Configuration tab will contain different required
fields. For more details about configuring specific carriersâ credentials, refer to the following
documents:
- DHL credentials
- Sendcloud credentials
Sendcloud credentials
- UPS credentials

### Production environment

With the delivery method details configured, click the Test Environment smart button to
set it to Production Environment .
Setting the delivery method to Production creates real shipping labels, and users
are at risk of being charged through their carrier account (e.g. UPS, FedEx, etc.) before users charge customers for shipping. Verify all configurations are correct before launching the
delivery method to Production .

### Warehouse configuration

Ensure the warehouseâs Address (including ZIP code) and Phone number are
entered accurately. To do that, go to Inventory app â£ Configuration â£
Warehouses , and select the desired warehouse.
On the warehouse configuration page, open the warehouse contact page by clicking the Company field.
Verify that the Address and Phone number are correct, as they are required
for the shipping connector to work properly.

### Product weight

For the carrier integration to work properly, specify the weight of products by going to Inventory app â£ Products â£ Products , and selecting the desired product.
Then, switch to the Inventory tab, and define the Weight of the product in
the Logistics section.

## Apply third-party shipping carrier

Shipping carriers can be applied on a SO , invoice, or delivery order.
After configuring the third-party carrierâs delivery method in Odoo, create or navigate to a quotation
by going to Sales app â£ Orders â£ Quotations .

### Sales order

To assign a third-party shipping carrier, and get an estimated cost of shipping, begin by going to Sales app â£ Orders â£ Quotations . Create or select an existing quotation, and
add the cost of shipping through a third-party carrier to a quotation, by clicking the Add Shipping button in the bottom-right corner of the Order Lines tab.
In the resulting Add a shipping method pop-up window, select the intended carrier from
the Shipping Method drop-down menu. The Cost field is automatically filled
based on:
- the amount specified in the Total Order Weight field (if it is not provided, the sum
of product weights in the order is used)
the amount specified in the Total Order Weight field (if it is not provided, the sum
of product weights in the order is used)
- the distance between the warehouseâs source address and the customerâs address.
the distance between the warehouseâs source address and the customerâs address.
After selecting a third-party provider in the Shipping Method field, click Get Rate in the Add a shipping method pop-up window to get the estimated
cost through the shipping connector. Then, click the Add button to add the delivery
charge to the SO or invoice.
Charge customers for shipping after product delivery

### Delivery order

For users making shipments without installing the Sales app, assign the shipping carrier to the
delivery order, by first going to the Inventory app. Then, from the Inventory Overview dashboard, select the Delivery Orders operation type, and
choose the desired delivery order that is not already marked as Done or Cancelled .
In the Additional info tab, set the Carrier field to the desired third-party
shipping carrier. When the delivery method is set to production mode , a Tracking Reference is
provided.
Generate shipping labels

## Troubleshooting

Since shipping connectors can sometimes be complex to set up, here are some checks to try when
things are not working as expected:
- Ensure the warehouse information (e.g., address and phone number) in Odoo is correct and matches the records saved in the
shipping providerâs website.
Ensure the warehouse information (e.g., address and phone number) in Odoo is correct and matches the records saved in the
shipping providerâs website.
- Verify that the package type and parameters
are valid for the shipping carrier. To check, ensure the shipment can be directly created on the
shipping carrierâs website.
Verify that the package type and parameters
are valid for the shipping carrier. To check, ensure the shipment can be directly created on the
shipping carrierâs website.
- When encountering a price mismatch between Odooâs estimated cost and the providerâs charge, first
ensure the delivery method is set to production environment . Then, create the shipment in both the carrierâs website and Odoo, and verify the prices are the
same across Odoo, the shipping provider, and in the debug logs . Example When checking for a price mismatch in the debug logs, if the request says the package weighs
six kilograms, but the response from FedEx says the package weights seven kilograms, it
concludes that the issue is on FedExâs side.
When encountering a price mismatch between Odooâs estimated cost and the providerâs charge, first
ensure the delivery method is set to production environment .
Then, create the shipment in both the carrierâs website and Odoo, and verify the prices are the
same across Odoo, the shipping provider, and in the debug logs .
When checking for a price mismatch in the debug logs, if the request says the package weighs
six kilograms, but the response from FedEx says the package weights seven kilograms, it
concludes that the issue is on FedExâs side.

### Debug log

Track shipping data inconsistencies by activating debug logging. To do that, go to the delivery
methodâs configuration page ( Inventory app â£ Configuration â£ Shipping
Method ), and select the desired shipping method. Click the No Debugging smart button to
activate Debug Requests .
With Debug Requests activated, each time the shipping connector is used to estimate the
cost of shipping, records are saved in the Logging report. To access the report, turn on developer mode , and go to Settings app â£ Technical â£
Database Structure section â£ Logging .
Logs are created for a shipping method each time the Get Rate button is clicked on SOs and invoices, and when a customer adds the shipping carrier to their order through the Website app.
Click the HTTP request line item to open a detailed page, and verify the correct information is
sent from Odoo to the shipping carrier. In the HTTP response , verify that the same information is
received.

Configuration
Install shipping connector
Delivery method
Production environment
Warehouse configuration
Product weight
Apply third-party shipping carrier
Sales order
Delivery order
Troubleshooting
Debug log


UPS integration

# UPS integration

UPS is a shipping carrier service that integrates with Odoo to coordinate shipping to all regions.
Once integrated, users can create shipping methods that estimate shipping costs and generate
labels .
Third-party shipping carriers
To set up the UPS shipping connector in Odoo, complete these steps:
- Create a UPS account to get account number
Create a UPS account to get account number
- Create UPS developer account to get client credentials
Create UPS developer account to get client credentials
- Set up shipping method in Odoo
Set up shipping method in Odoo
When configuring a shipping method to use UPS, make sure the Provider is set to UPS , NOT UPS Legacy .
If shipping methods currently exist with the Provider set to UPS Legacy ,
archive them, and create new shipping methods using UPS , instead.

## UPS account setup

To get started, go to the UPS website and click the Log In button in the top-right corner to log in or create a UPS account.
After logging in, click the profile icon in the top-right corner, and select Accounts and
Payment from the drop-down menu.
On the Accounts and Payment Options page, two accounts must be configured: an Odoo
shipment account and a payment card.

### Shipping account

To add an Odoo shipment account, select Add New Account from the Add a
Payment Method drop-down menu, and click Add .
On the next screen, labeled Open a Shipping Account , complete the forms to configure the
shipping account type (e.g. Business ) and if any regulated items will be shipped. Then
finish the remaining three steps in the wizard to Add Addresses , Verify
Identity , and Explore Discounts , with the last option being optional.
When complete, submit the application on the last page of the wizard to finish setting up the
shipping account.

### Get account number

With the shipping account set up, the UPS Account Number becomes available. To access
it, navigate to Profile â£ Accounts and Payment and refer to the shipping
accountâs Number field.

### Payment card

Navigate back to the Accounts and Payments page and select the Add Payment
Card option from the Add a Payment Method drop-down menu. Then, complete the form to
add the credit card information.

## UPS developer account setup

Next, log into the UPS developer account to generate the developer
key. To begin, click the profile icon in the top-right corner, and choose the Apps option from the drop-down menu.

### Add app

Then, click the Add Apps button to begin filling out the form. In the I need
API credentials because * field, select I want to integrate UPS technology into my
business .
Under the next label, Choose an account to associate with these credentials. * , select Add existing account from the drop-down menu in the corresponding field, and then select
the account number linked to the UPS
account created in the previous step.
Click Next , and proceed to the Add App form, and fill out the fields:
- App Name : Type the name to identify the app by.
App Name : Type the name to identify the app by.
- Callback URL : Type the URL of the Odoo database, in the format: https://databaseName.odoo.com . Do not include www in the URL.
Callback URL : Type the URL of the Odoo database, in the format: https://databaseName.odoo.com . Do not include www in the URL.
`https://databaseName.odoo.com`
`www`
In the Add Products section on the right, search for and click the + (plus) icon to add the following products to the app:
- Authorization (O Auth) : Used to generate the authorization token to request
information from the UPS API.
Authorization (O Auth) : Used to generate the authorization token to request
information from the UPS API.
- Address Validation : Validates addresses at the street level in the United States and
Puerto Rico.
Address Validation : Validates addresses at the street level in the United States and
Puerto Rico.
- Locator : Enables search for UPS shipping locations based on type and available
services.
Locator : Enables search for UPS shipping locations based on type and available
services.
- Paperless Documents : Enables the upload of document images to link to shipments.
Paperless Documents : Enables the upload of document images to link to shipments.
- Shipping : Enables UPS shipping services, such as preparing packages for shipment,
managing returns, and cancelling scheduled shipments.
Shipping : Enables UPS shipping services, such as preparing packages for shipment,
managing returns, and cancelling scheduled shipments.
- Rating : Compare delivery services and shipping rates.
Rating : Compare delivery services and shipping rates.
Finally, click Save and accept UPSâs terms and conditions.

### Client ID and Client Secret

With the new app created, in the Profile â£ My Apps â£ App page, select the app
from the Credentials section to view the UPS credentials.
In the Credentials section, copy the Client ID and Client Secret key.

## Setup in Odoo

With the credentials obtained, configure the UPS shipping method in Odoo by going to Inventory app â£ Configuration â£ Shipping Methods .
On the Shipping Methods page, click the New button.
For existing UPS shipping methods whose Provider is UPS Legacy , archive
it and create a new shipping method using UPS .
In the Provider field, select UPS . Doing so reveals the UPS
Configuration tab, where various fields must be entered. For details instructions on configuring
the other fields on the shipping method, refer to the Configure third-party carrier documentation.
In the UPS Configuration tab, complete the following fields:
- UPS Account Number : ( required ) Get the account number from the UPS portal.
UPS Account Number : ( required ) Get the account number from the UPS portal.
- UPS Client ID : ( required ) Get the Client ID from the UPS developer website.
UPS Client ID : ( required ) Get the Client ID from the UPS developer website.
- UPS Client Secret : ( required ) Get the Client Secret key from the UPS developer website.
UPS Client Secret : ( required ) Get the Client Secret key from the UPS developer website.
- UPS Service Type : Select from the drop-down menu the type of shipping service.
UPS Service Type : Select from the drop-down menu the type of shipping service.
- UPS Package Type : ( required ) Select from the drop-down menu the package type that is supported for the shipping service.
UPS Package Type : ( required ) Select from the drop-down menu the package type that is supported for the shipping service.
- Package Weight Unit : The unit of measure for the package weight.
Package Weight Unit : The unit of measure for the package weight.
- Package Size Unit : The unit of measure for the package dimensions.
Package Size Unit : The unit of measure for the package dimensions.
- Label Format : Choose the label format shipping labels: PDF , ZPL , EPL , or SPL .
Label Format : Choose the label format shipping labels: PDF , ZPL , EPL , or SPL .
In the Options section, the following features are available:
- Bill My Account : Charge the userâs UPS account for shipping in the eCommerce app.
Bill My Account : Charge the userâs UPS account for shipping in the eCommerce app.
- Collect on Delivery : Collect payment from customers for shipping after the shipment is
delivered.
Collect on Delivery : Collect payment from customers for shipping after the shipment is
delivered.
- Generate Return Label : Print the return label for the order after the delivery order
is validated.
Generate Return Label : Print the return label for the order after the delivery order
is validated.
- Duties paid by : Select whether duties or other fees are charged to the Sender or Recipient of the order.
Duties paid by : Select whether duties or other fees are charged to the Sender or Recipient of the order.

UPS account setup
Shipping account
Get account number
Payment card
UPS developer account setup
Add app
Client ID and Client Secret
Setup in Odoo


Zebra label configuration

# Zebra label configuration

In Odoo, labels printed in the Zebra Programming Language (ZPL) file format are designed to fit a
four-by-six inch label. To resize (or reformat) text to fit a variety of ZPL label sizes, navigate to the ZPL label view , and alter the ZPL code.
When customizing code in Odoo, please note that upgrading the database to newer versions may
break custom ZPL code. Customers are responsible for maintaining their custom code .
Refer to the following sections for explanations, and example code, for frequently requested Zebra
label customizations.
- Adjust margins
- Enlarge/minimize barcodes
Enlarge/minimize barcodes
- Rotate elements

## Navigate to ZPL label view

To begin customizing a Zebra label in Odoo, turn on developer mode , and on
the main Odoo dashboard, type Reports . From the search results that appear in the resulting pop-up
window, choose Settings / Technical / Reporting / Reports to open the Reports page.
`Reports`
To manually navigate to the Reports page, go to Settings app â£
Technical â£ Reporting: Reports .
On the Reports page, in the Searchâ¦ bar, type ZPL , and hit Enter .
Upon doing so, Odoo presents a list of available Zebra labels in Odoo. Select the desired Zebra
label from the list to modify it on a separate page.
`ZPL`
Printable ZPL labels in Odoo:
- lot/serial number
- operation type
- package barcode
- product label
- product packaging
- finished product (Odoo Manufacturing app required)
finished product (Odoo Manufacturing app required)
Next, click the Qweb Views smart button, and choose the desired label view .
Lot and Serial Number (ZPL) report, highlighting the Qweb smart button.
On the resulting view form, go to the Architecture tab to view the ZPL code.
To ensure the customization is not overwritten during an update, click the (bug) icon on the view page. Then, select the View Metadata option from
the resulting drop-down menu, in order to open the View Metadata pop-up window. Then,
ensure the No Update field is set to true (change) . Click Ok to exit the View Metadata pop-up window.

## Adjust margin

Text gets cut off from standard ZPL labels printed in Odoo when the line exceeds fifty-five
characters. To fit long product names, or lot numbers, on a single line, adjust the margin.
To begin, navigate to the ZPL code of the label in
the Architecture tab. In the ZPL code for product labels, look for the ^FT command,
which specifies where to start placing the text, or graphic element, on the label. The two numbers
immediately following ^FT define the x-coordinate and y-coordinate in dots ( similar to
pixels for printers ) from the left and top margins.
`^FT`
`^FT`
When customizing lot/serial number labels, look for the ^FO command, instead of ^FT .
`^FO`
`^FT`
The following is an example where the productâs name gets cut off with Odooâs default ZPL formatting. In the Fixed tab, the x-coordinate of the starting position of the label is
changed from ^FT100,80 to ^FT0,80 , to fit the entire name.
`^FT100,80`
`^FT0,80`

## Resize barcode

To adjust the size of the barcode to scale, begin by navigating to the ZPL code of the label in the Architecture tab. Look for the ^FO command (typically in the third line), which is the starting point of the margin for the barcode.
`^FO`
The ^BY command configures barcode size, and takes three numbers: bar width, width of wide bars
relative to narrow bars, and bar height. By default, ZPL code in Odoo uses ^BY3 , setting the bar
width to three dots, a typical size that is easy for barcode scanners to read.
`^BY`
`^BY3`
To shrink the barcode to scale, ^BY3 is reduced to ^BY2 .
`^BY3`
`^BY2`

## Rotate elements

To rotate elements in ZPL , begin by navigating to the ZPL code of the label in the Architecture tab.
The ^BC commandâs first parameter ( information that affects the behavior of the command )
defines the rotation of an item, which can be:
`^BC`
- N : display normally
`N`
- R : rotate 90 degrees
R : rotate 90 degrees
`R`
- I : rotate 180 degrees
I : rotate 180 degrees
`I`
- B : rotate 270 degrees
B : rotate 270 degrees
`B`
To rotate the barcode, ^BCN is changed to ^BCB .
`^BCN`
`^BCB`

Navigate to ZPL label view
Adjust margin
Resize barcode
Rotate elements


Inventory management

# Inventory management

In the Odoo Inventory app, warehouses handle the broader
organization and distribution of stock across different physical sites, while locations provide a more detailed breakdown within each warehouse for
efficient item management.
This document serves as an introduction to the terminology and concepts necessary to master Inventory . For specific instructions and examples of how things work, refer to individual
documentation pages.
Odoo Tutorials: Warehouses & Locations

## Warehouses

Warehouses represent a physical place, with a physical
address, where a companyâs items are stored.
Configure routes in a warehouse to
control how products move to customers, from vendors, within the warehouse, or between
warehouses .

## Locations

Locations refer to specific areas within a warehouse,
such as shelves, floors, or aisles. These are sub-divisions within a warehouse, and are unique to
that warehouse. Users can create and manage numerous locations within a single warehouse to organize
inventory more precisely.
- Locations
- Inventory adjustments
Inventory adjustments
- Cycle counts
- Scrap inventory

### Location types

Location types in Odoo help categorize and manage where products are, and what actions need to be
taken with them. By default, on the Inventory app â£ Configuration â£ Locations page, only internal locations are displayed.
To view the seven location types in Odoo, select any location, and in the Location Type field, there are:
- Vendor Location : defines an area where products purchased from vendors originate.
Items here are not in stock.
Vendor Location : defines an area where products purchased from vendors originate.
Items here are not in stock.
- View : used to organize and structure the warehouse hierarchy. For example, the view
location WH (short for warehouse) groups all internal locations, such as Stock , receiving
docks, quality checkpoints, and packing areas to show they all belong to the same warehouse. Important View locations should not contain products, but it is possible to move them there.
View : used to organize and structure the warehouse hierarchy. For example, the view
location WH (short for warehouse) groups all internal locations, such as Stock , receiving
docks, quality checkpoints, and packing areas to show they all belong to the same warehouse.
`WH`
`Stock`
View locations should not contain products, but it is possible to move them there.
- Internal Location : storage locations within the warehouse. Items stored in these
locations are accounted for in inventory valuation .
Internal Location : storage locations within the warehouse. Items stored in these
locations are accounted for in inventory valuation .
- Customer Location : where sold products are tracked; items here are no longer in stock.
Customer Location : where sold products are tracked; items here are no longer in stock.
- Inventory Loss : counterpart location to consume missing items or create stock,
accounting for discrepancies. In Odoo, examples of inventory loss locations are Inventory Adjustment , used to account for
discrepancies during an inventory count, and Scrap , which is where damaged goods are sent to
account for inventory losses. Example Virtual Locations/Inventory Adjustment is a location with the Inventory Loss type. The database shows 65 units in WH/Stock , but an inventory check reveals 60 . To
correct the quantity, five units are moved from WH/Stock to Virtual Locations/Inventory Adjustment .
Inventory Loss : counterpart location to consume missing items or create stock,
accounting for discrepancies.
In Odoo, examples of inventory loss locations are Inventory Adjustment , used to account for
discrepancies during an inventory count, and Scrap , which is where damaged goods are sent to
account for inventory losses.
Virtual Locations/Inventory Adjustment is a location with the Inventory Loss type. The database shows 65 units in WH/Stock , but an inventory check reveals 60 . To
correct the quantity, five units are moved from WH/Stock to Virtual Locations/Inventory Adjustment .
`VirtualLocations/InventoryAdjustment`
`65`
`WH/Stock`
`60`
`WH/Stock`
`VirtualLocations/InventoryAdjustment`
- Production : where raw materials are consumed, and manufactured products are created.
Production : where raw materials are consumed, and manufactured products are created.
- Transit Location : used for inter-company or inter-warehouse operations to track
products shipped between different addresses, such as Physical Locations/Inter-warehouse
transit .
Transit Location : used for inter-company or inter-warehouse operations to track
products shipped between different addresses, such as Physical Locations/Inter-warehouse
transit .
- Red : internal locations
Red : internal locations
- Blue : view locations
Blue : view locations
- Black : external locations (including inventory loss, vendor, and customer locations).
Black : external locations (including inventory loss, vendor, and customer locations).

### View locations in Odoo

Odoo databases include preconfigured view locations to organize the hierarchy of locations. These
provide helpful context, and distinguish between internal and external locations.
- Physical locations group internal locationsâsuch as secondary warehouses and subcontractor
sites. Because inventory valuation changes only when goods
move from internal to external locations, Odoo uses physical locations to track stock that is
off-site or in transit without affecting valuation.
Physical locations group internal locationsâsuch as secondary warehouses and subcontractor
sites. Because inventory valuation changes only when goods
move from internal to external locations, Odoo uses physical locations to track stock that is
off-site or in transit without affecting valuation.
When moving products in warehouses WH and WH2 , the items are not in either warehouse, but
still belong to the company. While in transit, they are placed in the Inter-warehouse transit location, a Transit Location type.
`WH`
`WH2`
`Inter-warehousetransit`
This location is under the view location, Physical Locations , indicating that Inter-warehouse transit is outside of a warehouse, but still part of the company. Doing so
does not affect the inventory valuation of the products.
`PhysicalLocations`
`Inter-warehousetransit`
- Partner locations group customer and vendor locations (external locations) together. Transfers
to these locations affect inventory valuation.
Partner locations group customer and vendor locations (external locations) together. Transfers
to these locations affect inventory valuation.
- Virtual locations are locations that do not exist physically, but it is where items that are
not in inventory can be placed. These can be items that are no longer in inventory due to loss, or
other factors.
Virtual locations are locations that do not exist physically, but it is where items that are
not in inventory can be placed. These can be items that are no longer in inventory due to loss, or
other factors.

Warehouses
Locations
Location types
View locations in Odoo


Inventory adjustments

# Inventory adjustments

In any warehouse management system, the recorded inventory counts in the database might not always
match the actual inventory counts in the warehouse. Discrepancy between counts can be due to
damage, human error, theft, or other factors. As such, inventory adjustments must be made to
reconcile the differences, and ensure that the recorded counts in the database match the actual
counts in the warehouse.

## Inventory Adjustments page

To view the Inventory Adjustments page, navigate to Inventory app â£
Operations â£ Physical Inventory .
The Inventory Adjustments page lists all products that are currently in stock.
Only products with a quantity greater than zero are listed on the Inventory
Adjustments page. To view product lines with zero current quantity, go to Inventory app â£ Reporting â£ Stock .
For each product line, the following information is listed:
- Location : the specific location in the warehouse where a product is stored. This
column is only visible if Storage Locations are enabled.
Location : the specific location in the warehouse where a product is stored. This
column is only visible if Storage Locations are enabled.
- Favorite : identifies products that have been favorited.
Favorite : identifies products that have been favorited.
- Product : the product whose quantity is listed on the inventory adjustment line.
Product : the product whose quantity is listed on the inventory adjustment line.
- Lot/Serial Number : the tracking identifier assigned to the specific product listed. It
can contain letters, numbers, or a combination of both.
Lot/Serial Number : the tracking identifier assigned to the specific product listed. It
can contain letters, numbers, or a combination of both.
If a specific product has a quantity of more than 1.00 in stock, and more than one serial
number, or lot number, assigned to it, each uniquely-identified product is displayed on its own
product line with its own lot/serial number, displayed under the Lot/Serial Number column.
`1.00`
- Expiration Date : the date on which the goods with this serial number are due to
expire.
Expiration Date : the date on which the goods with this serial number are due to
expire.
- Last Count Date : the last time the quantity was updated.
Last Count Date : the last time the quantity was updated.
- Package : the package containing the quantity listed.
Package : the package containing the quantity listed.
- On Hand Quantity : the quantity of the product currently recorded in the database.
On Hand Quantity : the quantity of the product currently recorded in the database.
- Unit : the unit of measure in which the product is measured. Unless otherwise
specified (e.g., in Pounds or Ounces ), the default UoM is Units .
Unit : the unit of measure in which the product is measured. Unless otherwise
specified (e.g., in Pounds or Ounces ), the default UoM is Units .
- Counted Quantity : the real quantity counted during an inventory count. This field is
left blank by default but can be changed, depending on if it matches the On Hand
Quantity or not.
Counted Quantity : the real quantity counted during an inventory count. This field is
left blank by default but can be changed, depending on if it matches the On Hand
Quantity or not.
- Difference : the difference between the On Hand Quantity and Counted Quantity , once an inventory adjustment is made. The difference is
automatically calculated after every inventory adjustment.
Difference : the difference between the On Hand Quantity and Counted Quantity , once an inventory adjustment is made. The difference is
automatically calculated after every inventory adjustment.
- Scheduled Date : the date at which a count should be made. If not otherwise specified,
this date will default to the 31st of December of the current year.
Scheduled Date : the date at which a count should be made. If not otherwise specified,
this date will default to the 31st of December of the current year.
- User : the person assigned to the count in the database. This can either be the person
physically counting the inventory, or applying the count in the database.
User : the person assigned to the count in the database. This can either be the person
physically counting the inventory, or applying the count in the database.
Additional columns are hidden by default. To reveal these columns, click the (adjust) icon to the far right of the formâs top row, and
reveal any desired column by ticking the checkbox next to that option.

### Create an inventory adjustment

To create a new inventory adjustment from the Inventory Adjustments page, click New . Doing so creates a new, blank inventory adjustment line at the bottom of the page.
Inventory adjustments can also be created from the Forecasted Report on an individual
product record. To open the report, navigate to a product record and click the Forecasted smart button. Then, at the top of the page, click Update
Quantity , then New .
On this blank inventory adjustment line, click the drop-down menu under the Product column, and select a product. If the selected product is tracked using either lots or serial
numbers, the desired lot or serial number needs to be chosen from the drop-down menu under the Lot/Serial Number column.
The inventory adjustment line can also be used to create or record lots and serial numbers.
Next, set the value in the Counted Quantity column to the quantity counted for that
product during the inventory adjustment process.
To the right of the Counted Quantity column, the Scheduled Date and User can also be changed via their respective drop-down menus. Changing the Scheduled Date changes the date that the inventory adjustment should be processed on,
and selecting a responsible User assigns a user to the specific inventory adjustment
for traceability purposes.
Once all changes have been made to the new inventory adjustment line, click away from the line.
Doing so saves the adjustment, and moves the line to the top of the page.
If the Counted Quantity is greater than the On Hand Quantity , the value in
the Difference column is green . If the Counted Quantity is less than the On Hand Quantity , the value in the Difference column is red . If the
quantities match, and have not been changed at all, no value appears in the Difference column.
At this stage, the count ( inventory adjustment ) is recorded, but not yet applied. This means
that the quantity on hand before the adjustment has not yet been updated to match the new, real
counted quantity.

### Apply adjusted count

Inventory adjustments can be completed in several ways. The first way is to click the Apply button on the line at the far right of the page. The second way is to tick the
checkbox on the far left of the line. Doing so reveals new button options at the top of the page,
one of which is an Apply button. Clicking this button instead causes an Inventory Adjustment pop-up window to appear.
From this pop-up menu, a reference or reason can be assigned to the inventory adjustment. By
default, the Inventory Reason field is pre-populated with todayâs date, the date the
adjustment is being made on, but can be changed to reflect whatever reference or reason is desired.
Once ready, click Apply to apply the inventory adjustment.
Applying an inventory adjustment simultaneously creates a stock move line (SML) in the Moves History report for traceability.

## Relocate products

Inventory adjustments can also be used to relocate products to different storage locations, or to
different packages. To relocate a product, tick the checkbox at the far left of the line for the
desired product. At the top of the page, click the Relocate button. Doing so opens a
pop-up.
On the resulting pop-up, enter the following information:
- To Location : the new location for the products.
To Location : the new location for the products.
- To Package : the new package for the products.
To Package : the new package for the products.
- Reason for relocation : the reason for the move.
Reason for relocation : the reason for the move.
Product relocations only work on internal locations. Products cannot be moved between
companies.
Only users with Administrator rights can perform product relocations.

## Set to zero

Inventory adjustments can also be used to clear inventory counts by setting the quantity to zero. To do this, tick
the checkbox at the far left of the line for the desired product. At the top of the page, click the Actions button to open a drop-down menu. Click Set to 0 .
Once this is complete, apply the adjusted count.

## Count products

Counting products is a recurring activity in a warehouse. Once a count is complete, go to Inventory app â£ Operations â£ Physical Inventory to update the Counted Quantity column for each product line.
On each product line, identify whether the value in the On Hand Quantity column recorded
in the database matches the newly-counted value. If the recorded value and the counted value do
match, click the Set icon at the far right of the product line.
Doing so copies the value from the On Hand Quantity column over to the Counted Quantity column, and sets the value of the Difference column to 0.00 . Subsequently, once applied, an inventory move with 0.00 Quantity Done is
recorded in the productâs inventory adjustment history.
`0.00`
`0.00`
If the newly-counted value for a given product does not match the value in the On
Hand Quantity recorded in the database, instead of clicking the Set icon, record the real value in the field in the Counted Quantity column.
To do so, click the field in the Counted Quantity column on the specific inventory
adjustment line for the product whose count is being changed. This automatically assigns a Counted Quantity of 0.00 .
`0.00`
To change this value, type in a new value that matches the real, newly-counted value. Then, click
away from the line. Doing so saves the adjustment, and automatically adjusts the value in the Difference column.
If the Counted Quantity is greater than the On Hand Quantity , the value in
the Difference column is green . If the Counted Quantity is less than the On Hand Quantity , the value in the Difference column is red . If the
quantities match, and have not been changed at all, no value appears in the Difference column.
Subsequently, once applied, a move with the difference between the On Hand Quantity and
the Counted Quantity is recorded in the productâs inventory adjustment history.
The Actions menu appears when one or more productsâ checkboxes are selected. The Actions menu includes the option to Set to quantity on hand , which sets the
selected productsâ Counted Quantity to the On Hand Quantity , and Set to 0 , which sets the selected productsâ Counted Quantity to zero.
Sometimes a count occurs, but cannot be applied in the database right away. In the time between
the actual count and applying the inventory adjustment, product moves can occur. In that case,
the on-hand quantity in the database can change and no longer be consistent with the counted
quantity. As an extra precaution, Odoo asks for confirmation before applying the inventory
adjustment.

## Revert an inventory adjustment

To revert the changes made in an inventory adjustment, navigate to Inventory â£
Reporting â£ Moves History .
Tick the checkbox at the far left of the line for the desired product. At the top of the page, click
the Actions button to open a drop-down menu, and click Revert
Inventory Adjustment .
After an inventory adjustment is reverted, the line is not removed from the Moves
History report. Instead, an additional line is added, this time with the word [reverted] added
to the Reference column.
`[reverted]`

## Change inventory count frequency

By default, the scheduled date for inventory adjustments are always scheduled for the 31st of December of the
current year. However, for some companies, it is crucial that they have an accurate inventory count
at all times. In such cases, the default scheduled date can be modified.
To modify the default scheduled date, go to Inventory app â£ Configuration â£
Settings . Then, in the Operations section, locate the Annual Inventory Day
and Month setting, which includes a drop-down menu that is set to 31 December by default.
`31December`
To change the day, click the 31 , enter a number from 1-31 , depending on the desired month of the
year.
`31`
`1-31`
Then, to change the month, click December to reveal the drop-down menu, and select the
desired month.
Once all desired changes have been made, click Save to save all changes.

### Plan big inventory counts

To plan big inventory counts, such as a full count of everything currently in stock, first navigate
to Inventory app â£ Operations â£ Physical Inventory .
Then, select the desired products to be counted by ticking the checkbox on the far left of each
product line.
To request a count of all products currently in stock, tick the checkbox at the top of the
table, in the header row next to the Location label. This selects all product
lines.
Once all desired products have been selected, click the Request a Count button at the
top of the page. Doing so opens the Request a Count pop-up window, where the following
information can be filled:
- Inventory Date : the planned date of the count.
Inventory Date : the planned date of the count.
- User : the user responsible for the count.
User : the user responsible for the count.
- Accounting Date : the date at which the inventory adjustment will be accounted.
Accounting Date : the date at which the inventory adjustment will be accounted.
- Count : to leave the on-hand quantity of each product line blank, select Leave Empty . To pre-fill the on-hand quantity of each product line with the current
value recorded in the database, select Set Current Value .
Count : to leave the on-hand quantity of each product line blank, select Leave Empty . To pre-fill the on-hand quantity of each product line with the current
value recorded in the database, select Set Current Value .
The Leave Empty option forces the employee conducting the audit to manually type in
the number they counted, while the Set Current Value option only requires the
employee to verify the counted quantity and click Apply .
Finally, once ready, click Confirm to request the count.
In the Odoo Barcode app, users can only view inventory counts that are assigned to them ,
and are scheduled for today or earlier .
Sometimes a count occurs, but cannot be applied in the database right away. In the time between
the actual count and applying the inventory adjustment, product moves can occur. In that case,
the on-hand quantity in the database can change and no longer be consistent with the counted
quantity. As an extra precaution, Odoo asks for confirmation before applying the inventory
adjustment.

## Adjustment history

Details regarding inventory adjustment can be viewed by clicking the History icon.
The user who performed the count is listed in parenthesis in the Reference field, while
the user who applied the count is listed in the Done By .

### Inventory audit

An inventory audit can be accessed from the Inventory Adjustment page. This audit
includes an inventory record both before and after a count is completed, to track what changed.
On the Inventory Adjustment page, tick the checkbox at the top-left of the page to
select all of the lines. Then click the Request a Count button. On the pop-up, set Count to Set Current Value , then click Confirm .
After returning to the Inventory Adjustment page, select all of the lines again. Click Print â£ Count Sheet . The Count Sheet exports in PDF form.

Inventory Adjustments page
Create an inventory adjustment
Apply adjusted count
Relocate products
Set to zero
Count products
Revert an inventory adjustment
Change inventory count frequency
Plan big inventory counts
Adjustment history
Inventory audit


Cycle counts

# Cycle counts

For most companies, warehouse stock only needs to be counted once a year. This is why, by default,
the scheduled date for the next inventory count is set for the 31st of December of the current year.
However, for some businesses, maintaining an accurate inventory count is crucial. These companies
use cycle counts to keep critical stock levels accurate. Cycle counting is a method by which
companies count their inventory more often in certain locations to ensure that their physical
inventory counts match their inventory records.

## Configuration

In Odoo, cycle counts are performed by location. Therefore, the Storage Locations feature needs to
be enabled before performing a cycle count.
To enable this feature, navigate to Inventory app â£ Configuration â£ Settings ,
and scroll down to the Warehouse section. Then, select the checkbox next to Storage
Locations , and click Save .

## Counting inventory at a set frequency

After the Storage Locations feature is enabled and locations are created in the warehouse, the
inventory count frequency can be changed for specific locations, and counts can be conducted on
those locations.

### Setting a cycle count frequency

To view and edit locations, navigate to Inventory app â£ Configuration â£
Locations . This opens a Locations page listing every location currently created in the warehouse.
From this page, click a location to open its form.
Under the Cyclic Counting section, locate the Inventory Frequency field, which is set
to 0 by default (if this location has not been edited previously). In this field, change the value
to any number of days desired for the frequency of counts.
`0`
A location that needs an inventory count every 30 days should have the Inventory
Frequency value set to 30 .
`30`
Now, to ensure the scheduled cycle count appears as expected, perform the first cycle count . After inventory adjustments have been applied
to the products in this location, the next scheduled count date is automatically set based on the
value entered in the Inventory Frequency field.

### Performing a cycle count

To perform a cycle count for a specific location in the warehouse, navigate to Inventory app â£ Operations â£ Physical Inventory . This opens an Inventory
Adjustments page that lists all products currently in stock, with each product on its own line.
From this page, the Filters and Group By options (accessible by clicking in
the Search bar) can be used to select specific locations and perform inventory counts.
To select a specific location and view all products within that location, click in the Search bar. Then, in the Group By column, select Location .
All products are sorted into their storage locations on the Inventory Adjustments page, and a
cycle count can be performed for all products in that location.
In large warehouses with multiple locations and a high volume of products, it might be easier to
search for the desired location. To do this, from the Inventory Adjustments page, click in the Search bar.
Then, in the Filters column, click Add Custom Filter to open an Add
Custom Filter pop-up window.
In the first field, click the value and select Location from the list of options.
Select contains in the second field. In the third field, type in the name of the
location being searched for.
Click Add for that location to appear on the page.
When performing counts in the Barcode app, inventory adjustments are grouped by location by
default.

## Change full inventory count date

While cycle counts are typically performed at the location level, companies should conduct a full
inventory count once per year. In addition to keeping stock counts accurate, full inventory counts
ensure that accounting earnings and costs are recorded accurately. The scheduled date for full
inventory counts of all in-stock products in the warehouse can be manually changed to push it up
earlier than the listed date.
To modify the default scheduled date, go to Inventory app â£ Configuration â£
Settings . Then, in the Operations section, locate the Annual Inventory Day and Month setting, which includes a drop-down set to 31 December by default.
`31`
To change the day, click the 31 and select a day within the range 1-31 , depending on the desired
month of the year.
`31`
`1-31`
Then, to change the month, click December to open the drop-down menu and select the
desired month.
After all necessary changes have been made, click Save .
- Inventory adjustments
Inventory adjustments
- Locations

Configuration
Counting inventory at a set frequency
Setting a cycle count frequency
Performing a cycle count
Change full inventory count date


Product catalog

# Product catalog

The product catalog is a feature integrated with any Odoo app that allows users to add products or
components to an order. This includes the Inventory , Manufacturing , Sales , Purchase ,
and Repairs apps, among others.
The product catalog can be accessed from the first tab of a quotation, request for quotation (RfQ),
order, or bill of materials (BoM) form, and opens in a new page when selected. The catalog displays
products and components in a user-friendly, POS-style format, from which they can be selected and
added to forms.
The product catalog simplifies the creation of new sales orders (SOs), purchase orders (POs),
manufacturing orders (MOs), bill of materials (BoMs), and more, by providing a visual interface
through which products and components can be quickly selected.

## Use product catalog

To use the product catalog, begin by creating or opening a quotation, RfQ , order, or BoM to
which products or components can be added. For example, create a new sales quotation by navigating
to Sales app , and clicking New .
On the form (quotation, RfQ , order, BoM ), make sure the first tab on the bottom is selected.
Depending on the form being configured, this tab may be titled Order Lines , Components , Products , or Parts .
On the first blank line of the tab, click the Catalog link to open the catalog in a new
page.
The product catalog displays a card for each product added to Odoo. Each card displays a few key
details about the corresponding product:
- Product photo
- Product title
- Price or cost of the product, depending on whether it is bought, sold, or used as a
component
Price or cost of the product, depending on whether it is bought, sold, or used as a
component
- Reference code (e.g. DESK0005 )
Reference code (e.g. DESK0005 )
- On-hand quantity
- Variant attributes (e.g. Color: White )
Variant attributes (e.g. Color: White )
Products can be filtered using the search bar at the top of the page, or the sidebar on the left
side of the page.
To filter by product type, click the (down arrow) button on the
right side of the search bar to open the search menu. In the Filters section, select the Services filter to only show service products, or the Products filter to
only show physical products.
When creating or configuring a quotation or SO , specifically, an In the Order filter
appears in the Filters section of the search bar. Select this filter to only show
products that have already been added to the form.
In the sidebar on the left side of the page, select an option in the PRODUCT CATEGORY section to filter by product category, or an option in the ATTRIBUTES section to filter by variant attribute.
To add a product, click on the productâs card, or click the Add button in the bottom-right corner of the card. Doing so adds one unit of the product, which is
displayed in a field in the bottom-left corner of the card.
Once a product has been added, clicking the product card continues to add units of the product in
increments of one.
To adjust the quantity of the product added, click the (minus) button
to reduce the quantity by one, or the (plus) button to increase it by
one.
Alternatively, a specific quantity can be entered by selecting the field between the (minus) and (plus) buttons, and typing in
the desired quantity.
To remove a product from the order or BoM entirely, either click the Remove button in the bottom-right corner of the product card, or click the (minus) button until the quantity has been reduced to zero.
Once the desired quantity of each product has been added, return to the form by clicking the Back to [X] button at the top of the screen. This button differs depending on the type
of form being configured (quotation, BoM , etc.).
Products appear in the product catalog, and can be added to orders, even if there
are zero units of the product on hand. As a result, it is important to confirm the quantity of a
product being added to an order is actually available, or inventory inconsistencies may arise.


Scrap inventory

# Scrap inventory

Sometimes, products in a companyâs warehouse stock might be found to be damaged or defective, past
the point of being reparable. If it is not possible to repair the product, or return the product to
a vendor, it can be scrapped.
Odoo Inventory allows users to scrap inventory, designating goods or materials that are no longer
usable or sellable for disposal (or recycling).
Scrapping inventory in a database helps stock counts remain accurate, by removing scrapped products
from physical inventory, and placing it in a virtual scrap location ( Virtual Locations/Scrap ).
Virtual locations in Odoo are not real, physical spaces in a warehouse. Rather, they are
designated locations in a database that provide tracking of items that shouldnât be counted in a
physical inventory.
For more information about virtual locations, see the documentation about the different types of location types .

## Scrap from stock

To create a new scrap order (SP) for an in-stock product, navigate to Inventory app
â£ Operations â£ Scrap , and click New . This opens a new SP form.
Click the drop-down menu in the Product field, and select the product that should be
scrapped from inventory. In the Quantity field, change the value to the quantity of the
product that should be scrapped (by default, this value is set to 1.00 ).
`1.00`
The Source Location defaults to the location where the product is currently stored. The Scrap Location defaults to the designated scrap location ( Virtual
Locations/Scrap ). Either of these locations can be changed by selecting a different location from
their respective drop-down menus.
If the scrapping is tied to a specific existing operation, specify the operation in the Source Document field.
The Company field displays the company whose warehouse this product belongs to. If a
replenishment rule is set up for the product being scrapped, and if the product should be
replenished, tick the checkbox for Replenish Quantities .
Once ready, click Validate to complete the new SP . Once validated, a Product Moves smart button appears at the top of the form. Click the smart button to
view the details of the scrap operation.
To view the all-time total quantities of scrapped items, navigate to Inventory
app â£ Configuration â£ Locations . Click the x (remove) button on the Internal filter in the Searchâ¦ bar, to display virtual locations.
Select the Virtual Locations/Scrap location. From the Scrap locationâs
form, click the Current Stock smart button, at the top of the form.
A list of all scrapped products, and their quantities, is displayed.

## Scrap from an existing operation

Scrap orders (SPs) can also be created from existing operations, such as receipts, delivery
orders, and internal transfers, before they are entered into, or removed from, stock for an
operation.
To scrap a product during an operation, navigate to the Inventory app . From the Inventory Overview , click the # To Process button on an operationâs task
card (i.e. the Receipts task card).
Then, select an operation to process from the resulting list of existing orders. Doing so opens that
operationâs form.
Click the (cog) icon, and select Scrap from the resulting
drop-down menu. This opens a Scrap Products pop-up window.
From this pop-up window, click the drop-down menu in the Product field, and select the
products from the operation that should be scrapped. Adjust the value in the Quantity field, if necessary.
If the Product selected is tracked using a lot or serial number, a Lot/Serial field appears. Specify the tracking number in that field.
The Source Location and Scrap Location can be changed, if needed. If a
replenishment rule is set up for the product being scrapped, and if the product should be
replenished, tick the checkbox for Replenish Quantities .
Once ready, click Scrap Products . A Scraps smart button appears at the top
of the operation form. Click this smart button to view the details of all scrap orders created from
this specific operation.

Scrap from stock
Scrap from an existing operation


Locations

# Locations

A location is a specific space within a warehouse. This can be a shelf, room, aisle, etc.

## Configuration

To create specific storage locations, enable the Storage Locations feature by going to Inventory app â£ Configuration â£ Settings . In the Warehouses section, tick the Storage Locations checkbox. Then, click Save .
Typically, the Storage Locations feature is used with Multi-Step Routes , which controls how products move between
locations.

## Create new location

After enabling Storage Locations , go to Inventory app â£ Configuration â£
Locations .
On this page, click New . The new location form can then be configured as follows:
- Location Name : recognizable name of the location.
Location Name : recognizable name of the location.
- Parent Location : the location within which the new location exists. After the location
is created, it is listed on the Locations page using a location hierarchy , to
describe how a specific location fits within larger areas of the warehouse. Example In WH/Stock/Zone A/Refrigerator 1 , âRefrigerator 1â is the location name, âZone Aâ is the
parent location, and everything before it is the path showing where this spot is within the
warehouse.
Parent Location : the location within which the new location exists. After the location
is created, it is listed on the Locations page using a location hierarchy , to
describe how a specific location fits within larger areas of the warehouse.
In WH/Stock/Zone A/Refrigerator 1 , âRefrigerator 1â is the location name, âZone Aâ is the
parent location, and everything before it is the path showing where this spot is within the
warehouse.
`WH/Stock/ZoneA/Refrigerator1`

### Additional Information section

In addition to the required fields above, configure the following location fields to ensure the
location serves its intended purpose in the database:
- Location Type : from the drop-down menu, choose Vendor Location , View , Internal Location , Customer Location , Inventory Loss , Production , or Transit Location to categorize
the location. For details on each location type, refer to the Location Types section .
Location Type : from the drop-down menu, choose Vendor Location , View , Internal Location , Customer Location , Inventory Loss , Production , or Transit Location to categorize
the location. For details on each location type, refer to the Location Types section .
- Storage Category : only available with the Storage Categories feature enabled in Inventory app â£ Configuration â£ Settings .
Storage Category : only available with the Storage Categories feature enabled in Inventory app â£ Configuration â£ Settings .
- Company : the company the location belongs to.
Company : the company the location belongs to.
- Is a Scrap Location? : tick this checkbox to allow for scrapped/damaged goods to be
stored in this location.
Is a Scrap Location? : tick this checkbox to allow for scrapped/damaged goods to be
stored in this location.
- Is a Return Location? : tick this checkbox to allow products to be returned to this
location.
Is a Return Location? : tick this checkbox to allow products to be returned to this
location.
- Barcode : used with the Barcode app, enter the barcode to identify actions at this location when scanned.
Barcode : used with the Barcode app, enter the barcode to identify actions at this location when scanned.
- Replenish Location : used for configuring routes , tick this checkbox to set the location as
a destination for receiving products from Buy , Manufacture , or other procurement routes,
ensuring products are correctly supplied to the warehouse.
Replenish Location : used for configuring routes , tick this checkbox to set the location as
a destination for receiving products from Buy , Manufacture , or other procurement routes,
ensuring products are correctly supplied to the warehouse.
Configure the remaining fields in the Additional Information section as follows:
- Company : the company whose warehouse the location is inside of. Leave this field blank
if this location is shared between companies.
Company : the company whose warehouse the location is inside of. Leave this field blank
if this location is shared between companies.
- Is a Scrap Location? : tick this checkbox to allow for scrapped/damaged goods to be
stored in this location.
Is a Scrap Location? : tick this checkbox to allow for scrapped/damaged goods to be
stored in this location.
- Is a Return Location? : tick this checkbox to allow products to be returned to this
location.
Is a Return Location? : tick this checkbox to allow products to be returned to this
location.
- Barcode : the barcode assigned to the location.
Barcode : the barcode assigned to the location.
- Replenish Location : tick this checkbox to get all quantities to replenish at this
location.
Replenish Location : tick this checkbox to get all quantities to replenish at this
location.
In the Cyclic Counting section, change the value in the Inventory Frequency
(Days) field from the default 0 , if necessary.
`0`
When different than 0 , the inventory count dates for products stored at this location are
automatically set at the defined frequency.
`0`
In the Logistics section, in the Removal Strategy field, click the drop-down
menu and select the removal strategy for how
items should be removed from this location.

### Cyclic Counting section

To schedule regular inventory counts at this location, set the Inventory Frequency
(Days) field to the desired interval. By default, it is set to 0 (no scheduled counts).
`0`
For example, setting this field to 30 , schedules a count every thirty days. For more specifics on
setting up and using this feature, refer to the Cycle Counts documentation .
`30`
The Last Effective Inventory field displays the date the last inventory count at this
location occurred. When scheduled inventory counts are enabled, the Next Expected
Inventory field displays the date of the next inventory count.
With inventory counts scheduled to occur every 30 days, and the Last Effective
Inventory count occurring on July 16, the Next Expected Inventory is August 15.
`30`

### Logistics section

In the Logistics section of the locations form, optionally select a Removal
Strategy to determine the order and priority of how products are picked from inventory. The options
are: First In First Out (FIFO) , Last In First Out (LIFO) , Closest
Location , and First Expiry First Out (FEFO) .

## Current stock at location

To view the current stock at a single location, go to Inventory app â£
Configuration â£ Locations , and select the desired location.
Next, click the Current Stock smart button to get a list of all products at the
location.
A list of current stock at Shelf 1 consists of 266 cabinets and 39 desks.
`Shelf1`
`266`
`39`

Configuration
Create new location
Additional Information section
Cyclic Counting section
Logistics section
Current stock at location


Warehouses

# Warehouses

In the Odoo Inventory app, a warehouse is a physical space with an address for storing items,
such as a storage facility, distribution center, or physical store.
Each database has a pre-configured warehouse with the companyâs address. Users can set up multiple
warehouses, and create stock moves between them.

## Configuration

To create or manage warehouses, go to Inventory app â£ Configuration â£
Warehouses .
Then, select an existing warehouse, or create a new one by clicking New . Doing so opens
the warehouse form, which contains the following fields:
- Warehouse ( required field ): the full name of the warehouse.
Warehouse ( required field ): the full name of the warehouse.
- Short Name ( required field ): the abbreviated code for the warehouse (maximum five
characters). The short name for the default warehouse in Odoo is WH . Important The Short Name appears on warehouse documents, so it is recommended to use a
memorable one, like âWH[first letters of location]â (e.g. WHA , WHB , etc.).
Short Name ( required field ): the abbreviated code for the warehouse (maximum five
characters). The short name for the default warehouse in Odoo is WH .
`WH`
The Short Name appears on warehouse documents, so it is recommended to use a
memorable one, like âWH[first letters of location]â (e.g. WHA , WHB , etc.).
`WHA`
`WHB`
- Address ( required field ): the address of the warehouse. To change the warehouse
address when creating two or more warehouses, hover over the field, and click the (right arrow) .
Address ( required field ): the address of the warehouse. To change the warehouse
address when creating two or more warehouses, hover over the field, and click the (right arrow) .
- Company ( required field ): the company that owns the warehouse; this can be set as
the company that owns the Odoo database, or the company of a customer or vendor.
Company ( required field ): the company that owns the warehouse; this can be set as
the company that owns the Odoo database, or the company of a customer or vendor.
- Intrastat region : region name required for companies in the European
Union.
Intrastat region : region name required for companies in the European
Union.
The options below are available only when the Multi-Step Routes feature is enabled in Inventory app â£ Configuration â£ Settings .
- Incoming Shipments : select the option to receive products from the warehouse in one , two , or three steps.
Incoming Shipments : select the option to receive products from the warehouse in one , two , or three steps.
- Outgoing Shipments : select the option to deliver products from the warehouse in one , two , or three steps.
Outgoing Shipments : select the option to deliver products from the warehouse in one , two , or three steps.
- Dropship Subcontractors : available with the Subcontracting feature enabled in Manufacturing app â£ Configuration â£ Settings . Tick this checkbox to purchase
components from vendors, and dropship them to subcontractors.
Dropship Subcontractors : available with the Subcontracting feature enabled in Manufacturing app â£ Configuration â£ Settings . Tick this checkbox to purchase
components from vendors, and dropship them to subcontractors.
- Resupply Subcontractors : available with the Subcontracting feature, tick this
checkbox to supply subcontractors with raw materials stored in this specific warehouse.
Resupply Subcontractors : available with the Subcontracting feature, tick this
checkbox to supply subcontractors with raw materials stored in this specific warehouse.
- Manufacture to Resupply : tick this checkbox to allow for items to be manufactured in
this warehouse.
Manufacture to Resupply : tick this checkbox to allow for items to be manufactured in
this warehouse.
- Manufacture : choose whether to manufacture products in one , two , or three steps .
Manufacture : choose whether to manufacture products in one , two , or three steps .
- Buy to Resupply : tick this checkbox to allow for purchased products to be delivered to
the warehouse.
Buy to Resupply : tick this checkbox to allow for purchased products to be delivered to
the warehouse.
- Resupply From : available with multiple warehouses in the database, select warehouses
to pull stock from to fulfill orders.
Resupply From : available with multiple warehouses in the database, select warehouses
to pull stock from to fulfill orders.
Use inventory adjustments to add stock to new warehouses


Replenishment

# Replenishment

In Odoo, stock can be replenished one of three ways: reordering rules , the make to order (MTO)
route, or using the master production schedule (MPS).
Each replenishment mechanism triggers the creation or suggestion of a purchase order (PO) or
manufacturing order (MO), with the best choice depending on the business process.

#### Reordering rules

Automatically suggest or generate POs or MOs when stock falls below a minimum level.

#### MTO

Automatically generate POs or MOs when sales orders are confirmed.

#### MPS

Manage long-term replenishment based on inputted sales forecasts, via a dashboard.

## Replenishment strategies

### Replenishment report and reordering rules

Reordering rules are rules that can be set up to maintain a minimum stock level. They are often
configured to support manufacturing or sales requirements. When a productâs stock falls at or below
the minimum level, Odoo generates (or suggests) a purchase or manufacturing order to replenish stock
to the maximum level.
When using automatic reordering rules, Odoo generates a new order. When using manual, Odoo suggests
orders on the replenishment report. For detailed guidance, refer to the replenishment report and reordering rules .
- Automatic reordering rules : Automatically create POs or MOs when stock falls below the minimum level. While this is convenient, it is less
flexible.
Automatic reordering rules : Automatically create POs or MOs when stock falls below the minimum level. While this is convenient, it is less
flexible.
- Manual reordering rules : Generate suggestions in
the replenishment report for user review, allowing adjustments and batch orders while meeting
deadlines.
Manual reordering rules : Generate suggestions in
the replenishment report for user review, allowing adjustments and batch orders while meeting
deadlines.
- Just-in-time logic : A strategy to replenish
only what is needed to prevent overstocking.
Just-in-time logic : A strategy to replenish
only what is needed to prevent overstocking.
- Reordering rules
- Replenishment report

### Make to order

An MTO strategy means that procurement or production is triggered only after a sales order has
been confirmed. This strategy is recommended when products are customizable, demand is
unpredictable, there is limited storage capacity, and when products are high in value and low in
demand. In such cases, it does not make sense to keep on-hand inventory.
Unlike products replenished using reordering rules, Odoo automatically links the sales order to the PO or MO generated by the MTO route.
Another difference between reordering rules and MTO is, with MTO , Odoo generates a draft PO or MO immediately after the SO is confirmed. With reordering rules, Odoo generates a draft PO or MO when the productâs forecasted stock falls below the set minimum quantity.
In addition, Odoo automatically adds quantities to the PO or MO as the forecast changes, so long
as the PO or MO is not confirmed.
The MTO route is the best replenishment strategy for products that are customized, and/or for
products that have no stock kept on-hand.
Replenish on order (MTO)

### Master production schedule

The MPS is a dashboard where products and their forecasted
quantities are entered. Based on confirmed manufacturing and purchase orders, the dashboard
recommends amounts to order or produce.
This a useful manual tool for keeping track of quantities. The MPS should absolutely not be used alongside reordering rules, as the automated workflow
disrupts its manual replenishment method.
Master production schedule