แจ้งสมาชิกทีมบำรุงรักษาเกี่ยวกับคำขอใหม่โดยสืบทอดโมเดล MaintenanceRequest

ฉันต้องการแจ้งให้สมาชิกทีมบำรุงรักษาทุกคนทราบเมื่อมีการสร้างคำขอใหม่ภายในทีมนั้น

ในขณะนี้ ฉันมีฟังก์ชันนี้ที่จัดการโดยการดำเนินการอัตโนมัติดังนี้:

ป้อนคำอธิบายรูปภาพที่นี่

รหัสหลาม:

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])

แต่ตอนนี้ฉันต้องการแปลงโซลูชันนี้เป็นโมดูลที่กำหนดเอง วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

ฉันควรสืบทอด maintenance.request แทนที่วิธีการสร้างและส่งอีเมลของฉันด้วยวิธีใดวิธีหนึ่ง (แน่นอนแค่ไหน) ด้วยเนื้อหาอีเมลแบบฮาร์ดโค้ด

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

หรือมีวิธีที่จะดึงดูดตัวเองให้เข้ากับฟังก์ชั่นที่สร้างไว้ล่วงหน้าเพื่อส่งการแจ้งเตือนและบอกให้มันทำงานให้กับสมาชิกในทีมด้วย? ฉันไม่ต้องการเพิ่มพวกเขาทั้งหมดเป็นผู้ติดตาม (เพราะพวกเขาจะได้รับสแปมพร้อมการอัปเดตที่ไม่จำเป็นเกี่ยวกับคำขอ) - เพียงเพื่อแจ้งให้ทราบเกี่ยวกับคำขอใหม่ จากนั้นพวกเขาสามารถติดตามได้หากจำเป็น


person AnJ    schedule 16.08.2019    source แหล่งที่มา


คำตอบ (1)


ฉันจะสร้าง mail.template ในโมดูลที่กำหนดเองและตั้งค่ารายชื่ออีเมลของสมาชิกแบบไดนามิกในนั้น มีตัวอย่างเทมเพลตอีเมลง่ายๆ ใน Odoo ที่ต้องพิจารณาอยู่แล้ว

ใน Code คุณเพียงแค่ต้องส่งอีเมลโดยใช้เทมเพลตนี้

<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
ขอบคุณสำหรับการตอบกลับ! แต่ฉันมีปัญหาในการทำให้โค้ดนี้ใช้งานได้ ไม่มีอีเมล์ถูกส่งไปด้วย ทำไมคุณถึงปล่อยให้ super() ว่างเปล่า? นี่คือ models.py ของฉัน: pastebin.com/G5AYAPXu นี่คือ mail_template.xml: pastebin.com/wCXy6zNq และนี่คือรายการ: pastebin.com/6xC1XyTH - person AnJ; 16.08.2019
comment
การเว้นว่าง super() เป็นไปได้ตั้งแต่ Python 3 เรียกคลาสของคุณ MaintenanceRequest และลบ _name ออกทั้งหมด ที่เหลือก็ดูโอเคสำหรับฉัน - person CZoellner; 16.08.2019
comment
ดังนั้นฉันจึงทำเช่นนั้น แต่น่าเสียดายที่ยังไม่มีการสร้างอีเมลขึ้นมา นี่คือ models.py ของฉันตอนนี้: pastebin.com/a3T8VgDW เทมเพลตอีเมลใหม่จะปรากฏภายใน UI ของนักพัฒนา - person AnJ; 19.08.2019
comment
คุณได้ตรวจสอบในการตั้งค่า/เทคนิค/อีเมล/อีเมลแล้วหรือยัง? อาจมีบางอย่างผิดปกติกับเมลที่สร้างขึ้น? - person CZoellner; 19.08.2019
comment
ใช่ ไม่มีอีเมลอยู่ตรงนั้น - person AnJ; 19.08.2019
comment
หลังจากเริ่มบริการ Odoo ใหม่อีกครั้ง ตอนนี้ได้รับข้อผิดพลาดเมื่อพยายามสร้างคำขอใหม่: pastebin.com/1V3mSmGJ - person AnJ; 19.08.2019
comment
ดูบันทึกเพื่อดูข้อผิดพลาดทั้งหมด แต่อย่างน้อย Odoo ก็พยายามเรนเดอร์ ดังนั้นคุณมาถูกทางแล้ว - person CZoellner; 19.08.2019
comment
คุณพูดถูก. บันทึกภายใน /var/log/odoo/odoo-server.log ฉันเห็นสิ่งนี้: jinja2.exceptions.UndefinedError: 'odoo.api.maintenance.request object' has no attribute 'partner_id' ปรากฎว่ามีปัญหากับบรรทัดโค้ดนี้ภายในเทมเพลตอีเมล: <field name="lang">${object.partner_id.lang}</field> ฉันลบมันออกแล้วและตอนนี้ก็ทำงานได้ดี (ฉันต้องลบเทมเพลตที่สร้างไว้ก่อนหน้านี้ด้วย จากนั้นจึงโหลดโมดูลอีกครั้ง) - person AnJ; 19.08.2019