Three related problems with Drop Shipping with Anglo Saxon Accounting.

One has been broken since #20080.

Another is caused by the same code.

The third - a fix from #12687 - is being bypassed by current code.



Impacted versions:

11.0, and 10.0 for at least some of this

Steps to reproduce:

Set up a product with
- real time valuation
- standard price
- Anglo Saxon accounting
- drop shipping turned on
- invoicing on delivered quantities

Create a product with a standard price of $40.

Current behavior:

_If I create a sales order and choose to ship from existing stock, then the invoice created after delivery is correct, and it has the correct Anglo Saxon account moves._

- Dr COGS $40
- Cr Output $40

If I create a sales order and choose to drop ship, I can then go to the RFQ, and change the RFQ price to $45, then receive the product, and generate the Vendor Bill.  Everything is correct at this point.  When I go back to the Sales Order and create and validate the invoice, it has the incorrect Anglo Saxon account moves:

- Dr Output $45
- Cr COGS $45

Expected behavior:

The accounting should be the same on the invoice.  The value is wrong, and the debits and credits are reversed.

Also, there should be an additional journal:

- Dr Output $40
- Cr Input $40

Th 3 problems are:

1. It is getting a -ve price unit from _compute_average_price because the stock move is not an outgoing move, but a supplier -> customer move!
2. It is getting the average price from those moves and using it, even if the product is using standard price.
3. The extra move that #12687 created is no longer being generated as the account moves are being bypassed entirely for dropshipping.  Somewhere in the process, we need to move the value from stock_input to stock_output.  This may be a v11 problem only.

Video/Screenshot link (optional):


for move in res:
            
            
            if move._is_in() and move._is_out():
                raise UserError(_("The move lines are not in a consistent state: some are entering and other are leaving the company. "))
            company_src = move.mapped('move_line_ids.location_id.company_id')
            company_dst = move.mapped('move_line_ids.location_dest_id.company_id')
            try:
                if company_src:
                    company_src.ensure_one()
                if company_dst:
                    company_dst.ensure_one()
            except ValueError:
                raise UserError(_("The move lines are not in a consistent states: they do not share the same origin or destination company."))
            if company_src and company_dst and company_src.id != company_dst.id:
                raise UserError(_("The move lines are not in a consistent states: they are doing an intercompany in a single step while they should go through the intercompany transit location."))
            move._run_valuation()
        for move in res.filtered(lambda m: m.product_id.valuation == 'real_time' and (m._is_in() or m._is_out())):
            move._account_entry_move()
        return res
    @api.multi
    def product_price_update_before_done(self, forced_qty=None):
        tmpl_dict = defaultdict(lambda: 0.0)
        
        std_price_update = {}
        for move in self.filtered(lambda move: move.location_id.usage in ('supplier', 'production') and move.product_id.cost_method == 'average'):
            product_tot_qty_available = move.product_id.qty_available + tmpl_dict[move.product_id.id]
            if product_tot_qty_available == 0:
                new_std_price = move._get_price_unit()
            else: