Печать платежной ведомости в Odoo 11 дает ошибку при печати пользователем (сотрудником) с доступом только для чтения в платежной ведомости

Я хочу предоставить доступ к платежным ведомостям только для чтения каждому сотруднику в Odoo, где они могут войти в систему и распечатать свои собственные платежные ведомости. Я не хочу, чтобы каждый сотрудник создавал платежные ведомости, только менеджер по персоналу / сотрудники могут создавать платежные ведомости / платежные ведомости. Обычные пользователи могут только просматривать свои платежные ведомости и брать распечатки.

Для этого я выполнил следующие шаги:

  1. Я создал новую группу пользователей для расчета заработной платы «Заработная плата / Сотрудник», продублировав группу «Заработная плата / Сотрудник» в режиме отладки и предоставив доступ только для чтения к «Заработной ведомости / Сотруднику» в платежной ведомости.

  2. Затем я назначил эту группу пользователю

  3. При входе в систему в качестве сотрудника я вижу опцию Payslip в разделе Payroll.

  4. Когда я печатаю платежную ведомость, я получаю следующую ошибку:

Error:
Odoo Server Error

Traceback (most recent call last):
File "/opt/odoo11-meshsol/odoo/fields.py", line 937, in __get__
    value = record.env.cache.get(record, self)
File "/opt/odoo11-meshsol/odoo/api.py", line 960, in get
    value = self._data[field][record.id][key]
KeyError: (<odoo.sql_db.Cursor object at 0x7f4cd83fe208>, 11)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo11-meshsol/odoo/models.py", line 2646, in _prefetch_field
    result = records.read([f.name for f in fs], load='_classic_write')
File "/opt/odoo11-meshsol/odoo/models.py", line 2572, in read
    fields = self.check_field_access_rights('read', fields)
File "/opt/odoo11-meshsol/odoo/models.py", line 2553, in check_field_access_rights
    (self._description, operation))
odoo.exceptions.AccessError: ('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: Employee, Operation: read)', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/qweb.py", line 343, in _compiled_fn
    return compiled(self, append, new, options, log)
File "<template>", line 1, in template_1366_11064
File "<template>", line 2, in body_call_content_11063
File "<template>", line 3, in foreach_11062
File "<template>", line 4, in body_call_content_11061
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/ir_qweb.py", line 378, in _get_field
    content = converter.record_to_html(record, field_name, field_options)
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/fields.py", line 106, in record_to_html
    value = record[field_name]
File "/opt/odoo11-meshsol/odoo/models.py", line 4758, in __getitem__
    return self._fields[key].__get__(self, type(self))
File "/opt/odoo11-meshsol/odoo/fields.py", line 941, in __get__
    self.determine_value(record)
File "/opt/odoo11-meshsol/odoo/fields.py", line 1042, in determine_value
    record._prefetch_field(self)
File "/opt/odoo11-meshsol/odoo/models.py", line 2649, in _prefetch_field
    result = self.read([f.name for f in fs], load='_classic_write')
File "/opt/odoo11-meshsol/odoo/models.py", line 2572, in read
    fields = self.check_field_access_rights('read', fields)
File "/opt/odoo11-meshsol/odoo/models.py", line 2553, in check_field_access_rights
    (self._description, operation))
odoo.exceptions.AccessError: ('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: Employee, Operation: read)', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo11-meshsol/addons/web/controllers/main.py", line 1620, in report_download
    response = self.report_routes(reportname, docids=docids, converter='pdf')
File "/opt/odoo11-meshsol/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
File "/opt/odoo11-meshsol/addons/web/controllers/main.py", line 1569, in report_routes
    pdf = report.with_context(context).render_qweb_pdf(docids, data=data)[0]
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_actions_report.py", line 628, in render_qweb_pdf
    html = self.with_context(context).render_qweb_html(res_ids, data=data)[0]
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_actions_report.py", line 666, in render_qweb_html
    return self.render_template(self.report_name, data), 'html'
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_actions_report.py", line 470, in render_template
    return view_obj.render_template(template, values)
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_ui_view.py", line 1201, in render_template
    return self.browse(self.get_view_id(template)).render(values, engine)
File "/opt/odoo11-meshsol/addons/website/models/ir_ui_view.py", line 113, in render
    return super(View, self).render(values, engine=engine)
File "/opt/odoo11-meshsol/addons/web_editor/models/ir_ui_view.py", line 27, in render
    return super(IrUiView, self).render(values=values, engine=engine)
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_ui_view.py", line 1210, in render
    return self.env[engine].render(self.id, qcontext)
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/ir_qweb.py", line 57, in render
    return super(IrQWeb, self).render(id_or_xml_id, values=values, **context)
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/qweb.py", line 272, in render
    self.compile(template, options)(self, body.append, values or {})
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/qweb.py", line 350, in _compiled_fn
    raise QWebException("Error to render compiling AST", e, path, node and etree.tostring(node[0], encoding='unicode'), name)
odoo.addons.base.ir.ir_qweb.qweb.QWebException: ('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: Employee, Operation: read)', None)
Traceback (most recent call last):
File "/opt/odoo11-meshsol/odoo/fields.py", line 937, in __get__
    value = record.env.cache.get(record, self)
File "/opt/odoo11-meshsol/odoo/api.py", line 960, in get
    value = self._data[field][record.id][key]
KeyError: (<odoo.sql_db.Cursor object at 0x7f4cd83fe208>, 11)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo11-meshsol/odoo/models.py", line 2646, in _prefetch_field
    result = records.read([f.name for f in fs], load='_classic_write')
File "/opt/odoo11-meshsol/odoo/models.py", line 2572, in read
    fields = self.check_field_access_rights('read', fields)
File "/opt/odoo11-meshsol/odoo/models.py", line 2553, in check_field_access_rights
    (self._description, operation))
odoo.exceptions.AccessError: ('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: Employee, Operation: read)', None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/qweb.py", line 343, in _compiled_fn
    return compiled(self, append, new, options, log)
File "<template>", line 1, in template_1366_11064
File "<template>", line 2, in body_call_content_11063
File "<template>", line 3, in foreach_11062
File "<template>", line 4, in body_call_content_11061
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/ir_qweb.py", line 378, in _get_field
    content = converter.record_to_html(record, field_name, field_options)
File "/opt/odoo11-meshsol/odoo/addons/base/ir/ir_qweb/fields.py", line 106, in record_to_html
    value = record[field_name]
File "/opt/odoo11-meshsol/odoo/models.py", line 4758, in __getitem__
    return self._fields[key].__get__(self, type(self))
File "/opt/odoo11-meshsol/odoo/fields.py", line 941, in __get__
    self.determine_value(record)
File "/opt/odoo11-meshsol/odoo/fields.py", line 1042, in determine_value
    record._prefetch_field(self)
File "/opt/odoo11-meshsol/odoo/models.py", line 2649, in _prefetch_field
    result = self.read([f.name for f in fs], load='_classic_write')
File "/opt/odoo11-meshsol/odoo/models.py", line 2572, in read
    fields = self.check_field_access_rights('read', fields)
File "/opt/odoo11-meshsol/odoo/models.py", line 2553, in check_field_access_rights
    (self._description, operation))
odoo.exceptions.AccessError: ('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: Employee, Operation: read)', None)

Error to render compiling AST
AccessError: ('The requested operation cannot be completed due to security restrictions. Please contact your system administrator.\n\n(Document type: Employee, Operation: read)', None)
Template: 1366
Path: /templates/t/t/t/t/div/table[1]/tr[2]/td[2]/div
Node: <div t-field="o.employee_id.address_home_id" t-options="{&quot;widget&quot;: &quot;contact&quot;, &quot;fields&quot;: [&quot;address&quot;, &quot;name&quot;, &quot;phone&quot;], &quot;no_marker&quot;: True, &quot;phone_icons&quot;: True}"/>

Буду очень признателен, если вы поможете мне решить эту проблему.

Скриншоты:

Заработная плата / Права доступа к группам сотрудников

Конфигурация пользователя (сотрудника)

Спасибо,

Ата


person Ata ur Rehman    schedule 23.12.2018    source источник


Ответы (1)


Трассировка стека показывает, что при печати платежной квитанции пользователю необходим доступ к o.employee_id.address_home_id, здесь employee_id — это поле, связанное с объектом hr.employee, модель которого отличается от модели платежной квитанции. Таким образом, проблема, вероятно, заключается в разрешении на доступ к модели hr.employee, и если вы предоставите достаточное разрешение на чтение данных из этой модели этому пользователю, проблема должна быть решена.

ОБНОВИТЬ:

Проблема с разрешением на самом деле связана с отсутствием разрешения на модель res.partner, потому что employee_id.address_home_id, здесь address_home_id также является реляционным полем для совместной модели res.partner, поэтому группе «Заработная плата / Сотрудник» действительно требуется разрешение на чтение для модели res.partner.

person arryph    schedule 24.12.2018
comment
Спасибо за ваш ответ, я уже пытался предоставить доступ только для чтения к модели hr.employee для группы пользователей Payroll/Employee, но все равно получаю ту же ошибку. - person Ata ur Rehman; 25.12.2018
comment
О, моя ошибка, проблема с разрешением на самом деле связана с отсутствием разрешения на модель res.partner, потому что employee_id.address_home_id, здесь address_home_id также является реляционным полем для совместной модели res.partner, поэтому группе Payroll/Employee на самом деле нужно разрешение на чтение для модели res.partner. - person arryph; 25.12.2018
comment
К сожалению, это не решило проблему, я предоставил res.partner разрешения только на чтение, но все равно получаю ту же ошибку :( - person Ata ur Rehman; 25.12.2018
comment
Я заметил, что форма сотрудника читается только для группы Payroll/Employee. Несмотря на то, что я предоставил доступ только для чтения к форме сотрудника, дополнительная информация, доступная на вкладках (листах) формы сотрудника, не видна для сотрудников только для чтения. Информация об адресе доступна на листе Личная информация, которая не отображается для группы Заработная плата / Сотрудник. Это может быть причиной ошибки. Я не уверен, как я могу предоставить доступ по адресу на листе личной информации. - person Ata ur Rehman; 26.12.2018
comment
в конфигурации пользователя вы найдете логическое поле Access to Private Addresses - person arryph; 26.12.2018
comment
Спасибо за ваш быстрый ответ, я действительно новичок в Odoo и не могу найти конфигурацию пользователя, не могли бы вы сообщить мне, где я могу это найти. Еще раз спасибо. - person Ata ur Rehman; 26.12.2018
comment
Настройки->Пользователи->Выберите пользователя платежной ведомости->Редактировать->Выберите Доступ к частным адресам (в разделе «Другие») - person arryph; 26.12.2018
comment
я мог бы помочь, если бы у меня был доступ, это явно очень простая проблема с разрешением доступа к модели. - person arryph; 26.12.2018
comment
Я добавил 2 снимка экрана в конце сообщения, один из которых показывает права доступа к заработной плате / группе сотрудников, а другой показывает конфигурацию пользователя с включенным доступом к частной информации. Надеюсь, это поможет вам в расследовании. - person Ata ur Rehman; 26.12.2018