This is the documentation for older versions of Odoo (formerly OpenERP).

See the new Odoo user documentation.

See the new Odoo technical documentation.

Driving a Purchase / Sales Flow

To familiarize yourself with the system workflow, you will test a purchase-sale workflow in two phases.

The first consists of product purchase, which requires the following operations:

  1. Place a purchase order with Plumbing Component Suppliers for 10 Titanium Alloy Radiators at a unit price of 56.00.

  2. Receive these products at your Goods In.

  3. Generate a purchase invoice.

  4. Pay your supplier.

Following this, you will sell some of these products, using this sequence:

  1. Receive a sales order for 6 Titanium Alloy Radiators from Smith and Sons, sold at a unit price of 130.00.

  2. Dispatch the products.

  3. Invoice the customer.

  4. Receive the payment.

Purchase Order

To place a Purchase Order with your supplier, use the menu Purchases ‣ Purchase Management ‣ Purchase Orders and click the New button.

Complete the following field:

  • Supplier : Plumbing Component Suppliers .

As you complete the Supplier field, OpenERP automatically completes the Address field and the Pricelist field from information it takes out of the Partner record.

Enter the following information

  • Product : Titanium Alloy Radiator - type in part of this name then press the tab key to complete it, or click the Search icon at the end of the line to bring a search box. (if product is previously configured)

When you have selected a product on the product line, OpenERP automatically completes the following fields from information it finds in the Product record:

  • Product UOM : the unit of measure for this product,

  • Description : the detailed description of the product,

  • Scheduled Date : based on the product lead time,

  • Unit Price : the unit price of the product,

  • Analytic account : if any account is specified then it will appear on the order line (it is not in this example),

  • Taxes : applicable taxes defined in the partner, if specified, otherwise in the product, if specified (there are not any in this example).

You can edit any of these fields to suit the requirements of the purchase order at the time of entry. Change the:

  • Quantity : 10,

  • Unit Price to 56.00.

Save the order line and close the Order Line window by clicking the Close button. You can then confirm the whole one-line order by clicking Save, which makes the form non-editable.

It is now in a state of Request for Quotation, so click Convert to Purchase Order, which corresponds to an approval from a manager or from Accounts within your own company and moves the order into Approved state.

If you click the Delivery & Invoicing tab you will see the delivery Destination is your own company's Stock location and that the invoice was created from the order. It is not entirely obvious at this stage, but the invoice is in a draft state so it can be edited and, crucially, has no accounting impact yet: it is just ready for your accounting group to activate it.

Receiving Goods

After confirming the order, you would wait for the delivery of the products from your supplier. Typically this would be somebody in Stores, who would:

  1. Open the menu Warehouse ‣ Warehouse Management ‣ Incoming Shipments using the expand/collapse icon.


    From the Purchase Order

    You could have clicked the Receptions link to the right of the Purchase Order to reach the same screen, but this would confuse the purchasing role with the stores role. That link is very useful during testing and training, however.

  2. When the Incoming Shipments window appears, select the name of the entry in the list (IN/00002) to display the Packing List itself – you would usually do a search for the supplier name or order number in a list that was larger than this – then click Process to load the Process Document form.

  3. Click Validate to indicate that you are receiving the whole quantity of 10 units.

At this point you have accepted 10 units into your company, in a location that you have already seen.

Using the menu Purchases ‣ Products ‣ Products you can find the product Titanium Alloy Radiators with Real Stock and Virtual Stock 10. From the product form click on the link at the right most side Stock by Location, you can see the Real Stock and Virtual Stock of this product in various locations. Now click on the Location Inventory Overview report to see the inventory valuation per location.


List of products and their stock levels


Traceability in Double-entry

OpenERP operates a double-entry stock transfer scheme similar to double-entry accounting. Because of this you can carry out various analyses of stock levels in your warehouse, along with the corresponding levels in Partner Location at your Supplier. The double-entry system, analogous to that of accounting, enables you to keep track of stock movements quite easily, and to resolve any errors that occur.

Invoice Control

When you have received an invoice from your supplier (which would usually be sent to your Accounts department), go to the menu Accounting ‣ Suppliers ‣ Supplier Invoices to open a list of supplier invoices waiting for receipt. These invoices enable your Accounts Department to match the price and quantities ordered against the price and quantities on the supplier's invoice (and since it is not uncommon to receive an invoice showing details more favourable to the supplier than those agreed at the time of purchase, this is a useful function).

In this example, you created an invoice automatically when you confirmed the supplier's Purchase Order. That is because the Invoicing Control field on the order was set to From Order(the default option). Other options enable you to create invoices at the time of receiving goods or manually. The initial state of an invoice is Draft .

Now click the invoice for your order PO00001 to display its contents. You can compare the goods that you have recorded there with the invoice received from your supplier. If there is a difference, it is possible to change the order lines to, for example, add a delivery charge. Click Validate to confirm the invoice and put it into the Open state.

Accounting entries are generated automatically once the invoice is validated. To see the effects on your chart of accounts, use the menu Accounting ‣ Charts ‣ Chart of Accounts ,then click Open Charts at the Chart of Accounts page to see that you have a debit of 560.00 in the Purchases account and a credit of 560.00 in the Payable account.

Paying the Supplier

Select the menu Accounting ‣ Suppliers ‣ Supplier Invoices and click on the Unpaid button for a list of supplier invoices that have not yet been paid. Write the PO00001 in Source Document text itself to find the invoice. In practice, you would search for the invoice by order number or, more generally, for invoices nearing their payment date.

Click on Pay Invoice button in the supplier invoice form. It opens the Pay Invoice window in new tab with a description of the payment.

Supplier and Date comes automatically from invoice. You need to just enter the Payment Method. After that, click on Validate button to post this entry.


Payment of an Invoice

The method described here is for companies that do not use their accounting system to pay bills – just to record them. If you are using the account module with all its features, other, more efficient, methods let you manage payments, such as entering account statements, reconciling paperwork, using tools for preparing payments, interfacing with banks.

You can monitor the accounting impact of paying the invoice through the chart of accounts available from the menu Accounting ‣ Charts ‣ Chart of Accounts. OpenERP automatically creates accounting entries from the payment, and can reconcile the payment to the invoice. You now have a new transaction that has debited the Payable account with 560.00 and credited the Cash account.

If you look in Accounting ‣ Journal Entries ‣ Journal Entries you will see both accounting transactions, one in each of the Purchase Journal and Bank Journal in Draft state.

From Sales Proposal to Sales Order

In OpenERP, sales proposals and sales orders are managed using documents that are based on the same common functionality as purchase orders, so you will recognize the following documents in general but see changes to their detail and to their workflows. To create a new sales proposal, use the menu Sales ‣ Sales ‣ Sales Orders and click on New button which creates a new order in a state of Quotation , then:

  1. Select the Customer Axelor . This has the effect of automatically completing several other fields: Ordering Contact, Invoice Address, Shipping Address, and the Pricelist Public Pricelist (EUR). They are all only defaults, so these fields can be modified as you need.

  2. Click the New button in Sales Order Lines section to open a Sales Order Lines window.

  3. Select the product Titanium Alloy Radiator . Although the Product field is not itself required, it is used by OpenERP to select the specific product so that several other fields can be automatically completed on the order line of the proposal, such as Description, Unit of Measure, Unit Price, Procurement Method, Delivery Lead Time, and Taxes.

  4. Change the Quantity (UoM) to 6 and the Unit Price to 130.00. Then click Save & Close and the line appears on the quotation form.

  5. On the Other Information tab of this Sales Order, select a Picking Policy of Complete Delivery and Shipping Policy of Invoice on Order After Delivery from their dropdown menu lists.

  6. Return to the first tab Sales Order and validate the document by clicking Confirm Order which calculates prices and the changes the order's state from Quotation to In Progress as shown in screenshot Sales Order Form. If you were in negotiation with the prospective customer, you would keep clicking Compute and Save, keeping the document in Quotation state for as long as necessary.


    Sales Order Form

  7. In the last tab of the order History, you can see the Picking List that has been created and you will be able to see any invoices that relate to this order when they are generated.

Go to Sales ‣ Products ‣ Products to display a list of products: just the one, Titanium Alloy Radiator , currently exists in this example. Its Real Stock still shows 10.00 but its Virtual Stock now shows 4.00 to reflect the new future requirement of 6 units for dispatch.

Preparing Goods for Shipping to Customers

The stores manager selects the menu Warehouse ‣ Warehouse Management ‣ Delivery Orders to get a list of orders to dispatch. For this example, find the Delivery Order related to the sale order which you have created.


Running Schedulers

At the moment, your Sales Order is waiting for products to be reserved to fulfil it. A stock reservation activity takes place periodically to calculate the needs, which also takes customer priorities into account. The calculation can be started from the menu Warehouse ‣ Schedulers ‣ Compute Schedulers. Running this automatically reserves products.

If you do not want to have to work out your stock needs but have a lean workflow you can install the mrp_jit (Just In Time) module.

Although OpenERP has automatically been made aware that items on this order will need to be dispatched, it has not yet assigned any specific items from any location to fulfil it. It is ready to move 6.00 Titanium Alloy Radiators from the Stock location to the Customers location, so start this process by clicking Check Availability. The Move line has now changed from the Confirmed state to the Available state.

Then click the Process button to reach the Process Document window, where you click the Validate button to transfer the 6 radiators to the customer.

To analyze stock movements that you have made during these operations, use Warehouse ‣ Product ‣ Product and find this product, then click on the action Stock by Location which is at the right most side to see that your stocks have reduced to 4 radiators and the generic Customers location has a level of 6 radiators.

Invoicing Goods

Use the menu Accounting ‣ Customers ‣ Customer Invoices to open a list of Sales invoices generated by OpenERP. If they are in the Draft state, it means that they do not yet have any presence in the accounting system. You will find a draft invoice has been created for the order SO00008 once you have dispatched the goods because you had selected Invoice on Order After Delivery .

Once you confirm an invoice, OpenERP assigns it a unique number, and all of the corresponding accounting entries are generated. So open the invoice and click Validate to do that and move the invoice into an Open state with a number of SAJ/2011/001.

You can send your customer the invoice for payment at this stage. Click Print Invoice to get a PDF document that can be printed or emailed to the customer.

You can also attach the PDF document to the OpenERP invoice record. Save the PDF somewhere convenient on your PC (such as on your desktop). Then click the Add button to the top right of the invoice form (it looks like a clipboard). Browse to the file you just saved (record.pdf if you did not change its name). This gives you a permanent non-editable record of your invoice on the OpenERP system.

Review your chart of accounts to check the impact of these activities on your accounting. You will see the new revenue line from the invoice.

Customer Payment

Registering an invoice payment by a customer is essentially the same as the process of paying a supplier. From the menu Accounting ‣ Customers ‣ Customer Invoices, click the name of the invoice that you want to mark as paid:

  1. Use the Payment button which opens a new window Pay Invoice.

  2. Select the Payment Method, for this example select Cash then validate the entry.


Invoice Form

Check your Chart of Accounts as before to see that you now have a healthy bank balance in the Cash account.