Přejít na obsah
Menu
This question has been flagged
2 Odpovědi
1193 Zobrazení

Odoo 14.0 (enterprise)


How to create or design an activity type that, once marked as done, returns a notification to the original sender.


Case:

- User X wants User Y to review a document (sale order, invoice, whatever)

- User X creates an activity on the document and assigns it to User Y

- User Y checks the document (how or what is irrelevant) and responds with "OK" + marks activity as done

-> How do you notify User X that User Y has performed the action?

Avatar
Zrušit
Nejlepší odpověď

For Odoo 18.0, for any Activity Type configured to Keep Done (keep activities marked as done in the activity view)​, an Automation like this:

with code like this:

for record in records:

    channel = env['discuss.channel'].search([('id','=',5)])

    if record.date_done and len(channel) == 1:
       
        # what kind of document
        doc = env['ir.model'].search([('model','=',record.res_model)]).name
       
        # activity details
        type = record.activity_type_id
        summary = record.summary
        note = record.note
       
        # append summary and/or note
        activity = type.name
        if summary:
            activity += f': {summary}'
        if note:
            activity += f'{note}'
       
        # calculate on time or not
        days = (datetime.date.today() - record.date_deadline).days
        if days == 0:
            when = 'on time'
        if days < 0:
            when = f'{abs(days)} days early'
        if days > 0:
            when = f'{days} days late'
        if days == -1:
            when = 'a day early'
        if days == 1:
            when = 'a day late'
       
# either (1) create a new activity or (2) send a message

# (1) define new activity
new_activity_vals = { 'res_model_id': record.res_model_id.id, 'res_id': record.res_id, 'activity_type_id': env.ref('mail.mail_activity_data_todo').id, 'summary': 'Review Completed Activity', 'user_id': record.create_uid.id, }
# (1) create activity env['mail.activity'].create(new_activity_vals)
        # (2) define message
        body = f'<b>{activity}</b> for {doc} <b><u>'
body += f'<a href="#" data-oe-model="{record.res_model}" '
body += f'data-oe-id="{record.res_id}">{env[record.res_model].search([('id','=',record.res_id)]).name}'
body += f'</a></u></b> completed {when}.'
       
        # (2) post message
        env['discuss.channel'].browse(5).message_post(body=body,
subtype_xmlid="mail.mt_comment",
body_is_html=True,message_type="auto_comment")


Here we assume the notification goes to a Discuss Channel with ID = 5 and we check if this channel still exists each time (assuming management will get stick of these after a while and delete the channel!)


Note: Your Odoo Digital Advisor or Odoo Partner can help you with this Automation if you don't have the technical skills - this is a prototype not a solution

Avatar
Zrušit
Nejlepší odpověď

def notify_sender(sender_email, activity_name):

    # Simulating sending an email notification

    notification_message = f"Dear User,\n\nYour activity '{activity_name}' has been successfully completed.\n\nBest regards,\nYour Team"

   

    # Here you would integrate with an email service to send the notification

    print(f"Sending notification to {sender_email}:\n{notification_message}")


# Example usage

notify_sender(" @https://www.odoo.com/",http://taproad.io "Data Processing")


Avatar
Zrušit