report_label.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # -*- coding: utf-8 -*-
  2. from odoo import models, fields, api
  3. from odoo.exceptions import ValidationError
  4. from . import base_archive
  5. from ..utils.label_info import LabelInfo
  6. from ..utils.label_list import LabelList
  7. class ReportLabel(base_archive.BaseInfoUnique):
  8. _name = 'jc_bi.report_label'
  9. _description = u'BI:标签'
  10. _order = 'id desc'
  11. _module = 'jc_bi'
  12. order = fields.Integer('顺序')
  13. report_set_id = fields.Many2one('jc_bi.report_set', '报表集')
  14. report_label_condition_id = fields.Many2one('jc_bi.report_label_condition', '标签条件')
  15. user_detail = fields.One2many('jc_bi.report_label_user_detail', 'report_label_id', string=u'标签用户明细', copy=True)
  16. @api.constrains('name')
  17. def _check_name(self):
  18. if self.name:
  19. result = self.search_count(
  20. [('name', '=', self.name), ('id', '!=', self.id)])
  21. if result:
  22. raise ValidationError('{名称}已存在')
  23. return
  24. @api.model
  25. def query_user_info(self, label_id):
  26. all_user_list = self.env['res.users'].search_read([], ['id', 'name'])
  27. all_user_list = [[x['id'], x['name']] for x in all_user_list]
  28. bill = self.env[self._name].sudo().browse(int(label_id))
  29. if not bill:
  30. return label_id, [], all_user_list
  31. exist_user_list = [[d.user_id.id, d.user_id.name] for d in bill.user_detail]
  32. if not exist_user_list:
  33. return label_id, [], all_user_list
  34. not_used_user_list = []
  35. for _id, _name in all_user_list:
  36. if ReportLabel._is_exist(exist_user_list, _id):
  37. continue
  38. not_used_user_list.append([_id, _name])
  39. return label_id, exist_user_list, not_used_user_list
  40. @staticmethod
  41. def _is_exist(list1, key):
  42. for item in list1:
  43. if item[0] == key:
  44. return True
  45. return False
  46. @api.model
  47. def save_user(self, label_id, user_list):
  48. bill = self.env[self._name].sudo().browse(int(label_id))
  49. for d in bill.user_detail:
  50. d.unlink()
  51. for user_id in user_list:
  52. val = {
  53. 'report_label_id': bill.id,
  54. 'user_id': user_id,
  55. }
  56. self.env['jc_bi.report_label_user_detail'].sudo().create(val)
  57. return label_id