Odoo 11 добавляет разные меню действий в две разные области для одной и той же модели

В Odoo 11 мне нужно два разных меню действий с двумя разными функциями.

В платежной ведомости я хотел добавить ссылку на платежную ведомость по электронной почте, поэтому я использовал этот код, чтобы добавить меню действий по электронной почте.

<?xml version = "1.0" encoding = "utf-8"?>
<odoo>
    <data>
        <record id = "action_email_payslip" model = "ir.actions.server">
      <field name = "name">Email Payslip</field>
            <field name = "model_id" ref = "hr_payroll.model_hr_payslip"/> 
            <field name = "binding_model_id" ref = "hr_payroll.model_hr_payslip"/>
            <field name = "state">code</field> 
            <field name = "code"> 
            action = records.action_email_payslip_send() 
            </field>
    </record>
    </data>
</odoo>

Но этот также добавляет меню действий в строку сотрудников. В строках сотрудников я хочу другое меню действий. Так может ли кто-нибудь сказать мне, как этого добиться?

Я не очень хорошо понимаю. Вы говорите, что это действие (Электронная почта) отображается в hr.payslip просмотрах, а также в hr.employee просмотрах?

forvas 13.05.2019 10:47

На самом деле я хотел отправить электронное письмо из платежной ведомости с выбранными сотрудниками. Но меню, которое я добавил, это отправка электронной почты для одного сотрудника.

NewUser 13.05.2019 10:50

Я хочу показать меню в представлении формы hr.payslip, а не в виде списка hr.payslip. Надеюсь, вы поняли это.

NewUser 13.05.2019 11:06

@forvas есть ли другой способ отправить электронное письмо выбранным сотрудникам с помощью той же кнопки действия? На данный момент, когда я выбираю нескольких сотрудников и пытаюсь отправить сообщение об ошибке, например File "/usr/lib/python3/dist-packages/odoo/models.py", line 4393, in ensure_one raise ValueError("Expected singleton: %s" % self) ValueError: <class 'ValueError'>: "Expected singleton: hr.payslip(1, 3, 4)" while evaluating 'action = records.action_email_payslip_send()'

NewUser 13.05.2019 11:30

Итак, вам нужно, чтобы кнопка действия работала также для просмотра в виде дерева, а не только для просмотра формы, не так ли? Если вы выберете в древовидном представлении несколько платежных ведомостей и нажмете Электронная почта, вы хотите отправить электронное письмо для каждого сотрудника выбранной платежной ведомости? Если вы не хотите, чтобы сотрудники видели платежные ведомости других сотрудников в электронной почте, вам придется изменить весь функционал.

forvas 13.05.2019 11:43

Да, для представления формы это абсолютно нормально, как сейчас. Его отправка электронной почты с вложением для человека. Но в древовидном представлении я хочу отправить их платежную ведомость, прикрепленную к электронной почте, и да, никто не может видеть другие платежные ведомости. Можете ли вы поделиться справочной ссылкой или какой-либо помощью для этого?

NewUser 13.05.2019 11:53

@forvas любая помощь в этом?

NewUser 13.05.2019 12:25

Итак, ответ наконец сработал для вас после последнего обновления?

forvas 16.05.2019 14:25

Есть ли возможность показать модель так же, как мы это делали ранее, когда выбирается один расчетный лист.

NewUser 16.05.2019 14:39

Вы имеете в виду, что хотите показать всплывающее окно сообщения электронной почты с шаблоном, загруженным для нескольких пользователей?

forvas 16.05.2019 15:38

Неа. Я просто хотел показать всплывающее окно с сообщением о создании электронной почты, когда был выбран один пользователь. Для нескольких пользователей это нормально, что вы ответили.

NewUser 16.05.2019 15:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
11
454
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, последнее изменение, и я сдаюсь. Я надеюсь, что это именно то, что вы хотите. Используя код ответа, который я дал вам в Как отправить электронное письмо с помощью кнопки, расположенной в раскрывающемся списке действий формы Odoo 11?, просто замените метод Python на этот:

@api.multi
def action_email_payslip_send(self):
    template = self.env.ref(
        'your_module_name.email_template_payslip',
        False,
    )
    compose_form = self.env.ref(
        'mail.email_compose_message_wizard_form',
        False,
    )
    ctx = dict(
        default_model='hr.payslip',
        default_use_template=bool(template),
        default_template_id=template and template.id or False,
    )
    if len(self) == 1:
        ctx.update({
            'default_composition_mode': 'comment',
            'default_res_id': self.ensure_one().id,
        })
    else:
        ctx.update({
            'default_composition_mode': 'mass_mail',
            'active_ids': self.ids,
        })
    return {
        'name': _('Compose Email'),
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'mail.compose.message',
        'views': [(compose_form.id, 'form')],
        'view_id': compose_form.id,
        'target': 'new',
        'context': ctx,
    }

Это откроет вам всплывающее окно с сообщением о создании электронной почты, которое вам нравится, даже если вы выбираете несколько платежных ведомостей (в этом случае предварительный просмотр не заменит переменные Mako).

Я знаю, что поначалу это сложно, но, как прокомментировал @EasyOdoo, вы должны черпать идеи из ответов и исследовать их, чтобы вы могли задавать более мелкие и точные вопросы и легко получать хорошие ответы.

Этот показывает пустую страницу. Также нет ли способа сделать отправку отдельного электронного письма с вложением тем, что мы делали, когда пользователь выбирает одного сотрудника и отправляет электронное письмо?

NewUser 13.05.2019 12:59

любые предложения или ссылки

NewUser 14.05.2019 09:37

Мне нужно время после работы, чтобы попробовать этот метод и понять, почему он возвращает пустую страницу, как вы мне написали.

forvas 14.05.2019 10:10

Я протестировал код. Все работает, но есть одна проблема. Допустим, я выбрал 10 сотрудников. Затем он отправляет одно и то же письмо каждому пользователю 10 раз.

NewUser 15.05.2019 14:15

Вы имеете в виду, что это происходит только тогда, когда вы выбрали 10 платежных ведомостей одного и того же сотрудника, в этом случае он получит 10 электронных писем, по одному на платежную ведомость. Если вы выберете 10 платежных ведомостей, каждая из которых принадлежит другому сотруднику, каждый сотрудник получит только одно электронное письмо.

forvas 15.05.2019 14:22

Неа. На данный момент я выбрал 3 сотрудников из платежной ведомости. У каждого работника один расчетный лист. Но этот отправляет 3 письма каждому сотруднику, хотя у каждого сотрудника есть только одна расчетная ведомость.

NewUser 15.05.2019 15:03

Эй, подождите ... другое дело, когда я иду к другому сотруднику и пытаюсь отправить электронное письмо оттуда, но оно отправляет электронное письмо на мой адрес электронной почты. Есть ли какое-либо отношение к тому, что я установил свой идентификатор электронной почты в конфигурации электронной почты.

NewUser 15.05.2019 15:10

Ошибка копирования-вставки. Замените self.env.user.id на payslip.id, как я сделал в своем новом редактировании.

forvas 15.05.2019 15:30

@NewUser все, что вам нужно сделать, это посмотреть, где ошибка, и исправить ее, просто исправить код forvas, ему не нужно писать правильный код, самое главное, это идея, если он отправляет 3 для каждого сотрудника, то вам нужно исправить одна крошечная строчка в коде, чтобы исправить это поведение

Charif DZ 16.05.2019 21:59

@NewUser Я изменил весь ответ. Взгляните и дайте мне знать, если это то, что вы искали.

forvas 21.05.2019 12:44

@forvas действительно спасибо за этот ответ. На самом деле я уже исправил проблему сам. Единственное, что я искал для отображения предупреждения о подтверждении при выборе нескольких пользователей перед отправкой электронного письма. Как только пользователь подтвердит, он отправит электронные письма. дайте мне знать, если вы можете помочь в этом ответе, или мне следует задать для этого другой вопрос?

NewUser 21.05.2019 13:03

@NewUser, это еще один другой вопрос, поскольку вы говорите, что вам следует создать новый пост с вопросом, как отобразить всплывающее окно подтверждения после нажатия кнопки действия сервера. Я думаю, что атрибут XML confirm работает только для тегов <button>, поэтому в настоящее время я не могу найти простой ответ на этот вопрос, возможно, кто-то может дать лучшее решение, чем я. Но в этом посте можете ли вы установить этот ответ как правильный, если вы так думаете, или, по крайней мере, дать ему +1, если вы считаете, что он помог вам решить вашу проблему?

forvas 21.05.2019 13:12

@forvas Я проголосовал и принял ваш ответ. Спасибо за помощь.

NewUser 21.05.2019 13:18

@forvas У меня проблема. Можете ли вы помочь мне? Вот адрес stackoverflow.com/questions/56544393/…

NewUser 11.06.2019 15:04

Другие вопросы по теме