From 44d8e4b487dbdf7434c9bb08b370040218a47c80 Mon Sep 17 00:00:00 2001 From: rap-odoo Date: Thu, 3 Sep 2015 15:55:44 +0530 Subject: [PATCH 1/4] [REF] account_analytic_default: move files in proper folder --- addons/account_analytic_default/__init__.py | 2 +- addons/account_analytic_default/__openerp__.py | 8 +++----- addons/account_analytic_default/models/__init__.py | 4 ++++ .../{ => models}/account_analytic_default.py | 0 .../{ => views}/account_analytic_default_view.xml | 0 5 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 addons/account_analytic_default/models/__init__.py rename addons/account_analytic_default/{ => models}/account_analytic_default.py (100%) rename addons/account_analytic_default/{ => views}/account_analytic_default_view.xml (100%) diff --git a/addons/account_analytic_default/__init__.py b/addons/account_analytic_default/__init__.py index 5bad4cb1c6f..81fc81d29c9 100644 --- a/addons/account_analytic_default/__init__.py +++ b/addons/account_analytic_default/__init__.py @@ -1,4 +1,4 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import account_analytic_default +import models diff --git a/addons/account_analytic_default/__openerp__.py b/addons/account_analytic_default/__openerp__.py index 5862c840e8e..a8420228fdd 100644 --- a/addons/account_analytic_default/__openerp__.py +++ b/addons/account_analytic_default/__openerp__.py @@ -20,11 +20,9 @@ Allows to automatically select analytic accounts based on criterions: 'website': 'https://www.odoo.com/page/accounting', 'depends': ['sale_stock'], 'data': [ - 'security/ir.model.access.csv', - 'security/account_analytic_default_security.xml', - 'account_analytic_default_view.xml' + 'security/ir.model.access.csv', + 'security/account_analytic_default_security.xml', + 'views/account_analytic_default_view.xml' ], - 'demo': [], 'installable': True, - 'auto_install': False, } diff --git a/addons/account_analytic_default/models/__init__.py b/addons/account_analytic_default/models/__init__.py new file mode 100644 index 00000000000..5bad4cb1c6f --- /dev/null +++ b/addons/account_analytic_default/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import account_analytic_default diff --git a/addons/account_analytic_default/account_analytic_default.py b/addons/account_analytic_default/models/account_analytic_default.py similarity index 100% rename from addons/account_analytic_default/account_analytic_default.py rename to addons/account_analytic_default/models/account_analytic_default.py diff --git a/addons/account_analytic_default/account_analytic_default_view.xml b/addons/account_analytic_default/views/account_analytic_default_view.xml similarity index 100% rename from addons/account_analytic_default/account_analytic_default_view.xml rename to addons/account_analytic_default/views/account_analytic_default_view.xml From f51fd9ac8f8c80d4964a03874b4cf285dc9960b9 Mon Sep 17 00:00:00 2001 From: rap-odoo Date: Tue, 8 Dec 2015 18:45:05 +0530 Subject: [PATCH 2/4] [IMP] account_analytic_default: split files KISS --- .../account_analytic_default/__openerp__.py | 3 +- .../models/__init__.py | 3 + .../models/account_analytic_default.py | 75 ------------------- .../models/product.py | 42 +++++++++++ .../models/sale_order_line.py | 19 +++++ .../account_analytic_default/models/stock.py | 33 ++++++++ .../views/account_analytic_default_view.xml | 27 ------- .../views/product_views.xml | 33 ++++++++ 8 files changed, 132 insertions(+), 103 deletions(-) create mode 100644 addons/account_analytic_default/models/product.py create mode 100644 addons/account_analytic_default/models/sale_order_line.py create mode 100644 addons/account_analytic_default/models/stock.py create mode 100644 addons/account_analytic_default/views/product_views.xml diff --git a/addons/account_analytic_default/__openerp__.py b/addons/account_analytic_default/__openerp__.py index a8420228fdd..0b2191ea1c3 100644 --- a/addons/account_analytic_default/__openerp__.py +++ b/addons/account_analytic_default/__openerp__.py @@ -22,7 +22,8 @@ Allows to automatically select analytic accounts based on criterions: 'data': [ 'security/ir.model.access.csv', 'security/account_analytic_default_security.xml', - 'views/account_analytic_default_view.xml' + 'views/account_analytic_default_view.xml', + 'views/product_views.xml' ], 'installable': True, } diff --git a/addons/account_analytic_default/models/__init__.py b/addons/account_analytic_default/models/__init__.py index 5bad4cb1c6f..0d3512e12fc 100644 --- a/addons/account_analytic_default/models/__init__.py +++ b/addons/account_analytic_default/models/__init__.py @@ -2,3 +2,6 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import account_analytic_default +import stock +import sale_order_line +import product \ No newline at end of file diff --git a/addons/account_analytic_default/models/account_analytic_default.py b/addons/account_analytic_default/models/account_analytic_default.py index 66fed7ceb4a..c990f0eeba4 100644 --- a/addons/account_analytic_default/models/account_analytic_default.py +++ b/addons/account_analytic_default/models/account_analytic_default.py @@ -69,78 +69,3 @@ class account_invoice_line(osv.osv): else: self.account_analytic_id = False return res - - -class stock_picking(osv.osv): - _inherit = "stock.picking" - - def _get_account_analytic_invoice(self, cursor, user, picking, move_line): - partner_id = picking.partner_id and picking.partner_id.id or False - rec = self.pool.get('account.analytic.default').account_get(cursor, user, move_line.product_id.id, partner_id, user, time.strftime('%Y-%m-%d')) - - if rec: - return rec.analytic_id.id - - return super(stock_picking, self)._get_account_analytic_invoice(cursor, user, picking, move_line) - - -class sale_order_line(osv.osv): - _inherit = "sale.order.line" - - @api.multi - def _prepare_invoice_line(self, qty): - res = super(sale_order_line, self)._prepare_invoice_line(qty) - default_analytic_account = self.env['account.analytic.default'].account_get(self.product_id.id, self.order_id.partner_id.id, self.order_id.user_id.id, time.strftime('%Y-%m-%d')) - if default_analytic_account: - res.update({'account_analytic_id': default_analytic_account.analytic_id.id}) - return res - - -class product_product(osv.Model): - _inherit = 'product.product' - def _rules_count(self, cr, uid, ids, field_name, arg, context=None): - Analytic = self.pool['account.analytic.default'] - return { - product_id: Analytic.search_count(cr, uid, [('product_id', '=', product_id)], context=context) - for product_id in ids - } - _columns = { - 'rules_count': fields.function(_rules_count, string='# Analytic Rules', type='integer'), - } - - -class product_template(osv.Model): - _inherit = 'product.template' - - def _rules_count(self, cr, uid, ids, field_name, arg, context=None): - res = {} - for product_tmpl_id in self.browse(cr, uid, ids, context=context): - res[product_tmpl_id.id] = sum([p.rules_count for p in product_tmpl_id.product_variant_ids]) - return res - - _columns = { - 'rules_count': fields.function(_rules_count, string='# Analytic Rules', type='integer'), - } - - - def action_view_rules(self, cr, uid, ids, context=None): - products = self._get_products(cr, uid, ids, context=context) - result = self._get_act_window_dict(cr, uid, 'account_analytic_default.action_product_default_list', context=context) - result['domain'] = "[('product_id','in',[" + ','.join(map(str, products)) + "])]" - # Remove context so it is not going to filter on product_id with active_id of template - result['context'] = "{}" - return result - - -class stock_move(osv.Model): - _inherit = 'stock.move' - - def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, context=None): - # It will set the default analtyic account on the invoice line - partner_id = self.pool['account.invoice'].browse(cr, uid, invoice_line_vals.get('invoice_id'), context=context).partner_id.id - if 'account_analytic_id' not in invoice_line_vals or not invoice_line_vals.get('account_analytic_id'): - rec = self.pool['account.analytic.default'].account_get(cr, uid, move.product_id.id, partner_id, uid, time.strftime('%Y-%m-%d'), company_id=move.company_id.id, context=context) - if rec: - invoice_line_vals.update({'account_analytic_id': rec.analytic_id.id}) - res = super(stock_move, self)._create_invoice_line_from_vals(cr, uid, move, invoice_line_vals, context=context) - return res diff --git a/addons/account_analytic_default/models/product.py b/addons/account_analytic_default/models/product.py new file mode 100644 index 00000000000..261d47706e2 --- /dev/null +++ b/addons/account_analytic_default/models/product.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from openerp.osv import fields, osv + + +class product_product(osv.Model): + _inherit = 'product.product' + + def _rules_count(self, cr, uid, ids, field_name, arg, context=None): + Analytic = self.pool['account.analytic.default'] + return { + product_id: Analytic.search_count(cr, uid, [('product_id', '=', product_id)], context=context) + for product_id in ids + } + _columns = { + 'rules_count': fields.function(_rules_count, string='# Analytic Rules', type='integer'), + } + + +class product_template(osv.Model): + _inherit = 'product.template' + + def _rules_count(self, cr, uid, ids, field_name, arg, context=None): + Analytic = self.pool['account.analytic.default'] + res = {} + for product_tmpl_id in self.browse(cr, uid, ids, context=context): + res[product_tmpl_id.id] = sum([p.rules_count for p in product_tmpl_id.product_variant_ids]) + return res + + _columns = { + 'rules_count': fields.function(_rules_count, string='# Analytic Rules', type='integer'), + } + + + def action_view_rules(self, cr, uid, ids, context=None): + products = self._get_products(cr, uid, ids, context=context) + result = self._get_act_window_dict(cr, uid, 'account_analytic_default.action_product_default_list', context=context) + result['domain'] = "[('product_id','in',[" + ','.join(map(str, products)) + "])]" + # Remove context so it is not going to filter on product_id with active_id of template + result['context'] = "{}" + return result diff --git a/addons/account_analytic_default/models/sale_order_line.py b/addons/account_analytic_default/models/sale_order_line.py new file mode 100644 index 00000000000..34cacad219c --- /dev/null +++ b/addons/account_analytic_default/models/sale_order_line.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import time + +from openerp.osv import osv +from openerp import api + + +class sale_order_line(osv.osv): + _inherit = "sale.order.line" + + @api.multi + def _prepare_invoice_line(self, qty): + res = super(sale_order_line, self)._prepare_invoice_line(qty) + default_analytic_account = self.env['account.analytic.default'].account_get(self.product_id.id, self.order_id.partner_id.id, self.order_id.user_id.id, time.strftime('%Y-%m-%d')) + if default_analytic_account: + res.update({'account_analytic_id': default_analytic_account.analytic_id.id}) + return res diff --git a/addons/account_analytic_default/models/stock.py b/addons/account_analytic_default/models/stock.py new file mode 100644 index 00000000000..7a8f0df645f --- /dev/null +++ b/addons/account_analytic_default/models/stock.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import time + +from openerp.osv import osv + + +class stock_picking(osv.osv): + _inherit = "stock.picking" + + def _get_account_analytic_invoice(self, cursor, user, picking, move_line): + partner_id = picking.partner_id and picking.partner_id.id or False + rec = self.pool.get('account.analytic.default').account_get(cursor, user, move_line.product_id.id, partner_id, user, time.strftime('%Y-%m-%d')) + + if rec: + return rec.analytic_id.id + + return super(stock_picking, self)._get_account_analytic_invoice(cursor, user, picking, move_line) + + +class stock_move(osv.Model): + _inherit = 'stock.move' + + def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, context=None): + # It will set the default analtyic account on the invoice line + partner_id = self.pool['account.invoice'].browse(cr, uid, invoice_line_vals.get('invoice_id'), context=context).partner_id.id + if 'account_analytic_id' not in invoice_line_vals or not invoice_line_vals.get('account_analytic_id'): + rec = self.pool['account.analytic.default'].account_get(cr, uid, move.product_id.id, partner_id, uid, time.strftime('%Y-%m-%d'), company_id=move.company_id.id, context=context) + if rec: + invoice_line_vals.update({'account_analytic_id': rec.analytic_id.id}) + res = super(stock_move, self)._create_invoice_line_from_vals(cr, uid, move, invoice_line_vals, context=context) + return res diff --git a/addons/account_analytic_default/views/account_analytic_default_view.xml b/addons/account_analytic_default/views/account_analytic_default_view.xml index a167e9f2f80..5dd9273454b 100644 --- a/addons/account_analytic_default/views/account_analytic_default_view.xml +++ b/addons/account_analytic_default/views/account_analytic_default_view.xml @@ -74,33 +74,6 @@ account.analytic.default {'search_default_product_id': [active_id], 'default_product_id': active_id} - - product.product.stock.move - product.product - - -
- -
-
-
- - - product.template.stock.move - product.template - - -
- -
-
-
+ + + + product.product.stock.move + product.product + + +
+ +
+
+
+ + + product.template.stock.move + product.template + + +
+ +
+
+
+ +
+
From 05a3e91487d3e8c3d183605b388f1f7fcd78d081 Mon Sep 17 00:00:00 2001 From: rap-odoo Date: Wed, 9 Dec 2015 10:49:51 +0530 Subject: [PATCH 3/4] [IMP] account_analytic_default: remove dead code No longer called, removed in accounting refactoring --- .../models/__init__.py | 1 - .../account_analytic_default/models/stock.py | 33 ------------------- 2 files changed, 34 deletions(-) delete mode 100644 addons/account_analytic_default/models/stock.py diff --git a/addons/account_analytic_default/models/__init__.py b/addons/account_analytic_default/models/__init__.py index 0d3512e12fc..3f4f37d4824 100644 --- a/addons/account_analytic_default/models/__init__.py +++ b/addons/account_analytic_default/models/__init__.py @@ -2,6 +2,5 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import account_analytic_default -import stock import sale_order_line import product \ No newline at end of file diff --git a/addons/account_analytic_default/models/stock.py b/addons/account_analytic_default/models/stock.py deleted file mode 100644 index 7a8f0df645f..00000000000 --- a/addons/account_analytic_default/models/stock.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -import time - -from openerp.osv import osv - - -class stock_picking(osv.osv): - _inherit = "stock.picking" - - def _get_account_analytic_invoice(self, cursor, user, picking, move_line): - partner_id = picking.partner_id and picking.partner_id.id or False - rec = self.pool.get('account.analytic.default').account_get(cursor, user, move_line.product_id.id, partner_id, user, time.strftime('%Y-%m-%d')) - - if rec: - return rec.analytic_id.id - - return super(stock_picking, self)._get_account_analytic_invoice(cursor, user, picking, move_line) - - -class stock_move(osv.Model): - _inherit = 'stock.move' - - def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, context=None): - # It will set the default analtyic account on the invoice line - partner_id = self.pool['account.invoice'].browse(cr, uid, invoice_line_vals.get('invoice_id'), context=context).partner_id.id - if 'account_analytic_id' not in invoice_line_vals or not invoice_line_vals.get('account_analytic_id'): - rec = self.pool['account.analytic.default'].account_get(cr, uid, move.product_id.id, partner_id, uid, time.strftime('%Y-%m-%d'), company_id=move.company_id.id, context=context) - if rec: - invoice_line_vals.update({'account_analytic_id': rec.analytic_id.id}) - res = super(stock_move, self)._create_invoice_line_from_vals(cr, uid, move, invoice_line_vals, context=context) - return res From 9b389465293a2fb8dd89f59609bf9cc709d5ce48 Mon Sep 17 00:00:00 2001 From: rap-odoo Date: Tue, 8 Dec 2015 18:56:35 +0530 Subject: [PATCH 4/4] [REF] account_analytic_default: migration to new API --- .../models/__init__.py | 2 +- .../models/account_analytic_default.py | 52 ++++++++----------- .../models/product.py | 43 ++++++--------- .../models/sale_order_line.py | 11 ++-- .../account_analytic_default_security.xml | 4 +- .../views/account_analytic_default_view.xml | 10 ++-- .../views/product_views.xml | 41 +++++++-------- 7 files changed, 69 insertions(+), 94 deletions(-) diff --git a/addons/account_analytic_default/models/__init__.py b/addons/account_analytic_default/models/__init__.py index 3f4f37d4824..a5fdeb9e671 100644 --- a/addons/account_analytic_default/models/__init__.py +++ b/addons/account_analytic_default/models/__init__.py @@ -3,4 +3,4 @@ import account_analytic_default import sale_order_line -import product \ No newline at end of file +import product diff --git a/addons/account_analytic_default/models/account_analytic_default.py b/addons/account_analytic_default/models/account_analytic_default.py index c990f0eeba4..68142ca8983 100644 --- a/addons/account_analytic_default/models/account_analytic_default.py +++ b/addons/account_analytic_default/models/account_analytic_default.py @@ -1,32 +1,30 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import time +from odoo import api, fields, models -from openerp.osv import fields, osv -from openerp import api -class account_analytic_default(osv.osv): +class AccountAnalyticDefault(models.Model): _name = "account.analytic.default" _description = "Analytic Distribution" _rec_name = "analytic_id" _order = "sequence" - _columns = { - 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of analytic distribution"), - 'analytic_id': fields.many2one('account.analytic.account', 'Analytic Account', domain=[('account_type', '=', 'normal')]), - 'product_id': fields.many2one('product.product', 'Product', ondelete='cascade', help="Select a product which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)"), - 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade', help="Select a partner which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this partner, it will automatically take this as an analytic account)"), - 'user_id': fields.many2one('res.users', 'User', ondelete='cascade', help="Select a user which will use analytic account specified in analytic default."), - 'company_id': fields.many2one('res.company', 'Company', ondelete='cascade', help="Select a company which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this company, it will automatically take this as an analytic account)"), - 'date_start': fields.date('Start Date', help="Default start date for this Analytic Account."), - 'date_stop': fields.date('End Date', help="Default end date for this Analytic Account."), - } - def account_get(self, cr, uid, product_id=None, partner_id=None, user_id=None, date=None, company_id=None, context=None): + sequence = fields.Integer(string='Sequence', help="Gives the sequence order when displaying a list of analytic distribution") + analytic_id = fields.Many2one('account.analytic.account', string='Analytic Account', domain=[('account_type', '=', 'normal')]) + product_id = fields.Many2one('product.product', string='Product', ondelete='cascade', help="Select a product which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this product, it will automatically take this as an analytic account)") + partner_id = fields.Many2one('res.partner', string='Partner', ondelete='cascade', help="Select a partner which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this partner, it will automatically take this as an analytic account)") + user_id = fields.Many2one('res.users', string='User', ondelete='cascade', help="Select a user which will use analytic account specified in analytic default.") + company_id = fields.Many2one('res.company', string='Company', ondelete='cascade', help="Select a company which will use analytic account specified in analytic default (e.g. create new customer invoice or Sales order if we select this company, it will automatically take this as an analytic account)") + date_start = fields.Date(string='Start Date', help="Default start date for this Analytic Account.") + date_stop = fields.Date(string='End Date', help="Default end date for this Analytic Account.") + + @api.model + def account_get(self, product_id=None, partner_id=None, user_id=None, date=None, company_id=None): domain = [] if product_id: domain += ['|', ('product_id', '=', product_id)] - domain += [('product_id','=', False)] + domain += [('product_id', '=', False)] if partner_id: domain += ['|', ('partner_id', '=', partner_id)] domain += [('partner_id', '=', False)] @@ -34,14 +32,14 @@ class account_analytic_default(osv.osv): domain += ['|', ('company_id', '=', company_id)] domain += [('company_id', '=', False)] if user_id: - domain += ['|',('user_id', '=', user_id)] - domain += [('user_id','=', False)] + domain += ['|', ('user_id', '=', user_id)] + domain += [('user_id', '=', False)] if date: domain += ['|', ('date_start', '<=', date), ('date_start', '=', False)] domain += ['|', ('date_stop', '>=', date), ('date_stop', '=', False)] best_index = -1 - res = False - for rec in self.browse(cr, uid, self.search(cr, uid, domain, context=context), context=context): + res = self.env['account.analytic.default'] + for rec in self.search(domain): index = 0 if rec.product_id: index += 1 if rec.partner_id: index += 1 @@ -55,17 +53,13 @@ class account_analytic_default(osv.osv): return res -class account_invoice_line(osv.osv): +class AccountInvoiceLine(models.Model): _inherit = "account.invoice.line" - _description = "Invoice Line" @api.onchange('product_id') def _onchange_product_id(self): - res = super(account_invoice_line, self)._onchange_product_id() - rec = self.env['account.analytic.default'].account_get(self.product_id.id, self.invoice_id.partner_id.id, self._uid, - time.strftime('%Y-%m-%d'), company_id=self.company_id.id, context=self._context) - if rec: - self.account_analytic_id = rec.analytic_id.id - else: - self.account_analytic_id = False + res = super(AccountInvoiceLine, self)._onchange_product_id() + rec = self.env['account.analytic.default'].account_get(self.product_id.id, self.invoice_id.partner_id.id, self.env.uid, + fields.Date.today(), company_id=self.company_id.id) + self.account_analytic_id = rec.analytic_id.id return res diff --git a/addons/account_analytic_default/models/product.py b/addons/account_analytic_default/models/product.py index 261d47706e2..69c96316ac4 100644 --- a/addons/account_analytic_default/models/product.py +++ b/addons/account_analytic_default/models/product.py @@ -1,42 +1,33 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from openerp.osv import fields, osv +from odoo import api, fields, models -class product_product(osv.Model): +class ProductProduct(models.Model): _inherit = 'product.product' - def _rules_count(self, cr, uid, ids, field_name, arg, context=None): - Analytic = self.pool['account.analytic.default'] - return { - product_id: Analytic.search_count(cr, uid, [('product_id', '=', product_id)], context=context) - for product_id in ids - } - _columns = { - 'rules_count': fields.function(_rules_count, string='# Analytic Rules', type='integer'), - } + rules_count = fields.Integer(compute='_compute_rules_count', string='# Analytic Rules') + + def _compute_rules_count(self): + Analytic = self.env['account.analytic.default'] + for product in self: + product.rules_count = Analytic.search_count([('product_id', '=', product.id)]) -class product_template(osv.Model): +class ProductTemplate(models.Model): _inherit = 'product.template' - def _rules_count(self, cr, uid, ids, field_name, arg, context=None): - Analytic = self.pool['account.analytic.default'] - res = {} - for product_tmpl_id in self.browse(cr, uid, ids, context=context): - res[product_tmpl_id.id] = sum([p.rules_count for p in product_tmpl_id.product_variant_ids]) - return res + rules_count = fields.Integer(compute='_compute_rules_count', string='# Analytic Rules') - _columns = { - 'rules_count': fields.function(_rules_count, string='# Analytic Rules', type='integer'), - } + def _compute_rules_count(self): + for template in self: + self.rules_count = sum([p.rules_count for p in template.product_variant_ids]) - - def action_view_rules(self, cr, uid, ids, context=None): - products = self._get_products(cr, uid, ids, context=context) - result = self._get_act_window_dict(cr, uid, 'account_analytic_default.action_product_default_list', context=context) - result['domain'] = "[('product_id','in',[" + ','.join(map(str, products)) + "])]" + @api.multi + def action_view_rules(self): + result = self._get_act_window_dict('account_analytic_default.action_product_default_list') + result['domain'] = "[('product_id','in',[" + ','.join(map(str, self._get_products())) + "])]" # Remove context so it is not going to filter on product_id with active_id of template result['context'] = "{}" return result diff --git a/addons/account_analytic_default/models/sale_order_line.py b/addons/account_analytic_default/models/sale_order_line.py index 34cacad219c..9997f9ba1cd 100644 --- a/addons/account_analytic_default/models/sale_order_line.py +++ b/addons/account_analytic_default/models/sale_order_line.py @@ -1,19 +1,16 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -import time - -from openerp.osv import osv -from openerp import api +from odoo import api, fields, models -class sale_order_line(osv.osv): +class SaleOrderLine(models.Model): _inherit = "sale.order.line" @api.multi def _prepare_invoice_line(self, qty): - res = super(sale_order_line, self)._prepare_invoice_line(qty) - default_analytic_account = self.env['account.analytic.default'].account_get(self.product_id.id, self.order_id.partner_id.id, self.order_id.user_id.id, time.strftime('%Y-%m-%d')) + res = super(SaleOrderLine, self)._prepare_invoice_line(qty) + default_analytic_account = self.env['account.analytic.default'].account_get(self.product_id.id, self.order_id.partner_id.id, self.order_id.user_id.id, fields.Date.today()) if default_analytic_account: res.update({'account_analytic_id': default_analytic_account.analytic_id.id}) return res diff --git a/addons/account_analytic_default/security/account_analytic_default_security.xml b/addons/account_analytic_default/security/account_analytic_default_security.xml index cdce2a9955e..5183a7fb2d9 100644 --- a/addons/account_analytic_default/security/account_analytic_default_security.xml +++ b/addons/account_analytic_default/security/account_analytic_default_security.xml @@ -1,5 +1,5 @@ - + @@ -10,4 +10,4 @@ - + diff --git a/addons/account_analytic_default/views/account_analytic_default_view.xml b/addons/account_analytic_default/views/account_analytic_default_view.xml index 5dd9273454b..c08a18743a2 100644 --- a/addons/account_analytic_default/views/account_analytic_default_view.xml +++ b/addons/account_analytic_default/views/account_analytic_default_view.xml @@ -1,6 +1,5 @@ - - + account.analytic.default.tree account.analytic.default @@ -83,9 +82,8 @@ context="{'search_default_account_id': [active_id], 'default_account_id': active_id}" /> - @@ -104,6 +102,4 @@ src_model="res.users" context="{'search_default_user_id': [active_id], 'default_user_id': active_id}" groups="analytic.group_analytic_accounting"/> - - - + diff --git a/addons/account_analytic_default/views/product_views.xml b/addons/account_analytic_default/views/product_views.xml index eb47f4637e8..d2ccb74361d 100644 --- a/addons/account_analytic_default/views/product_views.xml +++ b/addons/account_analytic_default/views/product_views.xml @@ -1,33 +1,30 @@ - - - - product.product.stock.move + + + product.product.inherit.rules_count product.product
- -
-
-
- - - product.template.stock.move - product.template - - -
-
-
-
+ + product.template.inherit.rules_count + product.template + + +
+ +
+
+
+