Skip to Content
Menu
This question has been flagged
1 Reply
3017 Views

This is for Odoo Community v12.

My client submits POs with quite a few line items with varying ship dates from overseas. They do not always receive exactly the number of ordered products and because of shipping costs do not have the vendor reship the missing items in some cases.

When receiving, they enter the number of items received on a shipment and usually put the balance on a backorder. Then, some of the products may come in separately and they receive them and eventually, the order is complete or they have to cancel the backorders.

Here are a few scenarios they are having issues handling. I am looking for ideas on how to advise them on handling these.


Scenario 1

1) Receive 6 Line Items of 10.

       Put remaining on Backorder creating a new delivery Receipt.

2) Vendor Calls and they are canceling 2 of the line items.

        How do we cancel 2 line item on this PO ...leaving the other 2 open?


Scenario 2

 1) Receive 6 Line Items of 10.

       Put remaining on Backorder

2) Vendor Calls.  they can only ship Qty 2  of 10   on a single line item.  How to change?


=====================================================================


PO Validate Over Receive Scenario:

     Line Item 1 Order 25    Receive this time: 28

                     2           10                                 10

                    3            10                                 15

                     4            25                                25

  When they hit to Validate, she gets warning that Line Item 1 is more than ordered. Asking her to confirm.

    She says yes.

    Odoo then processes the whole receipt. 

    Her complaint:  She never gets questions about Line Item 3 over-receipt.  She would like to be prompted for each over-receipt so

              her keying errors could be caught.

Avatar
Discard
Best Answer

The Purchase Order and Receipt(s) in Odoo are separate to signify the difference between the request/agreement and the ability of the Vendor to fulfill the request/agreement.

These two documents do not have to match, and this is a common source of frustration if people are not able to think this way.

There are good reasons to monitor any discrepancies - your Vendor might not be able to keep their promises, you might not be ordering full cases, etc - although this varies based on the Company.

The default Vendor Bill Control Policy is "On received quantities" which means Odoo will always create a Vendor Bill based on what is received, not what is ordered.

Many times, a conversation about all of this will illustrate that in the majority of cases, everything "just works" and there is no need to think about what to "do" if the Receipt(s) don't match the Purchase Order.

If you allow edits to the Purchase Order after it is sent (a configuration option) then you simply cancel any remaining back orders and LOCK the Purchase Order to indicate that all receiving activity has stopped.  This clearly communicates to Finance staff that the numbers shown as "Received" is what the warehouse shows what was received and if this matches what the Vendor is asking to be paid for, nothing has to be done.

If the Vendor Bill does not match what Odoo shows what was as received, then users should investigate.  In this case knowing what was requested/ordered is very useful and updating it will obscure the ability of users to understand what happened. The Purchase Order shows what was ordered, what was received and what was billed - allowing all three numbers to be compared.

I would suggest first understanding this design yourself, including what happens when you cancel back order Receipts.

You will observe it is possible to order 10, receive 16 and record a Bill correctly for 16 (or order 20, receive 15 and record a Bill correctly for 15) without needing to edit the Purchase Order and without needing to rekey anything.


You can customize the software to compare the expected and actual amounts received by changing this function:

https://github.com/odoo/odoo/blob/13.0/addons/stock/wizard/stock_overprocessed_transfer.py#L16


This line:

wizard.overprocessed_product_name moves[0].product_id.display_name

Would become something like:

overprocessed_product_names = 'or products: '
for move in moves:
overprocessed_product_names += move.product_id.display_name + ', '
wizard.overprocessed_product_name = overprocessed_product_names[:-2]


See this example screenshot (which is for the Enterprise Edition but it works the same way with the Community Edition):

https://i.imgur.com/pgc25Rn.png

Avatar
Discard
Author

Thanks Ray. We'll see what we can do with this. As always, you're the best!