Beri tahu anggota Tim Pemeliharaan tentang permintaan baru dengan mewarisi model MaintenanceRequest

Saya ingin memberi tahu semua anggota Tim Pemeliharaan ketika permintaan baru dibuat di dalam tim tersebut.

Saat ini saya memiliki fungsi ini yang ditangani oleh tindakan otomatis seperti ini:

masukkan deskripsi gambar di sini

Kode piton:

body_html = """
    ...
""" + record.name + """
    ...
"""

num_of_members = len(record.maintenance_team_id.member_ids)

if num_of_members:
  members_emails = []

  for i in range(num_of_members):
    members_emails.append(record.maintenance_team_id.member_ids[i].email)

  email_to = ",".join(members_emails)

  mail_pool = env['mail.mail']
  values={}
  values.update({'subject': 'New maintenance request - ' + record.company_id.name})
  values.update({'email_to': email_to})
  values.update({'body_html': body_html})
  msg_id = mail_pool.create(values)

  if msg_id:
    mail_pool.send([msg_id])

Tapi sekarang saya ingin mengubah solusi ini menjadi modul khusus. Apa cara yang benar untuk melakukan ini?

Haruskah saya mewarisi maintenance.request, mengganti metode pembuatan dan mengirim email saya entah bagaimana (bagaimana tepatnya?) dengan isi email yang dikodekan secara hardcode?

class MaintenanceRequest(models.Model):
    _inherit = 'maintenance.request'

    @api.model
    def create(self, vals):
        req = super(MaintenanceRequest, self).create(vals)

        body_html = """
            ...
        """ + req.name + """
            ...
        """
        # ...
        if msg_id:
            mail_pool.send([msg_id])

        return req

Atau adakah cara untuk menghubungkan diri saya ke fungsi yang telah dibuat sebelumnya untuk mengirimkan pemberitahuan dan menyuruhnya dijalankan juga untuk anggota tim? Saya tidak ingin menambahkan mereka semua sebagai pengikut (karena mereka akan menerima spam dengan pembaruan yang tidak perlu tentang permintaan tersebut) - hanya untuk memberi tahu mereka tentang permintaan baru tersebut dan kemudian mereka dapat mengikutinya jika perlu.


person AnJ    schedule 16.08.2019    source sumber


Jawaban (1)


Saya akan membuat mail.template di modul khusus dan mengatur daftar email anggota secara dinamis di dalamnya. Sudah ada beberapa contoh template email sederhana di Odoo yang perlu diperhatikan.

Di Code Anda hanya perlu mengirim email dengan menggunakan template ini.

<record id="my_mail_template" model="mail.template">
    <field name="name">My Mail Template</field>
    <field name="partner_to">${",".join(map(str, object.maintenance_team_id.member_ids.mapped('partner_id').ids))}</field>
    <!-- add all other required fields -->
</record>
@api.model
def create(self, values):
    record = super().create(values)
    template_id = self.env.ref('my_module.my_mail_template').id
    if template_id:
        record.message_post_with_template(template_id)
    return record
person CZoellner    schedule 16.08.2019
comment
Terima kasih balasannya! Tapi saya kesulitan membuat kode ini berfungsi. Tidak ada email yang dikirim bersamanya. Mengapa Anda membiarkan super() kosong? Ini model.py saya: pastebin.com/G5AYAPXu. Ini mail_template.xml: pastebin.com/wCXy6zNq. Dan ini manifesnya: pastebin.com/6xC1XyTH - person AnJ; 16.08.2019
comment
Kosongkan super() dimungkinkan sejak Python 3. Panggil kelas Anda MaintenanceRequest dan hapus _name sepenuhnya. Sisanya tampak baik-baik saja bagi saya. - person CZoellner; 16.08.2019
comment
Jadi saya melakukan itu tapi sayangnya masih belum ada email yang dihasilkan. Ini models.py saya sekarang: pastebin.com/a3T8VgDW. Templat email baru terlihat di dalam UI pengembang. - person AnJ; 19.08.2019
comment
Apakah Anda memeriksa di Pengaturan/teknis/Email/Email? Mungkin ada yang salah dengan email yang dihasilkan? - person CZoellner; 19.08.2019
comment
Ya, tidak ada email di sana. - person AnJ; 19.08.2019
comment
Setelah memulai ulang layanan Odoo sekali lagi, kini saya mendapatkan pesan kesalahan saat mencoba membuat permintaan baru: pastebin.com/1V3mSmGJ - person AnJ; 19.08.2019
comment
Lihat ke dalam log untuk mendapatkan kesalahan lengkap. Tapi setidaknya Odoo mencoba merendernya, jadi Anda berada di jalur yang benar. - person CZoellner; 19.08.2019
comment
Kamu benar. Di dalam log /var/log/odoo/odoo-server.log saya melihat ini: jinja2.exceptions.UndefinedError: 'odoo.api.maintenance.request object' has no attribute 'partner_id'. Ternyata ada masalah dengan baris kode ini di dalam template email: <field name="lang">${object.partner_id.lang}</field>. Saya menghapusnya dan sekarang berfungsi dengan baik (saya juga harus menghapus template yang dibuat sebelumnya dan kemudian memuat modul lagi). - person AnJ; 19.08.2019