From 47f13f29d6530a23debcd44ffab83d042da26d0f Mon Sep 17 00:00:00 2001 From: ivan deng Date: Fri, 12 Jul 2019 03:15:55 +0800 Subject: [PATCH] update customize --- app_odoo_customize/models/__init__.py | 1 + app_odoo_customize/models/ir_ui_menu.py | 26 ++++++ .../models/res_config_settings.py | 93 +++++++++++++++++-- 3 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 app_odoo_customize/models/ir_ui_menu.py diff --git a/app_odoo_customize/models/__init__.py b/app_odoo_customize/models/__init__.py index 5bf3fd59..839c37e2 100644 --- a/app_odoo_customize/models/__init__.py +++ b/app_odoo_customize/models/__init__.py @@ -4,4 +4,5 @@ from . import res_config_settings from . import ir_ui_view from . import base_language_install from . import models +# from . import ir_ui_menu # from . import mail_thread diff --git a/app_odoo_customize/models/ir_ui_menu.py b/app_odoo_customize/models/ir_ui_menu.py new file mode 100644 index 00000000..98a32443 --- /dev/null +++ b/app_odoo_customize/models/ir_ui_menu.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- + +import re + +from odoo import api, fields, models, tools, _ + +MENU_ITEM_SEPARATOR = "/" +NUMBER_PARENS = re.compile(r"\(([0-9]+)\)") + + +class IrUiMenu(models.Model): + _inherit = 'ir.ui.menu' + + def _get_full_name(self, level=6): + """ Return the full name of ``self`` (up to a certain level). """ + if level <= 0: + return '...' + if self.parent_id: + try: + name = self.parent_id._get_full_name(level - 1) + MENU_ITEM_SEPARATOR + (self.name or "") + except Exception: + name = self.name or "..." + else: + name = self.name + return name + diff --git a/app_odoo_customize/models/res_config_settings.py b/app_odoo_customize/models/res_config_settings.py index 11e5a33a..d0807fc0 100644 --- a/app_odoo_customize/models/res_config_settings.py +++ b/app_odoo_customize/models/res_config_settings.py @@ -203,6 +203,11 @@ class ResConfigSettings(models.TransientModel): seq.write({ 'number_next': 1, }) + # 更新要关帐的值,因为 store=true 的计算字段要重置 + statement = self.env['account.bank.statement'].search([]) + for s in statement: + s._end_balance() + except Exception as e: pass # raise Warning(e) return True @@ -263,6 +268,34 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True + @api.multi + def remove_expense(self): + to_removes = [ + # 清除 + ['hr.expense.sheet', ], + ['hr.expense', ], + ['hr.payslip', ], + ['hr.payslip.run', ], + ] + try: + for line in to_removes: + obj_name = line[0] + obj = self.pool.get(obj_name) + if obj: + sql = "delete from %s" % obj._table + self._cr.execute(sql) + # 更新序号 + seqs = self.env['ir.sequence'].search([ + ('code', '=', 'hr.expense.invoice')]) + for seq in seqs: + seq.write({ + 'number_next': 1, + }) + self._cr.execute(sql) + except Exception as e: + pass # raise Warning(e) + return True + @api.multi def remove_mrp(self): to_removes = [ @@ -374,7 +407,6 @@ class ResConfigSettings(models.TransientModel): ['account.voucher.line', ], ['account.voucher', ], ['account.bank.statement.line', ], - ['account.bank.statement', ], ['account.payment', ], ['account.analytic.line', ], ['account.analytic.account', ], @@ -422,13 +454,63 @@ class ResConfigSettings(models.TransientModel): def remove_account_chart(self): to_removes = [ # 清除财务科目,用于重设 + ['res.partner.bank', ], + ['res.bank', ], + ['account.move.line'], + ['account.invoice'], + ['account.payment'], + ['account.bank.statement', ], ['account.tax.account.tag', ], ['account.tax', ], + ['account.tax', ], ['account.account.account.tag', ], ['wizard_multi_charts_accounts'], ['account.account', ], ['account.journal', ], ] + # todo: 要做 remove_hr,因为工资表会用到 account + # 更新account关联,很多是多公司字段,故只存在 ir_property,故在原模型,只能用update + try: + # reset default tax,不管多公司 + field1 = self.env['ir.model.fields']._get('product.template', "taxes_id").id + field2 = self.env['ir.model.fields']._get('product.template', "supplier_taxes_id").id + + sql = ("delete from ir_default where field_id = %s or field_id = %s") % (field1, field2) + self._cr.execute(sql) + except Exception as e: + pass # raise Warning(e) + try: + rec = self.env['res.partner'].search([]) + for r in rec: + r.write({ + 'property_account_receivable_id': None, + 'property_account_payable_id': None, + }) + except Exception as e: + pass # raise Warning(e) + try: + rec = self.env['product.category'].search([]) + for r in rec: + r.write({ + 'property_account_income_categ_id': None, + 'property_account_expense_categ_id': None, + 'property_account_creditor_price_difference_categ': None, + 'property_stock_account_input_categ_id': None, + 'property_stock_account_output_categ_id': None, + 'property_stock_valuation_account_id': None, + }) + except Exception as e: + pass # raise Warning(e) + try: + rec = self.env['stock.location'].search([]) + for r in rec: + r.write({ + 'valuation_in_account_id': None, + 'valuation_out_account_id': None, + }) + except Exception as e: + pass # raise Warning(e) + try: for line in to_removes: obj_name = line[0] @@ -437,18 +519,13 @@ class ResConfigSettings(models.TransientModel): sql = "delete from %s" % obj._table self._cr.execute(sql) - # reset default tax,不管多公司 - field1 = self.env['ir.model.fields']._get('product.template', "taxes_id").id - field2 = self.env['ir.model.fields']._get('product.template', "supplier_taxes_id").id - sql = ("delete from ir_default where field_id = %s or field_id = %s") % (field1, field2) - self._cr.execute(sql) - - sql = "update res_company set chart_template_id=null ;" + sql = "update res_company set chart_template_id=null;" self._cr.execute(sql) # 更新序号 except Exception as e: pass + return True @api.multi