[REF] purchase_requisition: multi-currency support

If the parameter multi currency is enabled, the field currency is added
in the purchase requisition form. The currency chosen will be the one by
default in the PO attached to the BO
This commit is contained in:
William Henrotin
2018-02-01 15:11:15 +01:00
committed by Pierre Masereel
parent 1c458d9e99
commit 8b5401864d
4 changed files with 11 additions and 8 deletions
+2 -1
View File
@@ -236,7 +236,8 @@ class PurchaseOrder(models.Model):
else:
self.fiscal_position_id = self.env['account.fiscal.position'].with_context(company_id=self.company_id.id).get_fiscal_position(self.partner_id.id)
self.payment_term_id = self.partner_id.property_supplier_payment_term_id.id
self.currency_id = self.partner_id.property_purchase_currency_id.id or self.env.user.company_id.currency_id.id
if not self.currency_id:
self.currency_id = self.partner_id.property_purchase_currency_id.id or self.env.user.company_id.currency_id.id
return {}
@api.onchange('fiscal_position_id')
@@ -76,6 +76,8 @@ class PurchaseRequisition(models.Model):
account_analytic_id = fields.Many2one('account.analytic.account', 'Analytic Account')
picking_type_id = fields.Many2one('stock.picking.type', 'Operation Type', required=True, default=_get_picking_in)
is_quantity_copy = fields.Selection(related='type_id.quantity_copy', readonly=True)
currency_id = fields.Many2one('res.currency', 'Currency', required=True,
default=lambda self: self.env.user.company_id.currency_id.id)
@api.depends('state')
def _set_state(self):
@@ -184,7 +186,7 @@ class PurchaseRequisition(models.Model):
class SupplierInfo(models.Model):
_inherit = "product.supplierinfo"
_order = 'sequence, purchase_requisition_id desc, min_qty desc, price'
purchase_requisition_id = fields.Many2one('purchase.requisition', related='purchase_requisition_line_id.requisition_id', string='Blanket order')
purchase_requisition_line_id = fields.Many2one('purchase.requisition.line')
@@ -300,7 +302,6 @@ class PurchaseOrder(models.Model):
else:
partner = requisition.vendor_id
payment_term = partner.property_supplier_payment_term_id
currency = partner.property_purchase_currency_id or requisition.company_id.currency_id
FiscalPosition = self.env['account.fiscal.position']
fpos = FiscalPosition.get_fiscal_position(partner.id)
@@ -310,7 +311,7 @@ class PurchaseOrder(models.Model):
self.fiscal_position_id = fpos.id
self.payment_term_id = payment_term.id,
self.company_id = requisition.company_id.id
self.currency_id = currency.id
self.currency_id = requisition.currency_id.id
self.origin = requisition.name
self.partner_ref = requisition.name # to control vendor bill based on agreement reference
self.notes = requisition.description
@@ -349,10 +350,6 @@ class PurchaseOrder(models.Model):
if requisition.type_id.quantity_copy != 'copy':
product_qty = 0
# Compute price_unit in appropriate currency
if requisition.company_id.currency_id != currency:
price_unit = requisition.company_id.currency_id.compute(price_unit, currency)
# Create PO line
order_line_values = line._prepare_purchase_order_line(
name=name, product_qty=product_qty, price_unit=price_unit,
@@ -434,4 +431,6 @@ class ProcurementRule(models.Model):
res = super(ProcurementRule, self)._prepare_purchase_order(product_id, product_qty, product_uom, origin, values, partner)
res['partner_ref'] = values['supplier'].purchase_requisition_id.name
res['requisition_id'] = values['supplier'].purchase_requisition_id.id
if values['supplier'].purchase_requisition_id.currency_id:
res['currency_id'] = values['supplier'].purchase_requisition_id.currency_id.id
return res
@@ -15,6 +15,7 @@ class TestPurchaseRequisition(common.TransactionCase):
self.product_13_id = self.ref('product.product_product_13')
self.res_partner_1_id = self.ref('base.res_partner_1')
self.res_company_id = self.ref('base.main_company')
self.env.user.company_id.currency_id = self.env.ref("base.USD").id
self.ResUser = self.env['res.users']
# Create a user as 'Purchase Requisition Manager'
@@ -174,6 +175,7 @@ class TestPurchaseRequisition(common.TransactionCase):
'line_ids': [line1],
'type_id': requisition_type.id,
'vendor_id': vendor1.id,
'currency_id': self.env.ref("base.USD").id,
})
requisition_blanket.action_in_progress()
@@ -172,6 +172,7 @@
<field name="user_id" attrs="{'readonly': [('state','not in',('draft','in_progress','open'))]}"/>
<field name="type_id" attrs="{'readonly': [('state','!=','draft')]}" widget="selection"/>
<field name="vendor_id" context="{'search_default_supplier':1, 'default_supplier':1, 'default_customer':0}" domain="[('supplier','=',True)]" attrs="{'required': [('is_quantity_copy', '=', 'none')], 'readonly': [('state', 'in', ['ongoing','done'])]}"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="account_analytic_id" colspan="2" groups="analytic.group_analytic_accounting" attrs="{'readonly': [('state','not in',('draft'))]}"/>
</group>
<group>