Идеальная реализация не имеет ни малейшего представления о том, как в конечном итоге отправляется электронное письмо.

Многие функции Odoo могут быть реализованы несколькими способами.

То же самое можно сказать и об отправке писем в Odoo.

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

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

Прежде чем мы продолжим, давайте определим основное требование

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

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

Покупатель, заинтересованный в указанной недвижимости, нажмет кнопку с надписью «Меня интересует» в форме собственности, чтобы отправить электронное письмо менеджеру недвижимости.

Давайте посмотрим на две реализации этого требования с помощью Odoo.

Плохая реализация

Используя то, что, как ни странно, все еще остается распространенной реализацией уведомления по электронной почте, мы предпримем следующие шаги.

  1. Определите шаблон электронной почты, используя Шаблон QWeb.

2. Определите метод action_interested(...) в модели realtor.property и привяжите его к кнопке с надписью «Мне интересно». Эта кнопка определена в представлении формы риэлтора.

3. Для логики метода action_interested(...) реализуем следующие шаги.

4. Возьмите ссылку на поле body_html в почтовом шаблоне и замените все определенные заполнители в шаблоне их динамически определяемыми значениями. Заполнители в шаблонах — это переменные, завернутые в -- . Примером из приведенного выше шаблона является --property-name-- , --customer-name-- и т. д.

5. Затем создайте экземпляр модели mail.mail, передав измененный почтовый шаблон body_html.

6. Наконец, вызовите метод send(...) для экземпляра mail.mail, чтобы отправить электронное письмо риелтору или менеджеру.

Идеальная реализация

Эта альтернативная реализация использует шаблон проектирования делегирования. Эти шаблоны упрощают код разработчика и его обязанности.

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

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

Давайте посмотрим, какие шаги необходимы для этой идеальной реализации.

  1. Определите шаблон электронной почты, используя Шаблон QWeb.

2. Определите метод action_interested(...) в модели realtor.property и привяжите его к кнопке с надписью «Мне интересно», определенной в представлении формы риелтора.

3. Для логики метода action_interested(...) реализуем следующие шаги.

4. Возьмите ссылку на шаблон электронной почты.

5. Вызовите метод send_mail(...) в делегате электронной почты для отправки электронного письма с использованием нашего шаблона в mail.mail

Сравнивая плохую реализацию action_interested(...) с нашей идеальной реализацией, сразу видно, что она намного проще. Это потребовало буквально двух строк кода по сравнению с более чем 10 строками кода с первым.

Полный исходный код ищите на GitHub. Репозиторий содержит базовый модуль Odoo с обеими реализациями.

Плохая реализация находится на ветке плохая реализация, а идеальная реализация — на ветке реализации.

Чтобы самостоятельно протестировать модуль, клонируйте репозиторий и добавьте путь к репозиторию в свой путь надстроек Odoo. Оба работают, но идеальная реализация обеспечивает ту же функциональность с меньшим количеством строк кода.

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





Теперь причины, почему подход № 2 лучше, чем № 1

Идеальная реализация исключает следующие операции, которые требуются в плохой реализации.

  1. Установка значений заполнителей, определенных в шаблоне электронной почты.
    В идеальной реализации шаблон электронной почты уже содержит ссылку на object . В шаблоне электронной почты object ссылается на недвижимость, которая интересует клиента. Этот object предоставляет прямой доступ к такой информации, как название недвижимости, имя управляющего недвижимостью, имя клиента, адрес электронной почты и т. д.
  2. Создание экземпляра mail.mail и вызов его метода send(...) .
    В идеальной реализации метод send_mail(...) почтового шаблона делегирует отправку электронной почты mail.mail без прямого вызова метода send(...).
  3. Шаблон и подробный код
    Сложные шаблоны электронной почты требуют подробного шаблонного кода для обновления заполнителей в шаблонах электронной почты, создания экземпляра mail.mail и, наконец, вызова его функции send(...) для отправки электронной почты.

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

Еще одна вещь, я был бы очень признателен, если бы вы могли поддержать мое письмо. Присоединяясь к Medium по моей реферальной ссылке, я получаю небольшую комиссию от вашего членского взноса, которая помогает мне тратить время и силы на написание и публикацию таких полезных статей.