From 5af52eacbdf05669918aab0cbd8fe512d1f2dbd9 Mon Sep 17 00:00:00 2001 From: resteve Date: Fri, 9 Oct 2015 00:02:14 +0200 Subject: [PATCH] Change Party Event to Activity to register events related to party --- template.py | 81 ++++++++++++++----- template.xml | 8 ++ tryton.cfg | 2 + ...activity_electronic_mail_template_form.xml | 12 +++ 4 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 view/activity_electronic_mail_template_form.xml diff --git a/template.py b/template.py index 249a07a..8b1ddea 100644 --- a/template.py +++ b/template.py @@ -74,6 +74,9 @@ class Template(ModelSQL, ModelView): help='HTML CSS style') custom_style = fields.Text('Custom Style', help='Custom HTML CSS style') + activity = fields.Char('Activity', + help='Generate a new activity record related a party:\n' \ + '${record.party.id}') @classmethod def __setup__(cls): @@ -314,13 +317,13 @@ class Template(ModelSQL, ModelView): def render_and_send(self, records): """ Render the template and send - :param template_id: Template :param records: List Object of the records """ pool = Pool() ElectronicMail = pool.get('electronic.mail') EmailConfiguration = pool.get('electronic.mail.configuration') + activities = [] for record in records: email_message = self.render(record) @@ -345,7 +348,14 @@ class Template(ModelSQL, ModelView): electronic_email.send_email() logger.info('Send email: %s' % (electronic_email.rec_name)) - self.add_event(record, electronic_email) # add event + activities.append({ + 'record': record, + 'template': self, + 'mail': electronic_email, + }) + + if activities: + self.add_activities(activities) # add activities return @classmethod @@ -363,28 +373,63 @@ class Template(ModelSQL, ModelView): trigger = Trigger(trigger_id) return trigger.email_template.render_and_send(records) - def add_event(self, record, electronic_email): + @classmethod + def add_activities(cls, records): """ - Add event if party_event is installed - :param template: Browse Record of the template - :param record: Browse record of the record - :param electronic_email: Browse record email to send + Add activities related to party + :param records: {'record', 'template', 'mail'} """ cursor = Transaction().cursor cursor.execute( "SELECT state " "from ir_module " - "where state='installed' and name = 'party_event'") - party_event = cursor.fetchall() - if party_event and self.party: - party = self.eval(self.party, record) - resource = 'electronic.mail,%s' % electronic_email.id - values = { - 'subject': electronic_email.subject, - 'description': electronic_email.body_plain, - } - Pool().get('party.event').create_event(party, resource, values) - return True + "where state='installed' and name = 'activity'") + activity_installed = cursor.fetchall() + if not activity_installed: + return + + pool = Pool() + Activity = pool.get('activity.activity') + ActivityType = pool.get('activity.type') + ActivityReference = pool.get('activity.reference') + ModelData = pool.get('ir.model.data') + Party = pool.get('party.party') + + type_id = ActivityType(ModelData.get_id( + 'activity', 'outgoing_email_type')) + + activities = [] + for r in records: + record = r['record'] + template = r['template'] + mail = r['mail'] + + if template.activity: + activity = Activity() + activity.activity_type = type_id + activity.subject = mail.subject + activity.activity_type + activity.resource = 'electronic.mail,%s' % mail.id + activity.state = 'held' + activity.description = mail.body_plain + + party = template.eval(template.activity, record) + if party: + activity.party = Party(party) + + resources = ActivityReference.search([ + ('model', '=', template.model) + ]) + if resources: + resource, = resources + activity.resource = '%s,%s' % ( + resource.model.model, + record.id) + + activities.append(activity) + + if activities: + Activity.save(activities) def get_attachments(self, records): record_ids = [r.id for r in records] diff --git a/template.xml b/template.xml index bef360a..7e3e407 100644 --- a/template.xml +++ b/template.xml @@ -46,4 +46,12 @@ The COPYRIGHT file at the top level of this repository contains the full copyrig + + + + electronic.mail.template + + activity_electronic_mail_template_form + + diff --git a/tryton.cfg b/tryton.cfg index 607799c..28320c9 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -5,6 +5,8 @@ depends: res smtp electronic_mail +extra-depends: + activity xml: template.xml trigger.xml diff --git a/view/activity_electronic_mail_template_form.xml b/view/activity_electronic_mail_template_form.xml new file mode 100644 index 0000000..c808abe --- /dev/null +++ b/view/activity_electronic_mail_template_form.xml @@ -0,0 +1,12 @@ + + + + + +