GoodERP
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.

79 lines
2.2KB

  1. import functools
  2. def safe_division(divisor, dividend):
  3. return dividend != 0 and divisor / dividend or 0
  4. def create_name(method):
  5. @functools.wraps(method)
  6. def func(self, vals):
  7. if vals.get('name', '/') == '/':
  8. vals.update(
  9. {'name': self.env['ir.sequence'].next_by_code(self._name) or '/'})
  10. return method(self, vals)
  11. return func
  12. def create_origin(method):
  13. @functools.wraps(method)
  14. def func(self, vals):
  15. if hasattr(self, 'get_move_origin'):
  16. vals.update({'origin': self.get_move_origin(vals)})
  17. else:
  18. vals.update({'origin': self._name})
  19. return method(self, vals)
  20. return func
  21. def inherits_after(res_back=True):
  22. def wrapper(method):
  23. @functools.wraps(method)
  24. def func(self, *args, **kwargs):
  25. res_before = execute_inherits_func(
  26. self, method.__name__, args, kwargs)
  27. res_after = method(self, *args, **kwargs)
  28. if res_back:
  29. return res_after
  30. else:
  31. return res_before
  32. return func
  33. return wrapper
  34. def inherits(res_back=True):
  35. def wrapper(method):
  36. @functools.wraps(method)
  37. def func(self, *args, **kwargs):
  38. res_after = method(self, *args, **kwargs)
  39. if not res_back or (not isinstance(res_after, dict) or (isinstance(res_after, dict) and not(res_after.get('res_model') and res_after.get('view_mode')))):
  40. res_before = execute_inherits_func(
  41. self, method.__name__, args, kwargs)
  42. if res_back:
  43. return res_after
  44. else:
  45. return res_before
  46. return func
  47. return wrapper
  48. def execute_inherits_func(self, method_name, args, kwargs):
  49. if self._inherits and len(self._inherits) != 1:
  50. raise ValueError('错误,当前对象不存在多重继承,或者存在多个多重继承')
  51. model, field = list(self._inherits.items())[0]
  52. values = self.read([field])
  53. field_ids = map(lambda value: value[field][0], values)
  54. models = self.env[model].browse(field_ids)
  55. return getattr(models, method_name)(*args, **kwargs)
上海开阖软件有限公司 沪ICP备12045867号-1