make stock_reserve_sale owner_aware

This commit is contained in:
Leonardo Pistone
2015-03-17 12:35:46 +01:00
parent 30ec1073c0
commit fc34c3b24f
3 changed files with 43 additions and 6 deletions

View File

@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Guewen Baconnier
# Copyright 2013 Camptocamp SA
# Author: Guewen Baconnier, Leonardo Pistone
# Copyright 2013-2015 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -20,7 +20,7 @@
##############################################################################
{'name': 'Stock Reserve Sales',
'version': '0.1',
'version': '1.0',
'author': "Camptocamp,Odoo Community Association (OCA)",
'category': 'Warehouse',
'license': 'AGPL-3',
@@ -48,6 +48,13 @@ If you want to prevent sales orders to be confirmed when the stock is
insufficient at the order date, you may want to install the
`sale_exception_nostock` module.
Additionally, if the sale_owner_stock_sourcing module is installed, the owner
specified on the sale order line will be proposed as owner of the reservation.
If you try to make a reservation for an order whose lines have different, you
will get a message suggesting to reserve each line individually. There is no
module dependency: this modules is fully functional even without ownership
management.
""",
'depends': ['sale_stock',
'stock_reserve',

View File

@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# Author: Guewen Baconnier
# Copyright 2013 Camptocamp SA
# Author: Guewen Baconnier, Leonardo Pistone
# Copyright 2013-2015 Camptocamp SA
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,7 +19,7 @@
#
##############################################################################
from openerp import models, fields, api
from openerp import models, fields, api, exceptions
class SaleStockReserve(models.TransientModel):
@@ -33,6 +33,32 @@ class SaleStockReserve(models.TransientModel):
def _default_location_dest_id(self):
return self.env['stock.reservation']._default_location_dest_id()
def _default_owner(self):
"""If sale_owner_stock_sourcing is installed, it adds an owner field
on sale order lines. Use it.
"""
model = self.env[self.env.context['active_model']]
if model._name == 'sale.order':
lines = model.browse(self.env.context['active_id']).order_line
else:
lines = model.browse(self.env.context['active_ids'])
try:
owners = set([l.stock_owner_id for l in lines])
except AttributeError:
return self.env['res.partner']
# module sale_owner_stock_sourcing not installed, fine
if len(owners) == 1:
return owners.pop()
elif len(owners) > 1:
raise exceptions.Warning(
'The lines have different owners. Please reserve them '
'individually with the reserve button on each one.')
return self.env['res.partner']
location_id = fields.Many2one(
'stock.location',
'Source Location',
@@ -50,6 +76,8 @@ class SaleStockReserve(models.TransientModel):
help="If a date is given, the reservations will be released "
"at the end of the validity.")
note = fields.Text('Notes')
owner_id = fields.Many2one('res.partner', 'Stock Owner',
default=_default_owner)
@api.multi
def _prepare_stock_reservation(self, line):
@@ -67,6 +95,7 @@ class SaleStockReserve(models.TransientModel):
'product_uos': product_uos,
'price_unit': line.price_unit,
'sale_line_id': line.id,
'restrict_partner_id': self.owner_id.id,
}
@api.multi

View File

@@ -16,6 +16,7 @@
<field name="location_id"/>
<field name="location_dest_id"/>
<field name="date_validity"/>
<field name="owner_id" groups="stock.group_tracking_owner"/>
</group>
<group name="note" string="Notes">
<field name="note" nolabel="1"/>