diff options
| author | Victor Feyens <vfe@odoo.com> | 2019-11-20 11:24:52 +0000 |
|---|---|---|
| committer | Victor Feyens <vfe@odoo.com> | 2019-11-20 14:42:07 +0000 |
| commit | 600d0707aea82c148b0aadad66bf37fc0865c917 (patch) | |
| tree | 37d9799e430f356b7d658abc03e5f72de9bd7d64 /addons | |
| parent | 81245528d18723845f80a5e4d348d044b730b655 (diff) | |
[IMP] *: use get_fiscal_position and not property_account_position_id.
And adapt to get_fiscal_position changes
closes odoo/odoo#40336
Related: odoo/enterprise#6840
Signed-off-by: Laurent Smet <smetl@users.noreply.github.com>
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/account/models/account_move.py | 3 | ||||
| -rw-r--r-- | addons/account/tests/test_fiscal_position.py | 2 | ||||
| -rw-r--r-- | addons/purchase/models/purchase.py | 14 | ||||
| -rw-r--r-- | addons/purchase_requisition/models/purchase.py | 1 | ||||
| -rw-r--r-- | addons/purchase_stock/models/stock_rule.py | 2 | ||||
| -rw-r--r-- | addons/repair/models/repair.py | 39 | ||||
| -rw-r--r-- | addons/sale/models/account_move.py | 2 | ||||
| -rw-r--r-- | addons/sale/models/sale.py | 8 | ||||
| -rw-r--r-- | addons/sale/wizard/sale_make_invoice_advance.py | 2 | ||||
| -rw-r--r-- | addons/sale_coupon/models/sale_order.py | 3 | ||||
| -rw-r--r-- | addons/sale_purchase/models/sale_order.py | 4 | ||||
| -rw-r--r-- | addons/website_sale/models/product.py | 5 |
12 files changed, 45 insertions, 40 deletions
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index b95b4bf5109..883f88abf30 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -325,9 +325,8 @@ class AccountMove(models.Model): # Find the new fiscal position. delivery_partner_id = self._get_invoice_delivery_partner_id() - new_fiscal_position_id = self.env['account.fiscal.position'].with_company(self.company_id).get_fiscal_position( + self.fiscal_position_id = self.env['account.fiscal.position'].with_company(self.company_id).get_fiscal_position( self.partner_id.id, delivery_id=delivery_partner_id) - self.fiscal_position_id = self.env['account.fiscal.position'].browse(new_fiscal_position_id) self._recompute_dynamic_lines() if warning: return {'warning': warning} diff --git a/addons/account/tests/test_fiscal_position.py b/addons/account/tests/test_fiscal_position.py index a8148fc9360..0607d99b1b0 100644 --- a/addons/account/tests/test_fiscal_position.py +++ b/addons/account/tests/test_fiscal_position.py @@ -64,7 +64,7 @@ class TestFiscalPosition(common.SavepointCase): def test_10_fp_country(self): def assert_fp(partner, expected_pos, message): self.assertEqual( - self.fp.get_fiscal_position(partner.id), + self.fp.get_fiscal_position(partner.id).id, expected_pos.id, message) diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index c29113a461f..9a8d8302f00 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -212,13 +212,12 @@ class PurchaseOrder(models.Model): self.currency_id = self.partner_id.property_purchase_currency_id.id or self.env.company.currency_id.id return {} - @api.onchange('fiscal_position_id') + @api.onchange('fiscal_position_id', 'company_id') def _compute_tax_id(self): """ Trigger the recompute of the taxes if the fiscal position is changed on the PO. """ - for order in self: - order.order_line._compute_tax_id() + self.order_line._compute_tax_id() @api.onchange('partner_id') def onchange_partner_id_warning(self): @@ -518,10 +517,11 @@ class PurchaseOrderLine(models.Model): def _compute_tax_id(self): for line in self: - fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.with_company(line.company_id).property_account_position_id - # If company_id is set, always filter taxes by the company - taxes = line.product_id.supplier_taxes_id.filtered(lambda r: not line.company_id or r.company_id == line.company_id) - line.taxes_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_id) if fpos else taxes + line = line.with_company(line.company_id) + fpos = line.order_id.fiscal_position_id or line.order_id.fiscal_position_id.get_fiscal_position(line.order_id.partner_id.id) + # filter taxes by company + taxes = line.product_id.supplier_taxes_id.filtered(lambda r: r.company_id == line.env.company) + line.taxes_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_id) @api.depends('invoice_lines.move_id.state', 'invoice_lines.quantity') def _compute_qty_invoiced(self): diff --git a/addons/purchase_requisition/models/purchase.py b/addons/purchase_requisition/models/purchase.py index e29b4d8c490..6ba14e2f65b 100644 --- a/addons/purchase_requisition/models/purchase.py +++ b/addons/purchase_requisition/models/purchase.py @@ -24,7 +24,6 @@ class PurchaseOrder(models.Model): FiscalPosition = self.env['account.fiscal.position'] fpos = FiscalPosition.with_company(self.company_id).get_fiscal_position(partner.id) - fpos = FiscalPosition.browse(fpos) self.partner_id = partner.id self.fiscal_position_id = fpos.id diff --git a/addons/purchase_stock/models/stock_rule.py b/addons/purchase_stock/models/stock_rule.py index 53e402cda26..5e5f402bace 100644 --- a/addons/purchase_stock/models/stock_rule.py +++ b/addons/purchase_stock/models/stock_rule.py @@ -282,7 +282,7 @@ class StockRule(models.Model): 'origin': ', '.join(origins), 'payment_term_id': partner.with_company(company_id).property_supplier_payment_term_id.id, 'date_order': purchase_date, - 'fiscal_position_id': fpos, + 'fiscal_position_id': fpos.id, 'group_id': group } diff --git a/addons/repair/models/repair.py b/addons/repair/models/repair.py index e6589b47af9..55076baa2ee 100644 --- a/addons/repair/models/repair.py +++ b/addons/repair/models/repair.py @@ -644,22 +644,23 @@ class RepairLine(models.Model): def onchange_product_id(self): """ On change of product it sets product quantity, tax account, name, uom of product, unit price and price subtotal. """ - partner = self.repair_id.partner_id - pricelist = self.repair_id.pricelist_id if not self.product_id or not self.product_uom_qty: return - if self.product_id: - if partner: - self.name = self.product_id.with_context(lang=partner.lang).display_name - else: - self.name = self.product_id.display_name - if self.product_id.description_sale: - self.name += '\n' + self.product_id.description_sale - self.product_uom = self.product_id.uom_id.id + self = self.with_company(self.company_id) + partner = self.repair_id.partner_id + if partner: + self = self.with_context(lang=partner.lang) + product = self.product_id + self.name = product.display_name + if product.description_sale: + self.name += '\n' + product.description_sale + self.product_uom = product.uom_id.id if self.type != 'remove': - if partner and self.product_id: - self.tax_id = partner.property_account_position_id.map_tax(self.product_id.taxes_id, self.product_id, partner).ids + if partner: + fpos = self.env['account.fiscal.position'].get_fiscal_position(partner.id) + self.tax_id = fpos.map_tax(self.product_id.taxes_id, self.product_id, partner) warning = False + pricelist = self.repair_id.pricelist_id if not pricelist: warning = { 'title': _('No pricelist found.'), @@ -723,16 +724,18 @@ class RepairFee(models.Model): if not self.product_id: return + self = self.with_company(self.company_id) + partner = self.repair_id.partner_id pricelist = self.repair_id.pricelist_id if partner and self.product_id: - self.tax_id = partner.property_account_position_id.map_tax(self.product_id.taxes_id, self.product_id, partner).ids - if self.product_id: - self.name = self.product_id.display_name - self.product_uom = self.product_id.uom_id.id - if self.product_id.description_sale: - self.name += '\n' + self.product_id.description_sale + fpos = self.env['account.fiscal.position'].get_fiscal_position(partner.id) + self.tax_id = fpos.map_tax(self.product_id.taxes_id, self.product_id, partner).ids + self.name = self.product_id.display_name + self.product_uom = self.product_id.uom_id.id + if self.product_id.description_sale: + self.name += '\n' + self.product_id.description_sale warning = False if not pricelist: diff --git a/addons/sale/models/account_move.py b/addons/sale/models/account_move.py index 0e20b8f4c82..dc3ce48dd15 100644 --- a/addons/sale/models/account_move.py +++ b/addons/sale/models/account_move.py @@ -173,7 +173,7 @@ class AccountMoveLine(models.Model): last_so_line = self.env['sale.order.line'].search([('order_id', '=', order.id)], order='sequence desc', limit=1) last_sequence = last_so_line.sequence + 1 if last_so_line else 100 - fpos = order.fiscal_position_id or order.partner_id.property_account_position_id + fpos = order.fiscal_position_id or order.fiscal_position_id.get_fiscal_position(order.partner_id.id) taxes = fpos.map_tax(self.product_id.taxes_id, self.product_id, order.partner_id) return { diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index 5a75f128195..6c13d57e855 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -489,6 +489,7 @@ class SaleOrder(models.Model): a clean extension chain). """ self.ensure_one() + self = self.with_company(self.company_id) journal = self.env['account.move'].with_company(self.company_id).with_context(default_type='out_invoice')._get_default_journal() if not journal: raise UserError(_('Please define an accounting sales journal for the company %s (%s).') % (self.company_id.name, self.company_id.id)) @@ -505,7 +506,7 @@ class SaleOrder(models.Model): 'team_id': self.team_id.id, 'partner_id': self.partner_invoice_id.id, 'partner_shipping_id': self.partner_shipping_id.id, - 'fiscal_position_id': self.fiscal_position_id.id or self.partner_invoice_id.property_account_position_id.id, + 'fiscal_position_id': (self.fiscal_position_id or self.fiscal_position_id.get_fiscal_position(self.partner_invoice_id.id)).id, 'invoice_origin': self.name, 'invoice_payment_term_id': self.payment_term_id.id, 'invoice_payment_ref': self.reference, @@ -1084,9 +1085,10 @@ class SaleOrderLine(models.Model): def _compute_tax_id(self): for line in self: - fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.property_account_position_id + line = line.with_company(line.company_id) + fpos = line.order_id.fiscal_position_id or line.order_id.fiscal_position_id.get_fiscal_position(line.order_partner_id.id) # If company_id is set, always filter taxes by the company - taxes = line.product_id.taxes_id.filtered(lambda r: not line.company_id or r.company_id == line.company_id) + taxes = line.product_id.taxes_id.filtered(lambda t: t.company_id == line.env.company) line.tax_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_shipping_id) @api.model diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py index d009fe3c4c5..ab1a74703c7 100644 --- a/addons/sale/wizard/sale_make_invoice_advance.py +++ b/addons/sale/wizard/sale_make_invoice_advance.py @@ -85,7 +85,7 @@ class SaleAdvancePaymentInv(models.TransientModel): 'invoice_user_id': order.user_id.id, 'narration': order.note, 'partner_id': order.partner_invoice_id.id, - 'fiscal_position_id': order.fiscal_position_id.id or order.partner_id.property_account_position_id.id, + 'fiscal_position_id': (order.fiscal_position_id or order.fiscal_position_id.get_fiscal_position(order.partner_id.id)).id, 'partner_shipping_id': order.partner_shipping_id.id, 'currency_id': order.pricelist_id.currency_id.id, 'invoice_payment_ref': order.client_order_ref, diff --git a/addons/sale_coupon/models/sale_order.py b/addons/sale_coupon/models/sale_order.py index 9447119da95..f6b953cdaef 100644 --- a/addons/sale_coupon/models/sale_order.py +++ b/addons/sale_coupon/models/sale_order.py @@ -418,7 +418,8 @@ class SaleOrderLine(models.Model): # as the product is the generic discount line. # In case of a free product, retrieving the tax on the line instead of the product won't affect the behavior. for line in reward_lines: - fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.property_account_position_id + line = line.with_company(line.company_id) + fpos = line.order_id.fiscal_position_id or line.order_id.fiscal_position_id.get_fiscal_position(line.order_partner_id.id) # If company_id is set, always filter taxes by the company taxes = line.tax_id.filtered(lambda r: not line.company_id or r.company_id == line.company_id) line.tax_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_shipping_id) diff --git a/addons/sale_purchase/models/sale_order.py b/addons/sale_purchase/models/sale_order.py index 1219d3660c7..f9bd52bcd2a 100644 --- a/addons/sale_purchase/models/sale_order.py +++ b/addons/sale_purchase/models/sale_order.py @@ -177,7 +177,7 @@ class SaleOrderLine(models.Model): self.ensure_one() self = self.with_company(self.company_id) partner_supplier = supplierinfo.name - fiscal_position_id = self.env['account.fiscal.position'].sudo().get_fiscal_position(partner_supplier.id) + fpos = self.env['account.fiscal.position'].sudo().get_fiscal_position(partner_supplier.id) date_order = self._purchase_get_date_order(supplierinfo) return { 'partner_id': partner_supplier.id, @@ -188,7 +188,7 @@ class SaleOrderLine(models.Model): 'origin': self.order_id.name, 'payment_term_id': partner_supplier.property_supplier_payment_term_id.id, 'date_order': date_order, - 'fiscal_position_id': fiscal_position_id, + 'fiscal_position_id': fpos.id, } def _purchase_service_prepare_line_values(self, purchase_order, quantity=False): diff --git a/addons/website_sale/models/product.py b/addons/website_sale/models/product.py index 1426237f595..6ca5d0e5314 100644 --- a/addons/website_sale/models/product.py +++ b/addons/website_sale/models/product.py @@ -277,8 +277,9 @@ class ProductTemplate(models.Model): company_id = current_website.company_id product = self.env['product.product'].browse(combination_info['product_id']) or self - tax_display = self.env.user.has_group('account.group_show_line_subtotals_tax_excluded') and 'total_excluded' or 'total_included' - taxes = partner.property_account_position_id.map_tax(product.sudo().taxes_id.filtered(lambda x: x.company_id == company_id), product, partner) + tax_display = self.user_has_groups('account.group_show_line_subtotals_tax_excluded') and 'total_excluded' or 'total_included' + fpos = self.env['account.fiscal.position'].get_fiscal_position(partner.id) + taxes = fpos.map_tax(product.sudo().taxes_id.filtered(lambda x: x.company_id == company_id), product, partner) # The list_price is always the price of one. quantity_1 = 1 |
