[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:
committed by
Pierre Masereel
parent
1c458d9e99
commit
8b5401864d
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user