You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.2 KiB
83 lines
2.2 KiB
# -*- coding: utf-8 -*-
|
|
# Copyright 2018 Therp BV <https://therp.nl>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
from openerp import api, fields, models, _
|
|
|
|
FIELDS_GDPR = [
|
|
'image',
|
|
'name',
|
|
'street',
|
|
'street2',
|
|
'zip',
|
|
'city',
|
|
'website',
|
|
'function',
|
|
'phone',
|
|
'mobile',
|
|
'fax',
|
|
'email',
|
|
'title',
|
|
'child_ids',
|
|
'comment',
|
|
]
|
|
|
|
|
|
class ResPartnerGdpr(models.TransientModel):
|
|
_name = 'res.partner.gdpr'
|
|
|
|
def _default_fields(self):
|
|
res_partner = self.env['ir.model'].search([
|
|
('model', '=', 'res.partner')])
|
|
return [(6, 0, self.env['ir.model.fields'].search([
|
|
('model_id', '=', res_partner.id),
|
|
('name', 'in', FIELDS_GDPR)]).ids)]
|
|
|
|
partner_ids = fields.Many2many('res.partner')
|
|
fields = fields.Many2many(
|
|
'ir.model.fields',
|
|
default=_default_fields,
|
|
domain=[('model_id.model', '=', 'res.partner')],
|
|
help='Fields to delete data from.',
|
|
)
|
|
|
|
@api.multi
|
|
def _get_remove_text(self):
|
|
return _('*** GDPR removed ***')
|
|
|
|
@api.multi
|
|
def action_gdpr_res_partner_cleanup(self):
|
|
self._pre_gdpr_cleanup()
|
|
self._gdpr_cleanup()
|
|
self._post_gdpr_cleanup()
|
|
|
|
@api.multi
|
|
def _pre_gdpr_cleanup(self):
|
|
if 'child_ids' in self.fields.mapped('name'):
|
|
childs = self.partner_ids.mapped('child_ids')
|
|
all_partners = self.partner_ids | childs
|
|
self.partner_ids = all_partners.ids
|
|
pass
|
|
|
|
@api.model
|
|
def _do_gdpr_cleanup(self, fields, records):
|
|
vals = {}
|
|
for field in fields:
|
|
if field.ttype in ['many2one', 'binary']:
|
|
vals.update({field.name: False})
|
|
elif field.ttype in ['many2many']:
|
|
vals.update({field.name: [(5, _, _)]})
|
|
# To improve...
|
|
elif field.ttype in ['one2many']:
|
|
continue
|
|
else:
|
|
vals.update({field.name: self._get_remove_text()})
|
|
records.write(vals)
|
|
|
|
@api.multi
|
|
def _gdpr_cleanup(self):
|
|
self.ensure_one()
|
|
self._do_gdpr_cleanup(self.fields, self.partner_ids)
|
|
|
|
@api.multi
|
|
def _post_gdpr_cleanup(self):
|
|
self.partner_ids.write({'active': False})
|