369 lines
11 KiB
Python
369 lines
11 KiB
Python
|
import logging
|
||
|
from odoo import api, fields, models, _
|
||
|
|
||
|
_logger = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
class ResConfigSettings(models.TransientModel):
|
||
|
_inherit = 'res.config.settings'
|
||
|
|
||
|
def remove_data(self, o, s=[]):
|
||
|
for line in o:
|
||
|
try:
|
||
|
if not self.env['ir.model']._get(line):
|
||
|
continue
|
||
|
except Exception as e:
|
||
|
_logger.warning('remove data error get ir.model: %s,%s', line, e)
|
||
|
continue
|
||
|
obj_name = line
|
||
|
obj = self.pool.get(obj_name)
|
||
|
if not obj:
|
||
|
t_name = obj_name.replace('.', '_')
|
||
|
else:
|
||
|
t_name = obj._table
|
||
|
sql = "delete from %s" % t_name
|
||
|
try:
|
||
|
self._cr.execute(sql)
|
||
|
self._cr.commit()
|
||
|
except Exception as e:
|
||
|
_logger.warning('remove data error: %s,%s', line, e)
|
||
|
for line in s:
|
||
|
domain = ['|', ('code', '=ilike', line + '%'), ('prefix', '=ilike', line + '%')]
|
||
|
try:
|
||
|
seqs = self.env['ir.sequence'].sudo().search(domain)
|
||
|
if seqs.exists():
|
||
|
seqs.write({
|
||
|
'number_next': 1,
|
||
|
})
|
||
|
except Exception as e:
|
||
|
_logger.warning('reset sequence data error: %s,%s', line, e)
|
||
|
return True
|
||
|
|
||
|
def remove_sales(self):
|
||
|
to_removes = [
|
||
|
'sale.order.line',
|
||
|
'sale.order',
|
||
|
]
|
||
|
seqs = [
|
||
|
'sale',
|
||
|
]
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_product(self):
|
||
|
to_removes = [
|
||
|
'product.product',
|
||
|
'product.template',
|
||
|
]
|
||
|
seqs = [
|
||
|
'product.product',
|
||
|
]
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_product_attribute(self):
|
||
|
to_removes = [
|
||
|
'product.attribute.value',
|
||
|
'product.attribute',
|
||
|
]
|
||
|
seqs = []
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_pos(self):
|
||
|
to_removes = [
|
||
|
'pos.payment',
|
||
|
'pos.order.line',
|
||
|
'pos.order',
|
||
|
'pos.session',
|
||
|
]
|
||
|
seqs = [
|
||
|
'pos.',
|
||
|
]
|
||
|
res = self.remove_data(to_removes, seqs)
|
||
|
try:
|
||
|
statement = self.env['account.bank.statement'].sudo().search([])
|
||
|
for s in statement:
|
||
|
s._end_balance()
|
||
|
except Exception as e:
|
||
|
_logger.error('reset sequence data error: %s', e)
|
||
|
return res
|
||
|
|
||
|
def remove_purchase(self):
|
||
|
to_removes = [
|
||
|
'purchase.order.line',
|
||
|
'purchase.order',
|
||
|
'purchase.requisition.line',
|
||
|
'purchase.requisition',
|
||
|
]
|
||
|
seqs = [
|
||
|
'purchase.',
|
||
|
]
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_expense(self):
|
||
|
to_removes = [
|
||
|
'hr.expense.sheet',
|
||
|
'hr.expense',
|
||
|
'hr.payslip',
|
||
|
'hr.payslip.run',
|
||
|
]
|
||
|
seqs = [
|
||
|
'hr.expense.',
|
||
|
]
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_mrp(self):
|
||
|
to_removes = [
|
||
|
'mrp.workcenter.productivity',
|
||
|
'mrp.workorder',
|
||
|
'mrp.production.workcenter.line',
|
||
|
'change.production.qty',
|
||
|
'mrp.production',
|
||
|
'mrp.production.product.line',
|
||
|
'mrp.unbuild',
|
||
|
'change.production.qty',
|
||
|
'sale.forecast.indirect',
|
||
|
'sale.forecast',
|
||
|
]
|
||
|
seqs = [
|
||
|
'mrp.',
|
||
|
]
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_mrp_bom(self):
|
||
|
to_removes = [
|
||
|
'mrp.bom.line',
|
||
|
'mrp.bom',
|
||
|
]
|
||
|
seqs = []
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_inventory(self):
|
||
|
to_removes = [
|
||
|
'stock.quant',
|
||
|
'stock.move.line',
|
||
|
'stock.package_level',
|
||
|
'stock.quantity.history',
|
||
|
'stock.quant.package',
|
||
|
'stock.move',
|
||
|
'stock.picking',
|
||
|
'stock.scrap',
|
||
|
'stock.picking.batch',
|
||
|
'stock.inventory.line',
|
||
|
'stock.inventory',
|
||
|
'stock.valuation.layer',
|
||
|
'stock.production.lot',
|
||
|
'procurement.group',
|
||
|
]
|
||
|
seqs = [
|
||
|
'stock.',
|
||
|
'picking.',
|
||
|
'procurement.group',
|
||
|
'product.tracking.default',
|
||
|
'WH/',
|
||
|
]
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_account(self):
|
||
|
to_removes = [
|
||
|
'payment.transaction',
|
||
|
'account.bank.statement.line',
|
||
|
'account.payment',
|
||
|
'account.analytic.line',
|
||
|
'account.analytic.account',
|
||
|
'account.partial.reconcile',
|
||
|
'account.move.line',
|
||
|
'hr.expense.sheet',
|
||
|
'account.move',
|
||
|
]
|
||
|
res = self.remove_data(to_removes, [])
|
||
|
domain = [
|
||
|
('company_id', '=', self.env.company.id),
|
||
|
'|', ('code', '=ilike', 'account.%'),
|
||
|
'|', ('prefix', '=ilike', 'BNK1/%'),
|
||
|
'|', ('prefix', '=ilike', 'CSH1/%'),
|
||
|
'|', ('prefix', '=ilike', 'INV/%'),
|
||
|
'|', ('prefix', '=ilike', 'EXCH/%'),
|
||
|
'|', ('prefix', '=ilike', 'MISC/%'),
|
||
|
'|', ('prefix', '=ilike', '账单/%'),
|
||
|
('prefix', '=ilike', '杂项/%')
|
||
|
]
|
||
|
try:
|
||
|
seqs = self.env['ir.sequence'].search(domain)
|
||
|
if seqs.exists():
|
||
|
seqs.write({
|
||
|
'number_next': 1,
|
||
|
})
|
||
|
except Exception as e:
|
||
|
_logger.error('reset sequence data error: %s,%s', domain, e)
|
||
|
return res
|
||
|
|
||
|
def remove_account_chart(self):
|
||
|
company_id = self.env.company.id
|
||
|
self = self.with_context(force_company=company_id, company_id=company_id)
|
||
|
to_removes = [
|
||
|
'res.partner.bank',
|
||
|
'account.move.line',
|
||
|
'account.invoice',
|
||
|
'account.payment',
|
||
|
'account.bank.statement',
|
||
|
'account.tax.account.tag',
|
||
|
'account.tax',
|
||
|
'account.account.account.tag',
|
||
|
'wizard_multi_charts_accounts',
|
||
|
'account.journal',
|
||
|
'account.account',
|
||
|
]
|
||
|
try:
|
||
|
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) and company_id=%d" \
|
||
|
% (field1, field2, company_id)
|
||
|
sql2 = "update account_journal set bank_account_id=NULL where company_id=%d;" % company_id
|
||
|
self._cr.execute(sql)
|
||
|
self._cr.execute(sql2)
|
||
|
|
||
|
self._cr.commit()
|
||
|
except Exception as e:
|
||
|
_logger.error('remove data error: %s,%s', 'account_chart: set tax and account_journal', e)
|
||
|
if self.env['ir.model']._get('pos.config'):
|
||
|
self.env['pos.config'].write({
|
||
|
'journal_id': False,
|
||
|
})
|
||
|
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:
|
||
|
_logger.error('remove data error: %s,%s', 'account_chart', 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
|
||
|
try:
|
||
|
rec = self.env['product.template'].search([])
|
||
|
for r in rec:
|
||
|
r.write({
|
||
|
'property_account_income_id': None,
|
||
|
'property_account_expense_id': None,
|
||
|
})
|
||
|
except Exception as e:
|
||
|
pass
|
||
|
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
|
||
|
seqs = []
|
||
|
res = self.remove_data(to_removes, seqs)
|
||
|
return res
|
||
|
|
||
|
def remove_project(self):
|
||
|
to_removes = [
|
||
|
'account.analytic.line',
|
||
|
'project.task',
|
||
|
'project.forecast',
|
||
|
'project.project',
|
||
|
]
|
||
|
seqs = []
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_quality(self):
|
||
|
to_removes = [
|
||
|
'quality.check',
|
||
|
'quality.alert',
|
||
|
]
|
||
|
seqs = [
|
||
|
'quality.check',
|
||
|
'quality.alert',
|
||
|
]
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_quality_setting(self):
|
||
|
to_removes = [
|
||
|
'quality.point',
|
||
|
'quality.alert.stage',
|
||
|
'quality.alert.team',
|
||
|
'quality.point.test_type',
|
||
|
'quality.reason',
|
||
|
'quality.tag',
|
||
|
]
|
||
|
return self.remove_data(to_removes)
|
||
|
|
||
|
def remove_website(self):
|
||
|
to_removes = [
|
||
|
'blog.tag.category',
|
||
|
'blog.tag',
|
||
|
'blog.post',
|
||
|
'blog.blog',
|
||
|
'product.wishlist',
|
||
|
'website.published.multi.mixin',
|
||
|
'website.published.mixin',
|
||
|
'website.multi.mixin',
|
||
|
'website.visitor',
|
||
|
'website.redirect',
|
||
|
'website.seo.metadata',
|
||
|
]
|
||
|
seqs = []
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_message(self):
|
||
|
to_removes = [
|
||
|
'mail.message',
|
||
|
'mail.followers',
|
||
|
'mail.activity',
|
||
|
]
|
||
|
seqs = []
|
||
|
return self.remove_data(to_removes, seqs)
|
||
|
|
||
|
def remove_all(self):
|
||
|
self.remove_account()
|
||
|
self.remove_quality()
|
||
|
self.remove_website()
|
||
|
self.remove_quality_setting()
|
||
|
self.remove_inventory()
|
||
|
self.remove_purchase()
|
||
|
self.remove_mrp()
|
||
|
self.remove_sales()
|
||
|
self.remove_project()
|
||
|
self.remove_pos()
|
||
|
self.remove_expense()
|
||
|
self.remove_account_chart()
|
||
|
self.remove_message()
|
||
|
return True
|
||
|
|
||
|
def reset_cat_loc_name(self):
|
||
|
ids = self.env['product.category'].search([
|
||
|
('parent_id', '!=', False)
|
||
|
], order='complete_name')
|
||
|
for rec in ids:
|
||
|
try:
|
||
|
rec._compute_complete_name()
|
||
|
except:
|
||
|
pass
|
||
|
try:
|
||
|
ids = self.env['stock.location'].search([
|
||
|
('location_id', '!=', False),
|
||
|
('usage', '!=', 'views'),
|
||
|
], order='complete_name')
|
||
|
for rec in ids:
|
||
|
rec._compute_complete_name()
|
||
|
except:
|
||
|
pass
|
||
|
return True
|