Managing Emails in Odoo

Tích hợp email là tính năng nổi bật nhất của Odoo. Bạn có thể gửi và nhận email trực tiếp từ giao diện người dùng Odoo. Thậm chí, bạn có thể quản lý các chuỗi email về tài liệu thương mại, chẳng hạn như các khách hàng tiềm năng, các đơn đặt hàng và các dự án. Trong phần này, chúng ta sẽ khám phá một số những cách quan trọng để xử lý email trong Odoo.

Các chủ đề được đề cập đến trong phần này

Cấu hình Nhận và Gửi cho Máy chủ Email

  • Trước khi bắt đầu gửi và nhận email trong Odoo, bạn cần phải định cấu hình Nhận và Gửi cho máy chủ email.

  • Trong phần này, bạn sẽ học cách Cấu hình email máy chủ trong Odoo. Bạn sẽ bắt buộc cần có thông tin máy chủ chẳng hạn như: URL máy chủ, Cổng truy cập, Loại máy chủ, Tên người dùngMật khẩu

Các bước thực hiện

  1. Từ phần Cài đặt, chọn mở Cài đặt chung.

  2. Chuyển đến phần Thảo luận và Đánh dấu mục Máy chủ Email Ngoài. Điều này sẽ hiển thị các tùy chọn sau:

    Thiết lập cấu hình máy chủ Email ngoài
  3. Trong trường Tên miền danh, hãy nhập tên miền mà máy chủ email của bạn là đang chạy. Sau đó lưu lại cấu hình.

Cấu hình Máy chủ Nhận Email.

  1. Mở Cài đặt chung và nhấp vào liên kết Máy chủ Nhận Email. Điều này sẽ chuyển hướng bạn đến giao diện danh sách các Máy chủ Nhận Email.

  2. Nhấp vào nút Tạo, nút này sẽ mở ra dạng xem biểu mẫu sau. Nhập chi tiết về Máy chủ Nhận Email của bạn.

    Cấu hình máy chủ nhận Email
  3. Nhấp vào nút Kiểm tra & Xác nhận để xác minh cấu hình của bạn. Nó sẽ hiển thị một thông báo lỗi nếu bạn cấu hình sai Máy chủ Nhận Email.

    Danh sách các trường được sử dụng để cấu hình Máy chủ Nhận Emai.

    • Miêu tả: Tên của máy chủ, giúp bạn xác định một Máy chủ email đến, cụ thể khi bạn cấu hình nhiều Máy chủ Nhận Email.

    • Kiểu máy chủ: Chọn trong số ba tùy chọn: POP, IMAP và Local. Giá trị của trường này sẽ dựa trên nhà cung cấp dịch vụ email của bạn.

    • Tên máy chủ: Miền của máy chủ mà dịch vụ đang chạy trên đó.

    • Cổng: Số cổng mà máy chủ đang chạy.

    • SSL/TLS: Chọn trường này nếu bạn đang sử dụng mã hóa SSL / TLS.

    • Tên đăng nhập: Địa chỉ email mà bạn đang tìm nạp email.

    • Mật khẩu: Mật khẩu cho địa chỉ email được cung cấp.

    • Hiệu lực: Trường Hoạt động được sử dụng để bật hoặc tắt Máy chủ Nhận Email.

    • Giữ lại đính kèm: Tắt tùy chọn này nếu bạn không muốn quản lý tệp đính kèm từ các email đến.

    • Giữ lại bản gốc: Bật tùy chọn này nếu bạn muốn giữ nguyên email gốc với cái trước.

Cấu hình Máy chủ Gửi Email.

  1. Mở Cài đặt chung và nhấp vào liên kết Máy chủ Gửi Email. Điều này sẽ chuyển hướng bạn đến giao diện danh sách các Máy chủ Gửi Email.

  2. Nhấp vào nút Tạo, nút này sẽ mở ra dạng xem biểu mẫu sau. Nhập chi tiết về Máy chủ Gửi Email của bạn.

    Cấu hình máy chủ gửi Email
  3. Nhấp vào Kiểm tra kết nối ở cuối màn hình để xác minh cấu hình của bạn. Nó sẽ hiển thị thông báo lỗi nếu bạn cấu hình sai. Máy chủ Gửi Email sẽ hiển thị như sau khi bạn đã cấu hình đúng: Kiểm tra Kết nối Thành công! “Mọi thứ dường như được thiết lập đúng!”

    Kiểm tra tình trạng kết nối máy chủ Email

    Danh sách các trường được sử dụng để cấu hình Máy chủ Gửi Email.

    • Miêu tả: Mô tả của máy chủ, giúp bạn xác định một Máy chủ Gửi Email khi bạn cấu hình nhiều Máy chủ Gửi Email.

    • Độ ưu tiên: Trường này được sử dụng để xác định mức độ ưu tiên của máy chủ email gửi đi. Thấp hơn các số được ưu tiên cao hơn, vì vậy các máy chủ email có số ưu tiên thấp hơn sẽ được sử dụng nhiều nhất.

    • Máy chủ SMTP: Tên miền của máy chủ đang chạy.

    • Cổng SMTP: Cổng mà máy chủ đang chạy.

    • Bảo mật kết nối: Loại bảo mật được sử dụng để gửi email.

    • Tên đăng nhập: Tài khoản email được sử dụng để gửi email.

    • Mật khẩu: Mật khẩu cho tài khoản email được cung cấp.

Theo mặc định, các email đến được tìm nạp 5 phút một lần. Nếu bạn muốn thay đổi điều này khoảng thời gian, hãy làm theo các bước sau: * Kích hoạt Chế độ phát triển.

  • Mở Hành động đã lên lịch tại Cài đặt > Kỹ thuật > Tự động hóa > Hành động định kỳ.

  • Tìm kiếm và mở hành động đã lên lịch có tên Thư: Làm mới hộp thư đến.

    Hành động định kỳ thời gian tìm nạp Email
  • Thay đổi khoảng thời gian bằng cách sử dụng trường có nhãn Thực thi mỗi.

    Thời gian tìm nạp Email

Quản lý Chatter

Thêm chatter vào Model education.student

Các bước thực hiện

  1. Thêm module phụ thuộc (sử dụng module mail) vào tệp __manifest__.py:

    ...
    'depends': ['mail'],
    ...
    
  2. Kế thừa mail.thread vào Model education.student

    class EducationStudent(models.Model):
       _name = 'education.student'
       _inherit = ['mail.thread']
       ...
    
  3. Thêm nội dung Chatter vào giao diện của Model có tên là education.student. Ta thấy có 2 trường message_follower_idsmessage_ids không được thêm vào Model education.student nhưng thông qua kế thừa Model mail.thread vẫn có thể gọi để sử dụng.

    ...
    <div class="oe_chatter">
       <field name="message_follower_ids" />
       <field name="message_ids" />
    </div>
    ...
    
  4. Cài đặt module viin_education để xem sự thay đổi:

    Khu cực Chatter

Như trong ảnh chụp màn hình trước, sau khi cài đặt module sẽ thấy phần Chatter trên Form view của Model education.student.

Khi bạn đăng tin nhắn trong Chatter, email sẽ được gửi đến những người có trong danh sách theo dõi.

  • Nếu bạn muốn gửi một email thông báo đến người không có trong danh sách theo dõi, bạn có thể thêm người theo dõi theo cách thủ công từ giao diện người dùng, nhưng nếu bạn muốn thêm chúng tự động, bạn có thể sử dụng phương thức message_subscribe().

  • Tương tự, nếu bạn muốn xóa người theo dõi khỏi danh sách, bạn có thể sử dụng phương thức unsubscribe().

    @api.model
    def add_follower(self):
       for r in self:
          if r.state == 'studying':
          partners = r.partner_id | r.responsible_id
          r.message_subscribe((partners).ids)
    
  • Lưu ý: Chatter gồm có 2 phần Gửi tin và Ghi chú:
    • Gửi tin: Toàn bộ những người có trong danh sách Theo dõi sẽ nhận được Email thông báo.

    • Ghi chú: Những người trong nội bộ công ty có trong danh sách theo dõi có thể nhìn thấy, những người được tag (@) tên thì sẽ nhận được Email thông báo.

Quản lý các Ấn định hoạt động

Khi sử dụng chatter, bạn cũng có thể thêm các Ấn định hoạt động để lập các kế hoạch cần thực hiện sắp tới để nhắc nhở bạn.

Làm thế nào để thực hiện

Làm theo các bước sau để thêm các Ấn định hoạt động vào Model education.student.

  1. Kế thừa mail.activity.mixin vào Model education.student:

    class EducationStudent(models.Model):
       _name = 'education.student'
       _inherit = ['mail.thread', 'mail.activity.mixin']
       ...
    
  2. Thêm mail_activity vào Chatter của education.student:

    <div class="oe_chatter">
       <field name="message_follower_ids" />
       <field name="activity_ids" />
       <field name="message_ids" />
    </div>
    
  3. Cập nhật module viin_education để áp dụng các thay đổi.

    Ấn định hành động

Các bước thực hiện

  • Các hoạt động là một phần của module mail và bạn có thể tùy chọn bật chúng trong Chatter.

  • Để sử dụng chức năng Ấn định hoạt động trên bản ghi, bạn cần kế thừa mail.activity.mixin.

  • Tương tự với Model mai.thread, thì mail.activity.mixin cũng là một Abstract Mode.

  • Kế thừa mail.activity.mixin sẽ thêm tất cả các trường cần thiết và các phương thức trong module. Các phương thức và trường này được sử dụng để quản lý các hoạt động trên bản ghi.

    • Bước 1: thêm mail.activity.mixin vào Model education.student:

      Do kế thừa, Model education.student sẽ nhận được tất cả các phương thức và các trường cần thiết để quản lý các hoạt động.

    • Bước 2: Thêm tiện ích mail_activity vào Form view của Model education.student. Điều này sẽ hiển thị giao diện để quản lý các hoạt động. Trường activity_ids được thêm vào Model education.student thông qua kế thừa.

      Các Ấn định hoạt động có thể thuộc nhiều loại khác nhau. Theo mặc định, bạn có thể tạo các hoạt động với các loại như Email, Cuộc gọi, Cuộc họpViệc cần làm. Nếu bạn muốn thêm Kiểu hoạt động của riêng mình, bạn có thể làm điều đó bằng cách đi tới Cài đặt > Kỹ thuật > Thảo luận > Kiểu hoạt động trong Chế độ phát triển.

    Nếu bạn muốn lên lịch tự động cho một hoạt động, bạn có thể sử dụng phương thức activity_schedule() của Model mail.activity.mixin. Điều này sẽ tạo ra hoạt động vào một thời hạn nhất định. Bạn có thể lên lịch hoạt động theo cách thủ công với activity_schedule(), như sau:

    @api.model
       def create(self, vals):
          res = super(EducationStudent, self).create(vals)
          if res.state == 'studying':
             activity = self.activity_schedule('mail.mail_activity_data_warning', summary=_("Date Updated"),user_id=self.responsible_id.id)
          return res
    

    Ví dụ này sẽ lên lịch Ấn định kế hoạch tạo cuộc gọi cho người quản lý responsible_id.

Gửi email bằng mẫu Jinja

Odoo hỗ trợ tạo email động thông qua các mẫu Jinja là một dạng công cụ văn bản tạo khuôn mẫu được sử dụng để tạo nội dung HTML động. Dưới đây, ta sẽ tạo một mẫu email Jinja và sau đó gửi email với sự trợ giúp của nó.

Làm thế nào để thực hiện

  1. Tạo một tệp tin mới có tên viin_education/data/mail_template.xml và thêm mẫu email có nội dung như sau:

    <?xml version="1.0" encoding="utf-8"?>
    <odoo noupdate="1">
       <record id="notification_for_responsible_user_template" model="mail.template">
          <field name="name">Notification For Responsible User</field>
          <field name="email_from">System</field>
          <field name="email_to">${object.responsible_id.email}</field>
          <field name="subject">Notification</field>
          <field name="model_id" ref="viin_education.model_education_student"/>
          <field name="body_html">
             <![CDATA[
                <p>Dear ${object.responsible_id.name},</p>
                <p>Notify responsible users of the change state ...</p>
                <p>Best regards,
                   <br/>
                   Librarian
                </p>
             ]]>
          </field>
       </record>
    </odoo>
    
  2. Khai báo tệp mẫu Email mail_template.xml'``trong tệp ``__manifest__:

    'security/module_security.xml',
    'security/ir.model.access.csv',
    'data/mail_template.xml'
    'views/education_student_views.xml',
    ],
    
  3. Thêm nút Gửi thông báo Send Notification trong Form view của Model education.student để gửi email:

    ...
    <header>
       <button name="notification_for_responsible_user" string="Send Notification" states="ongoing" type="object"/>
       <field name="state" widget="statusbar"/>
    </header>
    ...
    
  4. Thêm phương thức notification_for_responsible_user() vào Model education.student:

    def notification_for_responsible_user(self):
       template_id = self.env.ref('viin_education.notification_for_responsible_user_template')
       self.message_post_with_template(template_id.id)
    

Cập nhật module viin_education để áp dụng các thay đổi. Thao tác này sẽ tạo thêm Nút bấm Gửi trong Form view của Model education.student.

Quy trình này rất hữu ích khi bạn muốn gửi thông tin cập nhật cho khách hàng thông qua email. Do có mẫu Jinja, bạn có thể gửi email động dựa trên hồ sơ cá nhân.

Các bước thực hiện

  • Bước1: Cần tạo mẫu Email trong đó sẽ dựa trên dữ liệu bản ghi, mẫu Email này sẽ được lưu trong phần Các mẫu Danh sách các trường trong mẫu email:

    • name: Trường này chứa Tên của mẫu dùng để Xác định một mẫu cụ thể.

    • email_from: Trường này chứa Email của người gửi đi.

    • email_to: Trường này chứa Email của người nhận.

    • email_cc: Email của các người nhận khác cùng nhận được từ Email gửi đi.

    • subject: Trường này chứa chủ đề của email.

    • model_id: Trường này chứa tham chiếu của Model. Mẫu email sẽ được hiển thị với dữ liệu của Model này.

    • body_html: Trường này sẽ chứa nội dung của mẫu email. Đó là một mẫu Jinja để bạn có thể sử dụng các biến, vòng lặp, điều kiện, v.v.

    Thông thường, nội dung sẽ nằm trong thẻ CDATA để nội dung trong phần nội dung được coi là dữ liệu ký tự và không phải là ngôn ngữ đánh dấu.

    • auto_delete: Đây là trường Boolean xóa email sau khi email được gửi đi. Giá trị mặc định của trường này là False.

    • lang: Trường này được sử dụng để dịch mẫu email sang ngôn ngữ khác.

    • scheduled_date: Trường này được sử dụng để lập lịch các email trong tương lai.

    Sử dụng ${} trong email_form, email_to, email_cc, subject, scheduled_date và lang giúp bạn thiết lập giá trị động trong mẫu.

    • object: Biến này sẽ chứa các bản ghi của Model, được thiết lập trong trường model_id.

    • user: Đây sẽ là tập hợp bản ghi của người dùng hiện tại.

    • ctx: Điều này sẽ chứa dữ liệu kiểu Dict (Key: Value) của ngữ cảnh môi trường.

    Ghi chú:

    Nếu bạn muốn xem danh sách các mẫu, hãy kích hoạt Chế độ phát triển và mở Cài đặt > Kỹ thuật > Các mẫu. Trên Form view của model mail.template cung cấp một nút Xem trước mẫu sẽ được kết xuất.

    Nut Xem Truoc Mau Email
  • Bước 2: Thiết lập khai báo tệp tin Mẫu Email mail_template.xml ở trong phần __manifest__.

  • Bước 3: Thêm 1 nút Send Notification để gọi phương thức notification_for_responsible_user() sẽ gửi email đến những người theo dõi.

  • Bước 4: Thêm phương thức notification_for_responsible_user(), được gọi khi nhấp vào nút. Phương thức message_post_with_template() được sử dụng để gửi Email. Phương thức message_post_with_template() được kế thừa trong Model thông qua kế thừa mail.thread. Để gửi email, bạn chỉ cần chuyển mẫu ID làm tham số.

Phương thức message_post_with_template() dùng để gửi email bằng mẫu Jinja. Nếu chỉ muốn gửi một email với văn bản thuần túy, sử dụng phương thức message_post():

self.message_post(body = "Send Notification")

Đoạn mã trước đó sẽ gửi nội dung thông báo trong chatter. Tất cả những người theo dõi sẽ được thông báo bằng tin nhắn này. Nếu bạn chỉ muốn ghi lại tin nhắn, gọi phương thức với tham số subtype_id.

Gửi email bằng mẫu QWeb

Làm thế nào để thực hiện

  1. Thêm mẫu QWeb vào viin_education/data/mail_template.xml:

    <template id="notification_for_responsible_user_template_qweb">
       <p>Dear <span t-field="object.responsible_id.name"/>,</p>
       <p>Content ...</p>
       <br/>
       <p>Best regards,
          <br/>
          Librarian
       </p>
    </template>
    
  2. Thêm nút Send Notification(QWeb) trong Form view của Model education.student để gửi email:

    <header>
       <button name="notification_for_responsible_user_qweb" string="Send Notification(QWeb)" states="ongoing" type="object"/>
       <field name="state" widget="statusbar"/>
    </header>
    
  3. Thêm phương thức notification_for_responsible_user_qweb() trong Model education.student:

    def notification_for_responsible_user_qweb(self):
       self.message_post_with_view('viin_education.notification_for_responsible_user_template_qweb')
    
  4. Cập nhật module viin_education để xác nhận các thay đổi. Điều này sẽ thêm một nút Send Notification(QWeb) trong Form view của Model education.student.

Các bước thực hiện

Quy trình hoạt động cũng giống với Jinja, chỉ khác mẫu là mẫu QWeb.

  • Bước 1: Tạo mẫu QWeb với ID là notification_for_responsible_user_template_qweb.

  • Bước 2: Thêm một nút để gọi phương thức notification_for_responsible_user_qweb(), gửi email đến những người theo dõi.

  • Bước 3: Phương thức notification_for_responsible_user_qweb() này sẽ được gọi khi nhấp vào nút Send Notification(QWeb). Phương thức message_post_with_view() được sử dụng để gửi email. Phương thức message_post_with_view() được kế thừa trong Model thông qua khi kế thừa Model mail.thread. Để gửi email, bạn chỉ cần thông qua web ID XML của mẫu làm tham số.

Gửi email bằng mẫu QWeb hoạt động giống hệt như trong công thức trước, nhưng có một số khác biệt nhỏ giữa mẫu email QWeb và Jinja.

Dưới đây là so sánh nhanh giữa cả hai mẫu

Không có cách nào đơn giản để gửi các thông số phụ trong các mẫu email. Bạn sử dụng một tập hợp bản ghi trong biến đối tượng để tìm nạp dữ liệu động. Mặt khác, với các mẫu email QWeb, bạn có thể chuyển các giá trị bổ sung trong ngữ cảnh trình kết xuất thông qua tham số giá trị:

self.message_post_with_view('viin_education.notification_for_responsible_user_template_qweb', giá trị = {'extra_data': 'test'})
  1. Không thể sửa đổi mẫu hiện có cho các module khác trong Jinja, ngược lại trong các mẫu QWeb, bạn có thể sửa đổi mẫu email thông qua kế thừa.

  2. Bạn có thể chọn và sử dụng mẫu Jinja trực tiếp từ trình soạn tin nhắn. Như hình ở góc dưới bên phải sẽ có một trường có tên là Sử dụng mẫu khi chọn sẽ thả xuống danh sách các mẫu và chọn một mẫu Jinja:

    Chọn mẫu Email
  3. Sử dụng QWeb, chọn một mẫu trực tiếp từ trình soạn tin nhắn không phải là một lựa chọn.

  • Tất cả các phương thức (message_post(), message_post_with_template()message_post_with_view()) tôn trọng sở thích của người dùng.

  • Nếu người dùng thay đổi tùy chọn Quản lý thông báo từ mục tùy chọn của người dùng, người dùng sẽ không nhận được email; thay vào đó họ sẽ nhận được thông báo trong giao diện người dùng của Odoo. Điều này cũng tương tự đối với khách hàng; nếu một khách hàng chọn không nhận email, họ sẽ không nhận được bất kỳ thông tin cập nhật nào qua email.

  • Ngoài ra, chuỗi tin nhắn Odoo tuân theo một khái niệm được gọi là kiểu con. Kiểu phụ là được dùng để chỉ nhận email thông tin bạn quan tâm. Bạn có thể vượt qua tham số, subtype_id, trong các phương thức message_post_...() để gửi email dựa trên kiểu con. Thông thường, người dùng sẽ quản lý các loại kiểu phụ của họ từ menu xổ xuống của nút Theo dõi.

    Danh sách người theo dõi và nhận Email

Dựa trên tùy chọn của người dùng, người dùng sẽ chỉ nhận được email cho các tin nhắn Thảo luận.

Quản lý bí danh email (alias)

Bí danh email là tính năng trong Odoo được sử dụng để tạo bản ghi khi gửi đến email. Ví dụ đơn giản nhất về bí danh email là nhóm bán hàng. Bạn chỉ cần gửi một gửi email tới sale@yourdomain.com và Odoo sẽ tạo một bản ghi mới cho Model crm.lead trong sales team.

Gửi email bằng mẫu QWeb. Tạo bí danh email của mình với địa chỉ email là: example@viindoo.com . Nếu bạn gửi một email đến địa chỉ email này, một bản ghi được tạo trong Model education.student.

Làm thế nào để thực hiện

  • Bước 1: Thêm dữ liệu bí danh email vào tệp viin_education/data/mail_template.xml:

<record id="mail_alias_education_student" model="mail.alias">
   <field name="alias_name">Education Student</field>
   <field name="alias_model_id" ref="model_education_student"/>
   <field name="alias_user_id" ref="base.user_admin"/>
   <field name="alias_contact">partners</field>
</record>
  • Bước 2: Thêm các lần nhập sau vào viin_education/models/education_student.py:

import re
from odoo.tools import email_split, email_escape_char
  • Bước 3: Ghi đè phương thức message_new() trong Model education.student:

    Cập nhật module viin_education để áp dụng các thay đổi. Sau đó gửi email example@viindoo.com.

@api.model
def message_new(self, msg_dict, custom_values=None):
   self = self.with_context(default_user_id=False)
   if custom_values is None:
      custom_values = {}
   student_id = self.env['education.student'].search([('state', '=', 'studying')], limit=1)
   custom_values['student_id'] = student_id.id
   email_from = email_escape_char(email_split(msg_dict.get('from'))[0])
   custom_values['responsible_id'] = self._mail_search_on_partner(email_from)
   return super(EducationStudent, self).message_new(msg_dict, custom_values)

Bất cứ khi nào bạn gửi email đến địa chỉ example@viindoo.com, Odoo sẽ tạo một bản ghi education.student mới.

Các bước thực hiện

  • Bước 1: Tạo bản ghi mail.alias. Khi bạn gửi email đến địa chỉ này, Odoo sẽ tạo một bản ghi mới trong Model education.student. Nếu bạn muốn xem danh sách bí danh hoạt động trong hệ thống, mở Cài đặt > Kỹ thuật > Bí danh. DƯới đây là danh sách các trường có sẵn để định cấu hình bí danh:

    • alias_name: Trường này chứa phần cục bộ của địa chỉ email. Ví dụ: example@viindoo.com là phần cục bộ của địa chỉ email.

    • alias_model_id: Tham chiếu mô hình mà bản ghi sẽ được tạo email đến.

    • alias_user_id: Khi nhận được email đến, các bản ghi sẽ được tạo bằng môi trường của người dùng trong trường này.

    • alias_contact: Trường này giữ các tùy chọn bảo mật cho bí danh. Khả thi các tùy chọn là tất cả mọi người, đối tác, người theo dõi và nhân viên.

    • alias_defaults: Khi nhận được email đến, bản ghi của email đó sẽ được tạo trong mô hình được chỉ định trên bí danh. Nếu bạn muốn đặt các giá trị mặc định trong bản ghi, hãy cho các giá trị ở dạng từ điển trong trường này.

  • Bước 2: Thêm các mục nhập cần thiết.

  • Bước 3: Ghi đè phương thức message_new(). Phương thức này được gọi tự động khi nhận được email mới bằng bí danh địa chỉ email. Phương thức này sẽ nhận hai tham số:

    • msg_dict: Tham số này sẽ chứa thông tin (kiểu dữ liệu Dict) về email đã nhận. Nó chứa thông tin email như địa chỉ email của người gửi, địa chỉ email, chủ đề email và nội dung email của người nhận.

    • custom_values: Đây là một giá trị tùy chỉnh được sử dụng để tạo một bản ghi mới. Đây là cùng giá trị bạn đã đặt trên bản ghi bí danh bằng cách sử dụng trường alias_defaults.

Trong công thức trên đã ghi đè phương thức message_new() sau đó chuyển dữ liệu custom_values ​​được cập nhật này tới phương thức super(), sẽ tạo một Model education.student mới. Đây là cách bản ghi được tạo khi bạn gửi một email đến bí danh.

  • Một số mô hình kinh doanh có một yêu cầu có nghĩa là bạn cần một bí danh riêng cho mỗi ghi lại.

  • Ví dụ: crm.team có các bí danh riêng cho mỗi nhóm, chẳng hạn như sale-in@example.com cho Nhóm Ấn Độ và sale-be@example.com cho Nhóm Nước Bỉ. Nếu bạn muốn quản lý các bí danh như vậy trong mô hình của mình, bạn có thể sử dụng mail.alias. hỗn hợp. Để sử dụng nó trong mô hình của bạn, bạn sẽ cần kế thừa mixin:

    Class(models.Model):
       _name = 'crm.team'
       _inherit = ['mail.alias.mixin', 'mail.thread']
    

    Sau khi kế thừa Model mixin, bạn sẽ cần thêm trường alias_name vào Form view của Model mail.alias để người dùng cuối có thể tự thêm bí danh.

Ghi nhật ký các thay đổi của người dùng trong Chatter

Odoo cung cấp một cơ sở tích hợp để ghi nhận lại sự thay đổi của các trường trong phần Chatter. Trong phần này, cần bật tính năng ghi nhật ký thay đổi cho một số trường. Vì vậy khi các thay đổi được thực hiện trong chúng, Odoo sẽ thêm nhật ký vào khu vực Chatter.

Sẵn sàng

Sử dụng module viin_education trước đó. Quản lý bí danh email, ghi nhận lại các thay đổi từ một số trường trong Model education.student.

Làm thế nào để thực hiện

Sửa đổi phần khai báo cho các trường (ở đây ta cần theo dõi sự thay đổi của trường responsible_id), để có thể ghi nhận lại nhật ký cho các trường khi bạn thay đổi nội dung chúng. Điều này được hiển thị trong đoạn mã sau:

class education.student (models.Model):
   _name = 'education.student'
   _inherit = ['mail.thread', 'mail.activity.mixin']

   responsible_id = fields.Many2one('res.users', string='Responsible', tracking=True, help="Responsible for this student.")

Cập nhật module viin_education để áp dụng các thay đổi. Tạo một bản ghi mới trong Model education.student. Nếu bạn kiểm tra phần chat, bạn sẽ thấy các bản ghi sau:

Ghi lại nhật kí thay đổi giá trị của trường

Bất cứ khi nào bạn thực hiện các thay đổi đối với responsible_id, bạn sẽ thấy nhật ký thay đổi gần nhất trong phần chatter. Điều này sẽ giúp bạn xem toàn bộ lịch sử thay đổi của bản ghi.

Thêm thuộc tính tracking = True vào trường cần theo dõi.

Khi bạn đặt thuộc tính tracking = True, Odoo sẽ thêm nhật ký thay đổi trong chatter bất cứ khi nào bạn cập nhật giá trị trường. Nếu bạn bật tính năng theo dõi trên nhiều bản ghi và bạn muốn cung cấp trình tự trong các giá trị theo dõi, bạn cũng có thể chuyển một số vào tham số theo dõi như sau: tracking = 20. Khi bạn vượt qua tracking = True, thì trình tự mặc định được sử dụng, là 100. Ví dụ trên đã thêm thuộc tính tracking = True vào trường responsible_id. Điều này có nghĩa là Odoo sẽ ghi lại các thay đổi khi bạn cập nhật các giá trị của các trường responsible_id.

  • Lưu ý rằng tính năng track_visibility.

Bất cứ khi nào bạn thực hiện các thay đổi giá trị đối với trường responsible_id bạn sẽ thấy một bản ghi mới trong chatter. Điều này sẽ giúp bạn xem toàn bộ lịch sử thay đổi của hồ sơ.

Các bước thực hiện

Thêm thuộc tính tracking = True vào trường bạn muốn. Khi bạn đặt thuộc tính tracking = True, Odoo sẽ thêm nhật ký thay đổi trong chatter, bất cứ khi nào bạn cập nhật giá trị trường. Nếu bạn bật tính năng theo dõi trên nhiều bản ghi và bạn muốn cung cấp trình tự trong các giá trị theo dõi, bạn cũng có thể chuyển một số vào tham số theo dõi như sau: tracking = 20. Khi bạn đặt tracking = True, thì trình tự mặc định được sử dụng, là 100.

Lưu ý rằng tính năng track_visibility chỉ hoạt động nếu mô hình của bạn kế thừa mail.thread vì đoạn mã và nhật ký liên quan đến mã là một phần của mail.thread.

Gửi email thông báo định kỳ

Khung công tác Odoo có hỗ trợ tích hợp để gửi email thông báo định kỳ. Với email thông báo, bạn có thể gửi email với thông tin về KPI của doanh nghiệp.

Ghi nhật ký các thay đổi của người dùng trong chatter.

Làm thế nào để thực hiện

  1. Thêm module phụ thuộc (sử dụng module digest) vào tệp __manifest__.py:

    ...
    'depends': ['mail', 'digest'],
    'data': [
       'data/digest_data.xml',
       'views/digest_digest_views.xml',
    ]
    ...
    
  2. Thêm nội dung cho tệp tin digest_data như sau:

    <?xml version='1.0' encoding='utf-8'?>
    <odoo>
       <data noupdate="1">
          <record id="digest.digest_digest_default" model="digest.digest">
             <field name="kpi_education_student">True</field>
          </record>
       </data>
    
  3. Kế thừa Model digest.digest và thêm các trường tính toán giá trị cho KPI:

    class Digest(models.Model):
        _inherit = 'digest.digest'
    
        kpi_education_student = fields.Boolean('Education Student')
        kpi_education_student_value = fields.Integer(compute='_compute_kpi_education_student_value')
    
        def _compute_kpi_education_student_value(self):
            for r in self:
                start, end = r._get_kpi_compute_parameters()
                r.kpi_education_student_value = self.env['education.student'].search_count([
                   ('create_date', '>=', start),
                   ('create_date', '<', end)
                   ])
    
  4. Kế thừa Form view của Model digest.digest và thêm các trường KPI để hiển thị trên giao diện:

    <?xml version='1.0' encoding='utf-8'?>
    <odoo>
       <record id="digest_digest_view_form" model="ir.ui.view">
          <field name="name">digest.digest.view.form.inherit.education.student</field>
          <field name="model">digest.digest</field>
          <field name="inherit_id" ref="digest.digest_digest_view_form"/>
          <field name="arch" type="xml">
             <xpath expr="//group[@name='kpi_general']" position="after">
                <group name="kpi_education_student" string="Education Student">
                   <field name="kpi_education_student"/>
                </group>
             </xpath>
          </field>
       </record>
    </odoo>
    

Cập nhật module để xác nhận các thay đổi. Sau khi bạn cập nhật module, hãy bật Chế độ phát triển và mở Cài đặt > Kỹ thuật > Digest Email, sẽ thấy được giao diện như ảnh chụp màn hình dưới đây:

KPI education

Khi bạn bật tính năng này và đã đăng ký Nhận email thông báo, bạn sẽ bắt đầu nhận được thông báo qua email.

Các bước thực hiện

  • Bước 1: Để tạo một email thông báo tùy chỉnh, bạn cần tạo hai trường dữ liệu như sau:

    • Trường đầu tiên sẽ là trường kpi_education_student có kiểu dữ liệu Boolean, được sử dụng để bật và tắt KPI

    • Trường thứ hai sẽ là trường kiểu tính toán và sẽ được gọi để tính toán được giá trị KPI.

      Trường tính toán này sử dụng phương thức _get_kpi_compute_parameters() để tính toán được giá trị KPI trong một khoảng thời gian nhất định cụ thể nào đó và đánh giá từ phía khách hàng. Nếu KPI của bạn tương thích với nhiều trang web, thì bạn có thể sử dụng thông số company để đo lường được KPI với từng công ty.

  • Bước 2, thêm một trường vào dạng xem biểu mẫu thông báo. Trường này được sử dụng để bật / tắt thông báo email. Khi bạn bật nó, bạn sẽ bắt đầu nhận được email thông báo:

    Bật Chế độ phát triển, sau đó mở Cài đặt > Kỹ thuật > Digest Email. Ở đây, bạn có thể cấu hình người nhận email thông báo và đặt định kỳ cho thông báo email. Bạn cũng có thể bật / tắt thông báo email.