diff --git a/app_base_chinese/data/ir_default_data.xml b/app_base_chinese/data/ir_default_data.xml index d01324e0..590473a2 100644 --- a/app_base_chinese/data/ir_default_data.xml +++ b/app_base_chinese/data/ir_default_data.xml @@ -7,11 +7,6 @@ - - - - - diff --git a/app_odoo_customize/__manifest__.py b/app_odoo_customize/__manifest__.py index d65ef9d6..5fe8b3b8 100644 --- a/app_odoo_customize/__manifest__.py +++ b/app_odoo_customize/__manifest__.py @@ -23,7 +23,7 @@ { 'name': 'Odoo Customize(Debranding, My Odoo)', - 'version': '13.19.05.30', + 'version': '13.19.09.14', 'author': 'Sunpop.cn', 'category': 'Productivity', 'website': 'https://www.sunpop.cn', @@ -77,7 +77,6 @@ 'base', 'web', 'mail', - 'web_settings_dashboard', 'iap', # 'digest', # when enterprise 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/base_language_install.py b/app_odoo_customize/models/base_language_install.py index 3d2932cc..a3aa5632 100644 --- a/app_odoo_customize/models/base_language_install.py +++ b/app_odoo_customize/models/base_language_install.py @@ -8,7 +8,6 @@ from odoo import api, fields, models, _ class BaseLanguageInstall(models.TransientModel): _inherit = "base.language.install" - @api.multi def lang_install(self): self.ensure_one() if self.overwrite: 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/mail_thread.py b/app_odoo_customize/models/mail_thread.py index a570f7e6..3b1e54d2 100644 --- a/app_odoo_customize/models/mail_thread.py +++ b/app_odoo_customize/models/mail_thread.py @@ -8,7 +8,6 @@ from odoo import api, fields, models, _ class MailThread(models.AbstractModel): _inherit = "mail.thread" - @api.multi def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, force=True): """ 停用订阅功能. """ ir_config = self.env['ir.config_parameter'] @@ -18,7 +17,6 @@ class MailThread(models.AbstractModel): else: return super(MailThread, self).message_subscribe(partner_ids, channel_ids, subtype_ids, force) - @api.multi def message_auto_subscribe(self, updated_fields, values=None): """ 停用订阅功能. """ ir_config = self.env['ir.config_parameter'] @@ -28,7 +26,6 @@ class MailThread(models.AbstractModel): else: return super(MailThread, self).message_auto_subscribe(updated_fields, values) - @api.multi def _message_auto_subscribe_notify(self, partner_ids): """ 停用订阅功能. """ ir_config = self.env['ir.config_parameter'] diff --git a/app_odoo_customize/models/models.py b/app_odoo_customize/models/models.py index f2757a53..86e13476 100644 --- a/app_odoo_customize/models/models.py +++ b/app_odoo_customize/models/models.py @@ -6,7 +6,6 @@ from odoo import models, fields, api class Module(models.Model): _inherit = 'ir.module.module' - @api.multi def module_multi_uninstall(self): """ Perform the various steps required to uninstall a module completely including the deletion of all database structures created by the module: diff --git a/app_odoo_customize/models/res_config_settings.py b/app_odoo_customize/models/res_config_settings.py index 11e5a33a..58d0d7dd 100644 --- a/app_odoo_customize/models/res_config_settings.py +++ b/app_odoo_customize/models/res_config_settings.py @@ -80,7 +80,6 @@ class ResConfigSettings(models.TransientModel): ) return res - @api.multi def set_values(self): super(ResConfigSettings, self).set_values() ir_config = self.env['ir.config_parameter'].sudo() @@ -183,7 +182,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_pos(self): to_removes = [ # 清除POS单据 @@ -203,11 +201,15 @@ 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 - @api.multi def remove_purchase(self): to_removes = [ # 清除采购单据 @@ -237,7 +239,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_expense(self): to_removes = [ # 清除采购单据 @@ -263,7 +264,33 @@ 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 + def remove_mrp(self): to_removes = [ # 清除生产单据 @@ -298,7 +325,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_mrp_bom(self): to_removes = [ # 清除生产BOM @@ -316,7 +342,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_inventory(self): to_removes = [ # 清除库存单据 @@ -367,14 +392,12 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_account(self): to_removes = [ # 清除财务会计单据 ['account.voucher.line', ], ['account.voucher', ], ['account.bank.statement.line', ], - ['account.bank.statement', ], ['account.payment', ], ['account.analytic.line', ], ['account.analytic.account', ], @@ -418,17 +441,66 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi 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,21 +509,15 @@ 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 def remove_project(self): to_removes = [ # 清除项目 @@ -472,7 +538,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_website(self): to_removes = [ # 清除网站数据,w, w_blog @@ -500,7 +565,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_message(self): to_removes = [ # 清除消息数据 @@ -518,7 +582,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_workflow(self): to_removes = [ # 清除工作流 @@ -537,7 +600,6 @@ class ResConfigSettings(models.TransientModel): pass # raise Warning(e) return True - @api.multi def remove_all_biz(self): try: self.remove_account() diff --git a/app_odoo_customize/static/src/js/customize_user_menu.js b/app_odoo_customize/static/src/js/customize_user_menu.js index 149635d1..2a9bde94 100644 --- a/app_odoo_customize/static/src/js/customize_user_menu.js +++ b/app_odoo_customize/static/src/js/customize_user_menu.js @@ -42,7 +42,9 @@ odoo.define('app_odoo_customize.UserMenu', function (require) { + '">' + lang['name'] + a + ''; }); lang_list += '