summaryrefslogtreecommitdiff
path: root/addons/account/models/product.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/account/models/product.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/account/models/product.py')
-rw-r--r--addons/account/models/product.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/addons/account/models/product.py b/addons/account/models/product.py
new file mode 100644
index 00000000..14db12e4
--- /dev/null
+++ b/addons/account/models/product.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+
+from odoo import api, fields, models, _
+
+ACCOUNT_DOMAIN = "['&', '&', '&', ('deprecated', '=', False), ('internal_type','=','other'), ('company_id', '=', current_company_id), ('is_off_balance', '=', False)]"
+
+class ProductCategory(models.Model):
+ _inherit = "product.category"
+
+ property_account_income_categ_id = fields.Many2one('account.account', company_dependent=True,
+ string="Income Account",
+ domain=ACCOUNT_DOMAIN,
+ help="This account will be used when validating a customer invoice.")
+ property_account_expense_categ_id = fields.Many2one('account.account', company_dependent=True,
+ string="Expense Account",
+ domain=ACCOUNT_DOMAIN,
+ help="The expense is accounted for when a vendor bill is validated, except in anglo-saxon accounting with perpetual inventory valuation in which case the expense (Cost of Goods Sold account) is recognized at the customer invoice validation.")
+
+#----------------------------------------------------------
+# Products
+#----------------------------------------------------------
+class ProductTemplate(models.Model):
+ _inherit = "product.template"
+
+ taxes_id = fields.Many2many('account.tax', 'product_taxes_rel', 'prod_id', 'tax_id', help="Default taxes used when selling the product.", string='Customer Taxes',
+ domain=[('type_tax_use', '=', 'sale')], default=lambda self: self.env.company.account_sale_tax_id)
+ supplier_taxes_id = fields.Many2many('account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id', string='Vendor Taxes', help='Default taxes used when buying the product.',
+ domain=[('type_tax_use', '=', 'purchase')], default=lambda self: self.env.company.account_purchase_tax_id)
+ property_account_income_id = fields.Many2one('account.account', company_dependent=True,
+ string="Income Account",
+ domain=ACCOUNT_DOMAIN,
+ help="Keep this field empty to use the default value from the product category.")
+ property_account_expense_id = fields.Many2one('account.account', company_dependent=True,
+ string="Expense Account",
+ domain=ACCOUNT_DOMAIN,
+ help="Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.")
+
+ def _get_product_accounts(self):
+ return {
+ 'income': self.property_account_income_id or self.categ_id.property_account_income_categ_id,
+ 'expense': self.property_account_expense_id or self.categ_id.property_account_expense_categ_id
+ }
+
+ def _get_asset_accounts(self):
+ res = {}
+ res['stock_input'] = False
+ res['stock_output'] = False
+ return res
+
+ def get_product_accounts(self, fiscal_pos=None):
+ accounts = self._get_product_accounts()
+ if not fiscal_pos:
+ fiscal_pos = self.env['account.fiscal.position']
+ return fiscal_pos.map_accounts(accounts)
+
+
+class ProductProduct(models.Model):
+ _inherit = "product.product"
+
+ def _get_product_accounts(self):
+ return self.product_tmpl_id._get_product_accounts()