mirror of https://github.com/muk-it/muk_base
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.
222 lines
7.7 KiB
222 lines
7.7 KiB
###################################################################################
|
|
#
|
|
# Copyright (C) 2017 MuK IT GmbH
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
# License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
###################################################################################
|
|
|
|
import logging
|
|
|
|
from odoo import models, api
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class BaseModelExtension(models.AbstractModel):
|
|
|
|
_name = 'muk_utils.model'
|
|
_description = 'MuK Base Model'
|
|
|
|
#----------------------------------------------------------
|
|
# Function
|
|
#----------------------------------------------------------
|
|
|
|
@api.multi
|
|
def notify_change(self, values, *largs, **kwargs):
|
|
pass
|
|
|
|
@api.multi
|
|
def trigger_computation(self, fields, *largs, **kwargs):
|
|
pass
|
|
|
|
@api.multi
|
|
def check_existence(self):
|
|
records = self.exists()
|
|
if not (len(records) == 0 or (len(records) == 1 and records.id == False)):
|
|
return records
|
|
else:
|
|
return False
|
|
|
|
#----------------------------------------------------------
|
|
# Read
|
|
#----------------------------------------------------------
|
|
|
|
@api.model
|
|
def browse(self, arg=None, prefetch=None):
|
|
arg = self._before_browse(arg)
|
|
result = super(BaseModelExtension, self).browse(arg, prefetch)
|
|
result = self._after_browse(result)
|
|
return result
|
|
|
|
@api.model
|
|
def _before_browse(self, arg, *largs, **kwargs):
|
|
return arg
|
|
|
|
@api.model
|
|
def _after_browse(self, result, *largs, **kwargs):
|
|
return result
|
|
|
|
@api.multi
|
|
def read(self, fields=None, load='_classic_read'):
|
|
fields = self._before_read(fields)
|
|
result = super(BaseModelExtension, self).read(fields, load)
|
|
for index, record in enumerate(self.exists()):
|
|
try:
|
|
result[index] = record._after_read_record(result[index])
|
|
except IndexError:
|
|
_logger.exception("Something went wrong!")
|
|
result = self._after_read(result)
|
|
return result
|
|
|
|
@api.multi
|
|
def _before_read(self, fields, *largs, **kwargs):
|
|
return fields
|
|
|
|
@api.multi
|
|
def _after_read_record(self, values, *largs, **kwargs):
|
|
return values
|
|
|
|
@api.multi
|
|
def _after_read(self, result, *largs, **kwargs):
|
|
return result
|
|
|
|
@api.model
|
|
@api.returns('self',
|
|
upgrade=lambda self, value, args, offset=0, limit=None, order=None, count=False: value if count else self.browse(value),
|
|
downgrade=lambda self, value, args, offset=0, limit=None, order=None, count=False: value if count else value.ids)
|
|
def search(self, args, offset=0, limit=None, order=None, count=False):
|
|
args, offset, limit, order, count = self._before_search(args, offset, limit, order, count)
|
|
result = super(BaseModelExtension, self).search(args, offset, limit, order, count)
|
|
result = self._after_search(result)
|
|
return result
|
|
|
|
@api.model
|
|
def _before_search(self, args, offset, limit, order, count, *largs, **kwargs):
|
|
return args, offset, limit, order, count
|
|
|
|
@api.model
|
|
def _after_search(self, result, *largs, **kwargs):
|
|
return result
|
|
|
|
@api.model
|
|
def name_search(self, name='', args=None, operator='ilike', limit=100):
|
|
name, args, operator, limit = self._before_name_search(name, args, operator, limit)
|
|
result = super(BaseModelExtension, self).name_search(name, args, operator, limit)
|
|
result = self._after_name_search(result)
|
|
return result
|
|
|
|
@api.model
|
|
def _before_name_search(self, name, args, operator, limit, *largs, **kwargs):
|
|
return name, args, operator, limit
|
|
|
|
@api.model
|
|
def _after_name_search(self, result, *largs, **kwargs):
|
|
return result
|
|
|
|
@api.model
|
|
def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
|
|
domain, fields, groupby, offset, limit, orderby, lazy = self._before_read_group(domain, fields, groupby, offset, limit, orderby, lazy)
|
|
result = super(BaseModelExtension, self).read_group(domain, fields, groupby, offset, limit, orderby, lazy)
|
|
result = self._after_read_group(result)
|
|
return result
|
|
|
|
@api.model
|
|
def _before_read_group(self, domain, fields, groupby, offset, limit, orderby, lazy, *largs, **kwargs):
|
|
return domain, fields, groupby, offset, limit, orderby, lazy
|
|
|
|
@api.model
|
|
def _after_read_group(self, result, *largs, **kwargs):
|
|
return result
|
|
|
|
#----------------------------------------------------------
|
|
# Create, Update, Delete
|
|
#----------------------------------------------------------
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
vals = self._before_create(vals)
|
|
result = super(BaseModelExtension, self).create(vals)
|
|
result = result._after_create(vals)
|
|
return result
|
|
|
|
@api.model
|
|
def _before_create(self, vals, *largs, **kwargs):
|
|
return vals
|
|
|
|
@api.model
|
|
def _after_create(self, vals, *largs, **kwargs):
|
|
self._check_recomputation(vals, [])
|
|
return self
|
|
|
|
@api.multi
|
|
def write(self, vals):
|
|
olds = []
|
|
vals = self._before_write(vals)
|
|
if 'track_old_values' in self.env.context:
|
|
olds = [{key: record[key] for key in vals} for record in self]
|
|
result = super(BaseModelExtension, self).write(vals)
|
|
for record in self:
|
|
record._after_write_record(vals)
|
|
result = self._after_write(result, vals, olds)
|
|
return result
|
|
|
|
@api.multi
|
|
def _before_write(self, vals, *largs, **kwargs):
|
|
return vals
|
|
|
|
@api.multi
|
|
def _after_write_record(self, vals, *largs, **kwargs):
|
|
return vals
|
|
|
|
@api.multi
|
|
def _after_write(self, result, vals, olds, *largs, **kwargs):
|
|
self._check_recomputation(vals, olds)
|
|
self._check_notification(vals)
|
|
return result
|
|
|
|
@api.multi
|
|
def unlink(self):
|
|
info = self._before_unlink()
|
|
infos = []
|
|
for record in self:
|
|
infos.append(record._before_unlink_record())
|
|
result = super(BaseModelExtension, self).unlink()
|
|
self._after_unlink(result, info, infos)
|
|
return result
|
|
|
|
@api.multi
|
|
def _before_unlink(self, *largs, **kwargs):
|
|
return {}
|
|
|
|
@api.multi
|
|
def _before_unlink_record(self, *largs, **kwargs):
|
|
return {}
|
|
|
|
@api.multi
|
|
def _after_unlink(self, result, info, infos, *largs, **kwargs):
|
|
pass
|
|
|
|
#----------------------------------------------------------
|
|
# Helper
|
|
#----------------------------------------------------------
|
|
|
|
@api.multi
|
|
def _check_recomputation(self, vals, olds, *largs, **kwargs):
|
|
# self.trigger_computation(fields)
|
|
pass
|
|
|
|
@api.multi
|
|
def _check_notification(self, vals, *largs, **kwargs):
|
|
# self.notify_change(change)
|
|
pass
|