← Back to team overview

c2c-oerpscenario team mailing list archive

[Bug 737786] Re: [6.0.1] Invoicing an outgoing picking list from a sale order including service products

 

Hello guys,

I confirm this issue. It was a blocker here in one project.

I fixed it a few weeks ago, with the attached patched.

Basically, the _get_account_analytic_invoice methods will be called bot
for sale and purchase potentially on which the picking is potentially
based. They are called in an order that depends on the your module
installation order. There is a particular order that screw it all. This
also explains why OpenERP SA guys didn't spot the issue yet.

How I fixed it:
Better refactorings might exist but here is what I did:
purchase/stock.py#_get_account_analytic_invoice only makes sense if there is actually a purchase order line related to the move (not the case if you invoice a delivery). 
So I added that test inside purchase/stock.py.
On the other side, in sale/stock.py, there will be no stock stock.move here. So instead of passing a sale.order.line to the call chain, that would blow out later in purchase/stock.py, I simply pass nothing.

See attached patch please.
NB: as I explained it to OpenERP SA, I do not agree on the new 'private module exception" license under the current terms that don't protect against a SaaS loophole. Thanks.


** Patch added: "analytic.patch"
   https://bugs.launchpad.net/openobject-addons/+bug/737786/+attachment/2221340/+files/analytic.patch

-- 
You received this bug notification because you are a member of C2C
OERPScenario, which is subscribed to the OpenERP Project Group.
https://bugs.launchpad.net/bugs/737786

Title:
  [6.0.1] Invoicing an outgoing picking list from a sale order including
  service products

Status in OpenERP Modules (addons):
  Invalid

Bug description:
  If you invoice an outgoing picking list whose sale order includes
  service products, and the purchase module is installed, you can get
  the following error because action_invoice_create() tries to get an
  analytical account but the inherit _get_account_analytic_invoice()
  method defined in purchase module is called.

  It could be fixes if line 104 of file purchase/stock.py:
          if move_line.purchase_line_id:

  is changed to:
          if picking.purchase_id and move_line.purchase_line_id:

    File "server/bin/addons/stock/wizard/stock_invoice_onshipping.py", line 93, in open_invoice
      res = self.create_invoice(cr, uid, ids, context=context)
    File "server/bin/addons/purchase/purchase.py", line 835, in create_invoice
      res = super(stock_invoice_onshipping,self).create_invoice(cr, uid, ids, context=context)
    File "server/bin/addons/stock/wizard/stock_invoice_onshipping.py", line 131, in create_invoice   
      context=context)
    File "server/bin/addons/delivery/stock.py", line 81, in action_invoice_create
      context=context)
    File "server/bin/addons/sale/stock.py", line 167, in action_invoice_create
      user, picking, sale_line)
    File "server/bin/addons/purchase/stock.py", line 104, in _get_account_analytic_invoice
      if move_line.purchase_line_id:
    File "server/bin/osv/orm.py", line 287, in __getattr__
      raise AttributeError(e)
  AttributeError: "Field 'purchase_line_id' does not exist in object 'browse_record(sale.order.line, 393)'"

To manage notifications about this bug go to:
https://bugs.launchpad.net/openobject-addons/+bug/737786/+subscriptions


References